|
@@ -3,6 +3,8 @@ package com.fs.common.service.impl;
|
|
|
import cn.hutool.http.HttpRequest;
|
|
import cn.hutool.http.HttpRequest;
|
|
|
import cn.hutool.json.JSONUtil;
|
|
import cn.hutool.json.JSONUtil;
|
|
|
import com.alibaba.fastjson.JSON;
|
|
import com.alibaba.fastjson.JSON;
|
|
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
import com.fs.common.core.domain.R;
|
|
import com.fs.common.core.domain.R;
|
|
|
import com.fs.common.core.redis.RedisCache;
|
|
import com.fs.common.core.redis.RedisCache;
|
|
|
|
|
|
|
@@ -11,10 +13,7 @@ import com.fs.common.utils.StringUtils;
|
|
|
import com.fs.common.vo.SmsNotifyVO;
|
|
import com.fs.common.vo.SmsNotifyVO;
|
|
|
import com.fs.common.vo.SmsSendItemVO;
|
|
import com.fs.common.vo.SmsSendItemVO;
|
|
|
import com.fs.common.vo.SmsSendVO;
|
|
import com.fs.common.vo.SmsSendVO;
|
|
|
-import com.fs.company.domain.CompanySms;
|
|
|
|
|
-import com.fs.company.domain.CompanySmsLogs;
|
|
|
|
|
-import com.fs.company.domain.CompanySmsTemp;
|
|
|
|
|
-import com.fs.company.domain.CompanyUser;
|
|
|
|
|
|
|
+import com.fs.company.domain.*;
|
|
|
import com.fs.company.service.ICompanySmsLogsService;
|
|
import com.fs.company.service.ICompanySmsLogsService;
|
|
|
import com.fs.company.service.ICompanySmsService;
|
|
import com.fs.company.service.ICompanySmsService;
|
|
|
import com.fs.company.service.ICompanySmsTempService;
|
|
import com.fs.company.service.ICompanySmsTempService;
|
|
@@ -30,8 +29,13 @@ import com.fs.his.domain.FsStoreOrder;
|
|
|
import com.fs.his.mapper.FsPackageOrderMapper;
|
|
import com.fs.his.mapper.FsPackageOrderMapper;
|
|
|
import com.fs.his.mapper.FsStoreOrderMapper;
|
|
import com.fs.his.mapper.FsStoreOrderMapper;
|
|
|
import com.fs.his.vo.FsPackageOrderVO;
|
|
import com.fs.his.vo.FsPackageOrderVO;
|
|
|
|
|
+import com.fs.qw.domain.QwSopSmsLogs;
|
|
|
|
|
+import com.fs.qw.mapper.QwSopSmsLogsMapper;
|
|
|
|
|
+import com.fs.qw.service.IQwSopSmsLogsService;
|
|
|
import com.fs.sms.domain.SendSmsReturn;
|
|
import com.fs.sms.domain.SendSmsReturn;
|
|
|
import com.fs.sms.service.impl.SmsTServiceImpl;
|
|
import com.fs.sms.service.impl.SmsTServiceImpl;
|
|
|
|
|
+import com.fs.sop.domain.QwSopLogs;
|
|
|
|
|
+import com.fs.sop.mapper.QwSopLogsMapper;
|
|
|
import com.fs.system.domain.SysConfig;
|
|
import com.fs.system.domain.SysConfig;
|
|
|
import com.fs.system.mapper.SysConfigMapper;
|
|
import com.fs.system.mapper.SysConfigMapper;
|
|
|
import com.google.gson.Gson;
|
|
import com.google.gson.Gson;
|
|
@@ -48,6 +52,7 @@ import java.text.SimpleDateFormat;
|
|
|
import java.util.Date;
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
|
|
|
+import com.fs.company.service.ICompanySmsCommonLogsService;
|
|
|
|
|
|
|
|
@Service
|
|
@Service
|
|
|
@Slf4j
|
|
@Slf4j
|
|
@@ -79,6 +84,18 @@ public class SmsServiceImpl implements ISmsService
|
|
|
@Autowired
|
|
@Autowired
|
|
|
private FsPackageOrderMapper packageOrderMapper;
|
|
private FsPackageOrderMapper packageOrderMapper;
|
|
|
|
|
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private ICompanySmsCommonLogsService smsCommonLogsService;
|
|
|
|
|
+
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private IQwSopSmsLogsService qwSopSmsLogsService;
|
|
|
|
|
+
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private QwSopLogsMapper qwSopLogsMapper;
|
|
|
|
|
+
|
|
|
|
|
+ @Autowired
|
|
|
|
|
+ private QwSopSmsLogsMapper qwSopSmsLogsMapper;
|
|
|
|
|
+
|
|
|
@Override
|
|
@Override
|
|
|
public R sendTSms(String mobile, String code) {
|
|
public R sendTSms(String mobile, String code) {
|
|
|
// try{
|
|
// try{
|
|
@@ -157,40 +174,80 @@ public class SmsServiceImpl implements ISmsService
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
public String smsNotify(String json) {
|
|
public String smsNotify(String json) {
|
|
|
|
|
+ log.info("短信回调参数:{}", json);
|
|
|
List<SmsNotifyVO> list = JSONUtil.parseArray(json).toList(SmsNotifyVO.class);
|
|
List<SmsNotifyVO> list = JSONUtil.parseArray(json).toList(SmsNotifyVO.class);
|
|
|
- if(list!=null){
|
|
|
|
|
- for(SmsNotifyVO vo:list){
|
|
|
|
|
- if(vo.getFlag()!=null&&vo.getFlag()==0){
|
|
|
|
|
|
|
+ if (list != null) {
|
|
|
|
|
+ for (SmsNotifyVO vo : list) {
|
|
|
|
|
+ if (vo.getFlag() != null && vo.getFlag() == 0) {
|
|
|
//手机用户上行
|
|
//手机用户上行
|
|
|
- CompanySmsLogs logs=smsLogsService.selectCompanySmsLogsByMobile(vo.getMobile());
|
|
|
|
|
- if(logs!=null){
|
|
|
|
|
|
|
+ CompanySmsLogs logs = smsLogsService.selectCompanySmsLogsByMobile(vo.getMobile());
|
|
|
|
|
+ if (logs != null) {
|
|
|
logs.setReplyContent(vo.getContent());
|
|
logs.setReplyContent(vo.getContent());
|
|
|
smsLogsService.updateCompanySmsLogs(logs);
|
|
smsLogsService.updateCompanySmsLogs(logs);
|
|
|
|
|
+ if(logs.getSopSmsLogId() != null){
|
|
|
|
|
+ updateQwSopSmsLogsByUuid(logs.getSopSmsLogId(), null, null, vo.getContent(),logs.getSmsIndex());
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
- else if(vo.getFlag()!=null&&vo.getFlag()==1){
|
|
|
|
|
- CompanySmsLogs logs=smsLogsService.selectCompanySmsLogsByMid(vo.getMid());
|
|
|
|
|
- if(logs!=null&&logs.getStatus().equals(0)){
|
|
|
|
|
|
|
+ CompanySmsCommonLogs commonLogs = smsCommonLogsService.selectCompanySmsCommonLogsByMobile(vo.getMobile());
|
|
|
|
|
+ if (commonLogs != null) {
|
|
|
|
|
+ commonLogs.setReplyContent(vo.getContent());
|
|
|
|
|
+ smsCommonLogsService.updateCompanySmsCommonLogs(commonLogs);
|
|
|
|
|
+ }
|
|
|
|
|
+ } else if (vo.getFlag() != null && vo.getFlag() == 1) {
|
|
|
|
|
+ CompanySmsLogs logs = smsLogsService.selectCompanySmsLogsByMid(vo.getMid());
|
|
|
|
|
+ if (logs != null && logs.getStatus().equals(0)) {
|
|
|
logs.setStat(vo.getStat());
|
|
logs.setStat(vo.getStat());
|
|
|
- if(vo.getTime()!=null){
|
|
|
|
|
|
|
+ if (vo.getTime() != null) {
|
|
|
try {
|
|
try {
|
|
|
- SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
logs.setSendTime(format.parse(vo.getTime()));
|
|
logs.setSendTime(format.parse(vo.getTime()));
|
|
|
- }
|
|
|
|
|
- catch (Exception e){
|
|
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
//状态报告
|
|
//状态报告
|
|
|
- if(vo.getStat().equals("DELIVRD")){
|
|
|
|
|
|
|
+ if (vo.getStat().equals("DELIVRD")) {
|
|
|
logs.setStatus(1);
|
|
logs.setStatus(1);
|
|
|
- }
|
|
|
|
|
- else{
|
|
|
|
|
|
|
+ } else {
|
|
|
logs.setStatus(-1);
|
|
logs.setStatus(-1);
|
|
|
- companySmsService.addCompanySms(logs.getCompanyId(),logs.getNumber());
|
|
|
|
|
|
|
+ companySmsService.addCompanySms(logs.getCompanyId(), logs.getNumber());
|
|
|
}
|
|
}
|
|
|
smsLogsService.updateCompanySmsLogs(logs);
|
|
smsLogsService.updateCompanySmsLogs(logs);
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ if(logs != null && logs.getSopSmsLogId() != null){
|
|
|
|
|
+ Integer sopStatus = "DELIVRD".equals(vo.getStat()) ? 2 : 3;
|
|
|
|
|
+ Date sopSendTime = null;
|
|
|
|
|
+ if (vo.getTime() != null) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
+ sopSendTime = format.parse(vo.getTime());
|
|
|
|
|
+ } catch (Exception ignored) { }
|
|
|
|
|
+ }
|
|
|
|
|
+ updateQwSopSmsLogsByUuid(logs.getSopSmsLogId(), sopStatus, sopSendTime, null,logs.getSmsIndex());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ CompanySmsCommonLogs commonLogs = smsCommonLogsService.selectCompanySmsCommonLogsByMid(vo.getMid());
|
|
|
|
|
+ if (commonLogs != null && commonLogs.getStatus().equals(0)) {
|
|
|
|
|
+ commonLogs.setStat(vo.getStat());
|
|
|
|
|
+ if (vo.getTime() != null) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
+ commonLogs.setSendTime(format.parse(vo.getTime()));
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ //状态报告
|
|
|
|
|
+ if (vo.getStat().equals("DELIVRD")) {
|
|
|
|
|
+ commonLogs.setStatus(1);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ commonLogs.setStatus(-1);
|
|
|
|
|
+ companySmsService.addCompanySms(commonLogs.getCompanyId(), commonLogs.getNumber());
|
|
|
|
|
+ }
|
|
|
|
|
+ smsCommonLogsService.updateCompanySmsCommonLogs(commonLogs);
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -979,4 +1036,76 @@ public class SmsServiceImpl implements ISmsService
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 根据 uuid(QwSopSmsLogs.id)和索引更新子记录,并检查主记录完成状态
|
|
|
|
|
+ */
|
|
|
|
|
+ private void updateQwSopSmsLogsByUuid(Long sopSmsLogId, Integer status, Date sendTime, String replyContent, Integer smsIndex) {
|
|
|
|
|
+ if (sopSmsLogId == null) return;
|
|
|
|
|
+ QwSopSmsLogs update = new QwSopSmsLogs();
|
|
|
|
|
+ update.setSopLogId(sopSmsLogId);
|
|
|
|
|
+ update.setSmsIndex(smsIndex);
|
|
|
|
|
+ if (status != null) {
|
|
|
|
|
+ update.setStatus(status);
|
|
|
|
|
+ }
|
|
|
|
|
+ if (sendTime != null) {
|
|
|
|
|
+ update.setSendTime(sendTime);
|
|
|
|
|
+ }
|
|
|
|
|
+ if (replyContent != null) {
|
|
|
|
|
+ update.setRemark(replyContent);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ qwSopSmsLogsService.updateSmsNotifyInfo(update);
|
|
|
|
|
+ QwSopLogs mainLog = qwSopLogsMapper.selectoneByUid(sopSmsLogId);
|
|
|
|
|
+ if (mainLog == null) return;
|
|
|
|
|
+ JSONObject jsonObject = JSONObject.parseObject(mainLog.getContentJson());
|
|
|
|
|
+ JSONArray jsonArray = jsonObject.getJSONArray("setting");
|
|
|
|
|
+ int total = jsonArray.size();
|
|
|
|
|
+
|
|
|
|
|
+ Integer processed = qwSopSmsLogsMapper.countProcessed(sopSmsLogId);
|
|
|
|
|
+
|
|
|
|
|
+ if (processed != null && processed >= total) {
|
|
|
|
|
+ int successCount = 0;
|
|
|
|
|
+ int failCount = 0;
|
|
|
|
|
+
|
|
|
|
|
+ List<QwSopSmsLogs> list = qwSopSmsLogsMapper.getSmsListBySopLogId(sopSmsLogId);
|
|
|
|
|
+ //更新对应content_json信息
|
|
|
|
|
+ JSONArray newArray = new JSONArray();
|
|
|
|
|
+ for (QwSopSmsLogs sub : list) {
|
|
|
|
|
+ JSONObject json = jsonArray.getJSONObject(sub.getSmsIndex());
|
|
|
|
|
+ if (sub.getStatus() == 2) {
|
|
|
|
|
+ json.put("sendStatus","1");
|
|
|
|
|
+ successCount++;
|
|
|
|
|
+ } else if (sub.getStatus() == 3) {
|
|
|
|
|
+ json.put("sendStatus","0");
|
|
|
|
|
+ failCount++;
|
|
|
|
|
+ }
|
|
|
|
|
+ newArray.add(json);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ boolean allSuccess = (successCount == list.size());
|
|
|
|
|
+ boolean allFail = (failCount == list.size());
|
|
|
|
|
+
|
|
|
|
|
+ QwSopLogs updateLog = new QwSopLogs();
|
|
|
|
|
+ updateLog.setSmsLogsId(sopSmsLogId);
|
|
|
|
|
+ jsonObject.put("setting", newArray);
|
|
|
|
|
+ updateLog.setContentJson(jsonObject.toJSONString());
|
|
|
|
|
+ if (allSuccess) {
|
|
|
|
|
+ updateLog.setSendStatus(1L);
|
|
|
|
|
+ log.info("主记录 {} 全部成功", sopSmsLogId);
|
|
|
|
|
+ } else if (allFail) {
|
|
|
|
|
+ updateLog.setSendStatus(0L);
|
|
|
|
|
+ log.info("主记录 {} 全部失败", sopSmsLogId);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ updateLog.setRemark("部分成功!");
|
|
|
|
|
+ updateLog.setSendStatus(0L); // 部分成功
|
|
|
|
|
+ log.info("主记录 {} 部分成功(成功{}条,失败{}条)",
|
|
|
|
|
+ sopSmsLogId, successCount, failCount);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ qwSopLogsMapper.updateQwSopLogsBySmsLogsId(updateLog);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
}
|
|
}
|