|
@@ -14,7 +14,6 @@ import com.fs.qw.mapper.QwIpadServerMapper;
|
|
import com.fs.qw.mapper.QwUserMapper;
|
|
import com.fs.qw.mapper.QwUserMapper;
|
|
import com.fs.qw.service.impl.AsyncSopTestService;
|
|
import com.fs.qw.service.impl.AsyncSopTestService;
|
|
import com.fs.qw.vo.QwSopCourseFinishTempSetting;
|
|
import com.fs.qw.vo.QwSopCourseFinishTempSetting;
|
|
-import com.fs.qw.vo.QwSopTempSetting;
|
|
|
|
import com.fs.sop.domain.QwSopLogs;
|
|
import com.fs.sop.domain.QwSopLogs;
|
|
import com.fs.sop.mapper.QwSopLogsMapper;
|
|
import com.fs.sop.mapper.QwSopLogsMapper;
|
|
import com.fs.sop.service.IQwSopLogsService;
|
|
import com.fs.sop.service.IQwSopLogsService;
|
|
@@ -29,8 +28,9 @@ import org.springframework.util.StringUtils;
|
|
import java.text.SimpleDateFormat;
|
|
import java.text.SimpleDateFormat;
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
import java.util.*;
|
|
import java.util.*;
|
|
-import java.util.concurrent.*;
|
|
|
|
-import java.util.function.Function;
|
|
|
|
|
|
+import java.util.concurrent.ConcurrentHashMap;
|
|
|
|
+import java.util.concurrent.ThreadLocalRandom;
|
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@Component
|
|
@Component
|
|
@@ -42,6 +42,7 @@ public class SendMsg {
|
|
private final IpadSendServer sendServer;
|
|
private final IpadSendServer sendServer;
|
|
private final SysConfigMapper sysConfigMapper;
|
|
private final SysConfigMapper sysConfigMapper;
|
|
private final IQwSopLogsService qwSopLogsService;
|
|
private final IQwSopLogsService qwSopLogsService;
|
|
|
|
+ private final AsyncSopTestService asyncSopTestService;
|
|
private final RedisCacheT<Long> redisCache;
|
|
private final RedisCacheT<Long> redisCache;
|
|
private final QwIpadServerMapper qwIpadServerMapper;
|
|
private final QwIpadServerMapper qwIpadServerMapper;
|
|
|
|
|
|
@@ -51,12 +52,13 @@ public class SendMsg {
|
|
private final Map<Long, Long> qwMap = new ConcurrentHashMap<>();
|
|
private final Map<Long, Long> qwMap = new ConcurrentHashMap<>();
|
|
|
|
|
|
|
|
|
|
- public SendMsg(QwUserMapper qwUserMapper, QwSopLogsMapper qwSopLogsMapper, IpadSendServer sendServer, SysConfigMapper sysConfigMapper, IQwSopLogsService qwSopLogsService, RedisCacheT<Long> redisCache, QwIpadServerMapper qwIpadServerMapper) {
|
|
|
|
|
|
+ public SendMsg(QwUserMapper qwUserMapper, QwSopLogsMapper qwSopLogsMapper, IpadSendServer sendServer, SysConfigMapper sysConfigMapper, IQwSopLogsService qwSopLogsService, AsyncSopTestService asyncSopTestService, RedisCacheT<Long> redisCache, QwIpadServerMapper qwIpadServerMapper) {
|
|
this.qwUserMapper = qwUserMapper;
|
|
this.qwUserMapper = qwUserMapper;
|
|
this.qwSopLogsMapper = qwSopLogsMapper;
|
|
this.qwSopLogsMapper = qwSopLogsMapper;
|
|
this.sendServer = sendServer;
|
|
this.sendServer = sendServer;
|
|
this.sysConfigMapper = sysConfigMapper;
|
|
this.sysConfigMapper = sysConfigMapper;
|
|
this.qwSopLogsService = qwSopLogsService;
|
|
this.qwSopLogsService = qwSopLogsService;
|
|
|
|
+ this.asyncSopTestService = asyncSopTestService;
|
|
this.redisCache = redisCache;
|
|
this.redisCache = redisCache;
|
|
this.qwIpadServerMapper = qwIpadServerMapper;
|
|
this.qwIpadServerMapper = qwIpadServerMapper;
|
|
}
|
|
}
|
|
@@ -86,7 +88,7 @@ public class SendMsg {
|
|
qwUserList.clear();
|
|
qwUserList.clear();
|
|
}
|
|
}
|
|
|
|
|
|
- @Scheduled(fixedRate = 10000) // 每10秒执行一次
|
|
|
|
|
|
+ @Scheduled(fixedRate = 20000) // 每10秒执行一次
|
|
public void sendMsg2() {
|
|
public void sendMsg2() {
|
|
log.info("执行日志:{}", LocalDateTime.now());
|
|
log.info("执行日志:{}", LocalDateTime.now());
|
|
if (StringUtils.isEmpty(groupNo)) {
|
|
if (StringUtils.isEmpty(groupNo)) {
|
|
@@ -108,10 +110,9 @@ public class SendMsg {
|
|
}
|
|
}
|
|
Map<String, CourseMaConfig> miniMap = getMiniMap();
|
|
Map<String, CourseMaConfig> miniMap = getMiniMap();
|
|
|
|
|
|
- List<QwUser> qwUsers = getQwUserList();
|
|
|
|
|
|
+ List<QwUser> qwUsers = getQwUserList().stream().parallel().filter(e -> !qwMap.containsKey(e.getId())).collect(Collectors.toList());
|
|
qwUsers.parallelStream().forEach(e -> {
|
|
qwUsers.parallelStream().forEach(e -> {
|
|
if (qwMap.putIfAbsent(e.getId(), System.currentTimeMillis()) == null) {
|
|
if (qwMap.putIfAbsent(e.getId(), System.currentTimeMillis()) == null) {
|
|
-// log.info("提交销售任务:{}", e.getQwUserName());
|
|
|
|
// 判断企微是否发送消息,是否为ipad发送并且判断是否真实在线
|
|
// 判断企微是否发送消息,是否为ipad发送并且判断是否真实在线
|
|
new Thread(() -> {
|
|
new Thread(() -> {
|
|
try {
|
|
try {
|
|
@@ -127,6 +128,11 @@ public class SendMsg {
|
|
}
|
|
}
|
|
|
|
|
|
private void processUser(QwUser qwUser, int delayStart, int delayEnd, Map<String, CourseMaConfig> miniMap) {
|
|
private void processUser(QwUser qwUser, int delayStart, int delayEnd, Map<String, CourseMaConfig> miniMap) {
|
|
|
|
+ if (!qwMap.containsKey(qwUser.getId())) {
|
|
|
|
+ log.warn("用户:{}已在处理中,跳过重复执行", qwUser.getQwUserName());
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ qwMap.put(qwUser.getId(), System.currentTimeMillis());
|
|
long start1 = System.currentTimeMillis();
|
|
long start1 = System.currentTimeMillis();
|
|
List<QwSopLogs> qwSopLogList = qwSopLogsMapper.selectByQwUserId(qwUser.getId());
|
|
List<QwSopLogs> qwSopLogList = qwSopLogsMapper.selectByQwUserId(qwUser.getId());
|
|
if(qwSopLogList.isEmpty()){
|
|
if(qwSopLogList.isEmpty()){
|
|
@@ -138,7 +144,7 @@ public class SendMsg {
|
|
qwMap.remove(user.getId());
|
|
qwMap.remove(user.getId());
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
- log.info("销售:{}, 消息:{}, 耗时: {}", user.getQwUserName(), qwSopLogList.size(), end1 - start1);
|
|
|
|
|
|
+ log.info("销售:{}, 消息:{}, 耗时: {}, 时间:{}", user.getQwUserName(), qwSopLogList.size(), end1 - start1, qwMap.get(qwUser.getId()));
|
|
long start3 = System.currentTimeMillis();
|
|
long start3 = System.currentTimeMillis();
|
|
for (QwSopLogs qwSopLogs : qwSopLogList) {
|
|
for (QwSopLogs qwSopLogs : qwSopLogList) {
|
|
|
|
|
|
@@ -200,10 +206,8 @@ public class SendMsg {
|
|
updateQwSop.setContentJson(JSON.toJSONString(setting));
|
|
updateQwSop.setContentJson(JSON.toJSONString(setting));
|
|
|
|
|
|
long end2 = System.currentTimeMillis();
|
|
long end2 = System.currentTimeMillis();
|
|
- new Thread(() -> {
|
|
|
|
- int i = qwSopLogsService.updateQwSopLogsSendType(updateQwSop);
|
|
|
|
- log.info("销售:{}, 修改条数{}, 发送方消息完成:{}, 耗时: {}", user.getQwUserName(), i, qwSopLogs.getId(),end2 - start2);
|
|
|
|
- }).start();
|
|
|
|
|
|
+ int i = qwSopLogsService.updateQwSopLogsSendType(updateQwSop);
|
|
|
|
+ log.info("销售:{}, 修改条数{}, 发送方消息完成:{}, 耗时: {}", user.getQwUserName(), i, qwSopLogs.getId(),end2 - start2);
|
|
try {
|
|
try {
|
|
int delay = ThreadLocalRandom.current().nextInt(delayStart, delayEnd);
|
|
int delay = ThreadLocalRandom.current().nextInt(delayStart, delayEnd);
|
|
log.debug("等待:{}ms", delay);
|
|
log.debug("等待:{}ms", delay);
|