政策征求意见、重点认证标准/政策合规性项目审查流程完善。 推送OA待阅。

This commit is contained in:
wangzhijiang
2023-10-27 17:44:38 +08:00
parent 7c8203bd94
commit 3e575ea9d8
10 changed files with 319 additions and 4 deletions
@@ -223,6 +223,8 @@ public class TaskController {
typeData.put("25","起草");//企标制修订计划管控
typeData.put("26","起草");//企标制修订立项计划
typeData.put("23","汇总");//企标复审
typeData.put("29","管理员");//政策征求意见
typeData.put("30","管理员");//重点认证标准/政策合规性项目审查
BusProcessName one = iBusProcessNameService.getOne(queryWrapper);
HistoricTaskInstanceQuery historicTaskInstanceQuery = historyService.createHistoricTaskInstanceQuery()
.processInstanceId(one.getPrcId()).orderByHistoricTaskInstanceEndTime().asc();
@@ -341,6 +341,7 @@ public class TodoTaskController extends BaseAction {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String data = sdf.format(entry.getValue().get(0).get("createTime"));
res.setAcceptTime(data);
res.setTaskDefinitionKey(entry.getValue().get(0).get("taskDefinitionKey").toString());
// //获取新的流程名称
// QueryWrapper<BusProcessNew> queryWrapper1=new QueryWrapper<>();
// queryWrapper1.eq("P_ID",res.getPrcId());
@@ -59,4 +59,19 @@ public class CreateMQService {
}
}
/**
* @Description: 发送OA待阅
* @author: wangzhijiang
* @date: 2023-10-27
* @Param: @param busProcessNew
* @return:
*/
public void sendToBeReadMq(BusProcessNew busProcessNew) {
if (oaFlag) {
//发送消息队列
this.rabbitTemplate.convertAndSend("sendToBeRead-exchange_MQ_GSAR_RELEASE", "sendToBeRead-key_MQ_GSAR_RELEASE", busProcessNew);
}
}
}
@@ -0,0 +1,171 @@
package com.ydw.bat.wkflow.business_mq.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.rabbitmq.client.Channel;
import com.ydw.bat.wkflow.business_auth.LawsUserInfoService;
import com.ydw.bat.wkflow.business_main.datas.entity.*;
import com.ydw.bat.wkflow.business_main.datas.mapper.SendTodoLogMapper;
import com.ydw.bat.wkflow.business_oa.utils.EmailUtils;
import com.ydw.bat.wkflow.business_oa.webService.service.WebServiceOAService;
import com.ydw.bat.wkflow.business_oa.webService.todoResult.NotifyTodoAppResult;
import net.sf.json.JSONObject;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.support.AmqpHeaders;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.Message;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Component
public class SendToBeReadMQService {
private static final Logger logger = LoggerFactory.getLogger(SendToBeReadMQService.class);
@Autowired
private CreateMQService convertMq;
@Autowired
private EmailUtils emailUtils;
@Autowired
private WebServiceOAService webServiceOAService;
@Autowired
private SendTodoLogMapper sendTodoLogMapper;
@Autowired
private LawsUserInfoService lawsUserInfoService;
@RabbitListener(bindings = @QueueBinding(
value = @Queue(value = "createMQToBeRead_SQ_GSAR_RELEASE", durable = "true"),
exchange = @Exchange(value = "sendToBeRead-exchange_MQ_GSAR_RELEASE", ignoreDeclarationExceptions = "true"),
key = "sendToBeRead-key_MQ_GSAR_RELEASE"))
public void createMQ(BusProcessNew object, Message message, Channel channel) throws Exception {
try {
try {
Thread.sleep(5000);
// 发送OA待阅
insertOrUpdateInfo(object);
} catch (InterruptedException e) {
logger.error(e.toString());
Thread.currentThread().interrupt();
}
} catch (Exception e) {
logger.error("消息队列进入添加数据方法前失败!");
logger.error(e.getMessage(), e);
} finally {
Long tag = (Long) message.getHeaders().get(AmqpHeaders.DELIVERY_TAG);
channel.basicAck(tag, false);
logger.debug("消息确认成功!!!!!!!!!");
}
}
public void insertOrUpdateInfo(BusProcessNew object) throws Exception {
try {
NotifyTodoAppResult todoAppResult = webServiceOAService.sendToBeRead(object);
SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
if (todoAppResult.getSIGN().equals("0") || todoAppResult.getMASSAGE().equals("操作成功")) {
QueryWrapper wrapper = new QueryWrapper();
wrapper.eq("TODO_ID", object.getId());
wrapper.eq("MSG_TYPE", "0");
List<SendTodoLog> list = sendTodoLogMapper.selectList(wrapper);
if (!list.isEmpty()) {
SendTodoLog sendTodoLog = list.get(0);
sendTodoLog.setMsgStatus("2");
sendTodoLog.setOperMesg(todoAppResult.getMASSAGE());
sendTodoLog.setCreateTime(sdf.format(new Date()));
sendTodoLog.setUpdateTime(sdf.format(new Date()));
sendTodoLogMapper.updateById(sendTodoLog);
} else {
sendTodoSave(object, sdf, "2", todoAppResult.getMASSAGE());
}
} else {
// 重试发送待办
logger.info("重试发送待办");
this.restartSendMq(object, todoAppResult.getMASSAGE());
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
this.restartSendMq(object, e.getMessage());
}
}
public void restartSendMq(BusProcessNew object, String operMesg) throws Exception {
QueryWrapper wrapper = new QueryWrapper();
wrapper.eq("TODO_ID", object.getId());
wrapper.eq("MSG_TYPE", "0");
List<SendTodoLog> list = sendTodoLogMapper.selectList(wrapper);
SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
if (!list.isEmpty()) {
SendTodoLog sendTodoLog = list.get(0);
int againNumNew = Integer.valueOf(sendTodoLog.getErrNum());
if (againNumNew >= 6) {
ResponseMessage<UserVO> byId = lawsUserInfoService.getById("WY8J26MH23");
// 发送待办 或 发送给管理员邮箱
List<String> emailList = new ArrayList<>();
// 占时指定admin用户邮箱
emailList.add(byId == null ? "" : (byId.getData().getEmail() == null ? "" : byId.getData().getEmail()));
String[] arr = emailList.toArray(new String[emailList.size()]);
String title = "OA请求发送失败6次";
String countText = "<div style=\"font-size:16px\" ><div><p>您好:</p></div>" +
"<span style=\"color:blue;\" >" + "OA请求发送失败6次,请线下协调处理" + "</span></div>";
emailUtils.sendMsgFeign(arr, title, countText);
logger.info("发送失败6次,发送给管理员邮箱");
} else {
restSendTodo(object, sdf, sendTodoLog, againNumNew, operMesg);
}
} else {
sendTodoSave(object, sdf, "3", operMesg);
}
}
private void restSendTodo(BusProcessNew object, SimpleDateFormat sdf, SendTodoLog sendTodoLog, int againNumNew, String operMesg) throws Exception {
// 失败次数小于6次,放入失败队列延迟消费
if ((againNumNew < 6)) {
Thread.sleep(3000);
logger.info("发送失败连续持续" + againNumNew + "次,存入延迟重试队列!!!!!!!!!");
} else {
logger.info("发送失败连续持续" + againNumNew + "次!!");
}
sendTodoLog.setErrNum(sendTodoLog.getErrNum() + 1);
sendTodoLog.setUpdateTime(sdf.format(new Date()));
sendTodoLog.setOperMesg(operMesg);
sendTodoLogMapper.updateById(sendTodoLog);
convertMq.sendTodoMq(object);
logger.info("已重新加入延迟队列");
}
private void sendTodoSave(BusProcessNew object, SimpleDateFormat sdf, String s, String operMesg) {
SendTodoLog sendTodoLog = new SendTodoLog();
sendTodoLog.setMsgType("0");
sendTodoLog.setTodoId(object.getId());
sendTodoLog.setUserId(object.getUserId());
JSONObject json = JSONObject.fromObject(object);
sendTodoLog.setMesg(json.toString());
sendTodoLog.setMsgStatus(s);
sendTodoLog.setErrNum(1);
sendTodoLog.setOperMesg(operMesg);
sendTodoLog.setCreateTime(sdf.format(new Date()));
sendTodoLog.setUpdateTime(sdf.format(new Date()));
sendTodoLogMapper.insert(sendTodoLog);
if (s.equals("2")) {
logger.info("发送成功,存入OA日志");
} else {
convertMq.sendToBeReadMq(object);
logger.info("已重新加入延迟队列");
}
}
}
@@ -24,4 +24,6 @@ public interface WebServiceOAService {
NotifyTodoAppDeleteResult setTodoDelete(String object) throws Exception;
NotifyTodoAppResult sendToBeRead(BusProcessNew busProcessNew) throws Exception;
}
@@ -492,5 +492,69 @@ public class WebServiceOAServiceImpl implements WebServiceOAService {
}
}
}
@Override
@Async
public NotifyTodoAppResult sendToBeRead(BusProcessNew busProcessNew) throws Exception {
NotifyTodoAppResult notifyTodoAppResult = new NotifyTodoAppResult();
String result = "";
SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
JsonSend jsonSend = new JsonSend();
HEAD head = new HEAD();
head.setACCOUNT("OA");
head.setBIZTRANSACTIONID("SYC_161320210206133219");
head.setCONSUMER("SPRS");
head.setCOUNT("1");
head.setPASSWORD("oa201611241710");
head.setSRVLEVEL("1");
List<Object> list = new ArrayList<>();
NotifyTodoSendContext notifyTodoSendContext = new NotifyTodoSendContext();
// 待办来源的系统
notifyTodoSendContext.setAppName("SPRS");
//创建时间
notifyTodoSendContext.setCreateTime(sdf.format(new Date()));
// 待办在原系统唯一标识
notifyTodoSendContext.setModelId(busProcessNew.getId());
//模块名称
notifyTodoSendContext.setModelName(busProcessNew.getTaskInfo());
//标题
notifyTodoSendContext.setSubject(busProcessNew.getPrcName());
//地址
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.eq("PRC_ID", busProcessNew.getPId());
BusProcessName busProcessName = iBusProcessNameService.getOne(queryWrapper);
String linkParam = "&taskIds=" + busProcessNew.getTaskId() + "&prcId=" + busProcessNew.getPId() + "&prcNum=" + busProcessName.getPrcNum() + "&prcName=" + busProcessName.getPrcName();
notifyTodoSendContext.setLink(webUrl + busProcessNew.getLink() + linkParam);
//待办类型
notifyTodoSendContext.setType("2");
Map<String, Object> map = new HashMap<>();
ResponseMessage<UserVO> byId = lawsUserInfoService.getById(busProcessNew.getUserId());
map.put("LoginName", byId == null ? "" : byId.getData().getAccount());
JSONObject jsonLoginName = new JSONObject(map);
notifyTodoSendContext.setTargets(jsonLoginName.toJSONString());
list.add(notifyTodoSendContext);
jsonSend.setHEAD(head);
jsonSend.setLIST(list);
net.sf.json.JSONObject json = net.sf.json.JSONObject.fromObject(jsonSend);
Map<String, String> mapCtr = new TreeMap<>();
mapCtr.put("Authorization", credentials);
log.info("处理完文件数据,开始请求发送待办接口数据:【" + sdf.format(new Date()) + "");
log.info("sendTodo当前处理的文件数据(josnSend):" + jsonSend.toString());
log.info("sendTodo当前处理的文件数据(notifyTodoSendContext):" + notifyTodoSendContext.toString());
result = okHttpUtil.postForJson("https://fesbnew.foton.com.cn/WP_FOTON_FSOA/APP_DOC_SERVICES/Proxy_Services/TA_OA/DOC_SYC_1019_SendTodo_PS", json.toString(), mapCtr);
log.info("请求发送待办接口完毕,返回响应状态:【" + sdf.format(new Date()) + "");
if (!result.contains("操作成功")) {
log.error("请求发送待办接口出现异常:" + result);
log.info("sendTodo当前处理的文件数据(josnSend):" + jsonSend.toString());
log.info("sendTodo当前处理的文件数据(notifyTodoSendContext):" + notifyTodoSendContext.toString());
notifyTodoAppResult.setSIGN("1");
notifyTodoAppResult.setMASSAGE(result);
} else {
log.info("okHttp请求发送待办接口成功结果:" + result);
notifyTodoAppResult = (NotifyTodoAppResult) net.sf.json.JSONObject.toBean(net.sf.json.JSONObject.fromObject(result), NotifyTodoAppResult.class);
}
return notifyTodoAppResult;
}
}
@@ -9,12 +9,18 @@ import com.ydw.bat.wkflow.business_main.datas.entity.Datas;
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_main.datas.service.IDatasService;
import com.ydw.bat.wkflow.business_mq.service.CreateMQService;
import com.ydw.bat.wkflow.util.SpringContextUtil;
import com.ydw.bat.wkflow.util.enums.FlowTypeEnum;
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;
import org.apache.commons.lang3.StringUtils;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.UUID;
public class PolicyComplianceProgramReviewProcess15After implements TaskListener {
@Override
@@ -23,6 +29,7 @@ public class PolicyComplianceProgramReviewProcess15After implements TaskListener
IBusProcessNewService busBean = SpringContextUtil.getBean(IBusProcessNewService.class);
TaskTodoService taskTodoService = SpringContextUtil.getBean(TaskTodoService.class);
IBusProcessNameService busProcessNameService = SpringContextUtil.getBean(IBusProcessNameService.class);
CreateMQService oaService = SpringContextUtil.getBean(CreateMQService.class);
QueryWrapper<Datas> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("ACTI_TASK_ID", delegateTask.getId());
@@ -32,7 +39,30 @@ public class PolicyComplianceProgramReviewProcess15After implements TaskListener
// TODO 等需求确认,提交后需要做什么操作。
JSONObject jsonForm = object.getJSONObject("form");
String csr2UserIds = jsonForm.getString("csr2UserIds");
if (StringUtils.isNotEmpty(csr2UserIds)) {
List<String> csr2UserIdList = Arrays.asList(csr2UserIds.split(","));
for (String csr2UserId : csr2UserIdList) {
// 发送 oa 待阅
BusProcessNew sendToBeReadBpn = new BusProcessNew();
sendToBeReadBpn.setId(UUID.randomUUID().toString().substring(0, 20));
sendToBeReadBpn.setTaskId(delegateTask.getId());
sendToBeReadBpn.setTaskInfo(delegateTask.getName());
sendToBeReadBpn.setLink(
FlowTypeEnum.ZCHGXXMSCLC.getRoute() + "?prcType=" +
FlowTypeEnum.ZCHGXXMSCLC.getValue() +
"&taskDefinitionKey=PolicyComplianceProgramReviewProcessKey11" +
"&operate=view"
);
sendToBeReadBpn.setTaskInfo(delegateTask.getName());
sendToBeReadBpn.setUserId(csr2UserId);
sendToBeReadBpn.setPrcName("重点认证标准/政策合规性项目审查流程");
sendToBeReadBpn.setPId(delegateTask.getProcessInstanceId());
oaService.sendToBeReadMq(sendToBeReadBpn);
}
}
boolean existTaskFlag = taskTodoService.whetherExistTaskByTaskDefinitionKey(
delegateTask.getProcessInstanceId(),
@@ -52,8 +52,7 @@ public class PolicyComplianceProgramReviewProcessTimer {
* @Param:
* @return:
*/
@Scheduled(cron = "10 11 11 * * ? ")//每天十点执行
// @Scheduled(cron = "0/15 * * * * ? ")
@Scheduled(cron = "10 0 0 * * ? ")//每天凌晨12点10分执行
public void autoSubmitZrbmTask() {
QueryWrapper<BusProcessName> bpnQueryWrap = new QueryWrapper<>();
bpnQueryWrap.lambda().eq(BusProcessName::getPrcType, FlowTypeEnum.ZCHGXXMSCLC.getValue());
@@ -9,12 +9,18 @@ import com.ydw.bat.wkflow.business_main.datas.entity.Datas;
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_main.datas.service.IDatasService;
import com.ydw.bat.wkflow.business_mq.service.CreateMQService;
import com.ydw.bat.wkflow.util.SpringContextUtil;
import com.ydw.bat.wkflow.util.enums.FlowTypeEnum;
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;
import org.apache.commons.lang3.StringUtils;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.UUID;
public class PolicySolicitOpinionProcess16After implements TaskListener {
@Override
@@ -23,6 +29,7 @@ public class PolicySolicitOpinionProcess16After implements TaskListener {
IBusProcessNewService busBean = SpringContextUtil.getBean(IBusProcessNewService.class);
TaskTodoService taskTodoService = SpringContextUtil.getBean(TaskTodoService.class);
IBusProcessNameService busProcessNameService = SpringContextUtil.getBean(IBusProcessNameService.class);
CreateMQService oaService = SpringContextUtil.getBean(CreateMQService.class);
QueryWrapper<Datas> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("ACTI_TASK_ID", delegateTask.getId());
@@ -32,7 +39,32 @@ public class PolicySolicitOpinionProcess16After implements TaskListener {
// TODO 等需求确认,提交后需要做什么操作。
JSONObject jsonForm = object.getJSONObject("form");
String csr2UserIds = jsonForm.getString("csr2UserIds");
if (StringUtils.isNotEmpty(csr2UserIds)) {
List<String> csr2UserIdList = Arrays.asList(csr2UserIds.split(","));
for (String csr2UserId : csr2UserIdList) {
// 发送 oa 待阅
BusProcessNew sendToBeReadBpn = new BusProcessNew();
sendToBeReadBpn.setId(UUID.randomUUID().toString().substring(0, 20));
sendToBeReadBpn.setTaskId(delegateTask.getId());
sendToBeReadBpn.setTaskInfo(delegateTask.getName());
sendToBeReadBpn.setLink(
FlowTypeEnum.ZCZQYJLC.getRoute() +
"?prcType=" + FlowTypeEnum.ZCZQYJLC.getValue() +
"&taskDefinitionKey=PolicySolicitOpinionProcessKey11" +
"&operate=view"
);
sendToBeReadBpn.setTaskInfo(delegateTask.getName());
sendToBeReadBpn.setUserId(csr2UserId);
sendToBeReadBpn.setTaskInfo(delegateTask.getName());
sendToBeReadBpn.setUserId(csr2UserId);
sendToBeReadBpn.setPrcName("政策征求意见流程");
sendToBeReadBpn.setPId(delegateTask.getProcessInstanceId());
oaService.sendToBeReadMq(sendToBeReadBpn);
}
}
boolean existTaskFlag = taskTodoService.whetherExistTaskByTaskDefinitionKey(
delegateTask.getProcessInstanceId(),
@@ -50,8 +50,7 @@ public class PolicySolicitOpinionProcessTimer {
* @Param:
* @return:
*/
@Scheduled(cron = "30 59 13 * * ? ")//每天十点执行
// @Scheduled(cron = "0/15 * * * * ? ")
@Scheduled(cron = "5 0 0 * * ? ")//每天凌晨12点05分执行
public void autoSubmitZrbmTask() {
QueryWrapper<BusProcessName> bpnQueryWrap = new QueryWrapper<>();
bpnQueryWrap.lambda().eq(BusProcessName::getPrcType, FlowTypeEnum.ZCZQYJLC.getValue());