Explorar el Código

新下单流程优化

lishiqiang hace 1 mes
padre
commit
5d24cd9084

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

@@ -224,6 +224,9 @@ public class ShipTradeOrderCreateReqVO implements Serializable {
         @NotBlank(message = "楼层ID/附加产品ID不能为空")
         private String productId;
 
+        @Schema(description = "游客ID", example = "")
+        private Long visitorId;
+
         @Schema(description = "产品类型 0 游船产品 1 附加产品 2:赠票", example = "")
         @NotNull(message = "产品类型不能为空")
         private Integer productType;

+ 4 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/dataobject/order/TradeDetailDO.java

@@ -33,6 +33,10 @@ public class TradeDetailDO extends TenantBaseDO {
      * 订单ID
      */
     private Long orderId;
+    /**
+     * 游客ID
+     */
+    private Long visitorId;
     /**
      * 酒店订单ID
      */

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

@@ -127,9 +127,9 @@ public class TradeOrderServiceImpl implements TradeOrderService {
         iPage.getRecords().forEach(tradeOrderRespVO -> {
             List<TradeVisitorRespVO> visitorDOList = tradeVisitorMapper.queryVisitorByOrderId(tradeOrderRespVO.getId());
             tradeOrderRespVO.setVisitors(visitorDOList);
-            if(!visitorDOList.isEmpty()) {
+            if (!visitorDOList.isEmpty()) {
                 tradeOrderRespVO.setTotalNum(visitorDOList.size());
-            }else{
+            } else {
                 tradeOrderRespVO.setTotalNum(0);
             }
         });
@@ -645,65 +645,107 @@ public class TradeOrderServiceImpl implements TradeOrderService {
         List<TradeDetailPriceDO> tradeDetailPriceDOList = new ArrayList<>();
 
         ProductSpuRespDTO finalProductSpuRespDTO = productSpuRespDTO;
+        Map<String, Long> vmap = new HashMap<>(16);
         orderItem.getDetailList().forEach(orderDetail -> {
-            List<String> ticketNoList = tradeUUCodeUtils.generateTicketNo(orderDetail.getVisitorList().size());
-            int i = 0;
-            ProductSpuRespDTO product;
-            if (orderDetail.getProductType() == 1 || orderDetail.getProductType() == 2) {
-                product = productApi.getProduct(Long.parseLong(orderDetail.getProductId())).getCheckedData();
-            } else {
-                product = finalProductSpuRespDTO;
+            if (orderDetail.getProductType() == 0) {
+                List<String> ticketNoList = tradeUUCodeUtils.generateTicketNo(orderDetail.getVisitorList().size());
+                int i = 0;
+                ProductSpuRespDTO product;
+                if (orderDetail.getProductType() == 1 || orderDetail.getProductType() == 2) {
+                    product = productApi.getProduct(Long.parseLong(orderDetail.getProductId())).getCheckedData();
+                } else {
+                    product = finalProductSpuRespDTO;
+                }
+                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()));
+                    tradeDetailDO.setProductId(product.getId());
+                    tradeDetailDO.setProductName(product.getProductName());
+                    tradeDetailDO.setPrice(orderDetail.getOriginPrice());
+                    tradeDetailDO.setActualPrice(orderDetail.getPrice());
+                    tradeDetailDO.setSpecType(orderDetail.getSpecType());
+                    tradeDetailDO.setId(IdWorker.getId());
+                    tradeDetailDO.setProductType(orderDetail.getProductType());
+                    tradeDetailDO.setVoucherCode(ticketNoList.get(i));
+                    i++;
+                    tradeDetailDO.setVoucherStatus(VoucherStatusEnum.INIT.getStatus());
+                    tradeDetailDOList.add(tradeDetailDO);
+                    if (tradeOrderDO.getTravelDate() == null && tradeDetailDO.getUseDate() != null) {
+                        //补任意游玩日期
+                        tradeOrderDO.setTravelDate(DateUtils.of(tradeDetailDO.getUseDate()));
+                    }
+                    List<TradeDetailBaseDO> detailBaseDOList = buildShipDetailBase(orderDetail, tradeDetailDO, product);
+                    tradeDetailBaseDOList.addAll(detailBaseDOList);
+                    Long visitorId = IdWorker.getId();
+                    tradeDetailDO.setVisitorId(visitorId);
+                    vmap.put(visitor.getVid(), visitorId);
+                    TradeVisitorDO tradeVisitorDO = new TradeVisitorDO();
+                    tradeVisitorDO.setId(visitorId);
+                    tradeVisitorDO.setVid(visitor.getVid());
+                    tradeVisitorDO.setOrderId(tradeOrderDO.getId());
+                    tradeVisitorDO.setName(visitor.getName());
+                    tradeVisitorDO.setDetailId(tradeDetailDO.getId());
+                    tradeVisitorDO.setCredentialType(visitor.getCredentialType());
+                    tradeVisitorDO.setCredentialNo(visitor.getCredentialNo());
+                    tradeVisitorDO.setMobile(visitor.getMobile());
+                    tradeVisitorDO.setAge(visitor.getAge());
+                    tradeVisitorDO.setType(visitor.getType());
+                    tradeVisitorDO.setBirthday(visitor.getBirthday());
+                    tradeVisitorDO.setGender(visitor.getGender());
+                    tradeVisitorDO.setRemark(visitor.getRemark());
+                    tradeVisitorDO.setRoomIndexId(visitor.getRoomIndexId());
+                    tradeVisitorDO.setDeleted(false);
+                    tradeVisitorDO.setNationality(visitor.getNationality());
+                    tradeVisitorDO.setRoomModelId(visitor.getRoomModelId());
+                    tradeVisitorDO.setFloor(visitor.getFloor());
+                    if (orderDetail.getProductType() == 0) {
+                        tradeVisitorDO.setCohabitation(visitor.getCohabitation());
+                        tradeVisitorDO.setRoomId(visitor.getRoomId());
+                        tradeVisitorDO.setInitRoomId(visitor.getInitRoomId());
+                        tradeVisitorDO.setFinalRoomId(visitor.getFinalRoomId());
+                    }
+                    tradeVisitorDO.setCreateTime(LocalDateTime.now());
+                    tradeVisitorDOList.add(tradeVisitorDO);
+                }
             }
+        });
 
-            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()));
-                tradeDetailDO.setProductId(product.getId());
-                tradeDetailDO.setProductName(product.getProductName());
-                tradeDetailDO.setPrice(orderDetail.getOriginPrice());
-                tradeDetailDO.setActualPrice(orderDetail.getPrice());
-                tradeDetailDO.setSpecType(orderDetail.getSpecType());
-                tradeDetailDO.setId(IdWorker.getId());
-                tradeDetailDO.setProductType(orderDetail.getProductType());
-                tradeDetailDO.setVoucherCode(ticketNoList.get(i));
-                i++;
-                tradeDetailDO.setVoucherStatus(VoucherStatusEnum.INIT.getStatus());
-                tradeDetailDOList.add(tradeDetailDO);
-                if (tradeOrderDO.getTravelDate() == null && tradeDetailDO.getUseDate() != null) {
-                    //补任意游玩日期
-                    tradeOrderDO.setTravelDate(DateUtils.of(tradeDetailDO.getUseDate()));
+        orderItem.getDetailList().forEach(orderDetail -> {
+            if (orderDetail.getProductType() != 0) {
+                List<String> ticketNoList = tradeUUCodeUtils.generateTicketNo(orderDetail.getVisitorList().size());
+                int i = 0;
+                ProductSpuRespDTO product;
+                if (orderDetail.getProductType() == 1 || orderDetail.getProductType() == 2) {
+                    product = productApi.getProduct(Long.parseLong(orderDetail.getProductId())).getCheckedData();
+                } else {
+                    product = finalProductSpuRespDTO;
                 }
-                List<TradeDetailBaseDO> detailBaseDOList = buildShipDetailBase(orderDetail, tradeDetailDO, product);
-                tradeDetailBaseDOList.addAll(detailBaseDOList);
-                TradeVisitorDO tradeVisitorDO = new TradeVisitorDO();
-                tradeVisitorDO.setId(IdWorker.getId());
-                tradeVisitorDO.setVid(visitor.getVid());
-                tradeVisitorDO.setOrderId(tradeOrderDO.getId());
-                tradeVisitorDO.setName(visitor.getName());
-                tradeVisitorDO.setDetailId(tradeDetailDO.getId());
-                tradeVisitorDO.setCredentialType(visitor.getCredentialType());
-                tradeVisitorDO.setCredentialNo(visitor.getCredentialNo());
-                tradeVisitorDO.setMobile(visitor.getMobile());
-                tradeVisitorDO.setAge(visitor.getAge());
-                tradeVisitorDO.setType(visitor.getType());
-                tradeVisitorDO.setBirthday(visitor.getBirthday());
-                tradeVisitorDO.setGender(visitor.getGender());
-                tradeVisitorDO.setRemark(visitor.getRemark());
-                tradeVisitorDO.setRoomIndexId(visitor.getRoomIndexId());
-                tradeVisitorDO.setDeleted(false);
-                tradeVisitorDO.setNationality(visitor.getNationality());
-                tradeVisitorDO.setRoomModelId(visitor.getRoomModelId());
-                tradeVisitorDO.setFloor(visitor.getFloor());
-                if (orderDetail.getProductType() == 0) {
-                    tradeVisitorDO.setCohabitation(visitor.getCohabitation());
-                    tradeVisitorDO.setRoomId(visitor.getRoomId());
-                    tradeVisitorDO.setInitRoomId(visitor.getInitRoomId());
-                    tradeVisitorDO.setFinalRoomId(visitor.getFinalRoomId());
+                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()));
+                    tradeDetailDO.setProductId(product.getId());
+                    tradeDetailDO.setProductName(product.getProductName());
+                    tradeDetailDO.setPrice(orderDetail.getOriginPrice());
+                    tradeDetailDO.setActualPrice(orderDetail.getPrice());
+                    tradeDetailDO.setSpecType(orderDetail.getSpecType());
+                    tradeDetailDO.setId(IdWorker.getId());
+                    tradeDetailDO.setProductType(orderDetail.getProductType());
+                    tradeDetailDO.setVoucherCode(ticketNoList.get(i));
+                    i++;
+                    tradeDetailDO.setVoucherStatus(VoucherStatusEnum.INIT.getStatus());
+                    tradeDetailDOList.add(tradeDetailDO);
+                    if (tradeOrderDO.getTravelDate() == null && tradeDetailDO.getUseDate() != null) {
+                        //补任意游玩日期
+                        tradeOrderDO.setTravelDate(DateUtils.of(tradeDetailDO.getUseDate()));
+                    }
+                    List<TradeDetailBaseDO> detailBaseDOList = buildShipDetailBase(orderDetail, tradeDetailDO, product);
+                    tradeDetailBaseDOList.addAll(detailBaseDOList);
+                    tradeDetailDO.setVisitorId(vmap.get(visitor.getVid()));
                 }
-                tradeVisitorDO.setCreateTime(LocalDateTime.now());
-                tradeVisitorDOList.add(tradeVisitorDO);
             }
         });
 

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

@@ -2454,6 +2454,12 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
     public CommonResult<TradeOrderVO> getOrderById(Long orderId) {
         TradeOrderVO tradeOrderVO = new TradeOrderVO();
         TradeOrderDO tradeOrderDO = tradeOrderMapper.selectById(orderId);
+        if(tradeOrderDO !=null && tradeOrderDO.getDeleted()) {
+            tradeOrderDO = tradeOrderMapper.queryOneByOrderNo(tradeOrderDO.getOrderNo());
+        }
+        if(tradeOrderDO==null){
+            return CommonResult.error(ErrorCodeConstants.ORDER_NOT_EXIST);
+        }
         tradeOrderVO.setOrderDO(tradeOrderDO);
         //设置国籍数据
         List<TradeOrderCountryDO> country = tradeOrderCountryMapper.selectListByOrderId(orderId);

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

@@ -122,6 +122,7 @@
     <resultMap id="MiddleWareDtoResultMap" type="com.yc.ship.module.trade.controller.admin.order.vo.order.TradeDetailRespVO">
         <id property="id" column="id"/>
         <result property="orderId" column="order_id"/>
+        <result property="visitorId" column="visitor_id"/>
         <result property="orderNo" column="order_no"/>
         <result property="voucherCode" column="voucher_code"/>
         <result property="voucherStatus" column="voucher_status"/>
@@ -162,6 +163,7 @@
     <resultMap id="MiddleWareDtoResultMap2" type="com.yc.ship.module.trade.controller.admin.order.vo.order.TradeDetailRespVO">
         <id property="id" column="id"/>
         <result property="orderId" column="order_id"/>
+        <result property="visitorId" column="visitor_id"/>
         <result property="orderNo" column="order_no"/>
         <result property="voucherCode" column="voucher_code"/>
         <result property="voucherStatus" column="voucher_status"/>
@@ -266,8 +268,8 @@
         FROM trade_detail td
         left join product_spu p on p.id = td.product_id
         left join product_category pc on pc.id = p.category_id
-        inner JOIN trade_visitor tv on td.id = tv.detail_id
-        where 1= 1 and td.deleted = 0 and tv.deleted=0
+        left JOIN trade_visitor tv on td.visitor_id = tv.id and tv.deleted=0
+        where 1= 1 and td.deleted = 0
         <if test="orderId != null and orderId != ''">
             AND td.order_id = #{orderId}
         </if>
@@ -295,7 +297,7 @@
         FROM trade_detail td
         inner join product_spu p on p.id = td.product_id
         inner join product_category pc on pc.id = p.category_id
-        inner JOIN trade_visitor tv on td.id = tv.detail_id
+        inner JOIN trade_visitor tv on td.visitor_id = tv.id
         left join trade_supp_ticket_detail tstd on td.id = tstd.trade_detail_id
         where 1= 1
 
@@ -360,7 +362,7 @@
         FROM trade_detail td
         inner join product_spu p on p.id = td.product_id
         inner join product_category pc on pc.id = p.category_id
-        inner JOIN trade_visitor tv on td.id = tv.detail_id
+        inner JOIN trade_visitor tv on td.visitor_id = tv.id
         left join trade_supp_ticket_detail tstd on td.id = tstd.trade_detail_id
         where 1= 1
 
@@ -1100,7 +1102,7 @@
             resultType="com.yc.ship.module.trade.controller.admin.order.vo.order.TradeDetailRespVO">
         SELECT td.*,tv.detail_id,tv.name,tv.id visitorId,tv.gender,tv.credential_no,tv.credential_type,tv.mobile,tv.ota_detail_id,tv.is_insure
         FROM trade_detail td
-        INNER JOIN  trade_visitor tv on td.id = tv.detail_id
+        INNER JOIN  trade_visitor tv on td.visitor_id = tv.id
         where 1= 1
         <if test="orderId != null and orderId != ''">
             AND td.order_id = #{orderId}

+ 1 - 1
ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/order/TradeVisitorMapper.xml

@@ -116,7 +116,7 @@
         </foreach>
     </select>
     <select id="queryVisitorByOrderId" resultType="com.yc.ship.module.trade.controller.admin.order.vo.order.TradeVisitorRespVO">
-        SELECT v1.*,t3.name nationalityName FROM trade_visitor v1 INNER JOIN trade_detail v2 ON v1.detail_id = v2.id
+        SELECT v1.*,t3.name nationalityName FROM trade_visitor v1 INNER JOIN trade_detail v2 ON v1.id = v2.visitor_id
         left join area t3 on  v1.nationality = t3.id
         WHERE v2.order_id = #{orderId} and  v1.deleted = 0  and v2.deleted = 0 and v2.product_type = 0
     </select>