From 2ac55090dae393dec2017a6d6f1c7170bd714224 Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Fri, 28 Feb 2025 15:32:30 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E9=A2=9D=E5=A4=96=20=E6=94=AF=E4=BB=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../czg/controller/OrderPayController.java | 55 +++++++++++++++++++ .../java/com/czg/order/dto/CheckOrderPay.java | 2 + .../czg/order/service/OrderInfoService.java | 9 ++- .../czg/system/enums/SysParamCodeEnum.java | 1 + .../czg/system/service/SysParamsService.java | 7 +++ .../czg/service/order/service/PayService.java | 6 ++ .../service/impl/OrderInfoServiceImpl.java | 48 ++++++++++++---- .../order/service/impl/PayServiceImpl.java | 48 ++++++++++++++-- 8 files changed, 161 insertions(+), 15 deletions(-) diff --git a/cash-api/order-server/src/main/java/com/czg/controller/OrderPayController.java b/cash-api/order-server/src/main/java/com/czg/controller/OrderPayController.java index 97ea9feb..e34f992c 100644 --- a/cash-api/order-server/src/main/java/com/czg/controller/OrderPayController.java +++ b/cash-api/order-server/src/main/java/com/czg/controller/OrderPayController.java @@ -1,15 +1,25 @@ package com.czg.controller; +import cn.hutool.core.util.StrUtil; +import cn.hutool.core.util.URLUtil; +import com.czg.order.dto.CheckOrderPay; +import com.czg.order.entity.OrderInfo; +import com.czg.order.service.OrderInfoService; import com.czg.resp.CzgResult; import com.czg.service.order.dto.OrderPayParamDTO; import com.czg.service.order.service.PayService; +import com.czg.system.enums.SysParamCodeEnum; +import com.czg.system.service.SysParamsService; import com.czg.utils.AssertUtil; import com.czg.utils.ServletUtil; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; +import org.apache.dubbo.config.annotation.DubboReference; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.nio.charset.Charset; +import java.util.HashMap; import java.util.Map; /** @@ -23,6 +33,10 @@ import java.util.Map; public class OrderPayController { @Resource private PayService payService; + @Resource + private OrderInfoService orderService; + @DubboReference + private SysParamsService paramsService; @PostMapping("/creditPay") public CzgResult creditPayOrder(@RequestHeader Long shopId, @Validated @RequestBody OrderPayParamDTO payParam) { @@ -102,4 +116,45 @@ public class OrderPayController { payParam.setShopId(shopId); return payService.microPayOrder(payParam); } + + /** + * 获取店铺订单支付URL + */ + @PostMapping("/shopPayApi/orderPayUrl") + public CzgResult getOrderPayUrl(Long shopId, Long orderId, @RequestParam(required = false) String extend, + @RequestParam(required = false) CheckOrderPay checkOrderPay) { + AssertUtil.isNull(shopId, "店铺id不能为空"); + AssertUtil.isNull(orderId, "订单Id不能为空"); + Map map = new HashMap<>(); + map.put("shopId", shopId); + map.put("orderId", orderId); + map.put("payAmount", checkOrderPay.getOrderAmount()); + map.put("extend", StrUtil.isEmpty(extend) ? "" : extend); + if (checkOrderPay.getOrderId() != null) { + OrderInfo orderInfo = orderService.checkOrderPay(checkOrderPay); + map.put("payAmount", orderInfo.getOrderAmount()); + } + String baseUrl = paramsService.getSysParamValue(SysParamCodeEnum.SHOP_ORDER_PAY_BASE_URL.getCode()); + String buildUrl = URLUtil.buildQuery(map, Charset.defaultCharset()); + String fullUrl = baseUrl.concat("?").concat(buildUrl); + return CzgResult.success(fullUrl); + } + + /** + * payType 必填 支付方式,aliPay 支付宝,wechatPay 微信 + * openId 必填 + * + * checkOrderPay.orderAmount 必填 + */ + @PostMapping("/shopPayApi/js2Pay") + public CzgResult> js2PayOrder(@RequestHeader Long shopId, HttpServletRequest request, @RequestBody OrderPayParamDTO payParam) { + payParam.setShopId(shopId); + return payService.js2PayOrder(ServletUtil.getClientIPByHeader(request), payParam); + } + + + @GetMapping("/queryOrderPay") + public CzgResult> queryOrderPay(Long orderId){ + return payService.queryPayOrder(orderId); + } } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/order/dto/CheckOrderPay.java b/cash-common/cash-common-service/src/main/java/com/czg/order/dto/CheckOrderPay.java index df286e8e..12a9dc8c 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/order/dto/CheckOrderPay.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/order/dto/CheckOrderPay.java @@ -79,6 +79,8 @@ public class CheckOrderPay implements Serializable { */ private Integer pointsNum; + private String remark; + public Integer getSeatNum() { return seatNum == null ? 0 : seatNum; diff --git a/cash-common/cash-common-service/src/main/java/com/czg/order/service/OrderInfoService.java b/cash-common/cash-common-service/src/main/java/com/czg/order/service/OrderInfoService.java index 65b7f629..1731b4f1 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/order/service/OrderInfoService.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/order/service/OrderInfoService.java @@ -25,7 +25,9 @@ import java.time.LocalDateTime; public interface OrderInfoService extends IService { Page getOrderByPage(OrderInfoQueryDTO param); - HistoryOrderVo historyOrder(Long orderId,String tableCode); + + HistoryOrderVo historyOrder(Long orderId, String tableCode); + OrderInfo createOrder(OrderInfoAddDTO param); OrderInfo checkOrderPay(CheckOrderPay param); @@ -37,4 +39,9 @@ public interface OrderInfoService extends IService { void upOrderInfo(OrderInfo orderInfo, BigDecimal payAmount, LocalDateTime payTime, Long payOrderId, PayEnums payType); void expired(Long orderId); + + OrderInfo createPayOrder(Long shopId, BigDecimal amount, String remark); + + + } diff --git a/cash-common/cash-common-service/src/main/java/com/czg/system/enums/SysParamCodeEnum.java b/cash-common/cash-common-service/src/main/java/com/czg/system/enums/SysParamCodeEnum.java index cd774b8d..3b8d6152 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/system/enums/SysParamCodeEnum.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/system/enums/SysParamCodeEnum.java @@ -9,6 +9,7 @@ import lombok.Getter; @Getter public enum SysParamCodeEnum { + SHOP_ORDER_PAY_BASE_URL("shop_order_pay_base_url", "店铺订单支付BaseUrl"), PAY_CZG_DOMAIN("pay_czg_domain", "超掌柜支付域名"), PAY_CZG_NOTIFY_URL("pay_czg_notify_url", "超掌柜支付回调地址"), PAY_CZG_REFUND_NOTIFY_URL("pay_czg_refund_notify_url", "超掌柜退款回调地址"), diff --git a/cash-common/cash-common-service/src/main/java/com/czg/system/service/SysParamsService.java b/cash-common/cash-common-service/src/main/java/com/czg/system/service/SysParamsService.java index a8f2c8fd..e7d9ca4f 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/system/service/SysParamsService.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/system/service/SysParamsService.java @@ -41,14 +41,21 @@ public interface SysParamsService extends IService { /** * 根据参数编码获取参数 + * {@link com.czg.system.enums.SysParamCodeEnum} * * @param code 参数编码 * @return 参数 */ CzgResult getParamsByCode(String code); + /** + * {@link com.czg.system.enums.SysParamCodeEnum} + */ SysParams getSysParam(String code); + /** + * {@link com.czg.system.enums.SysParamCodeEnum} + */ String getSysParamValue(String code); /** diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/service/PayService.java b/cash-service/order-service/src/main/java/com/czg/service/order/service/PayService.java index be9568e2..3bb3e2eb 100644 --- a/cash-service/order-service/src/main/java/com/czg/service/order/service/PayService.java +++ b/cash-service/order-service/src/main/java/com/czg/service/order/service/PayService.java @@ -3,10 +3,12 @@ package com.czg.service.order.service; import com.czg.entity.resp.CzgBaseResp; import com.czg.entity.resp.CzgRefundResp; import com.czg.order.dto.OrderInfoRefundDTO; +import com.czg.order.entity.OrderInfo; import com.czg.resp.CzgResult; import com.czg.service.order.dto.OrderPayParamDTO; import com.czg.service.order.dto.VipPayParamDTO; import com.czg.service.order.dto.VipRefundDTO; +import lombok.NonNull; import java.math.BigDecimal; import java.util.Map; @@ -43,6 +45,8 @@ public interface PayService { */ CzgResult> jsPayOrder(String clintIp, OrderPayParamDTO payParam); + CzgResult> js2PayOrder(@NonNull String clintIp, OrderPayParamDTO payParam); + /** * 小程序支付 */ @@ -102,6 +106,8 @@ public interface PayService { CzgResult refundOrder(Long shopId, Long orderId, Long payOrderId, String refPayOrderNo, String refundReason, BigDecimal refundAmount); + CzgResult> queryPayOrder(@NonNull Long orderId); + /** * 支付查询 * diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/OrderInfoServiceImpl.java b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/OrderInfoServiceImpl.java index 713946db..621b3d0e 100644 --- a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/OrderInfoServiceImpl.java +++ b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/OrderInfoServiceImpl.java @@ -35,6 +35,7 @@ import com.czg.service.RedisService; import com.czg.service.order.dto.BigDecimalDTO; import com.czg.service.order.enums.OrderStatusEnums; import com.czg.service.order.mapper.OrderInfoMapper; +import com.czg.service.order.service.PayService; import com.czg.utils.AssertUtil; import com.czg.utils.CzgStrUtils; import com.czg.utils.PageUtil; @@ -71,6 +72,10 @@ public class OrderInfoServiceImpl extends ServiceImpl getOrderByPage(OrderInfoQueryDTO param) { @@ -115,7 +116,8 @@ public class OrderInfoServiceImpl extends ServiceImpl orderInfoVoPage = pageAs(PageUtil.buildPage(), queryWrapper, OrderInfoVo.class); orderInfoVoPage.getRecords().parallelStream().forEach(s -> { List orderDetails = orderDetailService.queryChain().select() @@ -197,11 +199,11 @@ public class OrderInfoServiceImpl extends ServiceImpl orderDetails = cartService.getCartByTableCode(param.getTableCode(), param.isVipPrice() ? 1 : 0, param.getPlaceNum()); log.info("下单1 {}", JSONObject.toJSONString(orderDetails)); //总打包费 - BigDecimal packAmount = BigDecimal.ZERO; + BigDecimalDTO packAmount = new BigDecimalDTO(BigDecimal.ZERO); //总商品支付金额 不包含打包费 用来计算后续 BigDecimal totalAmount = processOrderDetails(orderDetails, packAmount); log.info("下单2 总金额{} {}", totalAmount, JSONObject.toJSONString(orderDetails)); - if (packAmount.compareTo(param.getPackFee()) != 0) { + if (packAmount.getPrice().compareTo(param.getPackFee()) != 0) { throw new ValidateException("生成订单失败,打包费不正确"); } log.info("下单3 打包费{} 金额{}", param.getPackFee(), param.getOriginAmount()); @@ -337,11 +339,11 @@ public class OrderInfoServiceImpl extends ServiceImpl orderDetails, BigDecimal packAmount) { + private BigDecimal processOrderDetails(List orderDetails, BigDecimalDTO packAmount) { BigDecimal totalAmount = BigDecimal.ZERO; for (OrderDetail detail : orderDetails) { if (detail.getPackNumber().compareTo(BigDecimal.ZERO) > 0 && detail.getPackAmount().compareTo(BigDecimal.ZERO) > 0) { - packAmount = packAmount.add(detail.getPackAmount().multiply(detail.getPackNumber())); + packAmount.setPrice(packAmount.getPrice().add(detail.getPackAmount().multiply(detail.getPackNumber()))); } detail.setPayAmount(detail.getNum().multiply(detail.getPrice())); totalAmount = totalAmount.add(detail.getPayAmount()); @@ -564,6 +566,32 @@ public class OrderInfoServiceImpl extends ServiceImpl> js2PayOrder(@NonNull String clintIp, OrderPayParamDTO payParam) { + AssertUtil.isBlank(payParam.getPayType(), "支付方式不能为空"); + AssertUtil.isBlank(payParam.getOpenId(), "用户小程序ID不能为空"); + OrderInfo orderInfo; + if (payParam.getCheckOrderPay().getOrderId() == null) { + orderInfo = orderInfoService.createPayOrder(payParam.getShopId(), payParam.getCheckOrderPay().getOrderAmount(), + payParam.getCheckOrderPay().getRemark()); + }else { + orderInfo = orderInfoService.getById(payParam.getCheckOrderPay().getOrderId()); + } + String payOrderNo = orderInfo.getPlatformType() + IdUtil.getSnowflakeNextId(); + Long paymentId = initOrderPayment(new OrderPayment(payParam.getShopId(), orderInfo.getId(), + "order", payOrderNo, "", orderInfo.getOrderAmount())); + upOrderPayInfo(orderInfo.getId(), "aliPay".equals(payParam.getPayType()) ? PayEnums.ALIPAY_MINI : PayEnums.WECHAT_MINI, paymentId); + return jsPay(payParam.getShopId(), payParam.getPayType(), new CzgJsPayReq(payOrderNo, orderInfo.getOrderAmount().multiply(MONEY_RATE).longValue(), + "点餐支付", payParam.getOpenId(), clintIp, payParam.getReturnUrl(), payParam.getBuyerRemark(), "")); + } + @Override @Transactional public CzgResult> ltPayOrder(@NonNull String clintIp, OrderPayParamDTO payParam) { @@ -469,8 +489,8 @@ public class PayServiceImpl implements PayService { throw new ValidateException("退单失败,可退金额不足"); } //非现金退款 - if(!param.isCash()){ - if(orderInfo.getPayType().equals(PayEnums.VIP_PAY.getValue())){ + if (!param.isCash()) { + if (orderInfo.getPayType().equals(PayEnums.VIP_PAY.getValue())) { ShopUser shopUser = shopUserService.getShopUserInfo(orderInfo.getShopId(), orderInfo.getUserId()); //会员支付 退钱 ShopUserMoneyEditDTO shopUserMoneyEditDTO = ShopUserMoneyEditDTO.builder() @@ -480,8 +500,8 @@ public class PayServiceImpl implements PayService { .relationId(orderInfo.getId()) .bizEnum(ShopUserFlowBizEnum.ORDER_REFUND) .build(); - shopUserService.updateMoney(orderInfo.getShopId(),shopUserMoneyEditDTO); - }else { + shopUserService.updateMoney(orderInfo.getShopId(), shopUserMoneyEditDTO); + } else { //退款 param.getRefundAmount() refundOrder(orderInfo.getShopId(), orderInfo.getId(), orderInfo.getPayOrderId(), refPayOrderNo, param.getRefundReason(), param.getRefundAmount()); @@ -522,6 +542,26 @@ public class PayServiceImpl implements PayService { return CzgResult.success(); } + @Override + @Transactional + public CzgResult> queryPayOrder(@NonNull Long orderId) { + OrderInfo orderInfo = orderInfoService.getById(orderId); + AssertUtil.isNull(orderInfo, "订单不存在"); + OrderPayment payment = paymentService.getById(orderInfo.getPayOrderId()); + AssertUtil.isNull(payment, "订单不存在"); + CzgResult res = queryPayOrder(orderInfo.getShopId(), payment.getOrderNo(), null); + CzgResult> result = CzgResult.success(); + if (res.getCode() != 200 || res.getData() == null) { + result.setCode(500); + result.setMsg(res.getMsg()); + return result; + } + Map map = new HashMap<>(); + map.put("payOrderId", payment.getOrderNo()); + result.setData(map); + return result; + } + @Override @Transactional public CzgResult queryPayOrder(@NonNull Long shopId, String payOrderId, String mchOrderNo) { From 28bb39230be2a11538827d079ec9858e79368ebc Mon Sep 17 00:00:00 2001 From: wangw <1594593906@qq.com> Date: Fri, 28 Feb 2025 15:33:29 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E9=A2=9D=E5=A4=96=20=E6=94=AF=E4=BB=982?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/czg/controller/OrderPayController.java | 1 - .../main/java/com/czg/service/order/service/PayService.java | 1 - .../czg/service/order/service/impl/OrderInfoServiceImpl.java | 4 +--- 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/cash-api/order-server/src/main/java/com/czg/controller/OrderPayController.java b/cash-api/order-server/src/main/java/com/czg/controller/OrderPayController.java index e34f992c..64f201ec 100644 --- a/cash-api/order-server/src/main/java/com/czg/controller/OrderPayController.java +++ b/cash-api/order-server/src/main/java/com/czg/controller/OrderPayController.java @@ -143,7 +143,6 @@ public class OrderPayController { /** * payType 必填 支付方式,aliPay 支付宝,wechatPay 微信 * openId 必填 - * * checkOrderPay.orderAmount 必填 */ @PostMapping("/shopPayApi/js2Pay") diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/service/PayService.java b/cash-service/order-service/src/main/java/com/czg/service/order/service/PayService.java index 3bb3e2eb..efd0827f 100644 --- a/cash-service/order-service/src/main/java/com/czg/service/order/service/PayService.java +++ b/cash-service/order-service/src/main/java/com/czg/service/order/service/PayService.java @@ -3,7 +3,6 @@ package com.czg.service.order.service; import com.czg.entity.resp.CzgBaseResp; import com.czg.entity.resp.CzgRefundResp; import com.czg.order.dto.OrderInfoRefundDTO; -import com.czg.order.entity.OrderInfo; import com.czg.resp.CzgResult; import com.czg.service.order.dto.OrderPayParamDTO; import com.czg.service.order.dto.VipPayParamDTO; diff --git a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/OrderInfoServiceImpl.java b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/OrderInfoServiceImpl.java index 621b3d0e..31bc708e 100644 --- a/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/OrderInfoServiceImpl.java +++ b/cash-service/order-service/src/main/java/com/czg/service/order/service/impl/OrderInfoServiceImpl.java @@ -35,7 +35,6 @@ import com.czg.service.RedisService; import com.czg.service.order.dto.BigDecimalDTO; import com.czg.service.order.enums.OrderStatusEnums; import com.czg.service.order.mapper.OrderInfoMapper; -import com.czg.service.order.service.PayService; import com.czg.utils.AssertUtil; import com.czg.utils.CzgStrUtils; import com.czg.utils.PageUtil; @@ -134,8 +133,7 @@ public class OrderInfoServiceImpl extends ServiceImpl