From 2578d8ab90ee81344437e0720931d7af3a3a8e7c Mon Sep 17 00:00:00 2001
From: lius <Lius2225@163.com>
Date: 星期三, 16 八月 2023 16:16:38 +0800
Subject: [PATCH] 定时任务执行失败发送系统消息

---
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningAllEquipmentShiftStatisticalProcessJob.java             |    6 
 lxzn-boot-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java                                        |  363 ++++++++++++++++++++++++---------------
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/GenerateWeekDaysJob.java                                       |    6 
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java                 |    5 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningAllEquipmentStatisticalProcessJob.java                  |    6 
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java         |    8 
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysAnnouncementServiceImpl.java |   66 +++++++
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java                    |    5 
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysAnnouncementService.java         |    5 
 lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningAllEquipmentTraceProcessJob.java                        |    6 
 lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml                 |   12 +
 11 files changed, 348 insertions(+), 140 deletions(-)

diff --git a/lxzn-boot-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java b/lxzn-boot-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java
index 7b6fb1d..0287694 100644
--- a/lxzn-boot-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java
+++ b/lxzn-boot-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java
@@ -6,133 +6,155 @@
  */
 public interface CommonConstant {
 
-	/**
-	 * 姝e父鐘舵��
-	 */
-	Integer STATUS_NORMAL = 0;
+    /**
+     * 姝e父鐘舵��
+     */
+    Integer STATUS_NORMAL = 0;
 
-	/**
-	 * 绂佺敤鐘舵��
-	 */
-	Integer STATUS_DISABLE = -1;
+    /**
+     * 绂佺敤鐘舵��
+     */
+    Integer STATUS_DISABLE = -1;
 
-	/**
-	 * 鍒犻櫎鏍囧織
-	 */
-	Integer DEL_FLAG_1 = 1;
+    /**
+     * 鍒犻櫎鏍囧織
+     */
+    Integer DEL_FLAG_1 = 1;
 
-	/**
-	 * 鏈垹闄�
-	 */
-	Integer DEL_FLAG_0 = 0;
+    /**
+     * 鏈垹闄�
+     */
+    Integer DEL_FLAG_0 = 0;
 
-	/**
-	 * 绯荤粺鏃ュ織绫诲瀷锛� 鐧诲綍
-	 */
-	int LOG_TYPE_1 = 1;
-	
-	/**
-	 * 绯荤粺鏃ュ織绫诲瀷锛� 鎿嶄綔
-	 */
-	int LOG_TYPE_2 = 2;
+    /**
+     * 绯荤粺鏃ュ織绫诲瀷锛� 鐧诲綍
+     */
+    int LOG_TYPE_1 = 1;
 
-	/**
-	 * 鎿嶄綔鏃ュ織绫诲瀷锛� 鏌ヨ
-	 */
-	int OPERATE_TYPE_1 = 1;
-	
-	/**
-	 * 鎿嶄綔鏃ュ織绫诲瀷锛� 娣诲姞
-	 */
-	int OPERATE_TYPE_2 = 2;
-	
-	/**
-	 * 鎿嶄綔鏃ュ織绫诲瀷锛� 鏇存柊
-	 */
-	int OPERATE_TYPE_3 = 3;
-	
-	/**
-	 * 鎿嶄綔鏃ュ織绫诲瀷锛� 鍒犻櫎
-	 */
-	int OPERATE_TYPE_4 = 4;
-	
-	/**
-	 * 鎿嶄綔鏃ュ織绫诲瀷锛� 鍊掑叆
-	 */
-	int OPERATE_TYPE_5 = 5;
-	
-	/**
-	 * 鎿嶄綔鏃ュ織绫诲瀷锛� 瀵煎嚭
-	 */
-	int OPERATE_TYPE_6 = 6;
-	
-	
-	/** {@code 500 Server Error} (HTTP/1.0 - RFC 1945) */
+    /**
+     * 绯荤粺鏃ュ織绫诲瀷锛� 鎿嶄綔
+     */
+    int LOG_TYPE_2 = 2;
+
+    /**
+     * 鎿嶄綔鏃ュ織绫诲瀷锛� 鏌ヨ
+     */
+    int OPERATE_TYPE_1 = 1;
+
+    /**
+     * 鎿嶄綔鏃ュ織绫诲瀷锛� 娣诲姞
+     */
+    int OPERATE_TYPE_2 = 2;
+
+    /**
+     * 鎿嶄綔鏃ュ織绫诲瀷锛� 鏇存柊
+     */
+    int OPERATE_TYPE_3 = 3;
+
+    /**
+     * 鎿嶄綔鏃ュ織绫诲瀷锛� 鍒犻櫎
+     */
+    int OPERATE_TYPE_4 = 4;
+
+    /**
+     * 鎿嶄綔鏃ュ織绫诲瀷锛� 鍊掑叆
+     */
+    int OPERATE_TYPE_5 = 5;
+
+    /**
+     * 鎿嶄綔鏃ュ織绫诲瀷锛� 瀵煎嚭
+     */
+    int OPERATE_TYPE_6 = 6;
+
+
+    /**
+     * {@code 500 Server Error} (HTTP/1.0 - RFC 1945)
+     */
     Integer SC_INTERNAL_SERVER_ERROR_500 = 500;
-    /** {@code 200 OK} (HTTP/1.0 - RFC 1945) */
+    /**
+     * {@code 200 OK} (HTTP/1.0 - RFC 1945)
+     */
     Integer SC_OK_200 = 200;
-    
-    /**璁块棶鏉冮檺璁よ瘉鏈�氳繃 510*/
-    Integer SC_JEECG_NO_AUTHZ=510;
 
-    /** 鐧诲綍鐢ㄦ埛Shiro鏉冮檺缂撳瓨KEY鍓嶇紑 */
-    public static String PREFIX_USER_SHIRO_CACHE  = "shiro:cache:org.jeecg.config.shiro.ShiroRealm.authorizationCache:";
-    /** 鐧诲綍鐢ㄦ埛Token浠ょ墝缂撳瓨KEY鍓嶇紑 */
-    String PREFIX_USER_TOKEN  = "prefix_user_token_";
+    /**
+     * 璁块棶鏉冮檺璁よ瘉鏈�氳繃 510
+     */
+    Integer SC_JEECG_NO_AUTHZ = 510;
+
+    /**
+     * 鐧诲綍鐢ㄦ埛Shiro鏉冮檺缂撳瓨KEY鍓嶇紑
+     */
+    public static String PREFIX_USER_SHIRO_CACHE = "shiro:cache:org.jeecg.config.shiro.ShiroRealm.authorizationCache:";
+    /**
+     * 鐧诲綍鐢ㄦ埛Token浠ょ墝缂撳瓨KEY鍓嶇紑
+     */
+    String PREFIX_USER_TOKEN = "prefix_user_token_";
 //    /** Token缂撳瓨鏃堕棿锛�3600绉掑嵆涓�灏忔椂 */
 //    int  TOKEN_EXPIRE_TIME  = 3600;
 
-    /** 鐧诲綍浜岀淮鐮� */
-    String  LOGIN_QRCODE_PRE  = "QRCODELOGIN:";
-    String  LOGIN_QRCODE  = "LQ:";
-    /** 鐧诲綍浜岀淮鐮乼oken */
-    String  LOGIN_QRCODE_TOKEN  = "LQT:";
+    /**
+     * 鐧诲綍浜岀淮鐮�
+     */
+    String LOGIN_QRCODE_PRE = "QRCODELOGIN:";
+    String LOGIN_QRCODE = "LQ:";
+    /**
+     * 鐧诲綍浜岀淮鐮乼oken
+     */
+    String LOGIN_QRCODE_TOKEN = "LQT:";
 
 
     /**
-     *  0锛氫竴绾ц彍鍗�
+     * 0锛氫竴绾ц彍鍗�
      */
-    Integer MENU_TYPE_0  = 0;
-   /**
-    *  1锛氬瓙鑿滃崟 
-    */
-    Integer MENU_TYPE_1  = 1;
+    Integer MENU_TYPE_0 = 0;
     /**
-     *  2锛氭寜閽潈闄�
+     * 1锛氬瓙鑿滃崟
      */
-    Integer MENU_TYPE_2  = 2;
+    Integer MENU_TYPE_1 = 1;
+    /**
+     * 2锛氭寜閽潈闄�
+     */
+    Integer MENU_TYPE_2 = 2;
 
-    /**閫氬憡瀵硅薄绫诲瀷锛圲SER:鎸囧畾鐢ㄦ埛锛孉LL:鍏ㄤ綋鐢ㄦ埛锛�*/
-    String MSG_TYPE_UESR  = "USER";
-    String MSG_TYPE_ALL  = "ALL";
-    
-    /**鍙戝竷鐘舵�侊紙0鏈彂甯冿紝1宸插彂甯冿紝2宸叉挙閿�锛�*/
-    String NO_SEND  = "0";
-    String HAS_SEND  = "1";
-    String HAS_CANCLE  = "2";
-    
-    /**闃呰鐘舵�侊紙0鏈锛�1宸茶锛�*/
-    String HAS_READ_FLAG  = "1";
-    String NO_READ_FLAG  = "0";
-    
-    /**浼樺厛绾э紙L浣庯紝M涓紝H楂橈級*/
-    String PRIORITY_L  = "L";
-    String PRIORITY_M  = "M";
-    String PRIORITY_H  = "H";
-    
+    /**
+     * 閫氬憡瀵硅薄绫诲瀷锛圲SER:鎸囧畾鐢ㄦ埛锛孉LL:鍏ㄤ綋鐢ㄦ埛锛�
+     */
+    String MSG_TYPE_UESR = "USER";
+    String MSG_TYPE_ALL = "ALL";
+
+    /**
+     * 鍙戝竷鐘舵�侊紙0鏈彂甯冿紝1宸插彂甯冿紝2宸叉挙閿�锛�
+     */
+    String NO_SEND = "0";
+    String HAS_SEND = "1";
+    String HAS_CANCLE = "2";
+
+    /**
+     * 闃呰鐘舵�侊紙0鏈锛�1宸茶锛�
+     */
+    String HAS_READ_FLAG = "1";
+    String NO_READ_FLAG = "0";
+
+    /**
+     * 浼樺厛绾э紙L浣庯紝M涓紝H楂橈級
+     */
+    String PRIORITY_L = "L";
+    String PRIORITY_M = "M";
+    String PRIORITY_H = "H";
+
     /**
      * 鐭俊妯℃澘鏂瑰紡  0 .鐧诲綍妯℃澘銆�1.娉ㄥ唽妯℃澘銆�2.蹇樿瀵嗙爜妯℃澘
      */
-    String SMS_TPL_TYPE_0  = "0";
-    String SMS_TPL_TYPE_1  = "1";
-    String SMS_TPL_TYPE_2  = "2";
-    
+    String SMS_TPL_TYPE_0 = "0";
+    String SMS_TPL_TYPE_1 = "1";
+    String SMS_TPL_TYPE_2 = "2";
+
     /**
      * 鐘舵��(0鏃犳晥1鏈夋晥)
      */
     String STATUS_0 = "0";
     String STATUS_1 = "1";
-    
+
     /**
      * 鍚屾宸ヤ綔娴佸紩鎿�1鍚屾0涓嶅悓姝�
      */
@@ -144,7 +166,7 @@
      */
     String MSG_CATEGORY_1 = "1";
     String MSG_CATEGORY_2 = "2";
-    
+
     /**
      * 鏄惁閰嶇疆鑿滃崟鐨勬暟鎹潈闄� 1鏄�0鍚�
      */
@@ -156,8 +178,10 @@
      */
     Integer USER_UNFREEZE = 1;
     Integer USER_FREEZE = 2;
-    
-    /**瀛楀吀缈昏瘧鏂囨湰鍚庣紑*/
+
+    /**
+     * 瀛楀吀缈昏瘧鏂囨湰鍚庣紑
+     */
     String DICT_TEXT_SUFFIX = "_dictText";
 
     /**
@@ -233,26 +257,46 @@
     Integer USER_IDENTITY_1 = 1;
     Integer USER_IDENTITY_2 = 2;
 
-    /** sys_user 琛� username 鍞竴閿储寮� */
+    /**
+     * sys_user 琛� username 鍞竴閿储寮�
+     */
     String SQL_INDEX_UNIQ_SYS_USER_USERNAME = "uniq_sys_user_username";
-    /** sys_user 琛� work_no 鍞竴閿储寮� */
+    /**
+     * sys_user 琛� work_no 鍞竴閿储寮�
+     */
     String SQL_INDEX_UNIQ_SYS_USER_WORK_NO = "uniq_sys_user_work_no";
-    /** sys_user 琛� phone 鍞竴閿储寮� */
+    /**
+     * sys_user 琛� phone 鍞竴閿储寮�
+     */
     String SQL_INDEX_UNIQ_SYS_USER_PHONE = "uniq_sys_user_phone";
-    /** 杈炬ⅵ鏁版嵁搴撳崌鎻愮ず銆傝繚鍙嶈〃[SYS_USER]鍞竴鎬х害鏉� */
+    /**
+     * 杈炬ⅵ鏁版嵁搴撳崌鎻愮ず銆傝繚鍙嶈〃[SYS_USER]鍞竴鎬х害鏉�
+     */
     String SQL_INDEX_UNIQ_SYS_USER = "鍞竴鎬х害鏉�";
 
-    /** sys_user 琛� email 鍞竴閿储寮� */
+    /**
+     * sys_user 琛� email 鍞竴閿储寮�
+     */
     String SQL_INDEX_UNIQ_SYS_USER_EMAIL = "uniq_sys_user_email";
-    /** sys_quartz_job 琛� job_class_name 鍞竴閿储寮� */
+    /**
+     * sys_quartz_job 琛� job_class_name 鍞竴閿储寮�
+     */
     String SQL_INDEX_UNIQ_JOB_CLASS_NAME = "uniq_job_class_name";
-    /** sys_position 琛� code 鍞竴閿储寮� */
+    /**
+     * sys_position 琛� code 鍞竴閿储寮�
+     */
     String SQL_INDEX_UNIQ_CODE = "uniq_code";
-    /** sys_role 琛� code 鍞竴閿储寮� */
+    /**
+     * sys_role 琛� code 鍞竴閿储寮�
+     */
     String SQL_INDEX_UNIQ_SYS_ROLE_CODE = "uniq_sys_role_role_code";
-    /** sys_depart 琛� code 鍞竴閿储寮� */
+    /**
+     * sys_depart 琛� code 鍞竴閿储寮�
+     */
     String SQL_INDEX_UNIQ_DEPART_ORG_CODE = "uniq_depart_org_code";
-    /** sys_category 琛� code 鍞竴閿储寮� */
+    /**
+     * sys_category 琛� code 鍞竴閿储寮�
+     */
     String SQL_INDEX_UNIQ_CATEGORY_CODE = "idx_sc_code";
     /**
      * 鍦ㄧ嚎鑱婂ぉ 鏄惁涓洪粯璁ゅ垎缁�
@@ -292,7 +336,7 @@
      * 鍏枃鏂囨。涓婁紶鑷畾涔夎矾寰�
      */
     String UPLOAD_CUSTOM_PATH_OFFICIAL = "officialdoc";
-     /**
+    /**
      * 鍏枃鏂囨。涓嬭浇鑷畾涔夎矾寰�
      */
     String DOWNLOAD_CUSTOM_PATH_OFFICIAL = "officaldown";
@@ -300,11 +344,11 @@
     /**
      * WPS瀛樺偍鍊肩被鍒�(1 code鏂囧彿 2 text锛圵PS妯℃澘杩樻槸鍏枃鍙戞枃妯℃澘锛�)
      */
-    String WPS_TYPE_1="1";
-    String WPS_TYPE_2="2";
+    String WPS_TYPE_1 = "1";
+    String WPS_TYPE_2 = "2";
 
-    String YN_Y="Y";
-    String YN_N="N";
+    String YN_Y = "Y";
+    String YN_N = "N";
 
 
     /**===============================================================================================*/
@@ -315,9 +359,13 @@
     String X_ACCESS_TOKEN = "X-Access-Token";
     String X_SIGN = "X-Sign";
     String X_TIMESTAMP = "X-TIMESTAMP";
-    /** 绉熸埛 璇锋眰澶�*/
+    /**
+     * 绉熸埛 璇锋眰澶�
+     */
     String TENANT_ID = "tenant-id";
-    /**===============================================================================================*/
+    /**
+     * ===============================================================================================
+     */
 
     String TOKEN_IS_INVALID_MSG = "Token澶辨晥锛岃閲嶆柊鐧诲綍!";
     String X_FORWARDED_SCHEME = "X-Forwarded-Scheme";
@@ -342,39 +390,63 @@
      */
     String THIRD_SYNC_TO_LOCAL = "SYNC_TO_LOCAL";
 
-    /** 绯荤粺閫氬憡娑堟伅鐘舵�侊細0=鏈彂甯� */
+    /**
+     * 绯荤粺閫氬憡娑堟伅鐘舵�侊細0=鏈彂甯�
+     */
     String ANNOUNCEMENT_SEND_STATUS_0 = "0";
-    /** 绯荤粺閫氬憡娑堟伅鐘舵�侊細1=宸插彂甯� */
+    /**
+     * 绯荤粺閫氬憡娑堟伅鐘舵�侊細1=宸插彂甯�
+     */
     String ANNOUNCEMENT_SEND_STATUS_1 = "1";
-    /** 绯荤粺閫氬憡娑堟伅鐘舵�侊細2=宸叉挙閿� */
+    /**
+     * 绯荤粺閫氬憡娑堟伅鐘舵�侊細2=宸叉挙閿�
+     */
     String ANNOUNCEMENT_SEND_STATUS_2 = "2";
 
-    /**ONLINE 鎶ヨ〃鏉冮檺鐢� 浠巖equest涓幏鍙栧湴鍧�鏍忓悗鐨勫弬鏁�*/
-    String ONL_REP_URL_PARAM_STR="onlRepUrlParamStr";
+    /**
+     * ONLINE 鎶ヨ〃鏉冮檺鐢� 浠巖equest涓幏鍙栧湴鍧�鏍忓悗鐨勫弬鏁�
+     */
+    String ONL_REP_URL_PARAM_STR = "onlRepUrlParamStr";
 
-    /**POST璇锋眰*/
+    /**
+     * POST璇锋眰
+     */
     String HTTP_POST = "POST";
 
-    /**PUT璇锋眰*/
+    /**
+     * PUT璇锋眰
+     */
     String HTTP_PUT = "PUT";
 
-    /**PATCH璇锋眰*/
+    /**
+     * PATCH璇锋眰
+     */
     String HTTP_PATCH = "PATCH";
 
-    /**鏈煡鐨�*/
+    /**
+     * 鏈煡鐨�
+     */
     String UNKNOWN = "unknown";
 
-    /**瀛楃涓瞙ttp*/
+    /**
+     * 瀛楃涓瞙ttp
+     */
     String STR_HTTP = "http";
 
-    /**String 绫诲瀷鐨勭┖鍊�*/
+    /**
+     * String 绫诲瀷鐨勭┖鍊�
+     */
     String STRING_NULL = "null";
 
-    /**鍓嶇vue3鐗堟湰Header鍙傛暟鍚�*/
-    String VERSION="X-Version";
+    /**
+     * 鍓嶇vue3鐗堟湰Header鍙傛暟鍚�
+     */
+    String VERSION = "X-Version";
 
-    /**瀛樺偍鍦ㄧ嚎绋嬪彉閲忛噷鐨勫姩鎬佽〃鍚�*/
-    String DYNAMIC_TABLE_NAME="DYNAMIC_TABLE_NAME";
+    /**
+     * 瀛樺偍鍦ㄧ嚎绋嬪彉閲忛噷鐨勫姩鎬佽〃鍚�
+     */
+    String DYNAMIC_TABLE_NAME = "DYNAMIC_TABLE_NAME";
     /**
      * http:// http鍗忚
      */
@@ -384,10 +456,14 @@
      * https:// https鍗忚
      */
     String HTTPS_PROTOCOL = "https://";
-    
-    /** 閮ㄩ棬琛ㄥ敮涓�key锛宨d */
+
+    /**
+     * 閮ㄩ棬琛ㄥ敮涓�key锛宨d
+     */
     String DEPART_KEY_ID = "id";
-    /** 閮ㄩ棬琛ㄥ敮涓�key锛宱rgCode */
+    /**
+     * 閮ㄩ棬琛ㄥ敮涓�key锛宱rgCode
+     */
     String DEPART_KEY_ORG_CODE = "orgCode";
 
     /**
@@ -420,7 +496,9 @@
      */
     String DATA_LOG_TYPE_JSON = "json";
 
-    /** 娑堟伅妯℃澘锛歮arkdown */
+    /**
+     * 娑堟伅妯℃澘锛歮arkdown
+     */
     String MSG_TEMPLATE_TYPE_MD = "5";
 
     /**
@@ -428,4 +506,9 @@
      */
     String PHONE_REDIS_KEY_PRE = "phone_msg";
 
+    /**
+     * 瀹氭椂浠诲姟澶辫触鎺ユ敹瑙掕壊瀛楀吀缂栧彿
+     */
+    String JOB_SEND_MSG = "job_fail_send_msg_role";
+
 }
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/GenerateWeekDaysJob.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/GenerateWeekDaysJob.java
index 86c61b1..fad6945 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/GenerateWeekDaysJob.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/GenerateWeekDaysJob.java
@@ -8,6 +8,7 @@
 import org.jeecg.modules.quartz.entity.SysQuartzLog;
 import org.jeecg.modules.quartz.service.IQuartzJobService;
 import org.jeecg.modules.quartz.service.ISysQuartzLogService;
+import org.jeecg.modules.system.service.ISysAnnouncementService;
 import org.quartz.Job;
 import org.quartz.JobExecutionContext;
 import org.quartz.JobExecutionException;
@@ -33,6 +34,9 @@
     @Resource
     private IQuartzJobService quartzJobService;
 
+    @Resource
+    private ISysAnnouncementService sysAnnouncementService;
+
     @Override
     public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
         SysQuartzLog quartzLog = new SysQuartzLog();
@@ -48,6 +52,8 @@
         } catch (Exception e) {
             quartzLog.setIsSuccess(-1);
             quartzLog.setExceptionDetail(ThrowableUtil.getStackTrace(e));
+            // 鍙戦�佹秷鎭�氱煡
+            sysAnnouncementService.jobSendMessage("瀹氭椂鐢熸垚鍙屼紤鏃ヤ换鍔�", quartzLog.getExceptionDetail());
         }
         long endTime = System.currentTimeMillis();
         quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime)));
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningAllEquipmentShiftStatisticalProcessJob.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningAllEquipmentShiftStatisticalProcessJob.java
index 4f57a4f..6b9e3ac 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningAllEquipmentShiftStatisticalProcessJob.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningAllEquipmentShiftStatisticalProcessJob.java
@@ -8,6 +8,7 @@
 import org.jeecg.modules.quartz.entity.SysQuartzLog;
 import org.jeecg.modules.quartz.service.IQuartzJobService;
 import org.jeecg.modules.quartz.service.ISysQuartzLogService;
+import org.jeecg.modules.system.service.ISysAnnouncementService;
 import org.quartz.*;
 
 import javax.annotation.Resource;
@@ -41,6 +42,9 @@
     @Resource
     private IQuartzJobService quartzJobService;
 
+    @Resource
+    private ISysAnnouncementService sysAnnouncementService;
+
     @Override
     public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
         SysQuartzLog quartzLog = new SysQuartzLog();
@@ -57,6 +61,8 @@
         } catch (Exception e) {
             quartzLog.setIsSuccess(-1);
             quartzLog.setExceptionDetail(ThrowableUtil.getStackTrace(e));
+            // 鍙戦�佹秷鎭�氱煡
+            sysAnnouncementService.jobSendMessage("瀹氭椂缁熻鍗曟棩鐝鏁版嵁浠诲姟", quartzLog.getExceptionDetail());
         }
         long endTime = System.currentTimeMillis();
         quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime)));
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningAllEquipmentStatisticalProcessJob.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningAllEquipmentStatisticalProcessJob.java
index 1f2dd6a..090a6ac 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningAllEquipmentStatisticalProcessJob.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningAllEquipmentStatisticalProcessJob.java
@@ -8,6 +8,7 @@
 import org.jeecg.modules.quartz.entity.SysQuartzLog;
 import org.jeecg.modules.quartz.service.IQuartzJobService;
 import org.jeecg.modules.quartz.service.ISysQuartzLogService;
+import org.jeecg.modules.system.service.ISysAnnouncementService;
 import org.quartz.*;
 
 import javax.annotation.Resource;
@@ -41,6 +42,9 @@
     @Resource
     private IQuartzJobService quartzJobService;
 
+    @Resource
+    private ISysAnnouncementService sysAnnouncementService;
+
     @Override
     public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
         SysQuartzLog quartzLog = new SysQuartzLog();
@@ -57,6 +61,8 @@
         } catch (Exception e) {
             quartzLog.setIsSuccess(-1);
             quartzLog.setExceptionDetail(ThrowableUtil.getStackTrace(e));
+            // 鍙戦�佹秷鎭�氱煡
+            sysAnnouncementService.jobSendMessage("瀹氭椂缁熻鍗曟棩鏁版嵁浠诲姟", quartzLog.getExceptionDetail());
         }
         long endTime = System.currentTimeMillis();
         quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime)));
diff --git a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningAllEquipmentTraceProcessJob.java b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningAllEquipmentTraceProcessJob.java
index 6ac4170..fb6f753 100644
--- a/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningAllEquipmentTraceProcessJob.java
+++ b/lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningAllEquipmentTraceProcessJob.java
@@ -8,6 +8,7 @@
 import org.jeecg.modules.quartz.entity.SysQuartzLog;
 import org.jeecg.modules.quartz.service.IQuartzJobService;
 import org.jeecg.modules.quartz.service.ISysQuartzLogService;
+import org.jeecg.modules.system.service.ISysAnnouncementService;
 import org.quartz.*;
 
 import javax.annotation.Resource;
@@ -32,6 +33,9 @@
     @Resource
     private IQuartzJobService quartzJobService;
 
+    @Resource
+    private ISysAnnouncementService sysAnnouncementService;
+
     @Override
     public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
         SysQuartzLog quartzLog = new SysQuartzLog();
@@ -47,6 +51,8 @@
         } catch (Exception e) {
             quartzLog.setIsSuccess(-1);
             quartzLog.setExceptionDetail(ThrowableUtil.getStackTrace(e));
+            // 鍙戦�佹秷鎭�氱煡
+            sysAnnouncementService.jobSendMessage("瀹氭椂缁熻娈垫椂闂翠换鍔�", quartzLog.getExceptionDetail());
         }
         long endTime = System.currentTimeMillis();
         quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime)));
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java
index 4bbaf0a..701c355 100644
--- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/SysUserMapper.java
@@ -163,4 +163,9 @@
 	 * 鏍规嵁鐢ㄦ埛Ids,鏌ヨ鐢ㄦ埛鎵�灞炰骇绾垮悕绉颁俊鎭�
 	 */
 	List<MdcUserProVo> getProNamesByUserIds(@Param("userIds") List<String> userIds);
+
+	/**
+	 * 鏍规嵁瑙掕壊缂栫爜鏌ヨ鐢ㄦ埛id闆嗗悎
+	 */
+	List<String> getUserByRoleCode(@Param("roleCode") String roleCode);
 }
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml
index 1480980..4729e32 100644
--- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysUserMapper.xml
@@ -190,4 +190,16 @@
 			#{id}
 		</foreach>
 	</select>
+
+	<!--鏍规嵁瑙掕壊缂栫爜鏌ヨ鐢ㄦ埛id闆嗗悎-->
+	<select id="getUserByRoleCode" resultType="java.lang.String">
+		SELECT
+			su.id
+		FROM
+			sys_user su
+			LEFT JOIN sys_user_role sur ON su.id = sur.user_id
+			LEFT JOIN sys_role sr ON sur.role_id = sr.id
+		WHERE
+			sr.role_code = #{ roleCode }
+	</select>
 </mapper>
\ No newline at end of file
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysAnnouncementService.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysAnnouncementService.java
index bf0ea45..a9314bb 100644
--- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysAnnouncementService.java
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysAnnouncementService.java
@@ -61,5 +61,10 @@
      */
     void updateReaded(List<String> annoceIdList);
 
+    /**
+     * 瀹氭椂浠诲姟澶辫触鍙戦�佺郴缁熸秷鎭�
+     */
+    void jobSendMessage(String jobDescription, String exceptionDetail);
+
 
 }
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java
index 7632e37..b6076a1 100644
--- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java
@@ -308,4 +308,9 @@
 	 * 鏍规嵁 userIds鏌ヨ锛屾煡璇㈢敤鎴锋墍灞炰骇绾跨殑鍚嶇О锛堝涓骇绾垮悕閫楀彿闅斿紑锛�
 	 */
 	Map<String, String> getProNamesByUserIds(List<String> userIds);
+
+	/**
+	 * 鏍规嵁瑙掕壊缂栫爜鏌ヨ鐢ㄦ埛id闆嗗悎
+	 */
+	List<String> getUserByRoleCode(String roleCode);
 }
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysAnnouncementServiceImpl.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysAnnouncementServiceImpl.java
index 0934d2e..783aa0c 100644
--- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysAnnouncementServiceImpl.java
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysAnnouncementServiceImpl.java
@@ -1,18 +1,25 @@
 package org.jeecg.modules.system.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.constant.CommonConstant;
+import org.jeecg.common.constant.CommonSendStatus;
+import org.jeecg.common.constant.WebsocketConst;
 import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.message.websocket.WebSocket;
 import org.jeecg.modules.system.entity.SysAnnouncement;
 import org.jeecg.modules.system.entity.SysAnnouncementSend;
 import org.jeecg.modules.system.mapper.SysAnnouncementMapper;
 import org.jeecg.modules.system.mapper.SysAnnouncementSendMapper;
 import org.jeecg.modules.system.service.ISysAnnouncementService;
+import org.jeecg.modules.system.service.ISysDictService;
+import org.jeecg.modules.system.service.ISysUserService;
+import org.jeecg.modules.system.util.XssUtils;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -37,6 +44,15 @@
 	
 	@Resource
 	private SysAnnouncementSendMapper sysAnnouncementSendMapper;
+
+	@Resource
+	private ISysDictService sysDictService;
+
+	@Resource
+	private ISysUserService sysUserService;
+
+	@Resource
+	private WebSocket webSocket;
 	
 	@Transactional(rollbackFor = Exception.class)
 	@Override
@@ -185,4 +201,54 @@
 		sysAnnouncementSendMapper.updateReaded(sysUser.getId(), annoceIdList);
 	}
 
+	@Override
+	public void jobSendMessage(String jobDescription, String exceptionDetail) {
+		SysAnnouncement sysAnnouncement = new SysAnnouncement();
+		String title = XssUtils.scriptXss(jobDescription + "澶辫触锛�");
+		// 鏍囬
+		sysAnnouncement.setTitile(title);
+		// 娑堟伅绫诲瀷
+		sysAnnouncement.setMsgCategory(CommonConstant.MSG_CATEGORY_2);
+		// 浼樺厛绾�
+		sysAnnouncement.setPriority(CommonConstant.PRIORITY_H);
+		// 閫氬憡瀵硅薄绫诲瀷
+		sysAnnouncement.setMsgType(CommonConstant.MSG_TYPE_UESR);
+		// 鍒犻櫎鐘舵��
+		sysAnnouncement.setDelFlag(CommonConstant.DEL_FLAG_0.toString());
+		// 鍙戝竷鐘舵��
+		sysAnnouncement.setSendStatus(CommonSendStatus.PUBLISHED_STATUS_1);
+		// 鍙戝竷鏃堕棿
+		sysAnnouncement.setSendTime(new Date());
+		// 鍙戝竷浜�
+		sysAnnouncement.setSender("admin");
+		// 娑堟伅鍐呭
+		sysAnnouncement.setMsgContent(exceptionDetail);
+		// 鑾峰彇鐢ㄦ埛
+		// step1. 浠庡瓧鍏告暟鎹腑鏌ヨ闇�瑕佸彂閫佺殑瑙掕壊缂栫爜
+		String roleCode = sysDictService.queryDictTextByKey(CommonConstant.JOB_SEND_MSG, CommonConstant.STATUS_NORMAL.toString());
+		// step2. 鏍规嵁瑙掕壊缂栫爜鏌ヨ鐢ㄦ埛id闆嗗悎
+		List<String> userIds = sysUserService.getUserByRoleCode(roleCode);
+		if (userIds != null && !userIds.isEmpty()) {
+			sysAnnouncement.setUserIds(String.join(",", userIds));
+			sysAnnouncementMapper.insert(sysAnnouncement);
+			String anntId = sysAnnouncement.getId();
+			Date refDate = new Date();
+			for (String userId : userIds) {
+				SysAnnouncementSend announcementSend = new SysAnnouncementSend();
+				announcementSend.setAnntId(anntId);
+				announcementSend.setUserId(userId);
+				announcementSend.setReadFlag(CommonConstant.NO_READ_FLAG);
+				announcementSend.setReadTime(refDate);
+				sysAnnouncementSendMapper.insert(announcementSend);
+			}
+			// 鍙戦�佹秷鎭�
+			JSONObject obj = new JSONObject();
+			obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_USER);
+			obj.put(WebsocketConst.MSG_ID, sysAnnouncement.getId());
+			obj.put(WebsocketConst.MSG_TXT, sysAnnouncement.getTitile());
+			webSocket.sendMessage(sysAnnouncement.getUserIds().split(","), obj.toJSONString());
+		}
+
+	}
+
 }
diff --git a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java
index be754a9..8b66895 100644
--- a/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java
+++ b/lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java
@@ -652,4 +652,12 @@
 		});
 		return res;
 	}
+
+	/**
+	 * 鏍规嵁瑙掕壊缂栫爜鏌ヨ鐢ㄦ埛id闆嗗悎
+	 */
+	@Override
+	public List<String> getUserByRoleCode(String roleCode) {
+		return this.baseMapper.getUserByRoleCode(roleCode);
+	}
 }

--
Gitblit v1.9.3