lxzn-boot-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java
@@ -67,25 +67,39 @@ int OPERATE_TYPE_6 = 6; /** {@code 500 Server Error} (HTTP/1.0 - RFC 1945) */ /** * {@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*/ /** * 访问权限认证未通过 510 */ Integer SC_JEECG_NO_AUTHZ=510; /** 登录用户Shiro权限缓存KEY前缀 */ /** * 登录用户Shiro权限缓存KEY前缀 */ public static String PREFIX_USER_SHIRO_CACHE = "shiro:cache:org.jeecg.config.shiro.ShiroRealm.authorizationCache:"; /** 登录用户Token令牌缓存KEY前缀 */ /** * 登录用户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:"; /** 登录二维码token */ /** * 登录二维码token */ String LOGIN_QRCODE_TOKEN = "LQT:"; @@ -102,20 +116,28 @@ */ Integer MENU_TYPE_2 = 2; /**通告对象类型(USER:指定用户,ALL:全体用户)*/ /** * 通告对象类型(USER:指定用户,ALL:全体用户) */ String MSG_TYPE_UESR = "USER"; String MSG_TYPE_ALL = "ALL"; /**发布状态(0未发布,1已发布,2已撤销)*/ /** * 发布状态(0未发布,1已发布,2已撤销) */ String NO_SEND = "0"; String HAS_SEND = "1"; String HAS_CANCLE = "2"; /**阅读状态(0未读,1已读)*/ /** * 阅读状态(0未读,1已读) */ String HAS_READ_FLAG = "1"; String NO_READ_FLAG = "0"; /**优先级(L低,M中,H高)*/ /** * 优先级(L低,M中,H高) */ String PRIORITY_L = "L"; String PRIORITY_M = "M"; String PRIORITY_H = "H"; @@ -157,7 +179,9 @@ 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"; /** * 在线聊天 是否为默认分组 @@ -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,38 +390,62 @@ */ 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 报表权限用 从request中获取地址栏后的参数*/ /** * ONLINE 报表权限用 从request中获取地址栏后的参数 */ 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"; /**字符串http*/ /** * 字符串http */ String STR_HTTP = "http"; /**String 类型的空值*/ /** * String 类型的空值 */ String STRING_NULL = "null"; /**前端vue3版本Header参数名*/ /** * 前端vue3版本Header参数名 */ String VERSION="X-Version"; /**存储在线程变量里的动态表名*/ /** * 存储在线程变量里的动态表名 */ String DYNAMIC_TABLE_NAME="DYNAMIC_TABLE_NAME"; /** * http:// http协议 @@ -385,9 +457,13 @@ */ String HTTPS_PROTOCOL = "https://"; /** 部门表唯一key,id */ /** * 部门表唯一key,id */ String DEPART_KEY_ID = "id"; /** 部门表唯一key,orgCode */ /** * 部门表唯一key,orgCode */ String DEPART_KEY_ORG_CODE = "orgCode"; /** @@ -420,7 +496,9 @@ */ String DATA_LOG_TYPE_JSON = "json"; /** 消息模板:markdown */ /** * 消息模板:markdown */ 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"; } 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))); 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))); 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))); 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))); 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); } 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> 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); } 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); } 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()); } } } 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); } }