From 34f128e66b241ac0f42f346ffb3462e6f3c16214 Mon Sep 17 00:00:00 2001 From: vincent Date: Fri, 23 Oct 2026 11:31:57 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BA=86=E7=9F=AD=E4=BF=A1?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- zdxt-modules/zdxt-enforcement-code/pom.xml | 7 ++ .../web/supervision/CommonController.java | 79 +++++++++++++++++++ .../impl/EfcodeCpNoticeServiceImpl.java | 71 ++++++++++++++--- .../thirdparty/impl/SIQServiceImpl.java | 8 +- 4 files changed, 153 insertions(+), 12 deletions(-) create mode 100644 zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/web/supervision/CommonController.java diff --git a/zdxt-modules/zdxt-enforcement-code/pom.xml b/zdxt-modules/zdxt-enforcement-code/pom.xml index 2ba4dfe9..7ad5a716 100644 --- a/zdxt-modules/zdxt-enforcement-code/pom.xml +++ b/zdxt-modules/zdxt-enforcement-code/pom.xml @@ -159,5 +159,12 @@ 2.18.0 + + + axis + axis + 1.4 + + diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/web/supervision/CommonController.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/controller/web/supervision/CommonController.java new file mode 100644 index 00000000..61e0a67f --- /dev/null +++ b/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 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 sendSiqMsgTest(@NotBlank(message = "接收账号不能为空") @RequestParam String receiveAccount) { + SIQMsgParamBo paramBo = new SIQMsgParamBo(); + paramBo.setCreateBy(LoginHelper.getUsername()); + paramBo.setReceiveAccount(receiveAccount); + paramBo.setSourceId("0"); + Map 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()); + } + } + +} diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EfcodeCpNoticeServiceImpl.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EfcodeCpNoticeServiceImpl.java index 2926778f..b969fe9d 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/impl/EfcodeCpNoticeServiceImpl.java +++ b/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.UpdateWrapper; 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.bean.EnforcementEducationServices; 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 lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.dromara.system.service.ISysConfigService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.zdxt.enforcementcode.domain.bo.EfcodeCpNoticeBo; @@ -50,7 +52,10 @@ public class EfcodeCpNoticeServiceImpl implements IEfcodeCpNoticeService { private final EfcodeCpNoticeMessageMapper noticeMessageMapper; private final ISysMessageViewLogService sysMessageViewLogService; private final ISIQService siqService; + private final ZwSmsClient zwSmsClient; 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()); // 发布时自动生成系统提示消息 if (entity.getStatus() != null && entity.getStatus() == 1L) { - generateSystemMessage(entity); - - // 调用站内信发送预告消息 + // 调用站内信发送预告消息(发送前内部校验系统参数 sns.send) getSendYuGaoMsg(entity); } @@ -164,15 +167,53 @@ public class EfcodeCpNoticeServiceImpl implements IEfcodeCpNoticeService { */ public void getSendYuGaoMsg(EfcodeCpNotice entity){ - 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); + // 发送前校验系统参数开关 + if (!isSnsSendEnabled()) { + log.info("系统参数[sns.send]未开启,跳过预告消息(站内信/短信)发送,预告ID:{}", entity.getId()); + return; + } + + generateSystemMessage(entity); + 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 表 */ @@ -446,4 +487,12 @@ public class EfcodeCpNoticeServiceImpl implements IEfcodeCpNoticeService { .set(EfcodeCpNoticeMessage::getUpdateTime, new Date()); 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); + } } diff --git a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/thirdparty/impl/SIQServiceImpl.java b/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/thirdparty/impl/SIQServiceImpl.java index 10e95367..e5b9134b 100644 --- a/zdxt-modules/zdxt-enforcement-code/src/main/java/com/zdxt/enforcementcode/service/thirdparty/impl/SIQServiceImpl.java +++ b/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) { + // 账号为空则跳过,不发送该用户的消息 + if (userRef == null || userRef.getUserId() != null) { + log.warn("企业[{}]关联用户[{}]登录账号为空,跳过预告消息发送", enterpriseId, + userRef == null ? "" : userRef.getUserId()); + continue; + } SIQMsgParamBo siqMsgParamBo = new SIQMsgParamBo(); siqMsgParamBo.setCreateBy(paramBo.getCreateByName()); - siqMsgParamBo.setReceiveAccount(String.valueOf(userRef.getLoginName())); + siqMsgParamBo.setReceiveAccount(userRef.getUserId() + ""); Map variables = new HashMap<>(); variables.put("enterName", paramBo.getEnterpriseName()); variables.put("dept", paramBo.getDeptName());