|
|
@@ -16,6 +16,7 @@ import com.fs.his.service.IFsUserService;
|
|
|
import com.fs.his.utils.PhoneUtil;
|
|
|
import com.fs.qw.domain.QwIpadServer;
|
|
|
import com.fs.qw.domain.QwSopSmsLogs;
|
|
|
+import com.fs.qw.domain.QwUser;
|
|
|
import com.fs.qw.mapper.QwIpadServerMapper;
|
|
|
import com.fs.qw.service.IQwSopSmsLogsService;
|
|
|
import com.fs.qw.vo.QwSopCourseFinishTempSetting;
|
|
|
@@ -260,9 +261,9 @@ public class SendSmsMsg {
|
|
|
continue;
|
|
|
}
|
|
|
QwSopLogs qwSopLogs = sopLogsMap.get(logRecord.getSopLogId());
|
|
|
- QwSopCourseFinishTempSetting setting = JSON.parseObject(qwSopLogs.getContentJson(), QwSopCourseFinishTempSetting.class);
|
|
|
+
|
|
|
// 判断消息状态是否满足发送条件
|
|
|
- SendResultDetailDTO checkDto= isSendLogs(qwSopLogs, setting,logRecord);
|
|
|
+ SendResultDetailDTO checkDto= isSendLogs(qwSopLogs,logRecord);
|
|
|
if (!checkDto.isSuccess()) {
|
|
|
log.info("销售:{}, 消息发送条件未满足:{}", qwSopLogs.getQwUserKey(), qwSopLogs.getId());
|
|
|
failReasonsList.add(checkDto);
|
|
|
@@ -385,34 +386,51 @@ public class SendSmsMsg {
|
|
|
try {
|
|
|
qwSopSmsLogsService.updateStatusByIds(failedIds, "3"); // 失败状态
|
|
|
if (!failReasonsList.isEmpty()) {
|
|
|
+
|
|
|
//组装数据
|
|
|
List<QwSopLogs> updateList = failReasonsList.stream().map(f -> {
|
|
|
- QwSopLogs update = new QwSopLogs();
|
|
|
- update.setSmsLogsId(f.getSopLogId());
|
|
|
- update.setRemark(f.getFailReason());
|
|
|
- //同步json发送状态
|
|
|
- if (sopLogsMap != null && sopLogsMap.containsKey(f.getSopLogId())) {
|
|
|
- try {
|
|
|
- String contentJson = sopLogsMap.get(f.getSopLogId()).getContentJson();
|
|
|
- JSONObject jsonObject = JSONObject.parseObject(contentJson);
|
|
|
- JSONArray settingArray = jsonObject.getJSONArray("setting");
|
|
|
- if (settingArray != null && !settingArray.isEmpty()) {
|
|
|
- for (int i = 0; i < settingArray.size(); i++) {
|
|
|
- JSONObject item = settingArray.getJSONObject(i);
|
|
|
- item.put("sendStatus", "0");
|
|
|
+
|
|
|
+ QwSopLogs qwSopLogs = sopLogsMap.get(f.getSopLogId());
|
|
|
+
|
|
|
+ if (qwSopLogs == null) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ //已经标记过的 节约资源不再走update
|
|
|
+ if (qwSopLogs.getSendStatus()==5 || qwSopLogs.getReceivingStatus()==4){
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ QwSopLogs update = new QwSopLogs();
|
|
|
+ update.setSmsLogsId(f.getSopLogId());
|
|
|
+ update.setRemark(f.getFailReason());
|
|
|
+ //同步json发送状态
|
|
|
+ if (sopLogsMap.containsKey(f.getSopLogId())) {
|
|
|
+ try {
|
|
|
+ String contentJson = sopLogsMap.get(f.getSopLogId()).getContentJson();
|
|
|
+ JSONObject jsonObject = JSONObject.parseObject(contentJson);
|
|
|
+ JSONArray settingArray = jsonObject.getJSONArray("setting");
|
|
|
+ if (settingArray != null && !settingArray.isEmpty()) {
|
|
|
+ for (int i = 0; i < settingArray.size(); i++) {
|
|
|
+ JSONObject item = settingArray.getJSONObject(i);
|
|
|
+ item.put("sendStatus", "0");
|
|
|
+ }
|
|
|
+ update.setContentJson(jsonObject.toJSONString());
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.warn("解析ContentJson失败,sopLogId:{}", f.getSopLogId(), e);
|
|
|
+ update.setContentJson(sopLogsMap.get(f.getSopLogId()).getContentJson());
|
|
|
}
|
|
|
- update.setContentJson(jsonObject.toJSONString());
|
|
|
}
|
|
|
- } catch (Exception e) {
|
|
|
- log.warn("解析ContentJson失败,sopLogId:{}", f.getSopLogId(), e);
|
|
|
- update.setContentJson(sopLogsMap.get(f.getSopLogId()).getContentJson());
|
|
|
- }
|
|
|
- }
|
|
|
- return update;
|
|
|
- }).collect(Collectors.toList());
|
|
|
+ return update;
|
|
|
+ })
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .collect(Collectors.toList());
|
|
|
|
|
|
//批量同步执行记录表
|
|
|
- qwSopLogsMapper.batchUpdateQwSopLogsBySmsLogsId(updateList);
|
|
|
+ if (!updateList.isEmpty()) {
|
|
|
+ qwSopLogsMapper.batchUpdateQwSopLogsBySmsLogsId(updateList);
|
|
|
+ }
|
|
|
}
|
|
|
log.debug("批量更新失败状态完成,条数:{}", failedIds.size());
|
|
|
} catch (Exception e) {
|
|
|
@@ -468,74 +486,13 @@ public class SendSmsMsg {
|
|
|
|
|
|
|
|
|
|
|
|
- public SendResultDetailDTO isSendLogs(QwSopLogs qwSopLogs, QwSopCourseFinishTempSetting setting,QwSopSmsLogs logRecord) {
|
|
|
- Long qwUserId = qwSopLogs.getQwUserKey();
|
|
|
- if(qwSopLogs.getSendStatus() != 3){
|
|
|
- log.info("状态异常不发送:{}, LOGID: {}", qwSopLogs.getQwUserKey(), qwSopLogs.getId());
|
|
|
- return new SendResultDetailDTO(false, "状态异常不发送", logRecord.getSopLogId());
|
|
|
- }
|
|
|
+ public SendResultDetailDTO isSendLogs(QwSopLogs qwSopLogs,QwSopSmsLogs logRecord) {
|
|
|
|
|
|
- boolean noSop = qwSopLogs.getSendType() != 3 && qwSopLogs.getSendType() != 7;
|
|
|
+ if (qwSopLogs.getSendStatus()==5 || qwSopLogs.getReceivingStatus()==4) {
|
|
|
|
|
|
- if (qwSopLogs.getExpiryTime() == null && noSop) {
|
|
|
- // 作废消息
|
|
|
- log.info("SOP_LOG_ID:{}, SOP任务被删除", qwSopLogs.getId());
|
|
|
- return new SendResultDetailDTO(false, "SOP任务被删除", logRecord.getSopLogId());
|
|
|
+ return new SendResultDetailDTO(false, qwSopLogs.getRemark(), logRecord.getSopLogId());
|
|
|
}
|
|
|
|
|
|
- LocalDateTime sendTime = DateUtil.stringToLocalDateTime(qwSopLogs.getSendTime());
|
|
|
- LocalDateTime expiryDateTime;
|
|
|
-
|
|
|
- // 判断是否过期
|
|
|
- if(qwSopLogs.getSendType() == 3 || qwSopLogs.getSendType() == 7){
|
|
|
- expiryDateTime = sendTime.plusHours(12);
|
|
|
- }else{
|
|
|
- expiryDateTime = sendTime.plusHours(qwSopLogs.getExpiryTime());
|
|
|
- }
|
|
|
-
|
|
|
- if (LocalDateTime.now().isAfter(expiryDateTime) ) {
|
|
|
- // 作废消息
|
|
|
- log.info("SOP_LOG_ID:{}, 已过期,不发送", qwSopLogs.getId());
|
|
|
- return new SendResultDetailDTO(false, "已过期,不发送", logRecord.getSopLogId());
|
|
|
- }
|
|
|
-
|
|
|
- if (setting.getCourseType() == null && noSop && setting.getType() == 2) {
|
|
|
- log.info("SOP_LOG_ID:{}, 模板未选消息类型,不发送", qwSopLogs.getId());
|
|
|
- return new SendResultDetailDTO(false, "模板未选消息类型,不发送", logRecord.getSopLogId());
|
|
|
- }
|
|
|
- Integer cacheValue = redisCache.getCacheObject("sopCourse:video:isPause:" + setting.getVideoId());
|
|
|
- int isPause = (cacheValue != null) ? cacheValue : 0;
|
|
|
- log.info("SOP_LOG_ID:{},判断课程({})当前状态:{}", qwSopLogs.getId(), setting.getVideoId(), isPause);
|
|
|
- if (isPause == 1){
|
|
|
- log.info("SOP_LOG_ID:{}, 课程暂停,不发送", qwSopLogs.getId());
|
|
|
- return new SendResultDetailDTO(false, "课程暂停,AI不发送", logRecord.getSopLogId());
|
|
|
- }
|
|
|
-
|
|
|
- if (qwSopLogs.getSendType() != 12 && noSop) {
|
|
|
- // 客户的信息
|
|
|
- Integer courseType = setting.getCourseType();
|
|
|
- if (setting.getType() == 2 && courseType != 0) {// 课程消息,进行复杂的条件判断
|
|
|
- FsCourseWatchLog watchLog = watchLogService.getWatchCourseLogVideoBySop(
|
|
|
- setting.getVideoId().longValue(),
|
|
|
- String.valueOf(qwUserId),
|
|
|
- qwSopLogs.getExternalId()
|
|
|
- );
|
|
|
- log.debug("ID:{}-看课记录参数:videoID:{}, qwUserID:{}, extID:{}", qwSopLogs.getId(), setting.getVideoId().longValue(), qwUserId, qwSopLogs.getExternalId());
|
|
|
- log.debug("ID:{}-看课记录:{}", qwSopLogs.getId(), watchLog);
|
|
|
- String logId = qwSopLogs.getId();
|
|
|
- if (watchLog != null) {
|
|
|
- //新逻辑
|
|
|
- if (!QwSopLogsServiceImpl.isCourseTypeValid(courseType, watchLog.getLogType())) {
|
|
|
- // 作废消息
|
|
|
- log.info("SOP_LOG_ID:{}, 看课状态未满足,不发送", qwSopLogs.getId());
|
|
|
- return new SendResultDetailDTO(false, "看课状态未满足,不发送", logRecord.getSopLogId());
|
|
|
- }
|
|
|
- } else {
|
|
|
- log.info("SOP_LOG_ID:{}, 无观看记录,不发送", qwSopLogs.getId());
|
|
|
- return new SendResultDetailDTO(false, "无观看记录,不发送", logRecord.getSopLogId());
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
return new SendResultDetailDTO(true, "检测通过", logRecord.getSopLogId());
|
|
|
}
|
|
|
|