diff --git a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/StoreResult.java b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/StoreResult.java index 249877da..2f124a9e 100644 --- a/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/StoreResult.java +++ b/yudao-framework/yudao-common/src/main/java/cn/iocoder/yudao/framework/common/pojo/StoreResult.java @@ -16,7 +16,7 @@ import java.util.Objects; * @param 数据泛型 */ @Data -public class StoreResult implements Serializable { +public class StoreResult { /** * 错误码 @@ -37,79 +37,29 @@ public class StoreResult implements Serializable { private Boolean success; - /** - * 将传入的 result 对象,转换成另外一个泛型结果的对象 - * - * 因为 A 方法返回的 CommonResult 对象,不满足调用其的 B 方法的返回,所以需要进行转换。 - * - * @param result 传入的 result 对象 - * @param 返回的泛型 - * @return 新的 CommonResult 对象 - */ - public static StoreResult error(StoreResult result) { - return error(result.getStatusCode(), result.getMessage()); - } - - public static StoreResult error(String code, String message) { - Assert.isTrue(!GlobalErrorCodeConstants.SUCCESS.getCode().equals(code), "code 必须是错误的!"); - StoreResult result = new StoreResult<>(); - result.statusCode = code; - result.message = message; - return result; - } - - public static StoreResult error(ErrorCode errorCode) { - return error(errorCode.getCode().toString(), errorCode.getMsg()); - } public static StoreResult success(T data) { StoreResult result = new StoreResult<>(); result.statusCode = "200"; result.data = data; - result.message = ""; + result.message = "操作成功"; result.success = true; return result; } - public static boolean isSuccess(String code) { - return Objects.equals(code, GlobalErrorCodeConstants.SUCCESS.getCode().toString()); + public static StoreResult fail(String message) { + StoreResult result = new StoreResult<>(); + result.statusCode = "300"; + result.message = message; + result.success = false; + return result; } - @JsonIgnore // 避免 jackson 序列化 - public boolean isSuccess() { - return isSuccess(statusCode); - } - @JsonIgnore // 避免 jackson 序列化 - public boolean isError() { - return !isSuccess(); - } - // ========= 和 Exception 异常体系集成 ========= - /** - * 判断是否有异常。如果有,则抛出 {@link ServiceException} 异常 - */ - public void checkError() throws ServiceException { - if (isSuccess()) { - return; - } - // 业务异常 - throw new ServiceException(Integer.valueOf(statusCode), message); - } - /** - * 判断是否有异常。如果有,则抛出 {@link ServiceException} 异常 - * 如果没有,则返回 {@link #data} 数据 - */ - @JsonIgnore // 避免 jackson 序列化 - public T getCheckedData() { - checkError(); - return data; - } - public static StoreResult error(ServiceException serviceException) { - return error(serviceException.getCode().toString(), serviceException.getMessage()); - } + } diff --git a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java index a9d756f4..6f6a5768 100644 --- a/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java +++ b/yudao-module-member/yudao-module-member-api/src/main/java/cn/iocoder/yudao/module/member/enums/ErrorCodeConstants.java @@ -101,6 +101,10 @@ public interface ErrorCodeConstants { ErrorCode STORE_SALE_GOODS_NOT_EXISTS = new ErrorCode(1_007_904_003, "售卖商品不存在"); - ErrorCode STORE_SALE_GOODS_NOT_NULL = new ErrorCode(1_007_904_003, "售卖商品不能为空"); + ErrorCode STORE_SALE_GOODS_NOT_NULL = new ErrorCode(1_007_904_04, "售卖商品不能为空"); + + ErrorCode STORE_ORDER_NOT_EXISTS = new ErrorCode(1_007_904_005, "商品订单不存在"); + + ErrorCode STORE_ORDER_DETAIL_NOT_EXISTS = new ErrorCode(1_007_904_006,"商品订单详情不存在"); } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storegoodstype/StoreGoodsTypeController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storegoodstype/StoreGoodsTypeController.java index abdba498..1e6a2fce 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storegoodstype/StoreGoodsTypeController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storegoodstype/StoreGoodsTypeController.java @@ -92,4 +92,11 @@ public class StoreGoodsTypeController { BeanUtils.toBean(list, StoreGoodsTypeRespVO.class)); } + @GetMapping("/all") + @Operation(summary = "获得商品类别分页") + public CommonResult> getAll() { + List all = storeGoodsTypeService.getAll(); + return success(BeanUtils.toBean(all, StoreGoodsTypeRespVO.class)); + } + } \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storeorder/StoreOrderController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storeorder/StoreOrderController.java new file mode 100644 index 00000000..d91a3576 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storeorder/StoreOrderController.java @@ -0,0 +1,95 @@ +package cn.iocoder.yudao.module.member.controller.admin.storeorder; + +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import javax.validation.constraints.*; +import javax.validation.*; +import javax.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; +import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.member.controller.admin.storeorder.vo.*; +import cn.iocoder.yudao.module.member.dal.dataobject.storeorder.StoreOrderDO; +import cn.iocoder.yudao.module.member.service.storeorder.StoreOrderService; + +@Tag(name = "管理后台 - 商品订单") +@RestController +@RequestMapping("/member/store-order") +@Validated +public class StoreOrderController { + + @Resource + private StoreOrderService storeOrderService; + + @PostMapping("/create") + @Operation(summary = "创建商品订单") + @PreAuthorize("@ss.hasPermission('member:store-order:create')") + public CommonResult createStoreOrder(@Valid @RequestBody StoreOrderSaveReqVO createReqVO) { + return success(storeOrderService.createStoreOrder(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新商品订单") + @PreAuthorize("@ss.hasPermission('member:store-order:update')") + public CommonResult updateStoreOrder(@Valid @RequestBody StoreOrderSaveReqVO updateReqVO) { + storeOrderService.updateStoreOrder(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除商品订单") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('member:store-order:delete')") + public CommonResult deleteStoreOrder(@RequestParam("id") Integer id) { + storeOrderService.deleteStoreOrder(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得商品订单") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('member:store-order:query')") + public CommonResult getStoreOrder(@RequestParam("id") Integer id) { + StoreOrderDO storeOrder = storeOrderService.getStoreOrder(id); + return success(BeanUtils.toBean(storeOrder, StoreOrderRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得商品订单分页") + @PreAuthorize("@ss.hasPermission('member:store-order:query')") + public CommonResult> getStoreOrderPage(@Valid StoreOrderPageReqVO pageReqVO) { + PageResult pageResult = storeOrderService.getStoreOrderPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, StoreOrderRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出商品订单 Excel") + @PreAuthorize("@ss.hasPermission('member:store-order:export')") + @OperateLog(type = EXPORT) + public void exportStoreOrderExcel(@Valid StoreOrderPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = storeOrderService.getStoreOrderPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "商品订单.xls", "数据", StoreOrderRespVO.class, + BeanUtils.toBean(list, StoreOrderRespVO.class)); + } + +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storeorder/vo/StoreOrderPageReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storeorder/vo/StoreOrderPageReqVO.java new file mode 100644 index 00000000..07c01c9e --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storeorder/vo/StoreOrderPageReqVO.java @@ -0,0 +1,40 @@ +package cn.iocoder.yudao.module.member.controller.admin.storeorder.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +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 StoreOrderPageReqVO extends PageParam { + + @Schema(description = "读取卡号") + private String cardNumber; + + @Schema(description = "人脸", example = "16087") + private Integer openId; + + @Schema(description = "数量") + private Integer number; + + @Schema(description = "设备ID") + private String equipmentCode; + + @Schema(description = "离线缓存ID", example = "11946") + private String uuid; + + @Schema(description = "总价钱", example = "1722") + private Double totalPrice; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storeorder/vo/StoreOrderRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storeorder/vo/StoreOrderRespVO.java new file mode 100644 index 00000000..f032a6d0 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storeorder/vo/StoreOrderRespVO.java @@ -0,0 +1,48 @@ +package cn.iocoder.yudao.module.member.controller.admin.storeorder.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 商品订单 Response VO") +@Data +@ExcelIgnoreUnannotated +public class StoreOrderRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "22788") + @ExcelProperty("编号") + private Integer orderId; + + @Schema(description = "读取卡号") + @ExcelProperty("读取卡号") + private String cardNumber; + + @Schema(description = "人脸", example = "16087") + @ExcelProperty("人脸") + private Integer openId; + + @Schema(description = "数量") + @ExcelProperty("数量") + private Integer number; + + @Schema(description = "设备ID") + @ExcelProperty("设备ID") + private String equipmentCode; + + @Schema(description = "离线缓存ID", example = "11946") + @ExcelProperty("离线缓存ID") + private String uuid; + + @Schema(description = "总价钱", example = "1722") + @ExcelProperty("总价钱") + private Double totalPrice; + + @Schema(description = "创建时间") + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storeorder/vo/StoreOrderSaveReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storeorder/vo/StoreOrderSaveReqVO.java new file mode 100644 index 00000000..59497ca1 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storeorder/vo/StoreOrderSaveReqVO.java @@ -0,0 +1,33 @@ +package cn.iocoder.yudao.module.member.controller.admin.storeorder.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; + +@Schema(description = "管理后台 - 商品订单新增/修改 Request VO") +@Data +public class StoreOrderSaveReqVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "22788") + private Integer orderId; + + @Schema(description = "读取卡号") + private String cardNumber; + + @Schema(description = "人脸", example = "16087") + private Integer openId; + + @Schema(description = "数量") + private Integer number; + + @Schema(description = "设备ID") + private String equipmentCode; + + @Schema(description = "离线缓存ID", example = "11946") + private String uuid; + + @Schema(description = "总价钱", example = "1722") + private Double totalPrice; + +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storeorderdetail/StoreOrderDetailController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storeorderdetail/StoreOrderDetailController.java new file mode 100644 index 00000000..50d06c04 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storeorderdetail/StoreOrderDetailController.java @@ -0,0 +1,95 @@ +package cn.iocoder.yudao.module.member.controller.admin.storeorderdetail; + +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import javax.validation.constraints.*; +import javax.validation.*; +import javax.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; +import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.member.controller.admin.storeorderdetail.vo.*; +import cn.iocoder.yudao.module.member.dal.dataobject.storeorderdetail.StoreOrderDetailDO; +import cn.iocoder.yudao.module.member.service.storeorderdetail.StoreOrderDetailService; + +@Tag(name = "管理后台 - 商品订单详情") +@RestController +@RequestMapping("/member/store-order-detail") +@Validated +public class StoreOrderDetailController { + + @Resource + private StoreOrderDetailService storeOrderDetailService; + + @PostMapping("/create") + @Operation(summary = "创建商品订单详情") + @PreAuthorize("@ss.hasPermission('member:store-order-detail:create')") + public CommonResult createStoreOrderDetail(@Valid @RequestBody StoreOrderDetailSaveReqVO createReqVO) { + return success(storeOrderDetailService.createStoreOrderDetail(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新商品订单详情") + @PreAuthorize("@ss.hasPermission('member:store-order-detail:update')") + public CommonResult updateStoreOrderDetail(@Valid @RequestBody StoreOrderDetailSaveReqVO updateReqVO) { + storeOrderDetailService.updateStoreOrderDetail(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除商品订单详情") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('member:store-order-detail:delete')") + public CommonResult deleteStoreOrderDetail(@RequestParam("id") Integer id) { + storeOrderDetailService.deleteStoreOrderDetail(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得商品订单详情") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('member:store-order-detail:query')") + public CommonResult getStoreOrderDetail(@RequestParam("id") Integer id) { + StoreOrderDetailDO storeOrderDetail = storeOrderDetailService.getStoreOrderDetail(id); + return success(BeanUtils.toBean(storeOrderDetail, StoreOrderDetailRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得商品订单详情分页") + @PreAuthorize("@ss.hasPermission('member:store-order-detail:query')") + public CommonResult> getStoreOrderDetailPage(@Valid StoreOrderDetailPageReqVO pageReqVO) { + PageResult pageResult = storeOrderDetailService.getStoreOrderDetailPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, StoreOrderDetailRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出商品订单详情 Excel") + @PreAuthorize("@ss.hasPermission('member:store-order-detail:export')") + @OperateLog(type = EXPORT) + public void exportStoreOrderDetailExcel(@Valid StoreOrderDetailPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = storeOrderDetailService.getStoreOrderDetailPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "商品订单详情.xls", "数据", StoreOrderDetailRespVO.class, + BeanUtils.toBean(list, StoreOrderDetailRespVO.class)); + } + +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storeorderdetail/vo/StoreOrderDetailPageReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storeorderdetail/vo/StoreOrderDetailPageReqVO.java new file mode 100644 index 00000000..6ca909a7 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storeorderdetail/vo/StoreOrderDetailPageReqVO.java @@ -0,0 +1,34 @@ +package cn.iocoder.yudao.module.member.controller.admin.storeorderdetail.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +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 StoreOrderDetailPageReqVO extends PageParam { + + @Schema(description = "订单ID", example = "28297") + private Integer orderId; + + @Schema(description = "商品ID", example = "3312") + private Integer goodsId; + + @Schema(description = "单价", example = "8942") + private Double customPrice; + + @Schema(description = "数量") + private Integer number; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storeorderdetail/vo/StoreOrderDetailRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storeorderdetail/vo/StoreOrderDetailRespVO.java new file mode 100644 index 00000000..bb595a3c --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storeorderdetail/vo/StoreOrderDetailRespVO.java @@ -0,0 +1,40 @@ +package cn.iocoder.yudao.module.member.controller.admin.storeorderdetail.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 商品订单详情 Response VO") +@Data +@ExcelIgnoreUnannotated +public class StoreOrderDetailRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10028") + @ExcelProperty("编号") + private Integer id; + + @Schema(description = "订单ID", example = "28297") + @ExcelProperty("订单ID") + private Integer orderId; + + @Schema(description = "商品ID", example = "3312") + @ExcelProperty("商品ID") + private Integer goodsId; + + @Schema(description = "单价", example = "8942") + @ExcelProperty("单价") + private Double customPrice; + + @Schema(description = "数量") + @ExcelProperty("数量") + private Integer number; + + @Schema(description = "创建时间") + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storeorderdetail/vo/StoreOrderDetailSaveReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storeorderdetail/vo/StoreOrderDetailSaveReqVO.java new file mode 100644 index 00000000..91f83b01 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/storeorderdetail/vo/StoreOrderDetailSaveReqVO.java @@ -0,0 +1,27 @@ +package cn.iocoder.yudao.module.member.controller.admin.storeorderdetail.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import javax.validation.constraints.*; + +@Schema(description = "管理后台 - 商品订单详情新增/修改 Request VO") +@Data +public class StoreOrderDetailSaveReqVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10028") + private Integer id; + + @Schema(description = "订单ID", example = "28297") + private Integer orderId; + + @Schema(description = "商品ID", example = "3312") + private Integer goodsId; + + @Schema(description = "单价", example = "8942") + private Double customPrice; + + @Schema(description = "数量") + private Integer number; + +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/store/AppStoreController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/store/AppStoreController.java index a1d5c028..69e086c1 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/store/AppStoreController.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/store/AppStoreController.java @@ -2,15 +2,17 @@ package cn.iocoder.yudao.module.member.controller.app.store; import cn.hutool.core.collection.CollectionUtil; import cn.iocoder.yudao.framework.common.pojo.StoreResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated; -import cn.iocoder.yudao.module.member.controller.app.store.dto.StoreBaseDto; -import cn.iocoder.yudao.module.member.controller.app.store.dto.StoreSaleGoodsDto; -import cn.iocoder.yudao.module.member.controller.app.store.dto.StoreUserDto; -import cn.iocoder.yudao.module.member.controller.app.store.vo.StoreGoodsVo; -import cn.iocoder.yudao.module.member.controller.app.store.vo.StoreUserVo; +import cn.iocoder.yudao.module.member.controller.app.store.dto.*; +import cn.iocoder.yudao.module.member.controller.app.store.vo.*; +import cn.iocoder.yudao.module.member.dal.dataobject.storegoods.StoreGoodsDO; +import cn.iocoder.yudao.module.member.dal.dataobject.storegoodstype.StoreGoodsTypeDO; import cn.iocoder.yudao.module.member.dal.dataobject.user.MemberUserDO; import cn.iocoder.yudao.module.member.service.storegoods.StoreGoodsService; import cn.iocoder.yudao.module.member.service.storegoodstype.StoreGoodsTypeService; +import cn.iocoder.yudao.module.member.service.storeorder.StoreOrderService; +import cn.iocoder.yudao.module.member.service.storeorderdetail.StoreOrderDetailService; import cn.iocoder.yudao.module.member.service.storesalegoods.StoreSaleGoodsService; import cn.iocoder.yudao.module.member.service.user.MemberUserService; import io.swagger.v3.oas.annotations.Operation; @@ -22,7 +24,9 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.PostConstruct; import javax.annotation.Resource; +import javax.annotation.security.PermitAll; +import java.util.HashMap; import java.util.List; @Tag(name = "用户 APP - 超市") @@ -40,9 +44,14 @@ public class AppStoreController { private StoreGoodsTypeService goodsTypeService; @Resource private StoreSaleGoodsService saleGoodsService; + @Resource + private StoreOrderService orderService; + @Resource + private StoreOrderDetailService orderDetailService; @GetMapping("/mgcr/memberUser/getMenberTwoList") @Operation(summary = "获取用户关联信息") + @PermitAll public StoreResult> getStoreUser(@RequestBody StoreUserDto dto) { List list = userService.getStoreUser(); return StoreResult.success(StoreUserVo.convert(list)); @@ -50,11 +59,18 @@ public class AppStoreController { @GetMapping("/mgcr/equipment/goodsList") @Operation(summary = "获取菜品库所有菜品") - public StoreResult getGoods(@RequestBody StoreBaseDto dto) { - StoreGoodsVo storeGoodsVo = new StoreGoodsVo(); - storeGoodsVo.setGoodsData(storeGoodsService.getAll(null)); - storeGoodsVo.setCategoryData(goodsTypeService.getAll()); - return StoreResult.success(storeGoodsVo); + public GoodsResult getGoods(@RequestBody StoreBaseDto dto) { + List goodsDOS = storeGoodsService.getAll(null); + List goodsTypeDOS = goodsTypeService.getAll(); + List goodData = BeanUtils.toBean(goodsDOS, StoreGoodsListVo.class); + List categoryData = BeanUtils.toBean(goodsTypeDOS, StoreGoodsTypeListVo.class); + GoodsResult goodsResult = new GoodsResult(); + goodsResult.setStatusCode(200); + goodsResult.setCategoryData(categoryData); + goodsResult.setGoodsData(goodData); + goodsResult.setSuccess(true); + goodsResult.setMessage("操作成功"); + return goodsResult; } @PostMapping("/mgcr/equipment/bindGoods") @@ -76,17 +92,63 @@ public class AppStoreController { @GetMapping("/mgcr/equipment/queryBindGoods") @Operation(summary = "获取营业菜品") - public StoreResult getSaleGoods(@RequestBody StoreBaseDto dto) { - StoreGoodsVo storeGoodsVo = new StoreGoodsVo(); + public GoodsResult getSaleGoods(@RequestBody StoreBaseDto dto) { + GoodsResult goodsResult = new GoodsResult(); + goodsResult.setStatusCode(200); + goodsResult.setSuccess(true); + goodsResult.setMessage("操作成功"); + List goodsIds = saleGoodsService.getGoodsIds(dto.getEquipmentCode()); if(CollectionUtil.isEmpty(goodsIds)){ - return StoreResult.success(storeGoodsVo); + return goodsResult; } - storeGoodsVo.setGoodsData(storeGoodsService.getAll(goodsIds)); - storeGoodsVo.setCategoryData(goodsTypeService.getAll()); - return StoreResult.success(storeGoodsVo); + List goodsDOS = storeGoodsService.getAll(null); + List goodsTypeDOS = goodsTypeService.getAll(); + List goodData = BeanUtils.toBean(goodsDOS, StoreGoodsListVo.class); + List categoryData = BeanUtils.toBean(goodsTypeDOS, StoreGoodsTypeListVo.class); + goodsResult.setCategoryData(categoryData); + goodsResult.setGoodsData(goodData); + return goodsResult; } + @PostMapping("/mgcr/order/paymentCodePayOrder") + @Operation(summary = "创建刷脸支付订单") + public StoreResult> paymentCodePayOrder(@RequestBody StoreOrderDto dto) { + Integer order = orderService.createOrder(dto).getOrderId(); + HashMap map = new HashMap<>(); + map.put("orderId", order); + return StoreResult.success(map); + } + + @PostMapping("/swipingFacePay") + @Operation(summary = "提交刷脸支付") + public StoreResult swipingFacePay(@RequestBody FacePayDto dto) { + UserInfoVo userInfoVo = orderService.facePay(dto); + if(userInfoVo.getBalance()>=0){ + return StoreResult.success(userInfoVo); + }else { + return StoreResult.fail("余额不足"); + } + } + + @PostMapping("/mgcr/order/payByCardOrder") + @Operation(summary = "添加刷卡订单") + public StoreResult> payByCardOrder(@RequestBody StoreOrderDto dto) { + Boolean b = orderService.cardPay(dto); + if(b){ + return StoreResult.success(null); + }else { + return StoreResult.fail("余额不足"); + } + } + + @PostMapping("/mgcr/order/batchCacheOrder") + @Operation(summary = "缓存订单批量上传") + public StoreResult> batchCacheOrder(@RequestBody StoreOrderUploadDto dto) { + orderService.batchCacheOrder(dto); + return StoreResult.success(null); + } + } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/store/dto/FacePayDto.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/store/dto/FacePayDto.java new file mode 100644 index 00000000..29e6f0c6 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/store/dto/FacePayDto.java @@ -0,0 +1,11 @@ +package cn.iocoder.yudao.module.member.controller.app.store.dto; + +import lombok.Data; + +@Data +public class FacePayDto extends StoreBaseDto { + + private Integer orderId; + private String openId; + +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/store/dto/StoreGoodsDto.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/store/dto/StoreGoodsDto.java index 305dee43..7fc332fc 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/store/dto/StoreGoodsDto.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/store/dto/StoreGoodsDto.java @@ -7,4 +7,9 @@ public class StoreGoodsDto { private Integer goodsId; private Double customPrice; private Integer number; + + + public double getTotalPrice() { + return customPrice * number; // 总价 = 单价 * 数量 + } } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/store/dto/StoreLocalOrderDto.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/store/dto/StoreLocalOrderDto.java new file mode 100644 index 00000000..183877d3 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/store/dto/StoreLocalOrderDto.java @@ -0,0 +1,13 @@ +package cn.iocoder.yudao.module.member.controller.app.store.dto; + +import lombok.Data; + +@Data +public class StoreLocalOrderDto extends StoreOrderDto{ + + private String createTime; + private String openId; + private String uuid; + + +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/store/dto/StoreOrderDto.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/store/dto/StoreOrderDto.java new file mode 100644 index 00000000..d7593c64 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/store/dto/StoreOrderDto.java @@ -0,0 +1,9 @@ +package cn.iocoder.yudao.module.member.controller.app.store.dto; + +import lombok.Data; + +@Data +public class StoreOrderDto extends StoreSaleGoodsDto{ + + private String cardNumber; +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/store/dto/StoreOrderUploadDto.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/store/dto/StoreOrderUploadDto.java new file mode 100644 index 00000000..10c5302f --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/store/dto/StoreOrderUploadDto.java @@ -0,0 +1,10 @@ +package cn.iocoder.yudao.module.member.controller.app.store.dto; + +import lombok.Data; + +import java.util.List; + +@Data +public class StoreOrderUploadDto { + private List mgcrCacheOrderVoList; +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/store/vo/GoodsResult.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/store/vo/GoodsResult.java new file mode 100644 index 00000000..b9646763 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/store/vo/GoodsResult.java @@ -0,0 +1,40 @@ +package cn.iocoder.yudao.module.member.controller.app.store.vo; + +import cn.iocoder.yudao.framework.common.exception.ErrorCode; +import cn.iocoder.yudao.framework.common.exception.ServiceException; +import cn.iocoder.yudao.framework.common.exception.enums.GlobalErrorCodeConstants; +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.Data; +import org.apache.poi.ss.formula.functions.T; +import org.springframework.util.Assert; + +import java.io.Serializable; +import java.util.List; +import java.util.Objects; + +/** + * 通用返回 + * + * @param 数据泛型 + */ +@Data +public class GoodsResult{ + + /** + * 错误码 + * + * @see ErrorCode#getCode() + */ + private Integer statusCode; + + /** + * 错误提示,用户可阅读 + * + * @see ErrorCode#getMsg() () + */ + private String message; + + private Boolean success; + List goodsData; + List categoryData; +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/store/vo/StoreGoodsListVo.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/store/vo/StoreGoodsListVo.java new file mode 100644 index 00000000..ab8911e2 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/store/vo/StoreGoodsListVo.java @@ -0,0 +1,23 @@ +package cn.iocoder.yudao.module.member.controller.app.store.vo; + +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +@Data +public class StoreGoodsListVo { + + private Integer goodId; + /** + * 类别Id + */ + private Integer categoryId; + /** + * 商品名称 + */ + private String goodsName; + /** + * 价格 + */ + private Double price; + +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/store/vo/StoreGoodsTypeListVo.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/store/vo/StoreGoodsTypeListVo.java new file mode 100644 index 00000000..1ee0a3c5 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/store/vo/StoreGoodsTypeListVo.java @@ -0,0 +1,12 @@ +package cn.iocoder.yudao.module.member.controller.app.store.vo; + +import lombok.Data; + +@Data +public class StoreGoodsTypeListVo { + private Integer id; + /** + * 类别名称 + */ + private String categoryName; +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/store/vo/StoreGoodsVo.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/store/vo/StoreGoodsVo.java index 5505cee0..252dcb81 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/store/vo/StoreGoodsVo.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/store/vo/StoreGoodsVo.java @@ -9,7 +9,7 @@ import java.util.List; @Data public class StoreGoodsVo { - private List goodsData; - private List categoryData; + private List goodsData; + private List categoryData; } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/store/vo/StoreUserVo.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/store/vo/StoreUserVo.java index dc430ba3..227099c9 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/store/vo/StoreUserVo.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/store/vo/StoreUserVo.java @@ -30,8 +30,8 @@ public class StoreUserVo { vo.setUserId(memberUserDO.getId().intValue()); vo.setUserName(memberUserDO.getNickname()); vo.setCardNumber(memberUserDO.getCardId()); - vo.setFaceId(memberUserDO.getFaceId().toString()); - vo.setOpenId(memberUserDO.getFaceId().toString()); + vo.setFaceId(memberUserDO.getFaceId()==null?null:memberUserDO.getFaceId().toString()); + vo.setOpenId(memberUserDO.getFaceId()==null?null:memberUserDO.getFaceId().toString()); voList.add(vo); } return voList; diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/store/vo/UserInfoVo.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/store/vo/UserInfoVo.java new file mode 100644 index 00000000..04492632 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/store/vo/UserInfoVo.java @@ -0,0 +1,11 @@ +package cn.iocoder.yudao.module.member.controller.app.store.vo; + +import lombok.Data; + +@Data +public class UserInfoVo { + private String userName; + private String avatar; + private Double balance; + +} diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/storeorder/StoreOrderDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/storeorder/StoreOrderDO.java new file mode 100644 index 00000000..ca5dbeb9 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/storeorder/StoreOrderDO.java @@ -0,0 +1,55 @@ +package cn.iocoder.yudao.module.member.dal.dataobject.storeorder; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 商品订单 DO + * + * @author 管理员 + */ +@TableName("member_store_order") +@KeySequence("member_store_order_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class StoreOrderDO extends BaseDO { + + /** + * 编号 + */ + @TableId + private Integer orderId; + /** + * 读取卡号 + */ + private String cardNumber; + /** + * 人脸 + */ + private String openId; + /** + * 数量 + */ + private Integer number; + /** + * 设备ID + */ + private String equipmentCode; + /** + * 离线缓存ID + */ + private String uuid; + /** + * 总价钱 + */ + private Double totalPrice; + +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/storeorderdetail/StoreOrderDetailDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/storeorderdetail/StoreOrderDetailDO.java new file mode 100644 index 00000000..a50bc0e9 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/storeorderdetail/StoreOrderDetailDO.java @@ -0,0 +1,47 @@ +package cn.iocoder.yudao.module.member.dal.dataobject.storeorderdetail; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 商品订单详情 DO + * + * @author 管理员 + */ +@TableName("member_store_order_detail") +@KeySequence("member_store_order_detail_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class StoreOrderDetailDO extends BaseDO { + + /** + * 编号 + */ + @TableId + private Integer id; + /** + * 订单ID + */ + private Integer orderId; + /** + * 商品ID + */ + private Integer goodsId; + /** + * 单价 + */ + private Double customPrice; + /** + * 数量 + */ + private Integer number; + +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/storeorder/StoreOrderMapper.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/storeorder/StoreOrderMapper.java new file mode 100644 index 00000000..6c8ff181 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/storeorder/StoreOrderMapper.java @@ -0,0 +1,32 @@ +package cn.iocoder.yudao.module.member.dal.mysql.storeorder; + +import java.util.*; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.member.dal.dataobject.storeorder.StoreOrderDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.member.controller.admin.storeorder.vo.*; + +/** + * 商品订单 Mapper + * + * @author 管理员 + */ +@Mapper +public interface StoreOrderMapper extends BaseMapperX { + + default PageResult selectPage(StoreOrderPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(StoreOrderDO::getCardNumber, reqVO.getCardNumber()) + .eqIfPresent(StoreOrderDO::getOpenId, reqVO.getOpenId()) + .eqIfPresent(StoreOrderDO::getNumber, reqVO.getNumber()) + .eqIfPresent(StoreOrderDO::getEquipmentCode, reqVO.getEquipmentCode()) + .eqIfPresent(StoreOrderDO::getUuid, reqVO.getUuid()) + .eqIfPresent(StoreOrderDO::getTotalPrice, reqVO.getTotalPrice()) + .betweenIfPresent(StoreOrderDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(StoreOrderDO::getOrderId)); + } + +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/storeorderdetail/StoreOrderDetailMapper.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/storeorderdetail/StoreOrderDetailMapper.java new file mode 100644 index 00000000..9c5149d3 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/storeorderdetail/StoreOrderDetailMapper.java @@ -0,0 +1,30 @@ +package cn.iocoder.yudao.module.member.dal.mysql.storeorderdetail; + +import java.util.*; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.member.dal.dataobject.storeorderdetail.StoreOrderDetailDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.member.controller.admin.storeorderdetail.vo.*; + +/** + * 商品订单详情 Mapper + * + * @author 管理员 + */ +@Mapper +public interface StoreOrderDetailMapper extends BaseMapperX { + + default PageResult selectPage(StoreOrderDetailPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(StoreOrderDetailDO::getOrderId, reqVO.getOrderId()) + .eqIfPresent(StoreOrderDetailDO::getGoodsId, reqVO.getGoodsId()) + .eqIfPresent(StoreOrderDetailDO::getCustomPrice, reqVO.getCustomPrice()) + .eqIfPresent(StoreOrderDetailDO::getNumber, reqVO.getNumber()) + .betweenIfPresent(StoreOrderDetailDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(StoreOrderDetailDO::getId)); + } + +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/enums/CostTypeEnum.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/enums/CostTypeEnum.java index b8ed54f3..5dbad857 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/enums/CostTypeEnum.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/enums/CostTypeEnum.java @@ -20,6 +20,7 @@ public enum CostTypeEnum { REFUND("6","退款"), WITHDRAW("7","微信提现"), CASH_WITHDRAW("8","现金提现"), + SHOPPING("9","购物"), ; /** diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storeorder/StoreOrderService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storeorder/StoreOrderService.java new file mode 100644 index 00000000..e5844b13 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storeorder/StoreOrderService.java @@ -0,0 +1,67 @@ +package cn.iocoder.yudao.module.member.service.storeorder; + +import java.util.*; +import javax.validation.*; +import cn.iocoder.yudao.module.member.controller.admin.storeorder.vo.*; +import cn.iocoder.yudao.module.member.controller.app.store.dto.FacePayDto; +import cn.iocoder.yudao.module.member.controller.app.store.dto.StoreOrderDto; +import cn.iocoder.yudao.module.member.controller.app.store.dto.StoreOrderUploadDto; +import cn.iocoder.yudao.module.member.controller.app.store.vo.UserInfoVo; +import cn.iocoder.yudao.module.member.dal.dataobject.storeorder.StoreOrderDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.web.bind.annotation.RequestBody; + +/** + * 商品订单 Service 接口 + * + * @author 管理员 + */ +public interface StoreOrderService { + + /** + * 创建商品订单 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Integer createStoreOrder(@Valid StoreOrderSaveReqVO createReqVO); + + /** + * 更新商品订单 + * + * @param updateReqVO 更新信息 + */ + void updateStoreOrder(@Valid StoreOrderSaveReqVO updateReqVO); + + /** + * 删除商品订单 + * + * @param id 编号 + */ + void deleteStoreOrder(Integer id); + + /** + * 获得商品订单 + * + * @param id 编号 + * @return 商品订单 + */ + StoreOrderDO getStoreOrder(Integer id); + + /** + * 获得商品订单分页 + * + * @param pageReqVO 分页查询 + * @return 商品订单分页 + */ + PageResult getStoreOrderPage(StoreOrderPageReqVO pageReqVO); + + StoreOrderDO createOrder(StoreOrderDto dto); + + UserInfoVo facePay(FacePayDto dto); + + Boolean cardPay(StoreOrderDto dto); + + void batchCacheOrder(StoreOrderUploadDto dto); +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storeorder/StoreOrderServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storeorder/StoreOrderServiceImpl.java new file mode 100644 index 00000000..de018c5e --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storeorder/StoreOrderServiceImpl.java @@ -0,0 +1,232 @@ +package cn.iocoder.yudao.module.member.service.storeorder; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.math.Money; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import cn.iocoder.yudao.framework.common.exception.ServiceException; +import cn.iocoder.yudao.module.member.controller.app.store.dto.*; +import cn.iocoder.yudao.module.member.controller.app.store.vo.UserInfoVo; +import cn.iocoder.yudao.module.member.dal.dataobject.card.CardDO; +import cn.iocoder.yudao.module.member.dal.dataobject.diningplates.DiningPlatesDO; +import cn.iocoder.yudao.module.member.dal.dataobject.order.DishOrderDO; +import cn.iocoder.yudao.module.member.dal.dataobject.storeorderdetail.StoreOrderDetailDO; +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.enums.CostTypeEnum; +import cn.iocoder.yudao.module.member.enums.TimePeriodEnum; +import cn.iocoder.yudao.module.member.service.card.CardService; +import cn.iocoder.yudao.module.member.service.storeorderdetail.StoreOrderDetailService; +import cn.iocoder.yudao.module.member.service.user.MemberUserService; +import com.sun.org.apache.regexp.internal.RE; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.stream.Collectors; + +import cn.iocoder.yudao.module.member.controller.admin.storeorder.vo.*; +import cn.iocoder.yudao.module.member.dal.dataobject.storeorder.StoreOrderDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; + +import cn.iocoder.yudao.module.member.dal.mysql.storeorder.StoreOrderMapper; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*; + +/** + * 商品订单 Service 实现类 + * + * @author 管理员 + */ +@Service +@Validated +public class StoreOrderServiceImpl implements StoreOrderService { + + @Resource + private StoreOrderMapper storeOrderMapper; + + @Resource + private StoreOrderDetailService orderDetailService; + + @Resource + private CardService cardService; + + @Resource + private MemberUserService userService; + + @Override + public Integer createStoreOrder(StoreOrderSaveReqVO createReqVO) { + // 插入 + StoreOrderDO storeOrder = BeanUtils.toBean(createReqVO, StoreOrderDO.class); + storeOrderMapper.insert(storeOrder); + // 返回 + return storeOrder.getOrderId(); + } + + @Override + public void updateStoreOrder(StoreOrderSaveReqVO updateReqVO) { + // 校验存在 + validateStoreOrderExists(updateReqVO.getOrderId()); + // 更新 + StoreOrderDO updateObj = BeanUtils.toBean(updateReqVO, StoreOrderDO.class); + storeOrderMapper.updateById(updateObj); + } + + @Override + public void deleteStoreOrder(Integer id) { + // 校验存在 + validateStoreOrderExists(id); + // 删除 + storeOrderMapper.deleteById(id); + } + + private void validateStoreOrderExists(Integer id) { + if (storeOrderMapper.selectById(id) == null) { + throw exception(STORE_ORDER_NOT_EXISTS); + } + } + + @Override + public StoreOrderDO getStoreOrder(Integer id) { + return storeOrderMapper.selectById(id); + } + + @Override + public PageResult getStoreOrderPage(StoreOrderPageReqVO pageReqVO) { + return storeOrderMapper.selectPage(pageReqVO); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public StoreOrderDO createOrder(StoreOrderDto dto) { + StoreOrderDO storeOrderDO = new StoreOrderDO(); + BeanUtil.copyProperties(dto, storeOrderDO); + List equipmentGoodsCustoms = dto.getEquipmentGoodsCustoms(); + double sum = equipmentGoodsCustoms.stream() + .mapToDouble(StoreGoodsDto::getTotalPrice) + .sum(); + storeOrderDO.setTotalPrice(sum); + storeOrderMapper.insert(storeOrderDO); + ArrayList detailDOS = new ArrayList<>(); + for (StoreGoodsDto storeGoodsDto : equipmentGoodsCustoms) { + StoreOrderDetailDO storeOrderDetailDO = new StoreOrderDetailDO(); + BeanUtil.copyProperties(storeGoodsDto, storeOrderDetailDO); + storeOrderDetailDO.setOrderId(storeOrderDO.getOrderId()); + detailDOS.add(storeOrderDetailDO); + } + orderDetailService.saveBatch(detailDOS); + return storeOrderDO; + } + + @Override + public UserInfoVo facePay(FacePayDto dto) { + StoreOrderDO storeOrderDO = storeOrderMapper.selectById(dto.getOrderId()); + storeOrderDO.setOpenId(dto.getOpenId()); + storeOrderMapper.updateById(storeOrderDO); + Double totalPrice = storeOrderDO.getTotalPrice(); + BigDecimal total = BigDecimal.valueOf(totalPrice).setScale(2, RoundingMode.HALF_UP); + MemberUserDO userDO = userService.getByFaceId(Long.valueOf(dto.getOpenId())); + BigDecimal compute = compute(total, userDO.getId()); + UserInfoVo userInfoVo = new UserInfoVo(); + userInfoVo.setUserName(userDO.getNickname()); + userInfoVo.setAvatar("https://yclhit.com:8896"+userDO.getAvatar()); + userInfoVo.setBalance(compute.doubleValue()); + return userInfoVo; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean cardPay(StoreOrderDto dto) { + Double totalPrice = createOrder(dto).getTotalPrice(); + BigDecimal total = BigDecimal.valueOf(totalPrice).setScale(2, RoundingMode.HALF_UP); + MemberUserDO userDO = userService.getByCardId(dto.getCardNumber()); + if (ObjectUtil.isEmpty(userDO)){ + throw new ServiceException(CARD_NOT_BIND_USER); + } + BigDecimal compute = compute(total, userDO.getId()); + if (compute.compareTo(BigDecimal.ZERO) < 0) { + return false; + } else { + return true; + } + } + + @Override + public void batchCacheOrder(StoreOrderUploadDto dto) { + for (StoreLocalOrderDto orderDto :dto.getMgcrCacheOrderVoList()){ + StoreOrderDO storeOrderDO = new StoreOrderDO(); + BeanUtil.copyProperties(orderDto, storeOrderDO,"createTime"); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); + storeOrderDO.setCreateTime(LocalDateTime.parse(orderDto.getCreateTime(), formatter)); + + List equipmentGoodsCustoms = orderDto.getEquipmentGoodsCustoms(); + double sum = equipmentGoodsCustoms.stream() + .mapToDouble(StoreGoodsDto::getTotalPrice) + .sum(); + storeOrderDO.setTotalPrice(sum); + storeOrderMapper.insert(storeOrderDO); + ArrayList detailDOS = new ArrayList<>(); + for (StoreGoodsDto storeGoodsDto : equipmentGoodsCustoms) { + StoreOrderDetailDO storeOrderDetailDO = new StoreOrderDetailDO(); + BeanUtil.copyProperties(storeGoodsDto, storeOrderDetailDO); + storeOrderDetailDO.setOrderId(storeOrderDO.getOrderId()); + detailDOS.add(storeOrderDetailDO); + } + orderDetailService.saveBatch(detailDOS); + } + //todo:订单结算 + } + + public BigDecimal compute(BigDecimal total, Long userId) { + //新的总价 + CardDO cardDO = new CardDO(); + cardDO.setType(CostTypeEnum.SHOPPING.getCode()); + CardDO oldCardDO = cardService.getCardDoByUserId(userId); + + + BigDecimal money = oldCardDO.getMoney(); + + if (total.compareTo(money) > 0) { + return money.subtract(total); + } + + + BigDecimal wxAmount = oldCardDO.getWxAmount(); + BigDecimal giftAmount = oldCardDO.getGiftAmount(); + BigDecimal cashAmount = oldCardDO.getCashAmount(); + cardDO.setMoney(money.subtract(total).setScale(2, BigDecimal.ROUND_HALF_UP)); + + //计算金额 + if (total.compareTo(wxAmount) <= 0) { + cardDO.setWxAmount(wxAmount.subtract(total).setScale(2, BigDecimal.ROUND_HALF_UP)); + } else { + cardDO.setWxAmount(BigDecimal.ZERO); + BigDecimal total1 = total.subtract(wxAmount).setScale(2, BigDecimal.ROUND_HALF_UP); + if (total1.compareTo(cashAmount) <= 0) { + cardDO.setCashAmount(cashAmount.subtract(total1).setScale(2, BigDecimal.ROUND_HALF_UP)); + } else { + cardDO.setCashAmount(BigDecimal.ZERO); + BigDecimal total2 = total1.subtract(cashAmount).setScale(2, BigDecimal.ROUND_HALF_UP); + cardDO.setGiftAmount(giftAmount.subtract(total2).setScale(2, BigDecimal.ROUND_HALF_UP)); + } + } + + cardDO.setUserId(userId); + cardDO.setChangeMoney(total); + cardDO.setFlag(CardDO.MINUS); + cardService.insertOne(cardDO); + + return cardDO.getMoney(); + } +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storeorderdetail/StoreOrderDetailService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storeorderdetail/StoreOrderDetailService.java new file mode 100644 index 00000000..7afb8d4c --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storeorderdetail/StoreOrderDetailService.java @@ -0,0 +1,56 @@ +package cn.iocoder.yudao.module.member.service.storeorderdetail; + +import java.util.*; +import javax.validation.*; +import cn.iocoder.yudao.module.member.controller.admin.storeorderdetail.vo.*; +import cn.iocoder.yudao.module.member.dal.dataobject.storeorderdetail.StoreOrderDetailDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +/** + * 商品订单详情 Service 接口 + * + * @author 管理员 + */ +public interface StoreOrderDetailService { + + /** + * 创建商品订单详情 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Integer createStoreOrderDetail(@Valid StoreOrderDetailSaveReqVO createReqVO); + + /** + * 更新商品订单详情 + * + * @param updateReqVO 更新信息 + */ + void updateStoreOrderDetail(@Valid StoreOrderDetailSaveReqVO updateReqVO); + + /** + * 删除商品订单详情 + * + * @param id 编号 + */ + void deleteStoreOrderDetail(Integer id); + + /** + * 获得商品订单详情 + * + * @param id 编号 + * @return 商品订单详情 + */ + StoreOrderDetailDO getStoreOrderDetail(Integer id); + + /** + * 获得商品订单详情分页 + * + * @param pageReqVO 分页查询 + * @return 商品订单详情分页 + */ + PageResult getStoreOrderDetailPage(StoreOrderDetailPageReqVO pageReqVO); + + void saveBatch(List list); +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storeorderdetail/StoreOrderDetailServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storeorderdetail/StoreOrderDetailServiceImpl.java new file mode 100644 index 00000000..a3dae57e --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/storeorderdetail/StoreOrderDetailServiceImpl.java @@ -0,0 +1,78 @@ +package cn.iocoder.yudao.module.member.service.storeorderdetail; + +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import cn.iocoder.yudao.module.member.controller.admin.storeorderdetail.vo.*; +import cn.iocoder.yudao.module.member.dal.dataobject.storeorderdetail.StoreOrderDetailDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; + +import cn.iocoder.yudao.module.member.dal.mysql.storeorderdetail.StoreOrderDetailMapper; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.member.enums.ErrorCodeConstants.*; + +/** + * 商品订单详情 Service 实现类 + * + * @author 管理员 + */ +@Service +@Validated +public class StoreOrderDetailServiceImpl implements StoreOrderDetailService { + + @Resource + private StoreOrderDetailMapper storeOrderDetailMapper; + + @Override + public Integer createStoreOrderDetail(StoreOrderDetailSaveReqVO createReqVO) { + // 插入 + StoreOrderDetailDO storeOrderDetail = BeanUtils.toBean(createReqVO, StoreOrderDetailDO.class); + storeOrderDetailMapper.insert(storeOrderDetail); + // 返回 + return storeOrderDetail.getId(); + } + + @Override + public void updateStoreOrderDetail(StoreOrderDetailSaveReqVO updateReqVO) { + // 校验存在 + validateStoreOrderDetailExists(updateReqVO.getId()); + // 更新 + StoreOrderDetailDO updateObj = BeanUtils.toBean(updateReqVO, StoreOrderDetailDO.class); + storeOrderDetailMapper.updateById(updateObj); + } + + @Override + public void deleteStoreOrderDetail(Integer id) { + // 校验存在 + validateStoreOrderDetailExists(id); + // 删除 + storeOrderDetailMapper.deleteById(id); + } + + private void validateStoreOrderDetailExists(Integer id) { + if (storeOrderDetailMapper.selectById(id) == null) { + throw exception(STORE_ORDER_DETAIL_NOT_EXISTS); + } + } + + @Override + public StoreOrderDetailDO getStoreOrderDetail(Integer id) { + return storeOrderDetailMapper.selectById(id); + } + + @Override + public PageResult getStoreOrderDetailPage(StoreOrderDetailPageReqVO pageReqVO) { + return storeOrderDetailMapper.selectPage(pageReqVO); + } + + @Override + public void saveBatch(List list) { + storeOrderDetailMapper.insertBatch(list); + } +} \ No newline at end of file diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java index 5fa1347e..34d75d3b 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserService.java @@ -248,4 +248,8 @@ public interface MemberUserService { String getFaceUrl(Long userId); List getStoreUser(); + + MemberUserDO getByFaceId(Long faceId); + + MemberUserDO getByCardId(String cardId); } diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java index 343ce64b..d88762aa 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/user/MemberUserServiceImpl.java @@ -58,6 +58,8 @@ import cn.iocoder.yudao.module.system.api.sms.dto.code.SmsCodeUseReqDTO; import cn.iocoder.yudao.module.system.api.social.SocialClientApi; import cn.iocoder.yudao.module.system.api.social.dto.SocialWxPhoneNumberInfoRespDTO; import cn.iocoder.yudao.module.system.enums.sms.SmsSceneEnum; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.google.common.annotations.VisibleForTesting; import lombok.extern.slf4j.Slf4j; @@ -779,6 +781,16 @@ public class MemberUserServiceImpl implements MemberUserService { return memberUserMapper.selectList(); } + @Override + public MemberUserDO getByFaceId(Long faceId) { + return memberUserMapper.selectOne(new LambdaQueryWrapper().eq(MemberUserDO::getFaceId,faceId).last("limit 1")); + } + + @Override + public MemberUserDO getByCardId(String cardId) { + return memberUserMapper.selectOne(new LambdaQueryWrapper().eq(MemberUserDO::getCardId,cardId).last("limit 1")); + } + public BigDecimal countAmount(MemberTagDO memberTagDO, BigDecimal money, String timePeriod ){ if(memberTagDO.getType().equals("1")){ if (memberTagDO.getTimeFlag().equals("0")){