Pārlūkot izejas kodu

客源地多选

jincheng 2 nedēļas atpakaļ
vecāks
revīzija
2732e96b50

+ 4 - 4
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/report/vo/VisitorSourceDashboardReqVO.java

@@ -3,7 +3,7 @@ package com.yc.ship.module.trade.controller.admin.report.vo;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
-import javax.validation.constraints.NotNull;
+import javax.validation.constraints.NotEmpty;
 import java.util.List;
 
 /**
@@ -13,9 +13,9 @@ import java.util.List;
 @Data
 public class VisitorSourceDashboardReqVO {
 
-    @Schema(description = "游轮ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    @NotNull(message = "游轮ID不能为空")
-    private Long shipId;
+    @Schema(description = "游轮ID列表", requiredMode = Schema.RequiredMode.REQUIRED, example = "[1,2,3]")
+    @NotEmpty(message = "游轮ID列表不能为空")
+    private List<Long> shipIds;
 
     @Schema(description = "航次ID列表", example = "[1,2,3]")
     private List<Long> voyageIds;

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

@@ -48,7 +48,7 @@ public interface VoyageStockBoardMapper {
      * @param voyageIds 航次ID列表
      * @return 游客列表(含证件类型、证件号、国籍及国籍名称)
      */
-    List<TradeVisitorDO> selectVisitorListForSourceDashboard(@Param("shipId") Long shipId, @Param("voyageIds") List<Long> voyageIds);
+    List<TradeVisitorDO> selectVisitorListForSourceDashboard(@Param("shipId") Long shipId, @Param("voyageIds") List<Long> voyageIds, @Param("distributorId") Long distributorId);
 
     /**
      * 查询游客年龄段分析看板所需的游客年龄列表
@@ -57,7 +57,7 @@ public interface VoyageStockBoardMapper {
      * @param voyageIds 航次ID列表
      * @return 游客年龄列表
      */
-    List<Integer> selectVisitorAgeListForAgeDashboard(@Param("shipId") Long shipId, @Param("voyageIds") List<Long> voyageIds);
+    List<Integer> selectVisitorAgeListForAgeDashboard(@Param("shipId") Long shipId, @Param("voyageIds") List<Long> voyageIds, @Param("distributorId") Long distributorId);
 
     /**
      * 查询所有航次库存分页

+ 26 - 10
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/report/impl/VoyageStockBoardServiceImpl.java

@@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.yc.ship.framework.common.pojo.PageResult;
 import com.yc.ship.framework.excel.core.util.ExcelUtils;
+import com.yc.ship.framework.security.core.util.SecurityFrameworkUtils;
 import com.yc.ship.module.resource.api.ship.dto.RoomModelFloorNumDTO;
 import com.yc.ship.module.resource.dal.mysql.room.ResourceRoomMapper;
 import com.yc.ship.module.trade.controller.admin.report.vo.*;
@@ -676,15 +677,22 @@ public class VoyageStockBoardServiceImpl implements VoyageStockBoardService {
 
     @Override
     public VisitorSourceDashboardRespVO getVisitorSourceDashboard(VisitorSourceDashboardReqVO reqVO) {
-        // 1. 查询游客列表
-        List<TradeVisitorDO> visitorList = voyageStockBoardMapper.selectVisitorListForSourceDashboard(
-                reqVO.getShipId(), reqVO.getVoyageIds());
-        if (CollUtil.isEmpty(visitorList)) {
+        // 1. 查询游客列表(多游轮汇总)
+        List<TradeVisitorDO> allVisitorList = new ArrayList<>();
+        Long distributorId = SecurityFrameworkUtils.getLoginDistributorId();
+        for (Long shipId : reqVO.getShipIds()) {
+            List<TradeVisitorDO> visitorList = voyageStockBoardMapper.selectVisitorListForSourceDashboard(
+                    shipId, reqVO.getVoyageIds(), distributorId);
+            if (CollUtil.isNotEmpty(visitorList)) {
+                allVisitorList.addAll(visitorList);
+            }
+        }
+        if (CollUtil.isEmpty(allVisitorList)) {
             return buildEmptyResp();
         }
 
         // 2. 分类统计
-        return analyzeVisitorSource(visitorList);
+        return analyzeVisitorSource(allVisitorList);
     }
 
     @Override
@@ -949,17 +957,25 @@ public class VoyageStockBoardServiceImpl implements VoyageStockBoardService {
 
     @Override
     public VisitorAgeDashboardRespVO getVisitorAgeDashboard(VisitorSourceDashboardReqVO reqVO) {
-        // 1. 查询游客年龄列表
-        List<Integer> ageList = voyageStockBoardMapper.selectVisitorAgeListForAgeDashboard(
-                reqVO.getShipId(), reqVO.getVoyageIds());
-        if (CollUtil.isEmpty(ageList)) {
+        // 1. 查询游客年龄列表(多游轮汇总)
+        List<Integer> allAgeList = new ArrayList<>();
+        Long distributorId = SecurityFrameworkUtils.getLoginDistributorId();
+        for (Long shipId : reqVO.getShipIds()) {
+            List<Integer> ageList = voyageStockBoardMapper.selectVisitorAgeListForAgeDashboard(
+                    shipId, reqVO.getVoyageIds(), distributorId);
+            if (CollUtil.isNotEmpty(ageList)) {
+                allAgeList.addAll(ageList);
+            }
+        }
+        if (CollUtil.isEmpty(allAgeList)) {
             return buildEmptyAgeResp();
         }
 
         // 2. 年龄段分组统计
-        return analyzeVisitorAge(ageList);
+        return analyzeVisitorAge(allAgeList);
     }
 
+
     @Override
     public void exportVisitorAgeDashboardExcel(VisitorSourceDashboardReqVO reqVO, HttpServletResponse response) throws IOException {
         VisitorAgeDashboardRespVO data = getVisitorAgeDashboard(reqVO);

+ 6 - 0
ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/report/VoyageStockBoardMapper.xml

@@ -122,6 +122,9 @@
                 #{item}
             </foreach>
         </if>
+        <if test="distributorId != null">
+            AND tor.source_id = #{distributorId}
+        </if>
     </select>
 
     <select id="selectVisitorAgeListForAgeDashboard" resultType="java.lang.Integer">
@@ -140,6 +143,9 @@
                 #{item}
             </foreach>
         </if>
+        <if test="distributorId != null">
+            AND tor.source_id = #{distributorId}
+        </if>
     </select>
 
     <select id="selectAllVoyageStockPage"