ソースを参照

修改物流签收后,消息只发一次

yh 6 時間 前
コミット
1baa2e085f

+ 11 - 0
fs-common/src/main/java/com/fs/common/core/redis/RedisCache.java

@@ -484,4 +484,15 @@ public class RedisCache
     public boolean hasKey(String key) {
         return Boolean.TRUE.equals(redisTemplate.hasKey(key));
     }
+
+    // 判断集合中是否存在元素
+    public boolean sIsMember(String key, Object value) {
+        return Boolean.TRUE.equals(redisTemplate.opsForSet().isMember(key, value));
+    }
+
+    // 添加元素到集合
+    public void sAdd(String key, Object value) {
+        redisTemplate.opsForSet().add(key, value);
+    }
+
 }

+ 13 - 0
fs-service/src/main/java/com/fs/erp/service/impl/DfOrderServiceImpl.java

@@ -171,6 +171,8 @@ public class DfOrderServiceImpl implements IErpOrderService {
     @Autowired
     private FsStoreServiceImpl fsStoreServiceImpl;
 
+    private final String signedKey = "ai:express:signed:sent:";
+
     @Override
     public ErpOrderResponse addOrder(ErpOrder order) {
         if (!Objects.isNull(order.getIsIntegralOrder()) && order.getIsIntegralOrder())
@@ -900,6 +902,13 @@ public class DfOrderServiceImpl implements IErpOrderService {
                                         case 4:
                                         case 5:
                                     }
+
+                                    boolean signed = redisCache.sIsMember(signedKey, orderId.toString());
+                                    if ("301".equals(stateEx) && signed){
+                                        log.info("签收消息已发送过,跳过 - orderId: {}", orderId);
+                                        return;
+                                    }
+
                                     if (!"".contentEquals(sBuilder)) {
                                         //2.发送模板中的文字内容
                                         String content = sBuilder.toString();
@@ -927,6 +936,10 @@ public class DfOrderServiceImpl implements IErpOrderService {
                                             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());
+                                            }
                                         } catch (Exception e) {
                                             log.error("AI物流消息发送失败 - orderId: {}, sendId: {}, 错误信息: {}", orderId, sendId, e.getMessage(), e);
                                         }