Переглянути джерело

feat: 添加下程序获取航线的航次日历价格,获取航次的房型价格接口,获取整体的航次的价格接口

luofeiyun 4 тижнів тому
батько
коміт
a6c95627ff
10 змінених файлів з 260 додано та 2 видалено
  1. 97 2
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/app/voyage/AppVoyageController.java
  2. 20 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/app/voyage/vo/AppRoomModelPriceRespVO.java
  3. 27 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/app/voyage/vo/AppVoyageCalendarPriceReqVO.java
  4. 20 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/app/voyage/vo/AppVoyageCalendarPriceRespVO.java
  5. 13 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/app/voyage/vo/AppVoyageRespVO.java
  6. 11 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/pricevoyage/PriceVoyageMapper.java
  7. 18 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/pricevoyage/PriceVoyageService.java
  8. 14 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/pricevoyage/PriceVoyageServiceImpl.java
  9. 37 0
      ship-module-product/ship-module-product-biz/src/main/resources/mapper/pricevoyage/PriceVoyageMapper.xml
  10. 3 0
      ship-module-resource/ship-module-resource-biz/src/main/java/com/yc/ship/module/resource/controller/app/route/vo/AppResourceRouteRespVO.java

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

@@ -3,12 +3,31 @@ package com.yc.ship.module.product.controller.app.voyage;
 import com.yc.ship.framework.common.pojo.CommonResult;
 import com.yc.ship.framework.common.util.collection.CollectionUtils;
 import com.yc.ship.framework.common.util.object.BeanUtils;
+import com.yc.ship.module.product.controller.admin.pricetemplate.vo.*;
+import com.yc.ship.module.product.controller.admin.pricevoyage.vo.PriceVoyageRespVO;
 import com.yc.ship.module.product.controller.admin.voyage.vo.VoyageCalendarReqVO;
 import com.yc.ship.module.product.controller.admin.voyage.vo.VoyageRespVO;
+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.dal.dataobject.pricearea.PriceAreaDO;
+import com.yc.ship.module.product.dal.dataobject.pricefloor.PriceFloorDO;
+import com.yc.ship.module.product.dal.dataobject.priceroommodel.PriceRoomModelDO;
+import com.yc.ship.module.product.dal.dataobject.pricesinglesetting.PriceSingleSettingDO;
+import com.yc.ship.module.product.dal.dataobject.pricevoyage.PriceVoyageDO;
 import com.yc.ship.module.product.dal.dataobject.voyage.VoyageDO;
+import com.yc.ship.module.product.enums.ErrorCodeConstants;
+import com.yc.ship.module.product.service.pricearea.PriceAreaService;
+import com.yc.ship.module.product.service.pricefloor.PriceFloorService;
+import com.yc.ship.module.product.service.priceroommodel.PriceRoomModelService;
+import com.yc.ship.module.product.service.pricesinglesetting.PriceSingleSettingService;
+import com.yc.ship.module.product.service.pricespu.PriceSpuService;
+import com.yc.ship.module.product.service.pricevoyage.PriceVoyageService;
 import com.yc.ship.module.product.service.voyage.VoyageService;
 import com.yc.ship.module.resource.api.route.RouteApi;
 import com.yc.ship.module.resource.api.route.dto.RouteRespDTO;
+import com.yc.ship.module.resource.api.ship.ShipApi;
 import com.yc.ship.module.resource.dal.dataobject.ship.ResourceShipDO;
 import com.yc.ship.module.resource.service.ship.ResourceShipService;
 import io.swagger.v3.oas.annotations.Operation;
@@ -16,12 +35,15 @@ import io.swagger.v3.oas.annotations.tags.Tag;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
+import static com.yc.ship.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static com.yc.ship.framework.common.pojo.CommonResult.success;
 
 /**
@@ -42,11 +64,31 @@ public class AppVoyageController {
     @Resource
     private RouteApi routeApi;
 
+    @Resource
+    private PriceVoyageService priceVoyageService;
+
+    @Resource
+    private PriceRoomModelService priceRoomModelService;
+
+    @Resource
+    private PriceFloorService priceFloorService;
+
+    @Resource
+    private PriceSingleSettingService priceSingleSettingService;
+
+    @Resource
+    private PriceAreaService priceAreaService;
+
+    @Resource
+    private PriceSpuService priceSpuService;
+
+
+
     @GetMapping("/list-calendar")
     @Operation(summary = "获取航次(航期)日历表")
-    public CommonResult<List<VoyageRespVO>> getVoyageListCalendar(VoyageCalendarReqVO reqVO) {
+    public CommonResult<List<AppVoyageRespVO>> getVoyageListCalendar(VoyageCalendarReqVO reqVO) {
         List<VoyageDO> list = voyageService.getListCalendar(reqVO);
-        List<VoyageRespVO> voyageRespVOS = BeanUtils.toBean(list, VoyageRespVO.class);
+        List<AppVoyageRespVO> voyageRespVOS = BeanUtils.toBean(list, AppVoyageRespVO.class);
 
         List<Long> shipIds = CollectionUtils.convertList(voyageRespVOS, VoyageRespVO::getShipId);
         List<ResourceShipDO> shipList = shipService.getList(shipIds);
@@ -54,11 +96,64 @@ public class AppVoyageController {
 
         List<Long> routeIds = CollectionUtils.convertList(voyageRespVOS, VoyageRespVO::getRouteId);
         Map<Long, RouteRespDTO> longRouteRespDTOMap = routeApi.queryRoute(routeIds);
+
+        voyageRespVOS.stream().filter(item -> {
+            List<Long> shipIdList = CollectionUtils.convertList(shipList, ResourceShipDO::getId);
+            Set<Long> routeIdList = longRouteRespDTOMap.keySet();
+            return shipIdList.contains(item.getShipId()) && routeIdList.contains(item.getRouteId());
+        });
+
         voyageRespVOS.stream().forEach(item -> {
             item.setRouteName(longRouteRespDTOMap.get(item.getRouteId()).getName());
             item.setRouteResp(longRouteRespDTOMap.get(item.getRouteId()));
             item.setShipName(shipDOMap.get(item.getShipId()).getName());
+            item.setShipShortName(shipDOMap.get(item.getShipId()).getShortName());
         });
         return success(voyageRespVOS);
     }
+
+    @GetMapping("/list-calendar-price")
+    @Operation(summary = "获取航次(航期)日历表价格")
+    public CommonResult<List<AppVoyageCalendarPriceRespVO>> getVoyageListCalendarPrice(AppVoyageCalendarPriceReqVO reqVO) {
+        List<AppVoyageCalendarPriceRespVO> list = priceVoyageService.getListCalendarPrice(reqVO);
+        return success(list);
+    }
+
+    @GetMapping("/getRoomModelListByVoyageId")
+    @Operation(summary = "获取航次(航期)房型列表")
+    public CommonResult<List<AppRoomModelPriceRespVO>> getRoomModelListByVoyageId(@RequestParam("voyageId") Long voyageId) {
+        List<AppRoomModelPriceRespVO> list = priceVoyageService.getRoomModelListByVoyageId(voyageId);
+        return success(list);
+    }
+
+    @GetMapping("/get-by-voyage-id")
+    @Operation(summary = "通过航次ID获得航次价格")
+    public CommonResult<PriceVoyageRespVO> getByVoyageId(@RequestParam("voyageId") Long voyageId) {
+        PriceVoyageDO priceVoyage = priceVoyageService.getByVoyageId(voyageId);
+        if(priceVoyage == null) {
+            throw exception(ErrorCodeConstants.PRICE_VOYAGE_NOT_EXISTS);
+        }
+        Long id = priceVoyage.getId();
+        PriceVoyageRespVO respVO = BeanUtils.toBean(priceVoyage, PriceVoyageRespVO.class);
+        List<PriceRoomModelDO> roomModelDOList = priceRoomModelService.getListByObjectId(id);
+        List<PriceRoomModelRespVO> priceRoomModelRespVOS = BeanUtils.toBean(roomModelDOList, PriceRoomModelRespVO.class);
+        List<PriceSingleSettingDO> singleSettingDO = priceSingleSettingService.getByObjectId(id);
+        List<PriceSingleSettingRespVO> priceSingleSettingRespVOS = BeanUtils.toBean(singleSettingDO, PriceSingleSettingRespVO.class);
+        Map<Long, PriceSingleSettingRespVO> settingRespVOMap = CollectionUtils.convertMap(priceSingleSettingRespVOS, PriceSingleSettingRespVO::getRoomModelId);
+        priceRoomModelRespVOS.stream().forEach(item -> {
+            item.setSingleSetting(settingRespVOMap.get(item.getRoomModelId()));
+        });
+        respVO.setRoomModelList(priceRoomModelRespVOS);
+        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<PriceSpuRespVO> spuList = priceSpuService.getListByObjectId(id);
+        respVO.setSpuList(spuList);
+        return success(respVO);
+    }
+
 }

+ 20 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/app/voyage/vo/AppRoomModelPriceRespVO.java

@@ -0,0 +1,20 @@
+package com.yc.ship.module.product.controller.app.voyage.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+@Schema(description = "航次APP - 房型价格")
+public class AppRoomModelPriceRespVO {
+
+    @Schema(description = "房型ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "22359")
+    private Long roomModelId;
+
+    @Schema(description = "价格", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
+    private BigDecimal price;
+
+    @Schema(description = "房型名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "房型名称")
+    private String roomModelName;
+}

+ 27 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/app/voyage/vo/AppVoyageCalendarPriceReqVO.java

@@ -0,0 +1,27 @@
+package com.yc.ship.module.product.controller.app.voyage.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Schema(description = "航次APP - 航次日历价格查询参数")
+@Data
+public class AppVoyageCalendarPriceReqVO {
+
+    @Schema(description = "航线ID", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "航线ID不能为空")
+    private Long routeId;
+
+    @Schema(description = "船ID", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "船ID不能为空")
+    private Long shipId;
+
+    @Schema(description = "开始时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "开始时间不能为空")
+    private String startDate;
+
+    @Schema(description = "结束时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "结束时间不能为空")
+    private String endDate;
+}

+ 20 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/app/voyage/vo/AppVoyageCalendarPriceRespVO.java

@@ -0,0 +1,20 @@
+package com.yc.ship.module.product.controller.app.voyage.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Schema(description = "航次APP - 航次日历价格")
+@Data
+public class AppVoyageCalendarPriceRespVO {
+
+    @Schema(description = "航次ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "22359")
+    private Long voyageId;
+
+    @Schema(description = "价格", requiredMode = Schema.RequiredMode.REQUIRED, example = "100")
+    private BigDecimal price;
+
+    @Schema(description = "日期", requiredMode = Schema.RequiredMode.REQUIRED, example = "2023-01-01")
+    private String date;
+}

+ 13 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/app/voyage/vo/AppVoyageRespVO.java

@@ -0,0 +1,13 @@
+package com.yc.ship.module.product.controller.app.voyage.vo;
+
+import com.yc.ship.module.product.controller.admin.voyage.vo.VoyageRespVO;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Schema(description = "航次APP - 航次 Response VO")
+@Data
+public class AppVoyageRespVO extends VoyageRespVO {
+
+    @Schema(description = "船名简称")
+    private String shipShortName;
+}

+ 11 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/pricevoyage/PriceVoyageMapper.java

@@ -4,9 +4,16 @@ package com.yc.ship.module.product.dal.mysql.pricevoyage;
 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.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.dal.dataobject.pricevoyage.PriceVoyageDO;
 import org.apache.ibatis.annotations.Mapper;
 import com.yc.ship.module.product.controller.admin.pricevoyage.vo.*;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * 航次价格 Mapper
@@ -37,4 +44,8 @@ public interface PriceVoyageMapper extends BaseMapperX<PriceVoyageDO> {
     default void deleteByVoyageId(Long voyageId) {
         delete(PriceVoyageDO::getVoyageId, voyageId);
     }
+
+    List<AppVoyageCalendarPriceRespVO> selectListCalendarPrice(@Param("reqVO") AppVoyageCalendarPriceReqVO reqVO);
+
+    List<AppRoomModelPriceRespVO> selectRoomModelListByVoyageId(@Param("voyageId") Long voyageId);
 }

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

@@ -3,6 +3,10 @@ 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.dal.dataobject.pricevoyage.PriceVoyageDO;
 import com.yc.ship.framework.common.pojo.PageResult;
 import com.yc.ship.framework.common.pojo.PageParam;
@@ -53,4 +57,18 @@ public interface PriceVoyageService {
     PageResult<PriceVoyageDO> getPriceVoyagePage(PriceVoyagePageReqVO pageReqVO);
 
     PriceVoyageDO getByVoyageId(Long voyageId);
+
+    /**
+     * 获取航次的日历表价格
+     * @param reqVO
+     * @return
+     */
+    List<AppVoyageCalendarPriceRespVO> getListCalendarPrice(AppVoyageCalendarPriceReqVO reqVO);
+
+    /**
+     * 根据航次列表获取房型价格
+     * @param voyageId
+     * @return
+     */
+    List<AppRoomModelPriceRespVO> getRoomModelListByVoyageId(Long voyageId);
 }

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

@@ -5,6 +5,10 @@ import com.yc.ship.framework.common.util.collection.CollectionUtils;
 import com.yc.ship.framework.common.util.object.BeanUtils;
 import com.yc.ship.module.product.controller.admin.pricevoyage.vo.PriceVoyagePageReqVO;
 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.dal.dataobject.pricearea.PriceAreaDO;
 import com.yc.ship.module.product.dal.dataobject.pricefloor.PriceFloorDO;
 import com.yc.ship.module.product.dal.dataobject.priceroommodel.PriceRoomModelDO;
@@ -115,6 +119,16 @@ public class PriceVoyageServiceImpl implements PriceVoyageService {
         return priceVoyageMapper.selectByVoyageId(voyageId);
     }
 
+    @Override
+    public List<AppVoyageCalendarPriceRespVO> getListCalendarPrice(AppVoyageCalendarPriceReqVO reqVO) {
+        return priceVoyageMapper.selectListCalendarPrice(reqVO);
+    }
+
+    @Override
+    public List<AppRoomModelPriceRespVO> getRoomModelListByVoyageId(Long voyageId) {
+        return priceVoyageMapper.selectRoomModelListByVoyageId(voyageId);
+    }
+
     private void saveRelation(Long objectId, PriceVoyageSaveReqVO vo) {
         //插入房型价格系数
         List<PriceRoomModelDO> roomModelList = vo.getRoomModelList();

+ 37 - 0
ship-module-product/ship-module-product-biz/src/main/resources/mapper/pricevoyage/PriceVoyageMapper.xml

@@ -9,4 +9,41 @@
         文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
      -->
 
+    <select id="selectListCalendarPrice"
+            resultType="com.yc.ship.module.product.controller.app.voyage.vo.AppVoyageCalendarPriceRespVO">
+        SELECT
+            DATE_FORMAT( t1.start_time, '%Y-%m-%d' ) date,
+	t1.id voyage_id,
+	min( t3.price ) price
+        FROM
+            product_voyage t1
+            LEFT JOIN product_price_voyage t2 ON t1.id = t2.voyage_id
+            LEFT JOIN product_price_room_model t3 ON t2.id = t3.object_id
+        WHERE
+            t1.deleted = 0
+          AND t2.deleted = 0
+          AND t3.deleted = 0
+          and t1.ship_id = #{reqVO.shipId}
+          AND t1.route_id = #{reqVO.routeId}
+          AND t1.start_time BETWEEN #{reqVO.startDate}
+          AND CONCAT(
+            #{reqVO.endDate},
+            ' 23:59:59')
+    </select>
+    <select id="selectRoomModelListByVoyageId"
+            resultType="com.yc.ship.module.product.controller.app.voyage.vo.AppRoomModelPriceRespVO">
+        SELECT
+            t1.price,
+            t1.room_model_id,
+            t2.`name` room_model_name
+        FROM
+            product_price_room_model t1
+                LEFT JOIN resource_room_model t2 ON t1.room_model_id = t2.id
+        WHERE
+                t1.object_id = ( SELECT id FROM product_price_voyage WHERE voyage_id = #{voyageId} AND deleted = 0 )
+          AND t1.deleted = 0
+          AND t2.deleted = 0
+        ORDER BY
+            t1.price ASC
+    </select>
 </mapper>

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

@@ -10,6 +10,9 @@ import java.time.LocalDateTime;
 @Data
 public class AppResourceRouteRespVO {
 
+    @Schema(description = "航线ID")
+    private Long routeId;
+
     @Schema(description = "航线名称")
     private String routeName;