订单和充值明细

This commit is contained in:
zengtao01
2024-04-01 09:11:59 +08:00
parent 6a7ad4cde1
commit 02d3b47a9d
40 changed files with 1879 additions and 2 deletions

View File

@ -55,4 +55,10 @@ public interface ErrorCodeConstants {
ErrorCode GROUP_NOT_EXISTS = new ErrorCode(1_004_012_000, "用户分组不存在"); ErrorCode GROUP_NOT_EXISTS = new ErrorCode(1_004_012_000, "用户分组不存在");
ErrorCode GROUP_HAS_USER = new ErrorCode(1_004_012_001, "用户分组下存在用户,无法删除"); ErrorCode GROUP_HAS_USER = new ErrorCode(1_004_012_001, "用户分组下存在用户,无法删除");
//========== 用户余额明细 1-004-013-000 =============
ErrorCode CARD_NOT_EXISTS = new ErrorCode(1_004_013_000, "余额明细不存在");
ErrorCode ORDER_NOT_EXISTS = new ErrorCode(1_004_013_000, "订单不存在");
ErrorCode ORDER_DETAIL_NOT_EXISTS = new ErrorCode(1_004_013_000, "订单明细不存在");
} }

View File

@ -0,0 +1,114 @@
package cn.iocoder.yudao.module.member.controller.admin.card;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
import cn.iocoder.yudao.module.member.controller.admin.card.vo.CardPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.card.vo.CardRespVO;
import cn.iocoder.yudao.module.member.controller.admin.card.vo.CardSaveReqVO;
import cn.iocoder.yudao.module.member.dal.dataobject.card.CardDO;
import cn.iocoder.yudao.module.member.service.card.CardService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
@Tag(name = "管理后台 - 余额变动明细")
@RestController
@RequestMapping("/member/card")
@Validated
public class CardController {
@Resource
private CardService cardService;
@PostMapping("/create")
@Operation(summary = "创建余额变动明细")
@PreAuthorize("@ss.hasPermission('member:card:create')")
public CommonResult<Long> createCard(@Valid @RequestBody CardSaveReqVO createReqVO) {
return success(cardService.createCard(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新余额变动明细")
@PreAuthorize("@ss.hasPermission('member:card:update')")
public CommonResult<Boolean> updateCard(@Valid @RequestBody CardSaveReqVO updateReqVO) {
cardService.updateCard(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除余额变动明细")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('member:card:delete')")
public CommonResult<Boolean> deleteCard(@RequestParam("id") Long id) {
cardService.deleteCard(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得余额变动明细")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('member:card:query')")
public CommonResult<CardRespVO> getCard(@RequestParam("id") Long id) {
CardDO card = cardService.getCard(id);
return success(BeanUtils.toBean(card, CardRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得余额变动明细分页")
@PreAuthorize("@ss.hasPermission('member:card:query')")
public CommonResult<PageResult<CardRespVO>> getCardPage(@Valid CardPageReqVO pageReqVO) {
PageResult<CardDO> pageResult = cardService.getCardPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, CardRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出余额变动明细 Excel")
@PreAuthorize("@ss.hasPermission('member:card:export')")
@OperateLog(type = EXPORT)
public void exportCardExcel(@Valid CardPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<CardDO> list = cardService.getCardPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "余额变动明细.xls", "数据", CardRespVO.class,
BeanUtils.toBean(list, CardRespVO.class));
}
@PutMapping("/recharge")
@Operation(summary = "充值")
//@PreAuthorize("@ss.hasPermission('member:card:update')")
public CommonResult<Boolean> recharge(BigDecimal money) {
return success(cardService.recharge(money,CardDO.ADD));
}
@GetMapping("/getMoney")
@Operation(summary = "获取余额")
public CommonResult<BigDecimal> getMoney() {
return success(cardService.getMoney());
}
}

View File

@ -0,0 +1,37 @@
package cn.iocoder.yudao.module.member.controller.admin.card.vo;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 余额变动明细分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class CardPageReqVO extends PageParam {
@Schema(description = "卡号", example = "23469")
private Long userId;
@Schema(description = "余额")
private BigDecimal money;
@Schema(description = "加减标志01")
private String flag;
@Schema(description = "变动金额")
private BigDecimal changeMoney;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

View File

@ -0,0 +1,40 @@
package cn.iocoder.yudao.module.member.controller.admin.card.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 余额变动明细 Response VO")
@Data
@ExcelIgnoreUnannotated
public class CardRespVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "21508")
@ExcelProperty("编号")
private Long id;
@Schema(description = "卡号", example = "23469")
@ExcelProperty("卡号")
private String cardId;
@Schema(description = "余额")
@ExcelProperty("余额")
private BigDecimal money;
@Schema(description = "加减标志01")
@ExcelProperty("加减标志01")
private String flag;
@Schema(description = "变动金额")
@ExcelProperty("变动金额")
private BigDecimal changeMoney;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
}

View File

@ -0,0 +1,27 @@
package cn.iocoder.yudao.module.member.controller.admin.card.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
@Schema(description = "管理后台 - 余额变动明细新增/修改 Request VO")
@Data
public class CardSaveReqVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "21508")
private Long id;
@Schema(description = "用户Id",example = "23469")
private Long userId;
@Schema(description = "余额")
private BigDecimal money;
@Schema(description = "加减标志01")
private String flag;
@Schema(description = "变动金额")
private BigDecimal changeMoney;
}

View File

@ -0,0 +1,71 @@
package cn.iocoder.yudao.module.member.controller.admin.order;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Tag(name = "管理后台 - 会员订单")
@RestController
@RequestMapping("/member/order")
@Validated
public class OrderController {
//@Resource
//private OrderService orderService;
//
//@PostMapping("/create")
//@Operation(summary = "创建会员订单")
//@PreAuthorize("@ss.hasPermission('member:order:create')")
//public CommonResult<Long> createOrder(@Valid @RequestBody OrderSaveReqVO createReqVO) {
// return success(orderService.createOrder(createReqVO));
//}
//
//@PutMapping("/update")
//@Operation(summary = "更新会员订单")
//@PreAuthorize("@ss.hasPermission('member:order:update')")
//public CommonResult<Boolean> updateOrder(@Valid @RequestBody OrderSaveReqVO updateReqVO) {
// orderService.updateOrder(updateReqVO);
// return success(true);
//}
//
//@DeleteMapping("/delete")
//@Operation(summary = "删除会员订单")
//@Parameter(name = "id", description = "编号", required = true)
//@PreAuthorize("@ss.hasPermission('member:order:delete')")
//public CommonResult<Boolean> deleteOrder(@RequestParam("id") Long id) {
// orderService.deleteOrder(id);
// return success(true);
//}
//
//@GetMapping("/get")
//@Operation(summary = "获得会员订单")
//@Parameter(name = "id", description = "编号", required = true, example = "1024")
//@PreAuthorize("@ss.hasPermission('member:order:query')")
//public CommonResult<OrderRespVO> getOrder(@RequestParam("id") Long id) {
// OrderDO order = orderService.getOrder(id);
// return success(BeanUtils.toBean(order, OrderRespVO.class));
//}
//
//@GetMapping("/page")
//@Operation(summary = "获得会员订单分页")
//@PreAuthorize("@ss.hasPermission('member:order:query')")
//public CommonResult<PageResult<OrderRespVO>> getOrderPage(@Valid OrderPageReqVO pageReqVO) {
// PageResult<OrderDO> pageResult = orderService.getOrderPage(pageReqVO);
// return success(BeanUtils.toBean(pageResult, OrderRespVO.class));
//}
//
//@GetMapping("/export-excel")
//@Operation(summary = "导出会员订单 Excel")
//@PreAuthorize("@ss.hasPermission('member:order:export')")
//@OperateLog(type = EXPORT)
//public void exportOrderExcel(@Valid OrderPageReqVO pageReqVO,
// HttpServletResponse response) throws IOException {
// pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
// List<OrderDO> list = orderService.getOrderPage(pageReqVO).getList();
// // 导出 Excel
// ExcelUtils.write(response, "会员订单.xls", "数据", OrderRespVO.class,
// BeanUtils.toBean(list, OrderRespVO.class));
//}
}

View File

@ -0,0 +1,37 @@
package cn.iocoder.yudao.module.member.controller.admin.order.vo;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 会员订单分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class OrderPageReqVO extends PageParam {
@Schema(description = "门店Id", example = "24217")
private String storeId;
@Schema(description = "门店名", example = "赵六")
private String storeName;
@Schema(description = "订单状态", example = "1")
private String orderStatus;
@Schema(description = "总价")
private BigDecimal totalMoney;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

View File

@ -0,0 +1,40 @@
package cn.iocoder.yudao.module.member.controller.admin.order.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 会员订单 Response VO")
@Data
@ExcelIgnoreUnannotated
public class OrderRespVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "19151")
@ExcelProperty("编号")
private Long id;
@Schema(description = "门店Id", example = "24217")
@ExcelProperty("门店Id")
private String storeId;
@Schema(description = "门店名", example = "赵六")
@ExcelProperty("门店名")
private String storeName;
@Schema(description = "订单状态", example = "1")
@ExcelProperty("订单状态")
private String orderStatus;
@Schema(description = "总价")
@ExcelProperty("总价")
private BigDecimal totalMoney;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
}

View File

@ -0,0 +1,27 @@
package cn.iocoder.yudao.module.member.controller.admin.order.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
@Schema(description = "管理后台 - 会员订单新增/修改 Request VO")
@Data
public class OrderSaveReqVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "19151")
private Long id;
@Schema(description = "门店Id", example = "24217")
private String storeId;
@Schema(description = "门店名", example = "赵六")
private String storeName;
@Schema(description = "订单状态", example = "1")
private String orderStatus;
@Schema(description = "总价")
private BigDecimal totalMoney;
}

View File

@ -0,0 +1,71 @@
package cn.iocoder.yudao.module.member.controller.admin.orderdetail;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Tag(name = "管理后台 - 订单明细")
@RestController
@RequestMapping("/member/order-detail")
@Validated
public class OrderDetailController {
//@Resource
//private OrderDetailService orderDetailService;
//
//@PostMapping("/create")
//@Operation(summary = "创建订单明细")
//@PreAuthorize("@ss.hasPermission('member:order-detail:create')")
//public CommonResult<Long> createOrderDetail(@Valid @RequestBody OrderDetailSaveReqVO createReqVO) {
// return success(orderDetailService.createOrderDetail(createReqVO));
//}
//
//@PutMapping("/update")
//@Operation(summary = "更新订单明细")
//@PreAuthorize("@ss.hasPermission('member:order-detail:update')")
//public CommonResult<Boolean> updateOrderDetail(@Valid @RequestBody OrderDetailSaveReqVO updateReqVO) {
// orderDetailService.updateOrderDetail(updateReqVO);
// return success(true);
//}
//
//@DeleteMapping("/delete")
//@Operation(summary = "删除订单明细")
//@Parameter(name = "id", description = "编号", required = true)
//@PreAuthorize("@ss.hasPermission('member:order-detail:delete')")
//public CommonResult<Boolean> deleteOrderDetail(@RequestParam("id") Long id) {
// orderDetailService.deleteOrderDetail(id);
// return success(true);
//}
//
//@GetMapping("/get")
//@Operation(summary = "获得订单明细")
//@Parameter(name = "id", description = "编号", required = true, example = "1024")
//@PreAuthorize("@ss.hasPermission('member:order-detail:query')")
//public CommonResult<OrderDetailRespVO> getOrderDetail(@RequestParam("id") Long id) {
// OrderDetailDO orderDetail = orderDetailService.getOrderDetail(id);
// return success(BeanUtils.toBean(orderDetail, OrderDetailRespVO.class));
//}
//
//@GetMapping("/page")
//@Operation(summary = "获得订单明细分页")
//@PreAuthorize("@ss.hasPermission('member:order-detail:query')")
//public CommonResult<PageResult<OrderDetailRespVO>> getOrderDetailPage(@Valid OrderDetailPageReqVO pageReqVO) {
// PageResult<OrderDetailDO> pageResult = orderDetailService.getOrderDetailPage(pageReqVO);
// return success(BeanUtils.toBean(pageResult, OrderDetailRespVO.class));
//}
//
//@GetMapping("/export-excel")
//@Operation(summary = "导出订单明细 Excel")
//@PreAuthorize("@ss.hasPermission('member:order-detail:export')")
//@OperateLog(type = EXPORT)
//public void exportOrderDetailExcel(@Valid OrderDetailPageReqVO pageReqVO,
// HttpServletResponse response) throws IOException {
// pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
// List<OrderDetailDO> list = orderDetailService.getOrderDetailPage(pageReqVO).getList();
// // 导出 Excel
// ExcelUtils.write(response, "订单明细.xls", "数据", OrderDetailRespVO.class,
// BeanUtils.toBean(list, OrderDetailRespVO.class));
//}
}

View File

@ -0,0 +1,38 @@
package cn.iocoder.yudao.module.member.controller.admin.orderdetail.vo;
import lombok.*;
import java.util.*;
import io.swagger.v3.oas.annotations.media.Schema;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import java.math.BigDecimal;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 订单明细分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class OrderDetailPageReqVO extends PageParam {
@Schema(description = "订单ID", example = "31077")
private String orderId;
@Schema(description = "菜品ID", example = "1216")
private String dishesId;
@Schema(description = "菜品", example = "王五")
private String dishesName;
@Schema(description = "重量")
private BigDecimal weight;
@Schema(description = "热量")
private Double heat;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

View File

@ -0,0 +1,47 @@
package cn.iocoder.yudao.module.member.controller.admin.orderdetail.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
@Schema(description = "管理后台 - 订单明细 Response VO")
@Data
@ExcelIgnoreUnannotated
public class OrderDetailRespVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "20679")
@ExcelProperty("编号")
private Long id;
@Schema(description = "订单ID", example = "31077")
@ExcelProperty("订单ID")
private Long orderId;
@Schema(description = "菜品ID", example = "1216")
@ExcelProperty("菜品ID")
private Long dishesId;
@Schema(description = "菜品", example = "王五")
@ExcelProperty("菜品")
private String dishesName;
@Schema(description = "重量")
@ExcelProperty("重量")
private BigDecimal weight;
@Schema(description = "热量")
@ExcelProperty("热量")
private Double heat;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
@Schema(description = "总价")
private List<OrderDetailRespVO> detailList;
}

View File

@ -0,0 +1,31 @@
package cn.iocoder.yudao.module.member.controller.admin.orderdetail.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
import javax.validation.constraints.*;
import java.math.BigDecimal;
@Schema(description = "管理后台 - 订单明细新增/修改 Request VO")
@Data
public class OrderDetailSaveReqVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "20679")
private Long id;
@Schema(description = "订单ID", example = "31077")
private String orderId;
@Schema(description = "菜品ID", example = "1216")
private String dishesId;
@Schema(description = "菜品", example = "王五")
private String dishesName;
@Schema(description = "重量")
private BigDecimal weight;
@Schema(description = "热量")
private Double heat;
}

View File

@ -118,4 +118,10 @@ public class MemberUserController {
return success(MemberUserConvert.INSTANCE.convertPage(pageResult, tags, levels, groups)); return success(MemberUserConvert.INSTANCE.convertPage(pageResult, tags, levels, groups));
} }
@PutMapping("/bindCard")
@Operation(summary = "绑卡")
public CommonResult<Boolean> bindCard(@Valid @RequestBody BindCardVO vo){
return success(memberUserService.bindCard(vo.getCardId()));
}
} }

View File

@ -0,0 +1,29 @@
package cn.iocoder.yudao.module.member.controller.admin.user.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.NotNull;
/**
* @author zt
* @description <description class purpose>
* @since 2024/3/29
*/
@Data
public class BindCardVO {
@Schema(description = "卡号", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "卡号不能为空")
private String cardId;
@Schema(description = "姓名", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "姓名不能为空")
private String name;
@Schema(description = "身份证", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "身份证不能为空")
private String identity;
}

View File

@ -0,0 +1,97 @@
package cn.iocoder.yudao.module.member.controller.app.order;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
import cn.iocoder.yudao.module.member.controller.app.order.vo.AppOrderPageReqVO;
import cn.iocoder.yudao.module.member.controller.app.order.vo.AppOrderRespVO;
import cn.iocoder.yudao.module.member.controller.app.order.vo.AppOrderSaveReqVO;
import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO;
import cn.iocoder.yudao.module.member.service.order.OrderService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
@Tag(name = "管理后台 - 会员订单")
@RestController
@RequestMapping("/member/order")
@Validated
public class AppOrderController {
@Resource
private OrderService orderService;
@PostMapping("/create")
@Operation(summary = "创建会员订单")
public CommonResult<Long> createOrder(@Valid @RequestBody AppOrderSaveReqVO createReqVO) {
return success(orderService.createOrder(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新会员订单")
public CommonResult<Boolean> updateOrder(@Valid @RequestBody AppOrderSaveReqVO updateReqVO) {
orderService.updateOrder(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除会员订单")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('member:order:delete')")
public CommonResult<Boolean> deleteOrder(@RequestParam("id") Long id) {
orderService.deleteOrder(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得会员订单")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('member:order:query')")
public CommonResult<AppOrderRespVO> getOrder(@RequestParam("id") Long id) {
return success(orderService.getOrder(id));
}
@GetMapping("/page")
@Operation(summary = "获得会员订单分页")
@PreAuthorize("@ss.hasPermission('member:order:query')")
public CommonResult<PageResult<AppOrderRespVO>> getOrderPage(@Valid AppOrderPageReqVO pageReqVO) {
PageResult<DishOrderDO> pageResult = orderService.getOrderPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, AppOrderRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出会员订单 Excel")
@PreAuthorize("@ss.hasPermission('member:order:export')")
@OperateLog(type = EXPORT)
public void exportOrderExcel(@Valid AppOrderPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<DishOrderDO> list = orderService.getOrderPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "会员订单.xls", "数据", AppOrderRespVO.class,
BeanUtils.toBean(list, AppOrderRespVO.class));
}
}

View File

@ -0,0 +1,40 @@
package cn.iocoder.yudao.module.member.controller.app.order.vo;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 会员订单分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class AppOrderPageReqVO extends PageParam {
@Schema(description = "门店Id", example = "24217")
private Long storeId;
@Schema(description = "门店名", example = "赵六")
private String storeName;
@Schema(description = "订单状态", example = "1")
private String orderStatus;
@Schema(description = "用户ID", example = "1")
private Long userId;
@Schema(description = "总价")
private BigDecimal totalMoney;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

View File

@ -0,0 +1,48 @@
package cn.iocoder.yudao.module.member.controller.app.order.vo;
import cn.iocoder.yudao.module.member.controller.app.orderdetail.vo.AppOrderDetailRespVO;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
@Schema(description = "管理后台 - 会员订单 Response VO")
@Data
@ExcelIgnoreUnannotated
public class AppOrderRespVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "19151")
@ExcelProperty("编号")
private Long id;
@Schema(description = "门店Id", example = "24217")
@ExcelProperty("门店Id")
private Long storeId;
@Schema(description = "门店名", example = "赵六")
@ExcelProperty("门店名")
private String storeName;
@Schema(description = "订单状态", example = "1")
@ExcelProperty("订单状态")
private String orderStatus;
@Schema(description = "用户ID", example = "1")
private Long userId;
@Schema(description = "总价")
@ExcelProperty("总价")
private BigDecimal totalMoney;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
@Schema(description = "总价")
private List<AppOrderDetailRespVO> detailList;
}

View File

@ -0,0 +1,30 @@
package cn.iocoder.yudao.module.member.controller.app.order.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
@Schema(description = "管理后台 - 会员订单新增/修改 Request VO")
@Data
public class AppOrderSaveReqVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "19151")
private Long id;
@Schema(description = "门店Id", example = "24217")
private Long storeId;
@Schema(description = "门店名", example = "赵六")
private String storeName;
@Schema(description = "订单状态", example = "1")
private String orderStatus;
@Schema(description = "用户ID", example = "1")
private Long userId;
@Schema(description = "总价")
private BigDecimal totalMoney;
}

View File

@ -0,0 +1,100 @@
package cn.iocoder.yudao.module.member.controller.app.orderdetail;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog;
import cn.iocoder.yudao.module.member.controller.admin.orderdetail.vo.OrderDetailRespVO;
import cn.iocoder.yudao.module.member.controller.app.orderdetail.vo.AppOrderDetailPageReqVO;
import cn.iocoder.yudao.module.member.controller.app.orderdetail.vo.AppOrderDetailSaveReqVO;
import cn.iocoder.yudao.module.member.dal.dataobject.orderdetail.OrderDetailDO;
import cn.iocoder.yudao.module.member.service.orderdetail.OrderDetailService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.util.List;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT;
@Tag(name = "管理后台 - 订单明细")
@RestController
@RequestMapping("/member/order-detail")
@Validated
public class AppOrderDetailController {
@Resource
private OrderDetailService orderDetailService;
@PostMapping("/create")
@Operation(summary = "创建订单明细")
@PreAuthorize("@ss.hasPermission('member:order-detail:create')")
public CommonResult<Long> createOrderDetail(@Valid @RequestBody AppOrderDetailSaveReqVO createReqVO) {
return success(orderDetailService.createOrderDetail(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新订单明细")
@PreAuthorize("@ss.hasPermission('member:order-detail:update')")
public CommonResult<Boolean> updateOrderDetail(@Valid @RequestBody AppOrderDetailSaveReqVO updateReqVO) {
orderDetailService.updateOrderDetail(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除订单明细")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('member:order-detail:delete')")
public CommonResult<Boolean> deleteOrderDetail(@RequestParam("id") Long id) {
orderDetailService.deleteOrderDetail(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得订单明细")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('member:order-detail:query')")
public CommonResult<OrderDetailRespVO> getOrderDetail(@RequestParam("id") Long id) {
OrderDetailDO orderDetail = orderDetailService.getOrderDetail(id);
return success(BeanUtils.toBean(orderDetail, OrderDetailRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得订单明细分页")
@PreAuthorize("@ss.hasPermission('member:order-detail:query')")
public CommonResult<PageResult<OrderDetailRespVO>> getOrderDetailPage(@Valid AppOrderDetailPageReqVO pageReqVO) {
PageResult<OrderDetailDO> pageResult = orderDetailService.getOrderDetailPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, OrderDetailRespVO.class));
}
@GetMapping("/export-excel")
@Operation(summary = "导出订单明细 Excel")
@PreAuthorize("@ss.hasPermission('member:order-detail:export')")
@OperateLog(type = EXPORT)
public void exportOrderDetailExcel(@Valid AppOrderDetailPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<OrderDetailDO> list = orderDetailService.getOrderDetailPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "订单明细.xls", "数据", OrderDetailRespVO.class,
BeanUtils.toBean(list, OrderDetailRespVO.class));
}
}

View File

@ -0,0 +1,40 @@
package cn.iocoder.yudao.module.member.controller.app.orderdetail.vo;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 订单明细分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class AppOrderDetailPageReqVO extends PageParam {
@Schema(description = "订单ID", example = "31077")
private Long orderId;
@Schema(description = "菜品ID", example = "1216")
private Long dishesId;
@Schema(description = "菜品", example = "王五")
private String dishesName;
@Schema(description = "重量")
private BigDecimal weight;
@Schema(description = "热量")
private Double heat;
@Schema(description = "创建时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
}

View File

@ -0,0 +1,44 @@
package cn.iocoder.yudao.module.member.controller.app.orderdetail.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Schema(description = "管理后台 - 订单明细 Response VO")
@Data
@ExcelIgnoreUnannotated
public class AppOrderDetailRespVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "20679")
@ExcelProperty("编号")
private Long id;
@Schema(description = "订单ID", example = "31077")
@ExcelProperty("订单ID")
private Long orderId;
@Schema(description = "菜品ID", example = "1216")
@ExcelProperty("菜品ID")
private Long dishesId;
@Schema(description = "菜品", example = "王五")
@ExcelProperty("菜品")
private String dishesName;
@Schema(description = "重量")
@ExcelProperty("重量")
private BigDecimal weight;
@Schema(description = "热量")
@ExcelProperty("热量")
private Double heat;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("创建时间")
private LocalDateTime createTime;
}

View File

@ -0,0 +1,30 @@
package cn.iocoder.yudao.module.member.controller.app.orderdetail.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
@Schema(description = "管理后台 - 订单明细新增/修改 Request VO")
@Data
public class AppOrderDetailSaveReqVO {
@Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "20679")
private Long id;
@Schema(description = "订单ID", example = "31077")
private Long orderId;
@Schema(description = "菜品ID", example = "1216")
private Long dishesId;
@Schema(description = "菜品", example = "王五")
private String dishesName;
@Schema(description = "重量")
private BigDecimal weight;
@Schema(description = "热量")
private Double heat;
}

View File

@ -0,0 +1,61 @@
package cn.iocoder.yudao.module.member.dal.dataobject.card;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import java.math.BigDecimal;
/**
* 余额变动明细 DO
*
* @author 开发账号
*/
@TableName("member_card")
@KeySequence("member_card_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class CardDO extends BaseDO {
public final static String ADD = "1";
public final static String MINUS = "0";
/**
* 编号
*/
@TableId
private Long id;
/**
* 用户Id
*/
private Long userId;
/**
* 余额
*/
private BigDecimal money;
/**
* 加减标志01
*/
private String flag;
/**
* 变动金额
*/
private BigDecimal changeMoney;
/**
* 消费类型
*/
private String type;
}

View File

@ -0,0 +1,57 @@
package cn.iocoder.yudao.module.member.dal.dataobject.order;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import java.math.BigDecimal;
/**
* 会员订单 DO
*
* @author 开发账号
*/
@TableName("member_dish_order")
@KeySequence("member_order_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class DishOrderDO extends BaseDO {
/**
* 编号
*/
@TableId
private Long id;
/**
* 门店Id
*/
private Long storeId;
/**
* 门店名
*/
private String storeName;
/**
* 订单状态
*/
private String orderStatus;
/**
* 总价
*/
private BigDecimal totalMoney;
/**
* 用户
*/
private Long userId;
}

View File

@ -0,0 +1,57 @@
package cn.iocoder.yudao.module.member.dal.dataobject.orderdetail;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.ToString;
import java.math.BigDecimal;
/**
* 订单明细 DO
*
* @author 开发账号
*/
@TableName("member_order_detail")
@KeySequence("member_order_detail_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class OrderDetailDO extends BaseDO {
/**
* 编号
*/
@TableId
private Long id;
/**
* 订单ID
*/
private Long orderId;
/**
* 菜品ID
*/
private Long dishesId;
/**
* 菜品
*/
private String dishesName;
/**
* 重量
*/
private BigDecimal weight;
/**
* 热量
*/
private Double heat;
}

View File

@ -141,5 +141,13 @@ public class MemberUserDO extends TenantBaseDO {
* 关联 {@link MemberGroupDO#getId()} 字段 * 关联 {@link MemberGroupDO#getId()} 字段
*/ */
private Long groupId; private Long groupId;
/**
* 卡号
*/
private String cardId;
/**
* 人脸
*/
private Long faceId;
} }

View File

@ -0,0 +1,27 @@
package cn.iocoder.yudao.module.member.dal.mysql.card;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.member.controller.admin.card.vo.CardPageReqVO;
import cn.iocoder.yudao.module.member.dal.dataobject.card.CardDO;
import org.apache.ibatis.annotations.Mapper;
/**
* 余额变动明细 Mapper
*
* @author 开发账号
*/
@Mapper
public interface CardMapper extends BaseMapperX<CardDO> {
default PageResult<CardDO> selectPage(CardPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<CardDO>()
.eqIfPresent(CardDO::getUserId, reqVO.getUserId())
.eqIfPresent(CardDO::getMoney, reqVO.getMoney())
.eqIfPresent(CardDO::getFlag, reqVO.getFlag())
.eqIfPresent(CardDO::getChangeMoney, reqVO.getChangeMoney())
.betweenIfPresent(CardDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(CardDO::getId));
}
}

View File

@ -0,0 +1,29 @@
package cn.iocoder.yudao.module.member.dal.mysql.order;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.member.controller.app.order.vo.AppOrderPageReqVO;
import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO;
import org.apache.ibatis.annotations.Mapper;
/**
* 会员订单 Mapper
*
* @author 开发账号
*/
@Mapper
public interface DishOrderMapper extends BaseMapperX<DishOrderDO> {
default PageResult<DishOrderDO> selectPage(AppOrderPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<DishOrderDO>()
.eqIfPresent(DishOrderDO::getStoreId, reqVO.getStoreId())
.likeIfPresent(DishOrderDO::getStoreName, reqVO.getStoreName())
.eqIfPresent(DishOrderDO::getOrderStatus, reqVO.getOrderStatus())
.eqIfPresent(DishOrderDO::getTotalMoney, reqVO.getTotalMoney())
.betweenIfPresent(DishOrderDO::getCreateTime, reqVO.getCreateTime())
.eqIfPresent(DishOrderDO::getUserId, reqVO.getUserId())
.orderByDesc(DishOrderDO::getId));
}
}

View File

@ -0,0 +1,29 @@
package cn.iocoder.yudao.module.member.dal.mysql.orderdetail;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.member.controller.app.orderdetail.vo.AppOrderDetailPageReqVO;
import cn.iocoder.yudao.module.member.dal.dataobject.orderdetail.OrderDetailDO;
import org.apache.ibatis.annotations.Mapper;
/**
* 订单明细 Mapper
*
* @author 开发账号
*/
@Mapper
public interface OrderDetailMapper extends BaseMapperX<OrderDetailDO> {
default PageResult<OrderDetailDO> selectPage(AppOrderDetailPageReqVO reqVO) {
return selectPage(reqVO, new LambdaQueryWrapperX<OrderDetailDO>()
.eqIfPresent(OrderDetailDO::getOrderId, reqVO.getOrderId())
.eqIfPresent(OrderDetailDO::getDishesId, reqVO.getDishesId())
.likeIfPresent(OrderDetailDO::getDishesName, reqVO.getDishesName())
.eqIfPresent(OrderDetailDO::getWeight, reqVO.getWeight())
.eqIfPresent(OrderDetailDO::getHeat, reqVO.getHeat())
.betweenIfPresent(OrderDetailDO::getCreateTime, reqVO.getCreateTime())
.orderByDesc(OrderDetailDO::getId));
}
}

View File

@ -0,0 +1,29 @@
package cn.iocoder.yudao.module.member.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 代码生成的场景枚举
*
* @author 芋道源码
*/
@AllArgsConstructor
@Getter
public enum CostTypeEnum {
WX_PAY("1", "微信充值"),
MORNING("2", "早餐"),
NOON("3", "午餐"),
NIGHT("4", "晚餐"),
;
/**
* 编码
*/
private final String code;
/**
* 类型
*/
private final String name;
}

View File

@ -0,0 +1,66 @@
package cn.iocoder.yudao.module.member.service.card;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.member.controller.admin.card.vo.CardPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.card.vo.CardSaveReqVO;
import cn.iocoder.yudao.module.member.dal.dataobject.card.CardDO;
import javax.validation.Valid;
import java.math.BigDecimal;
/**
* 余额变动明细 Service 接口
*
* @author 开发账号
*/
public interface CardService {
/**
* 创建余额变动明细
*
* @param createReqVO 创建信息
* @return 编号
*/
Long createCard(@Valid CardSaveReqVO createReqVO);
/**
* 更新余额变动明细
*
* @param updateReqVO 更新信息
*/
void updateCard(@Valid CardSaveReqVO updateReqVO);
/**
* 删除余额变动明细
*
* @param id 编号
*/
void deleteCard(Long id);
/**
* 获得余额变动明细
*
* @param id 编号
* @return 余额变动明细
*/
CardDO getCard(Long id);
/**
* 获得余额变动明细分页
*
* @param pageReqVO 分页查询
* @return 余额变动明细分页
*/
PageResult<CardDO> getCardPage(CardPageReqVO pageReqVO);
/**
* 余额变动
*/
Boolean recharge(BigDecimal money, String flag);
/**
* 获取余额
*/
BigDecimal getMoney();
}

View File

@ -0,0 +1,118 @@
package cn.iocoder.yudao.module.member.service.card;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
import cn.iocoder.yudao.module.member.controller.admin.card.vo.CardPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.card.vo.CardSaveReqVO;
import cn.iocoder.yudao.module.member.dal.dataobject.card.CardDO;
import cn.iocoder.yudao.module.member.dal.mysql.card.CardMapper;
import cn.iocoder.yudao.module.member.enums.CostTypeEnum;
import cn.iocoder.yudao.module.member.service.user.MemberUserService;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.math.BigDecimal;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.CARD_NOT_EXISTS;
/**
* 余额变动明细 Service 实现类
*
* @author 开发账号
*/
@Service
@Validated
public class CardServiceImpl implements CardService {
@Resource
private CardMapper cardMapper;
@Resource
private MemberUserService userService;
@Override
public Long createCard(CardSaveReqVO createReqVO) {
// 插入
CardDO card = BeanUtils.toBean(createReqVO, CardDO.class);
cardMapper.insert(card);
// 返回
return card.getId();
}
@Override
public void updateCard(CardSaveReqVO updateReqVO) {
// 校验存在
validateCardExists(updateReqVO.getId());
// 更新
CardDO updateObj = BeanUtils.toBean(updateReqVO, CardDO.class);
cardMapper.updateById(updateObj);
}
@Override
public void deleteCard(Long id) {
// 校验存在
validateCardExists(id);
// 删除
cardMapper.deleteById(id);
}
private void validateCardExists(Long id) {
if (cardMapper.selectById(id) == null) {
throw exception(CARD_NOT_EXISTS);
}
}
@Override
public CardDO getCard(Long id) {
return cardMapper.selectById(id);
}
@Override
public PageResult<CardDO> getCardPage(CardPageReqVO pageReqVO) {
return cardMapper.selectPage(pageReqVO);
}
@Override
public Boolean recharge(BigDecimal money, String flag) {
//获取最新余额
CardDO lastCardDO = getLastCardDO();
CardDO cardDO = new CardDO();
cardDO.setUserId(SecurityFrameworkUtils.getLoginUserId());
cardDO.setFlag(flag);
cardDO.setChangeMoney(money);
cardDO.setType(CostTypeEnum.WX_PAY.getCode());
if(lastCardDO.getMoney() == null){
lastCardDO.setMoney(BigDecimal.ZERO);
}
if(CardDO.ADD.equals(flag)){
cardDO.setMoney(lastCardDO.getMoney().add(money).setScale(2, BigDecimal.ROUND_HALF_UP));
}else {
cardDO.setMoney(lastCardDO.getMoney().subtract(money).setScale(2, BigDecimal.ROUND_HALF_UP));
}
return cardMapper.insert(cardDO)>0;
}
@Override
public BigDecimal getMoney() {
CardDO lastCardDO = getLastCardDO();
if (lastCardDO.getMoney() == null){
return BigDecimal.ZERO;
}
return lastCardDO.getMoney();
}
/**
* 获取当前用户最新余额明细
* @return
*/
public CardDO getLastCardDO(){
CardDO lastCardDO = cardMapper.selectOne(Wrappers.<CardDO>lambdaQuery().eq(CardDO::getUserId, SecurityFrameworkUtils.getLoginUserId())
.orderByDesc(CardDO::getCreateTime).last("limit 1"));
return lastCardDO;
}
}

View File

@ -0,0 +1,63 @@
package cn.iocoder.yudao.module.member.service.order;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.member.controller.app.order.vo.AppOrderPageReqVO;
import cn.iocoder.yudao.module.member.controller.app.order.vo.AppOrderRespVO;
import cn.iocoder.yudao.module.member.controller.app.order.vo.AppOrderSaveReqVO;
import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO;
import javax.validation.Valid;
import java.util.List;
/**
* 会员订单 Service 接口
*
* @author 开发账号
*/
public interface OrderService {
/**
* 创建会员订单
*
* @param createReqVO 创建信息
* @return 编号
*/
Long createOrder(@Valid AppOrderSaveReqVO createReqVO);
/**
* 更新会员订单
*
* @param updateReqVO 更新信息
*/
void updateOrder(@Valid AppOrderSaveReqVO updateReqVO);
/**
* 删除会员订单
*
* @param id 编号
*/
void deleteOrder(Long id);
/**
* 获得会员订单
*
* @param id 编号
* @return 会员订单
*/
AppOrderRespVO getOrder(Long id);
/**
* 获得会员订单分页
*
* @param pageReqVO 分页查询
* @return 会员订单分页
*/
PageResult<DishOrderDO> getOrderPage(AppOrderPageReqVO pageReqVO);
/**
* 获得会员订单分页
* @return 会员订单分页
*/
List<AppOrderRespVO> getOrderList();
}

View File

@ -0,0 +1,108 @@
package cn.iocoder.yudao.module.member.service.order;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
import cn.iocoder.yudao.module.member.controller.app.order.vo.AppOrderPageReqVO;
import cn.iocoder.yudao.module.member.controller.app.order.vo.AppOrderRespVO;
import cn.iocoder.yudao.module.member.controller.app.order.vo.AppOrderSaveReqVO;
import cn.iocoder.yudao.module.member.controller.app.orderdetail.vo.AppOrderDetailRespVO;
import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO;
import cn.iocoder.yudao.module.member.dal.mysql.order.DishOrderMapper;
import cn.iocoder.yudao.module.member.service.orderdetail.OrderDetailService;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.ORDER_NOT_EXISTS;
/**
* 会员订单 Service 实现类
*
* @author 开发账号
*/
@Service
@Validated
public class OrderServiceImpl implements OrderService {
@Resource
private DishOrderMapper dishOrderMapper;
@Resource
private OrderDetailService orderDetailService;
@Override
public Long createOrder(AppOrderSaveReqVO createReqVO) {
// 插入
DishOrderDO order = BeanUtils.toBean(createReqVO, DishOrderDO.class);
dishOrderMapper.insert(order);
// 返回
return order.getId();
}
@Override
public void updateOrder(AppOrderSaveReqVO updateReqVO) {
// 校验存在
DishOrderDO dishOrderDO = dishOrderMapper.selectById(updateReqVO.getId());
if (dishOrderDO == null) {
throw exception(ORDER_NOT_EXISTS);
}
//更新总价
BigDecimal totalMoney = dishOrderDO.getTotalMoney().add(updateReqVO.getTotalMoney()).setScale(2, BigDecimal.ROUND_HALF_UP);
updateReqVO.setTotalMoney(totalMoney);
// 更新
DishOrderDO updateObj = BeanUtils.toBean(updateReqVO, DishOrderDO.class);
dishOrderMapper.updateById(updateObj);
}
@Override
public void deleteOrder(Long id) {
// 校验存在
validateOrderExists(id);
// 删除
dishOrderMapper.deleteById(id);
}
private void validateOrderExists(Long id) {
if (dishOrderMapper.selectById(id) == null) {
throw exception(ORDER_NOT_EXISTS);
}
}
@Override
public AppOrderRespVO getOrder(Long id) {
DishOrderDO order = dishOrderMapper.selectById(id);
AppOrderRespVO appOrderRespVO = BeanUtils.toBean(order, AppOrderRespVO.class);
List<AppOrderDetailRespVO> appOrderDetailRespVOS = orderDetailService.selectListByOrderId(id);
appOrderRespVO.setDetailList(appOrderDetailRespVOS);
return appOrderRespVO;
}
@Override
public PageResult<DishOrderDO> getOrderPage(AppOrderPageReqVO pageReqVO) {
return dishOrderMapper.selectPage(pageReqVO);
}
@Override
public List<AppOrderRespVO> getOrderList() {
Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
List<DishOrderDO> dishOrderDOS = dishOrderMapper.selectList(Wrappers.<DishOrderDO>lambdaQuery().eq(DishOrderDO::getUserId,loginUserId));
List<AppOrderRespVO> vos = new ArrayList<>();
for (DishOrderDO dishOrderDO : dishOrderDOS){
List<AppOrderDetailRespVO> appOrderDetailRespVOS = orderDetailService.selectListByOrderId(dishOrderDO.getId());
AppOrderRespVO appOrderRespVO = BeanUtils.toBean(dishOrderDO, AppOrderRespVO.class);
appOrderRespVO.setDetailList(appOrderDetailRespVOS);
vos.add(appOrderRespVO);
}
return vos;
}
}

View File

@ -0,0 +1,59 @@
package cn.iocoder.yudao.module.member.service.orderdetail;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.member.controller.app.orderdetail.vo.AppOrderDetailPageReqVO;
import cn.iocoder.yudao.module.member.controller.app.orderdetail.vo.AppOrderDetailRespVO;
import cn.iocoder.yudao.module.member.controller.app.orderdetail.vo.AppOrderDetailSaveReqVO;
import cn.iocoder.yudao.module.member.dal.dataobject.orderdetail.OrderDetailDO;
import javax.validation.Valid;
import java.util.List;
/**
* 订单明细 Service 接口
*
* @author 开发账号
*/
public interface OrderDetailService {
/**
* 创建订单明细
*
* @param createReqVO 创建信息
* @return 编号
*/
Long createOrderDetail(@Valid AppOrderDetailSaveReqVO createReqVO);
/**
* 更新订单明细
*
* @param updateReqVO 更新信息
*/
void updateOrderDetail(@Valid AppOrderDetailSaveReqVO updateReqVO);
/**
* 删除订单明细
*
* @param id 编号
*/
void deleteOrderDetail(Long id);
/**
* 获得订单明细
*
* @param id 编号
* @return 订单明细
*/
OrderDetailDO getOrderDetail(Long id);
/**
* 获得订单明细分页
*
* @param pageReqVO 分页查询
* @return 订单明细分页
*/
PageResult<OrderDetailDO> getOrderDetailPage(AppOrderDetailPageReqVO pageReqVO);
List<AppOrderDetailRespVO> selectListByOrderId(Long orderId);
}

View File

@ -0,0 +1,80 @@
package cn.iocoder.yudao.module.member.service.orderdetail;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.member.controller.app.orderdetail.vo.AppOrderDetailPageReqVO;
import cn.iocoder.yudao.module.member.controller.app.orderdetail.vo.AppOrderDetailRespVO;
import cn.iocoder.yudao.module.member.controller.app.orderdetail.vo.AppOrderDetailSaveReqVO;
import cn.iocoder.yudao.module.member.dal.dataobject.orderdetail.OrderDetailDO;
import cn.iocoder.yudao.module.member.dal.mysql.orderdetail.OrderDetailMapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import javax.annotation.Resource;
import java.util.List;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.ORDER_DETAIL_NOT_EXISTS;
/**
* 订单明细 Service 实现类
*
* @author 开发账号
*/
@Service
@Validated
public class OrderDetailServiceImpl implements OrderDetailService {
@Resource
private OrderDetailMapper orderDetailMapper;
@Override
public Long createOrderDetail(AppOrderDetailSaveReqVO createReqVO) {
//todo:计算热量
// 插入
OrderDetailDO orderDetail = BeanUtils.toBean(createReqVO, OrderDetailDO.class);
orderDetailMapper.insert(orderDetail);
// 返回
return orderDetail.getId();
}
@Override
public void updateOrderDetail(AppOrderDetailSaveReqVO updateReqVO) {
// 校验存在
validateOrderDetailExists(updateReqVO.getId());
// 更新
OrderDetailDO updateObj = BeanUtils.toBean(updateReqVO, OrderDetailDO.class);
orderDetailMapper.updateById(updateObj);
}
@Override
public void deleteOrderDetail(Long id) {
// 校验存在
validateOrderDetailExists(id);
// 删除
orderDetailMapper.deleteById(id);
}
private void validateOrderDetailExists(Long id) {
if (orderDetailMapper.selectById(id) == null) {
throw exception(ORDER_DETAIL_NOT_EXISTS);
}
}
@Override
public OrderDetailDO getOrderDetail(Long id) {
return orderDetailMapper.selectById(id);
}
@Override
public PageResult<OrderDetailDO> getOrderDetailPage(AppOrderDetailPageReqVO pageReqVO) {
return orderDetailMapper.selectPage(pageReqVO);
}
@Override
public List<AppOrderDetailRespVO> selectListByOrderId(Long orderId) {
List<OrderDetailDO> orderDetailDOS = orderDetailMapper.selectList(Wrappers.<OrderDetailDO>lambdaQuery().eq(OrderDetailDO::getOrderId, orderId));
return BeanUtils.toBean(orderDetailDOS, AppOrderDetailRespVO.class);
}
}

View File

@ -187,4 +187,10 @@ public interface MemberUserService {
*/ */
boolean updateUserPoint(Long userId, Integer point); boolean updateUserPoint(Long userId, Integer point);
/**
* 用户绑卡
*/
boolean bindCard(String cardId);
} }

View File

@ -3,17 +3,26 @@ package cn.iocoder.yudao.module.member.service.user;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.ListUtil; import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.lang.Assert; import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.*; import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.enums.UserTypeEnum;
import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserPageReqVO; import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserPageReqVO;
import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserUpdateReqVO; import cn.iocoder.yudao.module.member.controller.admin.user.vo.MemberUserUpdateReqVO;
import cn.iocoder.yudao.module.member.controller.app.user.vo.*; import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserResetPasswordReqVO;
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdateMobileByWeixinReqVO;
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdateMobileReqVO;
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdatePasswordReqVO;
import cn.iocoder.yudao.module.member.controller.app.user.vo.AppMemberUserUpdateReqVO;
import cn.iocoder.yudao.module.member.convert.auth.AuthConvert; import cn.iocoder.yudao.module.member.convert.auth.AuthConvert;
import cn.iocoder.yudao.module.member.convert.user.MemberUserConvert; import cn.iocoder.yudao.module.member.convert.user.MemberUserConvert;
import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO;
import cn.iocoder.yudao.module.member.dal.mysql.card.CardMapper;
import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper; import cn.iocoder.yudao.module.member.dal.mysql.user.MemberUserMapper;
import cn.iocoder.yudao.module.member.mq.producer.user.MemberUserProducer; import cn.iocoder.yudao.module.member.mq.producer.user.MemberUserProducer;
import cn.iocoder.yudao.module.system.api.sms.SmsCodeApi; import cn.iocoder.yudao.module.system.api.sms.SmsCodeApi;
@ -64,6 +73,9 @@ public class MemberUserServiceImpl implements MemberUserService {
@Resource @Resource
private MemberUserProducer memberUserProducer; private MemberUserProducer memberUserProducer;
@Resource
private CardMapper cardMapper;
@Override @Override
public MemberUserDO getUserByMobile(String mobile) { public MemberUserDO getUserByMobile(String mobile) {
return memberUserMapper.selectByMobile(mobile); return memberUserMapper.selectByMobile(mobile);
@ -314,4 +326,10 @@ public class MemberUserServiceImpl implements MemberUserService {
return true; return true;
} }
@Override
public boolean bindCard(String cardId) {
MemberUserDO memberUserDO = memberUserMapper.selectById(SecurityFrameworkUtils.getLoginUserId());
memberUserDO.setCardId(cardId);
return memberUserMapper.updateById(memberUserDO) > 0;
}
} }

View File

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.iocoder.yudao.module.member.dal.mysql.card.CardMapper">
<!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
文档可见https://www.iocoder.cn/MyBatis/x-plugins/
-->
</mapper>