Forráskód Böngészése

下单流程优化

lishiqiang 1 hete
szülő
commit
56c8061961

+ 3 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/vo/order/TradeOrderOtcCreateVO.java

@@ -48,4 +48,7 @@ public class TradeOrderOtcCreateVO {
 
     private List<TradeVistorReqVO> tourist;
 
+    @Schema(description = "附加产品信息")
+    private List<TradeSpuReqVO> spuList;
+
 }

+ 9 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/vo/order/TradeOrderRespNewVO.java

@@ -72,5 +72,14 @@ public class TradeOrderRespNewVO {
     @Schema(description = "游轮航次信息")
     private VoyageRespVO voyage;
 
+    /**
+     * 订单金额
+     */
+    private BigDecimal amount;
+    /**
+     * 支付金额
+     */
+    private BigDecimal payAmount;
+
 
 }

+ 19 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/vo/order/TradeSpuReqVO.java

@@ -0,0 +1,19 @@
+package com.yc.ship.module.trade.controller.admin.order.vo.order;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Data
+public class TradeSpuReqVO {
+
+    @Schema(description = "附加产品ID")
+    private Long productId;
+
+    @Schema(description = "单价")
+    private BigDecimal price;
+
+    private List<TradeVistorReqVO> vistorList;
+}

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

@@ -809,6 +809,7 @@ public class TradeOrderServiceImpl implements TradeOrderService {
         if (productSpuRespDTO == null) {
             productSpuRespDTO = new ProductSpuRespDTO();
             productSpuRespDTO.setProductName("游轮产品" + orderItem.getProductId());
+            productSpuRespDTO.setId(0L);
         }
         List<TradeDetailDO> tradeDetailDOList = new ArrayList<>();
         List<TradeDetailBaseDO> tradeDetailBaseDOList = new ArrayList<>();
@@ -817,110 +818,35 @@ public class TradeOrderServiceImpl implements TradeOrderService {
 
         ProductSpuRespDTO finalProductSpuRespDTO = productSpuRespDTO;
         orderItem.getDetailList().forEach(orderDetail -> {
+            List<String> ticketNoList =  tradeUUCodeUtils.generateTicketNo(orderDetail.getVisitorList().size());
+            int i=0;
+            ProductSpuRespDTO product = null;
+            if(orderDetail.getProductType()==1){
+                product = productApi.getProduct(Long.parseLong(orderDetail.getProductId())).getCheckedData();
+            }else{
+                product = finalProductSpuRespDTO;
+            }
 
-            List<String> ticketNoList =  tradeUUCodeUtils.generateTicketNo(1);
+            for (ShipTradeOrderCreateReqVO.Visitor visitor : orderDetail.getVisitorList()) {
                 //订单详情
                 TradeDetailDO tradeDetailDO = new TradeDetailBO();
-
                 tradeDetailDO.setOrderId(tradeOrderDO.getId());
                 tradeDetailDO.setUseDate(orderItem.getUseDate() == null ? DateUtil.toLocalDateTime(tradeOrderDO.getTravelDate())
                         : DateUtil.toLocalDateTime(orderItem.getUseDate()));
-                try {
-                    tradeDetailDO.setProductId(Long.parseLong(orderItem.getProductId()));
-                }catch (Exception e){
-                    tradeDetailDO.setProductId(0L);
-                }
-                tradeDetailDO.setProductName(finalProductSpuRespDTO.getProductName());
+                tradeDetailDO.setProductId(product.getId());
+                tradeDetailDO.setProductName(product.getProductName());
                 tradeDetailDO.setPrice(orderDetail.getOriginPrice());
                 tradeDetailDO.setActualPrice(orderDetail.getPrice());
                 tradeDetailDO.setSpecType(orderDetail.getSpecType());
-//                tradeDetailDO.setProductType(orderItem.getProductType());
-//                tradeDetailDO.setCateType(finalProductSpuRespDTO.getProductType());
-//                tradeDetailDO.setQuantityOfOne(finalProductSpuRespDTO.getProductSaleRule().getOneLimitNum());
-//                tradeDetailDO.setUseRealName(finalProductSpuRespDTO.getProductSaleRule().getIsLimitType());
-                //有效门票都是需要激活的,默认立即激活
-//                if(finalProductSpuRespDTO.getProductSaleRule().getActivateType()!=null && finalProductSpuRespDTO.getProductSaleRule().getActivateType() == 1){
-//                    //立即激活
-//                    tradeDetailDO.setActivateStatus(1);
-//                    tradeDetailDO.setActivateTime(LocalDateTime.now());
-//                }else{
-//                    tradeDetailDO.setActivateStatus(0);
-//                    tradeDetailDO.setActivateDays(finalProductSpuRespDTO.getProductSaleRule().getActivateDayNum());
-//                }
-
-//                if(finalProductSpuRespDTO.getProductBasicRule().getNeedPlayDate() == 1){
-//                    //需要选择出行日期
-//                    Asserts.isTrue(tradeDetailDO.getUseDate()!=null,"此产品需要指定使用日期{}", finalProductSpuRespDTO.getId());
-//                    Date travelDate = DateUtils.of(tradeDetailDO.getUseDate());
-//                    switch (finalProductSpuRespDTO.getProductBasicRule().getValidityType()){
-//                        case 1:
-//                            //出行当天
-//                            tradeDetailDO.setValidityStartDate(tradeDetailDO.getUseDate());
-//                            tradeDetailDO.setValidityEndDate(DateUtil.endOfDay(travelDate).toLocalDateTime());
-//                            break;
-//                        case 3:
-//                            //出行日期前后X天内
-//                            tradeDetailDO.setValidityStartDate(DateUtil.offsetDay(travelDate,-finalProductSpuRespDTO.getProductBasicRule().getValidityNum()).toLocalDateTime());
-//                            tradeDetailDO.setValidityEndDate(DateUtil.endOfDay(DateUtil.offsetDay(travelDate, finalProductSpuRespDTO.getProductBasicRule().getValidityNum())).toLocalDateTime());
-//                            break;
-//                        case 4:
-//                            //出行日期至指定日期
-//                            tradeDetailDO.setValidityStartDate(tradeDetailDO.getUseDate());
-//                            Date validityDate =DateUtils.of(finalProductSpuRespDTO.getProductBasicRule().getValidityDate());
-//                            tradeDetailDO.setValidityEndDate(DateUtil.endOfDay(validityDate).toLocalDateTime());
-//                            break;
-//                        default:
-//                    }
-//                }else {
-//                    if(finalProductSpuRespDTO.getProductBasicRule().getValidityType() == 2){
-//                        //下单后X天内
-//                        Date now = new Date();
-//                        tradeDetailDO.setValidityStartDate(DateUtil.beginOfDay(now).toLocalDateTime());
-//                        tradeDetailDO.setValidityEndDate(DateUtil.endOfDay(DateUtil.offsetDay(now, finalProductSpuRespDTO.getProductBasicRule().getValidityNum())).toLocalDateTime());
-//                    }
-//                }
-
-
-//                if(finalProductSpuRespDTO.getProductBasicRule().getCheckStartDate()!=null){
-//                    LocalDateTime checkStartTime = finalProductSpuRespDTO.getProductBasicRule().getCheckStartDate().atStartOfDay();
-//                    //开始检票时间
-//                    if(tradeDetailDO.getValidityStartDate() == null || tradeDetailDO.getValidityStartDate().isBefore(checkStartTime)){
-//                        tradeDetailDO.setValidityStartDate(checkStartTime);
-//                    }
-//                }
-//                if(finalProductSpuRespDTO.getProductBasicRule().getCheckEndDate()!=null){
-//                    LocalDateTime checkEndTime = finalProductSpuRespDTO.getProductBasicRule().getCheckEndDate().atStartOfDay();
-//                    DateTime checkEndDate = DateUtil.endOfDay(DateUtils.of(checkEndTime));
-//
-//                    //结束检票时间
-//                    if(tradeDetailDO.getValidityEndDate() == null || tradeDetailDO.getValidityEndDate().isAfter(checkEndDate.toLocalDateTime())){
-//                        tradeDetailDO.setValidityEndDate(checkEndDate.toLocalDateTime());
-//                    }
-//                }
-//                if(tradeDetailDO.getValidityEndDate()!=null){
-//                    tradeDetailDO.setValidityEndDate(tradeDetailDO.getValidityEndDate().truncatedTo(ChronoUnit.SECONDS));
-//                }
-
                 tradeDetailDO.setId(IdWorker.getId());
-                tradeDetailDO.setVoucherCode(ticketNoList.get(0));
+                tradeDetailDO.setVoucherCode(ticketNoList.get(i));
+                i++;
                 tradeDetailDO.setVoucherStatus(VoucherStatusEnum.INIT.getStatus());
-                //游客信息
-//                buildTradeVisitor(orderCreateReqDTO,productSpuRespDTO,tradeVisitorDOList,tradeDetailDO,orderDetail,i);
-                //详情基础产品
-//                List<TradeDetailBaseDO>  detailBaseDOList = buildTradeDetailBase(orderDetail,tradeDetailDO,productSpuRespDTO);
-                //明细价格
-//                List<TradeDetailPriceDO> detailPriceList = buildTradeDetailPrice(tradeOrderDO,orderDetail.getDetailPriceList(),tradeDetailDO);
                 tradeDetailDOList.add(tradeDetailDO);
-//                tradeDetailBaseDOList.addAll(detailBaseDOList);
-                /*if(CollUtil.isNotEmpty(detailPriceList)){
-                    tradeDetailPriceDOList.addAll(detailPriceList);
-                }*/
                 if(tradeOrderDO.getTravelDate() == null && tradeDetailDO.getUseDate()!=null){
                     //补任意游玩日期
                     tradeOrderDO.setTravelDate(DateUtils.of(tradeDetailDO.getUseDate()));
                 }
-
-            for (ShipTradeOrderCreateReqVO.Visitor visitor : orderDetail.getVisitorList()) {
                 TradeVisitorDO tradeVisitorDO = new TradeVisitorDO();
                 tradeVisitorDO.setId(IdWorker.getId());
                 tradeVisitorDO.setOrderId(tradeOrderDO.getId());

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

@@ -83,6 +83,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicReference;
@@ -2361,7 +2362,7 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
         shipTradeOrderCreateReqVO.setOrderProperty(orderProperty);
 
         ShipTradeOrderCreateReqVO.OrderItem orderItem = new ShipTradeOrderCreateReqVO.OrderItem();
-
+        List<ShipTradeOrderCreateReqVO.OrderDetail> detailList = new ArrayList<>();
         ShipTradeOrderCreateReqVO.OrderDetail orderDetail = new ShipTradeOrderCreateReqVO.OrderDetail();
         List<ShipTradeOrderCreateReqVO.Visitor> visitorList = new ArrayList<>();
         for (TradeVistorReqVO tradeVistorReqVO : createVO.getTourist()) {
@@ -2375,9 +2376,44 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
             visitorList.add(visitor);
         }
         orderDetail.setVisitorList(visitorList);
-        orderDetail.setCount(1);
-        orderItem.setDetailList(Arrays.asList(orderDetail));
+        orderDetail.setCount(visitorList.size());
+        BigDecimal price =  createVO.getSummary().getOrderMoney().divide(new BigDecimal(visitorList.size()),2, RoundingMode.HALF_UP);
+        orderDetail.setPrice(price);
+        orderDetail.setOriginPrice(price);
+        orderDetail.setProductType(0);
+        detailList.add(orderDetail);
+
+        BigDecimal spuMoney = new BigDecimal(0);
+        for (TradeSpuReqVO tradeSpuReqVO : createVO.getSpuList()) {
+            ShipTradeOrderCreateReqVO.OrderDetail orderDetail1 = new ShipTradeOrderCreateReqVO.OrderDetail();
+            List<ShipTradeOrderCreateReqVO.Visitor> visitorList1 = new ArrayList<>();
+            for (TradeVistorReqVO tradeVistorReqVO : tradeSpuReqVO.getVistorList()) {
+                ShipTradeOrderCreateReqVO.Visitor visitor = new ShipTradeOrderCreateReqVO.Visitor();
+                visitor.setName(tradeVistorReqVO.getName());
+                visitor.setMobile(tradeVistorReqVO.getPhone());
+                visitor.setCredentialNo(tradeVistorReqVO.getCardNo());
+                visitor.setCredentialType(tradeVistorReqVO.getCardType());
+                visitor.setYczz(tradeVistorReqVO.getYichang());
+                visitor.setCqzz(tradeVistorReqVO.getChongqing());
+                visitorList1.add(visitor);
+                spuMoney = spuMoney.add(tradeSpuReqVO.getPrice());
+            }
+            orderDetail1.setVisitorList(visitorList1);
+            orderDetail1.setProductType(1);
+            orderDetail1.setProductId(tradeSpuReqVO.getProductId()+"");
+            orderDetail1.setPrice(tradeSpuReqVO.getPrice());
+            orderDetail1.setOriginPrice(tradeSpuReqVO.getPrice());
+            orderDetail1.setCount(visitorList1.size());
+            detailList.add(orderDetail1);
+        }
+        orderItem.setDetailList(detailList);
+
         shipTradeOrderCreateReqVO.setItemlList(Arrays.asList(orderItem));
+
+        BigDecimal totalAmount = spuMoney.add(createVO.getSummary().getOrderMoney());
+        shipTradeOrderCreateReqVO.setAmount(totalAmount);
+        shipTradeOrderCreateReqVO.setPayAmount(totalAmount);
+
         CommonResult<TradeOrderRespDTO> result = doShipCreateOrder(loginUser,shipTradeOrderCreateReqVO,SellMethodEnum.WINDOW);
         if (result.isError()) {
             return CommonResult.error(result);

+ 2 - 2
ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/order/TradeDetailMapper.xml

@@ -1061,14 +1061,14 @@
     </sql>
 
     <select id="selectOrderProduct" resultType="java.util.Map">
-        select td.product_id,td.route_plan_id,td.route_plan_group_type,td.product_name,td.actual_price,td.use_date,td.product_type,td.quantity_of_one,count(*) buyCount
+        select td.product_id,td.route_plan_id,td.route_plan_group_type,td.product_name,td.actual_price,td.use_date,td.quantity_of_one,count(*) buyCount
         from trade_detail td
         where td.order_id =#{orderId}
         group by td.product_id
     </select>
 
     <select id="selectOrderProductV2" resultType="java.util.Map">
-        select td.product_id,td.route_plan_id,td.route_plan_group_type,td.product_name,td.actual_price,td.use_date,td.product_type,td.quantity_of_one,
+        select td.product_id,td.route_plan_id,td.route_plan_group_type,td.product_name,td.actual_price,td.use_date,td.quantity_of_one,
         count(if(FIND_IN_SET(td.spec_type,
         <foreach collection="noContainSpecList" item="item" separator=","  open="" close="">
         #{item}

+ 2 - 2
ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/refund/RefundDetailMapper.xml

@@ -15,7 +15,7 @@
     </update>
 
     <select id="selectRefundOrderProduct" resultType="java.util.Map">
-        select td.product_id,td.route_plan_id,td.route_plan_group_type,td.product_name,td.use_date,td.product_type,td.quantity_of_one,count(*) refundCount
+        select td.product_id,td.route_plan_id,td.route_plan_group_type,td.product_name,td.use_date,td.quantity_of_one,count(*) refundCount
         FROM  trade_refund_detail trd
         inner join trade_detail td on trd.trade_detail_id = td.id
         where trd.refund_id=#{refundId}
@@ -23,7 +23,7 @@
     </select>
 
     <select id="selectRefundOrderProductV2" resultType="java.util.Map">
-        select td.product_id,td.route_plan_id,td.route_plan_group_type,td.product_name,td.use_date,td.product_type,td.quantity_of_one,
+        select td.product_id,td.route_plan_id,td.route_plan_group_type,td.product_name,td.use_date,td.quantity_of_one,
         count(if(FIND_IN_SET(td.spec_type,
         <foreach collection="noContainSpecList" item="item" separator=","  open="" close="">
             #{item}