From 94f659ed3d178105e4fce5ff6fe5f22683f277b4 Mon Sep 17 00:00:00 2001 From: zhn <947514737@qq.com> Date: Tue, 28 Jun 2022 21:49:18 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B3=95=E8=A7=84=E9=A2=84=E8=AD=A6--=E6=8E=A8?= =?UTF-8?q?=E9=80=81,=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/BussDocumentLibraryEO.java | 3 + .../xml/BussDocumentLibraryEOMapper.xml | 1 + .../warn/controller/LawsWarnController.java | 8 + .../modules/warn/service/LawsWarnService.java | 106 +++++++++++ .../modules/warn/service/TimedTaskWarn.java | 174 ++++++++++++++++++ 5 files changed, 292 insertions(+) create mode 100644 jero-boot/jero-boot-modules/src/main/java/com/jero/modules/warn/service/TimedTaskWarn.java diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/entity/BussDocumentLibraryEO.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/entity/BussDocumentLibraryEO.java index 825cb6866..8ad2c2c07 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/entity/BussDocumentLibraryEO.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/entity/BussDocumentLibraryEO.java @@ -53,6 +53,9 @@ public class BussDocumentLibraryEO implements Serializable { /**适用地区*/ @ApiModelProperty(value = "适用地区") private java.lang.String region; + /**适用地区*/ + @ApiModelProperty(value = "类别") + private java.lang.String lei4Bie2; /**状态*/ @ApiModelProperty(value = "状态") diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/mapper/xml/BussDocumentLibraryEOMapper.xml b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/mapper/xml/BussDocumentLibraryEOMapper.xml index aa1e7acd8..806a6daaa 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/mapper/xml/BussDocumentLibraryEOMapper.xml +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/mapper/xml/BussDocumentLibraryEOMapper.xml @@ -12,6 +12,7 @@ + diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/warn/controller/LawsWarnController.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/warn/controller/LawsWarnController.java index e74043811..b1dba1d41 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/warn/controller/LawsWarnController.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/warn/controller/LawsWarnController.java @@ -60,4 +60,12 @@ public class LawsWarnController { lawsWarnService.exportExcel(map,response,request); } + + @ApiOperation(value = "推送") + @GetMapping(value = "/warnPullMessage") +// @RequiresPermissions("document:pullMessage") + public Result pullMessage(String departIds,String userIds,String documentIds) { + lawsWarnService.warnPullMessage(departIds,userIds,documentIds); + return Result.OK("推送成功"); + } } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/warn/service/LawsWarnService.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/warn/service/LawsWarnService.java index 21215861f..ae530cdbb 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/warn/service/LawsWarnService.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/warn/service/LawsWarnService.java @@ -3,15 +3,23 @@ package com.jero.modules.warn.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.jero.common.constant.enums.CutEnum; +import com.jero.common.constant.enums.MessageTypeEnum; import com.jero.common.constant.enums.ModuleEnum; import com.jero.common.exception.JeroBootException; +import com.jero.common.system.vo.LoginUser; import com.jero.generater.modules.online.cgform.entity.OnlCgformField; import com.jero.generater.modules.online.cgform.service.impl.OnlCgformFieldServiceImpl; import com.jero.modules.document.enums.FieldTypeEnum; import com.jero.modules.document.mapper.BussDocumentLibraryEOMapper; import com.jero.modules.document.service.impl.BussDocumentLibraryEOServiceImpl; +import com.jero.modules.feishu.service.IFeishuService; +import com.jero.modules.system.entity.SysAnnouncement; import com.jero.modules.system.entity.SysCategory; import com.jero.modules.system.entity.SysDictItem; +import com.jero.modules.system.entity.SysUser; +import com.jero.modules.system.service.ISysAnnouncementService; +import com.jero.modules.system.service.ISysDepartService; +import com.jero.modules.system.service.ISysUserService; import com.jero.modules.system.service.impl.SysCategoryServiceImpl; import com.jero.modules.system.service.impl.SysDictItemServiceImpl; import com.jero.modules.system.util.StringUtils; @@ -22,9 +30,13 @@ import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.apache.shiro.SecurityUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.yaml.snakeyaml.util.UriEncoder; +import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @@ -32,9 +44,11 @@ import java.io.OutputStream; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.stream.Collectors; /** @@ -54,6 +68,16 @@ public class LawsWarnService { private SysDictItemServiceImpl sysDictItemServiceImpl; @Autowired private OnlCgformFieldServiceImpl onlCgformFieldService; + @Autowired + private ISysDepartService sysDepartService; + @Autowired + private ISysUserService sysUserService; + @Value(value = "${jero.backUrl}") + private String backUrl; + @Autowired + private ISysAnnouncementService sysAnnouncementService; + @Resource + private IFeishuService iFeishuService; public IPage getInfoPage(Map parameter) { String cut = (String) parameter.get("cut");//中英文切换标识 @@ -248,6 +272,88 @@ public class LawsWarnService { sheetNum++; } } + } + + public String warnPullMessage(String departIds, String userIds, String documentIds) { + Set allDepartIds = new HashSet<>(); + //查询当前部门下所有部门 + if (StringUtils.isNotEmpty(departIds)) { + String[] departIdArr = departIds.split(","); + for (String departId : departIdArr) { + List subDepIdsByDepId = sysDepartService.getSubDepIdsByDepId(departId); + allDepartIds.addAll(subDepIdsByDepId); + } + } + + List userIdList = new ArrayList<>(); + List thirdIdList = new ArrayList<>(); + if (StringUtils.isNotBlank(departIds)) { + //查询部门下的人员 + List userList = new ArrayList<>(); + if(allDepartIds.size() != 0){ + userList = sysUserService.getUserListByDepIds(new ArrayList<>(allDepartIds)); + } + + if (userList.size() != 0) { + userIdList = userList.stream().map(SysUser::getId).distinct().collect(Collectors.toList()); + thirdIdList = userList.stream().map(SysUser::getThirdId).distinct().collect(Collectors.toList()); + } + } + if(userIdList.size() == 0 && StringUtils.isNotBlank(userIds)){ + List sysUsers = sysUserService.listByIds(Arrays.asList(userIds.split(","))); + if(sysUsers.size() != 0){ + List userId = sysUsers.stream().map(SysUser::getId).collect(Collectors.toList()); + List thirdId = sysUsers.stream().map(SysUser::getThirdId).collect(Collectors.toList()); + userIdList.addAll(userId); + thirdIdList.addAll(thirdId); + } + } + + //查询文档 + List> mapList = bussDocumentLibraryEOMapper.selectMapsAll(documentIds); + List serialNumberList = new ArrayList<>(); + List urlList = new ArrayList<>(); + List hrefList = new ArrayList<>(); + for (Map map : mapList) { + serialNumberList.add(StringUtils.valueOf(map.get("serial_number"))); + String url = backUrl + "/docManage/library/detail?id=" + map.get("id") + + "&title=" + map.get("title") + + "&serial_number=" + map.get("serial_number"); + + String href = "" + map.get("serial_number") + ""; + urlList.add(url); + hrefList.add(href); + } + + + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + String content = sysUser.getUsername() + " pushed " + StringUtils.join(serialNumberList, ",") + " to you. Please be reminded to check it out."; + String contentInfo = sysUser.getUsername() + " pushed " + StringUtils.join(hrefList, ",") + " to you. Please be reminded to check it out."; + //封装消息的实体类 + SysAnnouncement sysAnnouncement = bussDocumentLibraryEOService.getSysAnnouncement(userIdList, content, contentInfo); + sysAnnouncementService.saveAnnouncement(sysAnnouncement); + bussDocumentLibraryEOService.sendWebsocket(StringUtils.join(thirdIdList, ","), contentInfo); + //飞书 + try { + for (String s : urlList) { + String encode = UriEncoder.encode(s); + List list = new ArrayList<>(); + mapList.stream().forEach(e->{ + if(s.contains((String)e.get("id"))){ + String serialNumber = StringUtils.valueOf(e.get("serial_number")); + list.add(serialNumber); + } + }); + String contentTemp = sysUser.getUsername() + " pushed " + StringUtils.join(list, ",") + " to you. Please be reminded to check it out."; + iFeishuService.batchSendMessage(thirdIdList.toArray(new String[]{}), contentTemp, MessageTypeEnum.PUSH.getName(), encode); + } + } catch (IOException e) { + e.printStackTrace(); + } + bussDocumentLibraryEOService.sendWebsocket(documentIds, contentInfo); + return "推送成功"; } } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/warn/service/TimedTaskWarn.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/warn/service/TimedTaskWarn.java new file mode 100644 index 000000000..a68792e59 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/warn/service/TimedTaskWarn.java @@ -0,0 +1,174 @@ +package com.jero.modules.warn.service; + +import com.jero.common.constant.enums.MessageTypeEnum; +import com.jero.modules.document.entity.BussDocumentLibraryEO; +import com.jero.modules.document.service.impl.BussDocumentLibraryEOServiceImpl; +import com.jero.modules.feishu.service.IFeishuService; +import com.jero.modules.subscribe.entity.OnlCgformSubscribe; +import com.jero.modules.subscribe.service.IOnlCgformSubscribeService; +import com.jero.modules.system.entity.SysAnnouncement; +import com.jero.modules.system.entity.SysDictItem; +import com.jero.modules.system.entity.SysUser; +import com.jero.modules.system.mapper.SysUserMapper; +import com.jero.modules.system.service.ISysAnnouncementService; +import com.jero.modules.system.service.impl.SysDictItemServiceImpl; +import com.jero.modules.system.util.StringUtils; +import org.apache.commons.lang3.ObjectUtils; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @description + * @date 2022/6/28 18:38 + * @auth zhn + */ +@Service +public class TimedTaskWarn implements Job { + + @Autowired + private BussDocumentLibraryEOServiceImpl bussDocumentLibraryEOService; + @Autowired + private IOnlCgformSubscribeService iOnlCgformSubscribeService; + @Autowired + private SysDictItemServiceImpl sysDictItemServiceImpl; + @Autowired + private ISysAnnouncementService sysAnnouncementService; + @Resource + private IFeishuService iFeishuService; + @Autowired + private SysUserMapper sysUserMapper; + @Value(value = "${jero.backUrl}") + private String backUrl; + + @Override + public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException { + //获取所有的法规 + List bussDocumentLibraryEOList = bussDocumentLibraryEOService.list(); + //订阅信息 + List subscribeList = iOnlCgformSubscribeService.list(); + List documentIdList = subscribeList.stream().map(OnlCgformSubscribe::getDocumentId).distinct().collect(Collectors.toList()); + //已经订阅的法规 + List bussDocumentLibraryEOS = bussDocumentLibraryEOList.stream() + .filter(e -> documentIdList.contains(e.getId())).collect(Collectors.toList()); + if(bussDocumentLibraryEOS.size() == 0){ + return; + } + //普通数据字典 + List dictItemList = sysDictItemServiceImpl.selectItemsAll(); + + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + String currentTime = sdf.format(new Date()); + for (BussDocumentLibraryEO bussDocumentLibraryEO : bussDocumentLibraryEOS) { + Date xin1Che1Xing2Shi2Shi1Ri4Qi1 = bussDocumentLibraryEO.getXin1Che1Xing2Shi2Shi1Ri4Qi1(); + Date implementTime = bussDocumentLibraryEO.getImplementTime(); + String category = bussDocumentLibraryEO.getLei4Bie2(); + String serialNumber = bussDocumentLibraryEO.getSerialNumber(); + String id = bussDocumentLibraryEO.getId(); + String title = bussDocumentLibraryEO.getTitleEn(); + //类别 + if(StringUtils.isNotBlank(category)){ + String finalCategory = category; + List stateDictItemList = dictItemList.stream() + .filter(e -> "type".equals(e.getDictCode()) && finalCategory.equals(e.getItemValue())) + .collect(Collectors.toList()); + if(stateDictItemList.size() != 0){ + category = stateDictItemList.get(0).getEnName(); + } + }else{ + category = ""; + } + String href = "" + serialNumber + ""; + //跳转文档详情 + String url = backUrl + "/docManage/library/detail?id=" + id; + //订阅的用户 + List onlCgformSubscribe = subscribeList.stream().filter(e -> e.getDocumentId().equals(bussDocumentLibraryEO.getId())).collect(Collectors.toList()); + List userIdList = new ArrayList<>(); + List thirdIdList = new ArrayList<>(); + if(onlCgformSubscribe.size() != 0){ + List userNameList = onlCgformSubscribe.stream().map(OnlCgformSubscribe::getCreateBy).collect(Collectors.toList()); + List userList = sysUserMapper.getUserListByNames(StringUtils.join(userNameList, ",")); + userIdList = userList.stream().map(SysUser::getId).collect(Collectors.toList()); + thirdIdList = userList.stream().map(SysUser::getThirdId).collect(Collectors.toList()); + } + //新车型实施日期 + //您所订阅的标准GB 7258 新车型实施日期为2022-01-01,请注意查看 + //The implementation date of the standard GB 7258 new model you subscribed to is 2022-01-01, + // please pay attention to check + if(ObjectUtils.isNotEmpty(xin1Che1Xing2Shi2Shi1Ri4Qi1)){ + //当前时间的前6个月 + String beforeTimeSix = beforeTime(6,xin1Che1Xing2Shi2Shi1Ri4Qi1); + //当前时间的前12个月 + String beforeTimeSixTen = beforeTime(12,xin1Che1Xing2Shi2Shi1Ri4Qi1); + + if(currentTime.equals(beforeTimeSix) || currentTime.equals(beforeTimeSixTen)){ + //发送站内消息和飞书消息 + String format = sdf.format(xin1Che1Xing2Shi2Shi1Ri4Qi1); + String content = "The implementation date of the " + category +" "+ serialNumber + + " new model you subscribed to is "+format+",please pay attention to check"; + String contentInfo = "The implementation date of the " + category +" "+ href + + " new model you subscribed to is "+format+",please pay attention to check"; + sendMessage(content,contentInfo,content, url, userIdList, thirdIdList); + } + } + + //在产车实施日期 + //The implementation date of the standard GB 7258 in production vehicle you subscribed to is 2022-01-01, + // please pay attention to check + if(ObjectUtils.isNotEmpty(implementTime)){ + //当前时间的前6个月 + String beforeTimeSix = beforeTime(6,implementTime); + //当前时间的前12个月 + String beforeTimeSixTen = beforeTime(12,implementTime); + if(currentTime.equals(beforeTimeSix) || currentTime.equals(beforeTimeSixTen)){ + //发送站内消息和飞书消息 + String format = sdf.format(implementTime); + String content = "The implementation date of the " + category +" "+ serialNumber + + " production vehicle you subscribed to is "+format+",please pay attention to check"; + String contentInfo = "The implementation date of the " + category +" "+ href + + " production vehicle you subscribed to is "+format+",please pay attention to check"; + sendMessage(content,contentInfo,content, url, userIdList, thirdIdList); + } + } + } + } + + private void sendMessage(String content,String contentInfo,String contentFeiShu, String url, List userIdList, List thirdIdList) { + //站内消息 + //封装消息的实体类 + SysAnnouncement sysAnnouncement = bussDocumentLibraryEOService.getSysAnnouncement(userIdList, content, contentInfo); + sysAnnouncementService.saveAnnouncement(sysAnnouncement); + bussDocumentLibraryEOService.sendWebsocket(StringUtils.join(userIdList, ","), content); + + //飞书消息 + try { + iFeishuService.batchSendMessage(thirdIdList.toArray(new String[]{}), contentFeiShu, MessageTypeEnum.WARN.getName(), url); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private String beforeTime (int month,Date date){ + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Calendar calendarBefore = Calendar.getInstance(); + calendarBefore.setTime(date); + calendarBefore.add(Calendar.MONTH, -month); + Date dateBefore = calendarBefore.getTime(); + String beforeTime = sdf.format(dateBefore); + return beforeTime; + } +}