lishiqiang пре 1 месец
родитељ
комит
e5332cd33a

+ 2 - 1
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/handler/TradeStockOrderHandler.java

@@ -44,7 +44,8 @@ public class TradeStockOrderHandler implements TradeOrderHandler{
         ReduceStockReqDTO reqDTO = new ReduceStockReqDTO();
         reqDTO.setOrderId(order.getTradeOrderDO().getId());
         reqDTO.setOrderStatus(order.getTradeOrderDO().getOrderStatus());
-        reqDTO.setType(DistributorOrStoreEnum.DISTRIBUTOR.getValue());//TODO: 当前默认为分销商,扣分销商库存,门店的后续再完善
+        //TODO: 当前默认为分销商,扣分销商库存,门店的后续再完善
+        reqDTO.setType(DistributorOrStoreEnum.DISTRIBUTOR.getValue());
         reqDTO.setVoyageId(order.getTradeOrderDO().getVoyageId());
         reqDTO.setDistributorId(Long.valueOf(order.getTradeOrderDO().getSourceId()));
         reqDTO.setStoreId(order.getTradeOrderDO().getStoreId());

+ 48 - 8
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/pay/impl/TradeOrderPayServiceImpl.java

@@ -9,6 +9,7 @@ import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.yc.ship.framework.common.exception.ServiceException;
 import com.yc.ship.framework.common.lang.Asserts;
@@ -23,19 +24,23 @@ import com.yc.ship.module.ota.api.dto.BillPayReqDTO;
 import com.yc.ship.module.ota.api.dto.DistributorRechargeReqDTO;
 import com.yc.ship.module.ota.api.dto.DistributorRespDTO;
 import com.yc.ship.module.ota.api.dto.DistributorSelfRechargeReqDTO;
+import com.yc.ship.module.product.api.VoyageApi;
+import com.yc.ship.module.product.api.dto.OrderRoomUseDTO;
+import com.yc.ship.module.product.api.dto.ReduceStockReqDTO;
+import com.yc.ship.module.product.enums.DistributorOrStoreEnum;
 import com.yc.ship.module.trade.controller.admin.order.vo.order.PayOrderReqVO;
 import com.yc.ship.module.trade.controller.admin.order.vo.order.PayOrderRespVO;
-import com.yc.ship.module.trade.dal.dataobject.order.TradeDetailDO;
-import com.yc.ship.module.trade.dal.dataobject.order.TradeMchInfoDO;
-import com.yc.ship.module.trade.dal.dataobject.order.TradeOrderDO;
-import com.yc.ship.module.trade.dal.dataobject.order.TradeOrderPayDO;
+import com.yc.ship.module.trade.dal.dataobject.order.*;
 import com.yc.ship.module.trade.dal.dataobject.supplier.TradeSupplierOrderDO;
+import com.yc.ship.module.trade.dal.mysql.order.TradeOrderTotalMapper;
+import com.yc.ship.module.trade.dal.mysql.order.TradeVisitorMapper;
 import com.yc.ship.module.trade.enums.*;
 import com.yc.ship.module.trade.framework.annotation.TradeOrderLog;
 import com.yc.ship.module.trade.framework.common.ExceptionUtils;
 import com.yc.ship.module.trade.framework.common.TradeOrderLogUtils;
 import com.yc.ship.module.trade.service.bill.BillService;
 import com.yc.ship.module.trade.service.order.TradeOrderRepositoryService;
+import com.yc.ship.module.trade.service.order.bo.TradeOrderDetailBO;
 import com.yc.ship.module.trade.service.pay.PayPlatService;
 import com.yc.ship.module.trade.service.pay.PayTypeService;
 import com.yc.ship.module.trade.service.pay.TradeOrderPayService;
@@ -56,11 +61,10 @@ import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 import static com.yc.ship.framework.common.exception.util.ServiceExceptionUtil.exception0;
 import static com.yc.ship.module.ota.enums.ErrorCodeConstants.ORDER_PAY_AUTO_REFUND;
@@ -108,6 +112,14 @@ public class TradeOrderPayServiceImpl implements TradeOrderPayService {
     @Resource
     private AgencyAuthUtils agencyAuthUtils;
 
+    @Resource
+    private VoyageApi voyageApi;
+
+    @Resource
+    private TradeOrderTotalMapper tradeOrderTotalMapper;
+    @Resource
+    private TradeVisitorMapper tradeVisitorMapper;
+
     @Override
     public CommonResult<PayOrderRespVO> payOrder(PayOrderReqVO payOrderReqVO) {
         try {
@@ -284,6 +296,34 @@ public class TradeOrderPayServiceImpl implements TradeOrderPayService {
                 //变更订单为取消
                 tradeOrderDO.setOrderStatus(TradeOrderStatusEnum.CANCELED.getStatus());
                 tradeOrderRepositoryService.cancelOrder(tradeOrderDO.getId());
+                ReduceStockReqDTO reqDTO = new ReduceStockReqDTO();
+                reqDTO.setOrderId(tradeOrderDO.getId());
+                reqDTO.setOrderStatus(tradeOrderDO.getOrderStatus());
+                //TODO: 当前默认为分销商,扣分销商库存,门店的后续再完善
+                reqDTO.setType(DistributorOrStoreEnum.DISTRIBUTOR.getValue());
+                reqDTO.setVoyageId(tradeOrderDO.getVoyageId());
+                reqDTO.setDistributorId(Long.valueOf(tradeOrderDO.getSourceId()));
+                reqDTO.setStoreId(tradeOrderDO.getStoreId());
+
+                TradeOrderTotalDO tradeOrderTotal = tradeOrderTotalMapper.selectOne(new LambdaQueryWrapper<TradeOrderTotalDO>().eq(TradeOrderTotalDO::getOldOrderId, orderId));
+                reqDTO.setUseRoomNum(BigDecimal.valueOf(tradeOrderTotal.getUseRoomTotalNum()));
+
+                List<TradeVisitorDO> tradeDetailDOList = tradeVisitorMapper.selectShipVisitor(orderId);
+                List<OrderRoomUseDTO> orderRoomUseDTOList = new ArrayList<>();
+                Map<String, Long> collect = tradeDetailDOList.stream().filter(tradeVisitorDO -> tradeVisitorDO.getRoomId() != null).collect(Collectors.groupingBy(TradeVisitorDO::getRoomId, Collectors.counting()));
+                collect.keySet().forEach(roomId -> {
+                    if(StringUtils.isNotBlank(roomId)) {
+                        OrderRoomUseDTO orderRoomUseDTO = new OrderRoomUseDTO();
+                        orderRoomUseDTO.setRoomId(Long.valueOf(roomId));
+                        orderRoomUseDTO.setNum(BigDecimal.valueOf(collect.get(roomId)).divide(new BigDecimal(2)));
+                        orderRoomUseDTOList.add(orderRoomUseDTO);
+                    }
+                });
+                reqDTO.setOrderRoomList(orderRoomUseDTOList);
+                if(Objects.equals(orderStatus, TradeOrderStatusEnum.YD.getStatus())) {
+                    voyageApi.preCancelReduceStock(reqDTO);
+                }
+
                 //添加订单日志
                 TradeOrderLogUtils.setOrderInfo(orderId, orderStatus, TradeOrderStatusEnum.CANCELED.getStatus());
             } else {

+ 45 - 12
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/refund/impl/TradeRefundServiceImpl.java

@@ -8,6 +8,7 @@ import cn.hutool.core.util.NumberUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.extra.spring.SpringUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.yc.ship.framework.common.exception.ServiceException;
 import com.yc.ship.framework.common.lang.Asserts;
@@ -22,8 +23,12 @@ import com.yc.ship.module.ota.api.OtaDistributorApi;
 import com.yc.ship.module.ota.api.dto.BillResetReqDTO;
 import com.yc.ship.module.ota.api.dto.DistributorRespDTO;
 import com.yc.ship.module.product.api.ProductApi;
+import com.yc.ship.module.product.api.VoyageApi;
+import com.yc.ship.module.product.api.dto.OrderRoomUseDTO;
 import com.yc.ship.module.product.api.dto.ProductRefundRuleRespDTO;
 import com.yc.ship.module.product.api.dto.ProductSpuRespDTO;
+import com.yc.ship.module.product.api.dto.ReduceStockReqDTO;
+import com.yc.ship.module.product.enums.DistributorOrStoreEnum;
 import com.yc.ship.module.product.enums.RefundRuleEnum;
 import com.yc.ship.module.trade.api.dto.*;
 import com.yc.ship.module.trade.controller.admin.order.vo.refund.TradeRefundAmountReqVO;
@@ -32,6 +37,8 @@ import com.yc.ship.module.trade.dal.dataobject.bill.BillStoreDO;
 import com.yc.ship.module.trade.dal.dataobject.order.*;
 import com.yc.ship.module.trade.dal.dataobject.refund.*;
 import com.yc.ship.module.trade.dal.dataobject.supplier.SupplierRefundDO;
+import com.yc.ship.module.trade.dal.mysql.order.TradeOrderTotalMapper;
+import com.yc.ship.module.trade.dal.mysql.order.TradeVisitorMapper;
 import com.yc.ship.module.trade.enums.*;
 import com.yc.ship.module.trade.framework.annotation.TradeOrderLog;
 import com.yc.ship.module.trade.framework.common.ExceptionUtils;
@@ -55,6 +62,7 @@ import com.yc.ship.module.trade.service.supplier.TradeSupplierService;
 import com.yc.ship.module.trade.utils.AgencyAuthUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.MapUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.redisson.api.RLock;
 import org.redisson.api.RedissonClient;
 import org.springframework.context.annotation.Lazy;
@@ -106,7 +114,6 @@ public class TradeRefundServiceImpl implements TradeRefundService {
     private TradePublishUtils tradePublishUtils;
     @Resource
     private List<TradeOrderHandler> tradeOrderHandlers;
-    private RedisTemplate redisTemplate;
     @Resource
     private AgencyAuthUtils agencyAuthUtils;
     @Resource
@@ -117,6 +124,13 @@ public class TradeRefundServiceImpl implements TradeRefundService {
     private BillService billService;
     @Resource
     private TradeSupplierOrderRepositoryService tradeSupplierOrderRepositoryService;
+    @Resource
+    private VoyageApi voyageApi;
+
+    @Resource
+    private TradeOrderTotalMapper tradeOrderTotalMapper;
+    @Resource
+    private TradeVisitorMapper tradeVisitorMapper;
     @Override
     public CommonResult<TradeRefundRespDTO> refund(TradeRefundCreateReqDTO refundCreateReqDTO) {
         String lockKey = String.format(UPDATE_ORDER_LOCK,refundCreateReqDTO.getOrderId());
@@ -229,17 +243,36 @@ public class TradeRefundServiceImpl implements TradeRefundService {
             if(commonResult.isError()){
                 return CommonResult.error(commonResult.getCode(),commonResult.getMsg());
             }
-//            TradeRefundBO tradeRefundBO =buildRefundOrderFromRefund(refundDO);
-//            CommonResult<?> supplerRefundResp = tradeSupplierService.refund(tradeRefundBO);
-//            if(supplerRefundResp.isError()){
-//                //4.1 供应商退款失败回调 ,此时逻辑是供应退款失败了,不发起退款,看后面是否审核通过了就忽略供应商的状态,无论成功或失败都发起退款
-//                tradeSupplierCallbackService.afterAnyRefundFail(supplerRefundResp,tradeRefundBO);
-//                CommonResult<TradeRefundAuditRespDTO> result = CommonResult.error(supplerRefundResp.getCode(),supplerRefundResp.getMsg());
-//                result.setData(respDTO);
-//                return result;
-//            }
-//            //4.2 供应商退款成功回调, 发起对应渠道退款
-//            tradeSupplierCallbackService.afterAllRefund(tradeRefundBO);
+            try {
+                ReduceStockReqDTO reqDTO = new ReduceStockReqDTO();
+                TradeOrderDO tradeOrderDO = tradeOrderRepositoryService.getById(refundDO.getOrderId());
+                reqDTO.setOrderId(tradeOrderDO.getId());
+                reqDTO.setOrderStatus(tradeOrderDO.getOrderStatus());
+                //TODO: 当前默认为分销商,扣分销商库存,门店的后续再完善
+                reqDTO.setType(DistributorOrStoreEnum.DISTRIBUTOR.getValue());
+                reqDTO.setVoyageId(tradeOrderDO.getVoyageId());
+                reqDTO.setDistributorId(Long.valueOf(tradeOrderDO.getSourceId()));
+                reqDTO.setStoreId(tradeOrderDO.getStoreId());
+
+                TradeOrderTotalDO tradeOrderTotal = tradeOrderTotalMapper.selectOne(new LambdaQueryWrapper<TradeOrderTotalDO>().eq(TradeOrderTotalDO::getOldOrderId, tradeOrderDO.getId()));
+                reqDTO.setUseRoomNum(BigDecimal.valueOf(tradeOrderTotal.getUseRoomTotalNum()));
+
+                List<TradeVisitorDO> tradeDetailDOList = tradeVisitorMapper.selectShipVisitor(tradeOrderDO.getId());
+                List<OrderRoomUseDTO> orderRoomUseDTOList = new ArrayList<>();
+                Map<String, Long> collect = tradeDetailDOList.stream().filter(tradeVisitorDO -> tradeVisitorDO.getRoomId() != null).collect(Collectors.groupingBy(TradeVisitorDO::getRoomId, Collectors.counting()));
+                collect.keySet().forEach(roomId -> {
+                    if (StringUtils.isNotBlank(roomId)) {
+                        OrderRoomUseDTO orderRoomUseDTO = new OrderRoomUseDTO();
+                        orderRoomUseDTO.setRoomId(Long.valueOf(roomId));
+                        orderRoomUseDTO.setNum(BigDecimal.valueOf(collect.get(roomId)).divide(new BigDecimal(2)));
+                        orderRoomUseDTOList.add(orderRoomUseDTO);
+                    }
+                });
+                reqDTO.setOrderRoomList(orderRoomUseDTOList);
+                voyageApi.cancelReduceStock(reqDTO);
+            }catch (Exception e) {
+                log.error("取消库存cancelReduceStock失败",e);
+            }
         }else{
             //拒绝-》更新退款单为审核拒绝-》更新订单为原状态
             tradeRefundRepositoryService.updateRefundStatus(refundAuditReqDTO.getRefundId(),RefundStatusEnum.REFUSE);