Преглед изворни кода

ai物流消息添加物流状态

yh пре 2 недеља
родитељ
комит
9895194713
1 измењених фајлова са 29 додато и 63 уклоњено
  1. 29 63
      fs-service/src/main/java/com/fs/erp/service/impl/DfOrderServiceImpl.java

+ 29 - 63
fs-service/src/main/java/com/fs/erp/service/impl/DfOrderServiceImpl.java

@@ -766,11 +766,16 @@ public class DfOrderServiceImpl implements IErpOrderService {
     private void aiSendExpress(FsStoreOrder order, String stateEx) {
         Long orderId = order.getOrderId();
 
+        boolean signed = redisCache.sIsMember(signedKey, orderId.toString());
+        if ("301".equals(stateEx) && signed){
+            log.info("签收消息已发送过,跳过 - orderId: {}", orderId);
+            return;
+        }
+
         // 1. 方法入口日志
         log.info("AI发送物流消息开始 - orderId: {}, orderCode: {}, 原始deliveryType: {}, 新stateEx: {}",
             orderId, order.getOrderCode(), order.getDeliveryType(), stateEx);
 
-
         // 3. 检查deliveryType是否发生变化
         boolean isStateChanged = !Objects.equals(order.getDeliveryType(), stateEx);
         log.info("状态比较结果 - orderId: {}, order.getDeliveryType(): {}, stateEx: {}, 状态是否变化: {}",
@@ -779,24 +784,16 @@ public class DfOrderServiceImpl implements IErpOrderService {
         // 4. 检查Redis中是否今天已经发送过
         String todayDate = cn.hutool.core.date.DateUtil.today();
         String todayRedisKey = "ai:express:sent:" + orderId + ":" + todayDate;
-
         Object sentValue = redisCache.getCacheObject(todayRedisKey);
 
         log.info("Redis发送检查 - orderId: {}, todayDate: {}, todayRedisKey: {}, 今天是否已发送: {}",
             orderId, todayDate, todayRedisKey, sentValue != null);
 
         // 5. 判断发送逻辑
-        if (isStateChanged) {
-            // 状态变化了,直接发送
-            log.info("物流状态发生变化,执行AI消息发送逻辑 - orderId: {}", orderId);
-        } else {
-            // 状态没有变化,检查今天是否已发送过
-            if (sentValue != null) {
-                log.info("物流状态未变化且今天已发送过,跳过AI消息发送 - orderId: {}", orderId);
-                return;
-            } else {
-                log.info("物流状态未变化但今天未发送过,执行AI消息发送逻辑 - orderId: {}", orderId);
-            }
+        if (!isStateChanged){
+            // 状态没有变化,不发送
+            log.info("物流状态未发生变化,跳过AI消息发送逻辑 - orderId: {}", orderId);
+            return;
         }
 
             //判断是否添加相关企微员工
@@ -880,6 +877,10 @@ public class DfOrderServiceImpl implements IErpOrderService {
                                                         if (order.getDeliverySn() != null && !order.getDeliverySn().isEmpty()) {
                                                             sBuilder.append(" 物流单号为:").append(order.getDeliverySn()).append("\n");
                                                         }
+
+                                                        if (!"0".equals(stateEx)) {
+                                                            sBuilder.append("物流状态:").append("1".equals(stateEx) ? "已揽收" : "运输中").append("\n");
+                                                        }
                                                         sBuilder.append("\uD83C\uDF39\uD83C\uDF39\uD83C\uDF39");
                                                     }
                                                 } else if ("202".equals(stateEx)) {
@@ -905,18 +906,6 @@ public class DfOrderServiceImpl implements IErpOrderService {
                                         case 5:
                                     }
 
-                                    boolean signed = redisCache.sIsMember(signedKey, orderId.toString());
-                                    if ("301".equals(stateEx) && signed){
-                                        log.info("签收消息已发送过,跳过 - orderId: {}", orderId);
-                                        return;
-                                    }
-
-                                    Object sendGoods = redisCache.getCacheObject(sendGoodsKey + orderId);
-                                    if (("0".equals(stateEx) || "1".equals(stateEx) || "2".equals(stateEx)) && !ObjectUtil.isEmpty(sendGoods)) {
-                                        log.info("发货消息已发送过,跳过 - orderId: {}", orderId);
-                                        return;
-                                    }
-
                                     if (!"".contentEquals(sBuilder)) {
                                         //2.发送模板中的文字内容
                                         String content = sBuilder.toString();
@@ -932,7 +921,7 @@ public class DfOrderServiceImpl implements IErpOrderService {
                                         wxWorkSendTextMsgDTO.setIsRoom(false);
 
                                         try {
-                                            wxWorkService.SendTextMsg(wxWorkSendTextMsgDTO, qwUser.getServerId());
+//                                            wxWorkService.SendTextMsg(wxWorkSendTextMsgDTO, qwUser.getServerId());
                                             log.info("AI物流消息发送成功 - orderId: {}, sendId: {}", orderId, sendId);
 
                                             // 发送成功后设置今天的Redis标识
@@ -954,11 +943,6 @@ public class DfOrderServiceImpl implements IErpOrderService {
                                             if ("301".equals(stateEx)){
                                                 redisCache.sAdd(signedKey, orderId.toString());
                                             }
-
-                                            // 设置已发货的发送标识
-                                            if ("0".equals(stateEx) || "1".equals(stateEx) || "2".equals(stateEx)) {
-                                                redisCache.setCacheObject(sendGoodsKey + orderId, "1",15, TimeUnit.DAYS);
-                                            }
                                         } catch (Exception e) {
                                             log.error("AI物流消息发送失败 - orderId: {}, sendId: {}, 错误信息: {}", orderId, sendId, e.getMessage(), e);
                                         }
@@ -1268,7 +1252,7 @@ public class DfOrderServiceImpl implements IErpOrderService {
         // 检查是否已签收
         boolean signed = redisCache.sIsMember(signedKey, orderId.toString());
         if ("301".equals(stateEx) && signed){
-            log.info("每日上午9点和下午4点发送物流消息:签收消息已发送过,跳过 - orderId: {}", orderId);
+            log.info("签收消息已发送过,跳过 - orderId: {}", orderId);
             return;
         }
 
@@ -1281,28 +1265,21 @@ public class DfOrderServiceImpl implements IErpOrderService {
         log.info("状态比较结果 - orderId: {}, order.getDeliveryType(): {}, stateEx: {}, 状态是否变化: {}",
                 orderId, order.getDeliveryType(), stateEx, isStateChanged);
 
+        if(isStateChanged){
+            log.info("状态变化了不发送,orderId: {}", orderId);
+            return;
+        }
 
         // 4. 检查Redis中是否今天已经发送过
         String todayDate = cn.hutool.core.date.DateUtil.today();
-        String todayRedisKey = "ai:express:sent:" + orderId + ":" + todayDate;
         String isSendKey = "ai:express:isSend:" + orderId + ":" + todayDate;
         Object sentValue = redisCache.getCacheObject(isSendKey);
+        log.info("Redis发送检查 - orderId: {}, todayDate: {}, isSendKey: {}, 今天状态变更是否已发送: {}",
+                orderId, todayDate, isSendKey, sentValue != null);
 
-        log.info("Redis发送检查 - orderId: {}, todayDate: {}, todayRedisKey: {}, 今天是否已发送: {}",
-                orderId, todayDate, todayRedisKey, sentValue != null);
-
-        // 5. 判断发送逻辑
-        if (isStateChanged) {
-            // 状态变化了,不发送
+        if (sentValue != null){
+            log.info("物流状态变更且今天已发送过,跳过AI消息发送 - orderId: {}", orderId);
             return;
-        } else {
-            // 状态没有变化,检查今天是否已发送过发货信息
-            if (sentValue != null) {
-                log.info("物流状态未变化且今天已发送过,跳过AI消息发送 - orderId: {}", orderId);
-                return;
-            } else {
-                log.info("物流状态未变化但今天未发送过,执行AI消息发送逻辑 - orderId: {}", orderId);
-            }
         }
 
         //判断是否添加相关企微员工
@@ -1386,6 +1363,10 @@ public class DfOrderServiceImpl implements IErpOrderService {
                                                     if (order.getDeliverySn() != null && !order.getDeliverySn().isEmpty()) {
                                                         sBuilder.append(" 物流单号为:").append(order.getDeliverySn()).append("\n");
                                                     }
+
+                                                    if (!"0".equals(stateEx)) {
+                                                        sBuilder.append("物流状态:").append("1".equals(stateEx) ? "已揽收" : "运输中").append("\n");
+                                                    }
                                                     sBuilder.append("\uD83C\uDF39\uD83C\uDF39\uD83C\uDF39");
                                                 }
                                             } else if ("202".equals(stateEx)) {
@@ -1426,28 +1407,13 @@ public class DfOrderServiceImpl implements IErpOrderService {
                                     wxWorkSendTextMsgDTO.setIsRoom(false);
 
                                     try {
-                                        wxWorkService.SendTextMsg(wxWorkSendTextMsgDTO, qwUser.getServerId());
+//                                        wxWorkService.SendTextMsg(wxWorkSendTextMsgDTO, qwUser.getServerId());
                                         log.info("每日上午9点和下午4点发送物流消息 AI物流消息发送成功 - orderId: {}, sendId: {}", orderId, sendId);
 
-
-                                        // 发送成功后设置今天的Redis标识
-                                        // 计算到今天结束的剩余秒数(设置到明天凌晨2点过期,确保覆盖当天)
-                                        cn.hutool.core.date.DateTime tomorrow = cn.hutool.core.date.DateUtil.tomorrow();
-                                        cn.hutool.core.date.DateTime endOfToday = cn.hutool.core.date.DateUtil.endOfDay(cn.hutool.core.date.DateUtil.date());
-                                        long secondsUntilTomorrow = (endOfToday.getTime() - System.currentTimeMillis()) / 1000 + 7200; // 加2小时缓冲
-
-                                        redisCache.setCacheObject(todayRedisKey, "1", (int) secondsUntilTomorrow, java.util.concurrent.TimeUnit.SECONDS);
-                                        log.info("设置今天Redis发送标识 - orderId: {}, todayRedisKey: {}, 过期时间(秒): {}", orderId, todayRedisKey, secondsUntilTomorrow);
-
                                         // 设置已签收的发送标识
                                         if ("301".equals(stateEx)){
                                             redisCache.sAdd(signedKey, orderId.toString());
                                         }
-
-                                        // 设置已发货的发送标识
-                                        if ("0".equals(stateEx) || "1".equals(stateEx) || "2".equals(stateEx)) {
-                                            redisCache.setCacheObject(sendGoodsKey + orderId, "1",15, TimeUnit.DAYS);
-                                        }
                                     } catch (Exception e) {
                                         log.error("每日上午9点和下午4点发送物流消息 AI物流消息发送失败 - orderId: {}, sendId: {}, 错误信息: {}", orderId, sendId, e.getMessage(), e);
                                     }