From 454c8c4f4b6bfe0619ec9044d682fffff0ea1efd Mon Sep 17 00:00:00 2001 From: zt Date: Sat, 18 Jan 2025 09:57:09 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E4=BB=98=E6=AC=BE=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/enums/ErrorCodeConstants.java | 4 + .../yudao-module-member-biz/pom.xml | 5 + .../wxstoreorder/WxStoreOrderController.java | 95 ++++++++++++ .../vo/WxStoreOrderPageReqVO.java | 37 +++++ .../wxstoreorder/vo/WxStoreOrderRespVO.java | 44 ++++++ .../vo/WxStoreOrderSaveReqVO.java | 30 ++++ .../WxStoreOrderDetailController.java | 95 ++++++++++++ .../vo/WxStoreOrderDetailPageReqVO.java | 37 +++++ .../vo/WxStoreOrderDetailRespVO.java | 44 ++++++ .../vo/WxStoreOrderDetailSaveReqVO.java | 30 ++++ .../AppWxStoreOrderController.java | 59 ++++++++ .../wxstoreorder/vo/WxStoreOrderDetailVO.java | 25 ++++ .../app/wxstoreorder/vo/WxStoreOrderVO.java | 33 +++++ .../wxstoreorder/WxStoreOrderDO.java | 51 +++++++ .../WxStoreOrderDetailDO.java | 51 +++++++ .../wxstoreorder/WxStoreOrderMapper.java | 31 ++++ .../WxStoreOrderDetailMapper.java | 31 ++++ .../wxstoreorder/WxStoreOrderService.java | 57 ++++++++ .../wxstoreorder/WxStoreOrderServiceImpl.java | 138 ++++++++++++++++++ .../WxStoreOrderDetailService.java | 55 +++++++ .../WxStoreOrderDetailServiceImpl.java | 74 ++++++++++ .../module/pay/api/order/PayOrderApi.java | 6 + .../pay/api/order/dto/PayCodesUnifiedDto.java | 20 +++ .../module/pay/api/order/PayOrderApiImpl.java | 44 ++++++ .../framework/pay/core/client/PayClient.java | 9 ++ .../client/dto/order/PayCodeUnifiedDto.java | 18 +++ .../core/client/impl/AbstractPayClient.java | 6 + 27 files changed, 1129 insertions(+) create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/wxstoreorder/WxStoreOrderController.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/wxstoreorder/vo/WxStoreOrderPageReqVO.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/wxstoreorder/vo/WxStoreOrderRespVO.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/wxstoreorder/vo/WxStoreOrderSaveReqVO.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/wxstoreorderdetail/WxStoreOrderDetailController.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/wxstoreorderdetail/vo/WxStoreOrderDetailPageReqVO.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/wxstoreorderdetail/vo/WxStoreOrderDetailRespVO.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/wxstoreorderdetail/vo/WxStoreOrderDetailSaveReqVO.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/wxstoreorder/AppWxStoreOrderController.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/wxstoreorder/vo/WxStoreOrderDetailVO.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/wxstoreorder/vo/WxStoreOrderVO.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/wxstoreorder/WxStoreOrderDO.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/wxstoreorderdetail/WxStoreOrderDetailDO.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/wxstoreorder/WxStoreOrderMapper.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/wxstoreorderdetail/WxStoreOrderDetailMapper.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/wxstoreorder/WxStoreOrderService.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/wxstoreorder/WxStoreOrderServiceImpl.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/wxstoreorderdetail/WxStoreOrderDetailService.java create mode 100644 yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/wxstoreorderdetail/WxStoreOrderDetailServiceImpl.java create mode 100644 yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/api/order/dto/PayCodesUnifiedDto.java create mode 100644 yudao-module-pay/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/dto/order/PayCodeUnifiedDto.java 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 7b8d9536..8a45917f 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 @@ -172,5 +172,9 @@ public interface ErrorCodeConstants { ErrorCode MONEY_NOT_EXISTS = new ErrorCode(1_004_030_00, "金额不存在"); ErrorCode HOLIDAY_NOT_EXISTS = new ErrorCode(1_004_031_00, "假期不存在"); + + ErrorCode WX_STORE_ORDER_NOT_EXISTS = new ErrorCode(1_004_032_00, "微信付款码订单不存在"); + ErrorCode WX_STORE_ORDER_DETAIL_NOT_EXISTS = new ErrorCode(1_004_032_01, "微信付款码订单详情不存在"); + } diff --git a/yudao-module-member/yudao-module-member-biz/pom.xml b/yudao-module-member/yudao-module-member-biz/pom.xml index 8a299144..e57c02ea 100644 --- a/yudao-module-member/yudao-module-member-biz/pom.xml +++ b/yudao-module-member/yudao-module-member-biz/pom.xml @@ -28,6 +28,11 @@ yudao-module-system-api ${revision} + + cn.iocoder.boot + yudao-module-pay-api + ${revision} + cn.iocoder.boot yudao-module-infra-api diff --git a/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/wxstoreorder/WxStoreOrderController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/wxstoreorder/WxStoreOrderController.java new file mode 100644 index 00000000..0596c52b --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/wxstoreorder/WxStoreOrderController.java @@ -0,0 +1,95 @@ +package cn.iocoder.yudao.module.member.controller.admin.wxstoreorder; + +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.wxstoreorder.vo.*; +import cn.iocoder.yudao.module.member.dal.dataobject.wxstoreorder.WxStoreOrderDO; +import cn.iocoder.yudao.module.member.service.wxstoreorder.WxStoreOrderService; + +@Tag(name = "管理后台 - 微信付款码订单") +@RestController +@RequestMapping("/member/wx-store-order") +@Validated +public class WxStoreOrderController { + + @Resource + private WxStoreOrderService wxStoreOrderService; + + @PostMapping("/create") + @Operation(summary = "创建微信付款码订单") + @PreAuthorize("@ss.hasPermission('member:wx-store-order:create')") + public CommonResult createWxStoreOrder(@Valid @RequestBody WxStoreOrderSaveReqVO createReqVO) { + return success(wxStoreOrderService.createWxStoreOrder(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新微信付款码订单") + @PreAuthorize("@ss.hasPermission('member:wx-store-order:update')") + public CommonResult updateWxStoreOrder(@Valid @RequestBody WxStoreOrderSaveReqVO updateReqVO) { + wxStoreOrderService.updateWxStoreOrder(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除微信付款码订单") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('member:wx-store-order:delete')") + public CommonResult deleteWxStoreOrder(@RequestParam("id") Long id) { + wxStoreOrderService.deleteWxStoreOrder(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得微信付款码订单") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('member:wx-store-order:query')") + public CommonResult getWxStoreOrder(@RequestParam("id") Long id) { + WxStoreOrderDO wxStoreOrder = wxStoreOrderService.getWxStoreOrder(id); + return success(BeanUtils.toBean(wxStoreOrder, WxStoreOrderRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得微信付款码订单分页") + @PreAuthorize("@ss.hasPermission('member:wx-store-order:query')") + public CommonResult> getWxStoreOrderPage(@Valid WxStoreOrderPageReqVO pageReqVO) { + PageResult pageResult = wxStoreOrderService.getWxStoreOrderPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, WxStoreOrderRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出微信付款码订单 Excel") + @PreAuthorize("@ss.hasPermission('member:wx-store-order:export')") + @OperateLog(type = EXPORT) + public void exportWxStoreOrderExcel(@Valid WxStoreOrderPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = wxStoreOrderService.getWxStoreOrderPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "微信付款码订单.xls", "数据", WxStoreOrderRespVO.class, + BeanUtils.toBean(list, WxStoreOrderRespVO.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/wxstoreorder/vo/WxStoreOrderPageReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/wxstoreorder/vo/WxStoreOrderPageReqVO.java new file mode 100644 index 00000000..b2308f1d --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/wxstoreorder/vo/WxStoreOrderPageReqVO.java @@ -0,0 +1,37 @@ +package cn.iocoder.yudao.module.member.controller.admin.wxstoreorder.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 WxStoreOrderPageReqVO extends PageParam { + + @Schema(description = "总价钱", example = "3825") + private Double totalPrice; + + @Schema(description = "门店ID", example = "19619") + private Long carteenId; + + @Schema(description = "付款码") + private String authCode; + + @Schema(description = "商户订单号") + private String outTradeNo; + + @Schema(description = "状态", example = "1") + private String status; + + @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/wxstoreorder/vo/WxStoreOrderRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/wxstoreorder/vo/WxStoreOrderRespVO.java new file mode 100644 index 00000000..3546ac15 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/wxstoreorder/vo/WxStoreOrderRespVO.java @@ -0,0 +1,44 @@ +package cn.iocoder.yudao.module.member.controller.admin.wxstoreorder.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 WxStoreOrderRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "26597") + @ExcelProperty("编号") + private Long id; + + @Schema(description = "总价钱", example = "3825") + @ExcelProperty("总价钱") + private Double totalPrice; + + @Schema(description = "门店ID", example = "19619") + @ExcelProperty("门店ID") + private Long carteenId; + + @Schema(description = "付款码") + @ExcelProperty("付款码") + private String authCode; + + @Schema(description = "商户订单号") + @ExcelProperty("商户订单号") + private String outTradeNo; + + @Schema(description = "状态", example = "1") + @ExcelProperty("状态") + private String status; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @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/wxstoreorder/vo/WxStoreOrderSaveReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/wxstoreorder/vo/WxStoreOrderSaveReqVO.java new file mode 100644 index 00000000..c400315a --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/wxstoreorder/vo/WxStoreOrderSaveReqVO.java @@ -0,0 +1,30 @@ +package cn.iocoder.yudao.module.member.controller.admin.wxstoreorder.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 WxStoreOrderSaveReqVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "26597") + private Long id; + + @Schema(description = "总价钱", example = "3825") + private Double totalPrice; + + @Schema(description = "门店ID", example = "19619") + private Long carteenId; + + @Schema(description = "付款码") + private String authCode; + + @Schema(description = "商户订单号") + private String outTradeNo; + + @Schema(description = "状态", example = "1") + private String status; + +} \ 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/wxstoreorderdetail/WxStoreOrderDetailController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/wxstoreorderdetail/WxStoreOrderDetailController.java new file mode 100644 index 00000000..d84d01a6 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/wxstoreorderdetail/WxStoreOrderDetailController.java @@ -0,0 +1,95 @@ +package cn.iocoder.yudao.module.member.controller.admin.wxstoreorderdetail; + +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.wxstoreorderdetail.vo.*; +import cn.iocoder.yudao.module.member.dal.dataobject.wxstoreorderdetail.WxStoreOrderDetailDO; +import cn.iocoder.yudao.module.member.service.wxstoreorderdetail.WxStoreOrderDetailService; + +@Tag(name = "管理后台 - 微信付款码订单详情") +@RestController +@RequestMapping("/member/wx-store-order-detail") +@Validated +public class WxStoreOrderDetailController { + + @Resource + private WxStoreOrderDetailService wxStoreOrderDetailService; + + @PostMapping("/create") + @Operation(summary = "创建微信付款码订单详情") + @PreAuthorize("@ss.hasPermission('member:wx-store-order-detail:create')") + public CommonResult createWxStoreOrderDetail(@Valid @RequestBody WxStoreOrderDetailSaveReqVO createReqVO) { + return success(wxStoreOrderDetailService.createWxStoreOrderDetail(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新微信付款码订单详情") + @PreAuthorize("@ss.hasPermission('member:wx-store-order-detail:update')") + public CommonResult updateWxStoreOrderDetail(@Valid @RequestBody WxStoreOrderDetailSaveReqVO updateReqVO) { + wxStoreOrderDetailService.updateWxStoreOrderDetail(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除微信付款码订单详情") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('member:wx-store-order-detail:delete')") + public CommonResult deleteWxStoreOrderDetail(@RequestParam("id") Long id) { + wxStoreOrderDetailService.deleteWxStoreOrderDetail(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得微信付款码订单详情") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('member:wx-store-order-detail:query')") + public CommonResult getWxStoreOrderDetail(@RequestParam("id") Long id) { + WxStoreOrderDetailDO wxStoreOrderDetail = wxStoreOrderDetailService.getWxStoreOrderDetail(id); + return success(BeanUtils.toBean(wxStoreOrderDetail, WxStoreOrderDetailRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得微信付款码订单详情分页") + @PreAuthorize("@ss.hasPermission('member:wx-store-order-detail:query')") + public CommonResult> getWxStoreOrderDetailPage(@Valid WxStoreOrderDetailPageReqVO pageReqVO) { + PageResult pageResult = wxStoreOrderDetailService.getWxStoreOrderDetailPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, WxStoreOrderDetailRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出微信付款码订单详情 Excel") + @PreAuthorize("@ss.hasPermission('member:wx-store-order-detail:export')") + @OperateLog(type = EXPORT) + public void exportWxStoreOrderDetailExcel(@Valid WxStoreOrderDetailPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = wxStoreOrderDetailService.getWxStoreOrderDetailPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "微信付款码订单详情.xls", "数据", WxStoreOrderDetailRespVO.class, + BeanUtils.toBean(list, WxStoreOrderDetailRespVO.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/wxstoreorderdetail/vo/WxStoreOrderDetailPageReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/wxstoreorderdetail/vo/WxStoreOrderDetailPageReqVO.java new file mode 100644 index 00000000..fc2783a0 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/wxstoreorderdetail/vo/WxStoreOrderDetailPageReqVO.java @@ -0,0 +1,37 @@ +package cn.iocoder.yudao.module.member.controller.admin.wxstoreorderdetail.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 WxStoreOrderDetailPageReqVO extends PageParam { + + @Schema(description = "订单ID", example = "22341") + private Integer wxOrderId; + + @Schema(description = "商品ID", example = "17969") + private Integer goodsId; + + @Schema(description = "商品名", example = "张三") + private String goodsName; + + @Schema(description = "单价", example = "18762") + 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/wxstoreorderdetail/vo/WxStoreOrderDetailRespVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/wxstoreorderdetail/vo/WxStoreOrderDetailRespVO.java new file mode 100644 index 00000000..0bb0447a --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/wxstoreorderdetail/vo/WxStoreOrderDetailRespVO.java @@ -0,0 +1,44 @@ +package cn.iocoder.yudao.module.member.controller.admin.wxstoreorderdetail.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 WxStoreOrderDetailRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "7753") + @ExcelProperty("编号") + private Long id; + + @Schema(description = "订单ID", example = "22341") + @ExcelProperty("订单ID") + private Integer wxOrderId; + + @Schema(description = "商品ID", example = "17969") + @ExcelProperty("商品ID") + private Integer goodsId; + + @Schema(description = "商品名", example = "张三") + @ExcelProperty("商品名") + private String goodsName; + + @Schema(description = "单价", example = "18762") + @ExcelProperty("单价") + private Double customPrice; + + @Schema(description = "数量") + @ExcelProperty("数量") + private Integer number; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @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/wxstoreorderdetail/vo/WxStoreOrderDetailSaveReqVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/wxstoreorderdetail/vo/WxStoreOrderDetailSaveReqVO.java new file mode 100644 index 00000000..8abf12c8 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/admin/wxstoreorderdetail/vo/WxStoreOrderDetailSaveReqVO.java @@ -0,0 +1,30 @@ +package cn.iocoder.yudao.module.member.controller.admin.wxstoreorderdetail.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 WxStoreOrderDetailSaveReqVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "7753") + private Long id; + + @Schema(description = "订单ID", example = "22341") + private Integer wxOrderId; + + @Schema(description = "商品ID", example = "17969") + private Integer goodsId; + + @Schema(description = "商品名", example = "张三") + private String goodsName; + + @Schema(description = "单价", example = "18762") + 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/wxstoreorder/AppWxStoreOrderController.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/wxstoreorder/AppWxStoreOrderController.java new file mode 100644 index 00000000..cd4906e6 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/wxstoreorder/AppWxStoreOrderController.java @@ -0,0 +1,59 @@ +package cn.iocoder.yudao.module.member.controller.app.wxstoreorder; + +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.wxstoreorder.vo.WxStoreOrderPageReqVO; +import cn.iocoder.yudao.module.member.controller.admin.wxstoreorder.vo.WxStoreOrderRespVO; +import cn.iocoder.yudao.module.member.controller.admin.wxstoreorder.vo.WxStoreOrderSaveReqVO; +import cn.iocoder.yudao.module.member.controller.app.wxstoreorder.vo.WxStoreOrderVO; +import cn.iocoder.yudao.module.member.dal.dataobject.wxstoreorder.WxStoreOrderDO; +import cn.iocoder.yudao.module.member.service.wxstoreorder.WxStoreOrderService; +import cn.iocoder.yudao.module.system.api.carteen.CarteenApi; +import cn.iocoder.yudao.module.system.api.carteen.dto.CarteenRespDto; +import cn.iocoder.yudao.module.system.api.cashregisterinfo.CashregisterinfoApi; +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.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +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 = "APP - 微信付款码订单") +@RestController +@RequestMapping("/member/wx-store-order") +@Validated +public class AppWxStoreOrderController { + + @Resource + private WxStoreOrderService wxStoreOrderService; + @Resource + private CashregisterinfoApi cashregisterinfoApi; + @Resource + private CarteenApi carteenApi; + + @PostMapping("/wxPay") + public CommonResult wxPay(@RequestBody WxStoreOrderVO vo, HttpServletRequest request) { + String equipment = request.getHeader("Authorization"); + Long storeId = cashregisterinfoApi.getStoreId(equipment); + CarteenRespDto carteen = carteenApi.getCarteenById(storeId); + vo.setCarteenId(carteen.getId()); + vo.setCarteenName(carteen.getStoresName()); + Boolean b = wxStoreOrderService.wxPay(vo); + return success(b,b?"支付成功":"支付失败"); + } + +} \ 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/wxstoreorder/vo/WxStoreOrderDetailVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/wxstoreorder/vo/WxStoreOrderDetailVO.java new file mode 100644 index 00000000..f4f7b4f0 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/wxstoreorder/vo/WxStoreOrderDetailVO.java @@ -0,0 +1,25 @@ +package cn.iocoder.yudao.module.member.controller.app.wxstoreorder.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "管理后台 - 微信付款码订单详情新增/修改 Request VO") +@Data +public class WxStoreOrderDetailVO { + + @Schema(description = "订单ID", example = "22341") + private Integer wxOrderId; + + @Schema(description = "商品ID", example = "17969") + private Integer goodsId; + + @Schema(description = "商品名", example = "张三") + private String goodsName; + + @Schema(description = "单价", example = "18762") + 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/wxstoreorder/vo/WxStoreOrderVO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/wxstoreorder/vo/WxStoreOrderVO.java new file mode 100644 index 00000000..ad7ea939 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/controller/app/wxstoreorder/vo/WxStoreOrderVO.java @@ -0,0 +1,33 @@ +package cn.iocoder.yudao.module.member.controller.app.wxstoreorder.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +@Schema(description = "管理后台 - 微信付款码订单新增/修改 Request VO") +@Data +public class WxStoreOrderVO { + + @Schema(description = "总价钱", example = "3825") + private Double totalPrice; + + @Schema(description = "门店ID", example = "19619") + private Long carteenId; + + @Schema(description = "门店名", example = "19619") + private String carteenName; + + @Schema(description = "付款码") + private String authCode; + + @Schema(description = "商户订单号") + private String outTradeNo; + + @Schema(description = "状态", example = "1") + private String status; + + @Schema(description = "商品详情", example = "1") + private List goodsList; + +} \ 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/wxstoreorder/WxStoreOrderDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/wxstoreorder/WxStoreOrderDO.java new file mode 100644 index 00000000..4fef7304 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/wxstoreorder/WxStoreOrderDO.java @@ -0,0 +1,51 @@ +package cn.iocoder.yudao.module.member.dal.dataobject.wxstoreorder; + +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_wx_store_order") +@KeySequence("member_wx_store_order_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class WxStoreOrderDO extends BaseDO { + + /** + * 编号 + */ + @TableId + private Long id; + /** + * 总价钱 + */ + private Double totalPrice; + /** + * 门店ID + */ + private Long carteenId; + /** + * 付款码 + */ + private String authCode; + /** + * 商户订单号 + */ + private String outTradeNo; + /** + * 状态 + */ + private String status; + +} \ 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/wxstoreorderdetail/WxStoreOrderDetailDO.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/wxstoreorderdetail/WxStoreOrderDetailDO.java new file mode 100644 index 00000000..e4e2b6b3 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/dataobject/wxstoreorderdetail/WxStoreOrderDetailDO.java @@ -0,0 +1,51 @@ +package cn.iocoder.yudao.module.member.dal.dataobject.wxstoreorderdetail; + +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_wx_store_order_detail") +@KeySequence("member_wx_store_order_detail_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class WxStoreOrderDetailDO extends BaseDO { + + /** + * 编号 + */ + @TableId + private Long id; + /** + * 订单ID + */ + private Long wxOrderId; + /** + * 商品ID + */ + private Integer goodsId; + /** + * 商品名 + */ + private String goodsName; + /** + * 单价 + */ + 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/wxstoreorder/WxStoreOrderMapper.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/wxstoreorder/WxStoreOrderMapper.java new file mode 100644 index 00000000..1f885dd6 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/wxstoreorder/WxStoreOrderMapper.java @@ -0,0 +1,31 @@ +package cn.iocoder.yudao.module.member.dal.mysql.wxstoreorder; + +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.wxstoreorder.WxStoreOrderDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.member.controller.admin.wxstoreorder.vo.*; + +/** + * 微信付款码订单 Mapper + * + * @author 我是秦俊旗 + */ +@Mapper +public interface WxStoreOrderMapper extends BaseMapperX { + + default PageResult selectPage(WxStoreOrderPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(WxStoreOrderDO::getTotalPrice, reqVO.getTotalPrice()) + .eqIfPresent(WxStoreOrderDO::getCarteenId, reqVO.getCarteenId()) + .eqIfPresent(WxStoreOrderDO::getAuthCode, reqVO.getAuthCode()) + .eqIfPresent(WxStoreOrderDO::getOutTradeNo, reqVO.getOutTradeNo()) + .eqIfPresent(WxStoreOrderDO::getStatus, reqVO.getStatus()) + .betweenIfPresent(WxStoreOrderDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(WxStoreOrderDO::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/dal/mysql/wxstoreorderdetail/WxStoreOrderDetailMapper.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/wxstoreorderdetail/WxStoreOrderDetailMapper.java new file mode 100644 index 00000000..9505d854 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/dal/mysql/wxstoreorderdetail/WxStoreOrderDetailMapper.java @@ -0,0 +1,31 @@ +package cn.iocoder.yudao.module.member.dal.mysql.wxstoreorderdetail; + +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.wxstoreorderdetail.WxStoreOrderDetailDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.member.controller.admin.wxstoreorderdetail.vo.*; + +/** + * 微信付款码订单详情 Mapper + * + * @author 我是秦俊旗 + */ +@Mapper +public interface WxStoreOrderDetailMapper extends BaseMapperX { + + default PageResult selectPage(WxStoreOrderDetailPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(WxStoreOrderDetailDO::getWxOrderId, reqVO.getWxOrderId()) + .eqIfPresent(WxStoreOrderDetailDO::getGoodsId, reqVO.getGoodsId()) + .likeIfPresent(WxStoreOrderDetailDO::getGoodsName, reqVO.getGoodsName()) + .eqIfPresent(WxStoreOrderDetailDO::getCustomPrice, reqVO.getCustomPrice()) + .eqIfPresent(WxStoreOrderDetailDO::getNumber, reqVO.getNumber()) + .betweenIfPresent(WxStoreOrderDetailDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(WxStoreOrderDetailDO::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/service/wxstoreorder/WxStoreOrderService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/wxstoreorder/WxStoreOrderService.java new file mode 100644 index 00000000..c523806a --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/wxstoreorder/WxStoreOrderService.java @@ -0,0 +1,57 @@ +package cn.iocoder.yudao.module.member.service.wxstoreorder; + +import java.util.*; +import javax.validation.*; +import cn.iocoder.yudao.module.member.controller.admin.wxstoreorder.vo.*; +import cn.iocoder.yudao.module.member.controller.app.wxstoreorder.vo.WxStoreOrderVO; +import cn.iocoder.yudao.module.member.dal.dataobject.wxstoreorder.WxStoreOrderDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +/** + * 微信付款码订单 Service 接口 + * + * @author 我是秦俊旗 + */ +public interface WxStoreOrderService { + + /** + * 创建微信付款码订单 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createWxStoreOrder(@Valid WxStoreOrderSaveReqVO createReqVO); + + /** + * 更新微信付款码订单 + * + * @param updateReqVO 更新信息 + */ + void updateWxStoreOrder(@Valid WxStoreOrderSaveReqVO updateReqVO); + + /** + * 删除微信付款码订单 + * + * @param id 编号 + */ + void deleteWxStoreOrder(Long id); + + /** + * 获得微信付款码订单 + * + * @param id 编号 + * @return 微信付款码订单 + */ + WxStoreOrderDO getWxStoreOrder(Long id); + + /** + * 获得微信付款码订单分页 + * + * @param pageReqVO 分页查询 + * @return 微信付款码订单分页 + */ + PageResult getWxStoreOrderPage(WxStoreOrderPageReqVO pageReqVO); + + Boolean wxPay(WxStoreOrderVO vo); +} \ 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/wxstoreorder/WxStoreOrderServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/wxstoreorder/WxStoreOrderServiceImpl.java new file mode 100644 index 00000000..1ac07502 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/wxstoreorder/WxStoreOrderServiceImpl.java @@ -0,0 +1,138 @@ +package cn.iocoder.yudao.module.member.service.wxstoreorder; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.IdUtil; +import cn.iocoder.yudao.module.member.controller.app.wxstoreorder.vo.WxStoreOrderDetailVO; +import cn.iocoder.yudao.module.member.controller.app.wxstoreorder.vo.WxStoreOrderVO; +import cn.iocoder.yudao.module.member.dal.dataobject.wxstoreorderdetail.WxStoreOrderDetailDO; +import cn.iocoder.yudao.module.member.dal.mysql.wxstoreorderdetail.WxStoreOrderDetailMapper; +import cn.iocoder.yudao.module.pay.api.order.PayOrderApi; +import cn.iocoder.yudao.module.pay.api.order.dto.PayCodesUnifiedDto; +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.util.*; +import cn.iocoder.yudao.module.member.controller.admin.wxstoreorder.vo.*; +import cn.iocoder.yudao.module.member.dal.dataobject.wxstoreorder.WxStoreOrderDO; +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.wxstoreorder.WxStoreOrderMapper; + +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 WxStoreOrderServiceImpl implements WxStoreOrderService { + + @Resource + private WxStoreOrderMapper wxStoreOrderMapper; + @Resource + private PayOrderApi orderApi; + @Resource + private WxStoreOrderDetailMapper wxStoreOrderDetailMapper; + + + @Override + public Long createWxStoreOrder(WxStoreOrderSaveReqVO createReqVO) { + // 插入 + WxStoreOrderDO wxStoreOrder = BeanUtils.toBean(createReqVO, WxStoreOrderDO.class); + wxStoreOrderMapper.insert(wxStoreOrder); + // 返回 + return wxStoreOrder.getId(); + } + + @Override + public void updateWxStoreOrder(WxStoreOrderSaveReqVO updateReqVO) { + // 校验存在 + validateWxStoreOrderExists(updateReqVO.getId()); + // 更新 + WxStoreOrderDO updateObj = BeanUtils.toBean(updateReqVO, WxStoreOrderDO.class); + wxStoreOrderMapper.updateById(updateObj); + } + + @Override + public void deleteWxStoreOrder(Long id) { + // 校验存在 + validateWxStoreOrderExists(id); + // 删除 + wxStoreOrderMapper.deleteById(id); + } + + private void validateWxStoreOrderExists(Long id) { + if (wxStoreOrderMapper.selectById(id) == null) { + throw exception(WX_STORE_ORDER_NOT_EXISTS); + } + } + + @Override + public WxStoreOrderDO getWxStoreOrder(Long id) { + return wxStoreOrderMapper.selectById(id); + } + + @Override + public PageResult getWxStoreOrderPage(WxStoreOrderPageReqVO pageReqVO) { + return wxStoreOrderMapper.selectPage(pageReqVO); + } + + @Override + public Boolean wxPay(WxStoreOrderVO vo) { + String outTradeNo = IdUtil.getSnowflakeNextIdStr(); + + double totalPrice = 0.0; + for(WxStoreOrderDetailVO detailVO : vo.getGoodsList()) { + totalPrice+=detailVO.getCustomPrice()*detailVO.getNumber(); + } + + PayCodesUnifiedDto payCodesUnifiedDto = new PayCodesUnifiedDto(); + payCodesUnifiedDto.setAuthCode(vo.getAuthCode()); + payCodesUnifiedDto.setBody(null); + payCodesUnifiedDto.setSubject(vo.getCarteenName()+"-超市"); + payCodesUnifiedDto.setPrice((int)(totalPrice*100)); + payCodesUnifiedDto.setOutTradeNo(outTradeNo); + // 获取本地机器的 InetAddress 对象 + InetAddress inetAddress = null; + try { + inetAddress = InetAddress.getLocalHost(); + } catch (UnknownHostException e) { + throw new RuntimeException(e); + } + + // 获取本地机器的 IP 地址 + String ipAddress = inetAddress.getHostAddress(); + payCodesUnifiedDto.setUserIp(ipAddress); + boolean b = orderApi.codePay(payCodesUnifiedDto); + if(b){ + WxStoreOrderDO wxStoreOrderDO = new WxStoreOrderDO(); + wxStoreOrderDO.setOutTradeNo(outTradeNo); + wxStoreOrderDO.setTotalPrice(vo.getTotalPrice()); + wxStoreOrderDO.setAuthCode(vo.getAuthCode()); + wxStoreOrderDO.setCarteenId(vo.getCarteenId()); + wxStoreOrderDO.setStatus("SUCCESS"); + wxStoreOrderMapper.insert(wxStoreOrderDO); + ArrayList wxStoreOrderDetailDOS = new ArrayList<>(); + for (WxStoreOrderDetailVO detailVO : vo.getGoodsList()) { + WxStoreOrderDetailDO detailDO= new WxStoreOrderDetailDO(); + BeanUtil.copyProperties(detailVO,detailDO); + detailDO.setWxOrderId(wxStoreOrderDO.getId()); + wxStoreOrderDetailDOS.add(detailDO); + } + if(CollectionUtil.isNotEmpty(wxStoreOrderDetailDOS)){ + wxStoreOrderDetailMapper.insertBatch(wxStoreOrderDetailDOS); + } + } + return b; + } +} \ 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/wxstoreorderdetail/WxStoreOrderDetailService.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/wxstoreorderdetail/WxStoreOrderDetailService.java new file mode 100644 index 00000000..ced87580 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/wxstoreorderdetail/WxStoreOrderDetailService.java @@ -0,0 +1,55 @@ +package cn.iocoder.yudao.module.member.service.wxstoreorderdetail; + +import java.util.*; +import javax.validation.*; +import cn.iocoder.yudao.module.member.controller.admin.wxstoreorderdetail.vo.*; +import cn.iocoder.yudao.module.member.dal.dataobject.wxstoreorderdetail.WxStoreOrderDetailDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +/** + * 微信付款码订单详情 Service 接口 + * + * @author 我是秦俊旗 + */ +public interface WxStoreOrderDetailService { + + /** + * 创建微信付款码订单详情 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createWxStoreOrderDetail(@Valid WxStoreOrderDetailSaveReqVO createReqVO); + + /** + * 更新微信付款码订单详情 + * + * @param updateReqVO 更新信息 + */ + void updateWxStoreOrderDetail(@Valid WxStoreOrderDetailSaveReqVO updateReqVO); + + /** + * 删除微信付款码订单详情 + * + * @param id 编号 + */ + void deleteWxStoreOrderDetail(Long id); + + /** + * 获得微信付款码订单详情 + * + * @param id 编号 + * @return 微信付款码订单详情 + */ + WxStoreOrderDetailDO getWxStoreOrderDetail(Long id); + + /** + * 获得微信付款码订单详情分页 + * + * @param pageReqVO 分页查询 + * @return 微信付款码订单详情分页 + */ + PageResult getWxStoreOrderDetailPage(WxStoreOrderDetailPageReqVO pageReqVO); + +} \ 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/wxstoreorderdetail/WxStoreOrderDetailServiceImpl.java b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/wxstoreorderdetail/WxStoreOrderDetailServiceImpl.java new file mode 100644 index 00000000..6145ce08 --- /dev/null +++ b/yudao-module-member/yudao-module-member-biz/src/main/java/cn/iocoder/yudao/module/member/service/wxstoreorderdetail/WxStoreOrderDetailServiceImpl.java @@ -0,0 +1,74 @@ +package cn.iocoder.yudao.module.member.service.wxstoreorderdetail; + +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.wxstoreorderdetail.vo.*; +import cn.iocoder.yudao.module.member.dal.dataobject.wxstoreorderdetail.WxStoreOrderDetailDO; +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.wxstoreorderdetail.WxStoreOrderDetailMapper; + +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 WxStoreOrderDetailServiceImpl implements WxStoreOrderDetailService { + + @Resource + private WxStoreOrderDetailMapper wxStoreOrderDetailMapper; + + @Override + public Long createWxStoreOrderDetail(WxStoreOrderDetailSaveReqVO createReqVO) { + // 插入 + WxStoreOrderDetailDO wxStoreOrderDetail = BeanUtils.toBean(createReqVO, WxStoreOrderDetailDO.class); + wxStoreOrderDetailMapper.insert(wxStoreOrderDetail); + // 返回 + return wxStoreOrderDetail.getId(); + } + + @Override + public void updateWxStoreOrderDetail(WxStoreOrderDetailSaveReqVO updateReqVO) { + // 校验存在 + validateWxStoreOrderDetailExists(updateReqVO.getId()); + // 更新 + WxStoreOrderDetailDO updateObj = BeanUtils.toBean(updateReqVO, WxStoreOrderDetailDO.class); + wxStoreOrderDetailMapper.updateById(updateObj); + } + + @Override + public void deleteWxStoreOrderDetail(Long id) { + // 校验存在 + validateWxStoreOrderDetailExists(id); + // 删除 + wxStoreOrderDetailMapper.deleteById(id); + } + + private void validateWxStoreOrderDetailExists(Long id) { + if (wxStoreOrderDetailMapper.selectById(id) == null) { + throw exception(WX_STORE_ORDER_DETAIL_NOT_EXISTS); + } + } + + @Override + public WxStoreOrderDetailDO getWxStoreOrderDetail(Long id) { + return wxStoreOrderDetailMapper.selectById(id); + } + + @Override + public PageResult getWxStoreOrderDetailPage(WxStoreOrderDetailPageReqVO pageReqVO) { + return wxStoreOrderDetailMapper.selectPage(pageReqVO); + } + +} \ No newline at end of file diff --git a/yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/api/order/PayOrderApi.java b/yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/api/order/PayOrderApi.java index 8a18381d..5db0c671 100644 --- a/yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/api/order/PayOrderApi.java +++ b/yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/api/order/PayOrderApi.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.pay.api.order; +import cn.iocoder.yudao.module.pay.api.order.dto.PayCodesUnifiedDto; import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderCreateReqDTO; import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderRespDTO; @@ -37,4 +38,9 @@ public interface PayOrderApi { */ void updatePayOrderPrice(Long id, Integer payPrice); + /** + * 付款码支付 + * + */ + boolean codePay(PayCodesUnifiedDto dto); } diff --git a/yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/api/order/dto/PayCodesUnifiedDto.java b/yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/api/order/dto/PayCodesUnifiedDto.java new file mode 100644 index 00000000..10e9ec57 --- /dev/null +++ b/yudao-module-pay/yudao-module-pay-api/src/main/java/cn/iocoder/yudao/module/pay/api/order/dto/PayCodesUnifiedDto.java @@ -0,0 +1,20 @@ +package cn.iocoder.yudao.module.pay.api.order.dto; + + +import lombok.Data; + +@Data +public class PayCodesUnifiedDto { + + + private String subject; + private String body; + + private String outTradeNo; + + private Integer price; + + private String userIp; + + private String authCode; +} diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/api/order/PayOrderApiImpl.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/api/order/PayOrderApiImpl.java index 26234acb..ee45265a 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/api/order/PayOrderApiImpl.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/api/order/PayOrderApiImpl.java @@ -1,13 +1,27 @@ package cn.iocoder.yudao.module.pay.api.order; +import cn.hutool.core.bean.BeanUtil; +import cn.iocoder.yudao.framework.pay.core.client.PayClient; +import cn.iocoder.yudao.framework.pay.core.client.dto.divide.PayDivideRespDto; +import cn.iocoder.yudao.framework.pay.core.client.dto.order.PayCodeUnifiedDto; +import cn.iocoder.yudao.framework.pay.core.client.dto.order.PayOrderUnifiedReqDTO; +import cn.iocoder.yudao.framework.pay.core.enums.order.PayOrderStatusRespEnum; +import cn.iocoder.yudao.module.pay.api.order.dto.PayCodesUnifiedDto; import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderCreateReqDTO; import cn.iocoder.yudao.module.pay.api.order.dto.PayOrderRespDTO; import cn.iocoder.yudao.module.pay.convert.order.PayOrderConvert; import cn.iocoder.yudao.module.pay.dal.dataobject.order.PayOrderDO; +import cn.iocoder.yudao.module.pay.service.channel.PayChannelService; import cn.iocoder.yudao.module.pay.service.order.PayOrderService; +import com.github.binarywang.wxpay.bean.request.WxPayMicropayRequest; +import com.github.binarywang.wxpay.bean.result.WxPayMicropayResult; +import jdk.internal.org.objectweb.asm.Handle; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.time.LocalDateTime; +import java.util.HashMap; +import java.util.Map; /** * 支付单 API 实现类 @@ -20,6 +34,9 @@ public class PayOrderApiImpl implements PayOrderApi { @Resource private PayOrderService payOrderService; + @Resource + private PayChannelService channelService; + @Override public Long createOrder(PayOrderCreateReqDTO reqDTO) { return payOrderService.createOrder(reqDTO); @@ -36,4 +53,31 @@ public class PayOrderApiImpl implements PayOrderApi { payOrderService.updatePayOrderPrice(id, payPrice); } + @Override + public boolean codePay(PayCodesUnifiedDto dto) { + + PayCodeUnifiedDto payCodeUnifiedDto = new PayCodeUnifiedDto(); + BeanUtil.copyProperties(dto, payCodeUnifiedDto); + PayClient payClient = channelService.getPayClient(42L); + payClient.unifiedCode(payCodeUnifiedDto); + + PayOrderUnifiedReqDTO payOrderUnifiedReqDTO = new PayOrderUnifiedReqDTO(); + payOrderUnifiedReqDTO.setOutTradeNo(dto.getOutTradeNo()); + payOrderUnifiedReqDTO.setSubject(dto.getSubject()); + payOrderUnifiedReqDTO.setBody(dto.getBody()); + payOrderUnifiedReqDTO.setPrice(dto.getPrice()); + payOrderUnifiedReqDTO.setUserIp(dto.getUserIp()); + payOrderUnifiedReqDTO.setNotifyUrl("https://yclhit.com:8896/admin-api/pay/notify/order/xx"); + payOrderUnifiedReqDTO.setExpireTime(LocalDateTime.now().plusMinutes(1)); + Map channelExtras = new HashMap<>(); + channelExtras.put("authCode", dto.getAuthCode()); + payOrderUnifiedReqDTO.setChannelExtras(channelExtras); + try { + cn.iocoder.yudao.framework.pay.core.client.dto.order.PayOrderRespDTO payOrderRespDTO = payClient.unifiedOrder(payOrderUnifiedReqDTO); + return PayOrderStatusRespEnum.isSuccess(payOrderRespDTO.getStatus()); + }catch (Exception e){ + System.out.println(e.getMessage()); + return false; + } + } } diff --git a/yudao-module-pay/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/PayClient.java b/yudao-module-pay/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/PayClient.java index 11eb69b3..929b5ad1 100644 --- a/yudao-module-pay/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/PayClient.java +++ b/yudao-module-pay/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/PayClient.java @@ -4,6 +4,7 @@ import cn.iocoder.yudao.framework.pay.core.client.dto.divide.PayDivideBackRespDt import cn.iocoder.yudao.framework.pay.core.client.dto.divide.PayDivideBackUnifiedDto; import cn.iocoder.yudao.framework.pay.core.client.dto.divide.PayDivideRespDto; import cn.iocoder.yudao.framework.pay.core.client.dto.divide.PayDivideUnifiedDto; +import cn.iocoder.yudao.framework.pay.core.client.dto.order.PayCodeUnifiedDto; import cn.iocoder.yudao.framework.pay.core.client.dto.order.PayOrderRespDTO; import cn.iocoder.yudao.framework.pay.core.client.dto.order.PayOrderUnifiedReqDTO; import cn.iocoder.yudao.framework.pay.core.client.dto.refund.PayRefundRespDTO; @@ -136,4 +137,12 @@ public interface PayClient { */ PayDivideBackRespDto unifiedDivideback(PayDivideBackUnifiedDto reqDTO); + + /** + * 发起分账 + * + * @param reqDTO 分账参数 + * @return 分账 + */ + PayDivideRespDto unifiedCode(PayCodeUnifiedDto reqDTO); } diff --git a/yudao-module-pay/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/dto/order/PayCodeUnifiedDto.java b/yudao-module-pay/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/dto/order/PayCodeUnifiedDto.java new file mode 100644 index 00000000..c04d5874 --- /dev/null +++ b/yudao-module-pay/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/dto/order/PayCodeUnifiedDto.java @@ -0,0 +1,18 @@ +package cn.iocoder.yudao.framework.pay.core.client.dto.order; + + +import lombok.Data; + +@Data +public class PayCodeUnifiedDto { + + private String body; + + private String outTradeNo; + + private Integer totalFee; + + private String spbillCreateIp; + + private String authCode; +} diff --git a/yudao-module-pay/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/AbstractPayClient.java b/yudao-module-pay/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/AbstractPayClient.java index a7eecb2d..9ea0fd43 100644 --- a/yudao-module-pay/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/AbstractPayClient.java +++ b/yudao-module-pay/yudao-spring-boot-starter-biz-pay/src/main/java/cn/iocoder/yudao/framework/pay/core/client/impl/AbstractPayClient.java @@ -8,6 +8,7 @@ import cn.iocoder.yudao.framework.pay.core.client.dto.divide.PayDivideBackRespDt import cn.iocoder.yudao.framework.pay.core.client.dto.divide.PayDivideBackUnifiedDto; import cn.iocoder.yudao.framework.pay.core.client.dto.divide.PayDivideRespDto; import cn.iocoder.yudao.framework.pay.core.client.dto.divide.PayDivideUnifiedDto; +import cn.iocoder.yudao.framework.pay.core.client.dto.order.PayCodeUnifiedDto; import cn.iocoder.yudao.framework.pay.core.client.dto.order.PayOrderRespDTO; import cn.iocoder.yudao.framework.pay.core.client.dto.order.PayOrderUnifiedReqDTO; import cn.iocoder.yudao.framework.pay.core.client.dto.refund.PayRefundRespDTO; @@ -334,6 +335,11 @@ public abstract class AbstractPayClient implemen return resp; } + @Override + public PayDivideRespDto unifiedCode(PayCodeUnifiedDto reqDTO) { + return null; + } + protected abstract PayDivideBackRespDto doUnifiedDivideback(PayDivideBackUnifiedDto reqDTO) throws Throwable;