定时任务 复审流程发送待办通知

This commit is contained in:
gaojiabao
2023-06-12 14:02:48 +08:00
parent 228850289e
commit 87c7862663
4 changed files with 290 additions and 9 deletions
@@ -107,5 +107,11 @@ public class BusProcessNewController extends BaseAction {
public String endPrcName(@RequestParam("prcName")String prcName,@RequestParam("esId") String esId) {
return iBusProcessNewService.endPrcName(prcName,esId);
}
@ApiOperation(value = "复审")
@GetMapping("/fushen")
public String fushen() {
return iBusProcessNewService.fushen();
}
}
@@ -55,4 +55,6 @@ public interface IBusProcessNewService extends IService<BusProcessNew> {
List<SarBussionessStandState> getSarBussionStandPageNo(List<SarBussionessStandState> rows);
String endPrcName(String prcName,String esId);
String fushen();
}
@@ -3,28 +3,20 @@ package com.ydw.bat.wkflow.business_main.datas.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.additional.update.impl.UpdateChainWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ydw.bat.wkflow.business_auth.LawsUserInfoService;
import com.ydw.bat.wkflow.business_main.datas.entity.BusMes;
import com.ydw.bat.wkflow.business_main.datas.entity.BusProcessNew;
import com.ydw.bat.wkflow.business_main.datas.entity.SarBussionessStandState;
import com.ydw.bat.wkflow.business_main.datas.mapper.BusProcessNewMapper;
import com.ydw.bat.wkflow.business_main.datas.service.IBusProcessNewService;
import com.ydw.bat.wkflow.business_oa.webService.service.impl.WebServiceOAServiceImpl;
import com.ydw.bat.wkflow.config.ScheduledJobEsPlan;
import com.ydw.bat.wkflow.util.activiti.DeleteTaskCommond;
import com.ydw.bat.wkflow.config.ScheduledSarBussionessStandReview;
import com.ydw.bat.wkflow.util.http.ResponseMessage;
import com.ydw.bat.wkflow.util.http.Result;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.impl.ProcessEngineImpl;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.runtime.ProcessInstanceQuery;
import org.activiti.engine.task.Task;
import org.activiti.engine.task.TaskQuery;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -54,6 +46,11 @@ public class BusProcessNewServiceImpl extends ServiceImpl<BusProcessNewMapper, B
@Autowired
private LawsUserInfoService lawsUserInfoService;
@Autowired
private ScheduledSarBussionessStandReview scheduledSarBussionessStandReview;
/*
* @Author yuzhong
* @Description
@@ -299,6 +296,12 @@ public class BusProcessNewServiceImpl extends ServiceImpl<BusProcessNewMapper, B
return "成功"+"-"+log;
}
@Override
public String fushen() {
scheduledSarBussionessStandReview.ScheduledSarBussionessStandReviewTest();
return null;
}
public void taskInfo(List<BusProcessNew> busProcessNews){
}
@@ -0,0 +1,270 @@
package com.ydw.bat.wkflow.config;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ydw.bat.wkflow.business_main.datas.entity.BusProcessName;
import com.ydw.bat.wkflow.business_main.datas.entity.BusProcessNew;
import com.ydw.bat.wkflow.business_main.datas.service.IBusProcessNameService;
import com.ydw.bat.wkflow.business_main.datas.service.IBusProcessNewService;
import com.ydw.bat.wkflow.business_mq.service.CreateMQService;
import com.ydw.bat.wkflow.util.SpringContextUtil;
import lombok.extern.slf4j.Slf4j;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
@EnableScheduling
@Component
@Slf4j
public class ScheduledSarBussionessStandReview {
Logger logger = LoggerFactory.getLogger(ScheduledJob.class);
/**
* 根据配置文件设置是否开启定时器
*/
@Value("${isNotScheduled}")
private boolean isNotScheduled; //是否开启定时器
@Autowired
private IBusProcessNewService iBusProcessNewService;
@Autowired
private IBusProcessNameService iBusProcessNameService;
@Autowired
private RuntimeService runtimeService;
@Scheduled(cron = "0 0 2 * * ?") //每天的凌晨2点执行
@Async
public void ScheduledSarBussionessStandReview() {
/**
* 1: 发起流程以后,复审日期的前三天发送一次OA待办消息,和复审完成时间的当天发送一次OA待办
* 2:复审完成时间当天发起待办消息
* 3:复审完成时间前三天生成待办消息
*/
if(isNotScheduled){
QueryWrapper<BusProcessName> busProcessNameQueryWrapper = new QueryWrapper<>();
busProcessNameQueryWrapper.eq("PRC_TYPE","buss3");
List<BusProcessName> list = iBusProcessNameService.list(busProcessNameQueryWrapper);
if(!list.isEmpty()){
for (BusProcessName data: list){
if(StringUtils.isNotBlank(data.getPrcId())) {
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(data.getPrcId()).singleResult();
//不能与空证明有待办
if (processInstance != null) {
//有代办的情况下 查看复审流程的时间 reviewTime
QueryWrapper<BusProcessNew> busProcessNewQueryWrapper = new QueryWrapper<>();
busProcessNewQueryWrapper.eq("P_ID", data.getPrcId());
busProcessNewQueryWrapper.eq("TASK_INFO", "起草");
List<BusProcessNew> newList = iBusProcessNewService.list(busProcessNewQueryWrapper);
if (!newList.isEmpty()) {
for (BusProcessNew busProcessNew : newList) {
if (StringUtils.isNotBlank(busProcessNew.getMesg())) {
JSONObject jsonObject = JSONObject.parseObject(busProcessNew.getMesg());
if (jsonObject != null) {
Object reviewTime = jsonObject.get("reviewTime");
if (reviewTime != null) {
String reviewTimeDate = reviewTime.toString();
//今天的时间
if (StringUtils.isNotBlank(reviewTimeDate)) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
// 复审
Date review = dateFormat.parse(reviewTimeDate);
//今天
String day = dateFormat.format(new Date());
Date parse = dateFormat.parse(day);
//三天前时间
Calendar instanceThree = Calendar.getInstance();
instanceThree.setTime(dateFormat.parse(reviewTimeDate));
instanceThree.add(Calendar.DATE, -3);
//三天前的时间
String format = dateFormat.format(instanceThree.getTime());
Date ThreeDate = dateFormat.parse(format);
if (review.getTime() == parse.getTime()) {
logger.info("====================================当天前时间发送开始!!!!=========================================");
process(data.getPrcId());
logger.info("====================================当天前时间发送成功!!!!=========================================");
}
if (ThreeDate.getTime() == parse.getTime()) {
logger.info("====================================三天前时间发送开始!!!!=========================================");
process(data.getPrcId());
logger.info("====================================三天前时间发送成功!!!!=========================================");
}
} catch (ParseException e) {
e.printStackTrace();
}
}
}
}
}
}
}
}
}
}
}else {
logger.info("====================================NAME为空!!!!=========================================");
}
}
}
public void sendOATodo(Task delegateTask) {
IBusProcessNewService busBean = SpringContextUtil.getBean(IBusProcessNewService.class);
QueryWrapper busProcessNewQueryWrapper = new QueryWrapper<BusProcessNew>();
busProcessNewQueryWrapper.eq("P_ID",delegateTask.getProcessInstanceId());
busProcessNewQueryWrapper.eq("USER_ID",delegateTask.getAssignee());
busProcessNewQueryWrapper.isNotNull("TASK_ID");
busProcessNewQueryWrapper.orderByDesc("CREATE_TIME");
List<BusProcessNew> list = busBean.list(busProcessNewQueryWrapper);
if(!list.isEmpty()) {
BusProcessNew busProcessNew = list.get(0);
busProcessNew.setTaskId(delegateTask.getId());
String str = nodeInfo(busProcessNew.getTaskInfo());
busBean.saveOrUpdate(busProcessNew);
CreateMQService oaService = SpringContextUtil.getBean(CreateMQService.class);
// 发送 oa 待办 设置 跳转页面 router ? 后面流程类型
logger.info("================================当前需要发送OA为"+str+"===========================================");
busProcessNew.setLink(str+"?prcType=buss3");
busProcessNew.setTaskInfo(delegateTask.getName());
oaService.sendTodoMq(busProcessNew);
}
}
public void process(String prcId) {
TaskService taskService = SpringContextUtil.getBean(TaskService.class);
List<Task> processlist = taskService.createTaskQuery().processInstanceId(prcId).active().list();
if(!processlist.isEmpty()){
for (Task data: processlist) {
this.sendOATodo(data);
logger.info("================================发送成功===========================================");
}
}
}
public String nodeInfo(String type) {
switch (type){
case "选择复审人":
return "qbfsStepSub1";
case "复审":
return "qbfsStepSub2";
case "汇总":
return "bussFs2";
case "批准":
return "bussFs3";
case "重新汇总":
return "bussFsC2";
case "技术标准起草":
return "bussFs7";
case "产品标准起草":
return "bussFs6";
}
return "";
}
public void ScheduledSarBussionessStandReviewTest() {
/**
* 1: 发起流程以后,复审日期的前三天发送一次OA待办消息,和复审完成时间的当天发送一次OA待办
* 2:复审完成时间当天发起待办消息
* 3:复审完成时间前三天生成待办消息
*/
/**
* 1: 查询所有未走完的复审流程
* 2: 判断当前日期是否是复审日期的三天前。
* 3: 判断当前日期是否是复审日期的当天
* 4:不是则跳过
* 5:是则发送一条OA消息
*/
QueryWrapper<BusProcessName> busProcessNameQueryWrapper = new QueryWrapper<>();
busProcessNameQueryWrapper.eq("PRC_TYPE","buss3");
List<BusProcessName> list = iBusProcessNameService.list(busProcessNameQueryWrapper);
if(!list.isEmpty()){
for (BusProcessName data: list){
if(StringUtils.isNotBlank(data.getPrcId())) {
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(data.getPrcId()).singleResult();
//不能与空证明有待办
if (processInstance != null) {
//有代办的情况下 查看复审流程的时间 reviewTime
QueryWrapper<BusProcessNew> busProcessNewQueryWrapper = new QueryWrapper<>();
busProcessNewQueryWrapper.eq("P_ID", data.getPrcId());
busProcessNewQueryWrapper.eq("TASK_INFO", "起草");
List<BusProcessNew> newList = iBusProcessNewService.list(busProcessNewQueryWrapper);
if (!newList.isEmpty()) {
for (BusProcessNew busProcessNew : newList) {
if (StringUtils.isNotBlank(busProcessNew.getMesg())) {
JSONObject jsonObject = JSONObject.parseObject(busProcessNew.getMesg());
if (jsonObject != null) {
Object reviewTime = jsonObject.get("reviewTime");
if (reviewTime != null) {
// String reviewTimeDate = reviewTime.toString();
String reviewTimeDate = "2023-06-12";
// String reviewTimeDate = "2023-06-15";
//今天的时间
if (StringUtils.isNotBlank(reviewTimeDate)) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
// 复审
Date review = dateFormat.parse(reviewTimeDate);
//今天
String day = dateFormat.format(new Date());
Date parse = dateFormat.parse(day);
//三天前时间
Calendar instanceThree = Calendar.getInstance();
instanceThree.setTime(dateFormat.parse(reviewTimeDate));
instanceThree.add(Calendar.DATE, -3);
//三天前的时间
String format = dateFormat.format(instanceThree.getTime());
Date ThreeDate = dateFormat.parse(format);
if (review.getTime() == parse.getTime()) {
logger.info("====================================当天前时间发送开始!!!!=========================================");
process(data.getPrcId());
logger.info("====================================当天前时间发送成功!!!!=========================================");
}
if (ThreeDate.getTime() == parse.getTime()) {
logger.info("====================================三天前时间发送开始!!!!=========================================");
process(data.getPrcId());
logger.info("====================================三天前时间发送成功!!!!=========================================");
}
} catch (ParseException e) {
e.printStackTrace();
}
}
}
}
}
}
}
}
}
}
}else {
logger.info("====================================NAME为空!!!!=========================================");
}
}
}