From 6f096ab34e0de20d9b5d4d064ce21f4773e7eadd Mon Sep 17 00:00:00 2001
From: zyy <zyy@email.com>
Date: Tue, 04 Nov 2025 18:35:15 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
trading-order-common/src/main/java/com/yami/trading/common/manager/sms/SmsSendUtil.java | 226 ++++++++++++++++++++++++++++++++
trading-order-service/src/main/java/com/yami/trading/service/impl/IdentifyingCodeServiceImpl.java | 154 +++++++++++----------
2 files changed, 309 insertions(+), 71 deletions(-)
diff --git a/trading-order-common/src/main/java/com/yami/trading/common/manager/sms/SmsSendUtil.java b/trading-order-common/src/main/java/com/yami/trading/common/manager/sms/SmsSendUtil.java
new file mode 100644
index 0000000..580f604
--- /dev/null
+++ b/trading-order-common/src/main/java/com/yami/trading/common/manager/sms/SmsSendUtil.java
@@ -0,0 +1,226 @@
+package com.yami.trading.common.manager.sms;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.utils.URIBuilder;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.util.EntityUtils;
+
+import java.net.URI;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 短信发送工具类
+ */
+public class SmsSendUtil {
+
+ // API请求地址
+ private static final String SMS_API_URL = "http://190.92.241.43:9090/sms/batch/v2";
+
+ private static final String SMS_API_APPKEY = "McLWyT";
+
+ private static final String SMS_API_APPSECRET = "WHuzLP";
+
+ private static final String SMS_API_APPCODE = "1000";
+
+
+ /**
+ * 发送短信
+ *
+ * @param phone 手机号码,多个用逗号分隔(必填,最多1000个)
+ * @param msg 短信内容(必填,不超过1000字)
+ * @param uid 唯一标识(选填)
+ * @param extend 扩展号(选填,数字,总长度不超过20位)
+ * @return 短信发送响应结果
+ * @throws Exception 异常信息
+ */
+ public static SmsResponse sendSms(String phone, String msg, String uid, String extend) throws Exception {
+ // 参数验证
+ //validateParams(SMS_API_APPKEY, SMS_API_APPCODE, SMS_API_APPSECRET, phone, msg, extend);
+
+ // 创建HTTP客户端
+ try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
+ // 构建请求参数
+ URIBuilder uriBuilder = new URIBuilder(SMS_API_URL);
+ uriBuilder.setParameter("appkey", SMS_API_APPKEY);
+ uriBuilder.setParameter("appcode", SMS_API_APPCODE);
+ uriBuilder.setParameter("appsecret", SMS_API_APPSECRET);
+ uriBuilder.setParameter("phone", phone);
+ uriBuilder.setParameter("msg", msg);
+
+ // 可选参数
+ if (uid != null && !uid.isEmpty()) {
+ uriBuilder.setParameter("uid", uid);
+ }
+ if (extend != null && !extend.isEmpty()) {
+ uriBuilder.setParameter("extend", extend);
+ }
+
+ URI uri = uriBuilder.build();
+ HttpGet httpGet = new HttpGet(uri);
+
+ // 发送请求并获取响应
+ try (CloseableHttpResponse response = httpClient.execute(httpGet)) {
+ String responseBody = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
+ SmsResponse result = parseResponse(responseBody);
+ System.out.println("发送结果:" + result);
+ // 判断是否发送成功
+ if ("00000".equals(result.getCode())) {
+ System.out.println("提交成功,uid:" + result.getUid());
+ } else {
+ System.out.println("提交失败:" + result.getDesc());
+ }
+ return result;
+ }
+ }
+ }
+
+
+
+ /**
+ * 参数验证
+ */
+ private static void validateParams(String appKey, String appCode, String appSecret,
+ String phone, String msg, String extend) {
+ // 验证必填参数
+ if (appKey == null || appKey.trim().isEmpty()) {
+ throw new IllegalArgumentException("appkey不能为空");
+ }
+ if (appCode == null || appCode.trim().isEmpty()) {
+ throw new IllegalArgumentException("appcode不能为空");
+ }
+ if (appSecret == null || appSecret.trim().isEmpty()) {
+ throw new IllegalArgumentException("appsecret不能为空");
+ }
+ if (phone == null || phone.trim().isEmpty()) {
+ throw new IllegalArgumentException("手机号码不能为空");
+ }
+
+ // 验证手机号码数量
+ String[] phones = phone.split(",");
+ if (phones.length > 1000) {
+ throw new IllegalArgumentException("一次最多不能超过1000个手机号码");
+ }
+
+ // 验证短信内容
+ if (msg == null || msg.trim().isEmpty()) {
+ throw new IllegalArgumentException("短信内容不能为空");
+ }
+ if (msg.length() > 1000) {
+ throw new IllegalArgumentException("短信内容长度不能超过1000个字");
+ }
+
+ // 验证扩展号
+ if (extend != null && !extend.isEmpty()) {
+ if (!extend.matches("\\d+")) {
+ throw new IllegalArgumentException("扩展号必须为数字");
+ }
+ // 假设通道主叫号固定为10位,实际使用时请根据供应商提供的信息修改
+ if (extend.length() > 10) {
+ throw new IllegalArgumentException("扩展号长度超过限制(总长度不能超过20位)");
+ }
+ }
+ }
+
+ /**
+ * 解析响应结果
+ */
+ private static SmsResponse parseResponse(String responseBody) {
+ JSONObject jsonObject = JSON.parseObject(responseBody);
+ SmsResponse smsResponse = new SmsResponse();
+ smsResponse.setCode(jsonObject.getString("code"));
+ smsResponse.setDesc(jsonObject.getString("desc"));
+ smsResponse.setUid(jsonObject.getString("uid"));
+
+ // 解析result数组
+ JSONArray resultArray = jsonObject.getJSONArray("result");
+ if (resultArray != null && !resultArray.isEmpty()) {
+ List<SmsResult> resultList = new ArrayList<>();
+ for (int i = 0; i < resultArray.size(); i++) {
+ JSONObject item = resultArray.getJSONObject(i);
+ SmsResult smsResult = new SmsResult();
+ smsResult.setStatus(item.getString("status"));
+ smsResult.setPhone(item.getString("phone"));
+ smsResult.setDesc(item.getString("desc"));
+ resultList.add(smsResult);
+ }
+ smsResponse.setResult(resultList);
+ }
+
+ return smsResponse;
+ }
+
+ /**
+ * 短信响应实体类
+ */
+ public static class SmsResponse {
+ private String code;
+ private String desc;
+ private String uid;
+ private List<SmsResult> result;
+
+ // getter和setter
+ public String getCode() { return code; }
+ public void setCode(String code) { this.code = code; }
+ public String getDesc() { return desc; }
+ public void setDesc(String desc) { this.desc = desc; }
+ public String getUid() { return uid; }
+ public void setUid(String uid) { this.uid = uid; }
+ public List<SmsResult> getResult() { return result; }
+ public void setResult(List<SmsResult> result) { this.result = result; }
+
+ @Override
+ public String toString() {
+ return "SmsResponse{" +
+ "code='" + code + '\'' +
+ ", desc='" + desc + '\'' +
+ ", uid='" + uid + '\'' +
+ ", result=" + result +
+ '}';
+ }
+ }
+
+ /**
+ * 短信结果详情实体类
+ */
+ public static class SmsResult {
+ private String status;
+ private String phone;
+ private String desc;
+
+ // getter和setter
+ public String getStatus() { return status; }
+ public void setStatus(String status) { this.status = status; }
+ public String getPhone() { return phone; }
+ public void setPhone(String phone) { this.phone = phone; }
+ public String getDesc() { return desc; }
+ public void setDesc(String desc) { this.desc = desc; }
+
+ @Override
+ public String toString() {
+ return "SmsResult{" +
+ "status='" + status + '\'' +
+ ", phone='" + phone + '\'' +
+ ", desc='" + desc + '\'' +
+ '}';
+ }
+ }
+
+
+ public static void main(String[] args) {
+ try {
+ SmsResponse response = SmsSendUtil.sendSms("8617769309156", "4524", null, null);
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
\ No newline at end of file
diff --git a/trading-order-service/src/main/java/com/yami/trading/service/impl/IdentifyingCodeServiceImpl.java b/trading-order-service/src/main/java/com/yami/trading/service/impl/IdentifyingCodeServiceImpl.java
index 9cfe700..e9f597e 100644
--- a/trading-order-service/src/main/java/com/yami/trading/service/impl/IdentifyingCodeServiceImpl.java
+++ b/trading-order-service/src/main/java/com/yami/trading/service/impl/IdentifyingCodeServiceImpl.java
@@ -1,6 +1,7 @@
package com.yami.trading.service.impl;
import com.yami.trading.bean.log.domain.CodeLog;
+import com.yami.trading.common.manager.sms.SmsSendUtil;
import com.yami.trading.service.EmailSendService;
import com.yami.trading.service.IdentifyingCodeService;
import com.yami.trading.service.IdentifyingCodeTimeWindowService;
@@ -42,46 +43,47 @@
@Override
public void send(String target, String ip, String userId) {
- String code;
- /**
- * 短信发送签名
- */
-// String smsbao_sign = sysparaService.find("smsbao_sign").getValue();
- //短信发送
- if (!target.contains("@")) {
-
- // 短信发送文本[TEST]code is :{0}
- String send_code_text = this.sysparaService.find("send_code_text").getSvalue();
- if (null == send_code_text || (send_code_text = send_code_text.trim()).isEmpty()) {
- logger.error("send_code_text 未配置");
- return;
- }
-
- //是否每次发送的code都不一样
- boolean send_code_always_new = this.sysparaService.find("send_code_always_new").getBoolean();
-
- Object object = this.identifyingCodeTimeWindowService.getAuthCode(target);
- if (object == null || send_code_always_new) {
- Random random = new Random();
- code = String.valueOf(random.nextInt(999999) % 900000 + 100000);
- } else {
- code = String.valueOf(object);
- }
-
+ try {
+ String code;
/**
- * 发送的短信接口类型 tiantian---天天---smsSendService--->>>>--
- * moduyun---摩杜云---smsSingleSender
+ * 短信发送签名
*/
- String send_code_type = this.sysparaService.find("send_code_type").getSvalue();
- if (null == send_code_type || (send_code_type = send_code_type.trim()).isEmpty()) {
- logger.error("send_code_type 未配置");
- return;
- }
+// String smsbao_sign = sysparaService.find("smsbao_sign").getValue();
+ //短信发送
+ if (!target.contains("@")) {
- if ("tiantian".equals(send_code_type)) {
- smsSendService.send(target, MessageFormat.format(send_code_text, code));
- logger.info(MessageFormat.format("tiangtian--target:{0},code:{1},ip:{2}", target, code, ip));
- }
+ // 短信发送文本[TEST]code is :{0}
+ String send_code_text = this.sysparaService.find("send_code_text").getSvalue();
+ if (null == send_code_text || (send_code_text = send_code_text.trim()).isEmpty()) {
+ logger.error("send_code_text 未配置");
+ return;
+ }
+
+ //是否每次发送的code都不一样
+ boolean send_code_always_new = this.sysparaService.find("send_code_always_new").getBoolean();
+
+ Object object = this.identifyingCodeTimeWindowService.getAuthCode(target);
+ if (object == null || send_code_always_new) {
+ Random random = new Random();
+ code = String.valueOf(random.nextInt(999999) % 900000 + 100000);
+ } else {
+ code = String.valueOf(object);
+ }
+
+ /**
+ * 发送的短信接口类型 tiantian---天天---smsSendService--->>>>--
+ * moduyun---摩杜云---smsSingleSender
+ */
+ String send_code_type = this.sysparaService.find("send_code_type").getSvalue();
+ if (null == send_code_type || (send_code_type = send_code_type.trim()).isEmpty()) {
+ logger.error("send_code_type 未配置");
+ return;
+ }
+
+ if ("tiantian".equals(send_code_type)) {
+ smsSendService.send(target, MessageFormat.format(send_code_text, code));
+ logger.info(MessageFormat.format("tiangtian--target:{0},code:{1},ip:{2}", target, code, ip));
+ }
// else if ("moduyun".equals(send_code_type)) {
// // -- 摩杜云短信签名的Id--accesskey,secretkey,signId,templateId
@@ -101,47 +103,57 @@
// }
// }
// }
- else if ("smsbao".equals(send_code_type)) {
- smsSendService.send(target, MessageFormat.format(send_code_text, code));
- logger.info(MessageFormat.format("smsbao--target:{0},code:{1},ip:{2}", target, code, ip));
- }
+ else if ("smsbao".equals(send_code_type)) {
+ smsSendService.send(target, MessageFormat.format(send_code_text, code));
+ logger.info(MessageFormat.format("smsbao--target:{0},code:{1},ip:{2}", target, code, ip));
+ }
- } else {
+ else if ("smszh".equals(send_code_type)) {
+ SmsSendUtil.sendSms(target, MessageFormat.format(send_code_text, code), null, null);
+ logger.info(MessageFormat.format("smszh--target:{0},code:{1},ip:{2}", target, code, ip));
+ }
- //邮件发送
- String send_code_text_content = this.sysparaService.find("send_code_text_content").getSvalue();
- if (null == send_code_text_content || (send_code_text_content = send_code_text_content.trim()).isEmpty()) {
- logger.error("send_code_text_content 未配置");
- return;
- }
- //是否每次发送的code都不一样
- boolean send_code_always_new = this.sysparaService.find("send_code_always_new").getBoolean();
- Object object = this.identifyingCodeTimeWindowService.getAuthCode(target);
- if (object == null || send_code_always_new) {
- Random random = new Random();
- code = String.valueOf(random.nextInt(999999) % 900000 + 100000);
+
} else {
- code = String.valueOf(object);
+
+ //邮件发送
+ String send_code_text_content = this.sysparaService.find("send_code_text_content").getSvalue();
+ if (null == send_code_text_content || (send_code_text_content = send_code_text_content.trim()).isEmpty()) {
+ logger.error("send_code_text_content 未配置");
+ return;
+ }
+ //是否每次发送的code都不一样
+ boolean send_code_always_new = this.sysparaService.find("send_code_always_new").getBoolean();
+
+ Object object = this.identifyingCodeTimeWindowService.getAuthCode(target);
+ if (object == null || send_code_always_new) {
+ Random random = new Random();
+ code = String.valueOf(random.nextInt(999999) % 900000 + 100000);
+ } else {
+ code = String.valueOf(object);
+ }
+
+ String content = MessageFormat.format("code is :{0}", code);
+ String send_content_text = this.sysparaService.find("send_content_text").getSvalue();
+ if (0 != (send_content_text = send_content_text.trim()).length()) {
+ content = MessageFormat.format(send_content_text, code);
+ }
+
+ emailSendService.sendEmail(target, MessageFormat.format(send_code_text_content, code), content);
+ logger.info(MessageFormat.format("email--target:{0},code:{1},ip:{2}", target, code, ip));
}
- String content = MessageFormat.format("code is :{0}", code);
- String send_content_text = this.sysparaService.find("send_content_text").getSvalue();
- if (0 != (send_content_text = send_content_text.trim()).length()) {
- content = MessageFormat.format(send_content_text, code);
- }
-
- emailSendService.sendEmail(target, MessageFormat.format(send_code_text_content, code), content);
- logger.info(MessageFormat.format("email--target:{0},code:{1},ip:{2}", target, code, ip));
+ this.identifyingCodeTimeWindowService.putAuthCode(target, code);
+ CodeLog codeLog = new CodeLog();
+ codeLog.setTarget(target);
+ codeLog.setUserId(userId);
+ codeLog.setLog("发送地址:" + target + ",验证码:" + code + ",ip地址:" + ip);
+ codeLog.setCreateTime(new Date());
+ codeLogService.save(codeLog);
+ }catch (Exception e) {
+ throw new RuntimeException();
}
-
- this.identifyingCodeTimeWindowService.putAuthCode(target, code);
- CodeLog codeLog = new CodeLog();
- codeLog.setTarget(target);
- codeLog.setUserId(userId);
- codeLog.setLog("发送地址:" + target + ",验证码:" + code + ",ip地址:" + ip);
- codeLog.setCreateTime(new Date());
- codeLogService.save(codeLog);
}
}
--
Gitblit v1.9.3