法规预警--推送,定时任务

This commit is contained in:
zhn
2022-06-28 21:49:18 +08:00
parent 2913600d6f
commit 94f659ed3d
5 changed files with 292 additions and 0 deletions
@@ -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 = "状态")
@@ -12,6 +12,7 @@
<id column="xin1_che1_xing2_shi2_shi1_ri4_qi1" property="xin1Che1Xing2Shi2Shi1Ri4Qi1" />
<id column="implement_time" property="implementTime" />
<id column="corresponding_standard" property="correspondingStandard" />
<id column="lei4_bie2" property="lei4Bie2" />
</resultMap>
<insert id="insertInfo">
@@ -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("推送成功");
}
}
@@ -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<String, Object> 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<String> allDepartIds = new HashSet<>();
//查询当前部门下所有部门
if (StringUtils.isNotEmpty(departIds)) {
String[] departIdArr = departIds.split(",");
for (String departId : departIdArr) {
List<String> subDepIdsByDepId = sysDepartService.getSubDepIdsByDepId(departId);
allDepartIds.addAll(subDepIdsByDepId);
}
}
List<String> userIdList = new ArrayList<>();
List<String> thirdIdList = new ArrayList<>();
if (StringUtils.isNotBlank(departIds)) {
//查询部门下的人员
List<SysUser> 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<SysUser> sysUsers = sysUserService.listByIds(Arrays.asList(userIds.split(",")));
if(sysUsers.size() != 0){
List<String> userId = sysUsers.stream().map(SysUser::getId).collect(Collectors.toList());
List<String> thirdId = sysUsers.stream().map(SysUser::getThirdId).collect(Collectors.toList());
userIdList.addAll(userId);
thirdIdList.addAll(thirdId);
}
}
//查询文档
List<Map<String, Object>> mapList = bussDocumentLibraryEOMapper.selectMapsAll(documentIds);
List<String> serialNumberList = new ArrayList<>();
List<String> urlList = new ArrayList<>();
List<String> hrefList = new ArrayList<>();
for (Map<String, Object> 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 = "<a href='/docManage/library/detail?id=" + map.get("id") +
"&title=" + map.get("title") +
"&serial_number=" + map.get("serial_number") + "'" + " target='_blank'>" + map.get("serial_number") + "</a>";
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<String> 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 "推送成功";
}
}
@@ -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<BussDocumentLibraryEO> bussDocumentLibraryEOList = bussDocumentLibraryEOService.list();
//订阅信息
List<OnlCgformSubscribe> subscribeList = iOnlCgformSubscribeService.list();
List<String> documentIdList = subscribeList.stream().map(OnlCgformSubscribe::getDocumentId).distinct().collect(Collectors.toList());
//已经订阅的法规
List<BussDocumentLibraryEO> bussDocumentLibraryEOS = bussDocumentLibraryEOList.stream()
.filter(e -> documentIdList.contains(e.getId())).collect(Collectors.toList());
if(bussDocumentLibraryEOS.size() == 0){
return;
}
//普通数据字典
List<SysDictItem> 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<SysDictItem> 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 = "<a href='/docManage/library/detail?id=" + id +
"&title=" + title +
"&serial_number=" + serialNumber + "'" + " target='_blank'>" + serialNumber + "</a>";
//跳转文档详情
String url = backUrl + "/docManage/library/detail?id=" + id;
//订阅的用户
List<OnlCgformSubscribe> onlCgformSubscribe = subscribeList.stream().filter(e -> e.getDocumentId().equals(bussDocumentLibraryEO.getId())).collect(Collectors.toList());
List<String> userIdList = new ArrayList<>();
List<String> thirdIdList = new ArrayList<>();
if(onlCgformSubscribe.size() != 0){
List<String> userNameList = onlCgformSubscribe.stream().map(OnlCgformSubscribe::getCreateBy).collect(Collectors.toList());
List<SysUser> 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<String> userIdList, List<String> 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;
}
}