|
@@ -586,6 +586,13 @@ public class QwSopLogsServiceImpl implements IQwSopLogsService
|
|
List<QwSopLogsDoSendListTVO> logsByJsApi = qwSopLogsMapper.getQwSopLogsByJsApiAll(param);
|
|
List<QwSopLogsDoSendListTVO> logsByJsApi = qwSopLogsMapper.getQwSopLogsByJsApiAll(param);
|
|
|
|
|
|
|
|
|
|
|
|
+ // 优先返回 sendType == 8 的第一条记录
|
|
|
|
+ List<QwSopLogsDoSendListTVO> result = logsByJsApi.stream()
|
|
|
|
+ .filter(log -> log.getSendType() == 8)
|
|
|
|
+ .findFirst()
|
|
|
|
+ .map(Collections::singletonList) // 单元素不可变 List
|
|
|
|
+ .orElse(logsByJsApi); // 如果没有匹配项,返回原列表
|
|
|
|
+
|
|
// 查询员工信息的id
|
|
// 查询员工信息的id
|
|
QwUser qwUser = qwExternalContactService.getQwUserByRedis(param.getCorpId().trim(),param.getQwUserId().trim());
|
|
QwUser qwUser = qwExternalContactService.getQwUserByRedis(param.getCorpId().trim(),param.getQwUserId().trim());
|
|
|
|
|
|
@@ -600,119 +607,126 @@ public class QwSopLogsServiceImpl implements IQwSopLogsService
|
|
contactHParam.setCorpId(param.getCorpId().trim());
|
|
contactHParam.setCorpId(param.getCorpId().trim());
|
|
Long qwExternalContactId = qwExternalContactMapper.getQwExternalContactId(contactHParam);
|
|
Long qwExternalContactId = qwExternalContactMapper.getQwExternalContactId(contactHParam);
|
|
|
|
|
|
- for (QwSopLogsDoSendListTVO log : logsByJsApi) {
|
|
|
|
|
|
+ for (QwSopLogsDoSendListTVO log : result) {
|
|
|
|
|
|
try {
|
|
try {
|
|
- switch (log.getSendType()){
|
|
|
|
- case 3:
|
|
|
|
- try {
|
|
|
|
- // 使用现代的日期时间 API
|
|
|
|
- LocalDateTime sendTime = log.getSendTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
|
|
|
|
- LocalDateTime expiryDateTime = sendTime.plusHours(12);
|
|
|
|
- LocalDateTime now = LocalDateTime.now();
|
|
|
|
|
|
+ if (log.getSendType()==8){
|
|
|
|
+ //(AI消息不做任何判断 直接入)切 只取了一条
|
|
|
|
+ sendJsApiList.add(log);
|
|
|
|
|
|
- // 判断是否过期
|
|
|
|
- if (now.isAfter(expiryDateTime)) {
|
|
|
|
- // 作废消息
|
|
|
|
- qwSopLogsService.updateQwSopLogsByWatchLogType(log.getId(), "已过期,不发送");
|
|
|
|
- } else {
|
|
|
|
- sendJsApiList.add(log);
|
|
|
|
|
|
+ }else {
|
|
|
|
+ switch (log.getSendType()) {
|
|
|
|
+ case 3:
|
|
|
|
+ case 7:
|
|
|
|
+ try {
|
|
|
|
+ // 使用现代的日期时间 API
|
|
|
|
+ LocalDateTime sendTime = log.getSendTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
|
|
|
|
+ LocalDateTime expiryDateTime = sendTime.plusHours(12);
|
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
|
+
|
|
|
|
+ // 判断是否过期
|
|
|
|
+ if (now.isAfter(expiryDateTime)) {
|
|
|
|
+ // 作废消息
|
|
|
|
+ qwSopLogsService.updateQwSopLogsByWatchLogType(log.getId(), "已过期,不发送");
|
|
|
|
+ } else {
|
|
|
|
+ sendJsApiList.add(log);
|
|
|
|
+ }
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ // 记录错误日志
|
|
|
|
+ logger.error("Error processing log in logsByJsApiOver: {}", log.getId() + ":" + e);
|
|
}
|
|
}
|
|
- } catch (Exception e) {
|
|
|
|
- // 记录错误日志
|
|
|
|
- logger.error("Error processing log in logsByJsApiOver: {}", log.getId()+":"+e);
|
|
|
|
- }
|
|
|
|
- break;
|
|
|
|
- case 6:
|
|
|
|
- sendJsApiList.add(log);
|
|
|
|
- break;
|
|
|
|
- default:
|
|
|
|
- QwSopTempSetting.Content content = JSON.parseObject(log.getContentJson(), QwSopTempSetting.Content.class);
|
|
|
|
- List<QwSopTempSetting.Content.Setting> setting = content.getSetting().stream().filter(e -> "9".equals(e.getContentType())).collect(Collectors.toList());
|
|
|
|
-
|
|
|
|
- //有app的异步推送消息
|
|
|
|
- if (!setting.isEmpty()) {
|
|
|
|
- asyncSopTestService.asyncSendMsgBySopAppLinkNormal(setting, param.getExternalId());
|
|
|
|
- }
|
|
|
|
|
|
+ break;
|
|
|
|
+ case 6:
|
|
|
|
+ case 9:
|
|
|
|
+ case 10:
|
|
|
|
+ sendJsApiList.add(log);
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ QwSopTempSetting.Content content = JSON.parseObject(log.getContentJson(), QwSopTempSetting.Content.class);
|
|
|
|
+ List<QwSopTempSetting.Content.Setting> setting = content.getSetting().stream().filter(e -> "9".equals(e.getContentType())).collect(Collectors.toList());
|
|
|
|
|
|
- if (log.getExpiryTime() == null) {
|
|
|
|
- // 作废消息
|
|
|
|
- qwSopLogsService.updateQwSopLogsByWatchLogType(log.getId(), "SOP任务被删除");
|
|
|
|
- } else {
|
|
|
|
- Integer expiryTime = log.getExpiryTime();
|
|
|
|
- LocalDateTime sendTime = log.getSendTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
|
|
|
|
- LocalDateTime expiryDateTime = sendTime.plusHours(expiryTime);
|
|
|
|
- LocalDateTime now = LocalDateTime.now();
|
|
|
|
|
|
+ //有app的异步推送消息
|
|
|
|
+ if (!setting.isEmpty()) {
|
|
|
|
+ asyncSopTestService.asyncSendMsgBySopAppLinkNormal(setting, param.getExternalId());
|
|
|
|
+ }
|
|
|
|
|
|
- // 判断是否过期
|
|
|
|
- if (now.isAfter(expiryDateTime)) {
|
|
|
|
|
|
+ if (log.getExpiryTime() == null) {
|
|
// 作废消息
|
|
// 作废消息
|
|
- qwSopLogsService.updateQwSopLogsByWatchLogType(log.getId(), "已过期,不发送");
|
|
|
|
- }
|
|
|
|
- else {
|
|
|
|
- switch (content.getType()) {
|
|
|
|
- case 1:
|
|
|
|
- // 普通消息,不做判断,加入发送列表
|
|
|
|
- sendJsApiList.add(log);
|
|
|
|
- break;
|
|
|
|
- case 2:
|
|
|
|
- // 课程消息,进行复杂的条件判断
|
|
|
|
- FsCourseWatchLog watchLog = watchLogService.getWatchCourseLogVideoBySop(
|
|
|
|
- Long.valueOf(content.getVideoId()),
|
|
|
|
- String.valueOf(qwId),
|
|
|
|
- qwExternalContactId
|
|
|
|
- );
|
|
|
|
-
|
|
|
|
- Integer courseType = content.getCourseType();
|
|
|
|
- String logId = log.getId();
|
|
|
|
-
|
|
|
|
- if (content.getCourseType()==null){
|
|
|
|
- qwSopLogsService.updateQwSopLogsByWatchLogType(logId, "模板未选消息类型,不发送");
|
|
|
|
- }
|
|
|
|
- if (watchLog != null) {
|
|
|
|
|
|
+ qwSopLogsService.updateQwSopLogsByWatchLogType(log.getId(), "SOP任务被删除");
|
|
|
|
+ } else {
|
|
|
|
+ Integer expiryTime = log.getExpiryTime();
|
|
|
|
+ LocalDateTime sendTime = log.getSendTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
|
|
|
|
+ LocalDateTime expiryDateTime = sendTime.plusHours(expiryTime);
|
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
|
|
|
- //新逻辑
|
|
|
|
- if (isCourseTypeValid(courseType, watchLog.getLogType())) {
|
|
|
|
- // 加入到发送列表中
|
|
|
|
- sendJsApiList.add(log);
|
|
|
|
- } else {
|
|
|
|
- // 作废消息
|
|
|
|
- qwSopLogsService.updateQwSopLogsByWatchLogType(logId, "看课状态未满足,不发送");
|
|
|
|
|
|
+ // 判断是否过期
|
|
|
|
+ if (now.isAfter(expiryDateTime)) {
|
|
|
|
+ // 作废消息
|
|
|
|
+ qwSopLogsService.updateQwSopLogsByWatchLogType(log.getId(), "已过期,不发送");
|
|
|
|
+ } else {
|
|
|
|
+ switch (content.getType()) {
|
|
|
|
+ case 1:
|
|
|
|
+ // 普通消息,不做判断,加入发送列表
|
|
|
|
+ sendJsApiList.add(log);
|
|
|
|
+ break;
|
|
|
|
+ case 2:
|
|
|
|
+ // 课程消息,进行复杂的条件判断
|
|
|
|
+ FsCourseWatchLog watchLog = watchLogService.getWatchCourseLogVideoBySop(
|
|
|
|
+ Long.valueOf(content.getVideoId()),
|
|
|
|
+ String.valueOf(qwId),
|
|
|
|
+ qwExternalContactId
|
|
|
|
+ );
|
|
|
|
+
|
|
|
|
+ Integer courseType = content.getCourseType();
|
|
|
|
+ String logId = log.getId();
|
|
|
|
+
|
|
|
|
+ if (content.getCourseType() == null) {
|
|
|
|
+ qwSopLogsService.updateQwSopLogsByWatchLogType(logId, "模板未选消息类型,不发送");
|
|
}
|
|
}
|
|
|
|
+ if (watchLog != null) {
|
|
|
|
+
|
|
|
|
+ //新逻辑
|
|
|
|
+ if (isCourseTypeValid(courseType, watchLog.getLogType())) {
|
|
|
|
+ // 加入到发送列表中
|
|
|
|
+ sendJsApiList.add(log);
|
|
|
|
+ } else {
|
|
|
|
+ // 作废消息
|
|
|
|
+ qwSopLogsService.updateQwSopLogsByWatchLogType(logId, "看课状态未满足,不发送");
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
- } else {
|
|
|
|
- // 没有观看记录,只发普通消息
|
|
|
|
- if (courseType == 0) {
|
|
|
|
- sendJsApiList.add(log);
|
|
|
|
} else {
|
|
} else {
|
|
- qwSopLogsService.updateQwSopLogsByWatchLogType(logId, "无观看记录,不发送");
|
|
|
|
|
|
+ // 没有观看记录,只发普通消息
|
|
|
|
+ if (courseType == 0) {
|
|
|
|
+ sendJsApiList.add(log);
|
|
|
|
+ } else {
|
|
|
|
+ qwSopLogsService.updateQwSopLogsByWatchLogType(logId, "无观看记录,不发送");
|
|
|
|
+ }
|
|
}
|
|
}
|
|
- }
|
|
|
|
- break;
|
|
|
|
- case 3:
|
|
|
|
- // 订单消息,不做判断,加入发送列表
|
|
|
|
- sendJsApiList.add(log);
|
|
|
|
- break;
|
|
|
|
- case 4:
|
|
|
|
- // Ai消息,不加入序列单独处理
|
|
|
|
- try {
|
|
|
|
- logger.info("Ai触达消息 : {}", log.getId());
|
|
|
|
- // fastGptChatSessionService.sendAiTouch(log,param.getCorpId().trim());
|
|
|
|
- }catch (Exception e){
|
|
|
|
- logger.error("Ai消息 : {}", content.getType());
|
|
|
|
- }
|
|
|
|
- break;
|
|
|
|
- default:
|
|
|
|
- // 未知类型,记录警告
|
|
|
|
- logger.error("Unknown content type logsByJsApi: {}", content.getType());
|
|
|
|
- break;
|
|
|
|
|
|
+ break;
|
|
|
|
+ case 3:
|
|
|
|
+ // 订单消息,不做判断,加入发送列表
|
|
|
|
+ sendJsApiList.add(log);
|
|
|
|
+ break;
|
|
|
|
+ case 4:
|
|
|
|
+ // Ai消息,不加入序列单独处理
|
|
|
|
+ try {
|
|
|
|
+ logger.info("Ai触达消息 : {}", log.getId());
|
|
|
|
+ // fastGptChatSessionService.sendAiTouch(log,param.getCorpId().trim());
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ logger.error("Ai消息 : {}", content.getType());
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ // 未知类型,记录警告
|
|
|
|
+ logger.error("Unknown content type logsByJsApi: {}", content.getType());
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- }
|
|
|
|
- break;
|
|
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
-
|
|
|
|
} catch (Exception e) {
|
|
} catch (Exception e) {
|
|
// 记录错误日志
|
|
// 记录错误日志
|
|
logger.error("Error processing log in logsByJsApi: {}", log.getId()+" : " + e);
|
|
logger.error("Error processing log in logsByJsApi: {}", log.getId()+" : " + e);
|