소스 검색

修改统计

YPZ 3 주 전
부모
커밋
a2f24d5bd0

+ 4 - 0
java/storlead-sasa/storlead-trade/src/main/java/com/storlead/trade/entity/MarketingCampaignSopDetailEntity.java

@@ -52,4 +52,8 @@ public class MarketingCampaignSopDetailEntity extends SysBaseField implements Se
     @ApiModelProperty(value = "触达渠道")
     @TableField("type")
     private String type;
+
+    @ApiModelProperty(value = "是否已执行(不写库,由 beginData + days 计算)")
+    @TableField(exist = false)
+    private Boolean executed;
 }

+ 7 - 7
java/storlead-sasa/storlead-trade/src/main/java/com/storlead/trade/service/impl/MarketEmailsServiceImpl.java

@@ -561,7 +561,7 @@ public class MarketEmailsServiceImpl extends MyBaseServiceImpl<MarketEmailsMappe
             }
         }
         // 保护时间 DESC 排序
-        List<com.storlead.trade.vo.MarketEmailsProtectVO> voList = new java.util.ArrayList<>(aggMap.values());
+        List<MarketEmailsProtectVO> voList = new java.util.ArrayList<>(aggMap.values());
         voList.sort((a, b) -> {
             if (a.getProtectTime() == null && b.getProtectTime() == null) return 0;
             if (a.getProtectTime() == null) return 1;
@@ -571,21 +571,21 @@ public class MarketEmailsServiceImpl extends MyBaseServiceImpl<MarketEmailsMappe
 
         // 批量回填客户名
         if (!voList.isEmpty()) {
-            java.util.Set<Long> customerIdSet = new java.util.LinkedHashSet<>();
-            for (com.storlead.trade.vo.MarketEmailsProtectVO v : voList) {
+            Set<Long> customerIdSet = new LinkedHashSet<>();
+            for (MarketEmailsProtectVO v : voList) {
                 if (v.getCustomerId() != null) customerIdSet.add(v.getCustomerId());
             }
             if (!customerIdSet.isEmpty()) {
                 try {
-                    java.util.List<com.storlead.trade.entity.CustomerEntity> customers =
-                            customerTradeService.listByIds(new java.util.ArrayList<>(customerIdSet));
-                    java.util.Map<Long, com.storlead.trade.entity.CustomerEntity> customerMap = new java.util.HashMap<>();
+                    List<CustomerEntity> customers =
+                            customerTradeService.listByIds(new ArrayList<>(customerIdSet));
+                    Map<Long, CustomerEntity> customerMap = new HashMap<>();
                     if (!CollectionUtils.isEmpty(customers)) {
                         for (com.storlead.trade.entity.CustomerEntity c : customers) {
                             if (c.getId() != null) customerMap.put(c.getId(), c);
                         }
                     }
-                    for (com.storlead.trade.vo.MarketEmailsProtectVO v : voList) {
+                    for (MarketEmailsProtectVO v : voList) {
                         com.storlead.trade.entity.CustomerEntity c = customerMap.get(v.getCustomerId());
                         if (c != null) {
                             v.setCustomerName(c.getCustomerName());

+ 26 - 0
java/storlead-sasa/storlead-trade/src/main/java/com/storlead/trade/service/impl/MarketingCampaignServiceImpl.java

@@ -258,6 +258,32 @@ public class MarketingCampaignServiceImpl
         wrapper.eq(MarketingCampaignSopDetailEntity::getIsDelete, CommonConstant.DEL_FLAG_0);
         List<MarketingCampaignSopDetailEntity> relationList = marketingCampaignSopDetailService.list(wrapper);
 
+        // 2.0 计算每个 SOP 步骤是否已执行:开始日期 + 间隔天数 <= 今天 → 已执行
+        LocalDate todayForSop = LocalDate.now(ZoneId.of("Asia/Shanghai"));
+        LocalDate beginData = campaign.getBeginData();
+        if (beginData != null && !CollectionUtils.isEmpty(relationList)) {
+            for (MarketingCampaignSopDetailEntity sop : relationList) {
+                String daysStr = sop.getDays();
+                if (daysStr != null && !daysStr.trim().isEmpty()) {
+                    try {
+                        int days = Integer.parseInt(daysStr.trim());
+                        LocalDate executeDate = beginData.plusDays(days);
+                        sop.setExecuted(!todayForSop.isBefore(executeDate));
+                    } catch (NumberFormatException e) {
+                        sop.setExecuted(false);
+                    }
+                } else {
+                    // days 为空:开始当天即执行
+                    sop.setExecuted(!todayForSop.isBefore(beginData));
+                }
+            }
+        } else if (!CollectionUtils.isEmpty(relationList)) {
+            // beginData 为空,全部标记为未执行
+            for (MarketingCampaignSopDetailEntity sop : relationList) {
+                sop.setExecuted(false);
+            }
+        }
+
         // 2. 查询关联的客户详情列表(通过中间表)
         LambdaQueryWrapper<CustomerBaseEntity> customerBaseEntityLambdaQueryWrapper = new LambdaQueryWrapper<>();
         customerBaseEntityLambdaQueryWrapper.eq(CustomerBaseEntity::getMarketingCampaignId, id);