Преглед изворни кода

Merge branch 'main' of http://git.wisesoft.net.cn/lishiqiang/ship-ota-server

lishiqiang пре 6 дана
родитељ
комит
2410078092
12 измењених фајлова са 161 додато и 9 уклоњено
  1. 8 5
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/api/VoyageApiImpl.java
  2. 1 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/app/otc/AppOtcTradeOrderController.java
  3. 14 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/app/otc/vo/AppPersonDescVO.java
  4. 16 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/app/otc/vo/AppRoomDescVO.java
  5. 5 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/dataobject/order/TradeOrderRoomModelDO.java
  6. 2 2
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/mysql/order/TradeOrderMapper.java
  7. 3 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/mysql/order/TradeOrderRoomModelMapper.java
  8. 3 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/mysql/order/TradeVisitorMapper.java
  9. 53 1
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/impl/TradeOrderServiceImpl.java
  10. 32 1
      ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/order/TradeOrderMapper.xml
  11. 15 0
      ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/order/TradeOrderRoomModelMapper.xml
  12. 9 0
      ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/order/TradeVisitorMapper.xml

+ 8 - 5
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/api/VoyageApiImpl.java

@@ -249,6 +249,8 @@ public class VoyageApiImpl implements VoyageApi {
             }
             //退回虚拟库存
             stockDO.setVirtualNum(stockDO.getVirtualNum().add(voyageStockLogDO.getVirtualNum()));
+            // 减去超卖库存,减的是虚拟的
+            stockDO.setOversoldNum(stockDO.getOversoldNum().subtract(voyageStockLogDO.getVirtualNum()));
             //退回真实库存
             stockDO.setRealTotalNum(stockDO.getRealTotalNum().add(voyageStockLogDO.getRealNum()));
             //退回可售库存
@@ -295,6 +297,7 @@ public class VoyageApiImpl implements VoyageApi {
                 item.setCanSellNum(item.getCanSellNum().add(totalNum));
                 item.setRealTotalNum(item.getRealTotalNum().add(realNum));
                 item.setVirtualNum(item.getVirtualNum().add(virtualNum));
+                item.setOversoldNum(item.getOversoldNum().subtract(virtualNum));
                 if(item.getTenantId() == null && voyageStockLogDO.getTenantId() != null) {
                     item.setTenantId(voyageStockLogDO.getTenantId());
                 }
@@ -462,7 +465,7 @@ public class VoyageApiImpl implements VoyageApi {
                     // 加超卖房间数
                     item.setOversoldNum(item.getOversoldNum().add(useNum.subtract(item.getRealTotalNum())));
                     voyageStockDetailLogDO.setVirtualNum(useNum.subtract(item.getRealTotalNum()));
-                    voyageStockDetailLogDO.setRealNum(useNum);
+                    voyageStockDetailLogDO.setRealNum(item.getRealTotalNum());
                     // 扣实际房间数
                     item.setVirtualNum(item.getVirtualNum().subtract(useNum.subtract(item.getRealTotalNum())));
                     item.setRealTotalNum(BigDecimal.ZERO);
@@ -585,11 +588,11 @@ public class VoyageApiImpl implements VoyageApi {
                     voyageStockDetailLogDO.setVirtualNum(BigDecimal.ZERO);
                     item.setRealTotalNum(item.getRealTotalNum().subtract(useNum));
                 } else {
-                    useVirtualNum.add(totalUseNum.subtract(item.getRealTotalNum()));
+                    useVirtualNum.add(useNum.subtract(item.getRealTotalNum()));
                     useRealNum.add(item.getRealTotalNum().add(BigDecimal.ZERO));
-                    overSoldNum.add(totalUseNum.subtract(item.getRealTotalNum()));
+                    overSoldNum.add(useNum.subtract(item.getRealTotalNum()));
                     voyageStockDetailLogDO.setRealNum(item.getRealTotalNum());
-                    voyageStockDetailLogDO.setVirtualNum(totalUseNum.subtract(item.getRealTotalNum()));
+                    voyageStockDetailLogDO.setVirtualNum(useNum.subtract(item.getRealTotalNum()));
                     // 扣虚拟房间数
                     item.setVirtualNum(item.getVirtualNum().subtract(useNum.subtract(item.getRealTotalNum())));
                     item.setRealTotalNum(BigDecimal.ZERO);
@@ -1038,7 +1041,7 @@ public class VoyageApiImpl implements VoyageApi {
                     useRealNum.add(useNum.subtract(item.getVirtualNum()));
                     useVirtualNum.add(item.getVirtualNum().add(BigDecimal.ZERO));
                     voyageStockDetailLogDO.setVirtualNum(item.getVirtualNum());
-                    voyageStockDetailLogDO.setRealNum(totalUseNum.subtract(item.getVirtualNum()));
+                    voyageStockDetailLogDO.setRealNum(useNum.subtract(item.getVirtualNum()));
                     // 扣实际房间数
                     item.setRealTotalNum(item.getRealTotalNum().subtract(useNum.subtract(item.getVirtualNum())));
                     item.setVirtualNum(BigDecimal.ZERO);

+ 1 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/app/otc/AppOtcTradeOrderController.java

@@ -160,6 +160,7 @@ public class AppOtcTradeOrderController {
     // 查询我的行程
     @GetMapping("/miniApp/getMyItinerary")
     @Operation(summary = "查询我的行程")
+    @PreAuthenticated
     @OperateLog(type = API)
     public CommonResult<List<AppMyItineraryVO>> getMyItinerary(@RequestParam("status") Integer status) {
         Long loginUserId = getLoginUserId();

+ 14 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/app/otc/vo/AppPersonDescVO.java

@@ -0,0 +1,14 @@
+package com.yc.ship.module.trade.controller.app.otc.vo;
+
+import lombok.Data;
+
+@Data
+public class AppPersonDescVO {
+
+
+    private Long orderId;
+
+    private String name;
+
+    private Integer num;
+}

+ 16 - 0
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/app/otc/vo/AppRoomDescVO.java

@@ -0,0 +1,16 @@
+package com.yc.ship.module.trade.controller.app.otc.vo;
+
+import lombok.Data;
+
+@Data
+public class AppRoomDescVO {
+
+
+    private Long orderId;
+
+    private Integer floor;
+
+    private String roomModelName;
+
+    private String roomNum;
+}

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

@@ -130,5 +130,10 @@ public class TradeOrderRoomModelDO extends TenantBaseDO {
      */
     private Long roomModelTypeId;
 
+    /**
+     * 房间ID
+     */
+    private Long roomId;
+
 
 }

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

@@ -210,9 +210,9 @@ public interface TradeOrderMapper extends BaseMapperX<TradeOrderDO> {
     IPage<AppTradeOrderRespNewVO> selectAppPage(IPage<AppTradeOrderRespNewVO> iPage, @Param("pageReqVO") AppTradeOrderPageReqNewVO pageReqVO);
     /**
      * 我的行程
-     * @param loginUserId
+     * @param memberId
      * @param status
      * @return
      */
-    List<AppMyItineraryVO> selectMyItinerary(Long loginUserId, Integer status);
+    List<AppMyItineraryVO> selectMyItinerary(@Param("memberId") Long memberId, @Param("status") Integer status);
 }

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

@@ -4,6 +4,7 @@ import com.yc.ship.framework.mybatis.core.mapper.BaseMapperX;
 import com.yc.ship.framework.mybatis.core.query.LambdaQueryWrapperX;
 import com.yc.ship.framework.tenant.core.aop.TenantIgnore;
 import com.yc.ship.module.trade.controller.admin.order.vo.order.OrderShareVO;
+import com.yc.ship.module.trade.controller.app.otc.vo.AppRoomDescVO;
 import com.yc.ship.module.trade.dal.dataobject.order.TradeOrderCountryDO;
 import com.yc.ship.module.trade.dal.dataobject.order.TradeOrderRoomModelDO;
 import org.apache.ibatis.annotations.Mapper;
@@ -41,4 +42,6 @@ public interface TradeOrderRoomModelMapper extends BaseMapperX<TradeOrderRoomMod
      * @return
      */
     List<OrderShareVO> selectOrderShareStatsByOrderIds(@Param("orderIds") List<Long> orderIds);
+
+    List<AppRoomDescVO> selectRoomDesc(List<Long> orderIds);
 }

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

@@ -9,6 +9,7 @@ import com.yc.ship.module.trade.controller.admin.order.vo.order.TouristExportVis
 import com.yc.ship.module.trade.controller.admin.order.vo.order.TradeOrderPageReqVO;
 import com.yc.ship.module.trade.controller.admin.order.vo.order.TradeOrderRespExcelVO;
 import com.yc.ship.module.trade.controller.admin.order.vo.order.TradeVisitorRespVO;
+import com.yc.ship.module.trade.controller.app.otc.vo.AppPersonDescVO;
 import com.yc.ship.module.trade.dal.dataobject.order.TradeVisitorDO;
 import com.yc.ship.module.trade.service.order.bo.TradeVisitorBO;
 import org.apache.ibatis.annotations.Mapper;
@@ -85,4 +86,6 @@ public interface TradeVisitorMapper extends BaseMapperX<TradeVisitorDO> {
      * 查询游客名单导出游客列表
      */
     List<TouristExportVisitorVO> selectTouristExportVisitor(@Param("vo") TradeOrderPageReqVO reqVO);
+
+    List<AppPersonDescVO> selectPersonDesc(@Param("orderIds") List<Long> orderIds);
 }

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

@@ -1,6 +1,7 @@
 package com.yc.ship.module.trade.service.order.impl;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.date.LocalDateTimeUtil;
 import cn.hutool.core.map.MapUtil;
@@ -46,6 +47,7 @@ import com.yc.ship.module.trade.dal.dataobject.order.*;
 import com.yc.ship.module.trade.dal.dataobject.orderjz.OrderJzDO;
 import com.yc.ship.module.trade.dal.mysql.order.TradeDetailMapper;
 import com.yc.ship.module.trade.dal.mysql.order.TradeOrderMapper;
+import com.yc.ship.module.trade.dal.mysql.order.TradeOrderRoomModelMapper;
 import com.yc.ship.module.trade.dal.mysql.order.TradeVisitorMapper;
 import com.yc.ship.module.trade.enums.*;
 import com.yc.ship.module.trade.framework.annotation.TradeOrderLog;
@@ -74,6 +76,7 @@ import org.springframework.transaction.interceptor.TransactionAspectSupport;
 import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.time.Duration;
 import java.time.LocalDateTime;
 import java.util.*;
 import java.util.concurrent.atomic.AtomicReference;
@@ -142,7 +145,7 @@ public class TradeOrderServiceImpl implements TradeOrderService {
     private ShipApi shipApi;
 
     @Resource
-    private TradeOrderRoomModelService tradeOrderRoomModelService;
+    private TradeOrderRoomModelMapper tradeOrderRoomModelMapper;
 
     @Resource
     private TradeOrderCountryService tradeOrderCountryService;
@@ -1397,9 +1400,58 @@ public class TradeOrderServiceImpl implements TradeOrderService {
     @Override
     public List<AppMyItineraryVO> getMyItinerary(Long loginUserId, Integer status) {
         List<AppMyItineraryVO> list = tradeOrderMapper.selectMyItinerary(loginUserId, status);
+        List<Long> orderIds = CollectionUtils.convertList(list, AppMyItineraryVO::getOrderId);
+        if(CollectionUtils.isAnyEmpty(orderIds)) {
+            return list;
+        }
+        List<AppPersonDescVO> personDescVOS = tradeVisitorMapper.selectPersonDesc(orderIds);
+        Map<Long, AppPersonDescVO> personDescMap = CollectionUtils.convertMap(personDescVOS, AppPersonDescVO::getOrderId);
+        List<AppRoomDescVO> roomDescVOS = tradeOrderRoomModelMapper.selectRoomDesc(orderIds);
+        Map<Long, AppRoomDescVO> roomDescMap = CollectionUtils.convertMap(roomDescVOS, AppRoomDescVO::getOrderId);
+        list.stream().forEach(item -> {
+            String statusDesc = formatStatus(status, item.getBoardingTime());
+            item.setStatusDesc(statusDesc);
+            MapUtils.findAndThen(personDescMap, item.getOrderId(), personDescVO -> {
+                item.setPersonDesc(personDescVO.getName() + "等" + personDescVO.getNum() + "人");
+            });
+            MapUtils.findAndThen(roomDescMap, item.getOrderId(), roomDescVO -> {
+                item.setRoomDesc((roomDescVO.getRoomNum() == null ? "" : roomDescVO.getRoomNum()) + roomDescVO.getRoomModelName() + "(" + roomDescVO.getFloor() + "F)" );
+            });
+        });
         return list;
     }
 
+    private String formatStatus(Integer status, LocalDateTime boardingTime) {
+        String statusDesc = "";
+        switch (status) {
+           case 1:
+               statusDesc += "待出行";
+               Duration between = LocalDateTimeUtil.between(boardingTime, LocalDateTime.now());
+               long l = between.toDays();
+               if (l > 0) {
+                   statusDesc += "(距离登船" + l + "天)";
+               }else {
+                   long l1 = between.toHours();
+                   if (l1 > 0) {
+                       statusDesc += "(距离登船" + l1 + "小时)";
+                   }else {
+                       long l2 = between.toMinutes();
+                       statusDesc += "(距离登船" + l2 + "分)";
+                   }
+               }
+               break;
+            case 2:
+                statusDesc += "进行中";
+                break;
+            case 3:
+                statusDesc += "已完成";
+                break;
+            default:
+                break;
+        }
+        return statusDesc;
+    }
+
 
     private List<TradeDetailPriceDO> buildTradeDetailPrice(TradeOrderDO tradeOrderDO, List<TradeOrderCreateReqDTO.DetailPrice> tradeDetailPriceList, TradeDetailDO tradeDetailDO) {
         if (ObjectUtils.equalsAny(tradeOrderDO.getSellMethod(), SellMethodEnum.MINI_APP.getType()) && ObjectUtil.equal(tradeDetailDO.getCateType(), ProductTypeEnum.Hotel.getValue())) {

Разлика између датотеке није приказан због своје велике величине
+ 32 - 1
ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/order/TradeOrderMapper.xml


+ 15 - 0
ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/order/TradeOrderRoomModelMapper.xml

@@ -29,6 +29,21 @@
         </foreach>
         GROUP BY t1.order_id,t2.gender
     </select>
+    <select id="selectRoomDesc" resultType="com.yc.ship.module.trade.controller.app.otc.vo.AppRoomDescVO">
+        SELECT
+            t1.order_id,
+            t1.floor,
+            t2.NAME room_model_name,
+            t3.room_num
+        FROM
+            ( SELECT room_index_id, order_id, IFNULL( final_room_id, init_room_id ) room_id, room_model_id, floor FROM trade_visitor where order_id in
+             <foreach item="item" collection="orderIds" separator="," open="(" close=")" index="index">
+                 #{item}
+             </foreach>
+             GROUP BY room_index_id ) t1
+                LEFT JOIN resource_room_model t2 ON t1.room_model_id = t2.id
+                LEFT JOIN resource_room t3 ON t1.room_id = t2.id
+    </select>
 
 
 </mapper>

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

@@ -325,4 +325,13 @@
         </if>
         ORDER BY tor.order_no ASC, tv.id ASC
     </select>
+    <select id="selectPersonDesc" resultType="com.yc.ship.module.trade.controller.app.otc.vo.AppPersonDescVO">
+        select order_id,name, count(1) num
+        from trade_visitor
+        where deleted = 0 and order_id in
+        <foreach item="item" collection="orderIds" separator="," open="(" close=")">
+            #{item}
+        </foreach>
+        GROUP BY order_id
+    </select>
 </mapper>