5 İşlemeler f4c0c464cf ... 257ee97ca9

Yazar SHA1 Mesaj Tarih
  lishiqiang 257ee97ca9 优化 1 ay önce
  lishiqiang b194a5c1bf 修改逻辑处理,订单ID查询详情,修改订单接口 1 ay önce
  luofeiyun feddeef13c fix: 批量生成航次时根据选择的价格模板生成航次价格 1 ay önce
  luofeiyun cf23a3aa01 Merge remote-tracking branch 'origin/main' into main 1 ay önce
  luofeiyun efa442001a fix: 修改加锁逻辑 1 ay önce
24 değiştirilmiş dosya ile 583 ekleme ve 194 silme
  1. 8 13
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/api/VoyageApiImpl.java
  2. 21 26
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/pricetemplate/PriceTemplateController.java
  3. 8 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/pricetemplate/vo/PriceTemplateRespVO.java
  4. 5 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/pricetemplate/vo/PriceTemplateSaveReqVO.java
  5. 20 1
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyage/VoyageController.java
  6. 4 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyage/vo/VoyageRespVO.java
  7. 3 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyage/vo/VoyageSaveBatchReqVO.java
  8. 5 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/dataobject/pricetemplate/PriceTemplateDO.java
  9. 1 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/voyage/VoyageMapper.java
  10. 2 1
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/pricetemplate/PriceTemplateService.java
  11. 36 5
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/pricetemplate/PriceTemplateServiceImpl.java
  12. 102 54
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyage/VoyageServiceImpl.java
  13. 3 9
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyagestockdetail/VoyageStockDetailServiceImpl.java
  14. 47 52
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyagestockdistribute/VoyageStockDistributeNewServiceImpl.java
  15. 19 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/OtcTradeOrderController.java
  16. 3 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/vo/order/TradeOrderOtcCreateVO.java
  17. 33 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/vo/order/TradeOrderVO.java
  18. 5 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/vo/order/TradeSpuReqVO.java
  19. 0 6
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/app/order/TradeStandardSupplierController.java
  20. 2 2
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/app/ota/OtaStandardController.java
  21. 0 18
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/app/otc/AppOtcTradeOrderController.java
  22. 7 4
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/handler/TradeStockOrderHandler.java
  23. 3 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/otc/OtcTradeOrderService.java
  24. 246 3
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/otc/impl/OtcTradeOrderServiceImpl.java

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

@@ -1,6 +1,5 @@
 package com.yc.ship.module.product.api;
 
-import com.yc.ship.framework.common.exception.ServiceException;
 import com.yc.ship.framework.common.util.collection.CollectionUtils;
 import com.yc.ship.framework.common.util.object.BeanUtils;
 import com.yc.ship.module.product.api.dto.OrderRoomUseDTO;
@@ -68,20 +67,16 @@ public class VoyageApiImpl implements VoyageApi{
 
         Long voyageId = reqDTO.getVoyageId();
         //现在给整个航次的库存加锁
-        RLock lock = redissonClient.getLock(String.format(ProductRedisKeyConstants.STOCK_REDIS_KEY_PREFIX, voyageId));
+        String lockKey = String.format(ProductRedisKeyConstants.STOCK_REDIS_KEY_PREFIX, voyageId);
+        RLock lock = redissonClient.getLock(lockKey);
         try {
-            if(lock.tryLock(60,90, TimeUnit.SECONDS)) {
-                Integer type = reqDTO.getType();//判断是分销商还是门店下单 1:分销商,2:门店
-                if (type == DistributorOrStoreEnum.DISTRIBUTOR.getValue()) {//分销商下单,当前阶段不考虑门店下单
-                    //分销商下单只扣分销商库存,默认是OTA,默认OTC只能门店下单
-                    //初定扣分销商库存
-                    preReduceStockDistributor(reqDTO);
-                }
+            lock.lock(60, TimeUnit.SECONDS);
+            Integer type = reqDTO.getType();//判断是分销商还是门店下单 1:分销商,2:门店
+            if (type == DistributorOrStoreEnum.DISTRIBUTOR.getValue()) {//分销商下单,当前阶段不考虑门店下单
+                //分销商下单只扣分销商库存,默认是OTA,默认OTC只能门店下单
+                //初定扣分销商库存
+                preReduceStockDistributor(reqDTO);
             }
-        }catch (ServiceException e) {
-            log.error("订单初定扣库存失败:",e);
-        }catch (Exception e) {
-            log.error("订单初定扣库存失败:",e);
         }finally {
             if(lock.isHeldByCurrentThread() && lock.isLocked()){
                 lock.unlock();

+ 21 - 26
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/pricetemplate/PriceTemplateController.java

@@ -20,6 +20,8 @@ import com.yc.ship.module.product.service.priceroommodel.PriceRoomModelService;
 import com.yc.ship.module.product.service.pricesinglesetting.PriceSingleSettingService;
 import com.yc.ship.module.product.service.pricespu.PriceSpuService;
 import com.yc.ship.module.product.service.pricetemplate.PriceTemplateService;
+import com.yc.ship.module.resource.api.route.RouteApi;
+import com.yc.ship.module.resource.api.route.dto.RouteRespDTO;
 import com.yc.ship.module.resource.api.ship.ShipApi;
 import com.yc.ship.module.resource.api.ship.dto.ShipRespDTO;
 import io.swagger.v3.oas.annotations.Operation;
@@ -48,23 +50,13 @@ public class PriceTemplateController {
     @Resource
     private PriceTemplateService priceTemplateService;
 
-    @Resource
-    private PriceRoomModelService priceRoomModelService;
-
-    @Resource
-    private PriceFloorService priceFloorService;
-
-    @Resource
-    private PriceSingleSettingService priceSingleSettingService;
 
-    @Resource
-    private PriceAreaService priceAreaService;
 
     @Resource
-    private PriceSpuService priceSpuService;
+    private ShipApi shipApi;
 
     @Resource
-    private ShipApi shipApi;
+    private RouteApi routeApi;
 
     @PostMapping("/create")
     @Operation(summary = "创建价格模板")
@@ -95,19 +87,7 @@ public class PriceTemplateController {
     @Parameter(name = "id", description = "编号", required = true, example = "1024")
     @PreAuthorize("@ss.hasPermission('product:price-template:query')")
     public CommonResult<PriceTemplateRespVO> getPriceTemplate(@RequestParam("id") Long id) {
-        PriceTemplateDO priceTemplate = priceTemplateService.getPriceTemplate(id);
-        PriceTemplateRespVO respVO = BeanUtils.toBean(priceTemplate, PriceTemplateRespVO.class);
-        PriceSingleSettingDO singleSettingDO = priceSingleSettingService.getByObjectId(id);
-        respVO.setSingleSetting(BeanUtils.toBean(singleSettingDO, PriceSingleSettingRespVO.class));
-        List<PriceRoomModelDO> roomModelDOList = priceRoomModelService.getListByObjectId(id);
-        respVO.setRoomModelList(BeanUtils.toBean(roomModelDOList, PriceRoomModelRespVO.class));
-        List<PriceFloorDO> floorDOList = priceFloorService.getListByObjectId(id);
-        respVO.setFloorList(BeanUtils.toBean(floorDOList, PriceFloorRespVO.class));
-        List<PriceAreaDO> areaList = priceAreaService.getListByObjectId(id);
-        respVO.setAreaList(BeanUtils.toBean(areaList, PriceAreaRespVO.class));
-        //附加产品
-        List<PriceSpuRespVO> spuList = priceSpuService.getListByObjectId(id);
-        respVO.setSpuList(spuList);
+        PriceTemplateRespVO respVO = priceTemplateService.getPriceTemplate(id);
         return success(respVO);
     }
 
@@ -120,8 +100,23 @@ public class PriceTemplateController {
         List<PriceTemplateRespVO> list = page.getList();
         List<Long> shipIds = CollectionUtils.convertList(list, PriceTemplateRespVO::getShipId);
         Map<Long, ShipRespDTO> shipMap = shipApi.queryShip(shipIds);
+
+        List<Long> routeIds = CollectionUtils.convertList(list, PriceTemplateRespVO::getRouteId);
+        Map<Long, RouteRespDTO> routeMap = routeApi.queryRoute(routeIds);
+
         list.stream().forEach(item -> {
-            item.setShipName(shipMap.get(item.getShipId()).getName());
+            ShipRespDTO shipRespDTO = shipMap.get(item.getShipId());
+            if(shipRespDTO != null) {
+                item.setShipName(shipRespDTO.getName());
+            }else {
+                item.setShipName("已删除");
+            }
+            RouteRespDTO routeRespDTO = routeMap.get(item.getRouteId());
+            if(routeRespDTO != null) {
+                item.setRouteName(routeRespDTO.getName());
+            }else {
+                item.setRouteName("已删除");
+            }
         });
         return success(page);
     }

+ 8 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/pricetemplate/vo/PriceTemplateRespVO.java

@@ -34,6 +34,9 @@ public class PriceTemplateRespVO {
     @ExcelProperty("航线ID")
     private Long routeId;
 
+    @Schema(description = "航线名称", example = "王五")
+    private String routeName;
+
     @Schema(description = "价格模式")
     @ExcelProperty(value = "价格模式", converter = DictConvert.class)
     @DictFormat("product_price_model") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
@@ -48,6 +51,11 @@ public class PriceTemplateRespVO {
     @DictFormat("common_status") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
     private Integer status;
 
+    /***
+     * 加床类型 0:固定金额 1:百分比
+     */
+    private Integer jctype;
+
     @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
     @ExcelProperty("创建时间")
     private LocalDateTime createTime;

+ 5 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/pricetemplate/vo/PriceTemplateSaveReqVO.java

@@ -38,6 +38,11 @@ public class PriceTemplateSaveReqVO {
     @NotNull(message = "状态不能为空")
     private Integer status;
 
+    /***
+     * 加床类型 0:固定金额 1:百分比
+     */
+    private Integer jctype;
+
     @Schema(description = "房型价格系数")
     private List<PriceRoomModelDO> roomModelList;
 

+ 20 - 1
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyage/VoyageController.java

@@ -10,6 +10,9 @@ import com.yc.ship.framework.excel.core.util.ExcelUtils;
 import com.yc.ship.module.product.controller.admin.voyage.vo.*;
 import com.yc.ship.module.product.dal.dataobject.voyage.VoyageDO;
 import com.yc.ship.module.product.service.voyage.VoyageService;
+import com.yc.ship.module.resource.api.dto.ResourceRouteRespDTO;
+import com.yc.ship.module.resource.api.route.RouteApi;
+import com.yc.ship.module.resource.api.route.dto.RouteRespDTO;
 import com.yc.ship.module.resource.dal.dataobject.route.ResourceRouteDO;
 import com.yc.ship.module.resource.dal.dataobject.ship.ResourceShipDO;
 import com.yc.ship.module.resource.service.route.ResourceRouteService;
@@ -46,6 +49,9 @@ public class VoyageController {
     @Resource
     private ResourceRouteService routeService;
 
+    @Resource
+    private RouteApi routeApi;
+
     @PostMapping("/create")
     @Operation(summary = "创建航次管理")
     @PreAuthorize("@ss.hasPermission('product:voyage:create')")
@@ -117,7 +123,20 @@ public class VoyageController {
     @Operation(summary = "获得资源管理-航次列表-日历")
     public CommonResult<List<VoyageRespVO>> getVoyageListCalendar(VoyageCalendarReqVO reqVO) {
         List<VoyageDO> list = voyageService.getListCalendar(reqVO);
-        return success(BeanUtils.toBean(list, VoyageRespVO.class));
+        List<VoyageRespVO> voyageRespVOS = BeanUtils.toBean(list, VoyageRespVO.class);
+
+        List<Long> shipIds = CollectionUtils.convertList(voyageRespVOS, VoyageRespVO::getShipId);
+        List<ResourceShipDO> shipList = shipService.getList(shipIds);
+        Map<Long, ResourceShipDO> shipDOMap = CollectionUtils.convertMap(shipList, ResourceShipDO::getId);
+
+        List<Long> routeIds = CollectionUtils.convertList(voyageRespVOS, VoyageRespVO::getRouteId);
+        Map<Long, RouteRespDTO> longRouteRespDTOMap = routeApi.queryRoute(routeIds);
+        voyageRespVOS.stream().forEach(item -> {
+            item.setRouteName(longRouteRespDTOMap.get(item.getRouteId()).getName());
+            item.setRouteResp(longRouteRespDTOMap.get(item.getRouteId()));
+            item.setShipName(shipDOMap.get(item.getShipId()).getName());
+        });
+        return success(voyageRespVOS);
     }
 
     //根据游轮ID获取上架的航次列表

+ 4 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyage/vo/VoyageRespVO.java

@@ -4,6 +4,7 @@ import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.yc.ship.framework.excel.core.annotations.DictFormat;
 import com.yc.ship.framework.excel.core.convert.DictConvert;
+import com.yc.ship.module.resource.api.route.dto.RouteRespDTO;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
@@ -35,6 +36,9 @@ public class VoyageRespVO {
     @ExcelProperty("航线")
     private Long routeId;
 
+    @Schema(description = "航线对象")
+    private RouteRespDTO routeResp;
+
     @Schema(description = "登船时间")
     @ExcelProperty("登船时间")
     private LocalDateTime boardingTime;

+ 3 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyage/vo/VoyageSaveBatchReqVO.java

@@ -59,4 +59,7 @@ public class VoyageSaveBatchReqVO {
 
     @Schema(description = "登船须知")
     private String notice;
+
+    @Schema(description = "价格模板ID", example = "1")
+    private Long templateId;
 }

+ 5 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/dataobject/pricetemplate/PriceTemplateDO.java

@@ -59,4 +59,9 @@ public class PriceTemplateDO extends TenantBaseDO {
      */
     private Integer status;
 
+    /***
+     * 加床类型 0:固定金额 1:百分比
+     */
+    private Integer jctype;
+
 }

+ 1 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/voyage/VoyageMapper.java

@@ -48,6 +48,7 @@ public interface VoyageMapper extends BaseMapperX<VoyageDO> {
     default List<VoyageDO> selectOnShelfListByShipId(Long shipId) {
         return selectList(new LambdaQueryWrapperX<VoyageDO>()
                 .eq(VoyageDO::getShipId, shipId)
+                .gt(VoyageDO::getLeaveTime, LocalDate.now())
                 .eq(VoyageDO::getShelfStatus, VoyageShelfStatusEnum.ON_SHELF.getValue())
                 .orderByAsc(VoyageDO::getCreateTime));
     }

+ 2 - 1
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/pricetemplate/PriceTemplateService.java

@@ -3,6 +3,7 @@ package com.yc.ship.module.product.service.pricetemplate;
 import com.yc.ship.framework.common.pojo.PageResult;
 import com.yc.ship.module.product.controller.admin.pricetemplate.vo.PriceTemplatePageReqVO;
 import com.yc.ship.module.product.controller.admin.pricetemplate.vo.PriceTemplateReqVO;
+import com.yc.ship.module.product.controller.admin.pricetemplate.vo.PriceTemplateRespVO;
 import com.yc.ship.module.product.controller.admin.pricetemplate.vo.PriceTemplateSaveReqVO;
 import com.yc.ship.module.product.dal.dataobject.pricetemplate.PriceTemplateDO;
 
@@ -44,7 +45,7 @@ public interface PriceTemplateService {
      * @param id 编号
      * @return 价格模板
      */
-    PriceTemplateDO getPriceTemplate(Long id);
+    PriceTemplateRespVO getPriceTemplate(Long id);
 
     /**
      * 获得价格模板分页

+ 36 - 5
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/pricetemplate/PriceTemplateServiceImpl.java

@@ -3,9 +3,7 @@ package com.yc.ship.module.product.service.pricetemplate;
 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.module.product.controller.admin.pricetemplate.vo.PriceTemplatePageReqVO;
-import com.yc.ship.module.product.controller.admin.pricetemplate.vo.PriceTemplateReqVO;
-import com.yc.ship.module.product.controller.admin.pricetemplate.vo.PriceTemplateSaveReqVO;
+import com.yc.ship.module.product.controller.admin.pricetemplate.vo.*;
 import com.yc.ship.module.product.dal.dataobject.pricearea.PriceAreaDO;
 import com.yc.ship.module.product.dal.dataobject.pricefloor.PriceFloorDO;
 import com.yc.ship.module.product.dal.dataobject.priceroommodel.PriceRoomModelDO;
@@ -18,6 +16,11 @@ import com.yc.ship.module.product.dal.mysql.priceroommodel.PriceRoomModelMapper;
 import com.yc.ship.module.product.dal.mysql.pricesinglesetting.PriceSingleSettingMapper;
 import com.yc.ship.module.product.dal.mysql.pricespu.PriceSpuMapper;
 import com.yc.ship.module.product.dal.mysql.pricetemplate.PriceTemplateMapper;
+import com.yc.ship.module.product.service.pricearea.PriceAreaService;
+import com.yc.ship.module.product.service.pricefloor.PriceFloorService;
+import com.yc.ship.module.product.service.priceroommodel.PriceRoomModelService;
+import com.yc.ship.module.product.service.pricesinglesetting.PriceSingleSettingService;
+import com.yc.ship.module.product.service.pricespu.PriceSpuService;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
@@ -56,6 +59,21 @@ public class PriceTemplateServiceImpl implements PriceTemplateService {
     @Resource
     private PriceSpuMapper priceSpuMapper;
 
+    @Resource
+    private PriceRoomModelService priceRoomModelService;
+
+    @Resource
+    private PriceFloorService priceFloorService;
+
+    @Resource
+    private PriceSingleSettingService priceSingleSettingService;
+
+    @Resource
+    private PriceAreaService priceAreaService;
+
+    @Resource
+    private PriceSpuService priceSpuService;
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Long createPriceTemplate(PriceTemplateSaveReqVO createReqVO) {
@@ -99,8 +117,21 @@ public class PriceTemplateServiceImpl implements PriceTemplateService {
     }
 
     @Override
-    public PriceTemplateDO getPriceTemplate(Long id) {
-        return priceTemplateMapper.selectById(id);
+    public PriceTemplateRespVO getPriceTemplate(Long id) {
+        PriceTemplateDO priceTemplate = priceTemplateMapper.selectById(id);
+        PriceTemplateRespVO respVO = BeanUtils.toBean(priceTemplate, PriceTemplateRespVO.class);
+        PriceSingleSettingDO singleSettingDO = priceSingleSettingService.getByObjectId(id);
+        respVO.setSingleSetting(BeanUtils.toBean(singleSettingDO, PriceSingleSettingRespVO.class));
+        List<PriceRoomModelDO> roomModelDOList = priceRoomModelService.getListByObjectId(id);
+        respVO.setRoomModelList(BeanUtils.toBean(roomModelDOList, PriceRoomModelRespVO.class));
+        List<PriceFloorDO> floorDOList = priceFloorService.getListByObjectId(id);
+        respVO.setFloorList(BeanUtils.toBean(floorDOList, PriceFloorRespVO.class));
+        List<PriceAreaDO> areaList = priceAreaService.getListByObjectId(id);
+        respVO.setAreaList(BeanUtils.toBean(areaList, PriceAreaRespVO.class));
+        //附加产品
+        List<PriceSpuRespVO> spuList = priceSpuService.getListByObjectId(id);
+        respVO.setSpuList(spuList);
+        return respVO;
     }
 
     @Override

+ 102 - 54
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyage/VoyageServiceImpl.java

@@ -1,14 +1,19 @@
 package com.yc.ship.module.product.service.voyage;
 
 import cn.hutool.core.date.DatePattern;
-import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.date.LocalDateTimeUtil;
 import cn.hutool.core.util.IdUtil;
-import com.yc.ship.framework.common.exception.ServiceException;
 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.module.product.controller.admin.pricetemplate.vo.*;
+import com.yc.ship.module.product.controller.admin.pricevoyage.vo.PriceVoyageSaveReqVO;
 import com.yc.ship.module.product.controller.admin.voyage.vo.*;
+import com.yc.ship.module.product.dal.dataobject.pricearea.PriceAreaDO;
+import com.yc.ship.module.product.dal.dataobject.pricefloor.PriceFloorDO;
+import com.yc.ship.module.product.dal.dataobject.priceroommodel.PriceRoomModelDO;
+import com.yc.ship.module.product.dal.dataobject.pricesinglesetting.PriceSingleSettingDO;
+import com.yc.ship.module.product.dal.dataobject.pricespu.PriceSpuDO;
 import com.yc.ship.module.product.dal.dataobject.voyage.VoyageDO;
 import com.yc.ship.module.product.dal.dataobject.voyagestock.VoyageStockDO;
 import com.yc.ship.module.product.dal.dataobject.voyagestockdetail.VoyageStockDetailDO;
@@ -16,11 +21,12 @@ import com.yc.ship.module.product.dal.mysql.pricevoyage.PriceVoyageMapper;
 import com.yc.ship.module.product.dal.mysql.voyage.VoyageMapper;
 import com.yc.ship.module.product.dal.mysql.voyagestock.VoyageStockMapper;
 import com.yc.ship.module.product.dal.mysql.voyagestockdetail.VoyageStockDetailMapper;
-import com.yc.ship.module.product.dal.mysql.voyagestockdistribute.VoyageStockDistributeMapper;
 import com.yc.ship.module.product.dal.mysql.voyagestockdistribute.VoyageStockDistributeNewMapper;
-import com.yc.ship.module.product.enums.DistributorOrStoreEnum;
+import com.yc.ship.module.product.enums.UseStatusEnum;
 import com.yc.ship.module.product.enums.YesOrNoEnum;
 import com.yc.ship.module.product.framework.lock.ProductRedisKeyConstants;
+import com.yc.ship.module.product.service.pricetemplate.PriceTemplateService;
+import com.yc.ship.module.product.service.pricevoyage.PriceVoyageService;
 import com.yc.ship.module.product.utils.VoyageUUCodeUtils;
 import com.yc.ship.module.resource.api.ship.ShipApi;
 import com.yc.ship.module.resource.api.ship.dto.RoomModelFloorNumDTO;
@@ -76,6 +82,12 @@ public class VoyageServiceImpl implements VoyageService {
     @Resource
     private RedissonClient redissonClient;
 
+    @Resource
+    private PriceTemplateService priceTemplateService;
+
+    @Resource
+    private PriceVoyageService priceVoyageService;
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Long createVoyage(VoyageSaveReqVO createReqVO) {
@@ -113,55 +125,51 @@ public class VoyageServiceImpl implements VoyageService {
 
         VoyageStockDO stockDO = voyageStockMapper.selectById(voyageId);
         //现在给整个航次的库存加锁
-        RLock lock = redissonClient.getLock(String.format(ProductRedisKeyConstants.STOCK_REDIS_KEY_PREFIX, voyageId));
+        String lockKey = String.format(ProductRedisKeyConstants.STOCK_REDIS_KEY_PREFIX, voyageId);
+        RLock lock = redissonClient.getLock(lockKey);
         try {
-            if(lock.tryLock(60,90, TimeUnit.SECONDS)) {
-                if(stockDO != null) {
-                    voyageStockMapper.updateById(voyageStockDO);
-                }else {
-                    //新增时添加统计数据
-                    List<RoomModelFloorNumDTO> list = shipApi.queryRoomModelFloorToNum(reqVO.getShipId());
-                    int intSum = list.stream().mapToInt(RoomModelFloorNumDTO::getNum).sum();
-                    BigDecimal sum = BigDecimal.valueOf(intSum);
-                    voyageStockDO.setTotalNum(sum);
-                    voyageStockDO.setShareNum(BigDecimal.ZERO);
-                    voyageStockDO.setRealTotalNum(sum);
-                    voyageStockDO.setNotShelfNum(sum);
-                    voyageStockDO.setShelfedNum(BigDecimal.ZERO);
-                    voyageStockDO.setBookNum(BigDecimal.ZERO);
-                    voyageStockDO.setCanSellNum(BigDecimal.ZERO);
-                    voyageStockDO.setVirtualNum(BigDecimal.ZERO);
-                    voyageStockDO.setOversoldNum(BigDecimal.ZERO);
-                    voyageStockDO.setSurplusNum(sum);
-                    voyageStockDO.setVoyageId(voyageId);
-                    voyageStockMapper.insert(voyageStockDO);
-                    //添加库存详情
-                    List<VoyageStockDetailDO> stockDetailDOS = new ArrayList<>();
-                    list.stream().forEach(item -> {
-                        VoyageStockDetailDO stockDetailDO = new VoyageStockDetailDO();
-                        stockDetailDO.setVoyageId(voyageId);
-                        stockDetailDO.setRoomModelId(item.getRoomModelId());
-                        stockDetailDO.setRoomModelName(item.getRoomModelName());
-                        stockDetailDO.setFloor(item.getFloor());
-                        stockDetailDO.setTotalNum(BigDecimal.valueOf(item.getNum()));
-                        stockDetailDO.setRealTotalNum(BigDecimal.valueOf(item.getNum()));
-                        stockDetailDO.setShelfNum(BigDecimal.ZERO);
-                        stockDetailDO.setNotShelfNum(BigDecimal.valueOf(item.getNum()));
-                        stockDetailDO.setShelfedNum(BigDecimal.ZERO);
-                        stockDetailDO.setBookNum(BigDecimal.ZERO);
-                        stockDetailDO.setCanSellNum(BigDecimal.ZERO);
-                        stockDetailDO.setOversoldNum(BigDecimal.ZERO);
-                        stockDetailDO.setVirtualNum(BigDecimal.ZERO);
-                        stockDetailDO.setSurplusNum(BigDecimal.valueOf(item.getNum()));
-                        stockDetailDOS.add(stockDetailDO);
-                    });
-                    voyageStockDetailMapper.insertBatch(stockDetailDOS);
-                }
+            lock.lock(60, TimeUnit.SECONDS);
+            if(stockDO != null) {
+                voyageStockMapper.updateById(voyageStockDO);
+            }else {
+                //新增时添加统计数据
+                List<RoomModelFloorNumDTO> list = shipApi.queryRoomModelFloorToNum(reqVO.getShipId());
+                int intSum = list.stream().mapToInt(RoomModelFloorNumDTO::getNum).sum();
+                BigDecimal sum = BigDecimal.valueOf(intSum);
+                voyageStockDO.setTotalNum(sum);
+                voyageStockDO.setShareNum(BigDecimal.ZERO);
+                voyageStockDO.setRealTotalNum(sum);
+                voyageStockDO.setNotShelfNum(sum);
+                voyageStockDO.setShelfedNum(BigDecimal.ZERO);
+                voyageStockDO.setBookNum(BigDecimal.ZERO);
+                voyageStockDO.setCanSellNum(BigDecimal.ZERO);
+                voyageStockDO.setVirtualNum(BigDecimal.ZERO);
+                voyageStockDO.setOversoldNum(BigDecimal.ZERO);
+                voyageStockDO.setSurplusNum(sum);
+                voyageStockDO.setVoyageId(voyageId);
+                voyageStockMapper.insert(voyageStockDO);
+                //添加库存详情
+                List<VoyageStockDetailDO> stockDetailDOS = new ArrayList<>();
+                list.stream().forEach(item -> {
+                    VoyageStockDetailDO stockDetailDO = new VoyageStockDetailDO();
+                    stockDetailDO.setVoyageId(voyageId);
+                    stockDetailDO.setRoomModelId(item.getRoomModelId());
+                    stockDetailDO.setRoomModelName(item.getRoomModelName());
+                    stockDetailDO.setFloor(item.getFloor());
+                    stockDetailDO.setTotalNum(BigDecimal.valueOf(item.getNum()));
+                    stockDetailDO.setRealTotalNum(BigDecimal.valueOf(item.getNum()));
+                    stockDetailDO.setShelfNum(BigDecimal.ZERO);
+                    stockDetailDO.setNotShelfNum(BigDecimal.valueOf(item.getNum()));
+                    stockDetailDO.setShelfedNum(BigDecimal.ZERO);
+                    stockDetailDO.setBookNum(BigDecimal.ZERO);
+                    stockDetailDO.setCanSellNum(BigDecimal.ZERO);
+                    stockDetailDO.setOversoldNum(BigDecimal.ZERO);
+                    stockDetailDO.setVirtualNum(BigDecimal.ZERO);
+                    stockDetailDO.setSurplusNum(BigDecimal.valueOf(item.getNum()));
+                    stockDetailDOS.add(stockDetailDO);
+                });
+                voyageStockDetailMapper.insertBatch(stockDetailDOS);
             }
-        }catch (ServiceException e) {
-            log.error("创建航次失败:",e);
-        }catch (Exception e) {
-            log.error("创建航次失败:",e);
         }finally {
             if(lock.isHeldByCurrentThread() && lock.isLocked()){
                 lock.unlock();
@@ -291,9 +299,14 @@ public class VoyageServiceImpl implements VoyageService {
         String leaveTime = createReqVO.getLeaveTime();
         String boardingTime = createReqVO.getBoardingTime();
         Long shipId = createReqVO.getShipId();
-
+        Long routeId = createReqVO.getRouteId();
+        Long templateId = createReqVO.getTemplateId();
+        PriceTemplateRespVO priceTemplate = null;
+        if(templateId != null) { //有价格模板就生成航次价格
+            priceTemplate = priceTemplateService.getPriceTemplate(templateId);
+        }
         // 删除该日期内当前游轮当前航线的所有航次
-        voyageMapper.deleteByShipIdAndRouteId(startDate, endDate, shipId, createReqVO.getRouteId());
+        voyageMapper.deleteByShipIdAndRouteId(startDate, endDate, shipId, routeId);
 
         ShipRespDTO shipRespDTO = shipApi.queryShip(shipId);
         List<VoyageDO> voyageDOList = new ArrayList<>();
@@ -306,7 +319,7 @@ public class VoyageServiceImpl implements VoyageService {
             voyageDO.setName(shipRespDTO.getName()+startDateStr);
             voyageDO.setCode(VoyageUUCodeUtils.generateVoyageNo(shipRespDTO.getCode(), startDateStr, createReqVO.getBoardingAddress(), createReqVO.getLeaveAddress()));
             voyageDO.setShipId(shipId);
-            voyageDO.setRouteId(createReqVO.getRouteId());
+            voyageDO.setRouteId(routeId);
             voyageDO.setStartTime(LocalDateTimeUtil.parse(startDateStr+"T"+startTime));
             voyageDO.setLeaveTime(LocalDateTimeUtil.parse(leaveDate+"T"+leaveTime));
             voyageDO.setBoardingTime(LocalDateTimeUtil.parse(startDateStr+"T"+boardingTime));
@@ -323,6 +336,41 @@ public class VoyageServiceImpl implements VoyageService {
             voyageDO.setIntroduce(createReqVO.getIntroduce());
             voyageDO.setNotice(createReqVO.getNotice());
             voyageDOList.add(voyageDO);
+            if(priceTemplate != null) { //有价格模板就生成航次价格
+                PriceVoyageSaveReqVO priceVoyageSaveReqVO = new PriceVoyageSaveReqVO();
+                Long priceVoyageId = IdUtil.getSnowflakeNextId();
+                priceVoyageSaveReqVO.setId(priceVoyageId);
+                priceVoyageSaveReqVO.setShipId(shipId);
+                priceVoyageSaveReqVO.setRouteId(routeId);
+                priceVoyageSaveReqVO.setTemplateId(templateId);
+                priceVoyageSaveReqVO.setVoyageId(id);
+                priceVoyageSaveReqVO.setPriceMode(priceTemplate.getPriceMode());
+                priceVoyageSaveReqVO.setValidateTime(priceTemplate.getValidateTime());
+                priceVoyageSaveReqVO.setStatus(UseStatusEnum.ENABLE.getStatus());
+                priceVoyageSaveReqVO.setJctype(priceTemplate.getJctype());
+                List<PriceRoomModelRespVO> roomModelList = priceTemplate.getRoomModelList();
+                List<PriceRoomModelDO> priceRoomModelDOS = BeanUtils.toBean(roomModelList, PriceRoomModelDO.class);
+                priceRoomModelDOS.stream().forEach(priceRoomModelDO -> priceRoomModelDO.setObjectId(priceVoyageId));
+                priceVoyageSaveReqVO.setRoomModelList(priceRoomModelDOS);
+                List<PriceFloorRespVO> floorList = priceTemplate.getFloorList();
+                List<PriceFloorDO> priceFloorDOS = BeanUtils.toBean(floorList, PriceFloorDO.class);
+                priceFloorDOS.stream().forEach(priceFloorDO -> priceFloorDO.setObjectId(priceVoyageId));
+                priceVoyageSaveReqVO.setFloorList(priceFloorDOS);
+                PriceSingleSettingRespVO singleSetting = priceTemplate.getSingleSetting();
+                PriceSingleSettingDO singleSettingDO = BeanUtils.toBean(singleSetting, PriceSingleSettingDO.class);
+                singleSettingDO.setObjectId(priceVoyageId);
+                priceVoyageSaveReqVO.setSingleSetting(singleSettingDO);
+                List<PriceAreaRespVO> areaList = priceTemplate.getAreaList();
+                List<PriceAreaDO> priceAreaDOS = BeanUtils.toBean(areaList, PriceAreaDO.class);
+                priceAreaDOS.stream().forEach(priceAreaDO -> priceAreaDO.setObjectId(priceVoyageId));
+                priceVoyageSaveReqVO.setAreaList(priceAreaDOS);
+                List<PriceSpuRespVO> spuList = priceTemplate.getSpuList();
+                List<PriceSpuDO> priceSpuDOS = BeanUtils.toBean(spuList, PriceSpuDO.class);
+                priceSpuDOS.stream().forEach(priceSpuDO -> priceSpuDO.setObjectId(priceVoyageId));
+                priceVoyageSaveReqVO.setSpuList(priceSpuDOS);
+                priceVoyageService.createPriceVoyage(priceVoyageSaveReqVO);
+            }
+
             startDate = leaveDate.plusDays(intervalDays);
         }
         voyageMapper.insertBatch(voyageDOList);

+ 3 - 9
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyagestockdetail/VoyageStockDetailServiceImpl.java

@@ -1,12 +1,10 @@
 package com.yc.ship.module.product.service.voyagestockdetail;
 
-import com.yc.ship.framework.common.exception.ServiceException;
 import com.yc.ship.module.product.controller.admin.voyagestockdetail.vo.VoyageStockDetailSaveReqVO;
 import com.yc.ship.module.product.dal.dataobject.voyagestock.VoyageStockDO;
 import com.yc.ship.module.product.dal.dataobject.voyagestockdetail.VoyageStockDetailDO;
 import com.yc.ship.module.product.dal.mysql.voyagestock.VoyageStockMapper;
 import com.yc.ship.module.product.dal.mysql.voyagestockdistribute.VoyageStockDistributeNewMapper;
-import com.yc.ship.module.product.enums.DistributorOrStoreEnum;
 import com.yc.ship.module.product.enums.ProductStockStaticsName;
 import com.yc.ship.module.product.framework.lock.ProductRedisKeyConstants;
 import lombok.extern.slf4j.Slf4j;
@@ -56,8 +54,10 @@ public class VoyageStockDetailServiceImpl implements VoyageStockDetailService {
         }
         Long voyageId = createReqVO.get(0).getVoyageId();
         //现在给整个航次的库存加锁
-        RLock lock = redissonClient.getLock(String.format(ProductRedisKeyConstants.STOCK_REDIS_KEY_PREFIX, voyageId));
+        String lockKey = String.format(ProductRedisKeyConstants.STOCK_REDIS_KEY_PREFIX, voyageId);
+        RLock lock = redissonClient.getLock(lockKey);
         try {
+            lock.lock(60, TimeUnit.SECONDS);
             voyageStockDetailMapper.deleteByVoyageId(voyageId);
             List<VoyageStockDetailDO> list = BeanUtils.toBean(createReqVO, VoyageStockDetailDO.class);
             List<VoyageStockDetailDO> insertList = new ArrayList<>();
@@ -72,17 +72,11 @@ public class VoyageStockDetailServiceImpl implements VoyageStockDetailService {
                 }
             });
             return voyageStockDetailMapper.insertBatch(insertList);
-        }catch (ServiceException e) {
-            log.error("库存设置失败:",e);
-        }catch (Exception e) {
-            log.error("库存设置失败:",e);
         }finally {
             if(lock.isHeldByCurrentThread() && lock.isLocked()){
                 lock.unlock();
             }
         }
-        return false;
-
     }
 
     /**

+ 47 - 52
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyagestockdistribute/VoyageStockDistributeNewServiceImpl.java

@@ -1,6 +1,5 @@
 package com.yc.ship.module.product.service.voyagestockdistribute;
 
-import com.yc.ship.framework.common.exception.ServiceException;
 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;
@@ -78,62 +77,58 @@ public class VoyageStockDistributeNewServiceImpl implements VoyageStockDistribut
         BigDecimal zero = BigDecimal.ZERO;
         Long voyageId = createReqVO.get(0).getVoyageId();
         //现在给整个航次的库存加锁
-        RLock lock = redissonClient.getLock(String.format(ProductRedisKeyConstants.STOCK_REDIS_KEY_PREFIX, voyageId));
+        String lockKey = String.format(ProductRedisKeyConstants.STOCK_REDIS_KEY_PREFIX, voyageId);
+        RLock lock = redissonClient.getLock(lockKey);
         try {
-            if(lock.tryLock(60,90, TimeUnit.SECONDS)) {
-                Integer type = createReqVO.get(0).getType();
-                //删除分配的房间
-                voyageStockDistributeRoomService.deleteByVoyageId(voyageId, type);
-                // 分配的房间列表
-                List<VoyageStockDistributeRoomDO> roomList = new ArrayList<>();
-                createReqVO.stream().forEach(item -> {
-                    if(!CollectionUtils.isAnyEmpty(item.getRoomList())) {
-                        roomList.addAll(BeanUtils.toBean(item.getRoomList(), VoyageStockDistributeRoomDO.class));
-                    }
+            lock.lock(60, TimeUnit.SECONDS);
+            Integer type = createReqVO.get(0).getType();
+            //删除分配的房间
+            voyageStockDistributeRoomService.deleteByVoyageId(voyageId, type);
+            // 分配的房间列表
+            List<VoyageStockDistributeRoomDO> roomList = new ArrayList<>();
+            createReqVO.stream().forEach(item -> {
+                if(!CollectionUtils.isAnyEmpty(item.getRoomList())) {
+                    roomList.addAll(BeanUtils.toBean(item.getRoomList(), VoyageStockDistributeRoomDO.class));
+                }
+            });
+            voyageStockDistributeRoomService.createVoyageStockDistributeRoomBatch(roomList);
+            //修改或插入库存表
+            List<VoyageStockDistributeNewDO> list = voyageStockDistributeNewMapper.selectListByVoyageId(voyageId, type);
+            if(CollectionUtils.isAnyEmpty(list)) { // 为空则新增
+                list = BeanUtils.toBean(createReqVO, VoyageStockDistributeNewDO.class);
+                list.stream().forEach(item -> {
+                    item.setBookNum(zero);
                 });
-                voyageStockDistributeRoomService.createVoyageStockDistributeRoomBatch(roomList);
-                //修改或插入库存表
-                List<VoyageStockDistributeNewDO> list = voyageStockDistributeNewMapper.selectListByVoyageId(voyageId, type);
-                if(CollectionUtils.isAnyEmpty(list)) { // 为空则新增
-                    list = BeanUtils.toBean(createReqVO, VoyageStockDistributeNewDO.class);
-                    list.stream().forEach(item -> {
-                        item.setBookNum(zero);
-                    });
-                    if(!CollectionUtils.isAnyEmpty(list)) {
-                        voyageStockDistributeNewMapper.insertBatch(list);
-                    }
-                }else {
-                    Map<String, BigDecimal> map = CollectionUtils.convertMap(createReqVO, item -> item.getObjectId() + "_" + item.getRoomModelId() + "_" + item.getFloor(), item -> item.getNum());
-                    Map<String, VoyageStockDistributeNewSaveReqVO> mapVO = CollectionUtils.convertMap(createReqVO, item -> item.getObjectId() + "_" + item.getRoomModelId() + "_" + item.getFloor());
-                    List<String> existList = CollectionUtils.convertList(list, item -> item.getObjectId() + "_" + item.getRoomModelId() + "_" + item.getFloor());
-                    Map<String, VoyageStockDistributeNewDO> existMap = CollectionUtils.convertMap(list, item -> item.getObjectId() + "_" + item.getRoomModelId() + "_" + item.getFloor());
-                    List<VoyageStockDistributeNewDO> insertList = new ArrayList<>();// 插入数据
-                    List<VoyageStockDistributeNewDO> updateList = new ArrayList<>(); //  修改数据
-                    map.keySet().stream().forEach(key -> {
-                        if(existList.contains(key)) { //存在,做修改
-                            VoyageStockDistributeNewDO voyageStockDistributeNewDO = existMap.get(key);
-                            voyageStockDistributeNewDO.setNum(map.get(key));
-                            voyageStockDistributeNewDO.setRoomModelNum(mapVO.get(key).getRoomModelNum());
-                            updateList.add(voyageStockDistributeNewDO);
-                        }else { //不存在,做插入
-                            VoyageStockDistributeNewDO voyageStockDistributeNewDO = BeanUtils.toBean(mapVO.get(key), VoyageStockDistributeNewDO.class);
-                            insertList.add(voyageStockDistributeNewDO);
-                        }
-                    });
-                    if(!CollectionUtils.isAnyEmpty(updateList)) {
-                        voyageStockDistributeNewMapper.updateBatch(updateList);
-                    }
-                    if(!CollectionUtils.isAnyEmpty(insertList)) {
-                        voyageStockDistributeNewMapper.insertBatch(insertList);
+                if(!CollectionUtils.isAnyEmpty(list)) {
+                    voyageStockDistributeNewMapper.insertBatch(list);
+                }
+            }else {
+                Map<String, BigDecimal> map = CollectionUtils.convertMap(createReqVO, item -> item.getObjectId() + "_" + item.getRoomModelId() + "_" + item.getFloor(), item -> item.getNum());
+                Map<String, VoyageStockDistributeNewSaveReqVO> mapVO = CollectionUtils.convertMap(createReqVO, item -> item.getObjectId() + "_" + item.getRoomModelId() + "_" + item.getFloor());
+                List<String> existList = CollectionUtils.convertList(list, item -> item.getObjectId() + "_" + item.getRoomModelId() + "_" + item.getFloor());
+                Map<String, VoyageStockDistributeNewDO> existMap = CollectionUtils.convertMap(list, item -> item.getObjectId() + "_" + item.getRoomModelId() + "_" + item.getFloor());
+                List<VoyageStockDistributeNewDO> insertList = new ArrayList<>();// 插入数据
+                List<VoyageStockDistributeNewDO> updateList = new ArrayList<>(); //  修改数据
+                map.keySet().stream().forEach(key -> {
+                    if(existList.contains(key)) { //存在,做修改
+                        VoyageStockDistributeNewDO voyageStockDistributeNewDO = existMap.get(key);
+                        voyageStockDistributeNewDO.setNum(map.get(key));
+                        voyageStockDistributeNewDO.setRoomModelNum(mapVO.get(key).getRoomModelNum());
+                        updateList.add(voyageStockDistributeNewDO);
+                    }else { //不存在,做插入
+                        VoyageStockDistributeNewDO voyageStockDistributeNewDO = BeanUtils.toBean(mapVO.get(key), VoyageStockDistributeNewDO.class);
+                        insertList.add(voyageStockDistributeNewDO);
                     }
+                });
+                if(!CollectionUtils.isAnyEmpty(updateList)) {
+                    voyageStockDistributeNewMapper.updateBatch(updateList);
+                }
+                if(!CollectionUtils.isAnyEmpty(insertList)) {
+                    voyageStockDistributeNewMapper.insertBatch(insertList);
                 }
-                BigDecimal distributeNum = getDistributeNum(voyageId);
-                voyageStockDetailService.handleShareNum(voyageId, distributeNum);
             }
-        }catch (ServiceException e) {
-            log.error("库存分配失败:",e);
-        }catch (Exception e) {
-            log.error("库存分配失败:",e);
+            BigDecimal distributeNum = getDistributeNum(voyageId);
+            voyageStockDetailService.handleShareNum(voyageId, distributeNum);
         }finally {
             if(lock.isHeldByCurrentThread() && lock.isLocked()){
                 lock.unlock();

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

@@ -119,6 +119,25 @@ public class OtcTradeOrderController {
         return otcTradeOrderService.createOtcOrder(agencyAuthUtils.getAgencyLoginUser(), createVO);
     }
 
+    @RequestDecryption
+    @GetMapping("/travl/getOrderById")
+    @Operation(summary = "win-旅行社游船订单获取")
+    @OperateLog(type = TRADE)
+    @TradeRateLimit(name = "getOrderById", limitNum = 2, limitTime = 5)
+    public CommonResult<?> getOrderById(@RequestParam Long orderId) {
+        return otcTradeOrderService.getOrderById(orderId);
+    }
+
+
+    @RequestDecryption
+    @PostMapping("/travl/motifyOtcOrder")
+    @Operation(summary = "win-旅行社游船订单修改")
+    @OperateLog(type = TRADE)
+    @TradeRateLimit(name = "motifyOtcOrder", limitNum = 2, limitTime = 5)
+    public CommonResult<?> motifyOtcOrder(@Validated(value = WindowCreateOrderGroup.class)  @RequestBody TradeOrderOtcCreateVO createVO) {
+        return otcTradeOrderService.motifyOtcOrder(agencyAuthUtils.getAgencyLoginUser(), createVO);
+    }
+
     @RequestDecryption
     @PostMapping("/travl/createOtcFisrtOrder")
     @Operation(summary = "win-旅行社游船订单创建-预定单")

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

@@ -10,6 +10,9 @@ import java.util.List;
 @Data
 public class TradeOrderOtcCreateVO {
 
+    @Schema(description = "订单ID")
+    private Long orderId;
+
     @Schema(description = "客户名称")
     private String customerName;
 

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

@@ -0,0 +1,33 @@
+package com.yc.ship.module.trade.controller.admin.order.vo.order;
+
+import com.yc.ship.module.trade.dal.dataobject.order.*;
+import com.yc.ship.module.trade.dal.dataobject.orderjz.OrderJzDO;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+@Schema(description = "旅行社订单创建参数")
+@Data
+public class TradeOrderVO {
+
+    @Schema(description = "订单信息")
+    private TradeOrderDO orderDO;
+
+    @Schema(description = "接站信息")
+    private OrderJzDO orderJzDO;
+
+    @Schema(description = "国籍数据")
+    private List<TradeOrderCountryDO> countryData;
+
+    @Schema(description = "房型数据")
+    private List<TradeOrderRoomModelDO> roomModelList;
+
+    @Schema(description = "订单汇总信息")
+    private TradeOrderTotalDO summary;
+
+    @Schema(description = "附加产品信息")
+    private List<TradeDetailRespVO> tradeDetailDOList;
+
+}

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

@@ -12,8 +12,13 @@ public class TradeSpuReqVO {
     @Schema(description = "附加产品ID")
     private Long productId;
 
+    @Schema(description = "是否必填 0附加产品 1赠票")
+    private Integer required;
+
     @Schema(description = "单价")
     private BigDecimal price;
 
     private List<TradeVistorReqVO> vistorList;
+    @Schema(description = "游客ID")
+    private List<String> tourist;
 }

+ 0 - 6
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/app/order/TradeStandardSupplierController.java

@@ -42,10 +42,4 @@ public class TradeStandardSupplierController {
         return CommonResult.success(null);
     }
 
-    @PostMapping("/xxxx/refundAuditNotify")
-    @Operation(summary = "示例:用于接收xxx供应商的退款审核通知,我们对接对方系统")
-    public CommonResult<?> xxxRefundAuditNotify(@RequestBody Map<String,Object> requestData){
-
-        return CommonResult.success(null);
-    }
 }

+ 2 - 2
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/app/ota/OtaStandardController.java

@@ -30,10 +30,10 @@ import static com.yc.ship.framework.operatelog.core.enums.OperateTypeEnum.TRADE;
  */
 @Tag(name = "ota标准服务")
 @RestController
-@RequestMapping("/trade/ota")
+@RequestMapping("/ship/ota")
 @Validated
 @Slf4j
-public class OtaStandardController {
+public class OtaRelationController {
 
     @Resource
     private XieChengService xieChengService;

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

@@ -54,24 +54,6 @@ public class AppOtcTradeOrderController {
     @Resource
     private AdminTradeOrderService adminTradeOrderService;
 
-    @RequestDecryption
-    @PostMapping("/autoMachine/createOrder")
-    @Operation(summary = "自助机创建订单")
-    @OperateLog(type = TRADE)
-    public CommonResult<AppOtcTradeOrderCreateRespVO> autoMachineCreateOrder(@Parameter(hidden = true) @StoreMachine StoreMachineDTO storeMachineDTO, @Valid @RequestBody OtcTradeOrderCreateReqVO otcTradeOrderCreateReqVO) {
-
-        return appOtcTradeOrderService.autoMachineCreateOrder(storeMachineDTO, otcTradeOrderCreateReqVO);
-    }
-
-    @RequestDecryption
-    @PostMapping("/autoMachine/payOrder")
-    @Operation(summary = "自助机支付订单")
-    @OperateLog(type = TRADE)
-    public CommonResult<PayOrderRespVO> autoMachinePayOrder(@Parameter(hidden = true) @StoreMachine StoreMachineDTO storeMachineDTO, @Valid @RequestBody PayOrderReqVO payOrderReqVO) {
-
-        return appOtcTradeOrderService.autoMachinePayOrder(storeMachineDTO, payOrderReqVO);
-    }
-
     @RequestDecryption
     @PostMapping("/miniApp/createOrder")
     @Operation(summary = "小程序创建订单")

+ 7 - 4
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/handler/TradeStockOrderHandler.java

@@ -10,6 +10,7 @@ import com.yc.ship.module.trade.enums.TradeOrderStatusEnum;
 import com.yc.ship.module.trade.service.order.bo.TradeOrderBO;
 import com.yc.ship.module.trade.service.order.bo.TradeOrderDetailBO;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.core.annotation.Order;
 import org.springframework.stereotype.Component;
 
@@ -59,10 +60,12 @@ public class TradeStockOrderHandler implements TradeOrderHandler{
         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 -> {
-            OrderRoomUseDTO orderRoomUseDTO = new OrderRoomUseDTO();
-            orderRoomUseDTO.setRoomId(Long.valueOf(roomId));
-            orderRoomUseDTO.setNum(BigDecimal.valueOf(collect.get(roomId)).divide(new BigDecimal(2)));
-            orderRoomUseDTOList.add(orderRoomUseDTO);
+            if(StringUtils.isNotBlank(roomId)) {
+                OrderRoomUseDTO orderRoomUseDTO = new OrderRoomUseDTO();
+                orderRoomUseDTO.setRoomId(Long.valueOf(roomId));
+                orderRoomUseDTO.setNum(BigDecimal.valueOf(collect.get(roomId)).divide(new BigDecimal(2)));
+                orderRoomUseDTOList.add(orderRoomUseDTO);
+            }
         });
         reqDTO.setOrderRoomList(orderRoomUseDTOList);
         Integer orderStatus = reqDTO.getOrderStatus();

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

@@ -141,6 +141,7 @@ public interface OtcTradeOrderService {
      * @return
      */
     CommonResult<?> createOtcOrder(LoginUser agencyLoginUser, TradeOrderOtcCreateVO createVO);
+    CommonResult<?> motifyOtcOrder(LoginUser agencyLoginUser, TradeOrderOtcCreateVO createVO);
 
     /**
      * 获取订单详情 新
@@ -150,4 +151,6 @@ public interface OtcTradeOrderService {
     TradeOrderRespNewVO getOrderInfoNew(Long id);
 
     CommonResult<?> regionStatic(TradeStaticReqVO reqVO);
+
+    CommonResult<?> getOrderById(Long orderId);
 }

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

@@ -16,6 +16,7 @@ import com.yc.ship.framework.common.pojo.PageResult;
 import com.yc.ship.framework.common.util.object.BeanUtils;
 import com.yc.ship.framework.common.util.object.ObjectUtils;
 import com.yc.ship.framework.ip.core.utils.AreaUtils;
+import com.yc.ship.framework.mybatis.core.query.LambdaQueryWrapperX;
 import com.yc.ship.framework.security.core.LoginUser;
 import com.yc.ship.framework.tenant.core.context.TenantContextHolder;
 import com.yc.ship.framework.tenant.core.util.TenantUtils;
@@ -278,6 +279,17 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
         return  tradeOrderService.createShipOrder(otcTradeOrderCreateReqVO);
     }
 
+    private CommonResult<TradeOrderRespDTO> doShipModifyOrder(LoginUser loginUser, ShipTradeOrderCreateReqVO otcTradeOrderCreateReqVO,SellMethodEnum sellMethodEnum) {
+        ShipTradeOrderCreateReqVO.OrderProperty orderProperty = otcTradeOrderCreateReqVO.getOrderProperty();
+        if(orderProperty == null){
+            orderProperty = new ShipTradeOrderCreateReqVO.OrderProperty();
+        }
+        orderProperty.setSellMethod(sellMethodEnum.getType());
+        setShipOrderPropertyFromLoginUser(loginUser,orderProperty,sellMethodEnum);
+        otcTradeOrderCreateReqVO.setOrderProperty(orderProperty);
+        return  tradeOrderService.createShipOrder(otcTradeOrderCreateReqVO);
+    }
+
 
     @Override
     public CommonResult<PayOrderRespVO> windowPayOrder(LoginUser loginUser, PayOrderReqVO payOrderReqVO) {
@@ -2251,16 +2263,24 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
         for (TradeSpuReqVO tradeSpuReqVO : createVO.getSpuList()) {
             ShipTradeOrderCreateReqVO.OrderDetail orderDetail1 = new ShipTradeOrderCreateReqVO.OrderDetail();
             //0 游船产品 1 附加产品 2:赠票
-            if(tradeSpuReqVO.getProductId()!=null && !tradeSpuReqVO.getVistorList().isEmpty()) {
+            if(tradeSpuReqVO.getProductId()!=null && !tradeSpuReqVO.getTourist().isEmpty()) {
                 orderDetail1.setProductType(1);
-            }else if(tradeSpuReqVO.getProductId() != null) {
+            }else if(tradeSpuReqVO.getProductId() != null && tradeSpuReqVO.getRequired()!=null && tradeSpuReqVO.getRequired()==1) {
                 orderDetail1.setProductType(2);
             }else{
+                if(tradeSpuReqVO.getProductId()!=null){
+                    //有产品ID没有游客信息跳过
+                    continue;
+                }
                 orderDetail1.setProductType(0);
             }
             if(orderDetail1.getProductType()==0||orderDetail1.getProductType()==1) {
                 List<ShipTradeOrderCreateReqVO.Visitor> visitorList1 = new ArrayList<>();
-                for (TradeVistorReqVO tradeVistorReqVO : tradeSpuReqVO.getVistorList()) {
+                for (String touristId : tradeSpuReqVO.getTourist()) {
+                    TradeVistorReqVO tradeVistorReqVO = createVO.getTourist().stream().filter(v -> v.getOrderId().equals(touristId)).findFirst().get();
+                    if(tradeVistorReqVO==null){
+                        continue;
+                    }
                     ShipTradeOrderCreateReqVO.Visitor visitor = new ShipTradeOrderCreateReqVO.Visitor();
                     visitor.setName(tradeVistorReqVO.getName());
                     visitor.setMobile(tradeVistorReqVO.getPhone());
@@ -2373,6 +2393,206 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
 
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public CommonResult<?> motifyOtcOrder(LoginUser loginUser, TradeOrderOtcCreateVO createVO) {
+        Long distributorId = loginUser.getDistributorId();
+        Long storeId = loginUser.getStoreId();
+        //获取当前分销商信息
+        if(distributorId==null) {
+            return CommonResult.error(ORDER_OTC_FAIL);
+        }
+        if(storeId==null) {
+            return CommonResult.error(ORDER_STORE_FAIL);
+        }
+        //获取当前分销商信息
+        DistributorDO distributorDO = distributorMapper.selectById(distributorId);
+        if(distributorDO==null) {
+            return CommonResult.error(ORDER_OTC_NONE);
+        }
+        //获取当前门店
+        StoreInfoRespDTO storeInfo = storeApi.getStoreInfo(storeId);
+        if(storeInfo==null) {
+            return CommonResult.error(ORDER_STORE_NONE);
+        }
+        VoyageRespDTO voyage = productApi.getVoyage(createVO.getVoyageId());
+        String date = DateUtils.format(new Date(),"yyyyMMddmmss");
+        String orderNo = distributorDO.getCode()+"-"+voyage.getCode()+"-"+date;
+        List<TradeOrderCountryReqVO> countryData = createVO.getCountryData();
+        ShipTradeOrderCreateReqVO shipTradeOrderCreateReqVO = BeanUtils.toBean(createVO, ShipTradeOrderCreateReqVO.class);
+        shipTradeOrderCreateReqVO.setDistributorId(loginUser.getDistributorId());
+        shipTradeOrderCreateReqVO.setGroupNo(createVO.getGroupNo());
+        shipTradeOrderCreateReqVO.setAmount(createVO.getSummary().getOrderMoney());
+        shipTradeOrderCreateReqVO.setPayAmount(createVO.getSummary().getOrderMoney());
+        shipTradeOrderCreateReqVO.setDicountId(createVO.getSummary().getDicountId());
+        if(createVO.getSummary().getRealOrderMoney()!=null) {
+            shipTradeOrderCreateReqVO.setPayAmount(createVO.getSummary().getRealOrderMoney());
+        }
+        ShipTradeOrderCreateReqVO.OrderUser orderUser = new ShipTradeOrderCreateReqVO.OrderUser();
+        orderUser.setContactName(createVO.getLinkMan());
+        orderUser.setMobile(createVO.getLinkMobile());
+        orderUser.setEmail(createVO.getLinkEmail());
+        shipTradeOrderCreateReqVO.setOrderUser(orderUser);
+        shipTradeOrderCreateReqVO.setRemark(createVO.getRemark());
+        shipTradeOrderCreateReqVO.setIsYd(createVO.getIsYd());
+
+        shipTradeOrderCreateReqVO.setTravelDate(createVO.getBoardingTime());
+        shipTradeOrderCreateReqVO.setOrderNo(orderNo);
+
+        ShipTradeOrderCreateReqVO.OrderProperty orderProperty = new ShipTradeOrderCreateReqVO.OrderProperty();
+        orderProperty.setSellMethod(SellMethodEnum.OTC.getType());
+        orderProperty.setSourceId(distributorDO.getId()+"");
+        orderProperty.setSourceName(distributorDO.getName()+"");
+        orderProperty.setStoreId(storeInfo.getId());
+        orderProperty.setStoreName(storeInfo.getName()+"");
+        orderProperty.setSellMethod(SellMethodEnum.OTC.getType());
+
+        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()) {
+            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());
+            visitor.setRoomId(tradeVistorReqVO.getRoomId());
+            visitorList.add(visitor);
+        }
+        orderDetail.setVisitorList(visitorList);
+        orderDetail.setCount(visitorList.size());
+
+        BigDecimal spuMoney = new BigDecimal(0);
+        for (TradeSpuReqVO tradeSpuReqVO : createVO.getSpuList()) {
+            ShipTradeOrderCreateReqVO.OrderDetail orderDetail1 = new ShipTradeOrderCreateReqVO.OrderDetail();
+            //0 游船产品 1 附加产品 2:赠票
+            if(tradeSpuReqVO.getProductId()!=null && !tradeSpuReqVO.getVistorList().isEmpty()) {
+                orderDetail1.setProductType(1);
+            }else if(tradeSpuReqVO.getProductId() != null) {
+                orderDetail1.setProductType(2);
+            }else{
+                orderDetail1.setProductType(0);
+            }
+            if(orderDetail1.getProductType()==0||orderDetail1.getProductType()==1) {
+                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.setProductId(tradeSpuReqVO.getProductId() + "");
+                orderDetail1.setPrice(tradeSpuReqVO.getPrice());
+                orderDetail1.setOriginPrice(tradeSpuReqVO.getPrice());
+                orderDetail1.setCount(visitorList1.size());
+                detailList.add(orderDetail1);
+            }else{
+                List<ShipTradeOrderCreateReqVO.Visitor> visitorList1 = new ArrayList<>();
+                for (TradeVistorReqVO tradeVistorReqVO : createVO.getTourist()) {
+                    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);
+                }
+                orderDetail1.setVisitorList(visitorList1);
+                orderDetail1.setProductId(tradeSpuReqVO.getProductId() + "");
+                orderDetail1.setPrice(BigDecimal.ZERO);
+                orderDetail1.setOriginPrice(BigDecimal.ZERO);
+                orderDetail1.setCount(visitorList1.size());
+                detailList.add(orderDetail1);
+            }
+        }
+
+
+        if(createVO.getSummary().getOrderMoney()!=null && createVO.getSummary().getOrderMoney().compareTo(new BigDecimal(0))>0) {
+            BigDecimal price = createVO.getSummary().getOrderMoney().subtract(spuMoney).divide(new BigDecimal(visitorList.size()), 2, RoundingMode.HALF_UP);
+            orderDetail.setPrice(price);
+            orderDetail.setOriginPrice(price);
+        }else{
+            BigDecimal price = new BigDecimal(0);
+            orderDetail.setPrice(price);
+            orderDetail.setOriginPrice(price);
+        }
+
+        orderDetail.setProductType(0);
+        detailList.add(orderDetail);
+
+
+        orderItem.setDetailList(detailList);
+
+        shipTradeOrderCreateReqVO.setItemlList(Arrays.asList(orderItem));
+
+//        BigDecimal totalAmount = spuMoney.add(createVO.getSummary().getOrderMoney());
+        shipTradeOrderCreateReqVO.setSpuAmount(spuMoney);
+//        shipTradeOrderCreateReqVO.setPayAmount(totalAmount);
+
+        CommonResult<TradeOrderRespDTO> result = doShipModifyOrder(loginUser,shipTradeOrderCreateReqVO,SellMethodEnum.WINDOW);
+        if (result.isError()) {
+            return CommonResult.error(result);
+        }
+        TradeOrderTotalVO summary = createVO.getSummary();
+        TradeOrderTotalDO tradeOrderTotalDO = BeanUtils.toBean(summary, TradeOrderTotalDO.class);
+        Long orderId  = result.getCheckedData().getOrderId();
+        tradeOrderTotalDO.setOrderId(orderId);
+        tradeOrderTotalMapper.insertOrUpdate(tradeOrderTotalDO);
+
+        //创建订单国籍数据
+        List<TradeOrderRoomModelDO> list = new ArrayList<>(); //创建订单房型数据
+        List<TradeOrderCountryDO> tradeOrderCountryDOList = new ArrayList<>(); //创建订单国籍数据
+        List<TradeOrderFloorDO> floorPlus = new ArrayList<>();
+        countryData.stream().forEach(item -> {
+            TradeOrderCountryDO countryDO = BeanUtils.toBean(item, TradeOrderCountryDO.class);
+            Long countryId = IdWorker.getId();
+            countryDO.setOrderId(orderId);
+            countryDO.setId(countryId);
+            tradeOrderCountryDOList.add(countryDO);
+            List<TradeOrderRoomModelReqVO> roomModels = item.getRoomModels();
+            //创建订单房型数据
+            roomModels.stream().forEach(roomModel -> {
+                TradeOrderRoomModelDO roomModelDO = BeanUtils.toBean(roomModel, TradeOrderRoomModelDO.class);
+                Long roomModelId = IdWorker.getId();
+                roomModelDO.setOrderId(orderId);
+                roomModelDO.setId(roomModelId);
+                roomModelDO.setCountryId(countryId);
+                list.add(roomModelDO);
+                // 房型升楼层数据
+                List<TradeOrderFloorReqVO> floorReqVOList = roomModel.getFloorPlus();
+                if(floorReqVOList == null) {
+                    return;
+                }
+                floorReqVOList.stream().forEach(floor -> {
+                    TradeOrderFloorDO floorDO = BeanUtils.toBean(floor, TradeOrderFloorDO.class);
+                    floorDO.setOrderId(orderId);
+                    floorDO.setRoomModelId(roomModelId);
+                    floorPlus.add(floorDO);
+                });
+
+            });
+        });
+        tradeOrderCountryMapper.insertOrUpdateBatch(tradeOrderCountryDOList);
+        tradeOrderRoomModelMapper.insertOrUpdateBatch(list);
+        tradeOrderFloorMapper.insertOrUpdateBatch(floorPlus);
+
+        OtcTradeOrderCreateRespVO respVO = TradeOrderConvert.INSTANCE.convert(result.getData());
+        return CommonResult.success(respVO);
+
+    }
+
     @Override
     public TradeOrderRespNewVO getOrderInfoNew(Long id) {
         TradeOrderDO tradeOrderDO = tradeOrderMapper.selectById(id);
@@ -2418,6 +2638,29 @@ public class OtcTradeOrderServiceImpl implements OtcTradeOrderService {
         return CommonResult.success(tradeOrderMapper.regionStatic(regionStatic));
     }
 
+    @Override
+    public CommonResult<TradeOrderVO> getOrderById(Long orderId) {
+        TradeOrderVO tradeOrderVO = new TradeOrderVO();
+        TradeOrderDO tradeOrderDO = tradeOrderMapper.selectById(orderId);
+        tradeOrderVO.setOrderDO(tradeOrderDO);
+        //设置国籍数据
+        List<TradeOrderCountryDO> countryDOS = tradeOrderCountryMapper.selectListByOrderId(orderId);
+        tradeOrderVO.setCountryData(countryDOS);
+        //获取订单门票信息
+        List<TradeDetailRespVO> detailList = tradeDetailMapper.getOrderIdDetail(tradeOrderDO.getId());
+        tradeOrderVO.setTradeDetailDOList(detailList);
+        //设置订单汇总数据
+        TradeOrderTotalDO tradeOrderTotalDO = tradeOrderTotalMapper.selectOne(TradeOrderTotalDO::getOrderId, orderId);
+        tradeOrderVO.setSummary(tradeOrderTotalDO);
+
+        OrderJzDO orderJzDO = orderJzMapper.selectOne(OrderJzDO::getOrderId, orderId);
+        tradeOrderVO.setOrderJzDO(orderJzDO);
+
+        List<TradeOrderRoomModelDO> roomModelDOList = tradeOrderRoomModelMapper.selectList(TradeOrderRoomModelDO::getOrderId, orderId);
+        tradeOrderVO.setRoomModelList(roomModelDOList);
+        return CommonResult.success(tradeOrderVO);
+    }
+
     private void markChangeOrder(Long orderId){
         String key =  String.format(KEY_MARK_CHANGE_ORDER,orderId);
         stringRedisTemplate.opsForValue().set(key,orderId.toString(),60, TimeUnit.MINUTES);