diff --git a/.travis.yml b/.travis.yml
index 1e697370484429ca3a689370c5ff50a6e1a2180d..08bc63950a115c92cf6e5489dc116a4400fc2d89 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -2,13 +2,10 @@ language: java
before_install:
- mvn install:install-file -Dfile=./lib/antlr-2.7.4.jar -DgroupId=net.sourceforge.cpdetector -DartifactId=antlr -Dpackaging=jar -Dversion=2.7.4 -DgeneratePom=true -DcreateChecksum=true
- - mvn install:install-file -Dfile=./lib/beautyeye_lnf.jar -DgroupId=com.beautyeye -DartifactId=beautyeye-lnf -Dpackaging=jar -Dversion=1.0 -DgeneratePom=true -DcreateChecksum=true
- mvn install:install-file -Dfile=./lib/chardet-1.0.jar -DgroupId=net.sourceforge.cpdetector -DartifactId=chardet -Dpackaging=jar -Dversion=1.0.0 -DgeneratePom=true -DcreateChecksum=true
- mvn install:install-file -Dfile=./lib/cpdetector_1.0.10.jar -DgroupId=net.sourceforge.cpdetector -DartifactId=cpdetector -Dpackaging=jar -Dversion=1.0.10 -DgeneratePom=true -DcreateChecksum=true
- - mvn install:install-file -Dfile=./lib/darcula.jar -DgroupId=com.darcula -DartifactId=darcula-lnf -Dpackaging=jar -Dversion=1.0 -DgeneratePom=true -DcreateChecksum=true
- mvn install:install-file -Dfile=./lib/jargs-1.0.jar -DgroupId=net.sourceforge.cpdetector -DartifactId=jargs -Dpackaging=jar -Dversion=1.0.0 -DgeneratePom=true -DcreateChecksum=true
- mvn install:install-file -Dfile=./lib/taobao-sdk-java-auto.jar -DgroupId=com.taobao -DartifactId=taobao-sdk-java-auto -Dpackaging=jar -Dversion=1.0.0 -DgeneratePom=true -DcreateChecksum=true
- - mvn install:install-file -Dfile=./lib/weblaf-1.29.jar -DgroupId=com.weblaf -DartifactId=weblaf-lnf -Dpackaging=jar -Dversion=1.2.9 -DgeneratePom=true -DcreateChecksum=true
jdk:
- openjdk8
diff --git a/lib/beautyeye_lnf.jar b/lib/beautyeye_lnf.jar
deleted file mode 100644
index e4f81936b81c166a52860a62e85e91ce3eab6219..0000000000000000000000000000000000000000
Binary files a/lib/beautyeye_lnf.jar and /dev/null differ
diff --git a/lib/darcula.jar b/lib/darcula.jar
deleted file mode 100644
index 8178abd82f1251e0892c2ee1ba14914a57e5a65b..0000000000000000000000000000000000000000
Binary files a/lib/darcula.jar and /dev/null differ
diff --git a/lib/weblaf-1.29.jar b/lib/weblaf-1.29.jar
deleted file mode 100644
index 55e9f9ba563fb371df163d5dbb6f0d222f739a35..0000000000000000000000000000000000000000
Binary files a/lib/weblaf-1.29.jar and /dev/null differ
diff --git a/pom.xml b/pom.xml
index 1973bde000d748a04e6a45cda323c6205080cecd..61152e4a8bd2f2389a5c42797eee7e1c2edb34f1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
com.fangxuele.tool
WePush
- 5.0.1
+ 5.0.2
jar
WePush
@@ -37,8 +37,8 @@
1.2.7
2.3
1.18.20
- 3.5.7
- 3.36.0.3
+ 3.5.13
+ 3.42.0.1
4.13.1
4.1.4
3.4.5
@@ -51,6 +51,7 @@
3.2
3.2
2.6.0
+ 3.1.847
@@ -425,6 +426,12 @@
+
+ com.tencentcloudapi
+ tencentcloud-sdk-java
+ ${tencentcloud-sdk-java.version}
+
+
@@ -440,36 +447,36 @@
true
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ bundling-for-windows
+ package
+
+ package
+
+
+ windows
+ true
+ jdk.crypto.ec,jdk.charsets
+
+
+
+
+ true
+ true
+ true
+
+
+ installForAllUsers
+ true
+ false
+ false
+
+ compiler:Default.isl
+
+
+
+
+
@@ -483,20 +490,20 @@
-
- bundling-for-mac
- package
-
- package
-
-
- mac
- true
- jdk.crypto.ec,jdk.charsets
- false
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -505,36 +512,6 @@
maven-install-plugin
2.5.2
-
- install-beautyeye
- clean
-
- lib/beautyeye_lnf.jar
- com.beautyeye
- beautyeye-lnf
- 1.0
- jar
- true
-
-
- install-file
-
-
-
- install-darcula
- clean
-
- lib/darcula.jar
- com.darcula
- darcula-lnf
- 1.0
- jar
- true
-
-
- install-file
-
-
install-taobao-sdk-auto
clean
diff --git a/src/main/java/com/fangxuele/tool/push/bean/account/TxYun3AccountConfig.java b/src/main/java/com/fangxuele/tool/push/bean/account/TxYun3AccountConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..983416d687ac7dd673cdfd31c0df6458fad6aea8
--- /dev/null
+++ b/src/main/java/com/fangxuele/tool/push/bean/account/TxYun3AccountConfig.java
@@ -0,0 +1,16 @@
+package com.fangxuele.tool.push.bean.account;
+
+import lombok.Data;
+
+/**
+ * 腾讯云3.0账号配置
+ */
+@Data
+public class TxYun3AccountConfig {
+ private String secretId;
+ private String secretKey;
+ private String endPoint;
+ private String region;
+ private String sign;
+ private String sdkAppId;
+}
diff --git a/src/main/java/com/fangxuele/tool/push/bean/account/WxCpAccountConfig.java b/src/main/java/com/fangxuele/tool/push/bean/account/WxCpAccountConfig.java
index 51414827fac26a58b4de218f07f98d1922c4c2d9..452a046d171baf4a12b3d275eac4cf039d0fba14 100644
--- a/src/main/java/com/fangxuele/tool/push/bean/account/WxCpAccountConfig.java
+++ b/src/main/java/com/fangxuele/tool/push/bean/account/WxCpAccountConfig.java
@@ -11,4 +11,6 @@ public class WxCpAccountConfig {
private String appName;
private String agentId;
private String secret;
+ private Boolean privateDep;
+ private String baseApiUrl;
}
diff --git a/src/main/java/com/fangxuele/tool/push/logic/MessageTypeEnum.java b/src/main/java/com/fangxuele/tool/push/logic/MessageTypeEnum.java
index 90d869f425848569b64e5f1ee36201bef2b87839..56dec05012ea7d2c49c6ba17741f03215a0ffdcd 100644
--- a/src/main/java/com/fangxuele/tool/push/logic/MessageTypeEnum.java
+++ b/src/main/java/com/fangxuele/tool/push/logic/MessageTypeEnum.java
@@ -30,8 +30,7 @@ public enum MessageTypeEnum {
WX_UNIFORM_MESSAGE(17, "小程序-统一服务消息"),
MA_SUBSCRIBE(18, "小程序-订阅消息"),
MP_SUBSCRIBE(19, "公众号-订阅通知"),
- WX_MP(20, "微信公众号"),
- WX_MA(21, "微信小程序");
+ TX_YUN_3(20, "腾讯云短信3.0");
private int code;
@@ -55,6 +54,7 @@ public enum MessageTypeEnum {
public static final int WX_UNIFORM_MESSAGE_CODE = 17;
public static final int MA_SUBSCRIBE_CODE = 18;
public static final int MP_SUBSCRIBE_CODE = 19;
+ public static final int TX_YUN_3_CODE = 20;
MessageTypeEnum(int code, String name) {
this.code = code;
@@ -123,10 +123,7 @@ public enum MessageTypeEnum {
name = MP_SUBSCRIBE.name;
break;
case 20:
- name = WX_MP.name;
- break;
- case 21:
- name = WX_MA.name;
+ name = TX_YUN_3.name;
break;
default:
name = "";
diff --git a/src/main/java/com/fangxuele/tool/push/logic/msgmaker/MsgMakerFactory.java b/src/main/java/com/fangxuele/tool/push/logic/msgmaker/MsgMakerFactory.java
index 71e01f4985d9c3ce5a7a058140754f1b96721640..82a8081b0a54493c2b4dc19bcdded1dc90b4f467 100644
--- a/src/main/java/com/fangxuele/tool/push/logic/msgmaker/MsgMakerFactory.java
+++ b/src/main/java/com/fangxuele/tool/push/logic/msgmaker/MsgMakerFactory.java
@@ -37,6 +37,9 @@ public class MsgMakerFactory {
case MessageTypeEnum.TX_YUN_CODE:
iMsgMaker = new TxYunMsgMaker(tMsg);
break;
+ case MessageTypeEnum.TX_YUN_3_CODE:
+ iMsgMaker = new TxYun3MsgMaker(tMsg);
+ break;
case MessageTypeEnum.HW_YUN_CODE:
iMsgMaker = new HwYunMsgMaker(tMsg);
break;
diff --git a/src/main/java/com/fangxuele/tool/push/logic/msgmaker/TxYun3MsgMaker.java b/src/main/java/com/fangxuele/tool/push/logic/msgmaker/TxYun3MsgMaker.java
new file mode 100644
index 0000000000000000000000000000000000000000..d1d1e67980d2a52d5831f79f3a5936d5099f1019
--- /dev/null
+++ b/src/main/java/com/fangxuele/tool/push/logic/msgmaker/TxYun3MsgMaker.java
@@ -0,0 +1,54 @@
+package com.fangxuele.tool.push.logic.msgmaker;
+
+import com.alibaba.fastjson.JSON;
+import com.fangxuele.tool.push.bean.TemplateData;
+import com.fangxuele.tool.push.domain.TMsg;
+import com.fangxuele.tool.push.domain.TMsgSms;
+import com.fangxuele.tool.push.util.TemplateUtil;
+import lombok.Getter;
+import org.apache.velocity.VelocityContext;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
+ * 腾讯云3.0模板短信加工器
+ *
+ *
+ * @author Zhou Bo
+ * @since 2023/9/4.
+ */
+@Getter
+public class TxYun3MsgMaker extends BaseMsgMaker implements IMsgMaker {
+
+ private String templateId;
+
+ private List paramList;
+
+ public TxYun3MsgMaker(TMsg tMsg) {
+ TMsgSms tMsgSms = JSON.parseObject(tMsg.getContent(), TMsgSms.class);
+ this.templateId = tMsgSms.getTemplateId();
+ paramList = new ArrayList<>();
+ for (TemplateData templateData : tMsgSms.getTemplateDataList()) {
+ paramList.add(templateData.getValue());
+ }
+ }
+
+ /**
+ * 组织腾讯云短信消息
+ *
+ * @param msgData 消息信息
+ * @return String[]
+ */
+ @Override
+ public String[] makeMsg(String[] msgData) {
+
+ VelocityContext velocityContext = getVelocityContext(msgData);
+ for (int i = 0; i < paramList.size(); i++) {
+ paramList.set(i, TemplateUtil.evaluate(paramList.get(i), velocityContext));
+ }
+ String[] paramArray = new String[paramList.size()];
+ return paramList.toArray(paramArray);
+ }
+}
diff --git a/src/main/java/com/fangxuele/tool/push/logic/msgsender/MsgSenderFactory.java b/src/main/java/com/fangxuele/tool/push/logic/msgsender/MsgSenderFactory.java
index 68ad200d560d821a52516c6e7659383b164538fb..ac95b7fe12f0a2df6c66c98b34968424fc108593 100644
--- a/src/main/java/com/fangxuele/tool/push/logic/msgsender/MsgSenderFactory.java
+++ b/src/main/java/com/fangxuele/tool/push/logic/msgsender/MsgSenderFactory.java
@@ -42,6 +42,9 @@ public class MsgSenderFactory {
case MessageTypeEnum.TX_YUN_CODE:
iMsgSender = new TxYunMsgSender(msgId, dryRun);
break;
+ case MessageTypeEnum.TX_YUN_3_CODE:
+ iMsgSender = new TxYun3MsgSender(msgId, dryRun);
+ break;
case MessageTypeEnum.HW_YUN_CODE:
iMsgSender = new HwYunMsgSender(msgId, dryRun);
break;
diff --git a/src/main/java/com/fangxuele/tool/push/logic/msgsender/TxYun3MsgSender.java b/src/main/java/com/fangxuele/tool/push/logic/msgsender/TxYun3MsgSender.java
new file mode 100644
index 0000000000000000000000000000000000000000..4cf9829bfcfbe2625db768841539d49cac0c3b30
--- /dev/null
+++ b/src/main/java/com/fangxuele/tool/push/logic/msgsender/TxYun3MsgSender.java
@@ -0,0 +1,193 @@
+package com.fangxuele.tool.push.logic.msgsender;
+
+import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSON;
+import com.fangxuele.tool.push.bean.account.TxYun3AccountConfig;
+import com.fangxuele.tool.push.dao.TAccountMapper;
+import com.fangxuele.tool.push.dao.TMsgMapper;
+import com.fangxuele.tool.push.domain.TAccount;
+import com.fangxuele.tool.push.domain.TMsg;
+import com.fangxuele.tool.push.logic.msgmaker.TxYun3MsgMaker;
+import com.fangxuele.tool.push.util.MybatisUtil;
+import com.tencentcloudapi.common.Credential;
+import com.tencentcloudapi.common.profile.ClientProfile;
+import com.tencentcloudapi.common.profile.HttpProfile;
+import com.tencentcloudapi.sms.v20210111.SmsClient;
+import com.tencentcloudapi.sms.v20210111.models.SendSmsRequest;
+import com.tencentcloudapi.sms.v20210111.models.SendSmsResponse;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.exception.ExceptionUtils;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ *
+ * 腾讯云3.0模板短信发送器
+ *
+ *
+ * @author RememBerBer
+ * @since 2023/9/4.
+ */
+@Slf4j
+public class TxYun3MsgSender implements IMsgSender {
+ /**
+ * 腾讯云短信sender
+ */
+ private SmsClient smsClient;
+
+ private TxYun3MsgMaker txYun3MsgMaker;
+
+ private static TAccountMapper accountMapper = MybatisUtil.getSqlSession().getMapper(TAccountMapper.class);
+ private static TMsgMapper msgMapper = MybatisUtil.getSqlSession().getMapper(TMsgMapper.class);
+
+ private Integer dryRun;
+
+ private static Map smsClientMap = new HashMap<>();
+
+ private TxYun3AccountConfig txYun3AccountConfig;
+
+
+ public TxYun3MsgSender(Integer msgId, Integer dryRun) {
+ TMsg tMsg = msgMapper.selectByPrimaryKey(msgId);
+ txYun3MsgMaker = new TxYun3MsgMaker(tMsg);
+ smsClient = getTxYunSender(tMsg.getAccountId());
+ this.dryRun = dryRun;
+
+ TAccount tAccount = accountMapper.selectByPrimaryKey(tMsg.getAccountId());
+ String accountConfig = tAccount.getAccountConfig();
+ txYun3AccountConfig = JSON.parseObject(accountConfig, TxYun3AccountConfig.class);
+ }
+
+ public static void removeAccount(Integer account1Id) {
+ smsClientMap.remove(account1Id);
+ }
+
+ @Override
+ public SendResult send(String[] msgData) {
+ SendResult sendResult = new SendResult();
+ try {
+ String templateId = txYun3MsgMaker.getTemplateId();
+ String smsSign = txYun3AccountConfig.getSign();
+ String[] params = txYun3MsgMaker.makeMsg(msgData);
+ String telNum = msgData[0];
+ if (dryRun == 1) {
+ sendResult.setSuccess(true);
+ return sendResult;
+ } else {
+ SendSmsRequest req = new SendSmsRequest();
+
+ /* 填充请求参数,这里request对象的成员变量即对应接口的入参
+ * 你可以通过官网接口文档或跳转到request对象的定义处查看请求参数的定义
+ * 基本类型的设置:
+ * 帮助链接:
+ * 短信控制台: https://console.cloud.tencent.com/smsv2
+ * 腾讯云短信小助手: https://cloud.tencent.com/document/product/382/3773#.E6.8A.80.E6.9C.AF.E4.BA.A4.E6.B5.81 */
+
+ /* 短信应用ID: 短信SdkAppId在 [短信控制台] 添加应用后生成的实际SdkAppId,示例如1400006666 */
+ // 应用 ID 可前往 [短信控制台](https://console.cloud.tencent.com/smsv2/app-manage) 查看
+ String sdkAppId = txYun3AccountConfig.getSdkAppId();
+ req.setSmsSdkAppId(sdkAppId);
+
+ /* 短信签名内容: 使用 UTF-8 编码,必须填写已审核通过的签名 */
+ // 签名信息可前往 [国内短信](https://console.cloud.tencent.com/smsv2/csms-sign) 或 [国际/港澳台短信](https://console.cloud.tencent.com/smsv2/isms-sign) 的签名管理查看
+ req.setSignName(smsSign);
+
+ /* 模板 ID: 必须填写已审核通过的模板 ID */
+ // 模板 ID 可前往 [国内短信](https://console.cloud.tencent.com/smsv2/csms-template) 或 [国际/港澳台短信](https://console.cloud.tencent.com/smsv2/isms-template) 的正文模板管理查看
+ req.setTemplateId(templateId);
+
+ /* 模板参数: 模板参数的个数需要与 TemplateId 对应模板的变量个数保持一致,若无模板参数,则设置为空 */
+ String[] templateParamSet = params;
+ req.setTemplateParamSet(templateParamSet);
+
+ /* 下发手机号码,采用 E.164 标准,+[国家或地区码][手机号]
+ * 示例如:+8613711112222, 其中前面有一个+号 ,86为国家码,13711112222为手机号,最多不要超过200个手机号 */
+ String[] phoneNumberSet = {telNum};
+ req.setPhoneNumberSet(phoneNumberSet);
+
+ /* 用户的 session 内容(无需要可忽略): 可以携带用户侧 ID 等上下文信息,server 会原样返回 */
+// String sessionContext = "";
+// req.setSessionContext(sessionContext);
+
+ /* 短信码号扩展号(无需要可忽略): 默认未开通,如需开通请联系 [腾讯云短信小助手] */
+// String extendCode = "";
+// req.setExtendCode(extendCode);
+
+ /* 国内短信无需填写该项;国际/港澳台短信已申请独立 SenderId 需要填写该字段,默认使用公共 SenderId,无需填写该字段。注:月度使用量达到指定量级可申请独立 SenderId 使用,详情请联系 [腾讯云短信小助手](https://cloud.tencent.com/document/product/382/3773#.E6.8A.80.E6.9C.AF.E4.BA.A4.E6.B5.81)。*/
+// String senderid = "";
+// req.setSenderId(senderid);
+
+ /* 通过 client 对象调用 SendSms 方法发起请求。注意请求方法名与请求对象是对应的
+ * 返回的 res 是一个 SendSmsResponse 类的实例,与请求对象对应 */
+ SendSmsResponse res = smsClient.SendSms(req);
+
+ if (res.getSendStatusSet()[0].getCode().equals("Ok")) {
+ sendResult.setSuccess(true);
+ } else {
+ sendResult.setSuccess(false);
+ sendResult.setInfo(JSONUtil.toJsonStr(res));
+ }
+ }
+ } catch (Exception e) {
+ sendResult.setSuccess(false);
+ sendResult.setInfo(e.getMessage());
+ log.error(ExceptionUtils.getStackTrace(e));
+ }
+
+ return sendResult;
+ }
+
+ @Override
+ public SendResult asyncSend(String[] msgData) {
+ return null;
+ }
+
+ public SmsClient getTxYunSender(Integer accountId) {
+ if (smsClientMap.containsKey(accountId)) {
+ return smsClientMap.get(accountId);
+ } else {
+ TAccount tAccount = accountMapper.selectByPrimaryKey(accountId);
+ String accountConfig = tAccount.getAccountConfig();
+ TxYun3AccountConfig txYun3AccountConfig = JSON.parseObject(accountConfig, TxYun3AccountConfig.class);
+
+ /* 必要步骤:
+ * 实例化一个认证对象,入参需要传入腾讯云账户密钥对secretId,secretKey。
+ * 这里采用的是从环境变量读取的方式,需要在环境变量中先设置这两个值。
+ * 你也可以直接在代码中写死密钥对,但是小心不要将代码复制、上传或者分享给他人,
+ * 以免泄露密钥对危及你的财产安全。
+ * SecretId、SecretKey 查询: https://console.cloud.tencent.com/cam/capi */
+ Credential cred = new Credential(txYun3AccountConfig.getSecretId(), txYun3AccountConfig.getSecretKey());
+
+
+ // 实例化一个http选项,可选,没有特殊需求可以跳过
+ HttpProfile httpProfile = new HttpProfile();
+ // 设置代理(无需要直接忽略)
+ // httpProfile.setProxyHost("真实代理ip");
+ // httpProfile.setProxyPort(真实代理端口);
+ /* SDK默认使用POST方法。
+ * 如果你一定要使用GET方法,可以在这里设置。GET方法无法处理一些较大的请求 */
+ httpProfile.setReqMethod("POST");
+ /* SDK有默认的超时时间,非必要请不要进行调整
+ * 如有需要请在代码中查阅以获取最新的默认值 */
+// httpProfile.setConnTimeout(60);
+ /* 指定接入地域域名,默认就近地域接入域名为 sms.tencentcloudapi.com ,也支持指定地域域名访问,例如广州地域的域名为 sms.ap-guangzhou.tencentcloudapi.com */
+ httpProfile.setEndpoint(txYun3AccountConfig.getEndPoint());
+
+
+ /* 非必要步骤:
+ * 实例化一个客户端配置对象,可以指定超时时间等配置 */
+ ClientProfile clientProfile = new ClientProfile();
+ /* SDK默认用TC3-HMAC-SHA256进行签名
+ * 非必要请不要修改这个字段 */
+// clientProfile.setSignMethod("HmacSHA256");
+ clientProfile.setHttpProfile(httpProfile);
+ /* 实例化要请求产品(以sms为例)的client对象
+ * 第二个参数是地域信息,可以直接填写字符串ap-guangzhou,支持的地域列表参考 https://cloud.tencent.com/document/api/382/52071#.E5.9C.B0.E5.9F.9F.E5.88.97.E8.A1.A8 */
+ SmsClient client = new SmsClient(cred, txYun3AccountConfig.getRegion());
+
+ smsClientMap.put(accountId, client);
+ return client;
+ }
+ }
+}
diff --git a/src/main/java/com/fangxuele/tool/push/logic/msgsender/WxCpMsgSender.java b/src/main/java/com/fangxuele/tool/push/logic/msgsender/WxCpMsgSender.java
index 80f2180c6ae72ef28d28b9504853b8dc6443b60e..36e9143867e52c32ab5e47de668613cf995d99e7 100644
--- a/src/main/java/com/fangxuele/tool/push/logic/msgsender/WxCpMsgSender.java
+++ b/src/main/java/com/fangxuele/tool/push/logic/msgsender/WxCpMsgSender.java
@@ -121,6 +121,10 @@ public class WxCpMsgSender implements IMsgSender {
// clientBuilder.setUserAgent(..)
configStorage.setApacheHttpClientBuilder(clientBuilder);
+ if (wxCpAccountConfig.getPrivateDep()) {
+ configStorage.setBaseApiUrl(wxCpAccountConfig.getBaseApiUrl());
+ }
+
WxCpService wxCpService = new WxCpServiceApacheHttpClientImpl();
wxCpService.setWxCpConfigStorage(configStorage);
diff --git a/src/main/java/com/fangxuele/tool/push/ui/UiConsts.java b/src/main/java/com/fangxuele/tool/push/ui/UiConsts.java
index e8ddb08883b371b628c80077154d1fe4d0873a31..331537489ed48fd3ff2b7a96ef933654d9febd46 100644
--- a/src/main/java/com/fangxuele/tool/push/ui/UiConsts.java
+++ b/src/main/java/com/fangxuele/tool/push/ui/UiConsts.java
@@ -19,7 +19,7 @@ public class UiConsts {
* 软件名称,版本
*/
public final static String APP_NAME = "WePush";
- public final static String APP_VERSION = "v_5.0.1";
+ public final static String APP_VERSION = "v_5.0.2";
public static final int TABLE_ROW_HEIGHT = 30;
diff --git a/src/main/java/com/fangxuele/tool/push/ui/dialog/NewTaskDialog.java b/src/main/java/com/fangxuele/tool/push/ui/dialog/NewTaskDialog.java
index b785ab6a390892f254c122062e1141bdf80f9e92..dbb6143414c19046baa4224cd39b25a87268144c 100644
--- a/src/main/java/com/fangxuele/tool/push/ui/dialog/NewTaskDialog.java
+++ b/src/main/java/com/fangxuele/tool/push/ui/dialog/NewTaskDialog.java
@@ -412,6 +412,10 @@ public class NewTaskDialog extends JDialog {
msgTypeMapReverse.put(MessageTypeEnum.TX_YUN_CODE, MessageTypeEnum.getName(MessageTypeEnum.TX_YUN));
this.msgTypeComboBox.addItem(MessageTypeEnum.getName(MessageTypeEnum.TX_YUN));
+ msgTypeMap.put(MessageTypeEnum.getName(MessageTypeEnum.TX_YUN_3), MessageTypeEnum.TX_YUN_3_CODE);
+ msgTypeMapReverse.put(MessageTypeEnum.TX_YUN_3_CODE, MessageTypeEnum.getName(MessageTypeEnum.TX_YUN_3));
+ this.msgTypeComboBox.addItem(MessageTypeEnum.getName(MessageTypeEnum.TX_YUN_3));
+
msgTypeMap.put(MessageTypeEnum.getName(MessageTypeEnum.HW_YUN), MessageTypeEnum.HW_YUN_CODE);
msgTypeMapReverse.put(MessageTypeEnum.HW_YUN_CODE, MessageTypeEnum.getName(MessageTypeEnum.HW_YUN));
this.msgTypeComboBox.addItem(MessageTypeEnum.getName(MessageTypeEnum.HW_YUN));
diff --git a/src/main/java/com/fangxuele/tool/push/ui/form/MessageEditForm.java b/src/main/java/com/fangxuele/tool/push/ui/form/MessageEditForm.java
index bccb39bb7c48f47f67612b83eed4a4231796fe55..67f30761e3db2b1a3fd85080160489d58ca3e367 100644
--- a/src/main/java/com/fangxuele/tool/push/ui/form/MessageEditForm.java
+++ b/src/main/java/com/fangxuele/tool/push/ui/form/MessageEditForm.java
@@ -106,6 +106,9 @@ public class MessageEditForm {
case MessageTypeEnum.TX_YUN_CODE:
messageEditForm.getMsgEditorPanel().add(TxYunMsgForm.getInstance().getTemplateMsgPanel(), gridConstraintsRow0);
break;
+ case MessageTypeEnum.TX_YUN_3_CODE:
+ messageEditForm.getMsgEditorPanel().add(TxYun3MsgForm.getInstance().getTemplateMsgPanel(), gridConstraintsRow0);
+ break;
case MessageTypeEnum.QI_NIU_YUN_CODE:
messageEditForm.getMsgEditorPanel().add(QiNiuYunMsgForm.getInstance().getTemplateMsgPanel(), gridConstraintsRow0);
break;
diff --git a/src/main/java/com/fangxuele/tool/push/ui/form/MessageTypeForm.form b/src/main/java/com/fangxuele/tool/push/ui/form/MessageTypeForm.form
index d25928c8397f80c07d96f821e9a2b69da215c200..61978af88fd10a2573e9445d78241b59039b5cba 100644
--- a/src/main/java/com/fangxuele/tool/push/ui/form/MessageTypeForm.form
+++ b/src/main/java/com/fangxuele/tool/push/ui/form/MessageTypeForm.form
@@ -3,7 +3,7 @@
-
+
@@ -19,7 +19,7 @@
-
+
@@ -95,9 +95,17 @@
+
+
+
+
+
+
+
+
-
+
@@ -105,7 +113,7 @@
-
+
@@ -114,7 +122,7 @@
-
+
@@ -123,7 +131,7 @@
-
+
@@ -132,7 +140,7 @@
-
+
@@ -141,7 +149,7 @@
-
+
@@ -158,7 +166,7 @@
-
+
@@ -199,7 +207,7 @@
-
+
@@ -208,7 +216,7 @@
-
+
@@ -217,7 +225,7 @@
-
+
@@ -226,7 +234,7 @@
-
+
diff --git a/src/main/java/com/fangxuele/tool/push/ui/form/MessageTypeForm.java b/src/main/java/com/fangxuele/tool/push/ui/form/MessageTypeForm.java
index 902f67c2a457bc19fcb5c7587baaa521ca499470..9d09bcebe2fc2b19915697f204e88860bd32fb2a 100644
--- a/src/main/java/com/fangxuele/tool/push/ui/form/MessageTypeForm.java
+++ b/src/main/java/com/fangxuele/tool/push/ui/form/MessageTypeForm.java
@@ -49,6 +49,7 @@ public class MessageTypeForm {
private JRadioButton wxUniformMessageRadioButton;
private JRadioButton maSubscribeRadioButton;
private JRadioButton mpSubscribeRadioButton;
+ private JRadioButton txYun3RadioButton;
private static MessageTypeForm messageTypeForm;
@@ -129,6 +130,9 @@ public class MessageTypeForm {
case MessageTypeEnum.BD_YUN_CODE:
messageTypeForm.getBdYunRadioButton().setSelected(true);
break;
+ case MessageTypeEnum.TX_YUN_3_CODE:
+ messageTypeForm.getTxYun3RadioButton().setSelected(true);
+ break;
default:
}
@@ -193,7 +197,7 @@ public class MessageTypeForm {
messageTypePanel.add(messageTypeScrollPane, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, null, null, null, 0, false));
messageTypeScrollPane.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEmptyBorder(), null, TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, null, null));
msgTypeListPanel = new JPanel();
- msgTypeListPanel.setLayout(new GridLayoutManager(23, 3, new Insets(10, 0, 0, 0), -1, -1));
+ msgTypeListPanel.setLayout(new GridLayoutManager(24, 3, new Insets(10, 0, 0, 0), -1, -1));
msgTypeListPanel.setAutoscrolls(true);
messageTypeScrollPane.setViewportView(msgTypeListPanel);
mpTemplateRadioButton = new JRadioButton();
@@ -224,36 +228,39 @@ public class MessageTypeForm {
txYunRadioButton = new JRadioButton();
txYunRadioButton.setText("腾讯云短信");
msgTypeListPanel.add(txYunRadioButton, new GridConstraints(11, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ txYun3RadioButton = new JRadioButton();
+ txYun3RadioButton.setText("腾讯云短信3.0");
+ msgTypeListPanel.add(txYun3RadioButton, new GridConstraints(12, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
yunPianRadioButton = new JRadioButton();
yunPianRadioButton.setText("云片网短信");
- msgTypeListPanel.add(yunPianRadioButton, new GridConstraints(14, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ msgTypeListPanel.add(yunPianRadioButton, new GridConstraints(15, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
网易云信短信RadioButton = new JRadioButton();
网易云信短信RadioButton.setEnabled(false);
网易云信短信RadioButton.setText("网易云信短信");
- msgTypeListPanel.add(网易云信短信RadioButton, new GridConstraints(18, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ msgTypeListPanel.add(网易云信短信RadioButton, new GridConstraints(19, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
榛子云短信RadioButton = new JRadioButton();
榛子云短信RadioButton.setEnabled(false);
榛子云短信RadioButton.setText("榛子云短信");
- msgTypeListPanel.add(榛子云短信RadioButton, new GridConstraints(19, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ msgTypeListPanel.add(榛子云短信RadioButton, new GridConstraints(20, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
luosimao短信RadioButton = new JRadioButton();
luosimao短信RadioButton.setEnabled(false);
luosimao短信RadioButton.setText("Luosimao短信");
- msgTypeListPanel.add(luosimao短信RadioButton, new GridConstraints(20, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ msgTypeListPanel.add(luosimao短信RadioButton, new GridConstraints(21, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
极光短信RadioButton = new JRadioButton();
极光短信RadioButton.setEnabled(false);
极光短信RadioButton.setText("极光短信");
- msgTypeListPanel.add(极光短信RadioButton, new GridConstraints(21, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ msgTypeListPanel.add(极光短信RadioButton, new GridConstraints(22, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
极光推送RadioButton = new JRadioButton();
极光推送RadioButton.setEnabled(false);
极光推送RadioButton.setText("极光推送");
- msgTypeListPanel.add(极光推送RadioButton, new GridConstraints(22, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ msgTypeListPanel.add(极光推送RadioButton, new GridConstraints(23, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
kefuPriorityTipsLabel = new JLabel();
kefuPriorityTipsLabel.setText("");
msgTypeListPanel.add(kefuPriorityTipsLabel, new GridConstraints(6, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
eMailRadioButton = new JRadioButton();
eMailRadioButton.setEnabled(true);
eMailRadioButton.setText("E-Mail(BETA)");
- msgTypeListPanel.add(eMailRadioButton, new GridConstraints(17, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ msgTypeListPanel.add(eMailRadioButton, new GridConstraints(18, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
wxCpRadioButton = new JRadioButton();
wxCpRadioButton.setEnabled(true);
wxCpRadioButton.setText("企业号/企业微信");
@@ -271,19 +278,19 @@ public class MessageTypeForm {
hwYunRadioButton = new JRadioButton();
hwYunRadioButton.setEnabled(true);
hwYunRadioButton.setText("华为云短信(BETA)");
- msgTypeListPanel.add(hwYunRadioButton, new GridConstraints(12, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ msgTypeListPanel.add(hwYunRadioButton, new GridConstraints(13, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
bdYunRadioButton = new JRadioButton();
bdYunRadioButton.setEnabled(true);
bdYunRadioButton.setText("百度云短信(BETA)");
- msgTypeListPanel.add(bdYunRadioButton, new GridConstraints(13, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ msgTypeListPanel.add(bdYunRadioButton, new GridConstraints(14, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
upYunRadioButton = new JRadioButton();
upYunRadioButton.setEnabled(true);
upYunRadioButton.setText("又拍云短信(BETA)");
- msgTypeListPanel.add(upYunRadioButton, new GridConstraints(15, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ msgTypeListPanel.add(upYunRadioButton, new GridConstraints(16, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
qiniuRadioButton = new JRadioButton();
qiniuRadioButton.setEnabled(true);
qiniuRadioButton.setText("七牛云短信(BETA)");
- msgTypeListPanel.add(qiniuRadioButton, new GridConstraints(16, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ msgTypeListPanel.add(qiniuRadioButton, new GridConstraints(17, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
wxUniformMessageRadioButton = new JRadioButton();
wxUniformMessageRadioButton.setText("小程序-统一服务消息(BETA)");
msgTypeListPanel.add(wxUniformMessageRadioButton, new GridConstraints(7, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
diff --git a/src/main/java/com/fangxuele/tool/push/ui/form/account/AccountFormFactory.java b/src/main/java/com/fangxuele/tool/push/ui/form/account/AccountFormFactory.java
index 0de38ce0f112e89cf67798b4eefbb7c0eb535e81..dbc2ad520572ef2ce48964d73953c36ce699f56f 100644
--- a/src/main/java/com/fangxuele/tool/push/ui/form/account/AccountFormFactory.java
+++ b/src/main/java/com/fangxuele/tool/push/ui/form/account/AccountFormFactory.java
@@ -38,6 +38,9 @@ public class AccountFormFactory {
case MessageTypeEnum.TX_YUN_CODE:
iAccountForm = TxYunAccountForm.getInstance();
break;
+ case MessageTypeEnum.TX_YUN_3_CODE:
+ iAccountForm = TxYun3AccountForm.getInstance();
+ break;
case MessageTypeEnum.HW_YUN_CODE:
iAccountForm = HwYunAccountForm.getInstance();
break;
diff --git a/src/main/java/com/fangxuele/tool/push/ui/form/account/TxYun3AccountForm.form b/src/main/java/com/fangxuele/tool/push/ui/form/account/TxYun3AccountForm.form
new file mode 100644
index 0000000000000000000000000000000000000000..3b6e718834ab44d238d9fc0d3ed666be18aeea0b
--- /dev/null
+++ b/src/main/java/com/fangxuele/tool/push/ui/form/account/TxYun3AccountForm.form
@@ -0,0 +1,131 @@
+
+
diff --git a/src/main/java/com/fangxuele/tool/push/ui/form/account/TxYun3AccountForm.java b/src/main/java/com/fangxuele/tool/push/ui/form/account/TxYun3AccountForm.java
new file mode 100644
index 0000000000000000000000000000000000000000..1b1da0a659c5d9b3acdbf9785c8e274311025aa9
--- /dev/null
+++ b/src/main/java/com/fangxuele/tool/push/ui/form/account/TxYun3AccountForm.java
@@ -0,0 +1,189 @@
+package com.fangxuele.tool.push.ui.form.account;
+
+import cn.hutool.json.JSONUtil;
+import com.fangxuele.tool.push.App;
+import com.fangxuele.tool.push.bean.account.TxYun3AccountConfig;
+import com.fangxuele.tool.push.domain.TAccount;
+import com.fangxuele.tool.push.logic.msgsender.TxYunMsgSender;
+import com.fangxuele.tool.push.ui.form.MainWindow;
+import com.fangxuele.tool.push.util.SqliteUtil;
+import com.fangxuele.tool.push.util.UIUtil;
+import com.fangxuele.tool.push.util.UndoUtil;
+import com.intellij.uiDesigner.core.GridConstraints;
+import com.intellij.uiDesigner.core.GridLayoutManager;
+import com.intellij.uiDesigner.core.Spacer;
+import lombok.Getter;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.swing.*;
+import java.awt.*;
+
+@Getter
+public class TxYun3AccountForm implements IAccountForm {
+ private JPanel mainPanel;
+ private JTextField signTextField;
+ private JTextField secretIdTextField;
+ private JTextField secretKeyTextField;
+ private JTextField endPointTextField;
+ private JTextField regionTextField;
+ private JTextField sdkAppIdTextField;
+
+ private static TxYun3AccountForm txYun3AccountForm;
+
+ @Override
+ public void init(String accountName) {
+ TxYun3AccountForm instance = getInstance();
+ if (StringUtils.isNotEmpty(accountName)) {
+ TAccount tAccount = accountMapper.selectByMsgTypeAndAccountName(App.config.getMsgType(), accountName);
+
+ TxYun3AccountConfig txYun3AccountConfig = JSONUtil.toBean(tAccount.getAccountConfig(), TxYun3AccountConfig.class);
+ instance.getSignTextField().setText(txYun3AccountConfig.getSign());
+ instance.getSecretIdTextField().setText(txYun3AccountConfig.getSecretId());
+ instance.getSecretKeyTextField().setText(txYun3AccountConfig.getSecretKey());
+ instance.getEndPointTextField().setText(txYun3AccountConfig.getEndPoint());
+ instance.getRegionTextField().setText(txYun3AccountConfig.getRegion());
+ instance.getSdkAppIdTextField().setText(txYun3AccountConfig.getSdkAppId());
+ } else {
+ instance.getEndPointTextField().setText("sms.tencentcloudapi.com");
+ instance.getRegionTextField().setText("ap-guangzhou");
+ }
+ }
+
+ @Override
+ public void save(String accountName) {
+ if (StringUtils.isNotEmpty(accountName)) {
+ TAccount tAccount = accountMapper.selectByMsgTypeAndAccountName(App.config.getMsgType(), accountName);
+ TxYun3AccountForm instance = getInstance();
+ int msgType = App.config.getMsgType();
+
+ boolean existSameAccount = false;
+
+ if (tAccount != null) {
+ existSameAccount = true;
+ }
+
+ int isCover = JOptionPane.NO_OPTION;
+ if (existSameAccount) {
+ // 如果存在,是否覆盖
+ isCover = JOptionPane.showConfirmDialog(MainWindow.getInstance().getMessagePanel(), "已经存在同名的账号,\n是否覆盖?", "确认",
+ JOptionPane.YES_NO_OPTION);
+ }
+
+ if (!existSameAccount || isCover == JOptionPane.YES_OPTION) {
+
+ String now = SqliteUtil.nowDateForSqlite();
+
+ TAccount tAccount1 = new TAccount();
+ tAccount1.setMsgType(msgType);
+ tAccount1.setAccountName(accountName);
+
+ TxYun3AccountConfig txYun3AccountConfig = new TxYun3AccountConfig();
+ txYun3AccountConfig.setSign(instance.getSignTextField().getText());
+ txYun3AccountConfig.setSecretId(instance.getSecretIdTextField().getText());
+ txYun3AccountConfig.setSecretKey(instance.getSecretKeyTextField().getText());
+ txYun3AccountConfig.setEndPoint(instance.getEndPointTextField().getText());
+ txYun3AccountConfig.setRegion(instance.getRegionTextField().getText());
+ txYun3AccountConfig.setSdkAppId(instance.getSdkAppIdTextField().getText());
+
+ tAccount1.setAccountConfig(JSONUtil.toJsonStr(txYun3AccountConfig));
+
+ tAccount1.setModifiedTime(now);
+
+ if (existSameAccount) {
+ accountMapper.updateByMsgTypeAndAccountName(tAccount1);
+ TxYunMsgSender.removeAccount(tAccount1.getId());
+ } else {
+ tAccount1.setCreateTime(now);
+ accountMapper.insertSelective(tAccount1);
+ }
+
+ JOptionPane.showMessageDialog(MainWindow.getInstance().getMainPanel(), "保存成功!", "成功",
+ JOptionPane.INFORMATION_MESSAGE);
+ }
+
+ }
+ }
+
+ @Override
+ public void clear() {
+ UIUtil.clearForm(getInstance());
+ }
+
+ @Override
+ public JPanel getMainPanel() {
+ return mainPanel;
+ }
+
+ public static TxYun3AccountForm getInstance() {
+ if (txYun3AccountForm == null) {
+ txYun3AccountForm = new TxYun3AccountForm();
+ }
+ UndoUtil.register(txYun3AccountForm);
+ return txYun3AccountForm;
+ }
+
+ {
+// GUI initializer generated by IntelliJ IDEA GUI Designer
+// >>> IMPORTANT!! <<<
+// DO NOT EDIT OR ADD ANY CODE HERE!
+ $$$setupUI$$$();
+ }
+
+ /**
+ * Method generated by IntelliJ IDEA GUI Designer
+ * >>> IMPORTANT!! <<<
+ * DO NOT edit this method OR call it in your code!
+ *
+ * @noinspection ALL
+ */
+ private void $$$setupUI$$$() {
+ mainPanel = new JPanel();
+ mainPanel.setLayout(new GridLayoutManager(1, 1, new Insets(10, 5, 0, 0), -1, -1));
+ final JPanel panel1 = new JPanel();
+ panel1.setLayout(new GridLayoutManager(7, 2, new Insets(0, 0, 0, 0), -1, -1));
+ mainPanel.add(panel1, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false));
+ final Spacer spacer1 = new Spacer();
+ panel1.add(spacer1, new GridConstraints(6, 0, 1, 2, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_VERTICAL, 1, GridConstraints.SIZEPOLICY_WANT_GROW, null, null, null, 0, false));
+ final JLabel label1 = new JLabel();
+ label1.setText("SecretId");
+ panel1.add(label1, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ final JLabel label2 = new JLabel();
+ label2.setText("SecretKey");
+ panel1.add(label2, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ final JLabel label3 = new JLabel();
+ label3.setText("Endpoint");
+ panel1.add(label3, new GridConstraints(3, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ final JLabel label4 = new JLabel();
+ label4.setText("Region");
+ panel1.add(label4, new GridConstraints(4, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ final JLabel label5 = new JLabel();
+ label5.setText("短信签名");
+ panel1.add(label5, new GridConstraints(5, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ signTextField = new JTextField();
+ panel1.add(signTextField, new GridConstraints(5, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false));
+ secretIdTextField = new JTextField();
+ panel1.add(secretIdTextField, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, new Dimension(300, -1), new Dimension(300, -1), null, 0, false));
+ secretKeyTextField = new JTextField();
+ panel1.add(secretKeyTextField, new GridConstraints(1, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false));
+ endPointTextField = new JTextField();
+ endPointTextField.setText("sms.tencentcloudapi.com");
+ panel1.add(endPointTextField, new GridConstraints(3, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false));
+ regionTextField = new JTextField();
+ regionTextField.setText("ap-guangzhou");
+ panel1.add(regionTextField, new GridConstraints(4, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false));
+ sdkAppIdTextField = new JTextField();
+ sdkAppIdTextField.setText("");
+ panel1.add(sdkAppIdTextField, new GridConstraints(2, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false));
+ final JLabel label6 = new JLabel();
+ label6.setText("SdkAppId");
+ panel1.add(label6, new GridConstraints(2, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ }
+
+ /**
+ * @noinspection ALL
+ */
+ public JComponent $$$getRootComponent$$$() {
+ return mainPanel;
+ }
+
+}
diff --git a/src/main/java/com/fangxuele/tool/push/ui/form/account/WxCpAccountForm.form b/src/main/java/com/fangxuele/tool/push/ui/form/account/WxCpAccountForm.form
index 5bee20bbfd49f9330162387c6c425750abe322e3..a07f2bc1882788c268588243bf26e4328d258ca2 100644
--- a/src/main/java/com/fangxuele/tool/push/ui/form/account/WxCpAccountForm.form
+++ b/src/main/java/com/fangxuele/tool/push/ui/form/account/WxCpAccountForm.form
@@ -8,7 +8,7 @@
-
+
@@ -18,7 +18,7 @@
-
+
@@ -85,6 +85,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/java/com/fangxuele/tool/push/ui/form/account/WxCpAccountForm.java b/src/main/java/com/fangxuele/tool/push/ui/form/account/WxCpAccountForm.java
index 4218d1b94f72d0b9a4f4a774bc649cf79467b673..14fd1048751d38df83469bc7058e7a9282fa3821 100644
--- a/src/main/java/com/fangxuele/tool/push/ui/form/account/WxCpAccountForm.java
+++ b/src/main/java/com/fangxuele/tool/push/ui/form/account/WxCpAccountForm.java
@@ -29,8 +29,11 @@ public class WxCpAccountForm implements IAccountForm {
private JTextField appNameTextField;
private JTextField agentIdTextField;
private JTextField secretTextField;
+ private JCheckBox privateDepCheckBox;
+ private JTextField baseApiUrlTextField;
+ private JLabel baseApiUrlLabel;
- private static WxCpAccountForm wxMpAccountForm;
+ private static WxCpAccountForm wxCpAccountForm;
public volatile static WxCpDefaultConfigImpl wxCpConfigStorage;
public volatile static WxCpService wxCpService;
@@ -46,6 +49,15 @@ public class WxCpAccountForm implements IAccountForm {
instance.getAppNameTextField().setText(wxCpAccountConfig.getAppName());
instance.getAgentIdTextField().setText(wxCpAccountConfig.getAgentId());
instance.getSecretTextField().setText(wxCpAccountConfig.getSecret());
+ instance.getPrivateDepCheckBox().setSelected(wxCpAccountConfig.getPrivateDep());
+ instance.getBaseApiUrlTextField().setText(wxCpAccountConfig.getBaseApiUrl());
+ if (wxCpAccountConfig.getPrivateDep()) {
+ instance.getBaseApiUrlTextField().setVisible(true);
+ instance.getBaseApiUrlLabel().setVisible(true);
+ } else {
+ instance.getBaseApiUrlTextField().setVisible(false);
+ instance.getBaseApiUrlLabel().setVisible(false);
+ }
}
}
@@ -82,6 +94,8 @@ public class WxCpAccountForm implements IAccountForm {
wxCpAccountConfig.setAppName(instance.getAppNameTextField().getText());
wxCpAccountConfig.setAgentId(instance.getAgentIdTextField().getText());
wxCpAccountConfig.setSecret(instance.getSecretTextField().getText());
+ wxCpAccountConfig.setPrivateDep(instance.getPrivateDepCheckBox().isSelected());
+ wxCpAccountConfig.setBaseApiUrl(instance.getBaseApiUrlTextField().getText());
tAccount1.setAccountConfig(JSONUtil.toJsonStr(wxCpAccountConfig));
@@ -113,11 +127,20 @@ public class WxCpAccountForm implements IAccountForm {
}
public static WxCpAccountForm getInstance() {
- if (wxMpAccountForm == null) {
- wxMpAccountForm = new WxCpAccountForm();
+ if (wxCpAccountForm == null) {
+ wxCpAccountForm = new WxCpAccountForm();
+ wxCpAccountForm.getPrivateDepCheckBox().addChangeListener(e -> {
+ if (wxCpAccountForm.getPrivateDepCheckBox().isSelected()) {
+ wxCpAccountForm.getBaseApiUrlTextField().setVisible(true);
+ wxCpAccountForm.getBaseApiUrlLabel().setVisible(true);
+ } else {
+ wxCpAccountForm.getBaseApiUrlTextField().setVisible(false);
+ wxCpAccountForm.getBaseApiUrlLabel().setVisible(false);
+ }
+ });
}
- UndoUtil.register(wxMpAccountForm);
- return wxMpAccountForm;
+ UndoUtil.register(wxCpAccountForm);
+ return wxCpAccountForm;
}
{
@@ -138,10 +161,10 @@ public class WxCpAccountForm implements IAccountForm {
mainPanel = new JPanel();
mainPanel.setLayout(new GridLayoutManager(1, 1, new Insets(10, 5, 0, 0), -1, -1));
final JPanel panel1 = new JPanel();
- panel1.setLayout(new GridLayoutManager(5, 2, new Insets(0, 0, 0, 0), -1, -1));
+ panel1.setLayout(new GridLayoutManager(7, 2, new Insets(0, 0, 0, 0), -1, -1));
mainPanel.add(panel1, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false));
final Spacer spacer1 = new Spacer();
- panel1.add(spacer1, new GridConstraints(4, 0, 1, 2, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_VERTICAL, 1, GridConstraints.SIZEPOLICY_WANT_GROW, null, null, null, 0, false));
+ panel1.add(spacer1, new GridConstraints(6, 0, 1, 2, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_VERTICAL, 1, GridConstraints.SIZEPOLICY_WANT_GROW, null, null, null, 0, false));
final JLabel label1 = new JLabel();
label1.setText("应用名称");
panel1.add(label1, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
@@ -162,6 +185,14 @@ public class WxCpAccountForm implements IAccountForm {
panel1.add(label4, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
corpIdTextField = new JTextField();
panel1.add(corpIdTextField, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false));
+ privateDepCheckBox = new JCheckBox();
+ privateDepCheckBox.setText("私有化部署");
+ panel1.add(privateDepCheckBox, new GridConstraints(4, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ baseApiUrlTextField = new JTextField();
+ panel1.add(baseApiUrlTextField, new GridConstraints(5, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false));
+ baseApiUrlLabel = new JLabel();
+ baseApiUrlLabel.setText("私有BaseApiUrl");
+ panel1.add(baseApiUrlLabel, new GridConstraints(5, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
}
/**
diff --git a/src/main/java/com/fangxuele/tool/push/ui/form/msg/MsgFormFactory.java b/src/main/java/com/fangxuele/tool/push/ui/form/msg/MsgFormFactory.java
index 80044d76b6ad659f9ca460300306535cb1782166..8498a45c66f54bec2039d9c34f6a0a6a445eda61 100644
--- a/src/main/java/com/fangxuele/tool/push/ui/form/msg/MsgFormFactory.java
+++ b/src/main/java/com/fangxuele/tool/push/ui/form/msg/MsgFormFactory.java
@@ -47,6 +47,9 @@ public class MsgFormFactory {
case MessageTypeEnum.TX_YUN_CODE:
iMsgForm = TxYunMsgForm.getInstance();
break;
+ case MessageTypeEnum.TX_YUN_3_CODE:
+ iMsgForm = TxYun3MsgForm.getInstance();
+ break;
case MessageTypeEnum.QI_NIU_YUN_CODE:
iMsgForm = QiNiuYunMsgForm.getInstance();
break;
diff --git a/src/main/java/com/fangxuele/tool/push/ui/form/msg/TxYun3MsgForm.form b/src/main/java/com/fangxuele/tool/push/ui/form/msg/TxYun3MsgForm.form
new file mode 100644
index 0000000000000000000000000000000000000000..2bb84d313e46770091d468ed594670b389d07080
--- /dev/null
+++ b/src/main/java/com/fangxuele/tool/push/ui/form/msg/TxYun3MsgForm.form
@@ -0,0 +1,120 @@
+
+
diff --git a/src/main/java/com/fangxuele/tool/push/ui/form/msg/TxYun3MsgForm.java b/src/main/java/com/fangxuele/tool/push/ui/form/msg/TxYun3MsgForm.java
new file mode 100644
index 0000000000000000000000000000000000000000..6bc6fc51204cdc312b09e61bbb6ebaef96b28267
--- /dev/null
+++ b/src/main/java/com/fangxuele/tool/push/ui/form/msg/TxYun3MsgForm.java
@@ -0,0 +1,329 @@
+package com.fangxuele.tool.push.ui.form.msg;
+
+import cn.hutool.json.JSONUtil;
+import com.fangxuele.tool.push.bean.TemplateData;
+import com.fangxuele.tool.push.dao.TMsgMapper;
+import com.fangxuele.tool.push.domain.TMsg;
+import com.fangxuele.tool.push.domain.TMsgSms;
+import com.fangxuele.tool.push.logic.MessageTypeEnum;
+import com.fangxuele.tool.push.ui.component.TableInCellButtonColumn;
+import com.fangxuele.tool.push.ui.form.MainWindow;
+import com.fangxuele.tool.push.ui.form.MessageEditForm;
+import com.fangxuele.tool.push.util.MybatisUtil;
+import com.fangxuele.tool.push.util.SqliteUtil;
+import com.formdev.flatlaf.extras.FlatSVGIcon;
+import com.intellij.uiDesigner.core.GridConstraints;
+import com.intellij.uiDesigner.core.GridLayoutManager;
+import lombok.Getter;
+import org.apache.commons.lang3.StringUtils;
+
+import javax.swing.*;
+import javax.swing.border.TitledBorder;
+import javax.swing.plaf.FontUIResource;
+import javax.swing.table.DefaultTableCellRenderer;
+import javax.swing.table.DefaultTableModel;
+import javax.swing.table.TableColumnModel;
+import javax.swing.text.StyleContext;
+import java.awt.*;
+import java.util.List;
+import java.util.*;
+
+/**
+ *
+ * TxYun3MsgForm
+ *
+ *
+ * @author Zhou Bo
+ * @since 2023/9/4.
+ */
+@Getter
+public class TxYun3MsgForm implements IMsgForm {
+ private JPanel templateMsgPanel;
+ private JLabel templateIdLabel;
+ private JTextField msgTemplateIdTextField;
+ private JPanel templateMsgDataPanel;
+ private JLabel templateMsgNameLabel;
+ private JTextField templateDataNameTextField;
+ private JLabel templateMsgValueLabel;
+ private JTextField templateDataValueTextField;
+ private JButton templateMsgDataAddButton;
+ private JTable templateMsgDataTable;
+
+ private static TxYun3MsgForm txYun3MsgForm;
+
+ private static TMsgMapper msgMapper = MybatisUtil.getSqlSession().getMapper(TMsgMapper.class);
+
+ public TxYun3MsgForm() {
+ templateMsgDataAddButton.setIcon(new FlatSVGIcon("icon/add.svg"));
+
+ // 模板数据-添加 按钮事件
+ templateMsgDataAddButton.addActionListener(e -> {
+ String[] data = new String[2];
+ data[0] = getInstance().getTemplateDataNameTextField().getText();
+ data[1] = getInstance().getTemplateDataValueTextField().getText();
+
+ if (getInstance().getTemplateMsgDataTable().getModel().getRowCount() == 0) {
+ initTemplateDataTable();
+ }
+
+ DefaultTableModel tableModel = (DefaultTableModel) getInstance().getTemplateMsgDataTable()
+ .getModel();
+ int rowCount = tableModel.getRowCount();
+
+ Set keySet = new HashSet<>();
+ String keyData;
+ for (int i = 0; i < rowCount; i++) {
+ keyData = (String) tableModel.getValueAt(i, 0);
+ keySet.add(keyData);
+ }
+
+ if (StringUtils.isEmpty(data[0]) || StringUtils.isEmpty(data[1])) {
+ JOptionPane.showMessageDialog(MessageEditForm.getInstance().getMsgEditorPanel(), "模板参数和参数对应的值不能为空!", "提示",
+ JOptionPane.INFORMATION_MESSAGE);
+ } else if (keySet.contains(data[0])) {
+ JOptionPane.showMessageDialog(MessageEditForm.getInstance().getMsgEditorPanel(), "模板参数不能重复!", "提示",
+ JOptionPane.INFORMATION_MESSAGE);
+ } else {
+ tableModel.addRow(data);
+ }
+ });
+ }
+
+ @Override
+ public void init(Integer msgId) {
+ clearAllField();
+ TMsg tMsg = msgMapper.selectByPrimaryKey(msgId);
+ if (tMsg != null) {
+ TMsgSms tMsgSms = JSONUtil.toBean(tMsg.getContent(), TMsgSms.class);
+ getInstance().getMsgTemplateIdTextField().setText(tMsgSms.getTemplateId());
+
+ MessageEditForm messageEditForm = MessageEditForm.getInstance();
+ messageEditForm.getMsgNameField().setText(tMsg.getMsgName());
+ messageEditForm.getPreviewUserField().setText(tMsg.getPreviewUser());
+ }
+
+ initTemplateDataTable();
+ // 模板消息Data表
+ List templateDataList;
+ if (tMsg == null) {
+ templateDataList = new ArrayList<>();
+ } else {
+ TMsgSms tMsgSms = JSONUtil.toBean(tMsg.getContent(), TMsgSms.class);
+ templateDataList = tMsgSms.getTemplateDataList();
+ }
+ String[] headerNames = {"模板参数", "参数对应的值", "操作"};
+ Object[][] cellData = new String[templateDataList.size()][headerNames.length];
+ for (int i = 0; i < templateDataList.size(); i++) {
+ TemplateData tTemplateData = templateDataList.get(i);
+ cellData[i][0] = tTemplateData.getName();
+ cellData[i][1] = tTemplateData.getValue();
+ }
+ DefaultTableModel model = new DefaultTableModel(cellData, headerNames);
+ getInstance().getTemplateMsgDataTable().setModel(model);
+ TableColumnModel tableColumnModel = getInstance().getTemplateMsgDataTable().getColumnModel();
+ tableColumnModel.getColumn(headerNames.length - 1).
+ setCellRenderer(new TableInCellButtonColumn(getInstance().getTemplateMsgDataTable(), headerNames.length - 1));
+ tableColumnModel.getColumn(headerNames.length - 1).
+ setCellEditor(new TableInCellButtonColumn(getInstance().getTemplateMsgDataTable(), headerNames.length - 1));
+
+ // 设置列宽
+ tableColumnModel.getColumn(2).setPreferredWidth(46);
+ tableColumnModel.getColumn(2).setMaxWidth(46);
+ }
+
+ @Override
+ public void save(Integer accountId, String msgName) {
+ int msgId = 0;
+ boolean existSameMsg = false;
+
+ TMsg tMsg = msgMapper.selectByUnique(MessageTypeEnum.TX_YUN_3_CODE, accountId, msgName);
+ if (tMsg != null) {
+ existSameMsg = true;
+ msgId = tMsg.getId();
+ }
+
+ int isCover = JOptionPane.NO_OPTION;
+ if (existSameMsg) {
+ // 如果存在,是否覆盖
+ isCover = JOptionPane.showConfirmDialog(MainWindow.getInstance().getMessagePanel(), "已经存在同名的历史消息,\n是否覆盖?", "确认",
+ JOptionPane.YES_NO_OPTION);
+ }
+
+ if (!existSameMsg || isCover == JOptionPane.YES_OPTION) {
+ String templateId = getInstance().getMsgTemplateIdTextField().getText();
+
+ String now = SqliteUtil.nowDateForSqlite();
+
+ TMsg msg = new TMsg();
+ TMsgSms tMsgSms = new TMsgSms();
+ msg.setMsgType(MessageTypeEnum.TX_YUN_3_CODE);
+ msg.setAccountId(accountId);
+ msg.setMsgName(msgName);
+ tMsgSms.setTemplateId(templateId);
+ msg.setCreateTime(now);
+ msg.setModifiedTime(now);
+
+ MessageEditForm messageEditForm = MessageEditForm.getInstance();
+ msg.setPreviewUser(messageEditForm.getPreviewUserField().getText());
+
+ // 如果table为空,则初始化
+ if (getInstance().getTemplateMsgDataTable().getModel().getRowCount() == 0) {
+ initTemplateDataTable();
+ }
+
+ // 逐行读取
+ DefaultTableModel tableModel = (DefaultTableModel) getInstance().getTemplateMsgDataTable()
+ .getModel();
+ int rowCount = tableModel.getRowCount();
+ List templateDataList = new ArrayList<>();
+ for (int i = 0; i < rowCount; i++) {
+ String name = (String) tableModel.getValueAt(i, 0);
+ String value = (String) tableModel.getValueAt(i, 1);
+
+ TemplateData tTemplateData = new TemplateData();
+ tTemplateData.setName(name);
+ tTemplateData.setValue(value);
+
+ templateDataList.add(tTemplateData);
+ }
+
+ tMsgSms.setTemplateDataList(templateDataList);
+
+ msg.setContent(JSONUtil.toJsonStr(tMsgSms));
+ if (existSameMsg) {
+ msg.setId(msgId);
+ msgMapper.updateByPrimaryKeySelective(msg);
+ } else {
+ msgMapper.insertSelective(msg);
+ }
+
+ JOptionPane.showMessageDialog(MainWindow.getInstance().getMessagePanel(), "保存成功!", "成功",
+ JOptionPane.INFORMATION_MESSAGE);
+ }
+
+ }
+
+ public static TxYun3MsgForm getInstance() {
+ if (txYun3MsgForm == null) {
+ txYun3MsgForm = new TxYun3MsgForm();
+ }
+ return txYun3MsgForm;
+ }
+
+ /**
+ * 初始化模板消息数据table
+ */
+ public static void initTemplateDataTable() {
+ JTable msgDataTable = getInstance().getTemplateMsgDataTable();
+ String[] headerNames = {"模板参数", "参数对应的值", "操作"};
+ DefaultTableModel model = new DefaultTableModel(null, headerNames);
+ msgDataTable.setModel(model);
+ msgDataTable.updateUI();
+ DefaultTableCellRenderer hr = (DefaultTableCellRenderer) msgDataTable.getTableHeader().getDefaultRenderer();
+ // 表头列名居左
+ hr.setHorizontalAlignment(DefaultTableCellRenderer.LEFT);
+
+ TableColumnModel tableColumnModel = msgDataTable.getColumnModel();
+ tableColumnModel.getColumn(headerNames.length - 1).
+ setCellRenderer(new TableInCellButtonColumn(msgDataTable, headerNames.length - 1));
+ tableColumnModel.getColumn(headerNames.length - 1).
+ setCellEditor(new TableInCellButtonColumn(msgDataTable, headerNames.length - 1));
+
+ // 设置列宽
+ tableColumnModel.getColumn(2).setPreferredWidth(46);
+ tableColumnModel.getColumn(2).setMaxWidth(46);
+ }
+
+ /**
+ * 清空所有界面字段
+ */
+ @Override
+ public void clearAllField() {
+ getInstance().getMsgTemplateIdTextField().setText("");
+ getInstance().getTemplateDataNameTextField().setText("");
+ getInstance().getTemplateDataValueTextField().setText("");
+ initTemplateDataTable();
+ }
+
+ {
+// GUI initializer generated by IntelliJ IDEA GUI Designer
+// >>> IMPORTANT!! <<<
+// DO NOT EDIT OR ADD ANY CODE HERE!
+ $$$setupUI$$$();
+ }
+
+ /**
+ * Method generated by IntelliJ IDEA GUI Designer
+ * >>> IMPORTANT!! <<<
+ * DO NOT edit this method OR call it in your code!
+ *
+ * @noinspection ALL
+ */
+ private void $$$setupUI$$$() {
+ final JPanel panel1 = new JPanel();
+ panel1.setLayout(new GridLayoutManager(1, 1, new Insets(0, 0, 0, 0), -1, -1));
+ templateMsgPanel = new JPanel();
+ templateMsgPanel.setLayout(new GridLayoutManager(2, 1, new Insets(10, 5, 0, 0), -1, -1));
+ panel1.add(templateMsgPanel, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, null, null, null, 0, false));
+ templateMsgPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEmptyBorder(), "", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, this.$$$getFont$$$(null, Font.BOLD, -1, templateMsgPanel.getFont()), null));
+ templateMsgDataPanel = new JPanel();
+ templateMsgDataPanel.setLayout(new GridLayoutManager(3, 3, new Insets(10, 0, 0, 0), -1, -1));
+ templateMsgPanel.add(templateMsgDataPanel, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, null, null, null, 0, false));
+ templateMsgDataPanel.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "短信模板变量(可使用\"${ENTER}\"作为换行符)", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, this.$$$getFont$$$(null, Font.BOLD, -1, templateMsgDataPanel.getFont()), null));
+ templateDataNameTextField = new JTextField();
+ templateDataNameTextField.setToolTipText("当消息类型是模板消息时的示例:first或者keyword1或者remark之类的");
+ templateMsgDataPanel.add(templateDataNameTextField, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false));
+ templateDataValueTextField = new JTextField();
+ templateMsgDataPanel.add(templateDataValueTextField, new GridConstraints(1, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false));
+ templateMsgDataAddButton = new JButton();
+ templateMsgDataAddButton.setText("");
+ templateMsgDataPanel.add(templateMsgDataAddButton, new GridConstraints(1, 2, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ templateMsgDataTable = new JTable();
+ templateMsgDataTable.setAutoCreateColumnsFromModel(true);
+ templateMsgDataTable.setAutoCreateRowSorter(true);
+ templateMsgDataTable.setGridColor(new Color(-12236470));
+ templateMsgDataTable.setRowHeight(36);
+ templateMsgDataPanel.add(templateMsgDataTable, new GridConstraints(2, 0, 1, 3, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, null, null, null, 0, false));
+ templateMsgNameLabel = new JLabel();
+ templateMsgNameLabel.setText("模板参数");
+ templateMsgNameLabel.setToolTipText("当消息类型是模板消息时的示例:first或者keyword1或者remark之类的");
+ templateMsgDataPanel.add(templateMsgNameLabel, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ templateMsgValueLabel = new JLabel();
+ templateMsgValueLabel.setText("参数对应的值");
+ templateMsgDataPanel.add(templateMsgValueLabel, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ final JPanel panel2 = new JPanel();
+ panel2.setLayout(new GridLayoutManager(1, 2, new Insets(0, 5, 10, 5), -1, -1));
+ templateMsgPanel.add(panel2, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, null, null, null, 0, false));
+ templateIdLabel = new JLabel();
+ templateIdLabel.setText("短信模板ID *");
+ panel2.add(templateIdLabel, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false));
+ msgTemplateIdTextField = new JTextField();
+ panel2.add(msgTemplateIdTextField, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false));
+ templateMsgNameLabel.setLabelFor(templateDataNameTextField);
+ templateMsgValueLabel.setLabelFor(templateDataValueTextField);
+ templateIdLabel.setLabelFor(msgTemplateIdTextField);
+ }
+
+ /**
+ * @noinspection ALL
+ */
+ private Font $$$getFont$$$(String fontName, int style, int size, Font currentFont) {
+ if (currentFont == null) return null;
+ String resultName;
+ if (fontName == null) {
+ resultName = currentFont.getName();
+ } else {
+ Font testFont = new Font(fontName, Font.PLAIN, 10);
+ if (testFont.canDisplay('a') && testFont.canDisplay('1')) {
+ resultName = fontName;
+ } else {
+ resultName = currentFont.getName();
+ }
+ }
+ Font font = new Font(resultName, style >= 0 ? style : currentFont.getStyle(), size >= 0 ? size : currentFont.getSize());
+ boolean isMac = System.getProperty("os.name", "").toLowerCase(Locale.ENGLISH).startsWith("mac");
+ Font fontWithFallback = isMac ? new Font(font.getFamily(), font.getStyle(), font.getSize()) : new StyleContext().getFont(font.getFamily(), font.getStyle(), font.getSize());
+ return fontWithFallback instanceof FontUIResource ? fontWithFallback : new FontUIResource(fontWithFallback);
+ }
+
+}
diff --git a/src/main/java/com/fangxuele/tool/push/ui/listener/FrameListener.java b/src/main/java/com/fangxuele/tool/push/ui/listener/FrameListener.java
index dabdac2be8ebe1b0fe334646ad573fd8bb064de1..4e23343968d782e54566579018b03044a604d939 100644
--- a/src/main/java/com/fangxuele/tool/push/ui/listener/FrameListener.java
+++ b/src/main/java/com/fangxuele/tool/push/ui/listener/FrameListener.java
@@ -46,7 +46,7 @@ public class FrameListener {
@Override
public void windowClosing(WindowEvent e) {
- mainFrame.dispose();
+ mainFrame.setExtendedState(JFrame.ICONIFIED);
if (!App.config.isCloseToTray()) {
App.sqlSession.close();
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
diff --git a/src/main/java/com/fangxuele/tool/push/ui/listener/MessageEditListener.java b/src/main/java/com/fangxuele/tool/push/ui/listener/MessageEditListener.java
index 4979637116b915f99a58ea2021f374311fc75c7f..882dc9a6df5a322fd23cb6bd73b41d9feae9ee39 100644
--- a/src/main/java/com/fangxuele/tool/push/ui/listener/MessageEditListener.java
+++ b/src/main/java/com/fangxuele/tool/push/ui/listener/MessageEditListener.java
@@ -175,6 +175,7 @@ public class MessageEditListener {
fillParaName = "预览消息用户的UserId(如果是聊天机器人消息,填写需要@ 的用户的手机号,如果@所有人 可不填写)";
paraDemo = "manager9115|manager9116|manager9117";
} else if (msgType == MessageTypeEnum.ALI_YUN_CODE || msgType == MessageTypeEnum.TX_YUN_CODE
+ || msgType == MessageTypeEnum.TX_YUN_3_CODE
|| msgType == MessageTypeEnum.HW_YUN_CODE || msgType == MessageTypeEnum.BD_YUN_CODE
|| msgType == MessageTypeEnum.UP_YUN_CODE || msgType == MessageTypeEnum.YUN_PIAN_CODE
|| msgType == MessageTypeEnum.QI_NIU_YUN_CODE) {
diff --git a/src/main/java/com/fangxuele/tool/push/ui/listener/MessageTypeListener.java b/src/main/java/com/fangxuele/tool/push/ui/listener/MessageTypeListener.java
index 5ef2addc1172504d674493d069ed797e275c8c69..a00a9afdec7556417be284e80028236c16b1d27f 100644
--- a/src/main/java/com/fangxuele/tool/push/ui/listener/MessageTypeListener.java
+++ b/src/main/java/com/fangxuele/tool/push/ui/listener/MessageTypeListener.java
@@ -59,6 +59,10 @@ public class MessageTypeListener {
App.config.setMsgType(MessageTypeEnum.TX_YUN_CODE);
saveType();
});
+ messageTypeForm.getTxYun3RadioButton().addActionListener(e -> {
+ App.config.setMsgType(MessageTypeEnum.TX_YUN_3_CODE);
+ saveType();
+ });
messageTypeForm.getQiniuRadioButton().addActionListener(e -> {
App.config.setMsgType(MessageTypeEnum.QI_NIU_YUN_CODE);
saveType();
@@ -95,6 +99,10 @@ public class MessageTypeListener {
App.config.setMsgType(MessageTypeEnum.DING_CODE);
saveType();
});
+ messageTypeForm.getTxYun3RadioButton().addActionListener(e -> {
+ App.config.setMsgType(MessageTypeEnum.TX_YUN_3_CODE);
+ saveType();
+ });
messageTypeForm.getKefuPriorityTipsLabel().addMouseListener(new MouseAdapter() {
@Override
diff --git a/src/main/resources/version_summary.json b/src/main/resources/version_summary.json
index 0780465a3892868fb293c6d8be7ebbc9a754531f..08d9f9c51cea6d44fa6706e846bf867904a8a213 100644
--- a/src/main/resources/version_summary.json
+++ b/src/main/resources/version_summary.json
@@ -1,9 +1,10 @@
{
- "currentVersion": "v_5.0.1",
+ "currentVersion": "v_5.0.2",
"versionIndex": {
"v_0.0.0": "0",
"v_5.0.0": "1",
- "v_5.0.1": "2"
+ "v_5.0.1": "2",
+ "v_5.0.2": "3"
},
"versionDetailList": [
{
@@ -20,6 +21,11 @@
"version": "v_5.0.1",
"title": "针对5.0新版多处修复和优化",
"log": "● 任务:修复任务执行状态更新不及时的问题\n● 窗口:优化esc键最小化后窗口再次恢复的表现\n● 修复excel导入提示缺少依赖的问题\n● 任务:修复任务详情成功失败文件路径不实时显示的问题\n● 增加执行前重新导入目标用户功能\n● 任务详情增加模式和线程数等更多细节展示\n"
+ },
+ {
+ "version": "v_5.0.2",
+ "title": "增加支持腾讯云短信3.0",
+ "log": "● 增加支持腾讯云短信3.0,由于没有条件,无法充分验证\n● 企业微信消息:支持私有化部署时BaseApiUrl配置\n● 全局:优化窗口关闭时的行为,避免再次点击任务栏图标无法唤出窗口\n"
}
]
}
\ No newline at end of file