From 1e851ef2de417f1c0815c4776c2838533e5281f0 Mon Sep 17 00:00:00 2001 From: "@jyuhsin" <729757837@qq.com> Date: Thu, 19 Jun 2025 11:29:54 +0800 Subject: [PATCH] commit --- .../java/io/v/nutz/base/utils/MsgApi.java | 153 +++++++++--------- 1 file changed, 80 insertions(+), 73 deletions(-) diff --git a/src/main/java/io/v/nutz/base/utils/MsgApi.java b/src/main/java/io/v/nutz/base/utils/MsgApi.java index eb038e6..c55b990 100644 --- a/src/main/java/io/v/nutz/base/utils/MsgApi.java +++ b/src/main/java/io/v/nutz/base/utils/MsgApi.java @@ -20,103 +20,112 @@ import org.nutz.lang.util.NutMap; import java.util.List; import java.util.Map; +import java.util.Objects; /** * @author zxy * @Description 消息API * @createTime 2022年01月27日 11:20:00 */ - -@IocBean @Slf4j +@IocBean public class MsgApi { @Inject private RedisService redisService; - /** - * @param msgTitle 消息标题 - * @param msgContent 消息内容 - * @param msgType 消息类型(0:图文,1:文字,2:外链) - * @param sendStatus 发送状态,1:实时发送 2:定时消息 - * @param sendChannel 发送渠道Mail:邮件,WeChat:微信, IntelligenceMode:智能渠道 多个渠道用英文逗号隔开(如果选择智能模式则不可再选其他模式) - * @param receivers 接收人,Json格式(当sendMode为普通模式normal 时必填) 接收人格式:type为接收人类型,默认为User; usreId可以填写工号或手机号;name为接收人姓名 - * @param waitLink 页面的跳转地址,当消息是待办消息时(必填)。 - * @author hpf - * @description - */ - public void sendMsg(String msgTitle, String msgContent, Integer msgType, Integer sendStatus, String sendChannel, List receivers, String waitLink) { - try { - if (!Globals.MyConfig.getBoolean("SendMsg")) { - log.info("发送失败,消息暂未开启!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); - return; - } - - if (Globals.isEnv(Env.dev)) { - log.info("开发模式不允许发送短信!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); - return; - } - - if (StrUtil.isBlank(msgTitle)||StrUtil.isBlank(msgContent) ||StrUtil.isEmpty(sendChannel)||receivers.size()==0) { - log.info("发送失败,缺少需要参数请检查!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); - return; - } - - String msgToken = getMsgToken(); - NutMap map = new NutMap(); - - List> list = List.of(Map.of("type", "User", "name", "工会测试", "usreId", "LSGH0001")); - - map.put("token", msgToken); - map.put("msgtitle", msgTitle); - map.put("msgContent", msgContent); - map.put("msgType", msgType); - map.put("sendStatus", sendStatus); - map.put("sendChannel", sendChannel); - map.put("sendMode", "normal"); - map.put("receivers", Json.toJson(list)); - map.put("waitLink", waitLink); - //发送 - map.put("sendMsgType", 1); - - Header header = Header.create(); - org.nutz.http.Response response = Http.post3(MSG_API, Json.toJson(map), header, 200000); - System.out.println(response); - - HttpRequest request = HttpUtil.createPost(MSG_API) - .body(Json.toJson(map)); - JSONObject jsonObject = JSON.parseObject(request.execute().body()); - int status = jsonObject.getInteger("rspCode"); - - if (status == 000000) { - log.info("发送成功>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"); - } else { - log.info("发送失败>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"); - throw new RuntimeException("Message sending failed with status code: " + status + ", Message: " + jsonObject.getString("rspMsg")); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - - private static final String TOKEN_API = "https://mc.zjitc.edu.cn/msg/getThirdAPIToken"; private static final String APP_Id = "MSG10029935"; private static final String APP_PASSWORD = "N2NkOTI3NDVmZjY0ZTkwYTI0OGVjYjQzYjZhNDIyMzE"; private static final String MSG_TOKEN_NAME = "msgToken"; private static final String MSG_API = "https://mc.zjitc.edu.cn/message/sendMessageApi"; + private static final String SMS_API = "https://mc.zjitc.edu.cn/message/sendMessageBySMSApi"; + + /** + * 发送短信(单个用户) + */ + public void sendSMSMsg(String msgContent, String userName, String mobile) { + sendSMSMsg(msgContent, List.of(Map.of("name", userName, "mobile", mobile))); + } + + /** + * 发送短信(批量用户) + */ + public void sendSMSMsg(String msgContent, List> receivers) { + NutMap paramsMap = new NutMap(); + paramsMap.put("token", getMsgToken()); + paramsMap.put("msgContent", msgContent); + paramsMap.put("receivers", Json.toJson(receivers)); + sendMessage(SMS_API, paramsMap, "1", "短信"); + } + + /** + * 发送微信消息给单个用户 + */ + public void sendTextMsg(String msgTitle, String msgContent, String loginName, String userName) { + List> receivers = List.of(Map.of("type", "User", "name", userName, "usreId", loginName)); + sendTextMsg(msgTitle, msgContent, receivers); + } + + /** + * 发送微信消息给多个用户 + */ + public void sendTextMsg(String msgTitle, String msgContent, List> receivers) { + NutMap paramsMap = new NutMap(); + paramsMap.put("token", getMsgToken()); + paramsMap.put("msgtitle", msgTitle); + paramsMap.put("msgContent", msgContent); + paramsMap.put("msgType", 1); + paramsMap.put("sendStatus", 1); + paramsMap.put("sendChannel", "WeChat"); + paramsMap.put("sendMode", "normal"); + paramsMap.put("receivers", Json.toJson(receivers)); + paramsMap.put("sendMsgType", 1); + sendMessage(MSG_API, paramsMap, "000000", "微信消息"); + } + + private void sendMessage(String apiUrl, NutMap paramsMap, String successCode, String msgTypeDesc) { + try { + JSONObject response = sendRequest(apiUrl, paramsMap); + String rspCode = response.getString("rspCode"); + if (Objects.equals(rspCode, successCode)) { + log.info("{} 发送成功", msgTypeDesc); + } else { + String errorMsg = String.format("%s 发送失败,错误码:%s,错误信息:%s", + msgTypeDesc, + rspCode, + response.getString("rspMsg")); + log.error(errorMsg); + } + } catch (Exception e) { + log.error("发送 {} 异常", msgTypeDesc, e); + } + } + + private JSONObject sendRequest(String apiUrl, NutMap paramsMap) { + if (!Globals.MyConfig.getBoolean("SendMsg")) { + log.warn("消息未启用,跳过发送"); + } + if (Globals.isEnv(Env.dev)) { + log.warn("开发环境禁止发送真实消息"); + } + String jsonBody = Json.toJson(paramsMap); + log.debug("请求体: {}", jsonBody); + HttpRequest request = HttpUtil.createPost(apiUrl).body(jsonBody); + String responseBody = request.execute().body(); + log.debug("响应体: {}", responseBody); + return JSON.parseObject(responseBody); + } /** * 获取token - * - * @return */ private String getMsgToken() { String token = redisService.get(MSG_TOKEN_NAME); if (StrUtil.isBlank(token)) { String body = HttpRequest.post(TOKEN_API + "?appId=" + APP_Id + "&appPassword=" + APP_PASSWORD).execute().body(); NutMap map = Json.fromJson(NutMap.class, body); - if (map.getInt("rspCode") == 000000) { + if (Objects.equals("000000", map.getString("rspCode"))) { NutMap data = Json.fromJson(NutMap.class, map.getString("resultData")); token = data.getString("token"); redisService.setex(MSG_TOKEN_NAME, 3600, token); @@ -126,6 +135,4 @@ public class MsgApi { } return token; } - - }