|
@@ -9,6 +9,7 @@ import cn.hutool.core.util.RandomUtil;
|
|
import cn.hutool.extra.spring.SpringUtil;
|
|
import cn.hutool.extra.spring.SpringUtil;
|
|
import cn.newfeifan.mall.framework.common.core.KeyValue;
|
|
import cn.newfeifan.mall.framework.common.core.KeyValue;
|
|
import cn.newfeifan.mall.framework.common.enums.UserTypeEnum;
|
|
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.json.JsonUtils;
|
|
import cn.newfeifan.mall.framework.common.util.number.MoneyUtils;
|
|
import cn.newfeifan.mall.framework.common.util.number.MoneyUtils;
|
|
import cn.newfeifan.mall.module.distri.constant.DistriConstants;
|
|
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.PayOrderApi;
|
|
import cn.newfeifan.mall.module.pay.api.order.dto.PayOrderCreateReqDTO;
|
|
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.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.pay.enums.order.PayOrderStatusEnum;
|
|
import cn.newfeifan.mall.module.product.api.comment.ProductCommentApi;
|
|
import cn.newfeifan.mall.module.product.api.comment.ProductCommentApi;
|
|
import cn.newfeifan.mall.module.product.api.comment.dto.ProductCommentCreateReqDTO;
|
|
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.TradePriceCalculateReqBO;
|
|
import cn.newfeifan.mall.module.trade.service.price.bo.TradePriceCalculateRespBO;
|
|
import cn.newfeifan.mall.module.trade.service.price.bo.TradePriceCalculateRespBO;
|
|
import cn.newfeifan.mall.module.trade.service.price.calculator.TradePriceCalculatorHelper;
|
|
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 lombok.extern.slf4j.Slf4j;
|
|
import org.jetbrains.annotations.NotNull;
|
|
import org.jetbrains.annotations.NotNull;
|
|
import org.springframework.beans.BeanUtils;
|
|
import org.springframework.beans.BeanUtils;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
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 javax.annotation.Resource;
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
import java.util.*;
|
|
import java.util.*;
|
|
|
|
|
|
import static cn.newfeifan.mall.framework.common.exception.util.ServiceExceptionUtil.exception;
|
|
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.collection.CollectionUtils.*;
|
|
import static cn.newfeifan.mall.framework.common.util.date.LocalDateTimeUtils.minusTime;
|
|
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.common.util.servlet.ServletUtils.getClientIP;
|
|
import static cn.newfeifan.mall.framework.web.core.util.WebFrameworkUtils.getTerminal;
|
|
import static cn.newfeifan.mall.framework.web.core.util.WebFrameworkUtils.getTerminal;
|
|
import static cn.newfeifan.mall.module.trade.enums.ErrorCodeConstants.*;
|
|
import static cn.newfeifan.mall.module.trade.enums.ErrorCodeConstants.*;
|
|
|
|
|
|
|
|
+
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 交易订单【写】Service 实现类
|
|
* 交易订单【写】Service 实现类
|
|
*
|
|
*
|
|
@@ -125,8 +137,65 @@ public class TradeOrderUpdateServiceImpl implements TradeOrderUpdateService {
|
|
@Resource
|
|
@Resource
|
|
private TradeOrderProperties tradeOrderProperties;
|
|
private TradeOrderProperties tradeOrderProperties;
|
|
|
|
|
|
|
|
+ @Resource
|
|
|
|
+ private PayOrderMapper payOrderMapper;
|
|
|
|
+
|
|
// =================== Order ===================
|
|
// =================== 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
|
|
@Override
|
|
public AppTradeOrderSettlementRespVO settlementOrder(Long userId, AppTradeOrderSettlementReqVO settlementReqVO) {
|
|
public AppTradeOrderSettlementRespVO settlementOrder(Long userId, AppTradeOrderSettlementReqVO settlementReqVO) {
|
|
// 1. 获得收货地址
|
|
// 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) {
|
|
private Long createPayOrder(TradeOrderDO order, List<TradeOrderItemDO> orderItems) {
|
|
// 创建支付单,用于后续的支付
|
|
// 创建支付单,用于后续的支付
|