Forráskód Böngészése

fix: 添加分销商航次库存查看

luofeiyun 4 hete
szülő
commit
5e7bc36633
10 módosított fájl, 230 hozzáadás és 34 törlés
  1. 2 0
      ship-module-product/ship-module-product-api/src/main/java/com/yc/ship/module/product/enums/ErrorCodeConstants.java
  2. 34 15
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdistribute/VoyageStockDistributeController.java
  3. 5 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdistribute/vo/VoyageStockDistributePageReqVO.java
  4. 32 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdistribute/vo/VoyageStockDistributeReqVO.java
  5. 61 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdistribute/vo/VoyageStockDistributeRespPageVO.java
  6. 12 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdistribute/vo/VoyageStockDistributeRespVO.java
  7. 13 12
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/voyagestockdistribute/VoyageStockDistributeMapper.java
  8. 3 1
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyagestockdistribute/VoyageStockDistributeService.java
  9. 22 6
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyagestockdistribute/VoyageStockDistributeServiceImpl.java
  10. 46 0
      ship-module-product/ship-module-product-biz/src/main/resources/mapper/voyagestockdistribute/VoyageStockDistributeMapper.xml

+ 2 - 0
ship-module-product/ship-module-product-api/src/main/java/com/yc/ship/module/product/enums/ErrorCodeConstants.java

@@ -39,5 +39,7 @@ public interface ErrorCodeConstants {
     ErrorCode PRICE_VOYAGE_NOT_EXISTS = new ErrorCode(10_026, "该航次未设置价格");
     ErrorCode PRICE_VOYAGE_EXISTS = new ErrorCode(10_026, "该航次已设置价格");
 
+    ErrorCode USER_NOT_DISTRIBUTOR = new ErrorCode(10_027, "该用户不属于分销商");
+
 
 }

+ 34 - 15
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdistribute/VoyageStockDistributeController.java

@@ -3,6 +3,8 @@ package com.yc.ship.module.product.controller.admin.voyagestockdistribute;
 import com.yc.ship.framework.common.util.collection.CollectionUtils;
 import com.yc.ship.module.ota.api.OtaDistributorApi;
 import com.yc.ship.module.resource.api.room.dto.RoomRespDTO;
+import com.yc.ship.module.resource.dal.dataobject.roommodel.ResourceRoomModelDO;
+import com.yc.ship.module.resource.service.roommodel.ResourceRoomModelService;
 import org.springframework.web.bind.annotation.*;
 import javax.annotation.Resource;
 import org.springframework.validation.annotation.Validated;
@@ -44,6 +46,9 @@ public class VoyageStockDistributeController {
     @Resource
     private OtaDistributorApi distributorApi;
 
+    @Resource
+    private ResourceRoomModelService resourceRoomModelService;
+
     @PostMapping("/create")
     @Operation(summary = "创建航次库存分配")
     @PreAuthorize("@ss.hasPermission('product:voyage-stock-distribute:create')")
@@ -81,9 +86,23 @@ public class VoyageStockDistributeController {
     @GetMapping("/page")
     @Operation(summary = "获得航次库存分配分页")
     @PreAuthorize("@ss.hasPermission('product:voyage-stock-distribute:query')")
-    public CommonResult<PageResult<VoyageStockDistributeRespVO>> getVoyageStockDistributePage(@Valid VoyageStockDistributePageReqVO pageReqVO) {
-        PageResult<VoyageStockDistributeDO> pageResult = voyageStockDistributeService.getVoyageStockDistributePage(pageReqVO);
-        return success(BeanUtils.toBean(pageResult, VoyageStockDistributeRespVO.class));
+    public CommonResult<PageResult<VoyageStockDistributeRespPageVO>> getVoyageStockDistributePage(@Valid VoyageStockDistributePageReqVO pageReqVO) {
+        PageResult<VoyageStockDistributeRespPageVO> pageResult = voyageStockDistributeService.getVoyageStockDistributePage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, VoyageStockDistributeRespPageVO.class));
+    }
+
+    @GetMapping("/detail")
+    @Operation(summary = "获取航次库存分配详情")
+    public CommonResult<List<VoyageStockDistributeRespVO>> getVoyageStockDistributeDetail(@Valid VoyageStockDistributeReqVO reqVO) {
+        List<VoyageStockDistributeDO> voyageStockDistribute = voyageStockDistributeService.getVoyageStockDistributeDetail(reqVO);
+        List<VoyageStockDistributeRespVO> respVO = BeanUtils.toBean(voyageStockDistribute, VoyageStockDistributeRespVO.class);
+        List<Long> roomModelIds = CollectionUtils.convertList(respVO, VoyageStockDistributeRespVO::getRoomModelId);
+        List<ResourceRoomModelDO> roomModelList = resourceRoomModelService.getList(roomModelIds);
+        Map<Long, ResourceRoomModelDO> roomModelDOMap = CollectionUtils.convertMap(roomModelList, ResourceRoomModelDO::getId);
+        respVO.stream().forEach(item -> {
+            item.setRoomModelName(roomModelDOMap.get(item.getRoomModelId()).getName());
+        });
+        return success(respVO);
     }
 
     @GetMapping("/list-by-voyage_id")
@@ -115,17 +134,17 @@ public class VoyageStockDistributeController {
         return success(list);
     }
 
-    @GetMapping("/export-excel")
-    @Operation(summary = "导出航次库存分配 Excel")
-    @PreAuthorize("@ss.hasPermission('product:voyage-stock-distribute:export')")
-    @ApiAccessLog(operateType = EXPORT)
-    public void exportVoyageStockDistributeExcel(@Valid VoyageStockDistributePageReqVO pageReqVO,
-              HttpServletResponse response) throws IOException {
-        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
-        List<VoyageStockDistributeDO> list = voyageStockDistributeService.getVoyageStockDistributePage(pageReqVO).getList();
-        // 导出 Excel
-        ExcelUtils.write(response, "航次库存分配.xls", "数据", VoyageStockDistributeRespVO.class,
-                        BeanUtils.toBean(list, VoyageStockDistributeRespVO.class));
-    }
+//    @GetMapping("/export-excel")
+//    @Operation(summary = "导出航次库存分配 Excel")
+//    @PreAuthorize("@ss.hasPermission('product:voyage-stock-distribute:export')")
+//    @ApiAccessLog(operateType = EXPORT)
+//    public void exportVoyageStockDistributeExcel(@Valid VoyageStockDistributePageReqVO pageReqVO,
+//              HttpServletResponse response) throws IOException {
+//        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+//        List<VoyageStockDistributeDO> list = voyageStockDistributeService.getVoyageStockDistributePage(pageReqVO).getList();
+//        // 导出 Excel
+//        ExcelUtils.write(response, "航次库存分配.xls", "数据", VoyageStockDistributeRespVO.class,
+//                        BeanUtils.toBean(list, VoyageStockDistributeRespVO.class));
+//    }
 
 }

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

@@ -7,6 +7,8 @@ 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 javax.validation.constraints.NotNull;
 import java.time.LocalDateTime;
 
 import static com.yc.ship.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@@ -29,6 +31,9 @@ public class VoyageStockDistributePageReqVO extends PageParam {
     @Schema(description = "航次ID", example = "6756")
     private Long voyageId;
 
+    @Schema(description = "航次名称", example = "王五")
+    private String voyageName;
+
     @Schema(description = "房型ID", example = "30594")
     private Long roomModelId;
 

+ 32 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdistribute/vo/VoyageStockDistributeReqVO.java

@@ -0,0 +1,32 @@
+package com.yc.ship.module.product.controller.admin.voyagestockdistribute.vo;
+
+import com.yc.ship.framework.common.pojo.PageParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+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 VoyageStockDistributeReqVO extends PageParam {
+
+    @Schema(description = "分销商ID", example = "2991")
+    private Long distributorId;
+
+    @Schema(description = "门店ID", example = "5290")
+    private Long storeId;
+
+    @Schema(description = "游轮ID", example = "25510")
+    private Long shipId;
+
+    @Schema(description = "航次ID", example = "6756")
+    private Long voyageId;
+}

+ 61 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdistribute/vo/VoyageStockDistributeRespPageVO.java

@@ -0,0 +1,61 @@
+package com.yc.ship.module.product.controller.admin.voyagestockdistribute.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+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
+@ExcelIgnoreUnannotated
+public class VoyageStockDistributeRespPageVO {
+    /**
+     * 分销商类型
+     */
+    @Schema(description = "分销商类型名称", example = "1")
+    @ExcelProperty("分销商类型名称")
+    private String distributorTypeName;
+
+    @Schema(description = "分销商ID", example = "2991")
+    @ExcelProperty("分销商ID")
+    private Long distributorId;
+
+    @Schema(description = "分销商名称", example = "王五")
+    @ExcelProperty("分销商名称")
+    private String distributorName;
+
+    @Schema(description = "门店ID", example = "5290")
+    @ExcelProperty("门店ID")
+    private Long storeId;
+
+    @Schema(description = "门店名称", example = "王五")
+    @ExcelProperty("门店名称")
+    private String storeName;
+
+    @Schema(description = "游轮ID", example = "25510")
+    @ExcelProperty("游轮ID")
+    private Long shipId;
+
+    @Schema(description = "游轮名称", example = "王五")
+    @ExcelProperty("游轮名称")
+    private String shipName;
+
+    @Schema(description = "航次ID", example = "6756")
+    @ExcelProperty("航次ID")
+    private Long voyageId;
+
+    @Schema(description = "航次名称", example = "王五")
+    private String voyageName;
+
+    @Schema(description = "剩余房间数", example = "30594")
+    private BigDecimal sumSurplusNum;
+
+    @Schema(description = "已售房间数", example = "30594")
+    @ExcelProperty("已售房间数")
+    private BigDecimal sumBookNum;
+
+}

+ 12 - 0
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdistribute/vo/VoyageStockDistributeRespVO.java

@@ -64,6 +64,18 @@ public class VoyageStockDistributeRespVO {
     @ExcelProperty("分配房间数")
     private BigDecimal num;
 
+    /**
+     * 剩余房间数
+     */
+    @Schema(description = "剩余房间数")
+    private BigDecimal surplusNum;
+
+    /**
+     * 预订房间数
+     */
+    @Schema(description = "预订房间数")
+    private BigDecimal bookNum;
+
     /**
      * 分配的房间号
      */

+ 13 - 12
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/voyagestockdistribute/VoyageStockDistributeMapper.java

@@ -1,11 +1,13 @@
 package com.yc.ship.module.product.dal.mysql.voyagestockdistribute;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 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.dal.dataobject.voyagestockdistribute.VoyageStockDistributeDO;
 import org.apache.ibatis.annotations.Mapper;
 import com.yc.ship.module.product.controller.admin.voyagestockdistribute.vo.*;
+import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 
 import java.util.List;
@@ -18,18 +20,8 @@ import java.util.List;
 @Mapper
 public interface VoyageStockDistributeMapper extends BaseMapperX<VoyageStockDistributeDO> {
 
-    default PageResult<VoyageStockDistributeDO> selectPage(VoyageStockDistributePageReqVO reqVO) {
-        return selectPage(reqVO, new LambdaQueryWrapperX<VoyageStockDistributeDO>()
-                .eqIfPresent(VoyageStockDistributeDO::getDistributorId, reqVO.getDistributorId())
-                .eqIfPresent(VoyageStockDistributeDO::getStoreId, reqVO.getStoreId())
-                .eqIfPresent(VoyageStockDistributeDO::getShipId, reqVO.getShipId())
-                .eqIfPresent(VoyageStockDistributeDO::getVoyageId, reqVO.getVoyageId())
-                .eqIfPresent(VoyageStockDistributeDO::getRoomModelId, reqVO.getRoomModelId())
-                .eqIfPresent(VoyageStockDistributeDO::getFloor, reqVO.getFloor())
-                .eqIfPresent(VoyageStockDistributeDO::getNum, reqVO.getNum())
-                .betweenIfPresent(VoyageStockDistributeDO::getCreateTime, reqVO.getCreateTime())
-                .orderByDesc(VoyageStockDistributeDO::getId));
-    }
+    IPage selectPage(IPage<VoyageStockDistributeRespPageVO> page, @Param("params") VoyageStockDistributePageReqVO reqVO);
+
 
     default List<VoyageStockDistributeDO> selectListByVoyageId(Long voyageId) {
         return selectList(new LambdaQueryWrapperX<VoyageStockDistributeDO>()
@@ -56,4 +48,13 @@ public interface VoyageStockDistributeMapper extends BaseMapperX<VoyageStockDist
                 .inIfPresent(VoyageStockDistributeDO::getFloor, reqVO.getFloors())
         );
     }
+
+    default List<VoyageStockDistributeDO> selectDetailList(VoyageStockDistributeReqVO reqVO) {
+        return selectList(new LambdaQueryWrapperX<VoyageStockDistributeDO>()
+                .eqIfPresentOrIsNull(VoyageStockDistributeDO::getDistributorId, reqVO.getDistributorId())
+                .eqIfPresentOrIsNull(VoyageStockDistributeDO::getStoreId, reqVO.getStoreId())
+                .eqIfPresent(VoyageStockDistributeDO::getVoyageId, reqVO.getVoyageId())
+                .eqIfPresent(VoyageStockDistributeDO::getShipId, reqVO.getShipId())
+        );
+    }
 }

+ 3 - 1
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyagestockdistribute/VoyageStockDistributeService.java

@@ -51,7 +51,7 @@ public interface VoyageStockDistributeService {
      * @param pageReqVO 分页查询
      * @return 航次库存分配分页
      */
-    PageResult<VoyageStockDistributeDO> getVoyageStockDistributePage(VoyageStockDistributePageReqVO pageReqVO);
+    PageResult<VoyageStockDistributeRespPageVO> getVoyageStockDistributePage(VoyageStockDistributePageReqVO pageReqVO);
 
     /**
      * 根据航次获取房间库存分配列表
@@ -80,4 +80,6 @@ public interface VoyageStockDistributeService {
      * @return
      */
     List<RoomRespDTO> getCanSelectRoomList(QueryCanSelectRoomListReqVO reqVO);
+
+    List<VoyageStockDistributeDO> getVoyageStockDistributeDetail(VoyageStockDistributeReqVO reqVO);
 }

+ 22 - 6
ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyagestockdistribute/VoyageStockDistributeServiceImpl.java

@@ -1,17 +1,17 @@
 package com.yc.ship.module.product.service.voyagestockdistribute;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.yc.ship.framework.common.pojo.PageResult;
 import com.yc.ship.framework.common.util.collection.CollectionUtils;
 import com.yc.ship.framework.common.util.object.BeanUtils;
+import com.yc.ship.framework.mybatis.core.util.MyBatisUtils;
+import com.yc.ship.framework.security.core.util.SecurityFrameworkUtils;
 import com.yc.ship.module.ota.api.OtaDistributorApi;
 import com.yc.ship.module.ota.api.dto.DistributorRespDTO;
 import com.yc.ship.module.ota.enums.DistributorTypeEnum;
 import com.yc.ship.module.otc.api.store.StoreApi;
 import com.yc.ship.module.otc.api.store.dto.StoreInfoRespDTO;
-import com.yc.ship.module.product.controller.admin.voyagestockdistribute.vo.QueryCanSelectRoomListReqVO;
-import com.yc.ship.module.product.controller.admin.voyagestockdistribute.vo.VoyageStockDistributePageReqVO;
-import com.yc.ship.module.product.controller.admin.voyagestockdistribute.vo.VoyageStockDistributeSaveReqVO;
-import com.yc.ship.module.product.controller.admin.voyagestockdistribute.vo.VoyageStockDistributeTotalRespVO;
+import com.yc.ship.module.product.controller.admin.voyagestockdistribute.vo.*;
 import com.yc.ship.module.product.dal.dataobject.voyage.VoyageDO;
 import com.yc.ship.module.product.dal.dataobject.voyagestockdetail.VoyageStockDetailDO;
 import com.yc.ship.module.product.dal.dataobject.voyagestockdistribute.VoyageStockDistributeDO;
@@ -35,6 +35,8 @@ 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.framework.common.exception.util.ServiceExceptionUtil.exception0;
+import static com.yc.ship.module.product.enums.ErrorCodeConstants.USER_NOT_DISTRIBUTOR;
 
 /**
  * 航次库存分配 Service 实现类
@@ -169,8 +171,17 @@ public class VoyageStockDistributeServiceImpl implements VoyageStockDistributeSe
     }
 
     @Override
-    public PageResult<VoyageStockDistributeDO> getVoyageStockDistributePage(VoyageStockDistributePageReqVO pageReqVO) {
-        return voyageStockDistributeMapper.selectPage(pageReqVO);
+    public PageResult<VoyageStockDistributeRespPageVO> getVoyageStockDistributePage(VoyageStockDistributePageReqVO pageReqVO) {
+        Long loginDistributorId = SecurityFrameworkUtils.getLoginDistributorId();
+        if(loginDistributorId == null) {
+            throw exception(USER_NOT_DISTRIBUTOR);
+        }
+        pageReqVO.setDistributorId(loginDistributorId);
+        Long loginStoreId = SecurityFrameworkUtils.getLoginStoreId();
+        pageReqVO.setStoreId(loginStoreId);
+        IPage<VoyageStockDistributeRespPageVO> page = MyBatisUtils.buildPage(pageReqVO);
+        IPage iPage = voyageStockDistributeMapper.selectPage(page,pageReqVO);
+        return new PageResult<>(iPage.getRecords(), iPage.getTotal());
     }
 
     @Override
@@ -323,5 +334,10 @@ public class VoyageStockDistributeServiceImpl implements VoyageStockDistributeSe
         return result;
     }
 
+    @Override
+    public List<VoyageStockDistributeDO> getVoyageStockDistributeDetail(VoyageStockDistributeReqVO reqVO) {
+        return voyageStockDistributeMapper.selectDetailList(reqVO);
+    }
+
 
 }

+ 46 - 0
ship-module-product/ship-module-product-biz/src/main/resources/mapper/voyagestockdistribute/VoyageStockDistributeMapper.xml

@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.yc.ship.module.product.dal.mysql.voyagestockdistribute.VoyageStockDistributeMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
+     -->
+
+    <select id="selectPage" resultType="com.yc.ship.module.product.controller.admin.voyagestockdistribute.vo.VoyageStockDistributeRespPageVO">
+        SELECT
+        t1.id voyage_id,
+        t1.NAME voyage_name,
+        t3.NAME ship_name,
+        t2.distributor_id,
+        t2.store_id,
+        sum( ifnull( t2.surplus_num, 0 ) ) sum_surplus_num,
+        sum( ifnull( t2.book_num, 0 ) ) sum_book_num
+        FROM
+        product_voyage t1
+        LEFT JOIN product_voyage_stock_distribute t2 ON t1.id = t2.voyage_id
+        AND t2.distributor_id = #{params.distributorId}
+        <choose>
+            <when test="params.storeId != null and params.storeId != ''">
+                AND t2.store_id = #{storeId}
+            </when>
+            <otherwise>
+                AND t2.store_id IS NULL
+            </otherwise>
+        </choose>
+        LEFT JOIN resource_ship t3 ON t1.ship_id = t3.id
+        WHERE t1.deleted = 0 and t2.deleted = 0 and t3.deleted = 0
+
+        <if test="params.shipId != null and params.shipId != ''">
+            AND t1.ship_id = #{params.shipId}
+        </if>
+        <if test="params.voyageName != null and params.voyageName != ''">
+            AND t1.name LIKE CONCAT(CONCAT('%', #{params.voyageName}), '%')
+        </if>
+        GROUP BY
+        t1.id
+        order by t1.ship_id asc, t1.start_time asc
+    </select>
+</mapper>