lishiqiang vor 1 Woche
Ursprung
Commit
024aca8557

+ 1 - 1
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/OtcTradeOrderController.java

@@ -308,7 +308,7 @@ public class OtcTradeOrderController {
                     item.setTotalPerson(0);
                 }
 
-                if(!item.getRoomModelList().isEmpty()) {
+                if(item.getRoomModelList()!=null && item.getRoomModelList().isEmpty()) {
                     Map<String, List<TradeOrderRoomModelVO>> roomDesc = item.getRoomModelList().stream().collect(Collectors.groupingBy(p -> p.getRoomModelName() + "(" + p.getFloor() + "F)"));
                     AtomicReference<String> roomDescStr = new AtomicReference<>("");
                     roomDesc.forEach((key, value) -> roomDescStr.set(roomDescStr.get() + " " + value.size() + "*" + key));

+ 21 - 54
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/impl/AdminTradeOrderServiceImpl.java

@@ -39,8 +39,6 @@ import com.yc.ship.module.trade.dal.mysql.audituser.AuditUserMapper;
 import com.yc.ship.module.trade.dal.mysql.order.TradeDetailMapper;
 import com.yc.ship.module.trade.dal.mysql.order.TradeOrderBindMapper;
 import com.yc.ship.module.trade.dal.mysql.order.TradeOrderMapper;
-import com.yc.ship.module.trade.dal.mysql.refund.CancelAuditMapper;
-import com.yc.ship.module.trade.dal.mysql.tradeOrderaudit.TradeOrderAuditMapper;
 import com.yc.ship.module.trade.enums.RefundChannelEnum;
 import com.yc.ship.module.trade.enums.TradeOrderOperateTypeEnum;
 import com.yc.ship.module.trade.enums.TradeOrderStatusEnum;
@@ -206,49 +204,18 @@ public class AdminTradeOrderServiceImpl implements AdminTradeOrderService {
 
         TradeRefundCalculateRespVO respVO = new TradeRefundCalculateRespVO();
         List<TradeRefundCalculateRespDTO> list = new ArrayList<>();
-        if (refundCreateReqVO.getRefundType() == REFUND_TYPE_ORDER) {
-            Asserts.isTrue(CollUtil.isNotEmpty(refundCreateReqVO.getOrderInfoList()), "退款订单列表不能为空");
-            boolean isMultiOrder = refundCreateReqVO.getOrderInfoList().size() > 1;
-            refundCreateReqVO.getOrderInfoList().forEach(orderInfo -> {
-
-                tradeRefundCreateReqDTO.setOrderId(orderInfo.getOrderId());
-                if (isMultiOrder) {
-                    tradeRefundCreateReqDTO.setRefundAmount(orderInfo.getRefundAmount());
-                    tradeRefundCreateReqDTO.setOriginRefundAmount(orderInfo.getOriginRefundAmount());
-                    tradeRefundCreateReqDTO.setFee(orderInfo.getFee());
-                }
-                CommonResult<TradeRefundCalculateRespDTO> resp = tradeRefundService.calculateRefundAmount(tradeRefundCreateReqDTO);
-                list.add(resp.getData());
-            });
-
-        } else if (refundCreateReqVO.getRefundType() == REFUND_TYPE_ITEM) {
-            Asserts.isTrue(CollUtil.isNotEmpty(refundCreateReqVO.getRefundItemList()), "退款项列表不能为空");
-            Map<Long, List<TradeRefundCreateReqDTO.RefundItem>> refundByOrderMap = refundCreateReqVO.getRefundItemList().stream().collect(Collectors.groupingBy(TradeRefundCreateReqDTO.RefundItem::getOrderId));
-            boolean isMultiOrder = refundByOrderMap.size() > 1;
-            refundByOrderMap.forEach((key, value) -> {
-                if (isMultiOrder) {
-                    //后面系统会计算
-                    tradeRefundCreateReqDTO.setRefundAmount(null);
-                    tradeRefundCreateReqDTO.setOriginRefundAmount(null);
-                    tradeRefundCreateReqDTO.setFee(null);
-                }
-                tradeRefundCreateReqDTO.setOrderId(key);
-                tradeRefundCreateReqDTO.setItemlList(value);
-
-                CommonResult<TradeRefundCalculateRespDTO> resp = tradeRefundService.calculateRefundAmount(tradeRefundCreateReqDTO);
-                list.add(resp.getData());
-            });
-        } else if (refundCreateReqVO.getRefundType() == REFUND_TYPE_ITEM_BASE) {
-            Asserts.isTrue(CollUtil.isNotEmpty(refundCreateReqVO.getRefundItemList()), "退款项列表不能为空");
-            Asserts.isTrue(refundCreateReqVO.getRefundItemList().size() == 1, "退款项数据格式不正确");
-            Asserts.isTrue(CollUtil.isNotEmpty(refundCreateReqVO.getRefundItemList().get(0).getDetailList()), "退款项明细列表不能为空");
-            tradeRefundCreateReqDTO.setItemlList(refundCreateReqVO.getRefundItemList());
+        Asserts.isTrue(CollUtil.isNotEmpty(refundCreateReqVO.getOrderInfoList()), "退款订单列表不能为空");
+        boolean isMultiOrder = refundCreateReqVO.getOrderInfoList().size() > 1;
+        refundCreateReqVO.getOrderInfoList().forEach(orderInfo -> {
+            tradeRefundCreateReqDTO.setOrderId(orderInfo.getOrderId());
+            if (isMultiOrder) {
+                tradeRefundCreateReqDTO.setRefundAmount(orderInfo.getRefundAmount());
+                tradeRefundCreateReqDTO.setOriginRefundAmount(orderInfo.getOriginRefundAmount());
+                tradeRefundCreateReqDTO.setFee(orderInfo.getFee());
+            }
             CommonResult<TradeRefundCalculateRespDTO> resp = tradeRefundService.calculateRefundAmount(tradeRefundCreateReqDTO);
             list.add(resp.getData());
-        } else {
-            throw exception(REFUND_TYPE_ERROR);
-        }
-
+        });
         respVO.setList(list);
         return CommonResult.success(respVO);
     }
@@ -361,16 +328,16 @@ public class AdminTradeOrderServiceImpl implements AdminTradeOrderService {
 
         long between = DateUtil.between(tradeOrderDO.getTravelDate(), new Date(), DateUnit.DAY);
         BigDecimal damaged;
-        if(between>21){
+        if (between > 21) {
             damaged = new BigDecimal(500);
-        }else if(between>15){
-            damaged =  tradeOrderDO.getPayAmount().multiply(new BigDecimal("0.2"));
-        }else{
-            damaged =  tradeOrderDO.getPayAmount();
+        } else if (between > 15) {
+            damaged = tradeOrderDO.getPayAmount().multiply(new BigDecimal("0.2"));
+        } else {
+            damaged = tradeOrderDO.getPayAmount();
         }
 
         AuditUserDO auditUserDO = auditUserMapper.selectOne(new LambdaQueryWrapperX<AuditUserDO>().eq(AuditUserDO::getType, 4).eq(AuditUserDO::getAuditStatus, 1).eq(AuditUserDO::getDeleted, 0).orderByDesc(AuditUserDO::getCreateTime).last("limit 1"));
-        tradeOrderMapper.update(new UpdateWrapper<TradeOrderDO>().set("audit_type", 4).set("audit_user", auditUserDO == null ? "" : auditUserDO.getAuditUser()).set("order_status", TradeOrderStatusEnum.CANCEL_AUDIT.getStatus()).set("audit_status", 1).set("damaged",damaged).set("damaged_status", 1).set("damaged_time", LocalDateTime.now()).eq("id", tradeOrderDO.getId()));
+        tradeOrderMapper.update(new UpdateWrapper<TradeOrderDO>().set("audit_type", 4).set("audit_user", auditUserDO == null ? "" : auditUserDO.getAuditUser()).set("order_status", TradeOrderStatusEnum.CANCEL_AUDIT.getStatus()).set("audit_status", 1).set("damaged", damaged).set("damaged_status", 1).set("damaged_time", LocalDateTime.now()).eq("id", tradeOrderDO.getId()));
         TradeOrderLogUtils.setOrderInfo(orderId, tradeOrderDO.getOrderStatus(), TradeOrderStatusEnum.CANCEL_AUDIT.getStatus());
         return CommonResult.success("订单取消审核中");
     }
@@ -395,10 +362,10 @@ public class AdminTradeOrderServiceImpl implements AdminTradeOrderService {
         List<String> orderNoList = Arrays.asList(reqObj.getStr("orderNos").split(","));
         String otaId = reqObj.getStr("otaId");
         String remark = reqObj.getStr("remark");
-        if(StringUtils.isNotBlank(otaId)){
+        if (StringUtils.isNotBlank(otaId)) {
             //平台开旅行社发票
             DistributorRespDTO distributorRespDTO = distributorApi.getDistributorById(Long.parseLong(otaId));
-            if (distributorRespDTO==null){
+            if (distributorRespDTO == null) {
                 throw exception(INVOICING_FAIL);
             }
             InvoicingReqDTO reqDTO = InvoiceConvert.INSTANCE.convertOtc(distributorRespDTO);
@@ -411,7 +378,7 @@ public class AdminTradeOrderServiceImpl implements AdminTradeOrderService {
         }
         LoginUser loginUser = getLoginUser();
         CommonResult<DistributorRespDTO> distributorResult = distributorApi.getDistributorByAccountTenantId(loginUser.getTenantId());
-        if (distributorResult.isError()){
+        if (distributorResult.isError()) {
             throw exception(INVOICING_FAIL);
         }
         DistributorRespDTO distributorRespDTO = distributorResult.getCheckedData();
@@ -430,12 +397,12 @@ public class AdminTradeOrderServiceImpl implements AdminTradeOrderService {
         List<String> orderNoList = Arrays.asList(reqObj.getStr("orderNos").split(","));
         String otaId = reqObj.getStr("otaId");
         String remark = reqObj.getStr("remark");
-        if(StringUtils.isBlank(otaId)){
+        if (StringUtils.isBlank(otaId)) {
             throw exception(INVOICING_FAIL_OTA);
         }
         //平台开旅行社发票
         DistributorRespDTO distributorRespDTO = distributorApi.getDistributorById(Long.parseLong(otaId));
-        if (distributorRespDTO == null){
+        if (distributorRespDTO == null) {
             throw exception(INVOICING_FAIL);
         }
         InvoicingReqDTO reqDTO = InvoiceConvert.INSTANCE.convertOtc(distributorRespDTO);

+ 18 - 3
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/otc/impl/OtcTradeOrderServiceImpl.java

@@ -575,9 +575,24 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
                     ShipRespDTO shipRespDTO = shipApi.queryShip(tradeOrderDO.getShipId());
                     map.put("routeName", routeRespDTO.getName());
                     map.put("boatName", shipRespDTO.getName());
-                    map.put("wyAmount", 0);
-                    map.put("wyRefundAmount", 0);
-                    map.put("wyPayAmount", 0);
+                    BigDecimal damaged = tradeOrderDO.getDamaged();
+                    BigDecimal deposi = tradeOrderDO.getDeposi();
+                    Integer deposiStatus = tradeOrderDO.getDeposiStatus();
+                    BigDecimal realPay = BigDecimal.ZERO;
+                    if (deposiStatus == 2) {
+                        realPay = deposi;
+                    } else if(tradeOrderDO.getPayStatus()==1){
+                        realPay = tradeOrderDO.getPayAmount();
+                    }
+
+                    BigDecimal payAmount = tradeOrderDO.getPayAmount();
+                    BigDecimal refundAmount = payAmount.multiply(damaged);
+
+                    BigDecimal multiply = refundAmount.multiply(realPay).compareTo(BigDecimal.ZERO) > 0 ? refundAmount.multiply(realPay):BigDecimal.ZERO;
+
+                    map.put("wyAmount", damaged);
+                    map.put("wyRefundAmount", refundAmount);
+                    map.put("wyPayAmount", multiply);
                     map.put("startTime", DateUtil.formatDate(tradeOrderDO.getTravelDate()));
                     NotifySendSingleToUserReqDTO reqDTO = new NotifySendSingleToUserReqDTO();
                     reqDTO.setTemplateParams(map);

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

@@ -2,6 +2,7 @@ package com.yc.ship.module.trade.service.refund.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateUnit;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.map.MapUtil;
 import cn.hutool.core.util.NumberUtil;
@@ -35,6 +36,7 @@ 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.TradeOrderMapper;
 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.*;
@@ -125,6 +127,8 @@ public class TradeRefundServiceImpl implements TradeRefundService {
     private TradeOrderTotalMapper tradeOrderTotalMapper;
     @Resource
     private TradeVisitorMapper tradeVisitorMapper;
+    @Resource
+    private TradeOrderMapper tradeOrderMapper;
 
     @Override
     public CommonResult<TradeRefundRespDTO> refund(TradeRefundCreateReqDTO refundCreateReqDTO) {
@@ -589,6 +593,22 @@ public class TradeRefundServiceImpl implements TradeRefundService {
     @Override
     public CommonResult<TradeRefundCalculateRespDTO> calculateRefundAmount(TradeRefundCreateReqDTO refundCreateReqDTO) {
         TradeOrderDO tradeOrderDO = tradeOrderRepositoryService.getById(refundCreateReqDTO.getOrderId());
+        long between = DateUtil.between(new Date(),tradeOrderDO.getTravelDate(),  DateUnit.DAY,false);
+        BigDecimal damaged;
+        if(between>21){
+            damaged = new BigDecimal(500);
+            if(tradeOrderDO.getSellMethod()==3){
+                damaged =  BigDecimal.ZERO;
+            }
+        }else if(between>15){
+            damaged =  tradeOrderDO.getPayAmount().multiply(new BigDecimal("0.2"));
+        }else{
+            damaged =  tradeOrderDO.getPayAmount();
+        }
+        tradeOrderDO.setDamaged(damaged);
+        tradeOrderDO.setDamagedStatus(1);
+        tradeOrderDO.setDamagedTime(LocalDateTime.now());
+        tradeOrderMapper.updateById(tradeOrderDO);
         //订单下所有门票信息
         List<TradeDetailBO> tradeDetailList = tradeOrderRepositoryService.getTradeDetailWithBase(refundCreateReqDTO.getOrderId(), null, null);
         //订单产品信息
@@ -598,7 +618,6 @@ public class TradeRefundServiceImpl implements TradeRefundService {
         BigDecimal fee = BigDecimal.ZERO;
         BigDecimal refundAmount = BigDecimal.ZERO;
         List<TradeRefundCalculateRespDTO.RefundItem> refundItemList = new ArrayList<>();
-//        if(refundCreateReqDTO.getItemlList() == null){
         //退单
         for (TradeDetailBO tradeDetail : tradeDetailList) {
             TradeRefundCalculateRespDTO.RefundItem calculateRefundItem = calculateRefundDetailPrice(tradeOrderDO, tradeDetail, null, null);
@@ -607,30 +626,14 @@ public class TradeRefundServiceImpl implements TradeRefundService {
             originRefundPrice = originRefundPrice.add(calculateRefundItem.getOriginRefundAmount());
             refundItemList.add(calculateRefundItem);
         }
-//        }else{
-//            //过滤门票信息并验证
-//            for (TradeRefundCreateReqDTO.RefundItem refundItem : refundCreateReqDTO.getItemlList()) {
-//                TradeDetailBO tradeDetail = tradeDetailList.stream().filter(tradeDetailBO -> ObjectUtil.equal(refundItem.getOrderDetailId(),tradeDetailBO.getId()))
-//                        .findFirst().orElse(null);
-//                Asserts.isTrue(tradeDetail!=null,"未找到此退单项:{}",refundItem.getOrderDetailId());
-//                TradeRefundCalculateRespDTO.RefundItem calculateRefundItem = calculateRefundDetailPrice(tradeOrderDO, tradeDetail, productMap.get(tradeDetail.getProductId()), refundItem);
-//                refundAmount = refundAmount.add(calculateRefundItem.getRefundAmount());
-//                fee = fee.add(calculateRefundItem.getFee());
-//                originRefundPrice = originRefundPrice.add(calculateRefundItem.getOriginRefundAmount());
-//                refundItemList.add(calculateRefundItem);
-//            }
-//        }
         //获取当前可退金额
         BigDecimal orderApplyRefundAmount = tradeRefundRepositoryService.getOrderApplyRefundAmount(refundCreateReqDTO.getOrderId());
         BigDecimal canRefundAmount = tradeOrderDO.getPayAmount().subtract(orderApplyRefundAmount);
         respDTO.setOrderId(refundCreateReqDTO.getOrderId());
-        if (NumberUtil.isGreater(refundAmount, canRefundAmount)) {
-            respDTO.setRefundAmount(canRefundAmount);
-        } else {
-            respDTO.setRefundAmount(refundAmount);
-        }
-        respDTO.setOriginRefundAmount(originRefundPrice);
-        respDTO.setFee(fee);
+        BigDecimal refundMoney = tradeOrderDO.getPayAmount().subtract(damaged);
+        respDTO.setRefundAmount(refundMoney);
+        respDTO.setOriginRefundAmount(refundMoney);
+        respDTO.setFee(damaged);
         respDTO.setMaxRefundAmount(canRefundAmount);
         respDTO.setRefundItemList(refundItemList);
 
@@ -1224,12 +1227,6 @@ public class TradeRefundServiceImpl implements TradeRefundService {
             if (lock.tryLock(60, 90, TimeUnit.SECONDS)) {
                 //获取订单支付单
                 List<TradeOrderPayDO> orderPayAllList = tradeOrderRepositoryService.getOrderPayList(refundDO.getOrderId());
-                TradeOrderBindDO tradeOrderBindDO = tradeOrderRepositoryService.getBindOrderByBindId(refundDO.getOrderId(), TradeOrderBindEnum.CHANGE);
-                if (tradeOrderBindDO != null) {
-                    //如果是改签的新订单退款,可能需要从原订单的支付单进行退款
-                    List<TradeOrderPayDO> oldOrderPayList = tradeOrderRepositoryService.getOrderPayList(tradeOrderBindDO.getOrderId());
-                    orderPayAllList.addAll(oldOrderPayList);
-                }
                 List<TradeOrderPayDO> orderPayList;
                 if (refundDO.getRefundAmount().compareTo(BigDecimal.ZERO) != 0) {
                     //退款金额不为0才过滤,为0时随便使用一个支付单