Explorar o código

Merge remote-tracking branch 'origin/main'

lishiqiang hai 3 días
pai
achega
7cf0346e97
Modificáronse 47 ficheiros con 2045 adicións e 231 borrados
  1. 1 56
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/app/voyage/AppVoyageController.java
  2. 3 4
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/pricesinglesetting/PriceSingleSettingMapper.java
  3. 0 6
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/pricesinglesetting/PriceSingleSettingService.java
  4. 0 6
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/pricesinglesetting/PriceSingleSettingServiceImpl.java
  5. 9 4
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/pricevoyage/PriceVoyageService.java
  6. 40 4
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/pricevoyage/PriceVoyageServiceImpl.java
  7. 27 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/route/vo/ResourceRouteRespVO.java
  8. 26 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/route/vo/ResourceRouteSaveReqVO.java
  9. 95 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/routecost/ResourceRouteCostController.java
  10. 37 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/routecost/vo/ResourceRouteCostPageReqVO.java
  11. 46 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/routecost/vo/ResourceRouteCostRespVO.java
  12. 31 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/routecost/vo/ResourceRouteCostSaveReqVO.java
  13. 95 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/routelight/ResourceRouteLightController.java
  14. 34 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/routelight/vo/ResourceRouteLightPageReqVO.java
  15. 42 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/routelight/vo/ResourceRouteLightRespVO.java
  16. 28 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/routelight/vo/ResourceRouteLightSaveReqVO.java
  17. 95 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/routetrip/ResourceRouteTripController.java
  18. 34 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/routetrip/vo/ResourceRouteTripPageReqVO.java
  19. 42 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/routetrip/vo/ResourceRouteTripRespVO.java
  20. 28 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/routetrip/vo/ResourceRouteTripSaveReqVO.java
  21. 95 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/routetripdetail/ResourceRouteTripDetailController.java
  22. 45 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/routetripdetail/vo/ResourceRouteTripDetailPageReqVO.java
  23. 54 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/routetripdetail/vo/ResourceRouteTripDetailRespVO.java
  24. 37 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/routetripdetail/vo/ResourceRouteTripDetailSaveReqVO.java
  25. 2 32
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/app/route/AppResourceRouteController.java
  26. 0 72
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/app/route/vo/AppResourceRouteDetailRespVO.java
  27. 2 17
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/app/route/vo/AppResourceRoutePageReqVO.java
  28. 110 24
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/app/route/vo/AppResourceRouteRespVO.java
  29. 27 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/dal/dataobject/route/ResourceRouteDO.java
  30. 54 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/dal/dataobject/routecost/ResourceRouteCostDO.java
  31. 50 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/dal/dataobject/routelight/ResourceRouteLightDO.java
  32. 57 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/dal/dataobject/routetrip/ResourceRouteTripDO.java
  33. 67 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/dal/dataobject/routetripdetail/ResourceRouteTripDetailDO.java
  34. 8 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/dal/mysql/route/ResourceRouteMapper.java
  35. 38 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/dal/mysql/routecost/ResourceRouteCostMapper.java
  36. 37 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/dal/mysql/routelight/ResourceRouteLightMapper.java
  37. 37 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/dal/mysql/routetrip/ResourceRouteTripMapper.java
  38. 43 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/dal/mysql/routetripdetail/ResourceRouteTripDetailMapper.java
  39. 96 6
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/service/route/ResourceRouteServiceImpl.java
  40. 55 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/service/routecost/ResourceRouteCostService.java
  41. 66 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/service/routecost/ResourceRouteCostServiceImpl.java
  42. 55 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/service/routelight/ResourceRouteLightService.java
  43. 65 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/service/routelight/ResourceRouteLightServiceImpl.java
  44. 53 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/service/routetrip/ResourceRouteTripService.java
  45. 59 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/service/routetrip/ResourceRouteTripServiceImpl.java
  46. 55 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/service/routetripdetail/ResourceRouteTripDetailService.java
  47. 65 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/service/routetripdetail/ResourceRouteTripDetailServiceImpl.java

+ 1 - 56
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/app/voyage/AppVoyageController.java

@@ -74,34 +74,9 @@ public class AppVoyageController {
     @Resource
     private PriceVoyageService priceVoyageService;
 
-    @Resource
-    private PriceRoomModelService priceRoomModelService;
-
-    @Resource
-    private PriceFloorService priceFloorService;
-
-    @Resource
-    private PriceSingleSettingService priceSingleSettingService;
-
-    @Resource
-    private PriceAreaService priceAreaService;
-
-    @Resource
-    private PriceSpuService priceSpuService;
-
-    @Resource
-    private ResourceRoomModelService roomModelService;
-
     @Resource
     private VoyageStockDistributeNewService voyageStockDistributeNewService;
 
-    @Resource
-    private PriceRoomModelTypeService priceRoomModelTypeService;
-
-    @Resource
-    private BasicPriceAreaService basicPriceAreaService;
-
-
 
     @GetMapping("/list-calendar")
     @Operation(summary = "获取航次(航期)日历表")
@@ -162,37 +137,7 @@ public class AppVoyageController {
     @GetMapping("/get-by-voyage-id-new")
     @Operation(summary = "通过航次ID获得航次价格")
     public CommonResult<AppPriceVoyageRespVO> getByVoyageIdNew(@RequestParam("voyageId") Long voyageId, @RequestParam("roomModelId") Long roomModelId) {
-        PriceVoyageRespVO priceVoyageRespVO = priceVoyageService.getByVoyageId(voyageId);
-        AppPriceVoyageRespVO respVO = BeanUtils.toBean(priceVoyageRespVO, AppPriceVoyageRespVO.class);
-        Long id = priceVoyageRespVO.getId();
-        PriceRoomModelDO roomModelDO = priceRoomModelService.getListByObjectIdAndRoomModelId(id, roomModelId);
-        if(roomModelDO != null) {
-            PriceRoomModelRespVO priceRoomModelRespVO = BeanUtils.toBean(roomModelDO, PriceRoomModelRespVO.class);
-            PriceSingleSettingDO singleSettingDO = priceSingleSettingService.getByObjectIdAndRoomModelId(id, roomModelId);
-            priceRoomModelRespVO.setSingleSetting(BeanUtils.toBean(singleSettingDO, PriceSingleSettingRespVO.class));
-            List<PriceRoomModelTypeDO> roomModelTypeDOList = priceRoomModelTypeService.getByObjectIdAndRoomModelId(id,roomModelId);
-            priceRoomModelRespVO.setRoomModelTypeList(BeanUtils.toBean(roomModelTypeDOList, PriceRoomModelTypeRespVO.class));
-            respVO.setPriceRoomModel(priceRoomModelRespVO);
-        }
-        ResourceRoomModelDO roomModel = roomModelService.getRoomModel(roomModelId);
-        respVO.setRoomModel(BeanUtils.toBean(roomModel, ResourceRoomModelRespVO.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<PriceCountryRespVO> countryList = priceAreaService.getCountryPriceByObjectId(id);
-        respVO.setCountryList(countryList);
-        // 区域基准价格
-        List<BasicPriceAreaDO> basicPriceAreaList = basicPriceAreaService.getListByObjectId(id);
-        respVO.setBasicAreaList(BeanUtils.toBean(basicPriceAreaList, BasicPriceAreaRespVO.class));
-        List<BasicPriceCountryRespVO> basicCountryList = basicPriceAreaService.getCountryPriceByObjectId(id);
-        respVO.setBasicCountryList(basicCountryList);
-        //附加产品
-        List<PriceSpuRespVO> spuList = priceSpuService.getListByObjectId(id);
-        respVO.setSpuList(spuList);
-        VoyageDO voyage = voyageService.getVoyage(voyageId);
-        VoyageRespVO voyageRespVO = BeanUtils.toBean(voyage, VoyageRespVO.class);
-        respVO.setVoyage(voyageRespVO);
+        AppPriceVoyageRespVO respVO = priceVoyageService.getAppPrice(voyageId, roomModelId);
         return success(respVO);
     }
 

+ 3 - 4
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/pricesinglesetting/PriceSingleSettingMapper.java

@@ -24,10 +24,9 @@ public interface PriceSingleSettingMapper extends BaseMapperX<PriceSingleSetting
                 .eqIfPresent(PriceSingleSettingDO::getObjectId, objectId));
     }
 
-    default PriceSingleSettingDO selectByObjectIdAndRoomModelId(Long objectId, Long roomModelId) {
-        return selectOne(new LambdaQueryWrapperX<PriceSingleSettingDO>()
+    default List<PriceSingleSettingDO> selectByObjectIdAndRoomModelId(Long objectId, Long roomModelId) {
+        return selectList(new LambdaQueryWrapperX<PriceSingleSettingDO>()
                 .eqIfPresent(PriceSingleSettingDO::getObjectId, objectId)
-                .eqIfPresent(PriceSingleSettingDO::getRoomModelId, roomModelId)
-                .last("limit 1"));
+                .eqIfPresent(PriceSingleSettingDO::getRoomModelId, roomModelId));
     }
 }

+ 0 - 6
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/pricesinglesetting/PriceSingleSettingService.java

@@ -36,10 +36,4 @@ public interface PriceSingleSettingService {
      */
     List<PriceSingleSettingDO> getByObjectId(Long objectId);
 
-    /**
-     * 查询房型的单人票设置
-     * @param id
-     * @return
-     */
-    PriceSingleSettingDO getByObjectIdAndRoomModelId(Long objectId, Long roomModelId);
 }

+ 0 - 6
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/pricesinglesetting/PriceSingleSettingServiceImpl.java

@@ -39,10 +39,4 @@ public class PriceSingleSettingServiceImpl implements PriceSingleSettingService
         return priceSingleSettingMapper.selectByObjectId(objectId);
     }
 
-    @Override
-    public PriceSingleSettingDO getByObjectIdAndRoomModelId(Long objectId, Long roomModelId) {
-        return priceSingleSettingMapper.selectByObjectIdAndRoomModelId(objectId, roomModelId);
-    }
-
-
 }

+ 9 - 4
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/pricevoyage/PriceVoyageService.java

@@ -3,10 +3,7 @@ package com.yc.ship.module.product.service.pricevoyage;
 import java.util.*;
 import javax.validation.*;
 import com.yc.ship.module.product.controller.admin.pricevoyage.vo.*;
-import com.yc.ship.module.product.controller.app.voyage.vo.AppRoomModelPriceRespVO;
-import com.yc.ship.module.product.controller.app.voyage.vo.AppVoyageCalendarPriceReqVO;
-import com.yc.ship.module.product.controller.app.voyage.vo.AppVoyageCalendarPriceRespVO;
-import com.yc.ship.module.product.controller.app.voyage.vo.AppVoyageRespVO;
+import com.yc.ship.module.product.controller.app.voyage.vo.*;
 import com.yc.ship.module.product.dal.dataobject.pricevoyage.PriceVoyageDO;
 import com.yc.ship.framework.common.pojo.PageResult;
 import com.yc.ship.framework.common.pojo.PageParam;
@@ -71,4 +68,12 @@ public interface PriceVoyageService {
      * @return
      */
     List<AppRoomModelPriceRespVO> getRoomModelListByVoyageId(Long voyageId);
+
+    /**
+     * 获取APP房间价格
+     * @param voyageId
+     * @param roomModelId
+     * @return
+     */
+    AppPriceVoyageRespVO getAppPrice(Long voyageId, Long roomModelId);
 }

+ 40 - 4
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/pricevoyage/PriceVoyageServiceImpl.java

@@ -10,10 +10,7 @@ import com.yc.ship.module.product.controller.admin.pricetemplate.vo.*;
 import com.yc.ship.module.product.controller.admin.pricevoyage.vo.PriceVoyagePageReqVO;
 import com.yc.ship.module.product.controller.admin.pricevoyage.vo.PriceVoyageRespVO;
 import com.yc.ship.module.product.controller.admin.pricevoyage.vo.PriceVoyageSaveReqVO;
-import com.yc.ship.module.product.controller.app.voyage.vo.AppRoomModelPriceRespVO;
-import com.yc.ship.module.product.controller.app.voyage.vo.AppVoyageCalendarPriceReqVO;
-import com.yc.ship.module.product.controller.app.voyage.vo.AppVoyageCalendarPriceRespVO;
-import com.yc.ship.module.product.controller.app.voyage.vo.AppVoyageRespVO;
+import com.yc.ship.module.product.controller.app.voyage.vo.*;
 import com.yc.ship.module.product.dal.dataobject.basicpricearea.BasicPriceAreaDO;
 import com.yc.ship.module.product.dal.dataobject.pricearea.PriceAreaDO;
 import com.yc.ship.module.product.dal.dataobject.pricefloor.PriceFloorDO;
@@ -234,6 +231,45 @@ public class PriceVoyageServiceImpl implements PriceVoyageService {
         return priceVoyageMapper.selectRoomModelListByVoyageId(voyageId);
     }
 
+    @Override
+    public AppPriceVoyageRespVO getAppPrice(Long voyageId, Long roomModelId) {
+        PriceVoyageDO priceVoyage = priceVoyageMapper.selectByVoyageId(voyageId);
+        if(priceVoyage == null) {
+            throw exception(ErrorCodeConstants.PRICE_VOYAGE_NOT_EXISTS);
+        }
+        Long id = priceVoyage.getId();
+        AppPriceVoyageRespVO respVO = BeanUtils.toBean(priceVoyage, AppPriceVoyageRespVO.class);
+        PriceRoomModelDO priceRoomModelDO = priceRoomModelService.getListByObjectIdAndRoomModelId(id, roomModelId);
+        PriceRoomModelRespVO priceRoomModelRespVO = BeanUtils.toBean(priceRoomModelDO, PriceRoomModelRespVO.class);
+        List<PriceSingleSettingDO> singleSettingDO = priceSingleSettingMapper.selectByObjectIdAndRoomModelId(id, roomModelId);
+        List<PriceSingleSettingRespVO> priceSingleSettingRespVOS = BeanUtils.toBean(singleSettingDO, PriceSingleSettingRespVO.class);
+        Map<Long, PriceSingleSettingRespVO> settingRespVOMap = CollectionUtils.convertMap(priceSingleSettingRespVOS, PriceSingleSettingRespVO::getRoomModelTypeId);
+        ResourceRoomModelDO roomModelDO = roomModelService.getRoomModel(roomModelId);
+        List<PriceRoomModelTypeDO> roomModelTypeList = priceRoomModelTypeMapper.selectByObjectIdAndRoomModelId(id,roomModelId);
+        List<PriceRoomModelTypeRespVO> priceRoomModelTypeRespVOS = BeanUtils.toBean(roomModelTypeList, PriceRoomModelTypeRespVO.class);
+        priceRoomModelTypeRespVOS.forEach(item -> {
+            MapUtils.findAndThen(settingRespVOMap, item.getId(), item::setSingleSetting);
+        });
+        priceRoomModelRespVO.setRoomModelTypeList(priceRoomModelTypeRespVOS);
+        priceRoomModelRespVO.setRoomModel(BeanUtils.toBean(roomModelDO, ResourceRoomModelRespVO.class));
+        respVO.setPriceRoomModel(priceRoomModelRespVO);
+        List<PriceFloorDO> floorDOList = priceFloorMapper.selectListByObjectId(id);
+        respVO.setFloorList(BeanUtils.toBean(floorDOList, PriceFloorRespVO.class));
+        List<PriceAreaDO> areaList = priceAreaMapper.selectListByObjectId(id);
+        respVO.setAreaList(BeanUtils.toBean(areaList, PriceAreaRespVO.class));
+        List<PriceCountryRespVO> countryList = priceAreaService.getCountryPriceByObjectId(id);
+        respVO.setCountryList(countryList);
+        //区域基准价
+        List<BasicPriceAreaDO> basicPriceAreaList = basicPriceAreaMapper.selectListByObjectId(id);
+        respVO.setBasicAreaList(BeanUtils.toBean(basicPriceAreaList, BasicPriceAreaRespVO.class));
+        List<BasicPriceCountryRespVO> basicPriceCountryRespVOS = basicPriceAreaMapper.selectCountryPriceByObjectId(id);
+        respVO.setBasicCountryList(basicPriceCountryRespVOS);
+        //附加产品
+        List<PriceSpuRespVO> spuList = priceSpuService.getListByObjectId(id);
+        respVO.setSpuList(spuList);
+        return respVO;
+    }
+
     private void saveRelation(Long objectId, PriceVoyageSaveReqVO vo) {
         //插入房型价格系数
         List<PriceRoomModelDO> roomModelList = vo.getRoomModelList();

+ 27 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/route/vo/ResourceRouteRespVO.java

@@ -1,7 +1,12 @@
 package com.yc.ship.module.resource.controller.admin.route.vo;
 
+import com.yc.ship.module.resource.dal.dataobject.routecost.ResourceRouteCostDO;
+import com.yc.ship.module.resource.dal.dataobject.routelight.ResourceRouteLightDO;
+import com.yc.ship.module.resource.dal.dataobject.routetrip.ResourceRouteTripDO;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
+
+import java.math.BigDecimal;
 import java.util.*;
 import org.springframework.format.annotation.DateTimeFormat;
 import java.time.LocalDateTime;
@@ -115,4 +120,26 @@ public class ResourceRouteRespVO {
     @Schema(description = "儿童预定说明")
     private String childBookingNotice;
 
+    /**
+     * 价格
+     */
+    @Schema(description = "价格")
+    private BigDecimal price;
+
+    /**
+     * 航线主题
+     */
+    @Schema(description = "航线主题")
+    private String routeTheme;
+
+    @Schema(description = "航线亮点")
+    private List<ResourceRouteLightDO> routeLights;
+
+    @Schema(description = "航线费用包含")
+    private List<ResourceRouteCostDO> routeCosts;
+
+    @Schema(description = "航线行程")
+    private List<ResourceRouteTripDO> routeTrips;
+
+
 }

+ 26 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/route/vo/ResourceRouteSaveReqVO.java

@@ -1,7 +1,12 @@
 package com.yc.ship.module.resource.controller.admin.route.vo;
 
+import com.yc.ship.module.resource.dal.dataobject.routecost.ResourceRouteCostDO;
+import com.yc.ship.module.resource.dal.dataobject.routelight.ResourceRouteLightDO;
+import com.yc.ship.module.resource.dal.dataobject.routetrip.ResourceRouteTripDO;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
+
+import java.math.BigDecimal;
 import java.util.*;
 import javax.validation.constraints.*;
 
@@ -88,4 +93,25 @@ public class ResourceRouteSaveReqVO {
      */
     @Schema(description = "儿童预定说明")
     private String childBookingNotice;
+
+    /**
+     * 价格
+     */
+    @Schema(description = "价格")
+    private BigDecimal price;
+
+    /**
+     * 航线主题
+     */
+    @Schema(description = "航线主题")
+    private String routeTheme;
+
+    @Schema(description = "航线亮点")
+    private List<ResourceRouteLightDO> routeLights;
+
+    @Schema(description = "航线费用包含")
+    private List<ResourceRouteCostDO> routeCosts;
+
+    @Schema(description = "航线行程")
+    private List<ResourceRouteTripDO> routeTrips;
 }

+ 95 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/routecost/ResourceRouteCostController.java

@@ -0,0 +1,95 @@
+package com.yc.ship.module.resource.controller.admin.routecost;
+
+import org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import javax.validation.constraints.*;
+import javax.validation.*;
+import javax.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import com.yc.ship.framework.common.pojo.PageParam;
+import com.yc.ship.framework.common.pojo.PageResult;
+import com.yc.ship.framework.common.pojo.CommonResult;
+import com.yc.ship.framework.common.util.object.BeanUtils;
+import static com.yc.ship.framework.common.pojo.CommonResult.success;
+
+import com.yc.ship.framework.excel.core.util.ExcelUtils;
+
+import com.yc.ship.framework.apilog.core.annotation.ApiAccessLog;
+import static com.yc.ship.framework.apilog.core.enums.OperateTypeEnum.*;
+
+import com.yc.ship.module.resource.controller.admin.routecost.vo.*;
+import com.yc.ship.module.resource.dal.dataobject.routecost.ResourceRouteCostDO;
+import com.yc.ship.module.resource.service.routecost.ResourceRouteCostService;
+
+@Tag(name = "管理后台 - 航线管理-费用包含")
+@RestController
+@RequestMapping("/resource/route-cost")
+@Validated
+public class ResourceRouteCostController {
+
+    @Resource
+    private ResourceRouteCostService routeCostService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建航线管理-费用包含")
+    @PreAuthorize("@ss.hasPermission('resource:route-cost:create')")
+    public CommonResult<Long> createRouteCost(@Valid @RequestBody ResourceRouteCostSaveReqVO createReqVO) {
+        return success(routeCostService.createRouteCost(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新航线管理-费用包含")
+    @PreAuthorize("@ss.hasPermission('resource:route-cost:update')")
+    public CommonResult<Boolean> updateRouteCost(@Valid @RequestBody ResourceRouteCostSaveReqVO updateReqVO) {
+        routeCostService.updateRouteCost(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除航线管理-费用包含")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('resource:route-cost:delete')")
+    public CommonResult<Boolean> deleteRouteCost(@RequestParam("id") Long id) {
+        routeCostService.deleteRouteCost(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得航线管理-费用包含")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('resource:route-cost:query')")
+    public CommonResult<ResourceRouteCostRespVO> getRouteCost(@RequestParam("id") Long id) {
+        ResourceRouteCostDO routeCost = routeCostService.getRouteCost(id);
+        return success(BeanUtils.toBean(routeCost, ResourceRouteCostRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得航线管理-费用包含分页")
+    @PreAuthorize("@ss.hasPermission('resource:route-cost:query')")
+    public CommonResult<PageResult<ResourceRouteCostRespVO>> getRouteCostPage(@Valid ResourceRouteCostPageReqVO pageReqVO) {
+        PageResult<ResourceRouteCostDO> pageResult = routeCostService.getRouteCostPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, ResourceRouteCostRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出航线管理-费用包含 Excel")
+    @PreAuthorize("@ss.hasPermission('resource:route-cost:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportRouteCostExcel(@Valid ResourceRouteCostPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<ResourceRouteCostDO> list = routeCostService.getRouteCostPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "航线管理-费用包含.xls", "数据", ResourceRouteCostRespVO.class,
+                        BeanUtils.toBean(list, ResourceRouteCostRespVO.class));
+    }
+
+}

+ 37 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/routecost/vo/ResourceRouteCostPageReqVO.java

@@ -0,0 +1,37 @@
+package com.yc.ship.module.resource.controller.admin.routecost.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import com.yc.ship.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static com.yc.ship.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 航线管理-费用包含分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class ResourceRouteCostPageReqVO extends PageParam {
+
+    @Schema(description = "航线ID", example = "11291")
+    private Long routeId;
+
+    @Schema(description = "费用类型", example = "2")
+    private String type;
+
+    @Schema(description = "包含类型")
+    private String include;
+
+    @Schema(description = "不包含类型")
+    private String noInclude;
+
+    @Schema(description = "状态", example = "1")
+    private Integer status;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

+ 46 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/routecost/vo/ResourceRouteCostRespVO.java

@@ -0,0 +1,46 @@
+package com.yc.ship.module.resource.controller.admin.routecost.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+import com.yc.ship.framework.excel.core.annotations.DictFormat;
+import com.yc.ship.framework.excel.core.convert.DictConvert;
+
+@Schema(description = "管理后台 - 航线管理-费用包含 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class ResourceRouteCostRespVO {
+
+    @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "21348")
+    @ExcelProperty("ID")
+    private Long id;
+
+    @Schema(description = "航线ID", example = "11291")
+    @ExcelProperty("航线ID")
+    private Long routeId;
+
+    @Schema(description = "费用类型", example = "2")
+    @ExcelProperty("费用类型")
+    private String type;
+
+    @Schema(description = "包含类型")
+    @ExcelProperty("包含类型")
+    private String include;
+
+    @Schema(description = "不包含类型")
+    @ExcelProperty("不包含类型")
+    private String noInclude;
+
+    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @ExcelProperty(value = "状态", converter = DictConvert.class)
+    @DictFormat("common_status") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
+    private Integer status;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

+ 31 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/routecost/vo/ResourceRouteCostSaveReqVO.java

@@ -0,0 +1,31 @@
+package com.yc.ship.module.resource.controller.admin.routecost.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import javax.validation.constraints.*;
+
+@Schema(description = "管理后台 - 航线管理-费用包含新增/修改 Request VO")
+@Data
+public class ResourceRouteCostSaveReqVO {
+
+    @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "21348")
+    private Long id;
+
+    @Schema(description = "航线ID", example = "11291")
+    private Long routeId;
+
+    @Schema(description = "费用类型", example = "2")
+    private String type;
+
+    @Schema(description = "包含类型")
+    private String include;
+
+    @Schema(description = "不包含类型")
+    private String noInclude;
+
+    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @NotNull(message = "状态不能为空")
+    private Integer status;
+
+}

+ 95 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/routelight/ResourceRouteLightController.java

@@ -0,0 +1,95 @@
+package com.yc.ship.module.resource.controller.admin.routelight;
+
+import org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import javax.validation.constraints.*;
+import javax.validation.*;
+import javax.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import com.yc.ship.framework.common.pojo.PageParam;
+import com.yc.ship.framework.common.pojo.PageResult;
+import com.yc.ship.framework.common.pojo.CommonResult;
+import com.yc.ship.framework.common.util.object.BeanUtils;
+import static com.yc.ship.framework.common.pojo.CommonResult.success;
+
+import com.yc.ship.framework.excel.core.util.ExcelUtils;
+
+import com.yc.ship.framework.apilog.core.annotation.ApiAccessLog;
+import static com.yc.ship.framework.apilog.core.enums.OperateTypeEnum.*;
+
+import com.yc.ship.module.resource.controller.admin.routelight.vo.*;
+import com.yc.ship.module.resource.dal.dataobject.routelight.ResourceRouteLightDO;
+import com.yc.ship.module.resource.service.routelight.ResourceRouteLightService;
+
+@Tag(name = "管理后台 - 航线管理-行程亮点")
+@RestController
+@RequestMapping("/resource/route-light")
+@Validated
+public class ResourceRouteLightController {
+
+    @Resource
+    private ResourceRouteLightService routeLightService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建航线管理-行程亮点")
+    @PreAuthorize("@ss.hasPermission('resource:route-light:create')")
+    public CommonResult<Long> createRouteLight(@Valid @RequestBody ResourceRouteLightSaveReqVO createReqVO) {
+        return success(routeLightService.createRouteLight(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新航线管理-行程亮点")
+    @PreAuthorize("@ss.hasPermission('resource:route-light:update')")
+    public CommonResult<Boolean> updateRouteLight(@Valid @RequestBody ResourceRouteLightSaveReqVO updateReqVO) {
+        routeLightService.updateRouteLight(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除航线管理-行程亮点")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('resource:route-light:delete')")
+    public CommonResult<Boolean> deleteRouteLight(@RequestParam("id") Long id) {
+        routeLightService.deleteRouteLight(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得航线管理-行程亮点")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('resource:route-light:query')")
+    public CommonResult<ResourceRouteLightRespVO> getRouteLight(@RequestParam("id") Long id) {
+        ResourceRouteLightDO routeLight = routeLightService.getRouteLight(id);
+        return success(BeanUtils.toBean(routeLight, ResourceRouteLightRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得航线管理-行程亮点分页")
+    @PreAuthorize("@ss.hasPermission('resource:route-light:query')")
+    public CommonResult<PageResult<ResourceRouteLightRespVO>> getRouteLightPage(@Valid ResourceRouteLightPageReqVO pageReqVO) {
+        PageResult<ResourceRouteLightDO> pageResult = routeLightService.getRouteLightPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, ResourceRouteLightRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出航线管理-行程亮点 Excel")
+    @PreAuthorize("@ss.hasPermission('resource:route-light:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportRouteLightExcel(@Valid ResourceRouteLightPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<ResourceRouteLightDO> list = routeLightService.getRouteLightPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "航线管理-行程亮点.xls", "数据", ResourceRouteLightRespVO.class,
+                        BeanUtils.toBean(list, ResourceRouteLightRespVO.class));
+    }
+
+}

+ 34 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/routelight/vo/ResourceRouteLightPageReqVO.java

@@ -0,0 +1,34 @@
+package com.yc.ship.module.resource.controller.admin.routelight.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import com.yc.ship.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static com.yc.ship.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 航线管理-行程亮点分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class ResourceRouteLightPageReqVO extends PageParam {
+
+    @Schema(description = "图标")
+    private String icon;
+
+    @Schema(description = "航线ID", example = "3000")
+    private Long routeId;
+
+    @Schema(description = "亮点名称", example = "芋艿")
+    private String name;
+
+    @Schema(description = "状态", example = "2")
+    private Integer status;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

+ 42 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/routelight/vo/ResourceRouteLightRespVO.java

@@ -0,0 +1,42 @@
+package com.yc.ship.module.resource.controller.admin.routelight.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+import com.yc.ship.framework.excel.core.annotations.DictFormat;
+import com.yc.ship.framework.excel.core.convert.DictConvert;
+
+@Schema(description = "管理后台 - 航线管理-行程亮点 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class ResourceRouteLightRespVO {
+
+    @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "26656")
+    @ExcelProperty("ID")
+    private Long id;
+
+    @Schema(description = "图标")
+    @ExcelProperty("图标")
+    private String icon;
+
+    @Schema(description = "航线ID", example = "3000")
+    @ExcelProperty("航线ID")
+    private Long routeId;
+
+    @Schema(description = "亮点名称", example = "芋艿")
+    @ExcelProperty("亮点名称")
+    private String name;
+
+    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+    @ExcelProperty(value = "状态", converter = DictConvert.class)
+    @DictFormat("common_status") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
+    private Integer status;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

+ 28 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/routelight/vo/ResourceRouteLightSaveReqVO.java

@@ -0,0 +1,28 @@
+package com.yc.ship.module.resource.controller.admin.routelight.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import javax.validation.constraints.*;
+
+@Schema(description = "管理后台 - 航线管理-行程亮点新增/修改 Request VO")
+@Data
+public class ResourceRouteLightSaveReqVO {
+
+    @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "26656")
+    private Long id;
+
+    @Schema(description = "图标")
+    private String icon;
+
+    @Schema(description = "航线ID", example = "3000")
+    private Long routeId;
+
+    @Schema(description = "亮点名称", example = "芋艿")
+    private String name;
+
+    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+    @NotNull(message = "状态不能为空")
+    private Integer status;
+
+}

+ 95 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/routetrip/ResourceRouteTripController.java

@@ -0,0 +1,95 @@
+package com.yc.ship.module.resource.controller.admin.routetrip;
+
+import org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import javax.validation.constraints.*;
+import javax.validation.*;
+import javax.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import com.yc.ship.framework.common.pojo.PageParam;
+import com.yc.ship.framework.common.pojo.PageResult;
+import com.yc.ship.framework.common.pojo.CommonResult;
+import com.yc.ship.framework.common.util.object.BeanUtils;
+import static com.yc.ship.framework.common.pojo.CommonResult.success;
+
+import com.yc.ship.framework.excel.core.util.ExcelUtils;
+
+import com.yc.ship.framework.apilog.core.annotation.ApiAccessLog;
+import static com.yc.ship.framework.apilog.core.enums.OperateTypeEnum.*;
+
+import com.yc.ship.module.resource.controller.admin.routetrip.vo.*;
+import com.yc.ship.module.resource.dal.dataobject.routetrip.ResourceRouteTripDO;
+import com.yc.ship.module.resource.service.routetrip.ResourceRouteTripService;
+
+@Tag(name = "管理后台 - 资源管理-航线行程")
+@RestController
+@RequestMapping("/resource/route-trip")
+@Validated
+public class ResourceRouteTripController {
+
+    @Resource
+    private ResourceRouteTripService routeTripService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建资源管理-航线行程")
+    @PreAuthorize("@ss.hasPermission('resource:route-trip:create')")
+    public CommonResult<Long> createRouteTrip(@Valid @RequestBody ResourceRouteTripSaveReqVO createReqVO) {
+        return success(routeTripService.createRouteTrip(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新资源管理-航线行程")
+    @PreAuthorize("@ss.hasPermission('resource:route-trip:update')")
+    public CommonResult<Boolean> updateRouteTrip(@Valid @RequestBody ResourceRouteTripSaveReqVO updateReqVO) {
+        routeTripService.updateRouteTrip(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除资源管理-航线行程")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('resource:route-trip:delete')")
+    public CommonResult<Boolean> deleteRouteTrip(@RequestParam("id") Long id) {
+        routeTripService.deleteRouteTrip(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得资源管理-航线行程")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('resource:route-trip:query')")
+    public CommonResult<ResourceRouteTripRespVO> getRouteTrip(@RequestParam("id") Long id) {
+        ResourceRouteTripDO routeTrip = routeTripService.getRouteTrip(id);
+        return success(BeanUtils.toBean(routeTrip, ResourceRouteTripRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得资源管理-航线行程分页")
+    @PreAuthorize("@ss.hasPermission('resource:route-trip:query')")
+    public CommonResult<PageResult<ResourceRouteTripRespVO>> getRouteTripPage(@Valid ResourceRouteTripPageReqVO pageReqVO) {
+        PageResult<ResourceRouteTripDO> pageResult = routeTripService.getRouteTripPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, ResourceRouteTripRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出资源管理-航线行程 Excel")
+    @PreAuthorize("@ss.hasPermission('resource:route-trip:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportRouteTripExcel(@Valid ResourceRouteTripPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<ResourceRouteTripDO> list = routeTripService.getRouteTripPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "资源管理-航线行程.xls", "数据", ResourceRouteTripRespVO.class,
+                        BeanUtils.toBean(list, ResourceRouteTripRespVO.class));
+    }
+
+}

+ 34 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/routetrip/vo/ResourceRouteTripPageReqVO.java

@@ -0,0 +1,34 @@
+package com.yc.ship.module.resource.controller.admin.routetrip.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import com.yc.ship.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static com.yc.ship.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 资源管理-航线行程分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class ResourceRouteTripPageReqVO extends PageParam {
+
+    @Schema(description = "航线ID", example = "750")
+    private Long routeId;
+
+    @Schema(description = "第几天")
+    private Integer dayNum;
+
+    @Schema(description = "行程名称", example = "张三")
+    private String name;
+
+    @Schema(description = "状态", example = "2")
+    private Integer status;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

+ 42 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/routetrip/vo/ResourceRouteTripRespVO.java

@@ -0,0 +1,42 @@
+package com.yc.ship.module.resource.controller.admin.routetrip.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+import com.yc.ship.framework.excel.core.annotations.DictFormat;
+import com.yc.ship.framework.excel.core.convert.DictConvert;
+
+@Schema(description = "管理后台 - 资源管理-航线行程 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class ResourceRouteTripRespVO {
+
+    @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "9178")
+    @ExcelProperty("ID")
+    private Long id;
+
+    @Schema(description = "航线ID", example = "750")
+    @ExcelProperty("航线ID")
+    private Long routeId;
+
+    @Schema(description = "第几天")
+    @ExcelProperty("第几天")
+    private Integer dayNum;
+
+    @Schema(description = "行程名称", example = "张三")
+    @ExcelProperty("行程名称")
+    private String name;
+
+    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+    @ExcelProperty(value = "状态", converter = DictConvert.class)
+    @DictFormat("common_status") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
+    private Integer status;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

+ 28 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/routetrip/vo/ResourceRouteTripSaveReqVO.java

@@ -0,0 +1,28 @@
+package com.yc.ship.module.resource.controller.admin.routetrip.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import javax.validation.constraints.*;
+
+@Schema(description = "管理后台 - 资源管理-航线行程新增/修改 Request VO")
+@Data
+public class ResourceRouteTripSaveReqVO {
+
+    @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "9178")
+    private Long id;
+
+    @Schema(description = "航线ID", example = "750")
+    private Long routeId;
+
+    @Schema(description = "第几天")
+    private Integer dayNum;
+
+    @Schema(description = "行程名称", example = "张三")
+    private String name;
+
+    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+    @NotNull(message = "状态不能为空")
+    private Integer status;
+
+}

+ 95 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/routetripdetail/ResourceRouteTripDetailController.java

@@ -0,0 +1,95 @@
+package com.yc.ship.module.resource.controller.admin.routetripdetail;
+
+import org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import javax.validation.constraints.*;
+import javax.validation.*;
+import javax.servlet.http.*;
+import java.util.*;
+import java.io.IOException;
+
+import com.yc.ship.framework.common.pojo.PageParam;
+import com.yc.ship.framework.common.pojo.PageResult;
+import com.yc.ship.framework.common.pojo.CommonResult;
+import com.yc.ship.framework.common.util.object.BeanUtils;
+import static com.yc.ship.framework.common.pojo.CommonResult.success;
+
+import com.yc.ship.framework.excel.core.util.ExcelUtils;
+
+import com.yc.ship.framework.apilog.core.annotation.ApiAccessLog;
+import static com.yc.ship.framework.apilog.core.enums.OperateTypeEnum.*;
+
+import com.yc.ship.module.resource.controller.admin.routetripdetail.vo.*;
+import com.yc.ship.module.resource.dal.dataobject.routetripdetail.ResourceRouteTripDetailDO;
+import com.yc.ship.module.resource.service.routetripdetail.ResourceRouteTripDetailService;
+
+@Tag(name = "管理后台 - 资源管理-航线行程详细")
+@RestController
+@RequestMapping("/resource/route-trip-detail")
+@Validated
+public class ResourceRouteTripDetailController {
+
+    @Resource
+    private ResourceRouteTripDetailService routeTripDetailService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建资源管理-航线行程详细")
+    @PreAuthorize("@ss.hasPermission('resource:route-trip-detail:create')")
+    public CommonResult<Long> createRouteTripDetail(@Valid @RequestBody ResourceRouteTripDetailSaveReqVO createReqVO) {
+        return success(routeTripDetailService.createRouteTripDetail(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新资源管理-航线行程详细")
+    @PreAuthorize("@ss.hasPermission('resource:route-trip-detail:update')")
+    public CommonResult<Boolean> updateRouteTripDetail(@Valid @RequestBody ResourceRouteTripDetailSaveReqVO updateReqVO) {
+        routeTripDetailService.updateRouteTripDetail(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除资源管理-航线行程详细")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('resource:route-trip-detail:delete')")
+    public CommonResult<Boolean> deleteRouteTripDetail(@RequestParam("id") Long id) {
+        routeTripDetailService.deleteRouteTripDetail(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得资源管理-航线行程详细")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('resource:route-trip-detail:query')")
+    public CommonResult<ResourceRouteTripDetailRespVO> getRouteTripDetail(@RequestParam("id") Long id) {
+        ResourceRouteTripDetailDO routeTripDetail = routeTripDetailService.getRouteTripDetail(id);
+        return success(BeanUtils.toBean(routeTripDetail, ResourceRouteTripDetailRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得资源管理-航线行程详细分页")
+    @PreAuthorize("@ss.hasPermission('resource:route-trip-detail:query')")
+    public CommonResult<PageResult<ResourceRouteTripDetailRespVO>> getRouteTripDetailPage(@Valid ResourceRouteTripDetailPageReqVO pageReqVO) {
+        PageResult<ResourceRouteTripDetailDO> pageResult = routeTripDetailService.getRouteTripDetailPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, ResourceRouteTripDetailRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出资源管理-航线行程详细 Excel")
+    @PreAuthorize("@ss.hasPermission('resource:route-trip-detail:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportRouteTripDetailExcel(@Valid ResourceRouteTripDetailPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<ResourceRouteTripDetailDO> list = routeTripDetailService.getRouteTripDetailPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "资源管理-航线行程详细.xls", "数据", ResourceRouteTripDetailRespVO.class,
+                        BeanUtils.toBean(list, ResourceRouteTripDetailRespVO.class));
+    }
+
+}

+ 45 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/routetripdetail/vo/ResourceRouteTripDetailPageReqVO.java

@@ -0,0 +1,45 @@
+package com.yc.ship.module.resource.controller.admin.routetripdetail.vo;
+
+import lombok.*;
+import java.util.*;
+import io.swagger.v3.oas.annotations.media.Schema;
+import com.yc.ship.framework.common.pojo.PageParam;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static com.yc.ship.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 资源管理-航线行程详细分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class ResourceRouteTripDetailPageReqVO extends PageParam {
+
+    @Schema(description = "航线ID", example = "16772")
+    private Long routeId;
+
+    @Schema(description = "行程ID", example = "29273")
+    private Long tripId;
+
+    @Schema(description = "开始时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private String[] startTime;
+
+    @Schema(description = "结束时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private String[] emdTime;
+
+    @Schema(description = "内容")
+    private String content;
+
+    @Schema(description = "排序")
+    private Integer sort;
+
+    @Schema(description = "状态", example = "2")
+    private Integer status;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+}

+ 54 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/routetripdetail/vo/ResourceRouteTripDetailRespVO.java

@@ -0,0 +1,54 @@
+package com.yc.ship.module.resource.controller.admin.routetripdetail.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+import com.yc.ship.framework.excel.core.annotations.DictFormat;
+import com.yc.ship.framework.excel.core.convert.DictConvert;
+
+@Schema(description = "管理后台 - 资源管理-航线行程详细 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class ResourceRouteTripDetailRespVO {
+
+    @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "32233")
+    @ExcelProperty("ID")
+    private Long id;
+
+    @Schema(description = "航线ID", example = "16772")
+    @ExcelProperty("航线ID")
+    private Long routeId;
+
+    @Schema(description = "行程ID", example = "29273")
+    @ExcelProperty("行程ID")
+    private Long tripId;
+
+    @Schema(description = "开始时间")
+    @ExcelProperty("开始时间")
+    private String startTime;
+
+    @Schema(description = "结束时间")
+    @ExcelProperty("结束时间")
+    private String emdTime;
+
+    @Schema(description = "内容")
+    @ExcelProperty("内容")
+    private String content;
+
+    @Schema(description = "排序")
+    @ExcelProperty("排序")
+    private Integer sort;
+
+    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+    @ExcelProperty(value = "状态", converter = DictConvert.class)
+    @DictFormat("common_status") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
+    private Integer status;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

+ 37 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/admin/routetripdetail/vo/ResourceRouteTripDetailSaveReqVO.java

@@ -0,0 +1,37 @@
+package com.yc.ship.module.resource.controller.admin.routetripdetail.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+import java.util.*;
+import javax.validation.constraints.*;
+
+@Schema(description = "管理后台 - 资源管理-航线行程详细新增/修改 Request VO")
+@Data
+public class ResourceRouteTripDetailSaveReqVO {
+
+    @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "32233")
+    private Long id;
+
+    @Schema(description = "航线ID", example = "16772")
+    private Long routeId;
+
+    @Schema(description = "行程ID", example = "29273")
+    private Long tripId;
+
+    @Schema(description = "开始时间")
+    private String startTime;
+
+    @Schema(description = "结束时间")
+    private String emdTime;
+
+    @Schema(description = "内容")
+    private String content;
+
+    @Schema(description = "排序")
+    private Integer sort;
+
+    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+    @NotNull(message = "状态不能为空")
+    private Integer status;
+
+}

+ 2 - 32
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/app/route/AppResourceRouteController.java

@@ -6,7 +6,6 @@ import com.yc.ship.framework.common.pojo.PageResult;
 import com.yc.ship.framework.common.util.object.BeanUtils;
 import com.yc.ship.module.resource.controller.admin.route.vo.ResourceRouteRespVO;
 import com.yc.ship.module.resource.controller.admin.ship.vo.ResourceShipRespVO;
-import com.yc.ship.module.resource.controller.app.route.vo.AppResourceRouteDetailRespVO;
 import com.yc.ship.module.resource.controller.app.route.vo.AppResourceRoutePageReqVO;
 import com.yc.ship.module.resource.controller.app.route.vo.AppResourceRoutePriceVO;
 import com.yc.ship.module.resource.controller.app.route.vo.AppResourceRouteRespVO;
@@ -38,13 +37,6 @@ public class AppResourceRouteController {
 
     @Resource
     private ResourceRouteService routeService;
-
-    @Resource
-    private ResourceShipService shipService;
-
-    @Resource
-    private ResourceDockService dockService;
-
     @PostMapping("/page")
     @Operation(summary = "获得航线分页列表")
     public CommonResult<PageResult<AppResourceRouteRespVO>> getRoutePage(@RequestBody @Valid AppResourceRoutePageReqVO pageReqVO) {
@@ -54,31 +46,9 @@ public class AppResourceRouteController {
 
     @GetMapping("/detail")
     @Operation(summary = "获得航线详情")
-    public CommonResult<AppResourceRouteDetailRespVO> getRouteDetail(@RequestParam("routeId") Long routeId, @RequestParam("shipId") Long shipId) {
+    public CommonResult<AppResourceRouteRespVO> getRouteDetail(@RequestParam("routeId") Long routeId) {
         ResourceRouteDO route = routeService.getRoute(routeId);
-        AppResourceRouteDetailRespVO respVO = new AppResourceRouteDetailRespVO();
-        respVO.setRouteId(routeId)
-                .setRouteName(route.getName())
-                .setDirection(route.getDirection())
-                .setOnDockId(route.getOnDockId())
-                .setDayNum(route.getDayNum())
-                .setNightNum(route.getNightNum())
-                .setRouteDetail(route.getRouteDetail())
-                .setRouteImg(route.getRouteImg())
-                .setBookingNotice(route.getBookingNotice())
-                .setBoardingNotice(route.getBoardingNotice())
-                .setChildBookingNotice(route.getChildBookingNotice())
-                .setRouteVideo(route.getRouteVideo());
-        ResourceShipDO ship = shipService.getShip(shipId);
-        respVO.setShipId(shipId)
-                .setShipName(ship.getName())
-                .setShipDetail(BeanUtils.toBean(ship, ResourceShipRespVO.class));
-        ResourceDockDO dock = dockService.getDock(route.getOnDockId());
-        respVO.setOnDockName(dock.getName());
-        AppResourceRoutePriceVO priceVO = routeService.getMinAndMaxPrice(routeId, shipId);
-        respVO.setMinPrice(priceVO.getMinPrice());
-        respVO.setMaxPrice(priceVO.getMaxPrice());
-        return success(respVO);
+        return success(BeanUtils.toBean(route, AppResourceRouteRespVO.class));
     }
 
     @GetMapping("/simple-list")

+ 0 - 72
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/app/route/vo/AppResourceRouteDetailRespVO.java

@@ -1,72 +0,0 @@
-package com.yc.ship.module.resource.controller.app.route.vo;
-
-import com.yc.ship.module.resource.controller.admin.ship.vo.ResourceShipRespVO;
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.Data;
-
-import java.math.BigDecimal;
-
-@Schema(name = "航线 APP - 航线详情接口")
-@Data
-public class AppResourceRouteDetailRespVO {
-    @Schema(description = "航线ID", example = "1161")
-    private Long routeId;
-    @Schema(description = "航线名称", example = "上海-苏州")
-    private String routeName;
-    @Schema(description = "航线方向", example = "1")
-    private Integer direction;
-
-    @Schema(description = "出发码头ID", example = "28643")
-    private Long onDockId;
-
-    @Schema(description = "出发码头名称", example = "上海南")
-    private String onDockName;
-
-    @Schema(description = "最低价", example = "121.5")
-    private BigDecimal minPrice;
-
-    @Schema(description = "最高价", example = "121.5")
-    private BigDecimal maxPrice;
-
-    @Schema(description = "天数", example = "1")
-    private Integer dayNum;
-
-    @Schema(description = "晚数", example = "1")
-    private Integer nightNum;
-
-    @Schema(description = "航线详情", example = "上海-苏州")
-    private String routeDetail;
-
-    @Schema(description = "航线图片", example = "上海-苏州")
-    private String routeImg;
-
-    @Schema(description = "游轮ID", example = "1161")
-    private Long shipId;
-
-    @Schema(description = "游轮名称", example = "上海-苏州")
-    private String shipName;
-
-    @Schema(description = "游轮详情")
-    private ResourceShipRespVO shipDetail;
-
-    /**
-     * 预订须知
-     */
-    @Schema(description = "预订须知")
-    private String bookingNotice;
-
-    /**
-     * 登船须知
-     */
-    @Schema(description = "登船须知")
-    private String boardingNotice;
-
-    /**
-     * 儿童预定说明
-     */
-    @Schema(description = "儿童预定说明")
-    private String childBookingNotice;
-
-    @Schema(description = "航线视频")
-    private String routeVideo;
-}

+ 2 - 17
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/app/route/vo/AppResourceRoutePageReqVO.java

@@ -12,22 +12,7 @@ import lombok.ToString;
 @ToString(callSuper = true)
 public class AppResourceRoutePageReqVO extends PageParam {
 
-    @Schema(description = "游轮ID", example = "1161")
-    private Long shipId;
-
-    @Schema(description = "码头ID", example = "28643")
-    private Long dockId;
-
-    @Schema(description = "口岸ID", example = "1161")
-    private Long portId;
-
-    @Schema(description = "出发日期")
-    private String startDay;
-
-    @Schema(description = "航线ID", example = "1161")
-    private Long routeId;
-
-    @Schema(description = "航线方向", example = "1")
-    private Integer direction;
+    @Schema(description = "关键词")
+    private String keyword;
 
 }

+ 110 - 24
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/app/route/vo/AppResourceRouteRespVO.java

@@ -1,57 +1,143 @@
 package com.yc.ship.module.resource.controller.app.route.vo;
 
+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.dal.dataobject.routecost.ResourceRouteCostDO;
+import com.yc.ship.module.resource.dal.dataobject.routelight.ResourceRouteLightDO;
+import com.yc.ship.module.resource.dal.dataobject.routetrip.ResourceRouteTripDO;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
+import java.util.List;
 
 @Schema(description = "管理后台 - 航线管理 Response VO")
 @Data
 public class AppResourceRouteRespVO {
 
-    @Schema(description = "航线ID")
-    private Long routeId;
+    @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "13031")
+    @ExcelProperty("ID")
+    private Long id;
 
-    @Schema(description = "航线名称")
-    private String routeName;
+    @Schema(description = "航线名称", example = "王五")
+    @ExcelProperty("航线名称")
+    private String name;
 
-    @Schema(description = "航线图片")
-    private String routeImg;
+    @Schema(description = "航线编码")
+    @ExcelProperty("航线编码")
+    private String code;
 
-    @Schema(description = "航线视频")
-    private String routeVideo;
+    @Schema(description = "航向(字典)")
+    @ExcelProperty(value = "航向(字典)", converter = DictConvert.class)
+    @DictFormat("resource_route_direction") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
+    private Integer direction;
 
-    @Schema(description = "码头ID")
-    private Long dockId;
+    @Schema(description = "登船码头", example = "28643")
+    @ExcelProperty("登船码头")
+    private Long onDockId;
 
-    @Schema(description = "岸端ID")
-    private Long portId;
+    @Schema(description = "登船码头")
+    @ExcelProperty("登船码头")
+    private String onDockName;
 
-    @Schema(description = "航线简称")
-    private String routeShortName;
+    @Schema(description = "离船码头", example = "1161")
+    @ExcelProperty("离船码头")
+    private Long leaveDockId;
 
-    @Schema(description = "航向,1:宜昌到重庆,2:重庆到宜昌")
-    private Integer direction;
+    @Schema(description = "离船码头")
+    @ExcelProperty("离船码头")
+    private String leaveDockName;
 
-    @Schema(description = "航线时长")
-    private String duration;
+    @Schema(description = "途经停靠码头")
+    @ExcelProperty("途经停靠码头")
+    private String midwayDockIds;
+    @Schema(description = "途经停靠码头")
+    @ExcelProperty("途经停靠码头")
+    private String midwayDockNames;
+
+    @Schema(description = "航线关联景区")
+    @ExcelProperty("航线关联景区")
+    private String relationScenicIds;
+
+    @Schema(description = "航线关联景区")
+    @ExcelProperty("航线关联景区")
+    private String relationScenicNames;
+
+    @Schema(description = "排序")
+    @ExcelProperty("排序")
+    private Integer sort;
 
-    @Schema(description = "船ID")
-    private Long shipId;
+    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @ExcelProperty(value = "状态", converter = DictConvert.class)
+    @DictFormat("common_status") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中
+    private Integer status;
 
-    @Schema(description = "船名称")
-    private String shipName;
+    @Schema(description = "创建者")
+    @ExcelProperty("创建者")
+    private String creator;
 
-    @Schema(description = "船图片")
-    private String shipImg;
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @Schema(description = "行程天数")
+    private Integer dayNum;
+
+    @Schema(description = "行程晚数")
+    private Integer nightNum;
+
+    @Schema(description = "行程总时长")
+    private String duration;
+
+    @Schema(description = "航线图片")
+    private String routeImg;
+
+    @Schema(description = "航线视频")
+    private String routeVideo;
 
+    @Schema(description = "航线详情")
+    private String routeDetail;
+
+    /**
+     * 预订须知
+     */
+    @Schema(description = "预订须知")
+    private String bookingNotice;
+
+    /**
+     * 登船须知
+     */
+    @Schema(description = "登船须知")
+    private String boardingNotice;
+
+    /**
+     * 儿童预定说明
+     */
+    @Schema(description = "儿童预定说明")
+    private String childBookingNotice;
+
+    /**
+     * 价格
+     */
     @Schema(description = "价格")
     private BigDecimal price;
 
+    /**
+     * 航线主题
+     */
+    @Schema(description = "航线主题")
+    private String routeTheme;
 
+    @Schema(description = "航线亮点")
+    private List<ResourceRouteLightDO> routeLights;
 
+    @Schema(description = "航线费用包含")
+    private List<ResourceRouteCostDO> routeCosts;
 
+    @Schema(description = "航线行程")
+    private List<ResourceRouteTripDO> routeTrips;
 
 
 }

+ 27 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/dal/dataobject/route/ResourceRouteDO.java

@@ -1,7 +1,12 @@
 package com.yc.ship.module.resource.dal.dataobject.route;
 
+import com.yc.ship.module.resource.dal.dataobject.routecost.ResourceRouteCostDO;
+import com.yc.ship.module.resource.dal.dataobject.routelight.ResourceRouteLightDO;
+import com.yc.ship.module.resource.dal.dataobject.routetrip.ResourceRouteTripDO;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
+
+import java.math.BigDecimal;
 import java.util.*;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
@@ -129,4 +134,26 @@ public class ResourceRouteDO extends BaseDO {
      */
     private String childBookingNotice;
 
+    /**
+     * 价格
+     */
+    private BigDecimal price;
+
+    /**
+     * 航线主题
+     */
+    private String routeTheme;
+
+    @Schema(description = "航线亮点")
+    @TableField(exist = false)
+    private List<ResourceRouteLightDO> routeLights;
+
+    @Schema(description = "航线费用包含")
+    @TableField(exist = false)
+    private List<ResourceRouteCostDO> routeCosts;
+
+    @Schema(description = "航线行程")
+    @TableField(exist = false)
+    private List<ResourceRouteTripDO> routeTrips;
+
 }

+ 54 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/dal/dataobject/routecost/ResourceRouteCostDO.java

@@ -0,0 +1,54 @@
+package com.yc.ship.module.resource.dal.dataobject.routecost;
+
+import com.yc.ship.framework.tenant.core.db.TenantBaseDO;
+import lombok.*;
+import java.util.*;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import com.yc.ship.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 航线管理-费用包含 DO
+ *
+ * @author 管理员
+ */
+@TableName("resource_route_cost")
+@KeySequence("resource_route_cost_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ResourceRouteCostDO extends TenantBaseDO {
+
+    /**
+     * ID
+     */
+    @TableId(type = IdType.ASSIGN_ID)
+    private Long id;
+    /**
+     * 航线ID
+     */
+    private Long routeId;
+    /**
+     * 费用类型
+     */
+    private String type;
+    /**
+     * 包含类型
+     */
+    private String include;
+    /**
+     * 不包含类型
+     */
+    private String noInclude;
+    /**
+     * 状态
+     *
+     * 枚举 {@link TODO common_status 对应的类}
+     */
+    private Integer status;
+
+}

+ 50 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/dal/dataobject/routelight/ResourceRouteLightDO.java

@@ -0,0 +1,50 @@
+package com.yc.ship.module.resource.dal.dataobject.routelight;
+
+import com.yc.ship.framework.tenant.core.db.TenantBaseDO;
+import lombok.*;
+import java.util.*;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import com.yc.ship.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 航线管理-行程亮点 DO
+ *
+ * @author 管理员
+ */
+@TableName("resource_route_light")
+@KeySequence("resource_route_light_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ResourceRouteLightDO extends TenantBaseDO {
+
+    /**
+     * ID
+     */
+    @TableId(type = IdType.ASSIGN_ID)
+    private Long id;
+    /**
+     * 图标
+     */
+    private String icon;
+    /**
+     * 航线ID
+     */
+    private Long routeId;
+    /**
+     * 亮点名称
+     */
+    private String name;
+    /**
+     * 状态
+     *
+     * 枚举 {@link TODO common_status 对应的类}
+     */
+    private Integer status;
+
+}

+ 57 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/dal/dataobject/routetrip/ResourceRouteTripDO.java

@@ -0,0 +1,57 @@
+package com.yc.ship.module.resource.dal.dataobject.routetrip;
+
+import com.yc.ship.framework.tenant.core.db.TenantBaseDO;
+import com.yc.ship.module.resource.dal.dataobject.routetripdetail.ResourceRouteTripDetailDO;
+import lombok.*;
+import java.util.*;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import com.yc.ship.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 资源管理-航线行程 DO
+ *
+ * @author 管理员
+ */
+@TableName("resource_route_trip")
+@KeySequence("resource_route_trip_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ResourceRouteTripDO extends TenantBaseDO {
+
+    /**
+     * ID
+     */
+    @TableId(type = IdType.ASSIGN_ID)
+    private Long id;
+    /**
+     * 航线ID
+     */
+    private Long routeId;
+    /**
+     * 第几天
+     */
+    private Integer dayNum;
+    /**
+     * 行程名称
+     */
+    private String name;
+    /**
+     * 状态
+     *
+     * 枚举 {@link TODO common_status 对应的类}
+     */
+    private Integer status;
+
+    /**
+     * 行程详细
+     */
+    @TableField(exist = false)
+    private List<ResourceRouteTripDetailDO> routeTripDetails;
+
+}

+ 67 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/dal/dataobject/routetripdetail/ResourceRouteTripDetailDO.java

@@ -0,0 +1,67 @@
+package com.yc.ship.module.resource.dal.dataobject.routetripdetail;
+
+import com.yc.ship.framework.tenant.core.db.TenantBaseDO;
+import lombok.*;
+import java.util.*;
+import java.time.LocalDateTime;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.*;
+import com.yc.ship.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 资源管理-航线行程详细 DO
+ *
+ * @author 管理员
+ */
+@TableName("resource_route_trip_detail")
+@KeySequence("resource_route_trip_detail_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class ResourceRouteTripDetailDO extends TenantBaseDO {
+
+    /**
+     * ID
+     */
+    @TableId(type = IdType.ASSIGN_ID)
+    private Long id;
+    /**
+     * 航线ID
+     */
+    private Long routeId;
+    /**
+     * 行程ID
+     */
+    private Long tripId;
+
+    /**
+     * 标题
+     */
+    private String title;
+    /**
+     * 开始时间
+     */
+    private String startTime;
+    /**
+     * 结束时间
+     */
+    private String endTime;
+    /**
+     * 内容
+     */
+    private String content;
+    /**
+     * 排序
+     */
+    private Integer sort;
+    /**
+     * 状态
+     *
+     * 枚举 {@link TODO common_status 对应的类}
+     */
+    private Integer status;
+
+}

+ 8 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/dal/mysql/route/ResourceRouteMapper.java

@@ -46,4 +46,12 @@ public interface ResourceRouteMapper extends BaseMapperX<ResourceRouteDO> {
 
     @Select("select min(price) min_price, max(price) max_price from product_price_room_model where deleted = 0 and object_id in (select id from product_price_voyage where route_id = #{routeId} and ship_id = #{shipId})")
     AppResourceRoutePriceVO selectMinAndMaxPrice(@Param("routeId") Long routeId, @Param("shipId") Long shipId);
+
+    default PageResult<ResourceRouteDO> selectAppPageNew(AppResourceRoutePageReqVO pageReqVO) {
+        return selectPage(pageReqVO, new LambdaQueryWrapperX<ResourceRouteDO>()
+                .likeIfPresent(ResourceRouteDO::getName, pageReqVO.getKeyword())
+                .eq(ResourceRouteDO::getStatus, CommonStatusEnum.ENABLE.getStatus())
+                .orderByAsc(ResourceRouteDO::getSort)
+        );
+    }
 }

+ 38 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/dal/mysql/routecost/ResourceRouteCostMapper.java

@@ -0,0 +1,38 @@
+package com.yc.ship.module.resource.dal.mysql.routecost;
+
+import java.util.*;
+
+import com.yc.ship.framework.common.pojo.PageResult;
+import com.yc.ship.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.yc.ship.framework.mybatis.core.mapper.BaseMapperX;
+import com.yc.ship.module.resource.dal.dataobject.routecost.ResourceRouteCostDO;
+import org.apache.ibatis.annotations.Mapper;
+import com.yc.ship.module.resource.controller.admin.routecost.vo.*;
+
+/**
+ * 航线管理-费用包含 Mapper
+ *
+ * @author 管理员
+ */
+@Mapper
+public interface ResourceRouteCostMapper extends BaseMapperX<ResourceRouteCostDO> {
+
+    default PageResult<ResourceRouteCostDO> selectPage(ResourceRouteCostPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<ResourceRouteCostDO>()
+                .eqIfPresent(ResourceRouteCostDO::getRouteId, reqVO.getRouteId())
+                .eqIfPresent(ResourceRouteCostDO::getType, reqVO.getType())
+                .eqIfPresent(ResourceRouteCostDO::getInclude, reqVO.getInclude())
+                .eqIfPresent(ResourceRouteCostDO::getNoInclude, reqVO.getNoInclude())
+                .eqIfPresent(ResourceRouteCostDO::getStatus, reqVO.getStatus())
+                .betweenIfPresent(ResourceRouteCostDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(ResourceRouteCostDO::getId));
+    }
+
+    default void deleteByRouteId(Long routeId) {
+        delete(new LambdaQueryWrapperX<ResourceRouteCostDO>().eq(ResourceRouteCostDO::getRouteId, routeId));
+    }
+
+    default List<ResourceRouteCostDO> selectByRouteId(Long routeId) {
+        return selectList(new LambdaQueryWrapperX<ResourceRouteCostDO>().eq(ResourceRouteCostDO::getRouteId, routeId));
+    }
+}

+ 37 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/dal/mysql/routelight/ResourceRouteLightMapper.java

@@ -0,0 +1,37 @@
+package com.yc.ship.module.resource.dal.mysql.routelight;
+
+import java.util.*;
+
+import com.yc.ship.framework.common.pojo.PageResult;
+import com.yc.ship.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.yc.ship.framework.mybatis.core.mapper.BaseMapperX;
+import com.yc.ship.module.resource.dal.dataobject.routelight.ResourceRouteLightDO;
+import org.apache.ibatis.annotations.Mapper;
+import com.yc.ship.module.resource.controller.admin.routelight.vo.*;
+
+/**
+ * 航线管理-行程亮点 Mapper
+ *
+ * @author 管理员
+ */
+@Mapper
+public interface ResourceRouteLightMapper extends BaseMapperX<ResourceRouteLightDO> {
+
+    default PageResult<ResourceRouteLightDO> selectPage(ResourceRouteLightPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<ResourceRouteLightDO>()
+                .eqIfPresent(ResourceRouteLightDO::getIcon, reqVO.getIcon())
+                .eqIfPresent(ResourceRouteLightDO::getRouteId, reqVO.getRouteId())
+                .likeIfPresent(ResourceRouteLightDO::getName, reqVO.getName())
+                .eqIfPresent(ResourceRouteLightDO::getStatus, reqVO.getStatus())
+                .betweenIfPresent(ResourceRouteLightDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(ResourceRouteLightDO::getId));
+    }
+
+    default void deleteByRouteId(Long routeId) {
+        delete(new LambdaQueryWrapperX<ResourceRouteLightDO>().eq(ResourceRouteLightDO::getRouteId, routeId));
+    }
+
+    default List<ResourceRouteLightDO> selectByRouteId(Long routeId) {
+        return selectList(new LambdaQueryWrapperX<ResourceRouteLightDO>().eq(ResourceRouteLightDO::getRouteId, routeId));
+    }
+}

+ 37 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/dal/mysql/routetrip/ResourceRouteTripMapper.java

@@ -0,0 +1,37 @@
+package com.yc.ship.module.resource.dal.mysql.routetrip;
+
+import java.util.*;
+
+import com.yc.ship.framework.common.pojo.PageResult;
+import com.yc.ship.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.yc.ship.framework.mybatis.core.mapper.BaseMapperX;
+import com.yc.ship.module.resource.dal.dataobject.routetrip.ResourceRouteTripDO;
+import org.apache.ibatis.annotations.Mapper;
+import com.yc.ship.module.resource.controller.admin.routetrip.vo.*;
+
+/**
+ * 资源管理-航线行程 Mapper
+ *
+ * @author 管理员
+ */
+@Mapper
+public interface ResourceRouteTripMapper extends BaseMapperX<ResourceRouteTripDO> {
+
+    default PageResult<ResourceRouteTripDO> selectPage(ResourceRouteTripPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<ResourceRouteTripDO>()
+                .eqIfPresent(ResourceRouteTripDO::getRouteId, reqVO.getRouteId())
+                .eqIfPresent(ResourceRouteTripDO::getDayNum, reqVO.getDayNum())
+                .likeIfPresent(ResourceRouteTripDO::getName, reqVO.getName())
+                .eqIfPresent(ResourceRouteTripDO::getStatus, reqVO.getStatus())
+                .betweenIfPresent(ResourceRouteTripDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(ResourceRouteTripDO::getId));
+    }
+
+    default void deleteByRouteId(Long routeId) {
+        delete(new LambdaQueryWrapperX<ResourceRouteTripDO>().eq(ResourceRouteTripDO::getRouteId, routeId));
+    }
+
+    default List<ResourceRouteTripDO> selectByRouteId(Long routeId) {
+        return selectList(new LambdaQueryWrapperX<ResourceRouteTripDO>().eq(ResourceRouteTripDO::getRouteId, routeId));
+    }
+}

+ 43 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/dal/mysql/routetripdetail/ResourceRouteTripDetailMapper.java

@@ -0,0 +1,43 @@
+package com.yc.ship.module.resource.dal.mysql.routetripdetail;
+
+import java.util.*;
+
+import com.yc.ship.framework.common.pojo.PageResult;
+import com.yc.ship.framework.mybatis.core.query.LambdaQueryWrapperX;
+import com.yc.ship.framework.mybatis.core.mapper.BaseMapperX;
+import com.yc.ship.module.resource.dal.dataobject.routetripdetail.ResourceRouteTripDetailDO;
+import org.apache.ibatis.annotations.Mapper;
+import com.yc.ship.module.resource.controller.admin.routetripdetail.vo.*;
+
+/**
+ * 资源管理-航线行程详细 Mapper
+ *
+ * @author 管理员
+ */
+@Mapper
+public interface ResourceRouteTripDetailMapper extends BaseMapperX<ResourceRouteTripDetailDO> {
+
+    default PageResult<ResourceRouteTripDetailDO> selectPage(ResourceRouteTripDetailPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<ResourceRouteTripDetailDO>()
+                .eqIfPresent(ResourceRouteTripDetailDO::getRouteId, reqVO.getRouteId())
+                .eqIfPresent(ResourceRouteTripDetailDO::getTripId, reqVO.getTripId())
+                .betweenIfPresent(ResourceRouteTripDetailDO::getStartTime, reqVO.getStartTime())
+                .betweenIfPresent(ResourceRouteTripDetailDO::getEndTime, reqVO.getEmdTime())
+                .eqIfPresent(ResourceRouteTripDetailDO::getContent, reqVO.getContent())
+                .eqIfPresent(ResourceRouteTripDetailDO::getSort, reqVO.getSort())
+                .eqIfPresent(ResourceRouteTripDetailDO::getStatus, reqVO.getStatus())
+                .betweenIfPresent(ResourceRouteTripDetailDO::getCreateTime, reqVO.getCreateTime())
+                .orderByDesc(ResourceRouteTripDetailDO::getId));
+    }
+
+    default void deleteByRouteId(Long routeId) {
+        delete(new LambdaQueryWrapperX<ResourceRouteTripDetailDO>()
+                .eq(ResourceRouteTripDetailDO::getRouteId, routeId));
+    }
+
+    default List<ResourceRouteTripDetailDO> selectByRouteId(Long routeId) {
+        return selectList(new LambdaQueryWrapperX<ResourceRouteTripDetailDO>()
+                .eq(ResourceRouteTripDetailDO::getRouteId, routeId)
+                .orderByAsc(ResourceRouteTripDetailDO::getStartTime));
+    }
+}

+ 96 - 6
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/service/route/ResourceRouteServiceImpl.java

@@ -1,22 +1,34 @@
 package com.yc.ship.module.resource.service.route;
 
-import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.yc.ship.framework.common.pojo.PageResult;
+import com.yc.ship.framework.common.util.collection.CollectionUtils;
+import com.yc.ship.framework.common.util.collection.MapUtils;
 import com.yc.ship.framework.common.util.object.BeanUtils;
-import com.yc.ship.framework.mybatis.core.util.MyBatisUtils;
 import com.yc.ship.module.resource.controller.admin.route.vo.ResourceRoutePageReqVO;
 import com.yc.ship.module.resource.controller.admin.route.vo.ResourceRouteSaveReqVO;
 import com.yc.ship.module.resource.controller.app.route.vo.AppResourceRoutePageReqVO;
 import com.yc.ship.module.resource.controller.app.route.vo.AppResourceRoutePriceVO;
 import com.yc.ship.module.resource.controller.app.route.vo.AppResourceRouteRespVO;
 import com.yc.ship.module.resource.dal.dataobject.route.ResourceRouteDO;
+import com.yc.ship.module.resource.dal.dataobject.routecost.ResourceRouteCostDO;
+import com.yc.ship.module.resource.dal.dataobject.routelight.ResourceRouteLightDO;
+import com.yc.ship.module.resource.dal.dataobject.routetrip.ResourceRouteTripDO;
+import com.yc.ship.module.resource.dal.dataobject.routetripdetail.ResourceRouteTripDetailDO;
 import com.yc.ship.module.resource.dal.mysql.route.ResourceRouteMapper;
+import com.yc.ship.module.resource.dal.mysql.routecost.ResourceRouteCostMapper;
+import com.yc.ship.module.resource.dal.mysql.routelight.ResourceRouteLightMapper;
+import com.yc.ship.module.resource.dal.mysql.routetrip.ResourceRouteTripMapper;
+import com.yc.ship.module.resource.dal.mysql.routetripdetail.ResourceRouteTripDetailMapper;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 import static com.yc.ship.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static com.yc.ship.module.resource.enums.ErrorCodeConstants.ROUTE_NOT_EXISTS;
@@ -33,30 +45,97 @@ public class ResourceRouteServiceImpl implements ResourceRouteService {
     @Resource
     private ResourceRouteMapper routeMapper;
 
+    @Resource
+    private ResourceRouteLightMapper routeLightMapper;
+
+    @Resource
+    private ResourceRouteCostMapper routeCostMapper;
+
+    @Resource
+    private ResourceRouteTripMapper routeTripMapper;
+
+    @Resource
+    private ResourceRouteTripDetailMapper routeTripDetailMapper;
+
     @Override
+    @Transactional
     public Long createRoute(ResourceRouteSaveReqVO createReqVO) {
         // 插入
         ResourceRouteDO route = BeanUtils.toBean(createReqVO, ResourceRouteDO.class);
         routeMapper.insert(route);
+        // 处理航线亮点
+        handleRouteLights(route.getId(), createReqVO.getRouteLights());
+        // 处理费用包含
+        handleRouteCosts(route.getId(), createReqVO.getRouteCosts());
+        // 处理每日详情
+        handleRouteTrips(route.getId(), createReqVO.getRouteTrips());
         // 返回
         return route.getId();
     }
 
+    private void handleRouteTrips(Long id, List<ResourceRouteTripDO> routeTrips) {
+        routeTripMapper.deleteByRouteId(id);
+        routeTrips.stream().forEach(routeTrip -> {
+            Long tripId = IdWorker.getId();
+            routeTrip.setRouteId(id);
+            routeTrip.setId(tripId);
+            List<ResourceRouteTripDetailDO> routeTripDetails = routeTrip.getRouteTripDetails();
+            routeTripDetails.stream().forEach(routeTripDetail -> {
+                routeTripDetail.setTripId(tripId);
+                routeTripDetail.setRouteId(id);
+            });
+        });
+        routeTripMapper.insertBatch(routeTrips);
+        List<ResourceRouteTripDetailDO> list = CollectionUtils.convertList(routeTrips, ResourceRouteTripDO::getRouteTripDetails).stream().flatMap(List::stream).collect(Collectors.toList());
+        routeTripDetailMapper.deleteByRouteId(id);
+        routeTripDetailMapper.insertBatch(list);
+    }
+
+    private void handleRouteCosts(Long id, List<ResourceRouteCostDO> routeCosts) {
+        routeCostMapper.deleteByRouteId(id);
+        routeCosts.stream().forEach(routeCost -> {
+            routeCost.setRouteId(id);
+        });
+        routeCostMapper.insertBatch(routeCosts);
+    }
+
+    private void handleRouteLights(Long routeId, List<ResourceRouteLightDO> routeLights) {
+        // 删除
+        routeLightMapper.deleteByRouteId(routeId);
+        routeLights.stream().forEach(routeLight -> {
+            routeLight.setRouteId(routeId);
+        });
+        // 添加
+        routeLightMapper.insertBatch(routeLights);
+    }
+
     @Override
+    @Transactional
     public void updateRoute(ResourceRouteSaveReqVO updateReqVO) {
         // 校验存在
         validateRouteExists(updateReqVO.getId());
         // 更新
         ResourceRouteDO updateObj = BeanUtils.toBean(updateReqVO, ResourceRouteDO.class);
         routeMapper.updateById(updateObj);
+        // 处理航线亮点
+        handleRouteLights(updateReqVO.getId(), updateReqVO.getRouteLights());
+        // 处理费用包含
+        handleRouteCosts(updateReqVO.getId(), updateReqVO.getRouteCosts());
+        // 处理每日详情
+        handleRouteTrips(updateReqVO.getId(), updateReqVO.getRouteTrips());
     }
 
     @Override
+    @Transactional
     public void deleteRoute(Long id) {
         // 校验存在
         validateRouteExists(id);
         // 删除
         routeMapper.deleteById(id);
+        routeTripMapper.deleteByRouteId(id);
+        routeTripDetailMapper.deleteByRouteId(id);
+        routeCostMapper.deleteByRouteId(id);
+        routeLightMapper.deleteByRouteId(id);
     }
 
     private void validateRouteExists(Long id) {
@@ -67,7 +146,19 @@ public class ResourceRouteServiceImpl implements ResourceRouteService {
 
     @Override
     public ResourceRouteDO getRoute(Long id) {
-        return routeMapper.selectById(id);
+        ResourceRouteDO routeDO = routeMapper.selectById(id);
+        List<ResourceRouteLightDO> lightDOList = routeLightMapper.selectByRouteId(id);
+        routeDO.setRouteLights(lightDOList);
+        List<ResourceRouteCostDO> costDOList = routeCostMapper.selectByRouteId(id);
+        routeDO.setRouteCosts(costDOList);
+        List<ResourceRouteTripDO> tripDOList = routeTripMapper.selectByRouteId(id);
+        List<ResourceRouteTripDetailDO> tripDetailDOList = routeTripDetailMapper.selectByRouteId(id);
+        Map<Long, List<ResourceRouteTripDetailDO>> detailMap = CollectionUtils.convertMultiMap(tripDetailDOList, ResourceRouteTripDetailDO::getTripId);
+        tripDOList.stream().forEach(tripDO -> {
+            MapUtils.findAndThen(detailMap, tripDO.getId(), detailList -> tripDO.setRouteTripDetails(detailList));
+        });
+        routeDO.setRouteTrips(tripDOList);
+        return routeDO;
     }
 
     @Override
@@ -100,9 +191,8 @@ public class ResourceRouteServiceImpl implements ResourceRouteService {
 
     @Override
     public PageResult<AppResourceRouteRespVO> getAppRoutePage(AppResourceRoutePageReqVO pageReqVO) {
-        IPage<AppResourceRouteRespVO> ipage = MyBatisUtils.buildPage(pageReqVO);
-        IPage<AppResourceRouteRespVO> result = routeMapper.selectAppRoutePage(ipage,pageReqVO);
-        return new PageResult<>(result.getRecords(), result.getTotal());
+        PageResult<ResourceRouteDO> page = routeMapper.selectAppPageNew(pageReqVO);
+        return BeanUtils.toBean(page, AppResourceRouteRespVO.class);
     }
 
     @Override

+ 55 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/service/routecost/ResourceRouteCostService.java

@@ -0,0 +1,55 @@
+package com.yc.ship.module.resource.service.routecost;
+
+import java.util.*;
+import javax.validation.*;
+import com.yc.ship.module.resource.controller.admin.routecost.vo.*;
+import com.yc.ship.module.resource.dal.dataobject.routecost.ResourceRouteCostDO;
+import com.yc.ship.framework.common.pojo.PageResult;
+import com.yc.ship.framework.common.pojo.PageParam;
+
+/**
+ * 航线管理-费用包含 Service 接口
+ *
+ * @author 管理员
+ */
+public interface ResourceRouteCostService {
+
+    /**
+     * 创建航线管理-费用包含
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createRouteCost(@Valid ResourceRouteCostSaveReqVO createReqVO);
+
+    /**
+     * 更新航线管理-费用包含
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateRouteCost(@Valid ResourceRouteCostSaveReqVO updateReqVO);
+
+    /**
+     * 删除航线管理-费用包含
+     *
+     * @param id 编号
+     */
+    void deleteRouteCost(Long id);
+
+    /**
+     * 获得航线管理-费用包含
+     *
+     * @param id 编号
+     * @return 航线管理-费用包含
+     */
+    ResourceRouteCostDO getRouteCost(Long id);
+
+    /**
+     * 获得航线管理-费用包含分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 航线管理-费用包含分页
+     */
+    PageResult<ResourceRouteCostDO> getRouteCostPage(ResourceRouteCostPageReqVO pageReqVO);
+
+}

+ 66 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/service/routecost/ResourceRouteCostServiceImpl.java

@@ -0,0 +1,66 @@
+package com.yc.ship.module.resource.service.routecost;
+
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import com.yc.ship.module.resource.controller.admin.routecost.vo.*;
+import com.yc.ship.module.resource.dal.dataobject.routecost.ResourceRouteCostDO;
+import com.yc.ship.framework.common.pojo.PageResult;
+import com.yc.ship.framework.common.pojo.PageParam;
+import com.yc.ship.framework.common.util.object.BeanUtils;
+
+import com.yc.ship.module.resource.dal.mysql.routecost.ResourceRouteCostMapper;
+
+import static com.yc.ship.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static com.yc.ship.module.resource.enums.ErrorCodeConstants.*;
+
+/**
+ * 航线管理-费用包含 Service 实现类
+ *
+ * @author 管理员
+ */
+@Service
+@Validated
+public class ResourceRouteCostServiceImpl implements ResourceRouteCostService {
+
+    @Resource
+    private ResourceRouteCostMapper routeCostMapper;
+
+    @Override
+    public Long createRouteCost(ResourceRouteCostSaveReqVO createReqVO) {
+        // 插入
+        ResourceRouteCostDO routeCost = BeanUtils.toBean(createReqVO, ResourceRouteCostDO.class);
+        routeCostMapper.insert(routeCost);
+        // 返回
+        return routeCost.getId();
+    }
+
+    @Override
+    public void updateRouteCost(ResourceRouteCostSaveReqVO updateReqVO) {
+        // 更新
+        ResourceRouteCostDO updateObj = BeanUtils.toBean(updateReqVO, ResourceRouteCostDO.class);
+        routeCostMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteRouteCost(Long id) {
+        // 删除
+        routeCostMapper.deleteById(id);
+    }
+
+
+
+    @Override
+    public ResourceRouteCostDO getRouteCost(Long id) {
+        return routeCostMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<ResourceRouteCostDO> getRouteCostPage(ResourceRouteCostPageReqVO pageReqVO) {
+        return routeCostMapper.selectPage(pageReqVO);
+    }
+
+}

+ 55 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/service/routelight/ResourceRouteLightService.java

@@ -0,0 +1,55 @@
+package com.yc.ship.module.resource.service.routelight;
+
+import java.util.*;
+import javax.validation.*;
+import com.yc.ship.module.resource.controller.admin.routelight.vo.*;
+import com.yc.ship.module.resource.dal.dataobject.routelight.ResourceRouteLightDO;
+import com.yc.ship.framework.common.pojo.PageResult;
+import com.yc.ship.framework.common.pojo.PageParam;
+
+/**
+ * 航线管理-行程亮点 Service 接口
+ *
+ * @author 管理员
+ */
+public interface ResourceRouteLightService {
+
+    /**
+     * 创建航线管理-行程亮点
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createRouteLight(@Valid ResourceRouteLightSaveReqVO createReqVO);
+
+    /**
+     * 更新航线管理-行程亮点
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateRouteLight(@Valid ResourceRouteLightSaveReqVO updateReqVO);
+
+    /**
+     * 删除航线管理-行程亮点
+     *
+     * @param id 编号
+     */
+    void deleteRouteLight(Long id);
+
+    /**
+     * 获得航线管理-行程亮点
+     *
+     * @param id 编号
+     * @return 航线管理-行程亮点
+     */
+    ResourceRouteLightDO getRouteLight(Long id);
+
+    /**
+     * 获得航线管理-行程亮点分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 航线管理-行程亮点分页
+     */
+    PageResult<ResourceRouteLightDO> getRouteLightPage(ResourceRouteLightPageReqVO pageReqVO);
+
+}

+ 65 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/service/routelight/ResourceRouteLightServiceImpl.java

@@ -0,0 +1,65 @@
+package com.yc.ship.module.resource.service.routelight;
+
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import com.yc.ship.module.resource.controller.admin.routelight.vo.*;
+import com.yc.ship.module.resource.dal.dataobject.routelight.ResourceRouteLightDO;
+import com.yc.ship.framework.common.pojo.PageResult;
+import com.yc.ship.framework.common.pojo.PageParam;
+import com.yc.ship.framework.common.util.object.BeanUtils;
+
+import com.yc.ship.module.resource.dal.mysql.routelight.ResourceRouteLightMapper;
+
+import static com.yc.ship.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static com.yc.ship.module.resource.enums.ErrorCodeConstants.*;
+
+/**
+ * 航线管理-行程亮点 Service 实现类
+ *
+ * @author 管理员
+ */
+@Service
+@Validated
+public class ResourceRouteLightServiceImpl implements ResourceRouteLightService {
+
+    @Resource
+    private ResourceRouteLightMapper routeLightMapper;
+
+    @Override
+    public Long createRouteLight(ResourceRouteLightSaveReqVO createReqVO) {
+        // 插入
+        ResourceRouteLightDO routeLight = BeanUtils.toBean(createReqVO, ResourceRouteLightDO.class);
+        routeLightMapper.insert(routeLight);
+        // 返回
+        return routeLight.getId();
+    }
+
+    @Override
+    public void updateRouteLight(ResourceRouteLightSaveReqVO updateReqVO) {
+        // 更新
+        ResourceRouteLightDO updateObj = BeanUtils.toBean(updateReqVO, ResourceRouteLightDO.class);
+        routeLightMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteRouteLight(Long id) {
+        // 删除
+        routeLightMapper.deleteById(id);
+    }
+
+
+    @Override
+    public ResourceRouteLightDO getRouteLight(Long id) {
+        return routeLightMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<ResourceRouteLightDO> getRouteLightPage(ResourceRouteLightPageReqVO pageReqVO) {
+        return routeLightMapper.selectPage(pageReqVO);
+    }
+
+}

+ 53 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/service/routetrip/ResourceRouteTripService.java

@@ -0,0 +1,53 @@
+package com.yc.ship.module.resource.service.routetrip;
+
+import javax.validation.*;
+import com.yc.ship.module.resource.controller.admin.routetrip.vo.*;
+import com.yc.ship.module.resource.dal.dataobject.routetrip.ResourceRouteTripDO;
+import com.yc.ship.framework.common.pojo.PageResult;
+
+/**
+ * 资源管理-航线行程 Service 接口
+ *
+ * @author 管理员
+ */
+public interface ResourceRouteTripService {
+
+    /**
+     * 创建资源管理-航线行程
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createRouteTrip(@Valid ResourceRouteTripSaveReqVO createReqVO);
+
+    /**
+     * 更新资源管理-航线行程
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateRouteTrip(@Valid ResourceRouteTripSaveReqVO updateReqVO);
+
+    /**
+     * 删除资源管理-航线行程
+     *
+     * @param id 编号
+     */
+    void deleteRouteTrip(Long id);
+
+    /**
+     * 获得资源管理-航线行程
+     *
+     * @param id 编号
+     * @return 资源管理-航线行程
+     */
+    ResourceRouteTripDO getRouteTrip(Long id);
+
+    /**
+     * 获得资源管理-航线行程分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 资源管理-航线行程分页
+     */
+    PageResult<ResourceRouteTripDO> getRouteTripPage(ResourceRouteTripPageReqVO pageReqVO);
+
+}

+ 59 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/service/routetrip/ResourceRouteTripServiceImpl.java

@@ -0,0 +1,59 @@
+package com.yc.ship.module.resource.service.routetrip;
+
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import com.yc.ship.module.resource.controller.admin.routetrip.vo.*;
+import com.yc.ship.module.resource.dal.dataobject.routetrip.ResourceRouteTripDO;
+import com.yc.ship.framework.common.pojo.PageResult;
+import com.yc.ship.framework.common.util.object.BeanUtils;
+
+import com.yc.ship.module.resource.dal.mysql.routetrip.ResourceRouteTripMapper;
+
+
+/**
+ * 资源管理-航线行程 Service 实现类
+ *
+ * @author 管理员
+ */
+@Service
+@Validated
+public class ResourceRouteTripServiceImpl implements ResourceRouteTripService {
+
+    @Resource
+    private ResourceRouteTripMapper routeTripMapper;
+
+    @Override
+    public Long createRouteTrip(ResourceRouteTripSaveReqVO createReqVO) {
+        // 插入
+        ResourceRouteTripDO routeTrip = BeanUtils.toBean(createReqVO, ResourceRouteTripDO.class);
+        routeTripMapper.insert(routeTrip);
+        // 返回
+        return routeTrip.getId();
+    }
+
+    @Override
+    public void updateRouteTrip(ResourceRouteTripSaveReqVO updateReqVO) {
+        // 更新
+        ResourceRouteTripDO updateObj = BeanUtils.toBean(updateReqVO, ResourceRouteTripDO.class);
+        routeTripMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteRouteTrip(Long id) {
+        // 删除
+        routeTripMapper.deleteById(id);
+    }
+
+
+    @Override
+    public ResourceRouteTripDO getRouteTrip(Long id) {
+        return routeTripMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<ResourceRouteTripDO> getRouteTripPage(ResourceRouteTripPageReqVO pageReqVO) {
+        return routeTripMapper.selectPage(pageReqVO);
+    }
+
+}

+ 55 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/service/routetripdetail/ResourceRouteTripDetailService.java

@@ -0,0 +1,55 @@
+package com.yc.ship.module.resource.service.routetripdetail;
+
+import java.util.*;
+import javax.validation.*;
+import com.yc.ship.module.resource.controller.admin.routetripdetail.vo.*;
+import com.yc.ship.module.resource.dal.dataobject.routetripdetail.ResourceRouteTripDetailDO;
+import com.yc.ship.framework.common.pojo.PageResult;
+import com.yc.ship.framework.common.pojo.PageParam;
+
+/**
+ * 资源管理-航线行程详细 Service 接口
+ *
+ * @author 管理员
+ */
+public interface ResourceRouteTripDetailService {
+
+    /**
+     * 创建资源管理-航线行程详细
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createRouteTripDetail(@Valid ResourceRouteTripDetailSaveReqVO createReqVO);
+
+    /**
+     * 更新资源管理-航线行程详细
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateRouteTripDetail(@Valid ResourceRouteTripDetailSaveReqVO updateReqVO);
+
+    /**
+     * 删除资源管理-航线行程详细
+     *
+     * @param id 编号
+     */
+    void deleteRouteTripDetail(Long id);
+
+    /**
+     * 获得资源管理-航线行程详细
+     *
+     * @param id 编号
+     * @return 资源管理-航线行程详细
+     */
+    ResourceRouteTripDetailDO getRouteTripDetail(Long id);
+
+    /**
+     * 获得资源管理-航线行程详细分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 资源管理-航线行程详细分页
+     */
+    PageResult<ResourceRouteTripDetailDO> getRouteTripDetailPage(ResourceRouteTripDetailPageReqVO pageReqVO);
+
+}

+ 65 - 0
ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/service/routetripdetail/ResourceRouteTripDetailServiceImpl.java

@@ -0,0 +1,65 @@
+package com.yc.ship.module.resource.service.routetripdetail;
+
+import org.springframework.stereotype.Service;
+import javax.annotation.Resource;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+import com.yc.ship.module.resource.controller.admin.routetripdetail.vo.*;
+import com.yc.ship.module.resource.dal.dataobject.routetripdetail.ResourceRouteTripDetailDO;
+import com.yc.ship.framework.common.pojo.PageResult;
+import com.yc.ship.framework.common.pojo.PageParam;
+import com.yc.ship.framework.common.util.object.BeanUtils;
+
+import com.yc.ship.module.resource.dal.mysql.routetripdetail.ResourceRouteTripDetailMapper;
+
+import static com.yc.ship.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static com.yc.ship.module.resource.enums.ErrorCodeConstants.*;
+
+/**
+ * 资源管理-航线行程详细 Service 实现类
+ *
+ * @author 管理员
+ */
+@Service
+@Validated
+public class ResourceRouteTripDetailServiceImpl implements ResourceRouteTripDetailService {
+
+    @Resource
+    private ResourceRouteTripDetailMapper routeTripDetailMapper;
+
+    @Override
+    public Long createRouteTripDetail(ResourceRouteTripDetailSaveReqVO createReqVO) {
+        // 插入
+        ResourceRouteTripDetailDO routeTripDetail = BeanUtils.toBean(createReqVO, ResourceRouteTripDetailDO.class);
+        routeTripDetailMapper.insert(routeTripDetail);
+        // 返回
+        return routeTripDetail.getId();
+    }
+
+    @Override
+    public void updateRouteTripDetail(ResourceRouteTripDetailSaveReqVO updateReqVO) {
+        // 更新
+        ResourceRouteTripDetailDO updateObj = BeanUtils.toBean(updateReqVO, ResourceRouteTripDetailDO.class);
+        routeTripDetailMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteRouteTripDetail(Long id) {
+        // 删除
+        routeTripDetailMapper.deleteById(id);
+    }
+
+
+    @Override
+    public ResourceRouteTripDetailDO getRouteTripDetail(Long id) {
+        return routeTripDetailMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<ResourceRouteTripDetailDO> getRouteTripDetailPage(ResourceRouteTripDetailPageReqVO pageReqVO) {
+        return routeTripDetailMapper.selectPage(pageReqVO);
+    }
+
+}