|
|
@@ -100,11 +100,11 @@ public class PushServiceImpl implements IPushService
|
|
|
personInfos.append(buildPersonInfo(admin));
|
|
|
}
|
|
|
|
|
|
- // 发送一条合并的短信(包含所有管理员)- 使用新模板格式
|
|
|
+ // 发送一条合并的短信给学校管理员
|
|
|
String firstAdminName = admins.get(0).getNickName();
|
|
|
- sendSmsWithLogByTemplate(workorder.getComplaintNo(), personInfos.toString(),
|
|
|
+ sendSmsToAdminWithLog(workorder.getComplaintNo(), personInfos.toString(),
|
|
|
firstAdminName, workorder.getSchoolName(), workorder.getComplaintNo(),
|
|
|
- workorder.getCategory(), "SMS_512120647");
|
|
|
+ workorder.getCategory(), admins.get(0).getStaffNo());
|
|
|
|
|
|
// 公众号:为每个管理员单独发送一条消息(平台限制)
|
|
|
String wechatInfo = buildNewWorkorderWechatInfo();
|
|
|
@@ -122,8 +122,8 @@ public class PushServiceImpl implements IPushService
|
|
|
@Override
|
|
|
public void pushClosedToCitizen(ComplaintWorkorder workorder)
|
|
|
{
|
|
|
- // 短信通知群众(新模板格式)
|
|
|
- sendSmsToCitizen(workorder, "办结");
|
|
|
+ // 短信通知投诉人(办结)
|
|
|
+ sendSmsToCitizenWithLog(workorder, "办结");
|
|
|
// 公众号(待平台支持 openid 直发,记录日志占位)
|
|
|
String info = buildWechatInfo(workorder.getComplaintNo(), workorder.getSchoolName(),
|
|
|
"已办结:" + StringUtils.abbreviate(StringUtils.defaultString(workorder.getConclusion()), 100));
|
|
|
@@ -133,8 +133,8 @@ public class PushServiceImpl implements IPushService
|
|
|
@Override
|
|
|
public void pushRejectedToCitizen(ComplaintWorkorder workorder)
|
|
|
{
|
|
|
- // 短信通知群众(新模板格式)
|
|
|
- sendSmsToCitizen(workorder, "驳回");
|
|
|
+ // 短信通知投诉人(驳回)
|
|
|
+ sendSmsToCitizenWithLog(workorder, "驳回");
|
|
|
// 公众号(待平台支持,记录日志占位)
|
|
|
String info = buildWechatInfo(workorder.getComplaintNo(), workorder.getSchoolName(),
|
|
|
"已驳回:" + StringUtils.abbreviate(StringUtils.defaultString(workorder.getRejectReason()), 100));
|
|
|
@@ -173,8 +173,11 @@ public class PushServiceImpl implements IPushService
|
|
|
personInfos.append(buildPersonInfo(admin));
|
|
|
}
|
|
|
|
|
|
- String smsContent = "【校长信箱】工单 " + workorder.getComplaintNo() + " 收到群众异议复核申请,请及时处理";
|
|
|
- sendSmsWithLog(workorder.getComplaintNo(), null, smsContent, personInfos.toString());
|
|
|
+ // 发送复核申请提醒短信给学校管理员
|
|
|
+ String firstAdminName = admins.get(0).getNickName();
|
|
|
+ sendSmsToAdminWithLog(workorder.getComplaintNo(), personInfos.toString(),
|
|
|
+ firstAdminName, workorder.getSchoolName(), workorder.getComplaintNo(),
|
|
|
+ "异议复核申请", admins.get(0).getStaffNo());
|
|
|
|
|
|
// 公众号:逐人推送复核提醒(按学工号匹配)
|
|
|
for (SysUser admin : admins)
|
|
|
@@ -194,8 +197,8 @@ public class PushServiceImpl implements IPushService
|
|
|
{
|
|
|
String resultText = review.getStatus() != null && review.getStatus() == ComplaintConstants.REVIEW_PASS
|
|
|
? "复核通过,工单将重新处置" : "复核维持原判";
|
|
|
- // 短信通知群众(新模板格式)
|
|
|
- sendSmsToCitizen(workorder, resultText);
|
|
|
+ // 短信通知投诉人(复核结果)
|
|
|
+ sendSmsToCitizenWithLog(workorder, resultText);
|
|
|
// 公众号(待平台支持,记录日志占位)
|
|
|
String info = buildWechatInfo(workorder.getComplaintNo(), workorder.getSchoolName(), resultText);
|
|
|
sendWechatToCitizen(workorder, "异议复核处理结果", info);
|
|
|
@@ -222,64 +225,35 @@ public class PushServiceImpl implements IPushService
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 发短信并写日志(带重试)
|
|
|
- * @param receiverInfo 接收人信息(可以是合并的多个人,用^@^分隔)
|
|
|
- */
|
|
|
- private void sendSmsWithLog(String complaintNo, ComplaintAdmin admin, String content, String receiverInfo)
|
|
|
- {
|
|
|
- if (!umsProperties.getSms().isEnabled())
|
|
|
- {
|
|
|
- log.info("短信通道未启用,跳过短信推送 complaintNo={}", complaintNo);
|
|
|
- return;
|
|
|
- }
|
|
|
- ComplaintMessageLog messageLog = new ComplaintMessageLog();
|
|
|
- messageLog.setComplaintNo(complaintNo);
|
|
|
- messageLog.setMsgType(ComplaintConstants.MSG_TYPE_SMS);
|
|
|
- messageLog.setReceiver(receiverInfo); // 记录所有接收人(批量)
|
|
|
- messageLog.setTempletId("0");
|
|
|
- messageLog.setContent(content);
|
|
|
- try
|
|
|
- {
|
|
|
- Map<String, Object> resp = retry(() -> smsClient.sendSms(
|
|
|
- receiverInfo, content, null, null));
|
|
|
- messageLog.setResult(1);
|
|
|
- messageLog.setMsgId(resp == null ? "" : String.valueOf(resp.getOrDefault("msg_id", "")));
|
|
|
- }
|
|
|
- catch (Exception e)
|
|
|
- {
|
|
|
- log.error("短信推送失败 complaintNo={}", complaintNo, e);
|
|
|
- messageLog.setResult(0);
|
|
|
- messageLog.setErrorMsg(StringUtils.abbreviate(e.getMessage(), 450));
|
|
|
- }
|
|
|
- messageLogMapper.insertComplaintMessageLog(messageLog);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 发模板短信并写日志(带重试)- 新格式
|
|
|
- * sms_info为JSON字符串,包含teacher_name/school/complaint_number/complaint/template_code
|
|
|
+ * 给学校管理员发送短信并写日志(带重试)
|
|
|
+ * <p>
|
|
|
+ * 适用场景:新工单提醒、复核申请提醒、工单超时提醒等
|
|
|
+ * 模板ID从配置 ums.sms.admin-template-code 读取
|
|
|
*
|
|
|
- * @param receiverInfo 接收人信息(可以是合并的多个人,用^@^分隔)
|
|
|
- * @param teacherName 短信接收人姓名
|
|
|
- * @param school 学校名称
|
|
|
+ * @param receiverInfo 接收人信息(可以是合并的多个人,用^@^分隔)
|
|
|
+ * @param teacherName 管理员姓名
|
|
|
+ * @param school 学校名称
|
|
|
* @param complaintNumber 投诉工单号
|
|
|
- * @param complaint 投诉分类
|
|
|
- * @param templateCode 短信模板id
|
|
|
+ * @param complaint 投诉分类
|
|
|
+ * @param operatorStaffNo 发送人学工号(operator_id,不能为空,否则平台只受理不投递)
|
|
|
*/
|
|
|
- private void sendSmsWithLogByTemplate(String complaintNo, String receiverInfo,
|
|
|
+ private void sendSmsToAdminWithLog(String complaintNo, String receiverInfo,
|
|
|
String teacherName, String school, String complaintNumber,
|
|
|
- String complaint, String templateCode)
|
|
|
+ String complaint, String operatorStaffNo)
|
|
|
{
|
|
|
if (!umsProperties.getSms().isEnabled())
|
|
|
{
|
|
|
- log.info("短信通道未启用,跳过短信推送 complaintNo={}", complaintNo);
|
|
|
+ log.info("短信通道未启用,跳过学校管理员短信推送 complaintNo={}", complaintNo);
|
|
|
return;
|
|
|
}
|
|
|
+ String templateCode = umsProperties.getSms().getAdminTemplateCode();
|
|
|
+
|
|
|
// 构造sms_info的JSON字符串(用于日志记录)
|
|
|
String smsInfoJson = "{\"teacher_name\":\"" + StringUtils.defaultString(teacherName)
|
|
|
+ "\",\"school\":\"" + StringUtils.defaultString(school)
|
|
|
+ "\",\"complaint_number\":\"" + StringUtils.defaultString(complaintNumber)
|
|
|
+ "\",\"complaint\":\"" + StringUtils.defaultString(complaint)
|
|
|
- + "\",\"template_code\":\"" + StringUtils.defaultString(templateCode) + "\"}";
|
|
|
+ + "\",\"template_code\":\"" + templateCode + "\"}";
|
|
|
|
|
|
ComplaintMessageLog messageLog = new ComplaintMessageLog();
|
|
|
messageLog.setComplaintNo(complaintNo);
|
|
|
@@ -289,15 +263,15 @@ public class PushServiceImpl implements IPushService
|
|
|
messageLog.setContent(smsInfoJson);
|
|
|
try
|
|
|
{
|
|
|
- Map<String, Object> resp = retry(() -> smsClient.sendSmsByTemplate(
|
|
|
+ Map<String, Object> resp = retry(() -> smsClient.sendSmsToAdmin(
|
|
|
receiverInfo, teacherName, school, complaintNumber,
|
|
|
- complaint, templateCode, null, null));
|
|
|
+ complaint, operatorStaffNo, teacherName));
|
|
|
messageLog.setResult(1);
|
|
|
messageLog.setMsgId(resp == null ? "" : String.valueOf(resp.getOrDefault("msg_id", "")));
|
|
|
}
|
|
|
catch (Exception e)
|
|
|
{
|
|
|
- log.error("模板短信推送失败 complaintNo={}", complaintNo, e);
|
|
|
+ log.error("学校管理员短信推送失败 complaintNo={}", complaintNo, e);
|
|
|
messageLog.setResult(0);
|
|
|
messageLog.setErrorMsg(StringUtils.abbreviate(e.getMessage(), 450));
|
|
|
}
|
|
|
@@ -338,27 +312,31 @@ public class PushServiceImpl implements IPushService
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 短信通知群众(新模板格式)
|
|
|
- * sms_info为JSON字符串,包含school/complaint_type/complaint_result/template_code
|
|
|
+ * 给投诉人(群众)发送短信并写日志(带重试)
|
|
|
+ * <p>
|
|
|
+ * 适用场景:办结通知、驳回通知、复核结果通知等
|
|
|
+ * 模板ID从配置 ums.sms.citizen-template-code 读取
|
|
|
*
|
|
|
* @param workorder 工单对象
|
|
|
- * @param complaintResult 投诉处理结果(办结/驳回/复核结果等)
|
|
|
+ * @param complaintResult 处理结果(办结/驳回/复核结果等)
|
|
|
*/
|
|
|
- private void sendSmsToCitizen(ComplaintWorkorder workorder, String complaintResult)
|
|
|
+ private void sendSmsToCitizenWithLog(ComplaintWorkorder workorder, String complaintResult)
|
|
|
{
|
|
|
if (StringUtils.isBlank(workorder.getPhone()))
|
|
|
{
|
|
|
- log.warn("工单 {} 群众未留手机号,跳过短信推送", workorder.getComplaintNo());
|
|
|
+ log.warn("工单 {} 投诉人未留手机号,跳过短信推送", workorder.getComplaintNo());
|
|
|
return;
|
|
|
}
|
|
|
if (!umsProperties.getSms().isEnabled())
|
|
|
{
|
|
|
- log.info("短信通道未启用,跳过群众短信推送 complaintNo={}", workorder.getComplaintNo());
|
|
|
+ log.info("短信通道未启用,跳过投诉人短信推送 complaintNo={}", workorder.getComplaintNo());
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
String receiverInfo = "||||" + workorder.getPhone();
|
|
|
- String templateCode = "SMS_512265662";
|
|
|
+ String templateCode = umsProperties.getSms().getCitizenTemplateCode();
|
|
|
+ // 发送人学工号:东软平台要求 operator_id 非空,否则消息只受理不实际投递
|
|
|
+ String operatorStaffNo = resolveCitizenSmsOperator(workorder);
|
|
|
|
|
|
// 构造sms_info的JSON字符串(用于日志记录)
|
|
|
String smsInfoJson = "{\"school\":\"" + StringUtils.defaultString(workorder.getSchoolName())
|
|
|
@@ -379,15 +357,14 @@ public class PushServiceImpl implements IPushService
|
|
|
workorder.getSchoolName(),
|
|
|
workorder.getCategory(),
|
|
|
complaintResult,
|
|
|
- templateCode,
|
|
|
- null,
|
|
|
+ operatorStaffNo,
|
|
|
null));
|
|
|
messageLog.setResult(1);
|
|
|
messageLog.setMsgId(resp == null ? "" : String.valueOf(resp.getOrDefault("msg_id", "")));
|
|
|
}
|
|
|
catch (Exception e)
|
|
|
{
|
|
|
- log.error("群众短信推送失败 complaintNo={}", workorder.getComplaintNo(), e);
|
|
|
+ log.error("投诉人短信推送失败 complaintNo={}", workorder.getComplaintNo(), e);
|
|
|
messageLog.setResult(0);
|
|
|
messageLog.setErrorMsg(StringUtils.abbreviate(e.getMessage(), 450));
|
|
|
}
|
|
|
@@ -415,6 +392,35 @@ public class PushServiceImpl implements IPushService
|
|
|
messageLogMapper.insertComplaintMessageLog(messageLog);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 群众短信的发送人学工号:取工单所属学校的管理员学工号(系统代发)
|
|
|
+ * <p>
|
|
|
+ * 东软平台要求 operator_id 非空,否则消息仅"发布成功"但不会实际投递;
|
|
|
+ * 取不到时返回空串(UmsSmsClient 会打告警日志)。
|
|
|
+ */
|
|
|
+ private String resolveCitizenSmsOperator(ComplaintWorkorder workorder)
|
|
|
+ {
|
|
|
+ try
|
|
|
+ {
|
|
|
+ List<SysUser> admins = sysUserMapper.selectUsersByUnitUid(workorder.getUnitUid());
|
|
|
+ if (admins != null)
|
|
|
+ {
|
|
|
+ for (SysUser admin : admins)
|
|
|
+ {
|
|
|
+ if (StringUtils.isNotBlank(admin.getStaffNo()))
|
|
|
+ {
|
|
|
+ return admin.getStaffNo();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch (Exception e)
|
|
|
+ {
|
|
|
+ log.warn("查询群众短信发送人学工号失败 complaintNo={}", workorder.getComplaintNo(), e);
|
|
|
+ }
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 短信接收人信息:姓名|学工号|部门ID|部门名称|电话号码
|
|
|
* 学校管理员从 sys_user 读取:nickName(姓名)、staffNo(学工号)、unitUid(学校)、phonenumber(电话)
|