diff --git a/.idea/icon.png b/.idea/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..30c3599095ae24ae0345dc8a239e5b50a9273005 Binary files /dev/null and b/.idea/icon.png differ diff --git a/assets/files/download_links.json b/assets/files/download_links.json index fdf01f9082ab66cd29d6579cc203a2423799ac9b..9c564233b9c0954e218db054903276477c2e90dc 100644 --- a/assets/files/download_links.json +++ b/assets/files/download_links.json @@ -1,5 +1,5 @@ { - "windows": "https://gitee.com/zhoubochina/WePush/releases/download/v5.0.1/WePush-5.0.1-windows.exe", - "mac": "https://gitee.com/zhoubochina/WePush/releases/download/v5.0.1/WePush_5.0.1.dmg", - "linux": "https://gitee.com/zhoubochina/WePush/releases/download/v5.0.1/WePush_5.0.1.deb" + "windows": "https://gitee.com/zhoubochina/WePush/releases/download/v5.0.2/WePush-5.0.2-windows.exe", + "mac": "https://gitee.com/zhoubochina/WePush/releases/download/v5.0.2/WePush_5.0.2.dmg", + "linux": "https://gitee.com/zhoubochina/WePush/releases/download/v5.0.2/WePush_5.0.2.deb" } \ No newline at end of file diff --git a/pom.xml b/pom.xml index 61152e4a8bd2f2389a5c42797eee7e1c2edb34f1..9b43d04aefdbe21ebc9afc18b84ce056cbbb6778 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.fangxuele.tool WePush - 5.0.2 + 5.0.3 jar WePush @@ -15,10 +15,10 @@ UTF-8 UTF-8 - 1.8 - 1.8 + 21 + 21 - 1.8 + 21 1.2.3 4.4.0 4.4.0 @@ -36,7 +36,7 @@ 1.0.6 1.2.7 2.3 - 1.18.20 + 1.18.30 3.5.13 3.42.0.1 4.13.1 @@ -47,9 +47,9 @@ 1.1.0 0.10.134 7.3.0 - 3.2 - 3.2 - 3.2 + 3.2.1 + 3.2.1 + 3.2.1 2.6.0 3.1.847 @@ -440,70 +440,68 @@ io.github.fvarrui javapackager - 1.7.2 + 1.7.4 true com.fangxuele.tool.push.App true - - bundling-for-windows - package - - package - - - windows - true - jdk.crypto.ec,jdk.charsets - - - - - true - true - true - - - installForAllUsers - true - false - false - - compiler:Default.isl - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + + + + bundling-for-mac + package + + package + + + mac + true + jdk.crypto.ec,jdk.charsets + false + + diff --git a/src/main/java/com/fangxuele/tool/push/domain/TTask.java b/src/main/java/com/fangxuele/tool/push/domain/TTask.java index 387ca83bf2900bc9ec629d0a7e70725c07babf07..6aa588940b55a5b9cbc9a7ec6795e20fbb2ea6aa 100644 --- a/src/main/java/com/fangxuele/tool/push/domain/TTask.java +++ b/src/main/java/com/fangxuele/tool/push/domain/TTask.java @@ -37,6 +37,10 @@ public class TTask implements Serializable { private Integer saveResult; + private Integer intervalPush; + + private Integer intervalTime; + private String remark; private String createTime; @@ -181,6 +185,22 @@ public class TTask implements Serializable { this.saveResult = saveResult; } + public Integer getIntervalPush() { + return intervalPush; + } + + public void setIntervalPush(Integer intervalPush) { + this.intervalPush = intervalPush; + } + + public Integer getIntervalTime() { + return intervalTime; + } + + public void setIntervalTime(Integer intervalTime) { + this.intervalTime = intervalTime; + } + public String getRemark() { return remark; } diff --git a/src/main/java/com/fangxuele/tool/push/logic/TaskRunThread.java b/src/main/java/com/fangxuele/tool/push/logic/TaskRunThread.java index eaab370171815b4a4c2ad117040f090715a382ab..215f504cab9cc8dbbfd0ceca1b30fafb6d2c27ec 100644 --- a/src/main/java/com/fangxuele/tool/push/logic/TaskRunThread.java +++ b/src/main/java/com/fangxuele/tool/push/logic/TaskRunThread.java @@ -37,7 +37,7 @@ import java.io.IOException; import java.util.List; import java.util.*; import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.LongAdder; import java.util.stream.Collectors; @@ -69,6 +69,11 @@ public class TaskRunThread extends Thread { */ public LongAdder failRecords = new LongAdder(); + /** + * 处理完毕的线程数 + */ + public AtomicInteger finishedThreadCount = new AtomicInteger(0); + /** * 停止标志 */ @@ -177,11 +182,11 @@ public class TaskRunThread extends Thread { ConsoleUtil.pushLog(logWriter, "推送开始……"); // 消息数据分片以及线程纷发 tMsg = msgMapper.selectByPrimaryKey(tTask.getMessageId()); - ThreadPoolExecutor threadPoolExecutor = shardingAndMsgThread(tMsg); + shardingAndMsgThread(tMsg); taskRunThreadMap.put(taskHis.getId(), this); // 时间监控 - timeMonitor(threadPoolExecutor); + timeMonitor(); resetLocalData(); @@ -289,9 +294,7 @@ public class TaskRunThread extends Thread { /** * 消息数据分片以及线程纷发 */ - private ThreadPoolExecutor shardingAndMsgThread(TMsg tMsg) { - int maxThreadPoolSize = tTask.getThreadCnt(); - ThreadPoolExecutor threadPoolExecutor = ThreadUtil.newExecutor(maxThreadPoolSize, maxThreadPoolSize); + private void shardingAndMsgThread(TMsg tMsg) { MsgSendThread msgSendThread; // 每个线程分配 int perThread = (int) (totalRecords / threadCount) + 1; @@ -309,24 +312,18 @@ public class TaskRunThread extends Thread { IMsgSender msgSender = MsgSenderFactory.getMsgSender(tMsg.getId(), dryRun); msgSendThread = new MsgSendThread(startIndex, endIndex, msgSender, this); - msgSendThread.setName("T-" + i); - - threadPoolExecutor.execute(msgSendThread); + Thread.ofVirtual().name("T-" + i).start(msgSendThread); } - threadPoolExecutor.shutdown(); ConsoleUtil.pushLog(logWriter, "所有线程宝宝启动完毕……"); - return threadPoolExecutor; } /** * 时间监控 - * - * @param threadPoolExecutor */ - private void timeMonitor(ThreadPoolExecutor threadPoolExecutor) { + private void timeMonitor() { // 计时 while (true) { - if (threadPoolExecutor.isTerminated()) { + if (finishedThreadCount.get() == threadCount) { taskHis.setEndTime(SqliteUtil.nowDateForSqlite()); int successCount = sendSuccessList.size(); @@ -440,6 +437,7 @@ public class TaskRunThread extends Thread { running = false; successRecords.reset(); failRecords.reset(); + finishedThreadCount.set(0); threadCount = 0; toSendList = Collections.synchronizedList(new LinkedList<>()); sendSuccessList = Collections.synchronizedList(new LinkedList<>()); diff --git a/src/main/java/com/fangxuele/tool/push/logic/msgthread/BaseMsgThread.java b/src/main/java/com/fangxuele/tool/push/logic/msgthread/BaseMsgThread.java index f978c4a1006d967e1757699bdd011a9933105d98..e3814145e10cd553fe0388980e559cb37f4529bb 100644 --- a/src/main/java/com/fangxuele/tool/push/logic/msgthread/BaseMsgThread.java +++ b/src/main/java/com/fangxuele/tool/push/logic/msgthread/BaseMsgThread.java @@ -15,7 +15,7 @@ import java.util.List; * @author RememBerBer * @since 2017/3/29. */ -public class BaseMsgThread extends Thread { +public class BaseMsgThread implements Runnable { public static final Log logger = LogFactory.get(); @@ -53,7 +53,7 @@ public class BaseMsgThread extends Thread { * 初始化当前线程 */ public void initCurrentThread() { - ConsoleUtil.pushLog(taskRunThread.getLogWriter(), "线程" + this.getName() + "负责处理第:" + startIndex + "-" + endIndex + "条数据"); + ConsoleUtil.pushLog(taskRunThread.getLogWriter(), "线程" + Thread.currentThread().getName() + "负责处理第:" + startIndex + "-" + endIndex + "条数据"); list = taskRunThread.getToSendList().subList(startIndex, endIndex); @@ -63,7 +63,7 @@ public class BaseMsgThread extends Thread { * 当前线程结束 */ public void currentThreadFinish() { - ConsoleUtil.pushLog(taskRunThread.getLogWriter(), this.getName() + "已处理完第" + startIndex + "-" + endIndex + "条的数据"); + ConsoleUtil.pushLog(taskRunThread.getLogWriter(), Thread.currentThread().getName() + "已处理完第" + startIndex + "-" + endIndex + "条的数据"); } } diff --git a/src/main/java/com/fangxuele/tool/push/logic/msgthread/MsgSendThread.java b/src/main/java/com/fangxuele/tool/push/logic/msgthread/MsgSendThread.java index a3a274c865fb83768c36fc511b87d2cc6e034f75..fe3657774c80f38c7244e427df75a746746c1258 100644 --- a/src/main/java/com/fangxuele/tool/push/logic/msgthread/MsgSendThread.java +++ b/src/main/java/com/fangxuele/tool/push/logic/msgthread/MsgSendThread.java @@ -1,6 +1,7 @@ package com.fangxuele.tool.push.logic.msgthread; import cn.hutool.json.JSONUtil; +import com.fangxuele.tool.push.domain.TTask; import com.fangxuele.tool.push.logic.MessageTypeEnum; import com.fangxuele.tool.push.logic.TaskRunThread; import com.fangxuele.tool.push.logic.msgsender.IMsgSender; @@ -20,6 +21,7 @@ import org.bouncycastle.util.Arrays; public class MsgSendThread extends BaseMsgThread { private IMsgSender iMsgSender; + public MsgSendThread(int startIndex, int endIndex, IMsgSender msgSender, TaskRunThread taskRunThread) { super(startIndex, endIndex, taskRunThread); this.iMsgSender = msgSender; @@ -30,6 +32,10 @@ public class MsgSendThread extends BaseMsgThread { try { // 初始化当前线程 initCurrentThread(); + TTask tTask = taskRunThread.getTTask(); + + // 间隔推送 + boolean isIntervalPush = tTask.getIntervalPush() != null && tTask.getIntervalPush() == 1 && tTask.getIntervalTime() != null; for (int i = 0; i < list.size(); i++) { if (!taskRunThread.running) { @@ -37,11 +43,16 @@ public class MsgSendThread extends BaseMsgThread { return; } + // 间隔推送 + if (isIntervalPush) { + Thread.sleep(tTask.getIntervalTime() * 1000); + } + // 本条消息所需的数据 String[] msgData = list.get(i); SendResult sendResult = iMsgSender.send(msgData); - if (taskRunThread.getTTask().getMsgType() == MessageTypeEnum.HTTP_CODE && taskRunThread.getTTask().getSaveResult() == 1) { + if (tTask.getMsgType() == MessageTypeEnum.HTTP_CODE && tTask.getSaveResult() == 1) { String body = sendResult.getInfo() == null ? "" : sendResult.getInfo(); msgData = Arrays.append(msgData, body); } @@ -68,6 +79,9 @@ public class MsgSendThread extends BaseMsgThread { currentThreadFinish(); } catch (Exception e) { logger.error(ExceptionUtils.getStackTrace(e)); + } finally { + // 线程结束,处理完毕的线程数+1 + taskRunThread.finishedThreadCount.incrementAndGet(); } } diff --git a/src/main/java/com/fangxuele/tool/push/ui/Init.java b/src/main/java/com/fangxuele/tool/push/ui/Init.java index 303a663177fba4551e0a2c805422dc94c7c53578..9dd62de44c3d61812a4c12fa2f2e090d64723ff0 100644 --- a/src/main/java/com/fangxuele/tool/push/ui/Init.java +++ b/src/main/java/com/fangxuele/tool/push/ui/Init.java @@ -222,7 +222,7 @@ public class Init { popupMenu.setFont(App.mainFrame.getContentPane().getFont()); MenuItem openItem = new MenuItem("WePush"); - MenuItem exitItem = new MenuItem("退出"); + MenuItem exitItem = new MenuItem("Exit"); openItem.addActionListener(e -> { App.mainFrame.setExtendedState(JFrame.NORMAL); 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 331537489ed48fd3ff2b7a96ef933654d9febd46..88b060ba8b3a624ad86a4e29ab02976088dc7525 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.2"; + public final static String APP_VERSION = "v_5.0.3"; public static final int TABLE_ROW_HEIGHT = 30; diff --git a/src/main/java/com/fangxuele/tool/push/ui/dialog/InfinityTaskHisDetailDialog.java b/src/main/java/com/fangxuele/tool/push/ui/dialog/InfinityTaskHisDetailDialog.java index b622d512e8fc30a2be38eac34ce4891dd5c8a1d4..621bba89027afb1d389337ec2907adedc56ba0cf 100644 --- a/src/main/java/com/fangxuele/tool/push/ui/dialog/InfinityTaskHisDetailDialog.java +++ b/src/main/java/com/fangxuele/tool/push/ui/dialog/InfinityTaskHisDetailDialog.java @@ -82,7 +82,7 @@ public class InfinityTaskHisDetailDialog extends JDialog { public InfinityTaskHisDetailDialog() { super(App.mainFrame, "执行详情"); - ComponentUtil.setPreferSizeAndLocateToCenter(this, 0.5, 0.64); + ComponentUtil.setPreferSizeAndLocateToCenter(this, 0.68, 0.64); setContentPane(contentPane); setModal(true); diff --git a/src/main/java/com/fangxuele/tool/push/ui/dialog/NewPeopleDialog.form b/src/main/java/com/fangxuele/tool/push/ui/dialog/NewPeopleDialog.form index 26b321b1e27c41142cf7c60bd0af01174cd31159..91929d033d366af3ef18c544e1a9de6166971828 100644 --- a/src/main/java/com/fangxuele/tool/push/ui/dialog/NewPeopleDialog.form +++ b/src/main/java/com/fangxuele/tool/push/ui/dialog/NewPeopleDialog.form @@ -1,7 +1,7 @@
- + @@ -42,7 +42,7 @@ - + diff --git a/src/main/java/com/fangxuele/tool/push/ui/dialog/NewPeopleDialog.java b/src/main/java/com/fangxuele/tool/push/ui/dialog/NewPeopleDialog.java index f1c96a3f434498eaeaa8df6c6ae51e020e70e9da..73493335d73de0c7cac0a6be85cafa1cf20ff6a8 100644 --- a/src/main/java/com/fangxuele/tool/push/ui/dialog/NewPeopleDialog.java +++ b/src/main/java/com/fangxuele/tool/push/ui/dialog/NewPeopleDialog.java @@ -169,7 +169,7 @@ public class NewPeopleDialog extends JDialog { */ private void $$$setupUI$$$() { contentPane = new JPanel(); - contentPane.setLayout(new GridLayoutManager(3, 1, new Insets(10, 10, 10, 10), -1, -1)); + contentPane.setLayout(new GridLayoutManager(3, 1, new Insets(0, 0, 0, 0), -1, -1)); final JPanel panel1 = new JPanel(); panel1.setLayout(new GridLayoutManager(1, 2, new Insets(0, 0, 10, 10), -1, -1)); contentPane.add(panel1, new GridConstraints(2, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, 1, null, null, null, 0, false)); @@ -182,7 +182,7 @@ public class NewPeopleDialog extends JDialog { saveButton.setText("保存"); panel2.add(saveButton, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); final JPanel panel3 = new JPanel(); - panel3.setLayout(new GridLayoutManager(2, 2, new Insets(5, 5, 0, 5), -1, -1)); + panel3.setLayout(new GridLayoutManager(2, 2, new Insets(10, 10, 0, 10), -1, -1)); contentPane.add(panel3, 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 JLabel label1 = new JLabel(); label1.setText("人群名称"); diff --git a/src/main/java/com/fangxuele/tool/push/ui/dialog/NewTaskDialog.form b/src/main/java/com/fangxuele/tool/push/ui/dialog/NewTaskDialog.form index e84b36c935512d5bb5d75108b13f52eb2ecee4e6..134e8866ee5c1967fb4d2a2d8a5150234a760907 100644 --- a/src/main/java/com/fangxuele/tool/push/ui/dialog/NewTaskDialog.form +++ b/src/main/java/com/fangxuele/tool/push/ui/dialog/NewTaskDialog.form @@ -151,7 +151,7 @@ - + @@ -440,6 +440,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 dbb6143414c19046baa4224cd39b25a87268144c..459180febaa08a26c41c2a573e749290a53ea9d5 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 @@ -81,6 +81,8 @@ public class NewTaskDialog extends JDialog { private JCheckBox saveResponseBodyCheckBox; private JPanel otherPanel; private JTextField maxThreadCntTextField; + private JCheckBox intervalPushCheckBox; + private JTextField intervalTextField; private static TTaskMapper taskMapper = MybatisUtil.getSqlSession().getMapper(TTaskMapper.class); private static TTaskExtMapper taskExtMapper = MybatisUtil.getSqlSession().getMapper(TTaskExtMapper.class); @@ -331,6 +333,10 @@ public class NewTaskDialog extends JDialog { cronTextField.setText(beforeTTask.getPeriodTime()); } } + intervalPushCheckBox.setSelected(beforeTTask.getIntervalPush() != null && beforeTTask.getIntervalPush() == 1); + if (beforeTTask.getIntervalTime() != null) { + intervalTextField.setText(String.valueOf(beforeTTask.getIntervalTime())); + } reimportCheckBox.setSelected(beforeTTask.getReimportPeople() != null && beforeTTask.getReimportPeople() == 1); sendPushResultCheckBox.setSelected(beforeTTask.getResultAlert() != null && beforeTTask.getResultAlert() == 1); mailResultToTextField.setText(beforeTTask.getAlertEmails()); @@ -618,6 +624,10 @@ public class NewTaskDialog extends JDialog { task.setResultAlert(sendPushResultCheckBox.isSelected() ? 1 : 0); task.setAlertEmails(mailResultToTextField.getText().trim()); task.setSaveResult(saveResponseBodyCheckBox.isSelected() ? 1 : 0); + task.setIntervalPush(intervalPushCheckBox.isSelected() ? 1 : 0); + if (StringUtils.isNotBlank(intervalTextField.getText())) { + task.setIntervalTime(Integer.parseInt(intervalTextField.getText().trim())); + } task.setModifiedTime(nowDateForSqlite); // 如果是定时任务 @@ -706,8 +716,6 @@ public class NewTaskDialog extends JDialog { TaskForm.initTaskListTable(); - JOptionPane.showMessageDialog(this, "保存成功!", "提示", - JOptionPane.INFORMATION_MESSAGE); dispose(); } catch (Exception e) { log.error("保存任务异常:{}", ExceptionUtils.getStackTrace(e)); @@ -911,7 +919,7 @@ public class NewTaskDialog extends JDialog { peopleComboBox = new JComboBox(); panel4.add(peopleComboBox, new GridConstraints(4, 1, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); final JPanel panel5 = new JPanel(); - panel5.setLayout(new GridLayoutManager(3, 1, new Insets(10, 10, 10, 10), -1, -1)); + panel5.setLayout(new GridLayoutManager(4, 1, new Insets(10, 10, 10, 10), -1, -1)); panel3.add(panel5, 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_CAN_GROW, null, null, null, 0, false)); panel5.setBorder(BorderFactory.createTitledBorder(null, "运行规则", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, this.$$$getFont$$$(null, Font.BOLD, -1, panel5.getFont()), null)); schedulePanel = new JPanel(); @@ -1019,16 +1027,29 @@ public class NewTaskDialog extends JDialog { maxThreadCntTextField = new JTextField(); panel7.add(maxThreadCntTextField, new GridConstraints(0, 6, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(60, -1), null, 0, false)); final JPanel panel8 = new JPanel(); - panel8.setLayout(new GridLayoutManager(2, 2, new Insets(10, 10, 10, 10), -1, -1)); - panel3.add(panel8, new GridConstraints(2, 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)); - panel8.setBorder(BorderFactory.createTitledBorder(null, "告警和通知", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, this.$$$getFont$$$(null, Font.BOLD, -1, panel8.getFont()), null)); + panel8.setLayout(new GridLayoutManager(1, 4, new Insets(0, 0, 0, 0), -1, -1)); + panel5.add(panel8, new GridConstraints(3, 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)); + intervalPushCheckBox = new JCheckBox(); + intervalPushCheckBox.setText("间隔发送"); + panel8.add(intervalPushCheckBox, new GridConstraints(0, 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)); + final Spacer spacer5 = new Spacer(); + panel8.add(spacer5, new GridConstraints(0, 3, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, null, null, 0, false)); + intervalTextField = new JTextField(); + panel8.add(intervalTextField, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(60, -1), null, 0, false)); + final JLabel label15 = new JLabel(); + label15.setText("秒"); + panel8.add(label15, new GridConstraints(0, 2, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, GridConstraints.SIZEPOLICY_FIXED, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); + final JPanel panel9 = new JPanel(); + panel9.setLayout(new GridLayoutManager(2, 2, new Insets(10, 10, 10, 10), -1, -1)); + panel3.add(panel9, new GridConstraints(2, 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)); + panel9.setBorder(BorderFactory.createTitledBorder(null, "告警和通知", TitledBorder.DEFAULT_JUSTIFICATION, TitledBorder.DEFAULT_POSITION, this.$$$getFont$$$(null, Font.BOLD, -1, panel9.getFont()), null)); sendPushResultCheckBox = new JCheckBox(); sendPushResultCheckBox.setText("将推送结果发送邮件给(多个以分号分隔):"); - panel8.add(sendPushResultCheckBox, new GridConstraints(0, 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)); - final Spacer spacer5 = new Spacer(); - panel8.add(spacer5, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, null, null, 0, false)); + panel9.add(sendPushResultCheckBox, new GridConstraints(0, 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)); + final Spacer spacer6 = new Spacer(); + panel9.add(spacer6, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, null, null, 0, false)); mailResultToTextField = new JTextField(); - panel8.add(mailResultToTextField, new GridConstraints(1, 0, 1, 2, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false)); + panel9.add(mailResultToTextField, new GridConstraints(1, 0, 1, 2, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, new Dimension(150, -1), null, 0, false)); otherPanel = new JPanel(); otherPanel.setLayout(new GridLayoutManager(1, 2, new Insets(10, 10, 10, 10), -1, -1)); panel3.add(otherPanel, new GridConstraints(3, 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)); @@ -1036,8 +1057,8 @@ public class NewTaskDialog extends JDialog { saveResponseBodyCheckBox = new JCheckBox(); saveResponseBodyCheckBox.setText("保存请求返回的Body"); otherPanel.add(saveResponseBodyCheckBox, new GridConstraints(0, 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)); - final Spacer spacer6 = new Spacer(); - otherPanel.add(spacer6, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, null, null, 0, false)); + final Spacer spacer7 = new Spacer(); + otherPanel.add(spacer7, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, null, null, 0, false)); } /** diff --git a/src/main/java/com/fangxuele/tool/push/ui/dialog/TaskHisDetailDialog.java b/src/main/java/com/fangxuele/tool/push/ui/dialog/TaskHisDetailDialog.java index bc99c3bf59b3d46ec20b126245206a37ca8f3671..e3094d8a6c5e36e924ec8af5abd58c41410a7ec4 100644 --- a/src/main/java/com/fangxuele/tool/push/ui/dialog/TaskHisDetailDialog.java +++ b/src/main/java/com/fangxuele/tool/push/ui/dialog/TaskHisDetailDialog.java @@ -74,7 +74,7 @@ public class TaskHisDetailDialog extends JDialog { public TaskHisDetailDialog() { super(App.mainFrame, "执行详情"); - ComponentUtil.setPreferSizeAndLocateToCenter(this, 0.5, 0.64); + ComponentUtil.setPreferSizeAndLocateToCenter(this, 0.68, 0.64); setContentPane(contentPane); setModal(true); diff --git a/src/main/java/com/fangxuele/tool/push/ui/dialog/UpdateDialog.form b/src/main/java/com/fangxuele/tool/push/ui/dialog/UpdateDialog.form index 3097384d197ea66ab0f767c65393ed2f8107552a..dbc144d1e2c0942ade500e314b380251edf3a68c 100644 --- a/src/main/java/com/fangxuele/tool/push/ui/dialog/UpdateDialog.form +++ b/src/main/java/com/fangxuele/tool/push/ui/dialog/UpdateDialog.form @@ -1,7 +1,7 @@ - + @@ -9,7 +9,7 @@ - + @@ -58,7 +58,7 @@ - + diff --git a/src/main/java/com/fangxuele/tool/push/ui/dialog/UpdateDialog.java b/src/main/java/com/fangxuele/tool/push/ui/dialog/UpdateDialog.java index 2b05d84f339327b83d2f16266e5faa7181399e91..976179625dfc244e8df4707ff3bf6d7ca9f712c8 100644 --- a/src/main/java/com/fangxuele/tool/push/ui/dialog/UpdateDialog.java +++ b/src/main/java/com/fangxuele/tool/push/ui/dialog/UpdateDialog.java @@ -183,9 +183,9 @@ public class UpdateDialog extends JDialog { */ private void $$$setupUI$$$() { contentPane = new JPanel(); - contentPane.setLayout(new GridLayoutManager(2, 1, new Insets(10, 10, 10, 10), -1, -1)); + contentPane.setLayout(new GridLayoutManager(2, 1, new Insets(0, 0, 0, 0), -1, -1)); final JPanel panel1 = new JPanel(); - panel1.setLayout(new GridLayoutManager(1, 2, new Insets(0, 0, 10, 10), -1, -1)); + panel1.setLayout(new GridLayoutManager(1, 2, new Insets(10, 10, 10, 10), -1, -1)); contentPane.add(panel1, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, 1, null, null, null, 0, false)); final Spacer spacer1 = new Spacer(); panel1.add(spacer1, new GridConstraints(0, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, null, null, 0, false)); @@ -202,7 +202,7 @@ public class UpdateDialog extends JDialog { buttonDownloadFromWeb.setText("打开下载页面"); panel2.add(buttonDownloadFromWeb, new GridConstraints(0, 1, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); final JPanel panel3 = new JPanel(); - panel3.setLayout(new GridLayoutManager(4, 1, new Insets(0, 0, 0, 0), -1, -1)); + panel3.setLayout(new GridLayoutManager(4, 1, new Insets(10, 10, 10, 10), -1, -1)); contentPane.add(panel3, 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)); progressBarDownload = new JProgressBar(); panel3.add(progressBarDownload, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, GridConstraints.SIZEPOLICY_FIXED, null, null, null, 0, false)); diff --git a/src/main/java/com/fangxuele/tool/push/ui/dialog/UpdateInfoDialog.form b/src/main/java/com/fangxuele/tool/push/ui/dialog/UpdateInfoDialog.form index 5e3eae0cf39ef609bae4a97c4c570ed7ddfaef21..276b94af128954723a35858cf2180fe09b568b57 100644 --- a/src/main/java/com/fangxuele/tool/push/ui/dialog/UpdateInfoDialog.form +++ b/src/main/java/com/fangxuele/tool/push/ui/dialog/UpdateInfoDialog.form @@ -1,7 +1,7 @@ - + @@ -55,7 +55,7 @@ - + diff --git a/src/main/java/com/fangxuele/tool/push/ui/dialog/UpdateInfoDialog.java b/src/main/java/com/fangxuele/tool/push/ui/dialog/UpdateInfoDialog.java index b36bcbce4d861d5e362d052cf78e8b71f43a1da6..908b3c26203d32d2f39c7dc2aca90dbdabd03e8b 100644 --- a/src/main/java/com/fangxuele/tool/push/ui/dialog/UpdateInfoDialog.java +++ b/src/main/java/com/fangxuele/tool/push/ui/dialog/UpdateInfoDialog.java @@ -133,7 +133,7 @@ public class UpdateInfoDialog extends JDialog { */ private void $$$setupUI$$$() { contentPane = new JPanel(); - contentPane.setLayout(new GridLayoutManager(2, 1, new Insets(0, 0, 10, 0), -1, -1)); + contentPane.setLayout(new GridLayoutManager(2, 1, new Insets(0, 0, 0, 0), -1, -1)); final JPanel panel1 = new JPanel(); panel1.setLayout(new GridLayoutManager(1, 3, new Insets(0, 0, 10, 10), -1, -1)); contentPane.add(panel1, new GridConstraints(1, 0, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_BOTH, GridConstraints.SIZEPOLICY_CAN_SHRINK | GridConstraints.SIZEPOLICY_CAN_GROW, 1, null, null, null, 0, false)); @@ -151,7 +151,7 @@ public class UpdateInfoDialog extends JDialog { final Spacer spacer2 = new Spacer(); panel1.add(spacer2, new GridConstraints(0, 2, 1, 1, GridConstraints.ANCHOR_CENTER, GridConstraints.FILL_HORIZONTAL, GridConstraints.SIZEPOLICY_WANT_GROW, 1, null, null, null, 0, false)); final JPanel panel3 = new JPanel(); - panel3.setLayout(new GridLayoutManager(1, 1, new Insets(20, 0, 0, 0), -1, -1)); + panel3.setLayout(new GridLayoutManager(1, 1, new Insets(20, 10, 10, 10), -1, -1)); contentPane.add(panel3, 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 JScrollPane scrollPane1 = new JScrollPane(); panel3.add(scrollPane1, 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)); 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 14fd1048751d38df83469bc7058e7a9282fa3821..976e6c74ae7f2349b756191c59bb2efadb679ee7 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 @@ -129,6 +129,9 @@ public class WxCpAccountForm implements IAccountForm { public static WxCpAccountForm getInstance() { if (wxCpAccountForm == null) { wxCpAccountForm = new WxCpAccountForm(); + wxCpAccountForm.getPrivateDepCheckBox().setSelected(false); + wxCpAccountForm.getBaseApiUrlTextField().setVisible(false); + wxCpAccountForm.getBaseApiUrlLabel().setVisible(false); wxCpAccountForm.getPrivateDepCheckBox().addChangeListener(e -> { if (wxCpAccountForm.getPrivateDepCheckBox().isSelected()) { wxCpAccountForm.getBaseApiUrlTextField().setVisible(true); diff --git a/src/main/java/com/fangxuele/tool/push/ui/form/msg/MailMsgForm.java b/src/main/java/com/fangxuele/tool/push/ui/form/msg/MailMsgForm.java index aef8257dd2fb9202064f1d3b91d8f0b5b5c21598..8e954d9f778ae8c35c2e30dc963a0b3336521a3f 100644 --- a/src/main/java/com/fangxuele/tool/push/ui/form/msg/MailMsgForm.java +++ b/src/main/java/com/fangxuele/tool/push/ui/form/msg/MailMsgForm.java @@ -93,7 +93,7 @@ public class MailMsgForm implements IMsgForm { getInstance().getMailTitleTextField().setText(tMsgMail.getTitle()); getInstance().getMailCcTextField().setText(tMsgMail.getCc()); getInstance().getMailFilesTextArea().setText(tMsgMail.getFiles()); - getInstance().getMailContentPane().setText(tMsg.getContent()); + getInstance().getMailContentPane().setText(tMsgMail.getContent()); MessageEditForm messageEditForm = MessageEditForm.getInstance(); messageEditForm.getMsgNameField().setText(tMsg.getMsgName()); diff --git a/src/main/java/com/fangxuele/tool/push/ui/form/msg/WxCpMsgForm.java b/src/main/java/com/fangxuele/tool/push/ui/form/msg/WxCpMsgForm.java index bc450b91f7cf800614ad0d65999d748ef328b7e9..479595f684b3c03e2715887ab076518cc01a3f29 100644 --- a/src/main/java/com/fangxuele/tool/push/ui/form/msg/WxCpMsgForm.java +++ b/src/main/java/com/fangxuele/tool/push/ui/form/msg/WxCpMsgForm.java @@ -76,7 +76,7 @@ public class WxCpMsgForm implements IMsgForm { TMsgWxCp tMsgWxCp = JSONUtil.toBean(tMsg.getContent(), TMsgWxCp.class); String cpMsgType = tMsgWxCp.getCpMsgType(); getInstance().getMsgTypeComboBox().setSelectedItem(cpMsgType); - getInstance().getContentTextArea().setText(tMsg.getContent()); + getInstance().getContentTextArea().setText(tMsgWxCp.getContent()); getInstance().getTitleTextField().setText(tMsgWxCp.getTitle()); getInstance().getPicUrlTextField().setText(tMsgWxCp.getImgUrl()); getInstance().getDescTextField().setText(tMsgWxCp.getDescribe()); @@ -225,6 +225,7 @@ public class WxCpMsgForm implements IMsgForm { getInstance().getDescTextField().setText(""); getInstance().getUrlTextField().setText(""); getInstance().getBtnTxtTextField().setText(""); + switchCpMsgType(msgTypeComboBox.getSelectedItem().toString()); } { 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 4e23343968d782e54566579018b03044a604d939..cbea3798d9dc365f1fa85c03116879229f8f01be 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 @@ -5,9 +5,7 @@ import com.fangxuele.tool.push.ui.form.MainWindow; import javax.swing.*; import java.awt.*; -import java.awt.event.KeyEvent; -import java.awt.event.WindowEvent; -import java.awt.event.WindowListener; +import java.awt.event.*; import static com.fangxuele.tool.push.App.mainFrame; @@ -67,6 +65,40 @@ public class FrameListener { } }); + // 鼠标双击最大化/还原 + App.mainFrame.addMouseListener(new MouseListener() { + @Override + public void mouseClicked(MouseEvent e) { + if (e.getClickCount() == 2 && !e.isConsumed()) { + if (App.mainFrame.getExtendedState() == JFrame.MAXIMIZED_BOTH) { + App.mainFrame.setExtendedState(JFrame.NORMAL); + } else { + App.mainFrame.setExtendedState(JFrame.MAXIMIZED_BOTH); + } + } + } + + @Override + public void mousePressed(MouseEvent e) { + + } + + @Override + public void mouseReleased(MouseEvent e) { + + } + + @Override + public void mouseEntered(MouseEvent e) { + + } + + @Override + public void mouseExited(MouseEvent e) { + + } + }); + MainWindow.getInstance().getMainPanel().registerKeyboardAction(e -> mainFrame.setExtendedState(Frame.ICONIFIED), KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_IN_FOCUSED_WINDOW); } } diff --git a/src/main/resources/mapper/TTaskMapper.xml b/src/main/resources/mapper/TTaskMapper.xml index bf8706e3dae84f1a90af25b7648ef6a124ae4517..f2bdacfeb3ffac36a27141a03a1d3caf3e704624 100644 --- a/src/main/resources/mapper/TTaskMapper.xml +++ b/src/main/resources/mapper/TTaskMapper.xml @@ -19,6 +19,8 @@ + + @@ -26,6 +28,7 @@ id, title, msg_type, account_id, message_id, people_id, task_mode, task_period, period_type, period_time, cron, thread_cnt, max_thread_cnt, reimport_people, result_alert, alert_emails, save_result, + interval_push, interval_time, remark, create_time, modified_time