Commit acae44b5 authored by xinglei's avatar xinglei

*)消防监督流程发送消息

parent c21a500e
...@@ -18,7 +18,8 @@ public enum WorkFlowEnum { ...@@ -18,7 +18,8 @@ public enum WorkFlowEnum {
GROUPNAME("groupName","角色组的key"), GROUPNAME("groupName","角色组的key"),
NAME("name","任务节点的key"), NAME("name","任务节点的key"),
PROCESSINSTANCEID("processInstanceId",""), PROCESSINSTANCEID("processInstanceId",""),
ASSIGN("assignee","角色执行人key"); ASSIGN("assignee","角色执行人key"),
INFORMERLIST("informerList", "用户信息集合");
private String code;//对应菜单组件名称 private String code;//对应菜单组件名称
private String desc;//描述 private String desc;//描述
......
package com.yeejoin.amos.supervision.business.service.impl; package com.yeejoin.amos.supervision.business.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.yeejoin.amos.boot.biz.common.bo.ReginParams; import com.yeejoin.amos.boot.biz.common.bo.ReginParams;
import com.yeejoin.amos.boot.biz.common.service.IWorkflowExcuteService; import com.yeejoin.amos.boot.biz.common.service.IWorkflowExcuteService;
import com.yeejoin.amos.boot.biz.common.workflow.feign.WorkflowFeignService; import com.yeejoin.amos.boot.biz.common.workflow.feign.WorkflowFeignService;
...@@ -22,7 +21,6 @@ import org.springframework.stereotype.Service; ...@@ -22,7 +21,6 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
...@@ -44,6 +42,9 @@ public class PlanAuditServiceImpl implements IPlanAuditService { ...@@ -44,6 +42,9 @@ public class PlanAuditServiceImpl implements IPlanAuditService {
@Autowired @Autowired
WorkflowFeignService workflowFeignService; WorkflowFeignService workflowFeignService;
@Autowired
private PlanServiceImpl planService;
@Override @Override
@Transactional @Transactional
public Boolean auditWorkFlow(PlanAuditLog planAuditLog, Integer status, String condition, ReginParams reginParams) throws Exception { public Boolean auditWorkFlow(PlanAuditLog planAuditLog, Integer status, String condition, ReginParams reginParams) throws Exception {
...@@ -72,6 +73,7 @@ public class PlanAuditServiceImpl implements IPlanAuditService { ...@@ -72,6 +73,7 @@ public class PlanAuditServiceImpl implements IPlanAuditService {
planAuditLog.setFlowJson(condition); planAuditLog.setFlowJson(condition);
planAuditLog.setRoleName(roleName); planAuditLog.setRoleName(roleName);
planAuditLogDao.save(planAuditLog); planAuditLogDao.save(planAuditLog);
planService.getUserIdsByWorkflow(plan, instanceId);
return Boolean.TRUE; return Boolean.TRUE;
} }
} }
......
package com.yeejoin.amos.supervision.business.service.impl; package com.yeejoin.amos.supervision.business.service.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.Sequence; import com.baomidou.mybatisplus.core.toolkit.Sequence;
import com.google.common.base.Joiner; import com.google.common.base.Joiner;
import com.yeejoin.amos.boot.biz.common.bo.ReginParams; import com.yeejoin.amos.boot.biz.common.bo.ReginParams;
import com.yeejoin.amos.boot.biz.common.enums.WorkFlowEnum;
import com.yeejoin.amos.boot.biz.common.service.IWorkflowExcuteService; import com.yeejoin.amos.boot.biz.common.service.IWorkflowExcuteService;
import com.yeejoin.amos.boot.biz.common.workflow.feign.WorkflowFeignService;
import com.yeejoin.amos.feign.privilege.model.AgencyUserModel; import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
import com.yeejoin.amos.supervision.business.constants.XJConstant; import com.yeejoin.amos.supervision.business.constants.XJConstant;
import com.yeejoin.amos.supervision.business.dao.mapper.PlanMapper; import com.yeejoin.amos.supervision.business.dao.mapper.PlanMapper;
...@@ -15,6 +19,7 @@ import com.yeejoin.amos.supervision.common.enums.CheckTypeSuEnum; ...@@ -15,6 +19,7 @@ import com.yeejoin.amos.supervision.common.enums.CheckTypeSuEnum;
import com.yeejoin.amos.supervision.common.enums.DangerCheckTypeLevelEnum; import com.yeejoin.amos.supervision.common.enums.DangerCheckTypeLevelEnum;
import com.yeejoin.amos.supervision.common.enums.PlanStatusEnum; import com.yeejoin.amos.supervision.common.enums.PlanStatusEnum;
import com.yeejoin.amos.supervision.common.enums.WorkFlowBranchEnum; import com.yeejoin.amos.supervision.common.enums.WorkFlowBranchEnum;
import com.yeejoin.amos.supervision.core.async.AsyncTask;
import com.yeejoin.amos.supervision.core.common.request.AddPlanRequest; import com.yeejoin.amos.supervision.core.common.request.AddPlanRequest;
import com.yeejoin.amos.supervision.core.common.response.PlanPointRespone; import com.yeejoin.amos.supervision.core.common.response.PlanPointRespone;
import com.yeejoin.amos.supervision.core.util.DateUtil; import com.yeejoin.amos.supervision.core.util.DateUtil;
...@@ -30,6 +35,7 @@ import org.springframework.data.domain.PageImpl; ...@@ -30,6 +35,7 @@ import org.springframework.data.domain.PageImpl;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import org.typroject.tyboot.core.foundation.context.RequestContext;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAccessor; import java.time.temporal.TemporalAccessor;
...@@ -74,6 +80,12 @@ public class PlanServiceImpl implements IPlanService { ...@@ -74,6 +80,12 @@ public class PlanServiceImpl implements IPlanService {
private IWorkflowExcuteService workflowExcuteService; private IWorkflowExcuteService workflowExcuteService;
@Autowired @Autowired
private AsyncTask asyncTask;
@Autowired
WorkflowFeignService workflowFeignService;
@Autowired
private IPlanAuditDao planAuditDao; private IPlanAuditDao planAuditDao;
@Autowired @Autowired
...@@ -132,38 +144,38 @@ public class PlanServiceImpl implements IPlanService { ...@@ -132,38 +144,38 @@ public class PlanServiceImpl implements IPlanService {
public void addPlan(HashMap<String, Object> map, ReginParams reginParams) throws Exception { public void addPlan(HashMap<String, Object> map, ReginParams reginParams) throws Exception {
// 新增路线 // 新增路线
AddPlanRequest addPlanRequest = (AddPlanRequest) map.get("param"); AddPlanRequest addPlanRequest = (AddPlanRequest) map.get("param");
Plan param = addPlanRequest.getPlan(); Plan plan = addPlanRequest.getPlan();
ReginParams.PersonIdentity personIdentity = reginParams.getPersonIdentity(); ReginParams.PersonIdentity personIdentity = reginParams.getPersonIdentity();
String orgCode = map.get("org_code") == null ? "" : map.get("org_code").toString(); String orgCode = map.get("org_code") == null ? "" : map.get("org_code").toString();
String userId = personIdentity.getPersonSeq(); String userId = personIdentity.getPersonSeq();
param.setOrgCode(orgCode); plan.setOrgCode(orgCode);
param.setNextGenDate(DateUtil.getIntervalDate(new Date(), 0)); plan.setNextGenDate(DateUtil.getIntervalDate(new Date(), 0));
param.setCreateBy(userId); plan.setCreateBy(userId);
addPlanRequest.setPlan(param); addPlanRequest.setPlan(plan);
Route route = save(addPlanRequest); Route route = save(addPlanRequest);
if (!ObjectUtils.isEmpty(route)) { if (!ObjectUtils.isEmpty(route)) {
param.setRouteId(route.getId()); plan.setRouteId(route.getId());
//编辑计划 //编辑计划
if (param.getId() > 0) { if (plan.getId() > 0) {
Plan oriPlan = planDao.findById(param.getId()).get(); Plan oriPlan = planDao.findById(plan.getId()).get();
param.setCreateDate(oriPlan.getCreateDate()); plan.setCreateDate(oriPlan.getCreateDate());
param.setCreateBy(oriPlan.getCreateBy()); plan.setCreateBy(oriPlan.getCreateBy());
param.setLastUpdBy(userId); plan.setLastUpdBy(userId);
param.setFirstFlag(XJConstant.PLAN_FIRST_STATUS_YES); plan.setFirstFlag(XJConstant.PLAN_FIRST_STATUS_YES);
} }
if (XJConstant.FIX_DATE_NO.equals(param.getIsFixedDate()) && (XJConstant.PLAN_TYPE_MONTH.equals(param.getPlanType()) || XJConstant.PLAN_TYPE_YEAR.equals(param.getPlanType()))) { if (XJConstant.FIX_DATE_NO.equals(plan.getIsFixedDate()) && (XJConstant.PLAN_TYPE_MONTH.equals(plan.getPlanType()) || XJConstant.PLAN_TYPE_YEAR.equals(plan.getPlanType()))) {
param.setDayBegin(DateUtil.formatStrToTime("00:00:00")); plan.setDayBegin(DateUtil.formatStrToTime("00:00:00"));
param.setDayEnd(DateUtil.formatStrToTime("23:59:59")); plan.setDayEnd(DateUtil.formatStrToTime("23:59:59"));
} }
planDao.save(param); planDao.save(plan);
Integer status = param.getStatus(); Integer status = plan.getStatus();
if (status != null && status == 1) { if (status != null && status == 1) {
CheckTypeSuEnum checkTypeSuEnum = CheckTypeSuEnum.getEumByCode(param.getCheckTypeId()); CheckTypeSuEnum checkTypeSuEnum = CheckTypeSuEnum.getEumByCode(plan.getCheckTypeId());
DangerCheckTypeLevelEnum levelEnum = DangerCheckTypeLevelEnum.getEumByCode(param.getCheckLevel()); DangerCheckTypeLevelEnum levelEnum = DangerCheckTypeLevelEnum.getEumByCode(plan.getCheckLevel());
String branch = workFlowExcuteBranch(levelEnum.getCondition(), checkTypeSuEnum.getCondition()); String branch = workFlowExcuteBranch(levelEnum.getCondition(), checkTypeSuEnum.getCondition());
try { try {
String processInstanceId; String processInstanceId;
PlanAudit audit = planAuditDao.findByPlanId(param.getId()); PlanAudit audit = planAuditDao.findByPlanId(plan.getId());
if (audit != null) { if (audit != null) {
//执行一步 //执行一步
processInstanceId = audit.getProcessInstanceId(); processInstanceId = audit.getProcessInstanceId();
...@@ -171,20 +183,22 @@ public class PlanServiceImpl implements IPlanService { ...@@ -171,20 +183,22 @@ public class PlanServiceImpl implements IPlanService {
//更新时间 //更新时间
audit.setUpdateDate(new Date()); audit.setUpdateDate(new Date());
planAuditDao.save(audit); planAuditDao.save(audit);
this.getUserIdsByWorkflow(plan, processInstanceId);
//记录执行流水-启动节点 //记录执行流水-启动节点
insertAuditLog(reginParams, param, personIdentity, audit); insertAuditLog(reginParams, plan, personIdentity, audit);
} else { } else {
//启动 //启动
processInstanceId = workflowExcuteService.startAndComplete(processDefinitionKey, branch); processInstanceId = workflowExcuteService.startAndComplete(processDefinitionKey, branch);
audit = new PlanAudit(); audit = new PlanAudit();
audit.setPlanId(param.getId()); audit.setPlanId(plan.getId());
audit.setBusinessKey(String.valueOf(sequence.nextId())); audit.setBusinessKey(String.valueOf(sequence.nextId()));
audit.setProcessDefinitionKey(processDefinitionKey); audit.setProcessDefinitionKey(processDefinitionKey);
audit.setProcessInstanceId(processInstanceId); audit.setProcessInstanceId(processInstanceId);
audit.setStartUserId(userId); audit.setStartUserId(userId);
planAuditDao.save(audit); planAuditDao.save(audit);
//记录执行流水-启动节点 //记录执行流水-启动节点
insertAuditLog(reginParams, param, personIdentity, audit); insertAuditLog(reginParams, plan, personIdentity, audit);
this.getUserIdsByWorkflow(plan, processInstanceId);
} }
} catch (Exception e) { } catch (Exception e) {
log.error("=============防火监督,计划提交,工作流启动失败!!!============="); log.error("=============防火监督,计划提交,工作流启动失败!!!=============");
...@@ -193,6 +207,30 @@ public class PlanServiceImpl implements IPlanService { ...@@ -193,6 +207,30 @@ public class PlanServiceImpl implements IPlanService {
} }
} }
/**
* 根据工作流获取下一审核人角色下的所有用户ID
* @return
*/
protected List<String> getUserIdsByWorkflow (Plan plan, String processInstanceId){
List<String> userIds = new ArrayList<>();
JSONObject teskObject = workflowFeignService.getTaskList(processInstanceId);
JSONArray taskDetailArray = teskObject.getJSONArray(WorkFlowEnum.DATA.getCode());
for (Object obj : taskDetailArray) {
JSONObject detail = JSONObject.parseObject(JSONObject.toJSONString(obj));
JSONArray informerList = detail.getJSONArray(WorkFlowEnum.INFORMERLIST.getCode());
if (informerList.size() > 0) {
userIds = informerList.stream().map(item -> {
JSONObject jsonItem = (JSONObject) item;
return jsonItem.getString("userId");
}).collect(Collectors.toList());
asyncTask.sendAddPlanMsg(RequestContext.cloneRequestContext(), plan, userIds, true, false);
} else {
asyncTask.sendPlanMsgToLeadPeople(RequestContext.cloneRequestContext(), plan);
}
}
return userIds;
}
private void insertAuditLog(ReginParams reginParams, Plan param, ReginParams.PersonIdentity personIdentity, PlanAudit audit) { private void insertAuditLog(ReginParams reginParams, Plan param, ReginParams.PersonIdentity personIdentity, PlanAudit audit) {
PlanAuditLog planAuditLog = new PlanAuditLog(); PlanAuditLog planAuditLog = new PlanAuditLog();
planAuditLog.setPlanAuditId(audit.getId()); planAuditLog.setPlanAuditId(audit.getId());
......
...@@ -532,7 +532,7 @@ public class PlanTaskServiceImpl implements IPlanTaskService { ...@@ -532,7 +532,7 @@ public class PlanTaskServiceImpl implements IPlanTaskService {
// 2.保存执行数据明细表 // 2.保存执行数据明细表
planTaskDetail.saveAndFlush(planTaskDetailInstance); planTaskDetail.saveAndFlush(planTaskDetailInstance);
// 推送消息 // 推送消息
asyncTask.sendPlanMsg(RequestContext.cloneRequestContext(), plan, planId); asyncTask.sendPlanMsg(RequestContext.cloneRequestContext(), plan);
} }
// 定时任务监控 // 定时任务监控
jobService.planTaskAddJob(planTask); jobService.planTaskAddJob(planTask);
......
...@@ -14,6 +14,7 @@ import com.yeejoin.amos.supervision.business.entity.mybatis.MsgSubscribeBo; ...@@ -14,6 +14,7 @@ import com.yeejoin.amos.supervision.business.entity.mybatis.MsgSubscribeBo;
import com.yeejoin.amos.supervision.business.param.PushMsgParam; import com.yeejoin.amos.supervision.business.param.PushMsgParam;
import com.yeejoin.amos.supervision.business.service.intfc.IMessageService; import com.yeejoin.amos.supervision.business.service.intfc.IMessageService;
import com.yeejoin.amos.supervision.business.service.intfc.ISafety3DDataSendService; import com.yeejoin.amos.supervision.business.service.intfc.ISafety3DDataSendService;
import com.yeejoin.amos.supervision.business.util.DateUtil;
import com.yeejoin.amos.supervision.business.util.Toke; import com.yeejoin.amos.supervision.business.util.Toke;
import com.yeejoin.amos.supervision.common.enums.JPushTypeEnum; import com.yeejoin.amos.supervision.common.enums.JPushTypeEnum;
import com.yeejoin.amos.supervision.common.enums.MsgSubscribeEnum; import com.yeejoin.amos.supervision.common.enums.MsgSubscribeEnum;
...@@ -45,6 +46,8 @@ import java.util.concurrent.Future; ...@@ -45,6 +46,8 @@ import java.util.concurrent.Future;
public class AsyncTask { public class AsyncTask {
private final Logger log = LoggerFactory.getLogger(AsyncTask.class); private final Logger log = LoggerFactory.getLogger(AsyncTask.class);
private final String msgType = "supervision";
@Autowired @Autowired
private ISafety3DDataSendService safety3DDataSend; private ISafety3DDataSendService safety3DDataSend;
...@@ -304,15 +307,70 @@ public class AsyncTask { ...@@ -304,15 +307,70 @@ public class AsyncTask {
} }
/** /**
* 计划任务消息 * 提交计划任务消息
* @param requestContextModel
* @param plan
* @param userIds 发送用户id集合
* @param isSendWeb 发送web标识
* @param isSendApp 发送app标识
*/
@Async
public void sendAddPlanMsg(RequestContextModel requestContextModel, Plan plan, List<String> userIds, boolean isSendWeb, boolean isSendApp){
MessageModel model = new MessageModel();
model.setTitle(plan.getName());
String body = String.format("计划名称:%s;检查类型:%s;创建时间:%s",
plan.getName(), plan.getCheckTypeName(), DateUtil.date2LongStr(new Date()));
model.setBody(body);
try {
model.setIsSendWeb(isSendWeb);
model.setIsSendApp(isSendApp);
model.setMsgType(msgType);
model.setRelationId(String.valueOf(plan.getId()));
model.setRecivers(userIds);
// remoteSecurityService.addMessage(requestContextModel, model);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 发送消息至检查组长
* @param plan
*/
@Async
public void sendPlanMsgToLeadPeople(RequestContextModel requestContextModel, Plan plan){
MessageModel model = new MessageModel();
model.setTitle(plan.getName());
String body = String.format("计划名称:%s;检查类型:%s;创建时间:%s",
plan.getName(), plan.getCheckTypeName(), DateUtil.date2LongStr(new Date()));
model.setBody(body);
String leadPeopleIds = plan.getLeadPeopleIds();
if (!ValidationUtil.isEmpty(plan.getUserId()) && !leadPeopleIds.contains(plan.getUserId())){
leadPeopleIds += "," + plan.getUserId();
}
try {
List<String> recivers = remoteSecurityService.getAmosIdListByUserIds(requestContextModel, leadPeopleIds);
model.setIsSendWeb(true);
model.setIsSendApp(true);
model.setMsgType(msgType);
model.setRelationId(String.valueOf(plan.getId()));
model.setRecivers(recivers);
// remoteSecurityService.addMessage(requestContextModel, model);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 发送消息至检查组员
* @param plan * @param plan
*/ */
@Async @Async
public void sendPlanMsg(RequestContextModel requestContextModel, Plan plan, long planId){ public void sendPlanMsg(RequestContextModel requestContextModel, Plan plan){
MessageModel model = new MessageModel(); MessageModel model = new MessageModel();
model.setTitle(plan.getName()); model.setTitle(plan.getName());
String body = String.format("任务批号:%s;类型:%s;执行人:%s", String body = String.format("计划名称:%s;检查类型:%s;创建时间:%s",
planId, plan.getCheckTypeName(), plan.getMakerUserName()); plan.getName(), plan.getCheckTypeName(), DateUtil.date2LongStr(new Date()));
model.setBody(body); model.setBody(body);
String leadPeopleIds = plan.getLeadPeopleIds(); String leadPeopleIds = plan.getLeadPeopleIds();
if (!ValidationUtil.isEmpty(plan.getUserId()) && !leadPeopleIds.contains(plan.getUserId())){ if (!ValidationUtil.isEmpty(plan.getUserId()) && !leadPeopleIds.contains(plan.getUserId())){
...@@ -322,7 +380,7 @@ public class AsyncTask { ...@@ -322,7 +380,7 @@ public class AsyncTask {
List<String> recivers = remoteSecurityService.getAmosIdListByUserIds(requestContextModel, leadPeopleIds); List<String> recivers = remoteSecurityService.getAmosIdListByUserIds(requestContextModel, leadPeopleIds);
model.setIsSendApp(true); model.setIsSendApp(true);
model.setIsSendWeb(true); model.setIsSendWeb(true);
model.setMsgType("supervision"); model.setMsgType(msgType);
model.setRelationId(String.valueOf(plan.getId())); model.setRelationId(String.valueOf(plan.getId()));
model.setRecivers(recivers); model.setRecivers(recivers);
remoteSecurityService.addMessage(requestContextModel, model); remoteSecurityService.addMessage(requestContextModel, model);
...@@ -349,5 +407,4 @@ public class AsyncTask { ...@@ -349,5 +407,4 @@ public class AsyncTask {
} }
return afterFilterUserIds; return afterFilterUserIds;
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment