|
@@ -8,6 +8,7 @@ import cn.hutool.core.util.NumberUtil;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import cn.hutool.extra.spring.SpringUtil;
|
|
import cn.hutool.extra.spring.SpringUtil;
|
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
|
import com.baomidou.mybatisplus.core.toolkit.IdWorker;
|
|
|
import com.yc.ship.framework.common.exception.ServiceException;
|
|
import com.yc.ship.framework.common.exception.ServiceException;
|
|
|
import com.yc.ship.framework.common.lang.Asserts;
|
|
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.BillResetReqDTO;
|
|
|
import com.yc.ship.module.ota.api.dto.DistributorRespDTO;
|
|
import com.yc.ship.module.ota.api.dto.DistributorRespDTO;
|
|
|
import com.yc.ship.module.product.api.ProductApi;
|
|
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.ProductRefundRuleRespDTO;
|
|
|
import com.yc.ship.module.product.api.dto.ProductSpuRespDTO;
|
|
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.product.enums.RefundRuleEnum;
|
|
|
import com.yc.ship.module.trade.api.dto.*;
|
|
import com.yc.ship.module.trade.api.dto.*;
|
|
|
import com.yc.ship.module.trade.controller.admin.order.vo.refund.TradeRefundAmountReqVO;
|
|
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.order.*;
|
|
|
import com.yc.ship.module.trade.dal.dataobject.refund.*;
|
|
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.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.enums.*;
|
|
|
import com.yc.ship.module.trade.framework.annotation.TradeOrderLog;
|
|
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.ExceptionUtils;
|
|
@@ -55,6 +62,7 @@ import com.yc.ship.module.trade.service.supplier.TradeSupplierService;
|
|
|
import com.yc.ship.module.trade.utils.AgencyAuthUtils;
|
|
import com.yc.ship.module.trade.utils.AgencyAuthUtils;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.collections4.MapUtils;
|
|
import org.apache.commons.collections4.MapUtils;
|
|
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
import org.redisson.api.RLock;
|
|
import org.redisson.api.RLock;
|
|
|
import org.redisson.api.RedissonClient;
|
|
import org.redisson.api.RedissonClient;
|
|
|
import org.springframework.context.annotation.Lazy;
|
|
import org.springframework.context.annotation.Lazy;
|
|
@@ -106,7 +114,6 @@ public class TradeRefundServiceImpl implements TradeRefundService {
|
|
|
private TradePublishUtils tradePublishUtils;
|
|
private TradePublishUtils tradePublishUtils;
|
|
|
@Resource
|
|
@Resource
|
|
|
private List<TradeOrderHandler> tradeOrderHandlers;
|
|
private List<TradeOrderHandler> tradeOrderHandlers;
|
|
|
- private RedisTemplate redisTemplate;
|
|
|
|
|
@Resource
|
|
@Resource
|
|
|
private AgencyAuthUtils agencyAuthUtils;
|
|
private AgencyAuthUtils agencyAuthUtils;
|
|
|
@Resource
|
|
@Resource
|
|
@@ -117,6 +124,13 @@ public class TradeRefundServiceImpl implements TradeRefundService {
|
|
|
private BillService billService;
|
|
private BillService billService;
|
|
|
@Resource
|
|
@Resource
|
|
|
private TradeSupplierOrderRepositoryService tradeSupplierOrderRepositoryService;
|
|
private TradeSupplierOrderRepositoryService tradeSupplierOrderRepositoryService;
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private VoyageApi voyageApi;
|
|
|
|
|
+
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private TradeOrderTotalMapper tradeOrderTotalMapper;
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private TradeVisitorMapper tradeVisitorMapper;
|
|
|
@Override
|
|
@Override
|
|
|
public CommonResult<TradeRefundRespDTO> refund(TradeRefundCreateReqDTO refundCreateReqDTO) {
|
|
public CommonResult<TradeRefundRespDTO> refund(TradeRefundCreateReqDTO refundCreateReqDTO) {
|
|
|
String lockKey = String.format(UPDATE_ORDER_LOCK,refundCreateReqDTO.getOrderId());
|
|
String lockKey = String.format(UPDATE_ORDER_LOCK,refundCreateReqDTO.getOrderId());
|
|
@@ -229,17 +243,36 @@ public class TradeRefundServiceImpl implements TradeRefundService {
|
|
|
if(commonResult.isError()){
|
|
if(commonResult.isError()){
|
|
|
return CommonResult.error(commonResult.getCode(),commonResult.getMsg());
|
|
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{
|
|
}else{
|
|
|
//拒绝-》更新退款单为审核拒绝-》更新订单为原状态
|
|
//拒绝-》更新退款单为审核拒绝-》更新订单为原状态
|
|
|
tradeRefundRepositoryService.updateRefundStatus(refundAuditReqDTO.getRefundId(),RefundStatusEnum.REFUSE);
|
|
tradeRefundRepositoryService.updateRefundStatus(refundAuditReqDTO.getRefundId(),RefundStatusEnum.REFUSE);
|