项目立项流程修改,分管领导和主要领导不再由前端传值,改为自动获取

This commit is contained in:
zty 2024-07-30 14:21:50 +08:00
parent 32ba4091f3
commit 1d5acd6199
5 changed files with 198 additions and 126 deletions

View File

@ -24,7 +24,8 @@ import com.xqopen.kehui.personal.service.IPersonalEventsService;
import com.xqopen.kehui.personal.service.IPersonalMemberService; import com.xqopen.kehui.personal.service.IPersonalMemberService;
import com.xqopen.kehui.personal.service.IPersonalUserInfoService; import com.xqopen.kehui.personal.service.IPersonalUserInfoService;
import com.xqopen.kehui.personal.util.StringNotNull; import com.xqopen.kehui.personal.util.StringNotNull;
import com.xqopen.kehui.util.MessageUtils; import com.xqopen.kehui.project.entity.ProjectInfo;
import com.xqopen.kehui.project.service.IProjectInfoService;
import com.xqopen.kehui.util.SpringContextUtil; import com.xqopen.kehui.util.SpringContextUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.activiti.engine.*; import org.activiti.engine.*;
@ -34,6 +35,8 @@ import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.history.HistoricTaskInstanceQuery; import org.activiti.engine.history.HistoricTaskInstanceQuery;
import org.activiti.engine.runtime.ProcessInstance; import org.activiti.engine.runtime.ProcessInstance;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;
import java.util.*; import java.util.*;
@ -91,6 +94,8 @@ public class MyTaskListener implements TaskListener {
IPersonalEventsService personalEventsService; IPersonalEventsService personalEventsService;
@Autowired @Autowired
IPersonalMemberService personalMemberService; IPersonalMemberService personalMemberService;
@Autowired
IProjectInfoService projectInfoService;
public void notify(DelegateTask task) { public void notify(DelegateTask task) {
@ -107,9 +112,11 @@ public class MyTaskListener implements TaskListener {
sealManagementService = SpringContextUtil.getBean("adminSealManagementServiceImpl", IAdminSealManagementService.class); sealManagementService = SpringContextUtil.getBean("adminSealManagementServiceImpl", IAdminSealManagementService.class);
personalEventsService = SpringContextUtil.getBean("personalEventsServiceImpl", IPersonalEventsService.class); personalEventsService = SpringContextUtil.getBean("personalEventsServiceImpl", IPersonalEventsService.class);
personalMemberService = SpringContextUtil.getBean("personalMemberServiceImpl", IPersonalMemberService.class); personalMemberService = SpringContextUtil.getBean("personalMemberServiceImpl", IPersonalMemberService.class);
projectInfoService = SpringContextUtil.getBean("projectInfoServiceImpl", IProjectInfoService.class);
String processInstanceId = task.getProcessInstanceId(); String processInstanceId = task.getProcessInstanceId();
List<FlowsConfiguration> flowsConfiguration = null; List<FlowsConfiguration> flowsConfiguration = null;
SystemUserLogin systemUserLogin = null;; SystemUserLogin systemUserLogin = null;
;
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).active().singleResult(); ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).active().singleResult();
// String businessKey = processInstance.getBusinessKey(); // String businessKey = processInstance.getBusinessKey();
Wrapper<Flows> flowsWrapper = new EntityWrapper<>(); Wrapper<Flows> flowsWrapper = new EntityWrapper<>();
@ -119,8 +126,22 @@ public class MyTaskListener implements TaskListener {
activitiEnum.activitiClass aClass = Enum.valueOf(activitiEnum.activitiClass.class, flows.getActivitiCategory()); activitiEnum.activitiClass aClass = Enum.valueOf(activitiEnum.activitiClass.class, flows.getActivitiCategory());
String name = task.getTaskDefinitionKey(); String name = task.getTaskDefinitionKey();
String ass = ""; String ass = "";
int flag=0;//项目立项是否保存当前委托人的标记
String client="";//委托人角色
name = name.equals("office") ? setPostDocumentOffice(aClass, name, flows.getBusinessId()) : name; name = name.equals("office") ? setPostDocumentOffice(aClass, name, flows.getBusinessId()) : name;
if("branchLeaders".equals(name)){
client=String.valueOf(name);
name=setBranchLeaders(aClass, name, flows.getBusinessId());
flag=1;
}
name = name.equals("branchLeader") ? setBranchLeader(aClass, name, flows.getBusinessId()) : name; name = name.equals("branchLeader") ? setBranchLeader(aClass, name, flows.getBusinessId()) : name;
// name = name.equals("branchLeaders") ? setBranchLeaders(aClass, name, flows.getBusinessId()) : name;//项目立项的分管领导默认是所长/副所长
// name = "MainLeader".equals(name) ? "director" : name;//项目立项主要领导为所长
if("MainLeader".equals(name)){
client=String.valueOf(name);
name="director";
flag=1;
}
// 取得当前任务.当前任务节点 // 取得当前任务.当前任务节点
switch (name) { switch (name) {
case "business": case "business":
@ -165,18 +186,6 @@ public class MyTaskListener implements TaskListener {
task.setAssignee(currUserId); task.setAssignee(currUserId);
} }
break; break;
case "projectManagerData":
HistoricTaskInstanceQuery projectInitQuery = historyService
.createHistoricTaskInstanceQuery().processInstanceId(processInstanceId);
HistoricTaskInstance projectInitTask = null;
if (projectInitQuery != null && projectInitQuery.count() > 0) {
Task = projectInitQuery.taskDefinitionKey("apply").list().get(0);
}
if (projectInitTask != null && projectInitTask.getTaskDefinitionKey().equals("apply")) {
String currUserId = projectInitTask.getAssignee();
task.setAssignee(currUserId);
}
break;
default: default:
Wrapper<FlowsConfiguration> wrapper = new EntityWrapper<>(); Wrapper<FlowsConfiguration> wrapper = new EntityWrapper<>();
wrapper.eq("approved_role", name); wrapper.eq("approved_role", name);
@ -213,15 +222,28 @@ public class MyTaskListener implements TaskListener {
List<PersonalMember> members = memberService.getMemberByRoleTag("projector"); List<PersonalMember> members = memberService.getMemberByRoleTag("projector");
if (members != null) { if (members != null) {
for (PersonalMember member : members) { for (PersonalMember member : members) {
WorkflowUtils.sendEmail(member.getId(), MessageUtils.Message_projectAcceptanceForSpecialist, null); // WorkflowUtils.sendEmail(member.getId(), MessageUtils.Message_projectAcceptanceForSpecialist, null);
} }
} }
} }
if (flows != null) { if (flows != null) {
WorkflowUtils.sendSMS(Long.valueOf(flows.getCreatedBy()), Long.valueOf(flows.getCreatedBy()), true, stepName, title, false, false, false); // WorkflowUtils.sendSMS(Long.valueOf(flows.getCreatedBy()), Long.valueOf(flows.getCreatedBy()), true, stepName, title, false, false, false);
} }
for (String id : ids) { for (String id : ids) {
WorkflowUtils.sendSMS(Long.valueOf(id), Long.valueOf(flows.getCreatedBy()), false, stepName, title, false, false, false); // WorkflowUtils.sendSMS(Long.valueOf(id), Long.valueOf(flows.getCreatedBy()), false, stepName, title, false, false, false);
}
//项目立项保存当前委托人
if(!ObjectUtils.isEmpty(ids)&&flag==1){
Long businessId = flows.getBusinessId();//业务表id
if(!StringUtils.isEmpty(businessId)){
ProjectInfo projectInfo = projectInfoService.selectById(businessId);
if(!ObjectUtils.isEmpty(projectInfo)){
JSONObject ext = projectInfo.getExt();
ext.put(client,ids);
projectInfo.setExt(ext);
projectInfoService.updateById(projectInfo);
}
}
} }
} else { } else {
log.error(String.format("节点:%s 未找到审批人", name)); log.error(String.format("节点:%s 未找到审批人", name));
@ -234,8 +256,10 @@ public class MyTaskListener implements TaskListener {
} }
} }
/** /**
* 设置办公室主任节点 * 设置办公室主任节点
*
* @param aClass * @param aClass
* @param name * @param name
* @param id * @param id
@ -332,13 +356,55 @@ public class MyTaskListener implements TaskListener {
this.historyService = historyService; this.historyService = historyService;
} }
@Autowired private void setMainLeadere() {
private void setRepositoryService(RepositoryService repositoryService) { PersonalEvents personalEvents = new PersonalEvents();
this.repositoryService = repositoryService; }
private String setBranchLeaders(JSONObject ext, String name) {
if (!ObjectUtils.isEmpty(ext)) {
if (ext.containsKey("draftDeptName")) {
String deptNameSource = ext.getString("draftDeptName");
String deptName = deptNameSource.substring(0, deptNameSource.indexOf(">"));
String dept = deptNameSource.substring((deptName.length() + 1), deptNameSource.length());
if (StringNotNull.isNotEmpty(dept)) {//根据部门判断分管领导终审
switch (dept) {
case "网络技术部":
case "市场发展部":
case "服务产品部":
return "director";
case "战略规划部":
case "办公室":
case "人财中心":
case "财务中心":
return "depDirector";
}
}
}
}
return name;
}
/**
* 根据枚举类获取分管领导
*
* @param aClass
* @param name
* @param id
* @return
*/
private String setBranchLeaders(activitiEnum.activitiClass aClass, String name, Long id) {
switch (aClass) {
case init:
ProjectInfo info = projectInfoService.selectById(id);
name=setBranchLeaders(info.getExt(),name);
break;
}
return name;
} }
/** /**
* 设置分管领导 * 设置分管领导
*
* @param aClass * @param aClass
* @param name * @param name
* @param id * @param id

View File

@ -14,6 +14,7 @@ import com.xqopen.kehui.flows.service.IFlowsConfigurationService;
import com.xqopen.kehui.flows.service.IFlowsService; import com.xqopen.kehui.flows.service.IFlowsService;
import com.xqopen.kehui.personal.entity.PersonalMember; import com.xqopen.kehui.personal.entity.PersonalMember;
import com.xqopen.kehui.personal.service.IPersonalMemberService; import com.xqopen.kehui.personal.service.IPersonalMemberService;
import com.xqopen.kehui.project.entity.ProjectAssessmentIndicators;
import com.xqopen.kehui.project.entity.ProjectInfo; import com.xqopen.kehui.project.entity.ProjectInfo;
import com.xqopen.kehui.project.entity.ProjectQuarterlyEvaluation; import com.xqopen.kehui.project.entity.ProjectQuarterlyEvaluation;
import com.xqopen.kehui.project.entity.ProjectWeekly; import com.xqopen.kehui.project.entity.ProjectWeekly;
@ -59,6 +60,7 @@ public class ProjectInitListener implements ExecutionListener {
IFlowsConfigurationService flowsConfigurationService; IFlowsConfigurationService flowsConfigurationService;
@Autowired @Autowired
ISystemUserLoginService userLoginService; ISystemUserLoginService userLoginService;
@Override @Override
@Transactional @Transactional
public void notify(DelegateExecution execution) throws Exception { public void notify(DelegateExecution execution) throws Exception {
@ -124,8 +126,10 @@ public class ProjectInitListener implements ExecutionListener {
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
jsonObject.put("projectManager", getSystemUserLogin(projectManager).getId()); jsonObject.put("projectManager", getSystemUserLogin(projectManager).getId());
jsonObject.put("projectAdmin", getSystemUserLogin(String.valueOf(projectAdmin.get(1))).getId()); jsonObject.put("projectAdmin", getSystemUserLogin(String.valueOf(projectAdmin.get(1))).getId());
jsonObject.put("branchLeaders",getSystemUserLogin(String.valueOf(branchLeaders.get(1))).getId()); jsonObject.put("branchLeaders", branchLeaders.get(0));
jsonObject.put("MainLeader",getSystemUserLogin(String.valueOf(MainLeader.get(1))).getId()); jsonObject.put("MainLeader", MainLeader.get(0));
// jsonObject.put("branchLeaders",getSystemUserLogin(String.valueOf(branchLeaders.get(1))).getId());
// jsonObject.put("MainLeader",getSystemUserLogin(String.valueOf(MainLeader.get(1))).getId());
// jsonObject.put("executor",getSystemUserLogin(projectManager).getId()); // jsonObject.put("executor",getSystemUserLogin(projectManager).getId());
String executor = getExecutor(); String executor = getExecutor();
StringBuffer stringBuffer = new StringBuffer(executor); StringBuffer stringBuffer = new StringBuffer(executor);
@ -159,12 +163,28 @@ public class ProjectInitListener implements ExecutionListener {
PersonalMember personalMember = personalMemberService.selectOne(memberEntityWrapper); PersonalMember personalMember = personalMemberService.selectOne(memberEntityWrapper);
if (!ObjectUtils.isEmpty(personalMember)) { if (!ObjectUtils.isEmpty(personalMember)) {
infoExt.put("isOffice", "0"); infoExt.put("isOffice", "0");
} } else {
else{
infoExt.put("isOffice", "1"); infoExt.put("isOffice", "1");
} }
} }
if(!StringUtils.isEmpty(projectInfo.getId()))projectInfoService.updateById(projectInfo); if (!StringUtils.isEmpty(projectInfo.getId())) {
projectInfoService.updateById(projectInfo);
//批量给项目季度指标表增加分管领导和主要领导
EntityWrapper<ProjectAssessmentIndicators> assessmentIndicatorsEntityWrapper = new EntityWrapper<>();
assessmentIndicatorsEntityWrapper.eq("is_deleted", "0");
assessmentIndicatorsEntityWrapper.eq("project_id", projectInfo.getId());
List<ProjectAssessmentIndicators> indicatorsList = projectAssessmentIndicatorsService.selectList(assessmentIndicatorsEntityWrapper);
if (!ObjectUtils.isEmpty(indicatorsList)) {
indicatorsList.forEach(a->{
JSONObject aExt = a.getExt();
aExt.put("branchLeaders",branchLeaders.get(0));
aExt.put("MainLeader",MainLeader.get(0));
a.setExt(aExt);
});
projectAssessmentIndicatorsService.updateAllColumnBatchById(indicatorsList);
}
}
// } // }
} }
} }
@ -175,6 +195,7 @@ public class ProjectInitListener implements ExecutionListener {
throw new XQException(ErrorCode.PROJECTINFO_EXCEPTION_ERROR, null); throw new XQException(ErrorCode.PROJECTINFO_EXCEPTION_ERROR, null);
} }
} }
private SystemUserLogin getSystemUserLogin(String name) { private SystemUserLogin getSystemUserLogin(String name) {
SystemUserLogin systemUserLogin = new SystemUserLogin(); SystemUserLogin systemUserLogin = new SystemUserLogin();
if (!StringUtils.isEmpty(name)) { if (!StringUtils.isEmpty(name)) {
@ -187,6 +208,7 @@ public class ProjectInitListener implements ExecutionListener {
/** /**
* 获取委托人 * 获取委托人
*
* @return * @return
*/ */
private String getExecutor() { private String getExecutor() {

View File

@ -68,19 +68,6 @@ public class ProjectAssessmentIndicatorsController implements ProjectAssessmentI
@PostMapping(Api.PROJECT_QUARTERLY_EVALUATION_QUARTER_LIST) @PostMapping(Api.PROJECT_QUARTERLY_EVALUATION_QUARTER_LIST)
public String quarterList(@RequestHeader Long userId, @RequestBody Map<String, Object> map) throws XQException { public String quarterList(@RequestHeader Long userId, @RequestBody Map<String, Object> map) throws XQException {
try { try {
// ProjectAssessmentIndicators indicators = pageNoUtil.getT();
// EntityWrapper<ProjectAssessmentIndicators> wrapper = new EntityWrapper<>();
// wrapper.eq("is_deleted","0");
// Long projectId = indicators.getProjectId();
// if(!ObjectUtils.isEmpty(projectId)){
// wrapper.eq("project_id",projectId);
// }
// wrapper.and("ext_->> 'executor' like " + "'%" + userId + "%'");
// wrapper.groupBy("quarter");
// wrapper.groupBy("project_id");
// wrapper.groupBy("ext_->>'taskName'");
// wrapper.setSqlSelect("quarter,AVG((ext_->>'sum')::FLOAT),project_id,ext_->>'taskName' ");
// List<Map<String, Object>> maps = indicatorsService.selectMaps(wrapper);
map.put("userId", userId); map.put("userId", userId);
map.put("projectId", Long.parseLong(String.valueOf(map.get("projectId")))); map.put("projectId", Long.parseLong(String.valueOf(map.get("projectId"))));
List<Map<String, Object>> maps = indicatorsService.getQuarterList(map); List<Map<String, Object>> maps = indicatorsService.getQuarterList(map);

View File

@ -206,8 +206,8 @@ public class ProjectInitComtroller implements ProjectInitApi {
if (!ObjectUtils.isEmpty(initDto)) { if (!ObjectUtils.isEmpty(initDto)) {
JSONObject ext = info.getExt(); JSONObject ext = info.getExt();
String projectAdmin = String.valueOf(((ArrayList) ext.get("projectAdmin")).get(1)); String projectAdmin = String.valueOf(((ArrayList) ext.get("projectAdmin")).get(1));
String branchLeaders = String.valueOf(((ArrayList) ext.get("branchLeaders")).get(1)); // String branchLeaders = String.valueOf(((ArrayList) ext.get("branchLeaders")).get(1));
String MainLeader = String.valueOf(((ArrayList) ext.get("MainLeader")).get(1)); // String MainLeader = String.valueOf(((ArrayList) ext.get("MainLeader")).get(1));
String projectManagerData = String.valueOf(((ArrayList) ext.get("projectManagerData")).get(1)); String projectManagerData = String.valueOf(((ArrayList) ext.get("projectManagerData")).get(1));
List<ProjectAssessmentIndicators> membersList = initDto.getMembersList(); List<ProjectAssessmentIndicators> membersList = initDto.getMembersList();
if (!membersList.isEmpty()) { if (!membersList.isEmpty()) {
@ -216,8 +216,8 @@ public class ProjectInitComtroller implements ProjectInitApi {
jsonObject.put("taskName", "季度审核填报"); jsonObject.put("taskName", "季度审核填报");
jsonObject.put("projectManager", jsonObject.get("executor")); jsonObject.put("projectManager", jsonObject.get("executor"));
jsonObject.put("projectAdmin", getSystemUserLogin(projectAdmin).getId()); jsonObject.put("projectAdmin", getSystemUserLogin(projectAdmin).getId());
jsonObject.put("branchLeaders", getSystemUserLogin(branchLeaders).getId()); // jsonObject.put("branchLeaders", getSystemUserLogin(branchLeaders).getId());
jsonObject.put("MainLeader", getSystemUserLogin(MainLeader).getId()); // jsonObject.put("MainLeader", getSystemUserLogin(MainLeader).getId());
membersList.forEach(item -> { membersList.forEach(item -> {
item.setProjectId(info.getId()); item.setProjectId(info.getId());
item.setCreatedBy(userId); item.setCreatedBy(userId);
@ -246,14 +246,14 @@ public class ProjectInitComtroller implements ProjectInitApi {
SystemUserLogin systemUserLogin = getSystemUserLogin(map, "projectAdmin"); SystemUserLogin systemUserLogin = getSystemUserLogin(map, "projectAdmin");
map.put("projectAdmin", systemUserLogin.getId()); map.put("projectAdmin", systemUserLogin.getId());
} }
if (!ObjectUtils.isEmpty(map.get("branchLeaders"))) { // if (!ObjectUtils.isEmpty(map.get("branchLeaders"))) {
SystemUserLogin systemUserLogin = getSystemUserLogin(map, "branchLeaders"); // SystemUserLogin systemUserLogin = getSystemUserLogin(map, "branchLeaders");
map.put("branchLeaders", systemUserLogin.getId()); // map.put("branchLeaders", systemUserLogin.getId());
} // }
if (!ObjectUtils.isEmpty(map.get("MainLeader"))) { // if (!ObjectUtils.isEmpty(map.get("MainLeader"))) {
SystemUserLogin systemUserLogin = getSystemUserLogin(map, "MainLeader"); // SystemUserLogin systemUserLogin = getSystemUserLogin(map, "MainLeader");
map.put("MainLeader", systemUserLogin.getId()); // map.put("MainLeader", systemUserLogin.getId());
} // }
} }
} }
} }

View File

@ -15,19 +15,16 @@
</userTask> </userTask>
<sequenceFlow id="SequenceFlow_0ssey7t" sourceRef="projectAdmin" targetRef="branchLeaders" /> <sequenceFlow id="SequenceFlow_0ssey7t" sourceRef="projectAdmin" targetRef="branchLeaders" />
<userTask id="projectAdmin" name="所项目管理员" activiti:assignee="${projectAdmin}"> <userTask id="projectAdmin" name="所项目管理员" activiti:assignee="${projectAdmin}">
<extensionElements>
<activiti:taskListener class="com.xqopen.kehui.flows.util.MyTaskListener" event="create" />
</extensionElements>
<incoming>SequenceFlow_1lquovt</incoming> <incoming>SequenceFlow_1lquovt</incoming>
</userTask> </userTask>
<sequenceFlow id="SequenceFlow_0884cd5" sourceRef="branchLeaders" targetRef="mainLeaders" /> <sequenceFlow id="SequenceFlow_0884cd5" sourceRef="branchLeaders" targetRef="MainLeader" />
<userTask id="branchLeaders" name="分管领导" activiti:assignee="${branchLeaders}"> <userTask id="branchLeaders" name="分管领导" >
<extensionElements> <extensionElements>
<activiti:taskListener class="com.xqopen.kehui.flows.util.MyTaskListener" event="create" /> <activiti:taskListener class="com.xqopen.kehui.flows.util.MyTaskListener" event="create" />
</extensionElements> </extensionElements>
<incoming>SequenceFlow_0ssey7t</incoming> <incoming>SequenceFlow_0ssey7t</incoming>
</userTask> </userTask>
<userTask id="mainLeaders" name="主要领导" activiti:assignee="${MainLeader}"> <userTask id="MainLeader" name="主要领导" >
<extensionElements> <extensionElements>
<activiti:taskListener class="com.xqopen.kehui.flows.util.MyTaskListener" event="create" /> <activiti:taskListener class="com.xqopen.kehui.flows.util.MyTaskListener" event="create" />
</extensionElements> </extensionElements>
@ -40,7 +37,7 @@
<activiti:executionListener delegateExpression="${weekly}" event="end" /> <activiti:executionListener delegateExpression="${weekly}" event="end" />
</extensionElements> </extensionElements>
</endEvent> </endEvent>
<sequenceFlow id="SequenceFlow_1ln01xk" sourceRef="mainLeaders" targetRef="end" /> <sequenceFlow id="SequenceFlow_1ln01xk" sourceRef="MainLeader" targetRef="end" />
</process> </process>
<bpmndi:BPMNDiagram id="BPMNDiagram_projectInit"> <bpmndi:BPMNDiagram id="BPMNDiagram_projectInit">
<bpmndi:BPMNPlane id="BPMNPlane_projectInit" bpmnElement="projectInit"> <bpmndi:BPMNPlane id="BPMNPlane_projectInit" bpmnElement="projectInit">
@ -85,7 +82,7 @@
<bpmndi:BPMNShape id="UserTask_1rkmxpl_di"> <bpmndi:BPMNShape id="UserTask_1rkmxpl_di">
<omgdc:Bounds x="712" y="93" width="100" height="80" /> <omgdc:Bounds x="712" y="93" width="100" height="80" />
</bpmndi:BPMNShape> </bpmndi:BPMNShape>
<bpmndi:BPMNShape id="UserTask_0j4v64z_di" bpmnElement="mainLeaders"> <bpmndi:BPMNShape id="UserTask_0j4v64z_di" bpmnElement="MainLeader">
<omgdc:Bounds x="872" y="93" width="100" height="80" /> <omgdc:Bounds x="872" y="93" width="100" height="80" />
</bpmndi:BPMNShape> </bpmndi:BPMNShape>
<bpmndi:BPMNShape id="EndEvent_0j87324_di" bpmnElement="end"> <bpmndi:BPMNShape id="EndEvent_0j87324_di" bpmnElement="end">