Преглед на файлове

update: 修改订单部分。

Ben преди 11 месеца
родител
ревизия
0a0b366559

+ 12 - 0
feifan-module-mall/feifan-module-trade-biz/pom.xml

@@ -136,6 +136,18 @@
             <version>2.0.0-jdk8-snapshot</version>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>cn.newfeifan.zx</groupId>
+            <artifactId>feifan-module-pay-biz</artifactId>
+            <version>2.0.0-jdk8-snapshot</version>
+            <scope>compile</scope>
+        </dependency>
+        <dependency>
+            <groupId>cn.newfeifan.zx</groupId>
+            <artifactId>feifan-module-pay-biz</artifactId>
+            <version>2.0.0-jdk8-snapshot</version>
+            <scope>compile</scope>
+        </dependency>
 
 
     </dependencies>

+ 22 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/controller/app/order/AppTradeOrderController.java

@@ -4,6 +4,9 @@ import cn.newfeifan.mall.framework.common.pojo.CommonResult;
 import cn.newfeifan.mall.framework.common.pojo.PageResult;
 import cn.newfeifan.mall.framework.security.core.annotations.PreAuthenticated;
 import cn.newfeifan.mall.module.pay.api.notify.dto.PayOrderNotifyReqDTO;
+import cn.newfeifan.mall.module.pay.controller.admin.order.vo.PayOrderRespVO;
+import cn.newfeifan.mall.module.pay.convert.order.PayOrderConvert;
+import cn.newfeifan.mall.module.pay.dal.dataobject.order.PayOrderDO;
 import cn.newfeifan.mall.module.trade.controller.app.order.vo.*;
 import cn.newfeifan.mall.module.trade.controller.app.order.vo.item.AppTradeOrderItemCommentCreateReqVO;
 import cn.newfeifan.mall.module.trade.controller.app.order.vo.item.AppTradeOrderItemRespVO;
@@ -54,6 +57,25 @@ public class AppTradeOrderController {
     @Resource
     private TradeOrderProperties tradeOrderProperties;
 
+
+    /**
+     * add by Ben
+     * 待支付订单,点支付时的新增方法
+     * @param tradeOrderId
+     * @return
+     */
+    @GetMapping("/getPayOrder")
+    @Operation(summary = "获得待支付列表的待支付订单")
+    @Parameter(name = "tradeOrderId", description = "订单编号", required = true, example = "102")
+    public CommonResult<PayOrderRespVO> getPayOrder(@RequestParam("tradeOrderId") Long tradeOrderId) {
+
+        PayOrderDO payOrder = tradeOrderUpdateService.getPayOrder(tradeOrderId);
+
+        CommonResult<PayOrderRespVO> rs =
+                success(PayOrderConvert.INSTANCE.convert(payOrder));
+        return rs;
+    }
+
     @GetMapping("/settlement")
     @Operation(summary = "获得订单结算信息")
     @PreAuthenticated

+ 2 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/order/TradeOrderUpdateService.java

@@ -1,6 +1,7 @@
 package cn.newfeifan.mall.module.trade.service.order;
 
 import cn.newfeifan.mall.framework.common.enums.TerminalEnum;
+import cn.newfeifan.mall.module.pay.dal.dataobject.order.PayOrderDO;
 import cn.newfeifan.mall.module.trade.controller.admin.order.vo.TradeOrderDeliveryReqVO;
 import cn.newfeifan.mall.module.trade.controller.admin.order.vo.TradeOrderRemarkReqVO;
 import cn.newfeifan.mall.module.trade.controller.admin.order.vo.TradeOrderUpdateAddressReqVO;
@@ -196,4 +197,5 @@ public interface TradeOrderUpdateService {
      */
     void cancelPaidOrder(Long userId, Long orderId);
 
+    PayOrderDO getPayOrder(Long tradeOrderId);
 }

+ 97 - 0
feifan-module-mall/feifan-module-trade-biz/src/main/java/cn/newfeifan/mall/module/trade/service/order/TradeOrderUpdateServiceImpl.java

@@ -9,6 +9,7 @@ import cn.hutool.core.util.RandomUtil;
 import cn.hutool.extra.spring.SpringUtil;
 import cn.newfeifan.mall.framework.common.core.KeyValue;
 import cn.newfeifan.mall.framework.common.enums.UserTypeEnum;
+import cn.newfeifan.mall.framework.common.pojo.CommonResult;
 import cn.newfeifan.mall.framework.common.util.json.JsonUtils;
 import cn.newfeifan.mall.framework.common.util.number.MoneyUtils;
 import cn.newfeifan.mall.module.distri.constant.DistriConstants;
@@ -19,6 +20,10 @@ import cn.newfeifan.mall.module.member.api.address.dto.MemberAddressRespDTO;
 import cn.newfeifan.mall.module.pay.api.order.PayOrderApi;
 import cn.newfeifan.mall.module.pay.api.order.dto.PayOrderCreateReqDTO;
 import cn.newfeifan.mall.module.pay.api.order.dto.PayOrderRespDTO;
+import cn.newfeifan.mall.module.pay.controller.admin.order.vo.PayOrderRespVO;
+import cn.newfeifan.mall.module.pay.convert.order.PayOrderConvert;
+import cn.newfeifan.mall.module.pay.dal.dataobject.order.PayOrderDO;
+import cn.newfeifan.mall.module.pay.dal.mysql.order.PayOrderMapper;
 import cn.newfeifan.mall.module.pay.enums.order.PayOrderStatusEnum;
 import cn.newfeifan.mall.module.product.api.comment.ProductCommentApi;
 import cn.newfeifan.mall.module.product.api.comment.dto.ProductCommentCreateReqDTO;
@@ -57,23 +62,30 @@ import cn.newfeifan.mall.module.trade.service.price.TradePriceService;
 import cn.newfeifan.mall.module.trade.service.price.bo.TradePriceCalculateReqBO;
 import cn.newfeifan.mall.module.trade.service.price.bo.TradePriceCalculateRespBO;
 import cn.newfeifan.mall.module.trade.service.price.calculator.TradePriceCalculatorHelper;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
 import lombok.extern.slf4j.Slf4j;
 import org.jetbrains.annotations.NotNull;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 
 import javax.annotation.Resource;
 import java.time.LocalDateTime;
 import java.util.*;
 
 import static cn.newfeifan.mall.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.newfeifan.mall.framework.common.pojo.CommonResult.success;
 import static cn.newfeifan.mall.framework.common.util.collection.CollectionUtils.*;
 import static cn.newfeifan.mall.framework.common.util.date.LocalDateTimeUtils.minusTime;
 import static cn.newfeifan.mall.framework.common.util.servlet.ServletUtils.getClientIP;
 import static cn.newfeifan.mall.framework.web.core.util.WebFrameworkUtils.getTerminal;
 import static cn.newfeifan.mall.module.trade.enums.ErrorCodeConstants.*;
 
+
+
 /**
  * 交易订单【写】Service 实现类
  *
@@ -125,8 +137,65 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
     @Resource
     private TradeOrderProperties tradeOrderProperties;
 
+    @Resource
+    private PayOrderMapper payOrderMapper;
+
     // =================== Order ===================
 
+
+    /**
+     * add by Ben
+     * 待支付订单,点支付时的新增方法
+     * @param tradeOrderId
+     * @return
+     */
+    public PayOrderDO getPayOrder(Long tradeOrderId) {
+
+//        PayOrderRespVO rs = null;
+        PayOrderDO thisPayOrderDO = null;//当前订单对应的支付订单
+
+        //页面传入的订单
+        TradeOrderDO orderDO = tradeOrderMapper.selectOne("id", tradeOrderId);
+       Long parentPayOrderId = orderDO.getPayOrderId();
+
+        //本订单对应的支付订单id,是否是多个订单支付的合并支付订单
+        List<TradeOrderDO> tradeOrderList = tradeOrderMapper.selectList("pay_order_id", parentPayOrderId);
+        if(tradeOrderList.size()==1){//如果一个支付单只对应一个订单,证明不是合并支付订单
+
+            thisPayOrderDO = payOrderMapper.selectById(parentPayOrderId);
+//            rs = thisPayOrderDO;
+        }else if(tradeOrderList.size()>1){//如果一个支付单对应多个订单,证明是合并支付订单,则生成其下级拆分支付的支付单
+
+            PayOrderDO parentPayOrderDO = payOrderMapper.selectById(parentPayOrderId);
+            LocalDateTime expireTime = parentPayOrderDO.getExpireTime();//原合并支付订单的过期时间
+
+            for (int i = 0; i < tradeOrderList.size(); i++) {
+                TradeOrderDO tradeOrderDO = tradeOrderList.get(i);
+                Long tId = tradeOrderDO.getId();
+                List<TradeOrderItemDO> tradeOrderItemDOS = tradeOrderItemMapper.selectList("order_id", tId);
+
+                //创建子支付订单,并且让trade_order记录关联子支付订单
+                Long childPayOrderId = createChildPayOrder(tradeOrderDO, tradeOrderItemDOS,
+                        parentPayOrderId,expireTime);
+
+                if(tId==tradeOrderId){//如果当前为页面传入的订单
+                    thisPayOrderDO = payOrderMapper.selectById(childPayOrderId);
+                }
+            }
+
+            parentPayOrderDO = new PayOrderDO();
+            parentPayOrderDO.setId(parentPayOrderId);
+            parentPayOrderDO.setStatus(PayOrderStatusEnum.CLOSED.getStatus());
+            parentPayOrderDO.setExpireTime(LocalDateTime.now());
+            payOrderMapper.updateById(parentPayOrderDO);//修改订单状态为已关闭和修改过期时间为现在
+
+//            rs = thisPayOrderDO;
+        }
+
+        return thisPayOrderDO;
+    }
+
+
     @Override
     public AppTradeOrderSettlementRespVO settlementOrder(Long userId, AppTradeOrderSettlementReqVO settlementReqVO) {
         // 1. 获得收货地址
@@ -578,6 +647,34 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
     }
 
 
+    /**
+     * 创建子支付订单
+     * @param order
+     * @param orderItems
+     * @param parentPayOrderId  父级支付订单id
+     * @param expireTime  支付过期时间
+     * @return
+     */
+    private Long createChildPayOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems,
+                                     Long parentPayOrderId,LocalDateTime expireTime) {
+        // 创建支付单,用于后续的支付
+        PayOrderCreateReqDTO payOrderCreateReqDTO = TradeOrderConvert.INSTANCE.convert(
+                order, orderItems, tradeOrderProperties);
+
+        payOrderCreateReqDTO.setParentPayOrderId(parentPayOrderId);
+        payOrderCreateReqDTO.setExpireTime(expireTime);
+        payOrderCreateReqDTO.setPrice(order.getPayRmb());//同步订单价格
+
+        Long payOrderId = payOrderApi.createOrder(payOrderCreateReqDTO);
+
+        //支付订单id更新到交易单上
+        tradeOrderMapper.updateById(new TradeOrderDO().setId(order.getId()).setPayOrderId(payOrderId));
+
+        order.setPayOrderId(payOrderId);
+
+        return payOrderId;//返回支付订单ID
+    }
+
 
     private Long createPayOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
         // 创建支付单,用于后续的支付

+ 5 - 0
feifan-module-pay/feifan-module-pay-api/src/main/java/cn/newfeifan/mall/module/pay/api/order/dto/PayOrderCreateReqDTO.java

@@ -17,6 +17,11 @@ public class PayOrderCreateReqDTO implements Serializable {
 
     public static final int SUBJECT_MAX_LENGTH = 32;
 
+    /**
+     * 父级支付订单id
+     */
+    private Long parentPayOrderId;
+
     /**
      * 应用编号
      */

+ 4 - 2
feifan-module-pay/feifan-module-pay-biz/src/main/java/cn/newfeifan/mall/module/pay/controller/app/order/AppPayOrderController.java

@@ -40,9 +40,11 @@ public class AppPayOrderController {
     // TODO 非繁人:临时 demo,技术打样。
     @GetMapping("/get")
     @Operation(summary = "获得支付订单")
-    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @Parameter(name = "id", description = "支付订单编号", required = true, example = "1024")
     public CommonResult<PayOrderRespVO> getOrder(@RequestParam("id") Long id) {
-        return success(PayOrderConvert.INSTANCE.convert(payOrderService.getOrder(id)));
+        CommonResult<PayOrderRespVO> rs =
+                success(PayOrderConvert.INSTANCE.convert(payOrderService.getOrder(id)));
+        return rs;
     }
 
     @PostMapping("/submit")

+ 6 - 0
feifan-module-pay/feifan-module-pay-biz/src/main/java/cn/newfeifan/mall/module/pay/dal/dataobject/order/PayOrderDO.java

@@ -30,6 +30,12 @@ public class PayOrderDO extends BaseDO {
      * 订单编号,数据库自增
      */
     private Long id;
+
+    /**
+     * 父级支付单id:即从购物车把多店铺订单合并支付时的支付订单id
+     */
+    private Long parentPayOrderId;
+
     /**
      * 应用编号
      *

+ 2 - 0
feifan-module-pay/feifan-module-pay-biz/src/main/java/cn/newfeifan/mall/module/pay/service/order/PayOrderServiceImpl.java

@@ -133,6 +133,8 @@ public class PayOrderServiceImpl implements PayOrderService {
                 .setStatus(PayOrderStatusEnum.WAITING.getStatus())
                 // 退款相关字段
                 .setRefundPrice(0);
+        order.setParentPayOrderId(reqDTO.getParentPayOrderId());//设置父支付订单ID
+        order.setExpireTime(order.getExpireTime());//把父支付订单的过期时间,设置到子订单
         orderMapper.insert(order);
         return order.getId();
     }