This commit is contained in:
@jyuhsin
2025-06-19 11:29:54 +08:00
parent 81a5d6f7ab
commit 1e851ef2de
+80 -73
View File
@@ -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<msgUser> 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<Map<String, String>> 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<Map<String, String>> 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<Map<String, String>> receivers = List.of(Map.of("type", "User", "name", userName, "usreId", loginName));
sendTextMsg(msgTitle, msgContent, receivers);
}
/**
* 发送微信消息给多个用户
*/
public void sendTextMsg(String msgTitle, String msgContent, List<Map<String, String>> 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;
}
}