Ver código fonte

支付流程优化,电子发票开票查询订单SQL修改

lishiqiang 1 semana atrás
pai
commit
6ae62b8cae

+ 1 - 0
ship-module-trade/ship-module-trade-api/src/main/java/com/yc/ship/module/trade/enums/ErrorCodeConstants.java

@@ -148,6 +148,7 @@ public interface ErrorCodeConstants {
     // ========== 核销 ==========
     ErrorCode ORDER_NOT_EXIST = new ErrorCode(30_100, "订单不存在");
     ErrorCode ORDER_ISINVOICE = new ErrorCode(30_100, "订单已开票不能修改");
+    ErrorCode ORDER_ISBILL = new ErrorCode(30_100, "订单已生成账单不能修改");
     ErrorCode ORDER_NOT_VOYAGE_CHANGE = new ErrorCode(30_101, "航次不能修改");
     ErrorCode ORDER_NOT_VOYAGE = new ErrorCode(30_101, "航次不能为空");
     ErrorCode USE_DATE_RANGE_ERROR = new ErrorCode(30_102, "使用日期范围不正确");

+ 1 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/impl/TradeOrderServiceImpl.java

@@ -546,6 +546,7 @@ public class TradeOrderServiceImpl implements TradeOrderService {
             tradeOrderDO.setOrderStatus(oldtradeOrderDO.getOrderSort());
             tradeOrderDO.setDiscountId(oldtradeOrderDO.getDiscountId());
             tradeOrderDO.setIsInsure(oldtradeOrderDO.getIsInsure());
+            tradeOrderDO.setIsBill(oldtradeOrderDO.getIsBill());
             tradeOrderDO.setPaymentDate(oldtradeOrderDO.getPaymentDate());
             tradeOrderDO.setSellerId(oldtradeOrderDO.getSellerId());
             tradeOrderDO.setMemberId(oldtradeOrderDO.getMemberId());

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

@@ -1974,6 +1974,9 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
         if (tradeOrderDO.getIsInvoice() != null && tradeOrderDO.getIsInvoice() == 1) {
             return CommonResult.error(ORDER_ISINVOICE);
         }
+        if (tradeOrderDO.getIsBill() != null && (tradeOrderDO.getIsBill() == 1 ||tradeOrderDO.getIsBill() == 2)) {
+            return CommonResult.error(ORDER_ISBILL);
+        }
         int auditType = 0;
         String orderNo = tradeOrderDO.getOrderNo();
         Long oldvoyageId = tradeOrderDO.getVoyageId();

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

@@ -33,6 +33,7 @@ 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.*;
 import com.yc.ship.module.trade.dal.dataobject.supplier.TradeSupplierOrderDO;
+import com.yc.ship.module.trade.dal.mysql.order.TradeOrderLogMapper;
 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;
@@ -68,7 +69,7 @@ import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 import static com.yc.ship.framework.common.exception.util.ServiceExceptionUtil.exception0;
-import static com.yc.ship.module.ota.enums.ErrorCodeConstants.ORDER_PAY_AUTO_REFUND;
+import static com.yc.ship.framework.web.core.util.WebFrameworkUtils.getLoginUserId;
 import static com.yc.ship.module.trade.enums.ApiConstants.*;
 import static com.yc.ship.module.trade.enums.ErrorCodeConstants.*;
 import static com.yc.ship.module.trade.service.order.TradeOrderService.UPDATE_ORDER_LOCK;
@@ -124,6 +125,9 @@ public class TradeOrderPayServiceImpl implements TradeOrderPayService {
     @Resource
     private TradeOrderMapper tradeOrderMapper;
 
+    @Resource
+    private TradeOrderLogMapper tradeOrderLogMapper;
+
     @Override
     public CommonResult<PayOrderRespVO> payOrder(PayOrderReqVO payOrderReqVO) {
         try {
@@ -352,8 +356,8 @@ public class TradeOrderPayServiceImpl implements TradeOrderPayService {
                     TradeOrderDO tradeOrderDO = tradeOrderRepositoryService.getById(tradeOrderPayDO.getOrderId());
                     //验证订单是否已全部支付完成
                     BigDecimal hadPayAmount = tradeOrderRepositoryService.getHadPayAmount(tradeOrderPayDO.getOrderId());
-                    if(hadPayAmount.compareTo(tradeOrderDO.getAmount()) >= 0){
-                        log.error("计算订单全部支付金额:{},订单金额:{}", hadPayAmount,tradeOrderDO.getAmount());
+                    if (hadPayAmount.compareTo(tradeOrderDO.getAmount()) >= 0) {
+                        log.error("计算订单全部支付金额:{},订单金额:{}", hadPayAmount, tradeOrderDO.getAmount());
                         tradeOrderDO.setOrderStatus(TradeOrderStatusEnum.UNUSED.getStatus());
                     }
                     //更新支付单状态
@@ -526,7 +530,7 @@ public class TradeOrderPayServiceImpl implements TradeOrderPayService {
                 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)) {
+                    if (StringUtils.isNotBlank(roomId)) {
                         OrderRoomUseDTO orderRoomUseDTO = new OrderRoomUseDTO();
                         orderRoomUseDTO.setRoomId(Long.valueOf(roomId));
                         orderRoomUseDTO.setNum(BigDecimal.valueOf(collect.get(roomId)).divide(new BigDecimal(2)));
@@ -534,9 +538,9 @@ public class TradeOrderPayServiceImpl implements TradeOrderPayService {
                     }
                 });
                 reqDTO.setOrderRoomList(orderRoomUseDTOList);
-                if(Objects.equals(orderStatus, TradeOrderStatusEnum.YD.getStatus())) {
+                if (Objects.equals(orderStatus, TradeOrderStatusEnum.YD.getStatus())) {
                     voyageApi.preCancelReduceStock(reqDTO);
-                }else {
+                } else {
                     voyageApi.cancelReduceStock(reqDTO);
                 }
 
@@ -714,7 +718,7 @@ public class TradeOrderPayServiceImpl implements TradeOrderPayService {
             tradeOrderPayDO.setPaymentNo(tradeId);
             //4.1支付成功
             TradeOrderDO tradeOrderDO = tradeOrderRepositoryService.getById(payOrderReqVO.getOrderId());
-            updateDeposiOrderPaid(tradeOrderDO,tradeOrderPayDO);
+            updateDeposiOrderPaid(tradeOrderDO, tradeOrderPayDO);
         }
         return CommonResult.success(payOrderRespVO);
     }
@@ -736,7 +740,7 @@ public class TradeOrderPayServiceImpl implements TradeOrderPayService {
             tradeOrderPayDO.setPaymentNo(tradeId);
             //4.1支付成功
             TradeOrderDO tradeOrderDO = tradeOrderRepositoryService.getById(payOrderReqVO.getOrderId());
-            updateBcOrderPaid(tradeOrderDO,tradeOrderPayDO);
+            updateBcOrderPaid(tradeOrderDO, tradeOrderPayDO);
         }
         return CommonResult.success(payOrderRespVO);
     }
@@ -788,24 +792,42 @@ public class TradeOrderPayServiceImpl implements TradeOrderPayService {
         }
     }
 
-    @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.ORDER_PAY)
+    //    @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.ORDER_PAY)
     public void updateOrderPaid(TradeOrderDO tradeOrderDO, TradeOrderPayDO tradeOrderPayDO) {
         Integer orderStatus = tradeOrderDO.getOrderStatus();
         tradeOrderDO.setOrderStatus(TradeOrderStatusEnum.PAID.getStatus());
         //支付时间暂时用当前
         tradeOrderDO.setPaymentDate(LocalDateTime.now());
         tradeOrderDO.setPayStatus(PaymentStatusEnum.PAID.getStatus());
-        BigDecimal realPayAmount = tradeOrderDO.getRealPayAmount()==null?BigDecimal.ZERO:tradeOrderDO.getRealPayAmount();
+        BigDecimal realPayAmount = tradeOrderDO.getRealPayAmount() == null ? BigDecimal.ZERO : tradeOrderDO.getRealPayAmount();
         tradeOrderDO.setRealPayAmount(realPayAmount.add(tradeOrderPayDO.getPayAmount()));
         tradeOrderRepositoryService.updateOrderAfterAllPay(tradeOrderDO);
         //保存订单日志
-        TradeOrderLogUtils.setOrderInfo(tradeOrderDO.getId(), orderStatus, tradeOrderDO.getOrderStatus(), MapUtil.<String, Object>builder().put("payType", PayTypeEnum.valueOf(tradeOrderPayDO.getPaymentType()).getName()).put("payAmount", tradeOrderPayDO.getPayAmount()).build());
+        try {
+            Long userId = getLoginUserId();
+            TradeOrderLogDO tradeOrderLogDO = new TradeOrderLogDO();
+            tradeOrderLogDO.setOrderId(tradeOrderDO.getId());
+            tradeOrderLogDO.setUserId(userId);
+            tradeOrderLogDO.setUserType(2);
+            tradeOrderLogDO.setTenantId(1L);
+            tradeOrderLogDO.setCreateTime(LocalDateTime.now());
+            tradeOrderLogDO.setDeleted(false);
+            tradeOrderLogDO.setId(IdWorker.getId(tradeOrderLogDO));
+            tradeOrderLogDO.setOperateType(TradeOrderOperateTypeEnum.ORDER_PAY.getType());
+            tradeOrderLogDO.setBeforeStatus(orderStatus);
+            tradeOrderLogDO.setAfterStatus(tradeOrderDO.getOrderStatus());
+            tradeOrderLogDO.setContent(TradeOrderOperateTypeEnum.ORDER_PAY.getContent().replaceAll("payType", PayTypeEnum.valueOf(tradeOrderPayDO.getPaymentType()).getName()).replaceAll("payAmount", tradeOrderPayDO.getPayAmount().toString()));
+            tradeOrderLogMapper.insert(tradeOrderLogDO);
+        } catch (Exception e) {
+            log.error("保存订单日志异常orderId:{}", tradeOrderDO.getId(), e);
+        }
+//        TradeOrderLogUtils.setOrderInfo(tradeOrderDO.getId(), orderStatus, tradeOrderDO.getOrderStatus(), MapUtil.<String, Object>builder().put("payType", PayTypeEnum.valueOf(tradeOrderPayDO.getPaymentType()).getName()).put("payAmount", tradeOrderPayDO.getPayAmount()).build());
     }
 
     @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.ORDER_DEPOSI_PAY)
     public void updateDeposiOrderPaid(TradeOrderDO tradeOrderDO, TradeOrderPayDO tradeOrderPayDO) {
         Integer orderStatus = tradeOrderDO.getOrderStatus();
-        BigDecimal realPayAmount = (tradeOrderDO.getRealPayAmount()==null?BigDecimal.ZERO:tradeOrderDO.getRealPayAmount()).add(tradeOrderPayDO.getPayAmount());
+        BigDecimal realPayAmount = (tradeOrderDO.getRealPayAmount() == null ? BigDecimal.ZERO : tradeOrderDO.getRealPayAmount()).add(tradeOrderPayDO.getPayAmount());
         tradeOrderMapper.update(new LambdaUpdateWrapper<TradeOrderDO>()
                 .eq(TradeOrderDO::getId, tradeOrderDO.getId())
                 .set(TradeOrderDO::getRealPayAmount, realPayAmount)
@@ -819,7 +841,7 @@ public class TradeOrderPayServiceImpl implements TradeOrderPayService {
     @TradeOrderLog(operateType = TradeOrderOperateTypeEnum.ORDER_BC_PAY)
     public void updateBcOrderPaid(TradeOrderDO tradeOrderDO, TradeOrderPayDO tradeOrderPayDO) {
         Integer orderStatus = tradeOrderDO.getOrderStatus();
-        BigDecimal realPayAmount = (tradeOrderDO.getRealPayAmount()==null?BigDecimal.ZERO:tradeOrderDO.getRealPayAmount()).add(tradeOrderPayDO.getPayAmount());
+        BigDecimal realPayAmount = (tradeOrderDO.getRealPayAmount() == null ? BigDecimal.ZERO : tradeOrderDO.getRealPayAmount()).add(tradeOrderPayDO.getPayAmount());
         tradeOrderMapper.update(new LambdaUpdateWrapper<TradeOrderDO>()
                 .eq(TradeOrderDO::getId, tradeOrderDO.getId())
                 .set(TradeOrderDO::getRealPayAmount, realPayAmount)

+ 3 - 4
ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/order/TradeOrderMapper.xml

@@ -1378,12 +1378,11 @@
         INNER JOIN trade_order_user tou ON o.id = tou.order_id
         LEFT JOIN trade_invoice_detail i ON i.order_no = o.order_no
         LEFT JOIN trade_invoice ii ON i.invoice_id = ii.id AND ii.invoice_status IN (1,3)
-        LEFT JOIN (select order_id,payment_type from trade_order_pay where pay_status=1 GROUP BY order_id) op ON op.order_id = o.id
-        LEFT JOIN ota_bill_order obo ON obo.order_id = o.id
+        INNER JOIN (select p2.order_no,p1.payment_type from trade_order_pay p1 inner join trade_order p2 on p1.order_id = p2.id where p1.pay_status=1 GROUP BY order_id) op ON op.order_no = o.order_no        LEFT JOIN (select p2.order_no,p1.* from ota_bill_order p1 inner join trade_order p2 on p1.order_id = p2.id) obo ON obo.order_no = o.order_no
         LEFT JOIN ota_bill_store obs ON obs.id = obo.bill_store_id AND obs.bill_status=1
         where td.use_date >= DATE_SUB(NOW(), INTERVAL #{canInvoicedDay} DAY)
-        and o.is_invoice in (0,2)
-        and o.order_status in (6,7,8,9,11,12)
+        and o.is_invoice in (0,2)  and o.deleted =0
+        and o.order_status in (1,6,7,8,9,11,12)
         <if test="vo.orderNo != null and vo.orderNo != ''">
             AND o.order_no = #{vo.orderNo}
         </if>