Explorar o código

Merge branch 'main' of http://47.98.207.247:3000/lsq/ship-ota-server into main

luofeiyun hai 2 semanas
pai
achega
18f25c4c7c
Modificáronse 20 ficheiros con 314 adicións e 59 borrados
  1. 2 0
      ship-module-ota/ship-module-ota-biz/src/main/java/com/yc/ship/module/ota/controller/admin/distributorcategory/vo/DistributorCategoryRespVO.java
  2. 3 0
      ship-module-ota/ship-module-ota-biz/src/main/java/com/yc/ship/module/ota/controller/admin/distributorcategory/vo/DistributorCategorySaveReqVO.java
  3. 5 0
      ship-module-ota/ship-module-ota-biz/src/main/java/com/yc/ship/module/ota/dal/dataobject/distributorcategory/DistributorCategoryDO.java
  4. 38 0
      ship-module-ota/ship-module-ota-biz/src/main/java/com/yc/ship/module/ota/dal/dataobject/distributorcategory/DistributorCategoryHisDO.java
  5. 9 0
      ship-module-ota/ship-module-ota-biz/src/main/java/com/yc/ship/module/ota/dal/mysql/distributorcategory/DistributorCategoryHisMapper.java
  6. 55 2
      ship-module-ota/ship-module-ota-biz/src/main/java/com/yc/ship/module/ota/service/distributor/DistributorServiceImpl.java
  7. 4 0
      ship-module-ota/ship-module-ota-biz/src/main/java/com/yc/ship/module/ota/service/distributorcategory/DistributorCategoryHisService.java
  8. 9 0
      ship-module-ota/ship-module-ota-biz/src/main/java/com/yc/ship/module/ota/service/distributorcategory/DistributorCategoryHisServiceImpl.java
  9. 5 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/controller/admin/voyagestockdistributeNew/vo/VoyageStockDistributeNewPageRespVO.java
  10. 8 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/voyage/VoyageMapper.java
  11. 13 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/dal/mysql/voyagestockdistribute/VoyageStockDistributeNewMapper.java
  12. 55 0
      ship-module-product/ship-module-product-biz/src/main/java/com/yc/ship/module/product/service/voyagestockdistribute/VoyageStockDistributeNewServiceImpl.java
  13. 8 0
      ship-module-product/ship-module-product-biz/src/main/resources/mapper/voyage/VoyageMapper.xml
  14. 1 0
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/controller/admin/order/vo/order/TradeOrderPageReqVO.java
  15. 3 3
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/mysql/order/TradeOrderMapper.java
  16. 1 1
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/job/OrderDownSmsOneJob.java
  17. 16 1
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/impl/TradeOrderServiceImpl.java
  18. 58 45
      ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/smsSendconfig/SmsSendconfigServiceImpl.java
  19. 19 5
      ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/order/TradeOrderMapper.xml
  20. 2 2
      ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/report/OpsDailyMapper.xml

+ 2 - 0
ship-module-ota/ship-module-ota-biz/src/main/java/com/yc/ship/module/ota/controller/admin/distributorcategory/vo/DistributorCategoryRespVO.java

@@ -36,5 +36,7 @@ public class DistributorCategoryRespVO {
     @Schema(description = "创建时间")
     @ExcelProperty("创建时间")
     private LocalDateTime createTime;
+    @Schema(description = "所属销售id")
+    private Integer userId;
 
 }

+ 3 - 0
ship-module-ota/ship-module-ota-biz/src/main/java/com/yc/ship/module/ota/controller/admin/distributorcategory/vo/DistributorCategorySaveReqVO.java

@@ -24,4 +24,7 @@ public class DistributorCategorySaveReqVO {
     @Schema(description = "状态", example = "2")
     private Integer useStatus;
 
+    @Schema(description = "所属销售id")
+    private Integer userId;
+
 }

+ 5 - 0
ship-module-ota/ship-module-ota-biz/src/main/java/com/yc/ship/module/ota/dal/dataobject/distributorcategory/DistributorCategoryDO.java

@@ -44,4 +44,9 @@ public class DistributorCategoryDO extends BaseDO {
      */
     private Integer useStatus;
 
+    /**
+     * 所属销售id
+     */
+    private Integer userId;
+
 }

+ 38 - 0
ship-module-ota/ship-module-ota-biz/src/main/java/com/yc/ship/module/ota/dal/dataobject/distributorcategory/DistributorCategoryHisDO.java

@@ -0,0 +1,38 @@
+package com.yc.ship.module.ota.dal.dataobject.distributorcategory;
+
+import com.baomidou.mybatisplus.annotation.KeySequence;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.yc.ship.framework.mybatis.core.dataobject.BaseDO;
+import lombok.*;
+
+import java.time.LocalDateTime;
+
+@TableName("ota_distributor_category_his")
+@KeySequence("ota_distributor_category_his_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class DistributorCategoryHisDO extends BaseDO {
+    @TableId
+    private Long id;
+    /**
+     * 分销商分组ID
+     */
+    private Long otaCategoryId;
+    /**
+     * 分销商ID
+     */
+    private Long distributorId;
+    /**
+     * 开始时间
+     */
+    private LocalDateTime startTime;
+    /**
+     * 结束时间
+     */
+    private LocalDateTime endTime;
+}

+ 9 - 0
ship-module-ota/ship-module-ota-biz/src/main/java/com/yc/ship/module/ota/dal/mysql/distributorcategory/DistributorCategoryHisMapper.java

@@ -0,0 +1,9 @@
+package com.yc.ship.module.ota.dal.mysql.distributorcategory;
+
+import com.yc.ship.framework.mybatis.core.mapper.BaseMapperX;
+import com.yc.ship.module.ota.dal.dataobject.distributorcategory.DistributorCategoryHisDO;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface DistributorCategoryHisMapper extends BaseMapperX<DistributorCategoryHisDO> {
+}

+ 55 - 2
ship-module-ota/ship-module-ota-biz/src/main/java/com/yc/ship/module/ota/service/distributor/DistributorServiceImpl.java

@@ -7,6 +7,7 @@ import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONObject;
 import cn.hutool.json.XML;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
@@ -22,16 +23,17 @@ import com.yc.ship.framework.mybatis.core.query.MPJLambdaWrapperX;
 import com.yc.ship.framework.security.core.LoginUser;
 import com.yc.ship.framework.security.core.util.SecurityFrameworkUtils;
 import com.yc.ship.framework.tenant.core.aop.TenantIgnore;
-import com.yc.ship.framework.tenant.core.context.TenantContextHolder;
 import com.yc.ship.framework.tenant.core.util.TenantUtils;
 import com.yc.ship.module.infra.api.config.ConfigApi;
 import com.yc.ship.module.ota.controller.admin.distributor.vo.*;
 import com.yc.ship.module.ota.controller.admin.distributorauditlog.vo.DistributorAuditLogSaveReqVO;
 import com.yc.ship.module.ota.api.dto.DistributorRespDTO;
 import com.yc.ship.module.ota.dal.dataobject.distributor.DistributorDO;
+import com.yc.ship.module.ota.dal.dataobject.distributorcategory.DistributorCategoryHisDO;
 import com.yc.ship.module.ota.dal.dataobject.distributortype.DistributorTypeDO;
 import com.yc.ship.module.ota.dal.dataobject.otaDistributorRegion.OtaDistributorRegionDO;
 import com.yc.ship.module.ota.dal.mysql.distributor.DistributorMapper;
+import com.yc.ship.module.ota.dal.mysql.distributorcategory.DistributorCategoryHisMapper;
 import com.yc.ship.module.ota.dal.mysql.otaDistributorRegion.OtaDistributorRegionMapper;
 import com.yc.ship.module.ota.enums.DistributorTypeEnum;
 import com.yc.ship.module.ota.service.distributorauditlog.DistributorAuditLogService;
@@ -58,6 +60,7 @@ import java.math.BigDecimal;
 import java.net.Socket;
 import java.net.SocketTimeoutException;
 import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicReference;
@@ -105,6 +108,8 @@ public class DistributorServiceImpl implements DistributorService {
 
     @Resource
     private DistributorTypeService distributorTypeService;
+    @Resource
+    private DistributorCategoryHisMapper distributorCategoryHisMapper;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -123,6 +128,8 @@ public class DistributorServiceImpl implements DistributorService {
             }
         }
 
+
+
         //登录密码加密
         String password = createReqVO.getPassword();
         if (StringUtils.isNotBlank(password)) {
@@ -189,6 +196,14 @@ public class DistributorServiceImpl implements DistributorService {
                 list.add(otaDistributorRegionDO);
             }
         }
+        if(distributor.getOtaCategoryId() != null){
+            DistributorCategoryHisDO distributorCategoryHis = new DistributorCategoryHisDO();
+            distributorCategoryHis.setOtaCategoryId(distributor.getOtaCategoryId());
+            distributorCategoryHis.setDistributorId(distributor.getId());
+            distributorCategoryHis.setStartTime(LocalDateTime.now());
+            distributorCategoryHis.setId(IdWorker.getId(distributorCategoryHis));
+            distributorCategoryHisMapper.insert(distributorCategoryHis);
+        }
         if(!list.isEmpty()) {
             otaDistributorRegionMapper.insertBatch(list);
         }
@@ -387,7 +402,10 @@ public class DistributorServiceImpl implements DistributorService {
     @Override
     public void updateDistributor(DistributorSaveReqVO updateReqVO) {
         // 校验存在
-        validateDistributorExists(updateReqVO.getId());
+        DistributorDO oldDistributorDO = distributorMapper.selectById(updateReqVO.getId());
+        if (oldDistributorDO == null) {
+            throw exception(DISTRIBUTOR_NOT_EXISTS);
+        }
         // 校验登录名重复
         validateLoginNameUnique(updateReqVO.getId(), updateReqVO.getLoginName());
         // 更新
@@ -446,6 +464,41 @@ public class DistributorServiceImpl implements DistributorService {
         if(!list.isEmpty()) {
             otaDistributorRegionMapper.insertBatch(list);
         }
+        log.info("分销商分组是否改变:{}", !Objects.equals(updateObj.getOtaCategoryId(), oldDistributorDO.getOtaCategoryId()));
+        if(updateObj.getOtaCategoryId() != null && !Objects.equals(updateObj.getOtaCategoryId(), oldDistributorDO.getOtaCategoryId())){
+            // 改变了分销商分组
+            if(oldDistributorDO.getOtaCategoryId() != null){
+                List<DistributorCategoryHisDO> distributorCategoryHisDOS = distributorCategoryHisMapper.selectList(
+                        new LambdaUpdateWrapper<DistributorCategoryHisDO>()
+                                .eq(DistributorCategoryHisDO::getDistributorId, updateObj.getId())
+                                .eq(DistributorCategoryHisDO::getOtaCategoryId, oldDistributorDO.getOtaCategoryId())
+                                .isNull(DistributorCategoryHisDO::getEndTime)
+                );
+                if(!distributorCategoryHisDOS.isEmpty()){
+                    DistributorCategoryHisDO distributorCategoryHisDO = distributorCategoryHisDOS.get(0);
+                    distributorCategoryHisDO.setEndTime(LocalDateTime.now());
+                    distributorCategoryHisMapper.updateById(distributorCategoryHisDO);
+                }
+                DistributorCategoryHisDO distributorCategoryHis = new DistributorCategoryHisDO();
+                distributorCategoryHis.setOtaCategoryId(updateObj.getOtaCategoryId());
+                distributorCategoryHis.setDistributorId(updateObj.getId());
+                distributorCategoryHis.setStartTime(LocalDateTime.now());
+                distributorCategoryHis.setId(IdWorker.getId(distributorCategoryHis));
+                distributorCategoryHisMapper.insert(distributorCategoryHis);
+
+            }
+        }else{
+            List<DistributorCategoryHisDO> distributorCategoryHisDOS = distributorCategoryHisMapper.selectList(DistributorCategoryHisDO::getDistributorId, updateObj.getId(),
+                    DistributorCategoryHisDO::getOtaCategoryId, updateObj.getOtaCategoryId() );
+            if(updateObj.getOtaCategoryId() != null && distributorCategoryHisDOS.isEmpty()){
+                DistributorCategoryHisDO distributorCategoryHis = new DistributorCategoryHisDO();
+                distributorCategoryHis.setOtaCategoryId(updateObj.getOtaCategoryId());
+                distributorCategoryHis.setDistributorId(updateObj.getId());
+                distributorCategoryHis.setStartTime(LocalDateTime.now());
+                distributorCategoryHis.setId(IdWorker.getId(distributorCategoryHis));
+                distributorCategoryHisMapper.insert(distributorCategoryHis);
+            }
+        }
 
     }
 

+ 4 - 0
ship-module-ota/ship-module-ota-biz/src/main/java/com/yc/ship/module/ota/service/distributorcategory/DistributorCategoryHisService.java

@@ -0,0 +1,4 @@
+package com.yc.ship.module.ota.service.distributorcategory;
+
+public interface DistributorCategoryHisService {
+}

+ 9 - 0
ship-module-ota/ship-module-ota-biz/src/main/java/com/yc/ship/module/ota/service/distributorcategory/DistributorCategoryHisServiceImpl.java

@@ -0,0 +1,9 @@
+package com.yc.ship.module.ota.service.distributorcategory;
+
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+@Service
+@Validated
+public class DistributorCategoryHisServiceImpl implements DistributorCategoryHisService {
+}

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

@@ -5,6 +5,8 @@ import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
 import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
 
 @Schema(description = "管理后台 - 航次库存分配保存 Request VO")
 @Data
@@ -34,7 +36,10 @@ public class VoyageStockDistributeNewPageRespVO {
     @Schema(description = "是否启用共享库存", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
     private Integer enableShare;
 
+    @Schema(description = "是否有营销政策", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    private Integer isPolicy;
 
+    private List<Map<String,Object>> distributeNewRespVOList;
 
 
 

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

@@ -112,4 +112,12 @@ public interface VoyageMapper extends BaseMapperX<VoyageDO> {
      * @return Map<voyageId, count>
      */
     List<Map<String, Object>> countBatchByVoyageIds(@Param("voyageIds") List<Long> voyageIds);
+
+    /**
+     * 查询订单的航次
+     * @param day 提前天数
+     * @param type 上水、下水
+     * @return
+     */
+    List<Map<String, Object>> queryOrderVoyage(@Param("day")int day,@Param("direction") int type);
 }

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

@@ -76,4 +76,17 @@ public interface VoyageStockDistributeNewMapper extends BaseMapperX<VoyageStockD
             "    p.floor")
     @TenantIgnore
     List<Map<String, Object>> selectAssignRoomNum(@Param("voyageId")Long voyageId);
+
+    @Select("SELECT count(1) " +
+            "FROM marketing_policy mp " +
+            "INNER JOIN marketing_policy_detail mpd ON mp.id = mpd.policy_id " +
+            "    AND mpd.deleted = 0 " +
+            "INNER JOIN product_voyage pv on mpd.voyage_id = pv.id AND pv.deleted=0 " +
+            "WHERE mp.deleted = 0 " +
+            "  AND mp.effective_time >= NOW() " +
+            "  AND DATE_SUB(DATE(pv.boarding_time), INTERVAL mp.early_days DAY) >= CURDATE() " +
+            "  AND mpd.surplus_num>0 " +
+            "  AND mpd.voyage_id = #{voyageId}")
+    @TenantIgnore
+    Long selectIsPolicy(@Param("voyageId")Long voyageId);
 }

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

@@ -32,6 +32,7 @@ import org.springframework.validation.annotation.Validated;
 import javax.annotation.Resource;
 import java.math.BigDecimal;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
@@ -75,6 +76,7 @@ public class VoyageStockDistributeNewServiceImpl implements VoyageStockDistribut
     private VoyageStockRoomUsedMapper voyageStockRoomUsedMapper;
 
 
+
     @Override
     public void createVoyageStockDistributeNew(Long voyageId, Integer type, List<VoyageStockDistributeNewSaveReqVO> createReqVO) {
         BigDecimal zero = BigDecimal.ZERO;
@@ -221,20 +223,40 @@ public class VoyageStockDistributeNewServiceImpl implements VoyageStockDistribut
         Map<Long, BigDecimal> idNumMap = CollectionUtils.convertMap(distributeNewList, VoyageStockDistributeNewPageRespVO::getVoyageId, VoyageStockDistributeNewPageRespVO::getNum);
         Map<Long, BigDecimal> idRoomModelNumMap = CollectionUtils.convertMap(distributeNewList, VoyageStockDistributeNewPageRespVO::getVoyageId, VoyageStockDistributeNewPageRespVO::getRoomModelNum);
         List<VoyageStockDistributeNewPageRespVO> resultList = new ArrayList<>();
+
         list.forEach(item -> {
             BigDecimal num = idNumMap.get(item.getVoyageId());
             BigDecimal roomModelNum = idRoomModelNumMap.get(item.getVoyageId());
+            // 根据航次查询是否有营销政策(暂时包含当天)
+            Long policyNum = voyageStockDistributeNewMapper.selectIsPolicy(item.getVoyageId());
             VoyageStockDistributeNewPageRespVO respVO = new VoyageStockDistributeNewPageRespVO();
             respVO.setVoyageId(item.getVoyageId());
             respVO.setVoyageName(item.getVoyageName());
             respVO.setShipId(item.getShipId());
             respVO.setShipName(item.getShipName());
+            if(policyNum==0){
+                respVO.setIsPolicy(YesOrNoEnum.NO.getType());
+            }else{
+                respVO.setIsPolicy(YesOrNoEnum.YES.getType());
+            }
+            VoyageStockDistributeNewDetailReqVO detailReqVO = new VoyageStockDistributeNewDetailReqVO();
+            detailReqVO.setVoyageId(item.getVoyageId());
+            detailReqVO.setType(item.getType());
+            detailReqVO.setObjectId(reqVO.getObjectId());
+            detailReqVO.setShipId(item.getShipId());
+
             if(num != null) {
                 respVO.setNum(num);
                 respVO.setEnableShare(YesOrNoEnum.NO.getType());
+                detailReqVO.setEnableShare(YesOrNoEnum.NO.getType());
+                List<VoyageStockDistributeNewRespVO> distributorStockDetail = getDistributorStockDetail(detailReqVO);
+                respVO.setDistributeNewRespVOList(convertDistributeList(distributorStockDetail));
             }else {
                 respVO.setNum(item.getShareNum());
                 respVO.setEnableShare(YesOrNoEnum.YES.getType());
+                detailReqVO.setEnableShare(YesOrNoEnum.YES.getType());
+                List<VoyageStockDistributeNewRespVO> shareStockDetail = getShareStockDetail(detailReqVO);
+                respVO.setDistributeNewRespVOList(convertDistributeList(shareStockDetail));
             }
             if(roomModelNum != null) {
                 respVO.setRoomModelNum(roomModelNum);
@@ -246,6 +268,39 @@ public class VoyageStockDistributeNewServiceImpl implements VoyageStockDistribut
         return new PageResult<>(resultList, voyageStockPage.getTotal());
     }
 
+    private List<Map<String, Object>> convertDistributeList(List<VoyageStockDistributeNewRespVO> voList) {
+        List<Map<String, Object>> result = new ArrayList<>();
+
+        for (VoyageStockDistributeNewRespVO vo : voList) {
+            Map<String, Object> map = new HashMap<>();
+
+            // 1. 数值
+            map.put("num", vo.getNum());
+
+            // 2. 拼接 key
+            String roomModelId = String.valueOf(vo.getRoomModelId());
+            String floor = String.valueOf(vo.getFloor());
+            String key;
+
+            // ==================== 家庭套房特殊处理 ====================
+            if ("家庭套房".equals(vo.getRoomModelName())) {
+                key = "family_" + floor + "f";
+            }
+            // 家庭套房PRO
+            else if ("家庭套房PRO".equals(vo.getRoomModelName())) {
+                key = "family_pro_" + floor + "f";
+            }
+            // ==================== 普通房型规则 ====================
+            else {
+                key = "room_" + roomModelId + "_" + floor + "f";
+            }
+
+            map.put("key", key);
+            result.add(map);
+        }
+        return result;
+    }
+
     @Override
     public List<VoyageStockDistributeNewRespVO> getDetail(VoyageStockDistributeNewDetailReqVO reqVO) {
         Integer enableShare = reqVO.getEnableShare();

+ 8 - 0
ship-module-product/ship-module-product-biz/src/main/resources/mapper/voyage/VoyageMapper.xml

@@ -70,4 +70,12 @@
         group by b.voyage_id
     </select>
 
+    <select id="queryOrderVoyage" resultType="java.util.Map">
+        select distinct pv.boarding_address,pv.id voyageId from trade_order td
+            LEFT JOIN product_voyage pv ON td.voyage_id = pv.id
+            LEFT JOIN resource_route rr ON pv.route_id = rr.id
+        where DATE_FORMAT(td.travel_date, '%Y-%m-%d') = DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL (-#{day}) DAY), '%Y-%m-%d')
+          and td.deleted='0' and  td.order_status in (0,1,2,3,6,7,8,9,12,13,14,15) and rr.direction = #{direction}
+    </select>
+
 </mapper>

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

@@ -235,6 +235,7 @@ public class TradeOrderPageReqVO extends PageParam {
     private List<String> roomModelIds;
 
     private List<String> additiveIds;
+    private List<Long> categoryIds;
     private String floor;
 
     /**

+ 3 - 3
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/dal/mysql/order/TradeOrderMapper.java

@@ -251,11 +251,11 @@ public interface TradeOrderMapper extends BaseMapperX<TradeOrderDO> {
      */
     List<Long> selectCanBuyInsuranceOrder();
 
-    List<Map<String, Object>> queryOrderLink(@Param("day") int day,@Param("direction")int direction);
+    List<Map<String, Object>> queryOrderLink(@Param("day") int day,@Param("direction")int direction,@Param("voyageId")Long voyageId);
 
-    List<Map<String, Object>> queryOrderJzPhone(@Param("day") int day,@Param("direction")int direction);
+    List<Map<String, Object>> queryOrderJzPhone(@Param("day") int day,@Param("direction")int direction,@Param("voyageId")Long voyageId);
 
-    List<Map<String, Object>> queryOrderVisitorMobile(@Param("day") int day,@Param("direction") int direction);
+    List<Map<String, Object>> queryOrderVisitorMobile(@Param("day") int day,@Param("direction") int direction,@Param("voyageId")Long voyageId);
 
     List<Map<String, Object>> getTradeJz();
 

+ 1 - 1
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/job/OrderDownSmsOneJob.java

@@ -20,7 +20,7 @@ public class OrderDownSmsOneJob  implements JobHandler {
     public String execute(String s){
         log.info(">>>>>>>>>>>>>>>>>>>>>> OrderDownSmsOneJob Begin <<<<<<<<<<<<<<<<<<<<<<");
         try {
-            smsSendconfigService.upSmsSendMsg(2,"SMS_505150033",1);
+            smsSendconfigService.upSmsSendMsg(2,"SMS_505445105",1);
         } catch (Exception e) {
             log.error(">>>>>>>>>>>>>>>>>>>>>> OrderDownSmsOneJob Error <<<<<<<<<<<<<<<<<<<<<<");
             log.error(e.getMessage(), e);

+ 16 - 1
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/order/impl/TradeOrderServiceImpl.java

@@ -22,6 +22,9 @@ import com.yc.ship.framework.mybatis.core.util.MyBatisUtils;
 import com.yc.ship.framework.security.core.LoginUser;
 import com.yc.ship.module.ota.api.OtaDistributorApi;
 import com.yc.ship.module.ota.api.dto.DistributorProductRespDTO;
+import com.yc.ship.module.ota.dal.dataobject.distributorcategory.DistributorCategoryDO;
+import com.yc.ship.module.ota.dal.mysql.distributorcategory.DistributorCategoryHisMapper;
+import com.yc.ship.module.ota.dal.mysql.distributorcategory.DistributorCategoryMapper;
 import com.yc.ship.module.product.api.ProductApi;
 import com.yc.ship.module.product.api.dto.*;
 import com.yc.ship.module.product.enums.ProductTypeEnum;
@@ -154,7 +157,10 @@ public class TradeOrderServiceImpl implements TradeOrderService {
 
     @Resource
     private ConfigUtils configUtils;
-
+    @Resource
+    private DistributorCategoryHisMapper distributorCategoryHisMapper;
+    @Resource
+    private DistributorCategoryMapper distributorCategoryMapper;
 
     @Override
     public PageResult<TradeOrderRespVO> getPlatOrderPage(TradeOrderPageReqVO pageReqVO) {
@@ -166,6 +172,15 @@ public class TradeOrderServiceImpl implements TradeOrderService {
         if (agencyLoginUser.getStoreId() != null) {
             pageReqVO.setStoreId(agencyLoginUser.getStoreId());
         }
+        // 当前用户分销商分组
+        List<DistributorCategoryDO> distributorCategoryList = distributorCategoryMapper.selectList(DistributorCategoryDO::getUserId, agencyLoginUser.getId());
+        if(!distributorCategoryList.isEmpty()){
+            List<Long> idList = distributorCategoryList.stream()
+                    .map(DistributorCategoryDO::getId) // 提取 id 字段
+                    .filter(Objects::nonNull) // 过滤掉 null(可选,建议加上)
+                    .collect(Collectors.toList());
+            pageReqVO.setCategoryIds(idList);
+        }
         //当前用户角色
         List<Long> currentRoleList = roleApi.getCurrentRoleList();
         log.info("查询TradeOrder任务开始时间{}", LocalDateTime.now());

+ 58 - 45
ship-module-trade/ship-module-trade-biz/src/main/java/com/yc/ship/module/trade/service/smsSendconfig/SmsSendconfigServiceImpl.java

@@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.core.toolkit.IdWorker;
 import com.yc.ship.framework.common.pojo.PageResult;
 import com.yc.ship.framework.common.util.object.BeanUtils;
 import com.yc.ship.framework.mybatis.core.util.MyBatisUtils;
+import com.yc.ship.module.product.dal.mysql.voyage.VoyageMapper;
 import com.yc.ship.module.system.dal.dataobject.dict.DictDataDO;
 import com.yc.ship.module.system.dal.dataobject.sms.SmsTemplateDO;
 import com.yc.ship.module.system.dal.mysql.dict.DictDataMapper;
@@ -79,6 +80,8 @@ public class SmsSendconfigServiceImpl implements SmsSendconfigService {
     private SmsTemplateMapper smsTemplateMapper;
     @Resource
     private DictDataMapper dictDataMapper;
+    @Resource
+    private VoyageMapper voyageMapper;
 
     @Override
     public Long createSmsSendconfig(SmsSendconfigSaveReqVO createReqVO) {
@@ -311,55 +314,65 @@ public class SmsSendconfigServiceImpl implements SmsSendconfigService {
     @Override
     @Async
     public void upSmsSendMsg(int type, String code, int day) {
-        // 查询订单联系人
-        List<Map<String,Object>> linkList = tradeOrderMapper.queryOrderLink(day,type);
-        // 查询接站登记人
-        List<Map<String,Object>> jzPhoneList = tradeOrderMapper.queryOrderJzPhone(day,type);
-        // 查询订单游客电话
-        List<Map<String,Object>> visitorMobileList = tradeOrderMapper.queryOrderVisitorMobile(day,type);
-        // 查询短信配置
-        SmsTemplateDO smsTemplateDO = smsTemplateMapper.selectByCode(code);
-        // 合并两个列表并去重
-        Set<String> phoneSet = new HashSet<>();
-        Map<String, Map<String, Object>> phoneDataMap = new HashMap<>();
-        processPhoneList(linkList, "link_mobile", phoneSet, phoneDataMap);
-        processPhoneList(jzPhoneList, "phone", phoneSet, phoneDataMap);
-        processPhoneList(visitorMobileList, "mobile", phoneSet, phoneDataMap);
-
-        List<String> phoneList = new ArrayList<>(phoneSet);
-        List<String> params = smsTemplateDO.getParams();// ["【pick】","【time】"]
-        Map<String, Object> templateParams = new HashMap<>();
-        if(type == 1){
-            // 上水
-            // 获取上水抵达三峡游客中心 查询数据字典
-            List<DictDataDO> arriveDataLis = dictDataMapper.selectListByStatusAndDictType(0, "up_arrive");
-            if(day == 1){
-                // 获取上水登船时间 查询数据字典
-                List<DictDataDO> dictDataList = dictDataMapper.selectListByStatusAndDictType(0, "up_board");
-                templateParams.put(params.get(0), dictDataList.get(0).getLabel());
-                templateParams.put(params.get(1), arriveDataLis.get(0).getLabel());
-            }else{
-                templateParams.put(params.get(0), DateUtil.format(DateUtil.offsetDay(new Date(), day), "yyyy年MM月dd日"));
-                templateParams.put(params.get(1), arriveDataLis.get(0).getLabel());
-            }
-        }else{
-            // 下水
-            if(day == 1){
-                // 获取下水登船时间 查询数据字典
-                List<DictDataDO> dictDataList = dictDataMapper.selectListByStatusAndDictType(0, "down_board");
-                templateParams.put(params.get(0), dictDataList.get(0).getLabel());
-            }else{
-                templateParams.put(params.get(0), DateUtil.format(DateUtil.offsetDay(new Date(), day), "yyyy年MM月dd日"));
-            }
-        }
-        if(CollectionUtil.isNotEmpty(phoneList)){
-            for(String phone : phoneList){
+        // 获取航次信息
+        List<Map<String,Object>> voyageList = voyageMapper.queryOrderVoyage(day,type);
+        if(CollectionUtil.isNotEmpty(voyageList)){
+            for(Map<String,Object> voyageMap: voyageList){
+                // 查询订单联系人
+                List<Map<String,Object>> linkList = tradeOrderMapper.queryOrderLink(day,type,(Long)voyageMap.get("voyageId"));
+                // 查询接站登记人
+                List<Map<String,Object>> jzPhoneList = tradeOrderMapper.queryOrderJzPhone(day,type,(Long)voyageMap.get("voyageId"));
+                // 查询订单游客电话
+                List<Map<String,Object>> visitorMobileList = tradeOrderMapper.queryOrderVisitorMobile(day,type,(Long)voyageMap.get("voyageId"));
+                // 查询短信配置
+                SmsTemplateDO smsTemplateDO = smsTemplateMapper.selectByCode(code);
+                // 合并两个列表并去重
+                Set<String> phoneSet = new HashSet<>();
+                Map<String, Map<String, Object>> phoneDataMap = new HashMap<>();
+                processPhoneList(linkList, "link_mobile", phoneSet, phoneDataMap);
+                processPhoneList(jzPhoneList, "phone", phoneSet, phoneDataMap);
+                processPhoneList(visitorMobileList, "mobile", phoneSet, phoneDataMap);
+
+                List<String> phoneList = new ArrayList<>(phoneSet);
+                List<String> params = smsTemplateDO.getParams();// ["【pick】","【time】"]
+                Map<String, Object> templateParams = new HashMap<>();
+                if(type == 1){
+                    // 上水
+                    // 获取上水抵达三峡游客中心 查询数据字典
+                    List<DictDataDO> arriveDataLis = dictDataMapper.selectListByStatusAndDictType(0, "up_arrive");
+                    if(day == 1){
+                        // 获取上水登船时间 查询数据字典
+                        List<DictDataDO> dictDataList = dictDataMapper.selectListByStatusAndDictType(0, "up_board");
+                        templateParams.put(params.get(0), dictDataList.get(0).getLabel());
+                        templateParams.put(params.get(1), arriveDataLis.get(0).getLabel());
+                    }else{
+                        templateParams.put(params.get(0), DateUtil.format(DateUtil.offsetDay(new Date(), day), "yyyy年MM月dd日"));
+                        templateParams.put(params.get(1), arriveDataLis.get(0).getLabel());
+                    }
+                }else{
+                    // 下水
+                    if(day == 1){
+                        // 获取下水登船时间 查询数据字典
+                        List<DictDataDO> dictDataList = dictDataMapper.selectListByStatusAndDictType(0, "down_board");
+                        templateParams.put(params.get(1), dictDataList.get(0).getLabel());
+                    }else{
+                        templateParams.put(params.get(0), DateUtil.format(DateUtil.offsetDay(new Date(), day), "yyyy年MM月dd日"));
+                    }
+                }
+                if(CollectionUtil.isNotEmpty(phoneList)){
+                    for(String phone : phoneList){
+                        if(type == 2 && day == 1){
+                            templateParams.put(params.get(0),voyageMap.get("boarding_address"));
+                        }
 //                log.info("【短信发送】:phone:{}", phone);
 //                log.info("【短信发送】:templateParams:{}", templateParams);
-                smsSendService.sendSingleSmsToAdmin(phone, null, smsTemplateDO.getId(), templateParams);
-            }
+                        smsSendService.sendSingleSmsToAdmin(phone, null, smsTemplateDO.getId(), templateParams);
+                    }
 //            smsSendService.sendSingleSmsToAdmin("18071246889", null, smsTemplateDO.getId(), templateParams);
+                }
+            }
         }
+
     }
 
     private void processPhoneList(List<Map<String, Object>> dataList, String phoneKey,

+ 19 - 5
ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/order/TradeOrderMapper.xml

@@ -504,6 +504,17 @@
         LEFT JOIN trade_detail tdl ON td.id = tdl.order_id AND tdl.deleted = 0
         LEFT JOIN product_spu ps ON ps.id = tdl.product_id and ps.deleted=0
         LEFT JOIN ota_distributor od ON od.id = td.source_id and od.deleted=0
+
+        <if test="vo.categoryIds != null and vo.categoryIds.size() > 0">
+            INNER JOIN ota_distributor_category_his his
+            ON his.distributor_id = od.id
+            AND his.deleted = 0
+            AND td.create_time <![CDATA[ >= ]]> his.start_time
+            AND td.create_time <![CDATA[ <= ]]> IFNULL(his.end_time, NOW())
+            AND his.ota_category_id IN
+            <foreach collection="vo.categoryIds" item="item" open="(" separator="," close=")">#{item}</foreach>
+        </if>
+
         LEFT JOIN trade_order_room_model torm ON torm.order_id = td.id and torm.deleted=0
         WHERE td.deleted = 0
 
@@ -1597,12 +1608,12 @@
         <if test="vo.otaId != null and vo.otaId != ''">
             AND td.source_id = #{vo.otaId}
         </if>
-        <if test="vo.otaIds != null and vo.otaIds.size()>0">
+        <!--<if test="vo.otaIds != null and vo.otaIds.size()>0">
             AND td.source_id IN
             <foreach collection="vo.otaIds" item="item" separator="," open="(" close=")">
                 #{item}
             </foreach>
-        </if>
+        </if>-->
         <if test="vo.otaCateIds!=null and vo.otaCateIds.size()>0">
             and od.ota_category_id in
             <foreach collection="vo.otaCateIds" item="item" separator=","  open="(" close=")">
@@ -2915,7 +2926,8 @@
                                                 LEFT JOIN product_voyage pv ON td.voyage_id = pv.id
                                                 LEFT JOIN resource_route rr ON pv.route_id = rr.id
         where DATE_FORMAT(td.travel_date, '%Y-%m-%d') = DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL (-#{day}) DAY), '%Y-%m-%d')
-          and td.deleted='0' and td.link_mobile is not null and td.order_status in (0,1,2,3,6,7,8,9,12,13,14,15) and rr.direction = #{direction}
+          and td.deleted='0' and td.link_mobile is not null and td.order_status in (0,1,2,3,6,7,8,9,12,13,14,15)
+          and rr.direction = #{direction} and td.voyage_id = #{voyageId}
     </select>
 
     <select id="queryOrderJzPhone" resultType="java.util.Map">
@@ -2925,7 +2937,8 @@
                                            LEFT JOIN product_voyage pv ON td.voyage_id = pv.id
                                            LEFT JOIN resource_route rr ON pv.route_id = rr.id
         where DATE_FORMAT(td.travel_date, '%Y-%m-%d') = DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL (-#{day}) DAY), '%Y-%m-%d')
-          and td.deleted='0' and tzd.phone is not null and td.order_status in (0,1,2,3,6,7,8,9,12,13,14,15) and rr.direction = #{direction}
+          and td.deleted='0' and tzd.phone is not null and td.order_status in (0,1,2,3,6,7,8,9,12,13,14,15)
+          and rr.direction = #{direction} and td.voyage_id = #{voyageId}
     </select>
 
     <select id="queryOrderVisitorMobile" resultType="java.util.Map">
@@ -2934,7 +2947,8 @@
                                            LEFT JOIN product_voyage pv ON td.voyage_id = pv.id
                                            LEFT JOIN resource_route rr ON pv.route_id = rr.id
         where DATE_FORMAT(td.travel_date, '%Y-%m-%d') = DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL (-#{day}) DAY), '%Y-%m-%d')
-          and td.deleted='0' and (tv.mobile is not null and tv.mobile !='') and tv.deleted='0' and td.order_status in (0,1,2,3,6,7,8,9,12,13,14,15) and rr.direction = #{direction}
+          and td.deleted='0' and (tv.mobile is not null and tv.mobile !='') and tv.deleted='0'
+          and td.order_status in (0,1,2,3,6,7,8,9,12,13,14,15) and rr.direction = #{direction} and td.voyage_id = #{voyageId}
 
     </select>
     <select id="getTradeJz" resultType="java.util.Map">

+ 2 - 2
ship-module-trade/ship-module-trade-biz/src/main/resources/mapper/report/OpsDailyMapper.xml

@@ -13,9 +13,9 @@
         r.name AS route,
         v.name AS voyageNo,
         s.capacity AS passengerCapacity,
-        COALESCE(tv.passengerCount, 0) AS passengerCount,
+        COALESCE(sum(tv.passengerCount), 0) AS passengerCount,
         COALESCE(rr.totalRooms, 0) AS totalRooms,
-        CAST(COALESCE(SUM(rm.usedRooms), 0) AS SIGNED) AS usedRooms,
+        COALESCE(SUM(rm.usedRooms), 0) AS usedRooms,
         COALESCE(inc.ticketIncome, 0) AS ticketIncome,
         0 AS secondIncome
         FROM product_voyage v