Kaynağa Gözat

Merge branch 'main' of http://47.98.207.247:3000/lsq/ship-ota-server

lishiqiang 4 hafta önce
ebeveyn
işleme
e841cbadfc

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

@@ -0,0 +1,42 @@
+package com.yc.ship.module.trade.controller.admin.order.vo.order;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+
+@Schema(description = "管理后台 - 交易订单 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+@NoArgsConstructor
+@AllArgsConstructor
+public class TradeOrderConfirmationCountryRespVO {
+
+
+    @Schema(description = "价格")
+    private BigDecimal actualPrice;
+    @Schema(description = "数量")
+    private Integer num;
+    @Schema(description = "房型ID")
+    private Long roomModelId;
+
+    @Schema(description = "房型名称")
+    private String roomModelName;
+
+    @Schema(description = "房型简称")
+    private String roomModelShortName;
+
+    @Schema(description = "人员类型")
+    private String type;
+
+    @Schema(description = "国籍")
+    private Integer nationality;
+    @Schema(description = "国籍名称")
+    private String nationalityName;
+    @Schema(description = "楼层")
+    private Integer floor;
+
+}

+ 8 - 2
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/vo/order/TradeOrderConfirmationVO.java

@@ -78,12 +78,15 @@ public class TradeOrderConfirmationVO {
     @ExcelProperty("来源名称")
     private String sourceName;
 
-    @Schema(description = "国籍数据")
-    private List<TradeOrderCountryBaseVO> countryList;
+    @Schema(description = "入住房型国籍信息")
+    private List<TradeOrderConfirmationCountryRespVO> countryList;
 
     @Schema(description = "人员数据统计")
     private String personStat;
 
+    @Schema(description = "国籍数量描述")
+    private String countryDesc;
+
     @Schema(description = "订单汇总信息")
     private TradeOrderTotalVO summary;
 
@@ -109,6 +112,9 @@ public class TradeOrderConfirmationVO {
     @Schema(description = "创建者名称")
     private String creatorName;
 
+    @Schema(description = "审核者")
+    private String auditorName;
+
     /**
      * 订单金额
      */

+ 6 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/mysql/order/TradeOrderMapper.java

@@ -209,4 +209,10 @@ public interface TradeOrderMapper extends BaseMapperX<TradeOrderDO> {
 
     List<TradeOrderDO> queryOrderByLast(@Param("orderNo")  String orderNo);
     List<TradeOrderDO> queryOrderById(@Param("orderId")  Long orderId);
+    /**
+     * 查询订单确认单中入住的房型国家信息
+     * @param id
+     * @return
+     */
+    List<TradeOrderConfirmationCountryRespVO> selectConfirmationCountry(@Param("orderId") Long orderId);
 }

+ 5 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/mysql/order/TradeOrderRoomModelMapper.java

@@ -26,4 +26,9 @@ public interface TradeOrderRoomModelMapper extends BaseMapperX<TradeOrderRoomMod
         return selectList(new LambdaQueryWrapperX<TradeOrderRoomModelDO>()
                 .in(TradeOrderRoomModelDO::getOrderId, orderIds));
     }
+
+    default void deleteByOrderId(Long orderId) {
+        delete(new LambdaQueryWrapperX<TradeOrderRoomModelDO>()
+                .eq(TradeOrderRoomModelDO::getOrderId, orderId));
+    }
 }

+ 7 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/mysql/tradeOrderaudit/TradeOrderAuditMapper.java

@@ -27,4 +27,11 @@ public interface TradeOrderAuditMapper extends BaseMapperX<TradeOrderAuditDO> {
                 .orderByDesc(TradeOrderAuditDO::getId));
     }
 
+    default TradeOrderAuditDO selectNewAuditorByOrderNo(String orderNo) {
+        return selectOne(new LambdaQueryWrapperX<TradeOrderAuditDO>()
+                .eq(TradeOrderAuditDO::getOrderNo, orderNo)
+                .eq(TradeOrderAuditDO::getAuditStatus, 1)
+                .orderByDesc(TradeOrderAuditDO::getCreateTime)
+                .last("LIMIT 1"));
+    }
 }

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

@@ -30,6 +30,7 @@ import com.yc.ship.framework.common.pojo.PageResult;
 import com.yc.ship.framework.common.util.collection.CollectionUtils;
 import com.yc.ship.framework.common.util.object.BeanUtils;
 import com.yc.ship.framework.common.util.object.ObjectUtils;
+import com.yc.ship.framework.dict.core.DictFrameworkUtils;
 import com.yc.ship.framework.ip.core.utils.AreaUtils;
 import com.yc.ship.framework.security.core.LoginUser;
 import com.yc.ship.framework.security.core.util.SecurityFrameworkUtils;
@@ -2051,6 +2052,7 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
             tradeOrderMapper.update(new UpdateWrapper<TradeOrderDO>().set("audit_type", auditType).set("order_status", TradeOrderStatusEnum.TRANSFER).set("audit_status", 1).eq("id", orderId));
         }
         if (!tradeOrderRoomDOList.isEmpty()) {
+            tradeOrderRoomModelMapper.deleteByOrderId(orderId);
             tradeOrderRoomModelMapper.insertBatch(tradeOrderRoomDOList);
         }
         OtcTradeOrderCreateRespVO respVO = TradeOrderConvert.INSTANCE.convert(result.getData());
@@ -2287,12 +2289,6 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
             list.add(tradeOrderRoomModelDO);
         });
 
-        tradeOrderRoomModelMapper.update(new LambdaUpdateWrapper<TradeOrderRoomModelDO>()
-                .set(TradeOrderRoomModelDO::getDeleted, 1)
-                .set(TradeOrderRoomModelDO::getUpdateTime, updateTime)
-                .eq(TradeOrderRoomModelDO::getOrderId, orderId)
-        );
-
         if (!Objects.equals(shipTradeOrderCreateReqVO.getAmount(), tradeOrderDO.getAmount()) && loginUser.getDistributorId() != null) {
             auditType = 4;
         }
@@ -2305,7 +2301,10 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
             msg = "修改提交成功,等待管理员审核";
         }
 
-        tradeOrderRoomModelMapper.insertBatch(list);
+        tradeOrderRoomModelMapper.deleteByOrderId(orderId);
+        if(list != null && list.size() > 0) {
+            tradeOrderRoomModelMapper.insertBatch(list);
+        }
 
         OtcTradeOrderCreateRespVO respVO = TradeOrderConvert.INSTANCE.convert(result.getData());
         return CommonResult.success(respVO, msg);
@@ -2432,24 +2431,31 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
     public TradeOrderConfirmationVO getOrderConfirmation(Long id) {
         TradeOrderDO tradeOrderDO = tradeOrderMapper.selectById(id);
         TradeOrderConfirmationVO orderRespNewVO = BeanUtils.toBean(tradeOrderDO, TradeOrderConfirmationVO.class);
+        // 获取最新的审核人
+        TradeOrderAuditDO tradeOrderAuditDO = tradeOrderAuditMapper.selectNewAuditorByOrderNo(tradeOrderDO.getOrderNo());
+        AdminUserRespDTO auditor = adminUserApi.getUser(tradeOrderAuditDO.getAuditUser());
+        if (auditor != null) {
+            orderRespNewVO.setAuditorName(auditor.getNickname());
+        }
 
         //设置订单登记人姓名
         AdminUserRespDTO user = adminUserApi.getUser(orderRespNewVO.getCreator());
         if (user != null) {
             orderRespNewVO.setCreatorName(user.getNickname());
         }
-        //设置房型数据
-        List<TradeOrderRoomModelDO> roomModelDoList = tradeOrderRoomModelMapper.selectListByOrderId(id);
-        List<TradeOrderRoomModelBaseVO> roomModelList = BeanUtils.toBean(roomModelDoList, TradeOrderRoomModelBaseVO.class);
-        Map<Long, List<TradeOrderRoomModelBaseVO>> roomModelMap = CollectionUtils.convertMultiMap(roomModelList, TradeOrderRoomModelBaseVO::getCountryId);
-        //设置国籍数据
-        List<TradeOrderCountryDO> countryDoList = tradeOrderCountryMapper.selectListByOrderId(id);
-        List<TradeOrderCountryBaseVO> countryList = BeanUtils.toBean(countryDoList, TradeOrderCountryBaseVO.class);
-        countryList.forEach(item -> {
-            item.setCountryName(AreaUtils.format2Str(item.getCountryId()));
-            item.setRoomModelList(roomModelMap.get(item.getId()));
-        });
+        //设置入住房型国家信息信息
+        List<TradeOrderConfirmationCountryRespVO> countryList = tradeOrderMapper.selectConfirmationCountry(id);
         orderRespNewVO.setCountryList(countryList);
+        List<String> countryDesList = new ArrayList<>();
+        Map<String, Integer> countryMap = countryList.stream()
+                .collect(Collectors.groupingBy(
+                        TradeOrderConfirmationCountryRespVO::getNationalityName,
+                        Collectors.summingInt(TradeOrderConfirmationCountryRespVO::getNum)
+                ));
+        countryMap.keySet().stream().forEach(key -> {
+            countryDesList.add(countryMap.get(key) + key);
+        });
+        orderRespNewVO.setCountryDesc(String.join(",", countryDesList));
 
 
         if (tradeOrderDO.getPayStatus() == 0) {
@@ -2550,35 +2556,37 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
 
         // 房型信息
         List<Map<String, Object>> roomData = new ArrayList<>();
-        List<TradeOrderCountryBaseVO> countryList = orderConfirmation.getCountryList();
-        StringBuilder countryDes = new StringBuilder();
-        AtomicReference<Double> roomModelDes = new AtomicReference<>(0.0d);
+        List<TradeOrderConfirmationCountryRespVO> countryList = orderConfirmation.getCountryList();
         if (countryList != null) {
-            List<String> countryDesList = new ArrayList<>();
-
-            countryList.forEach(item -> {
-                countryDesList.add((item.getAdultNum() + item.getChildNum() + item.getBabyNum()) + item.getCountryName());
-
-                List<TradeOrderRoomModelBaseVO> roomModelList = item.getRoomModelList();
-                roomModelList.forEach(r -> {
-                    roomModelDes.updateAndGet(v -> (double) (v + r.getUseRoomNum()));
-
-                    Map<String, Object> room = new HashMap<>();
-                    room.put("roomModelName", r.getRoomModelName() + "(" + r.getFloor() + "F)");
-                    room.put("countryName", item.getCountryName());
-                    room.put("personTypeDes", getPersonTypeDes(r));
-                    room.put("personTypeDesEn", getPersonTypeDesEn(r));
-                    room.put("qty", getPersonNum(r));
-                    room.put("price", r.getPrice());
-                    room.put("realMoney", r.getRealMoney());
-                    roomData.add(room);
-                });
-
+            countryList.stream().forEach(item -> {
+                String roomModelName = item.getRoomModelName();
+                if(item.getFloor() == null) {
+                    if("leader".equals(item.getType())) {
+                        roomModelName = roomModelName + "(领队)";
+                    }else if("with".equals(item.getType())) {
+                        roomModelName = roomModelName + "(陪同)";
+                    }
+                }else {
+                    roomModelName = roomModelName + "(" + item.getFloor() + "F)";
+                }
+                Map<String, Object> room = new HashMap<>();
+                room.put("roomModelName", roomModelName);
+                room.put("countryName", item.getNationalityName());
+                room.put("personTypeDes", getPersonTypeDes1(item.getType()));
+                room.put("personTypeDesEn", getPersonTypeDesEn1(item.getType()));
+                room.put("qty", item.getNum());
+                room.put("price", item.getActualPrice());
+                room.put("realMoney", item.getActualPrice().multiply(new BigDecimal(item.getNum())));
+                roomData.add(room);
             });
-            countryDes.append(String.join(",", countryDesList));
         }
-        orderData.put("countryDes", countryDes.toString());
-        orderData.put("roomModelDes", roomModelDes.get());
+        orderData.put("countryDes", orderConfirmation.getCountryDesc());
+        TradeOrderTotalVO summary = orderConfirmation.getSummary();
+        if(summary != null) {
+            orderData.put("roomModelDes", summary.getUseRoomTotalNum());
+        }else {
+            orderData.put("roomModelDes", 0);
+        }
 
         orderData.put("totalMoney", totalMoney);
         orderData.put("creatorName", orderConfirmation.getCreatorName());
@@ -2637,6 +2645,43 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
         return String.join("/", des);
     }
 
+    private String getPersonTypeDes1(String type) {
+        String des = "";
+        switch (type) {
+            case "adultTake": case "adultPlus": case "leader": case "with":
+                des = "成人";
+                break;
+            case "childTake": case "childPlus": case "childNonTake":
+                des = "儿童";
+                break;
+            case "babyTake": case "babyPlus": case "babyNonTake":
+                des = "婴儿";
+                break;
+            default:
+                des = "成人";
+                break;
+        }
+        return des;
+    }
+    private String getPersonTypeDesEn1(String type) {
+        String des = "";
+        switch (type) {
+            case "adultTake": case "adultPlus": case "leader": case "with":
+                des = "Adults";
+                break;
+            case "childTake": case "childPlus": case "childNonTake":
+                des = "Children";
+                break;
+            case "babyTake": case "babyPlus": case "babyNonTake":
+                des = "Infants";
+                break;
+            default:
+                des = "Adults";
+                break;
+        }
+        return des;
+    }
+
     private String getPersonTypeDesEn(TradeOrderRoomModelBaseVO roomModel) {
         List<String> des = new ArrayList<>();
         int adultNum = (roomModel.getAdultAloneNum() + roomModel.getAdultTakeNum() + roomModel.getAdultPlusNum());

+ 17 - 0
ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/order/TradeOrderMapper.xml

@@ -2447,4 +2447,21 @@
     <select id="queryOrderById" resultType="com.yc.ship.module.trade.dal.dataobject.order.TradeOrderDO">
         SELECT  * FROM trade_order WHERE id = #{orderId}   ORDER BY update_time DESC limit 1
     </select>
+    <select id="selectConfirmationCountry"
+            resultType="com.yc.ship.module.trade.controller.admin.order.vo.order.TradeOrderConfirmationCountryRespVO">
+        select t1.actual_price,
+               t2.room_model_id,
+               t3.short_name room_model_short_name,
+               t3.name room_model_name,t2.type,
+               ifnull(t2.nationality,1) nationality,
+               t2.floor,ifnull(t4.name, '中国') nationality_name,
+               count(t1.id) num
+        from trade_detail t1
+            LEFT JOIN trade_visitor t2 on t1.visitor_id = t2.id
+            LEFT JOIN resource_room_model t3 on t2.room_model_id = t3.id
+            LEFT JOIN area t4 on t2.nationality = t4.id
+        where t1.order_id = #{orderId} and t1.product_type = 0 and t1.deleted = 0 and t2.deleted = 0 and t3.deleted = 0
+        GROUP BY t2.room_model_id, t2.floor, t2.type
+        ORDER BY floor desc
+    </select>
 </mapper>

BIN
ship-module-trade/ship-module-trade-biz/src/main/resources/templates/confirmation_template.xlsx