Browse Source

新增了短信接口

dev-V1.10.3
vincent 1 week ago
parent
commit
34f128e66b
  1. 7
      zdxt-modules/zdxt-enforcement-code/pom.xml
  2. 79
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/web/supervision/CommonController.java
  3. 71
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EfcodeCpNoticeServiceImpl.java
  4. 8
      zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/thirdparty/impl/SIQServiceImpl.java

7
zdxt-modules/zdxt-enforcement-code/pom.xml

@ -159,5 +159,12 @@
<version>2.18.0</version> <version>2.18.0</version>
</dependency> </dependency>
<!-- 政务短信平台 WebService 客户端 (Axis 1.x) -->
<dependency>
<groupId>axis</groupId>
<artifactId>axis</artifactId>
<version>1.4</version>
</dependency>
</dependencies> </dependencies>
</project> </project>

79
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/web/supervision/CommonController.java

@ -0,0 +1,79 @@
package com.zdxt.enforcementcode.controller.web.supervision;
import com.zdxt.enforcementcode.common.util.ZwSmsClient;
import com.zdxt.enforcementcode.domain.bo.thirdparty.SIQMsgParamBo;
import com.zdxt.enforcementcode.service.thirdparty.ISIQService;
import jakarta.validation.constraints.NotBlank;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.domain.R;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.web.core.BaseController;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
/**
* 监督端-通用接口
*/
@Slf4j
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/web/common")
public class CommonController extends BaseController {
private final ZwSmsClient zwSmsClient;
private final ISIQService siqService;
/**
* 直接发送短信(内容写死,用于联调测试)
*
*
*/
@GetMapping("/sendSms")
public R<String> sendSmsTest() {
String content = "【测试短信】尊敬的用户,您有一条执法预约提醒信息,请查收。";
String phone = "13751146725";
try {
String result = zwSmsClient.sendMessage(phone, content);
log.info("测试短信发送完成,phone={},平台返回:{}", phone, result);
return R.ok("发送成功", result);
} catch (Exception e) {
log.error("测试短信发送失败,phone={}", phone, e);
return R.fail("短信发送失败:" + e.getMessage());
}
}
/**
* 直接发送站内信(内容写死,用于联调测试)
*
* @param receiveAccount 接收账号(深i企登录名)
*/
@GetMapping("/sendSiqMsg")
public R<Void> sendSiqMsgTest(@NotBlank(message = "接收账号不能为空") @RequestParam String receiveAccount) {
SIQMsgParamBo paramBo = new SIQMsgParamBo();
paramBo.setCreateBy(LoginHelper.getUsername());
paramBo.setReceiveAccount(receiveAccount);
paramBo.setSourceId("0");
Map<String, String> variables = new HashMap<>();
variables.put("enterName", "测试");
variables.put("dept", "深圳市司法局");
variables.put("time", "2026-10-25 上午");
paramBo.setAdditionalData(variables);
try {
siqService.sendMsg(paramBo);
log.info("测试站内信发送完成,receiveAccount={}", paramBo.getReceiveAccount());
return R.ok("发送成功", null);
} catch (Exception e) {
log.error("测试站内信发送失败,receiveAccount={}", paramBo.getReceiveAccount(), e);
return R.fail("站内信发送失败:" + e.getMessage());
}
}
}

71
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EfcodeCpNoticeServiceImpl.java

@ -4,6 +4,7 @@ import cn.hutool.core.util.IdUtil;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.zdxt.enforcementcode.common.commonenum.MsgSourceTypeEnum; import com.zdxt.enforcementcode.common.commonenum.MsgSourceTypeEnum;
import com.zdxt.enforcementcode.common.util.ZwSmsClient;
import com.zdxt.enforcementcode.domain.EnterpriseInformation; import com.zdxt.enforcementcode.domain.EnterpriseInformation;
import com.zdxt.enforcementcode.domain.bean.EnforcementEducationServices; import com.zdxt.enforcementcode.domain.bean.EnforcementEducationServices;
import com.zdxt.enforcementcode.domain.bo.thirdparty.YuGaoMsgParamBo; import com.zdxt.enforcementcode.domain.bo.thirdparty.YuGaoMsgParamBo;
@ -20,6 +21,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.system.service.ISysConfigService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import com.zdxt.enforcementcode.domain.bo.EfcodeCpNoticeBo; import com.zdxt.enforcementcode.domain.bo.EfcodeCpNoticeBo;
@ -50,7 +52,10 @@ public class EfcodeCpNoticeServiceImpl implements IEfcodeCpNoticeService {
private final EfcodeCpNoticeMessageMapper noticeMessageMapper; private final EfcodeCpNoticeMessageMapper noticeMessageMapper;
private final ISysMessageViewLogService sysMessageViewLogService; private final ISysMessageViewLogService sysMessageViewLogService;
private final ISIQService siqService; private final ISIQService siqService;
private final ZwSmsClient zwSmsClient;
private final EnterpriseInformationMapper enterpriseInformationMapper; private final EnterpriseInformationMapper enterpriseInformationMapper;
private final ISysConfigService sysConfigService;
/** /**
* 查询行政执法检查计划-预告 * 查询行政执法检查计划-预告
*/ */
@ -145,9 +150,7 @@ public class EfcodeCpNoticeServiceImpl implements IEfcodeCpNoticeService {
syncNoticeUsers(entity.getId(), bo.getEnforceUserNames(), bo.getEnforceUserIds(), bo.getEnforceUserTels()); syncNoticeUsers(entity.getId(), bo.getEnforceUserNames(), bo.getEnforceUserIds(), bo.getEnforceUserTels());
// 发布时自动生成系统提示消息 // 发布时自动生成系统提示消息
if (entity.getStatus() != null && entity.getStatus() == 1L) { if (entity.getStatus() != null && entity.getStatus() == 1L) {
generateSystemMessage(entity); // 调用站内信发送预告消息(发送前内部校验系统参数 sns.send)
// 调用站内信发送预告消息
getSendYuGaoMsg(entity); getSendYuGaoMsg(entity);
} }
@ -164,15 +167,53 @@ public class EfcodeCpNoticeServiceImpl implements IEfcodeCpNoticeService {
*/ */
public void getSendYuGaoMsg(EfcodeCpNotice entity){ public void getSendYuGaoMsg(EfcodeCpNotice entity){
YuGaoMsgParamBo paramBo = new YuGaoMsgParamBo(); // 发送前校验系统参数开关
paramBo.setSourceId(entity.getId()); if (!isSnsSendEnabled()) {
paramBo.setEnterpriseId(entity.getEnterpriseId()); log.info("系统参数[sns.send]未开启,跳过预告消息(站内信/短信)发送,预告ID:{}", entity.getId());
paramBo.setEnterpriseName(entity.getEnterpriseName()); return;
paramBo.setCreateByName(LoginHelper.getUsername()); }
paramBo.setDeptName(entity.getDeptName());
paramBo.setEnforceDate(entity.getEnforceDate()); generateSystemMessage(entity);
siqService.sendYuGaoMsg(paramBo); try{
YuGaoMsgParamBo paramBo = new YuGaoMsgParamBo();
paramBo.setSourceId(entity.getId());
paramBo.setEnterpriseId(entity.getEnterpriseId());
paramBo.setEnterpriseName(entity.getEnterpriseName());
paramBo.setCreateByName(LoginHelper.getUsername());
paramBo.setDeptName(entity.getDeptName());
paramBo.setEnforceDate(entity.getEnforceDate());
siqService.sendYuGaoMsg(paramBo);
}catch (Exception e){
log.error("发送预告消息异常:{}", e.getMessage());
}
try {
// 异步发送预告短信
sendYuGaoSms(entity);
}catch (Exception e){
log.error("发送预告短信异常:{}", e.getMessage());
}
} }
/**
* 异步发送预告短信,通知企业联系人
*/
private void sendYuGaoSms(EfcodeCpNotice entity) {
String enforceTimeText = switch (entity.getEnforceTime() == null ? 0 : entity.getEnforceTime().intValue()) {
case 1 -> "上午";
case 2 -> "下午";
case 3 -> "其他";
default -> "";
};
String content =
"您好! "+entity.getEnterpriseName()+", " +
entity.getContactPerson()
+", 您有一条于: "+ entity.getEnforceDate() + enforceTimeText+" 的执法预约信息, 请查收";
zwSmsClient.asyncSendSms(entity.getContactPhone(), content);
}
/** /**
* 修改预告(仅草稿可修改)并同步更新 notice_users 表 * 修改预告(仅草稿可修改)并同步更新 notice_users 表
*/ */
@ -446,4 +487,12 @@ public class EfcodeCpNoticeServiceImpl implements IEfcodeCpNoticeService {
.set(EfcodeCpNoticeMessage::getUpdateTime, new Date()); .set(EfcodeCpNoticeMessage::getUpdateTime, new Date());
return noticeMessageMapper.update(null, wrapper) > 0; return noticeMessageMapper.update(null, wrapper) > 0;
} }
/**
* 校验系统参数 sns.send 是否开启(1=true=Y 视为开启)
*/
private boolean isSnsSendEnabled() {
String value = sysConfigService.selectConfigByKey("sns.send");
return "1".equals(value) || "true".equalsIgnoreCase(value) || "Y".equalsIgnoreCase(value);
}
} }

8
zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/thirdparty/impl/SIQServiceImpl.java

@ -93,9 +93,15 @@ public class SIQServiceImpl implements ISIQService {
} }
for (EnterpriseUserRefVo userRef : userRefList) { for (EnterpriseUserRefVo userRef : userRefList) {
// 账号为空则跳过,不发送该用户的消息
if (userRef == null || userRef.getUserId() != null) {
log.warn("企业[{}]关联用户[{}]登录账号为空,跳过预告消息发送", enterpriseId,
userRef == null ? "" : userRef.getUserId());
continue;
}
SIQMsgParamBo siqMsgParamBo = new SIQMsgParamBo(); SIQMsgParamBo siqMsgParamBo = new SIQMsgParamBo();
siqMsgParamBo.setCreateBy(paramBo.getCreateByName()); siqMsgParamBo.setCreateBy(paramBo.getCreateByName());
siqMsgParamBo.setReceiveAccount(String.valueOf(userRef.getLoginName())); siqMsgParamBo.setReceiveAccount(userRef.getUserId() + "");
Map<String, String> variables = new HashMap<>(); Map<String, String> variables = new HashMap<>();
variables.put("enterName", paramBo.getEnterpriseName()); variables.put("enterName", paramBo.getEnterpriseName());
variables.put("dept", paramBo.getDeptName()); variables.put("dept", paramBo.getDeptName());

Loading…
Cancel
Save