lmx 6 dní pred
rodič
commit
a91443d0d2

+ 4 - 0
fs-common/src/main/java/com/fs/common/constant/Constants.java

@@ -188,4 +188,8 @@ public class Constants
      * 发送短信
      */
     public static final String SEND_MSG = "sendMsg";
+    /**
+     * CID 执行下一个 roboticID+ calleesId
+     */
+    public static final String CID_NEXT_TASK_ID = "cid:next:task:";
 }

+ 2 - 0
fs-service/src/main/java/com/fs/company/service/impl/CompanyVoiceRoboticServiceImpl.java

@@ -183,6 +183,8 @@ public class CompanyVoiceRoboticServiceImpl extends ServiceImpl<CompanyVoiceRobo
         companyVoiceRobotic.setTaskId(result.getTaskID());
         companyVoiceRobotic.setTaskName(result.getTaskName());
         companyVoiceRoboticMapper.updateById(companyVoiceRobotic);
+        //todo 是否设置时间
+
         return result;
     }
 

+ 57 - 4
fs-wx-task/src/main/java/com/fs/app/service/WxTaskService.java

@@ -5,6 +5,7 @@ import cn.hutool.json.JSONUtil;
 import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.fs.common.constant.Constants;
+import com.fs.common.constant.FsConstants;
 import com.fs.common.core.redis.RedisCacheT;
 import com.fs.common.utils.PubFun;
 import com.fs.common.utils.StringUtils;
@@ -27,14 +28,16 @@ import com.fs.wxcid.service.FriendService;
 import com.fs.wxcid.vo.AddContactVo;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
 import org.springframework.stereotype.Service;
 
 import java.time.LocalDateTime;
 import java.time.temporal.ChronoUnit;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.RunnableFuture;
+import java.util.concurrent.TimeUnit;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
@@ -54,6 +57,8 @@ public class WxTaskService {
     private final CompanyVoiceRoboticMapper companyVoiceRoboticMapper;
     private final RedisCacheT<String> redisCache;
 
+    private RedissonClient redissonClient;
+
     public void addWx(List<Long> accountIdList) {
         log.info("==========执行加微信任务开始==========");
         String json = sysConfigService.selectConfigByKey("wx.config");
@@ -206,4 +211,52 @@ public class WxTaskService {
         });
         log.info("===========CID任务执行完成===========");
     }
+
+    /**
+     * 单个任务执行
+     * @param roboticId
+     * @param callerId
+     */
+    public void cellRunOne(Long roboticId,Long callerId){
+        //todo 跑单个任务的下一个任务
+    }
+
+    /**
+     * 调用下一个任务
+     */
+    public void callNextTask(){
+        //
+        RLock lock = redissonClient.getLock("CID_CALL_NEXT_TASK");
+        try{
+            lock.lock();
+            long l = System.currentTimeMillis();
+            Collection<String> keys = redisCache.keys(Constants.CID_NEXT_TASK_ID + "*");
+            keys.forEach(key -> {
+                String[] keyArr = key.split(":");
+                String taskId = keyArr[keyArr.length - 2];
+                String callerId = keyArr[keyArr.length - 1];
+                Long runTime =Long.valueOf(redisCache.getCacheObject(key));
+                //到了该执行时间
+                if(runTime.compareTo(l) <= 0){
+                    //得到待执行任务
+                    CompletableFuture<Void> future = CompletableFuture.runAsync(() -> {
+                        this.cellRunOne(Long.valueOf(taskId), Long.valueOf(callerId));
+                    }).thenRun(() -> {
+                        redisCache.deleteObject(key);
+                    }).exceptionally(throwable -> {
+                        log.error("单项任务执行或删除失败,taskId: {}", taskId, throwable);
+                        return null;
+                    });
+                }
+            });
+
+        }catch (Exception ex){
+            log.error("CID任务自动调用调用下一个任务失败", ex);
+        } finally {
+            if(lock.isHeldByCurrentThread()){
+                lock.unlock();
+            }
+        }
+
+    }
 }

+ 4 - 0
fs-wx-task/src/main/java/com/fs/app/task/WxTask.java

@@ -37,4 +37,8 @@ public class WxTask {
     public void cellRun() {
         taskService.cellRun();
     }
+    @Scheduled(cron = "0 0/1 * * * ?")
+    public void callNextTask(){
+        taskService.callNextTask();
+    }
 }