Browse Source

新增需求

master
zhouhaibin 2 weeks ago
parent
commit
54018fabe1
  1. 15
      huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouPlanController.java
  2. 10
      huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouPlaninfofileController.java
  3. 262
      huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/WorkflowController.java
  4. 2
      huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouPlaninfo.java
  5. 3
      huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouPlaninfoService.java
  6. 4
      huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouPlaninfofileService.java
  7. 3
      huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IWorkflowService.java
  8. 56
      huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfoServiceImpl.java
  9. 69
      huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfofileServiceImpl.java
  10. 43
      huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouUploadfileinfoServiceImpl.java
  11. 296
      huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/WorkflowServiceImpl.java

15
huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouPlanController.java

@ -177,4 +177,19 @@ public class HuzhouPlanController {
List<Select> taskNameTypeDict = planinfoService.getTaskNameTypeDict(projectid);
return Result.ok(taskNameTypeDict);
}
/**
* 获取项目计划的树形结构List
* @param projectid 项目id
* @param isArchive 是否已归档
* @param pageNo 页码
* @param pageSize 页数
* @return 返回值
*/
@GetMapping("/queryPlanInfoMainTimelineOffline")
public Result<?> queryPlanInfoMainTimelineOffline(String projectid,@RequestParam(name="current", defaultValue="1") Integer pageNo,
@RequestParam(name="pageSize", defaultValue="10") Integer pageSize){
ArrayList<HuzhouPlaninfoOV> planInfoMainTimelineList = planinfoService.queryPlanInfoMainTimelineOffline(projectid);
return Result.ok(planInfoMainTimelineList);
}
}

10
huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/HuzhouPlaninfofileController.java

@ -102,4 +102,14 @@ public class HuzhouPlaninfofileController {
String processName = planinfofileService.getProcessName(pid);
return Result.ok(processName);
}
@GetMapping("/getProcessDetailByPlaninfoid")
public Result<List<HashMap<String, Object>>> getProcessDetailByProjectTaskId(String planinfoid){
List<HashMap<String, Object>> list = planinfofileService.getProcessDetailByProjectTaskId(planinfoid);
return Result.ok(list);
}
@PostMapping("/setPlaninfoIsoffline")
public Result<String> setPlaninfoIsoffline(@RequestBody HuzhouPlaninfo planinfo){
planinfoService.setPlaninfoIsoffline(planinfo);
return Result.ok();
}
}

262
huzhou/src/main/java/com/easy/admin/modules/huzhou/controller/WorkflowController.java

@ -75,12 +75,10 @@ public class WorkflowController {
private IdentityService identityService;
@Autowired
private IHuzhouProcessinfoService processinfoService;
@Autowired
private SysUserService sysUserService;
@Autowired
private WorkflowMapper workflowMapper;
@Autowired
private SysUserRoleMapper userRoleMapper;
@Autowired
private IWorkflowService workflowService;
@GetMapping("/myTaskList")
@ -317,261 +315,7 @@ public class WorkflowController {
@GetMapping("/getprocessInfo")
public Result<List<HashMap<String,Object>>> getprocessInfo(String processInstanceId,String projectid, String stage
){
// 通过项目id查询流程id
if(projectid!=null){
LambdaQueryWrapper<HuzhouProcessinfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(HuzhouProcessinfo::getProjectid,projectid);
queryWrapper.eq(HuzhouProcessinfo::getProcessName,stage);
queryWrapper.orderByDesc(BaseEntity::getCreateDate);
HuzhouProcessinfo huzhouProcessinfo = processinfoService.list(queryWrapper).get(0);
processInstanceId=huzhouProcessinfo.getProcessinstanceid();
}
List<HistoricTaskInstance> list = historyService.createHistoricTaskInstanceQuery()
.processInstanceId(processInstanceId)
.orderByTaskCreateTime().asc().list();
List<HashMap<String,Object>> approvalEntityList = new ArrayList<>();
String approvalSuggestion = "";
HistoricVariableInstance historicVariableInstance = null;
List<Comment> commentList = null;
for( int i =0;i<list.size();i++) {
HistoricTaskInstance item = list.get(i);
HashMap<String, Object> hashMap = new HashMap<>();
commentList = taskService.getTaskComments(item.getId());
if (commentList != null && !commentList.isEmpty()) {
approvalSuggestion = commentList.get(0).getFullMessage();
} else {
approvalSuggestion = "";
}
Map<String, Object> taskLocalVariables = item.getTaskLocalVariables();
//获取当前节点的任务变量
List<HistoricVariableInstance> variablelist = historyService.createHistoricVariableInstanceQuery()
.taskId(item.getId())
.list();
if (variablelist.size()>0) {
for (HistoricVariableInstance hisvar:variablelist) {
hashMap.put(hisvar.getVariableName(),hisvar.getValue());//approvalStatue
}
}
hashMap.put("operateDate", item.getEndTime());
String assignee = item.getAssignee();
hashMap.put("operator", assignee);
String nickname="";
if(StringUtils.isNotBlank(assignee)){
SysUser user = sysUserService.getById(assignee);
nickname = user.getNickname();
String phoneNumber = user.getPhoneNumber();
hashMap.put("operator", nickname);
hashMap.put("operatorPhone", phoneNumber);
}else{
continue;
}
hashMap.put("taskName", item.getName());
hashMap.put("comment", approvalSuggestion);
boolean isPut =true;
for (HashMap<String,Object> hash: approvalEntityList) {
String operator = hash.get("operator").toString();
if(StringUtils.isNotBlank(approvalSuggestion)&&approvalSuggestion.contains("撤回")){
if(operator.equals(nickname)){
hashMap.put("taskName",hash.get("taskName"));
}
}
//是否重复
Date operateDate = (Date) hash.get("operateDate");
Date endTime = item.getEndTime();
if(endTime!=null&&operateDate!=null){
long between = DateUtil.between(operateDate, endTime, DateUnit.SECOND);
if(operator.equals(nickname)&& between<5){
isPut =false;
}
}
}
if(isPut){
approvalEntityList.add(hashMap);
}
}
//获取未激活的审批人信息
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
.processInstanceId(processInstanceId)
.singleResult();
//说明流程未结束
if(processInstance!=null){
BpmnModel bpmnModel = repositoryService.getBpmnModel(processInstance.getProcessDefinitionId());
Collection<FlowElement> flowElements = bpmnModel.getProcesses().get(0).getFlowElements();
List<UserTask> userTaskList = new ArrayList<>();
for (FlowElement element : bpmnModel.getProcesses().get(0).getFlowElements()) {
if (element instanceof UserTask) {
UserTask userTask = (UserTask) element;
userTaskList.add(userTask);
}
}
for(HashMap<String, Object> lastUser:approvalEntityList){
if(processInstance.getProcessDefinitionKey().equals("createURT")){
if (!"1".equals(lastUser.get("approvalStatue"))) {
continue;
}
for (int i =0;i<userTaskList.size();i++ ) {
UserTask task=userTaskList.get(i);
// HashMap<String, Object> lastUser = approvalEntityList.get(approvalEntityList.size() - 1);//获取最后一个
Object taskName = lastUser.get("taskName");
boolean match = task.getName().equals(taskName);
if(match){
userTaskList.remove(task);
}
// else{
// userTaskList.remove(task);
// break;
// }
// i--;
}
}else{
// HistoricTaskInstance item = list.get(list.size()-1);
for (int i =0;i<userTaskList.size();i++ ) {
UserTask task=userTaskList.get(i);
// HashMap<String, Object> lastUser = approvalEntityList.get(approvalEntityList.size() - 1);//获取最后一个
Object taskName = lastUser.get("taskName");
boolean match = task.getName().equals(taskName);
if(match){
userTaskList.remove(task);
}
else {
break;
}
}
}
}
for (UserTask userTask: userTaskList ) {
HashMap<String, Object> hashMap = new HashMap<>();
List<String> candidateGroups = userTask.getCandidateGroups();
String assignee = userTask.getAssignee();
hashMap.put("taskName", userTask.getName());
if(candidateGroups.size()==0){
if(assignee==null){
//设置审批人名字
//说明任务没有被认领
//获取变量名称
List<String> candidateUsers = userTask.getCandidateUsers();
String candidateUsersString = candidateUsers.get(0);//${taskLeadingDepartment}
//正则表达式提取变量名
Pattern pattern = Pattern.compile("\\$\\{(.*?)\\}");
Matcher matcher = pattern.matcher(candidateUsersString);
if (matcher.find()) {
String groupName = matcher.group(1);// 提取大括号中的内容
// 获取所有变量
Map<String, Object> variables = runtimeService.getVariables(processInstanceId);
Object variable = runtimeService.getVariable(processInstanceId, groupName);
if(variable instanceof String){
String startUserid = (String)variable;
SysUser user = sysUserService.getById(startUserid);
String nickname = user.getNickname();
String phoneNumber = user.getPhoneNumber();
hashMap.put("operator", nickname);
hashMap.put("operatorPhone", phoneNumber);
}else{
List<String> variableValue = (List<String>)variable;
String name = "";
String phone = "";
for (String id:variableValue
) {
SysUser user = sysUserService.getById(id);
String nickname = user.getNickname();
String phoneNumber = user.getPhoneNumber();
name=name+nickname+",";
phone=phone+phoneNumber+",";
}
hashMap.put("operator", name.substring(0,name.length()-1));
hashMap.put("operatorPhone", phone.substring(0,phone.length()-1));
if(userTask.getName().equals("总咨询单位")){
hashMap.put("operatorPhone", "18478831015");
}
}
}
}else{
SysUser user = sysUserService.getById(assignee);
String nickname = user.getNickname();
String phoneNumber = user.getPhoneNumber();
hashMap.put("operator", nickname);
hashMap.put("operatorPhone", phoneNumber);
}
}else{
LambdaQueryWrapper<SysUserRole> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysUserRole::getRoleId,candidateGroups.get(0));
List<SysUserRole> sysUserRoles = userRoleMapper.selectList(queryWrapper);
String name="";
String phone="";
if(sysUserRoles.size()>0){
for (SysUserRole userRole:sysUserRoles){
SysUser user = sysUserService.getById(userRole.getUserId());
String nickname = user.getNickname();
String phoneNumber = user.getPhoneNumber();
name=name+nickname+",";
phone=phone+phoneNumber+",";
}
}
if(StringUtils.isNotBlank(name)){
name=name.substring(0,name.length()-1);
phone=phone.substring(0,phone.length()-1);
}
hashMap.put("operator", name);
hashMap.put("operatorPhone", phone);
if(userTask.getName().equals("总咨询单位")){
hashMap.put("operatorPhone", "18478831015");
}
}
Boolean isrecall = true;
for (HashMap<String,Object> hash: approvalEntityList) {
String operator = hash.get("operator").toString();//历史任务
String nickname = hashMap.get("operator").toString();//当前任务
String taskName= hashMap.get("taskName").toString();//当前任务
if(operator.equals(nickname)&&hash.get("operateDate")==null&&taskName.equals(hash.get("taskName"))){
isrecall = false;
}
}
if(isrecall){
approvalEntityList.add(hashMap);
}
}
}
// 使用 Stream 对列表进行排序
List<HashMap<String, Object>> sortedList = approvalEntityList.stream()
.sorted((o1, o2) -> {
Date d1 = (Date) o1.get("operateDate");
Date d2 = (Date) o2.get("operateDate");
// 如果 d1 是 null 或不存在,排在后面
if (d1 == null && d2 != null) {
return 1;
}
// 如果 d2 是 null 或不存在,排在后面
if (d1 != null && d2 == null) {
return -1;
}
// 如果两者都为 null 或两者都不为 null,按照日期排序
if (d1 == null && d2 == null) {
return 0;
}
return d1.compareTo(d2);
})
.collect(Collectors.toList());
if(list.size()>0&&list.get(0).getProcessDefinitionId().contains("createURT")) {
sortedList.forEach(hashMap -> {
hashMap.put("operatorPhone", "");
});
}
List<HashMap<String,Object>> sortedList=workflowService.getprocessInfo(processInstanceId,projectid,stage);
return Result.OK(sortedList);
}
@GetMapping("/getProcessInstanceIdByProid")

2
huzhou/src/main/java/com/easy/admin/modules/huzhou/entity/HuzhouPlaninfo.java

@ -63,7 +63,7 @@ public class HuzhouPlaninfo extends BaseEntity implements Serializable {
private String superior;
private String isfinish;
private String groupId;
private String isoffline;
}

3
huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouPlaninfoService.java

@ -109,4 +109,7 @@ public interface IHuzhouPlaninfoService extends IService<HuzhouPlaninfo> {
Integer getStartedProjectNum(List<String> projectIds);
ArrayList<HuzhouPlaninfoOV> queryPlanInfoMainTimelineOffline(String projectid);
void setPlaninfoIsoffline(HuzhouPlaninfo planinfoid);
}

4
huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IHuzhouPlaninfofileService.java

@ -6,6 +6,8 @@ import com.easy.admin.modules.huzhou.entity.HuzhouPlaninfofile;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
public interface IHuzhouPlaninfofileService extends IService<HuzhouPlaninfofile> {
Page<HuzhouPlaninfofile> getplanFilePageList(HuzhouPlaninfofile planinfofile, Integer pageNo, Integer pageSize);
@ -19,4 +21,6 @@ public interface IHuzhouPlaninfofileService extends IService<HuzhouPlaninfofile>
void planREUploadFile(MultipartFile[] files, String planinfoid) throws IOException;
List<HashMap<String, Object>> getProcessDetailByProjectTaskId(String planinfoid);
}

3
huzhou/src/main/java/com/easy/admin/modules/huzhou/service/IWorkflowService.java

@ -8,6 +8,8 @@ import com.easy.admin.modules.huzhou.entity.WorkflowBaseInfo;
import com.easy.admin.modules.huzhou.vo.WorkflowActionParamOV;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public interface IWorkflowService {
@ -43,4 +45,5 @@ public interface IWorkflowService {
*/
Page<ActivitiTask> select(ActivitiTask activitiTask, Page<ActivitiTask> page);
List<HashMap<String, Object>> getprocessInfo(String processInstanceId, String projectid, String stage);
}

56
huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfoServiceImpl.java

@ -1032,4 +1032,60 @@ public class HuzhouPlaninfoServiceImpl extends ServiceImpl<HuzhouPlaninfoMapper,
Integer result = planinfoMapper.getStartedProjectNum(projectIds);
return result;
}
@Override
public ArrayList<HuzhouPlaninfoOV> queryPlanInfoMainTimelineOffline(String projectid) {
//查询父计划
LambdaQueryWrapper<HuzhouPlaninfo> planinfoLambdaQueryWrapper = new LambdaQueryWrapper<>();
planinfoLambdaQueryWrapper.eq(HuzhouPlaninfo::getProjectId,projectid);
planinfoLambdaQueryWrapper.eq(HuzhouPlaninfo::getSuperior,"0");
planinfoLambdaQueryWrapper.orderByAsc(HuzhouPlaninfo::getTaskLevel);
List<HuzhouPlaninfo> huzhouPlaninfoList = this.list(planinfoLambdaQueryWrapper);
ArrayList<HuzhouPlaninfoOV> mapArrayList = new ArrayList<>();
long totalCount =0; //计划总数量
long totalFinishCount =0;//已完成的数量
for (HuzhouPlaninfo info:huzhouPlaninfoList) {
HuzhouPlaninfoOV huzhouPlaninfoOV = new HuzhouPlaninfoOV();
BeanUtils.copyProperties(info,huzhouPlaninfoOV);
//当前计划如果在流程中,判断是否可编辑
HuzhouPlaninfoOV setchilddata = setchild(huzhouPlaninfoOV);
if("1".equals(setchilddata.getIsfinish())){
String isEdit = getPlanFileApprovalInfoByPlaninfoId(setchilddata.getId()).get("isEdit");
setchilddata.setIsEdit(isEdit);
}
String taskLevel = info.getTaskLevel();
//查询任务整体进度情况
LambdaQueryWrapper<HuzhouPlaninfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.likeRight(HuzhouPlaninfo::getTaskLevel,taskLevel+".");
queryWrapper.eq(HuzhouPlaninfo::getProjectId,projectid);
//所有:所有下级还要加他自己
long count = this.count(queryWrapper);
//查询完成的数量
queryWrapper.eq(HuzhouPlaninfo::getIsoffline,"1");
long finishCount = this.count(queryWrapper);
totalCount+=count;
totalFinishCount+=finishCount;
BigDecimal a = new BigDecimal(count);
BigDecimal b = new BigDecimal(finishCount);
String percent = b.divide(a, 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)).toString();
percent = percent.substring(0,percent.indexOf("."));
setchilddata.setPercent(percent);
mapArrayList.add(setchilddata);
}
String totalPercent="0";
if(totalCount>0){
totalPercent = new BigDecimal(totalFinishCount).divide(new BigDecimal(totalCount), 2, BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100)).toString();
totalPercent = totalPercent.substring(0,totalPercent.indexOf("."));
mapArrayList.get(0).setTotalPercent(totalPercent);
}else{
totalPercent="0";
}
return mapArrayList;
}
@Override
public void setPlaninfoIsoffline(HuzhouPlaninfo planinfo) {
planinfoMapper.updateById(planinfo);
}
}

69
huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouPlaninfofileServiceImpl.java

@ -1,5 +1,7 @@
package com.easy.admin.modules.huzhou.service.impl;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.excel.util.StringUtils;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@ -22,6 +24,10 @@ import com.easy.admin.sys.model.SysDict;
import com.easy.admin.sys.service.SysDictService;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.activiti.bpmn.model.BpmnModel;
import org.activiti.bpmn.model.FlowElement;
import org.activiti.bpmn.model.UserTask;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.runtime.ProcessInstance;
@ -33,6 +39,7 @@ import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;
@Service
@Transactional
@ -61,6 +68,8 @@ public class HuzhouPlaninfofileServiceImpl extends ServiceImpl<HuzhouPlaninfofil
private HuzhouContractinfoMapper contractinfoMapper;
@Autowired
private HuzhouProjectinfoMoneyMapper projectinfoMoneyMapper;
@Autowired
private RepositoryService repositoryService;
// private String[] names ={"可研技术审查报告(初稿)确认","可研技术审查报告(复审稿)确认","可研技术审查报告(终稿)确认","造价评估报告确认","可行性研究报告审批(发改)","合同签订","首付支付","初验阶段","终验阶段","初步设计审批"};
private String[] names ={"合同签订","首付支付","初验阶段","终验阶段","初步设计审批"};
@ -576,4 +585,64 @@ public class HuzhouPlaninfofileServiceImpl extends ServiceImpl<HuzhouPlaninfofil
planinfoService.updateById(huzhouPlaninfo);
}
}
@Override
public List<HashMap<String, Object>> getProcessDetailByProjectTaskId(String planinfoid){
LambdaQueryWrapper<HuzhouProcessinfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(HuzhouProcessinfo::getProjectid,planinfoid);
queryWrapper.eq(HuzhouProcessinfo::getProcessstatus,"1");
List<HuzhouProcessinfo> processinfos = processinfoService.list(queryWrapper);
if(processinfos.size()==0){
return null;
}
HuzhouProcessinfo processinfo = processinfos.get(0);
String processName = processinfo.getProcessName();
String processId = processinfo.getProcessinstanceid();//获取流程id
List<HashMap<String, Object>> processInfoList = workflowService.getprocessInfo(processId, null, null);
//去重,保留最新的taskName
List<HashMap<String, Object>> filteredList = processInfoList.stream()
.collect(Collectors.toMap(
item -> (String) item.get("taskName"), // 以 taskName 作为键
item -> item, // 以 item 作为值
(oldItem, newItem) -> newItem // 遇到重复键时,保留新值
))
.values()
.stream()
.collect(Collectors.toList());
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
.processInstanceId(processId)
.singleResult();
BpmnModel bpmnModel = repositoryService.getBpmnModel(processInstance.getProcessDefinitionId());
// Collection<FlowElement> flowElements = bpmnModel.getProcesses().get(0).getFlowElements();
// List<UserTask> userTaskList = new ArrayList<>();
List<HashMap<String, Object>> resultList = new ArrayList<>();
for (FlowElement element : bpmnModel.getProcesses().get(0).getFlowElements()) {
if (element instanceof UserTask) {
UserTask userTask = (UserTask) element;
String name = userTask.getName();
HashMap<String, Object> hashmap = new HashMap<>();
hashmap.put("taskName", name);
hashmap.put("isdangqian","0");
HashMap<String, Object> result = filteredList.stream()
.filter(map -> name.equals(map.get("taskName"))).findFirst().orElse(null);
if(result!=null&&result.get("approvalStatue")!=null&&"1".equals(result.get("approvalStatue"))){
hashmap.put("approvalStatue",result.get("approvalStatue"));
}else{
if(result.get("isdangqian")!=null){
hashmap.put("isdangqian","1");
}
hashmap.put("approvalStatue","0");
Date createDate = processinfo.getCreateDate();
long days = DateUtil.between(createDate,new Date(), DateUnit.DAY);
hashmap.put("timedays",days);
}
resultList.add(hashmap);
}
}
return resultList;
}
}

43
huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/HuzhouUploadfileinfoServiceImpl.java

@ -8,13 +8,13 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.easy.admin.auth.model.SysUser;
import com.easy.admin.auth.service.SysUserService;
import com.easy.admin.common.core.exception.EasyException;
import com.easy.admin.common.util.CommonUtils;
import com.easy.admin.modules.huzhou.dao.*;
import com.easy.admin.modules.huzhou.entity.*;
import com.easy.admin.modules.huzhou.service.IHuzhouPlaninfoService;
import com.easy.admin.modules.huzhou.service.IHuzhouProcessinfoService;
import com.easy.admin.modules.huzhou.service.IHuzhouUploadfileinfoService;
import com.easy.admin.modules.huzhou.service.IWorkflowService;
import com.easy.admin.modules.huzhou.service.*;
import com.easy.admin.sys.model.SysDict;
import com.easy.admin.sys.service.SysDictService;
import com.easy.admin.util.ShiroUtil;
import org.activiti.engine.IdentityService;
import org.activiti.engine.RuntimeService;
@ -68,7 +68,8 @@ public class HuzhouUploadfileinfoServiceImpl extends ServiceImpl<HuzhouUploadfil
private HuzhouPlaninfofileMapper planinfofileMapper;
@Autowired
private HuzhouProjectinfoMapper huzhouProjectinfoMapper;
@Autowired
private SysDictService sysDictService;
public void modifyUploadFile(MultipartFile[] files, String projectid, String stage) throws IOException {
LambdaUpdateWrapper<HuzhouUploadfileinfo> queryWrapper = new LambdaUpdateWrapper<>();
@ -205,7 +206,8 @@ public class HuzhouUploadfileinfoServiceImpl extends ServiceImpl<HuzhouUploadfil
huzhouProjectinfo.setUrtEstimatedAmount(urtEstimatedAmount);
huzhouProjectinfoMapper.updateById(huzhouProjectinfo);
//
String adminDivision = huzhouProjectinfoMapper.selectById(projectId).getAdminDivision();
HuzhouProjectinfo projectinfo=huzhouProjectinfoMapper.selectById(projectId);
String adminDivision = projectinfo.getAdminDivision();
WorkFlow workFlow=null;
if(adminDivision.equals("市本级")){
workFlow = workflowService.createFlow("createURT", planinfoid);//创建流程createURT
@ -223,10 +225,37 @@ public class HuzhouUploadfileinfoServiceImpl extends ServiceImpl<HuzhouUploadfil
}
String taskId = workFlow.getTask().getId();
String processInstanceId = workFlow.getProcessInstanceId();
Map<String, Object> variables = new HashMap<>();
String superLeader = "";
//如果项目信息为空说明是子项目
if(projectinfo==null){
throw new EasyException("未找到项目的任务牵头处室信息");
}else {
}
superLeader=projectinfo.getSuperLeader();
//获取上级指导室中文名称
SysDict dict = sysDictService.getDictByCode("superLeader", superLeader);
String dictName = dict.getName();
//上级指导室中文名称查询角色有哪些人
List<HashMap<String, String>> userDictByRoles = userService.getUserDictByRoles(dictName);
ArrayList<String> strings = new ArrayList<>();
if(userDictByRoles==null||userDictByRoles.size()==0){
String error = "任务牵头处室"+dictName+"负责人未找到";
throw new EasyException(error);
}
for (HashMap<String, String> map:userDictByRoles
) {
String userid = map.get("value");
strings.add(userid);
}
variables.put("taskLeadingDepartment",strings);
runtimeService.setVariable(processInstanceId, "taskLeadingDepartment", strings);//设置第四个人变量信息
//发起人节点处理
taskService.setVariableLocal(taskId,"approvalStatue","1");//添加审批状态 通过
String comment = "同意";
taskService.addComment(taskId,processInstanceId,comment);//添加审批意见
taskService.complete(taskId);
taskService.complete(taskId, variables);
// saveFileAndFileInfo(files, planinfoid, s);
this.modifyUploadFileByURT(files,planinfoid,"1","1");

296
huzhou/src/main/java/com/easy/admin/modules/huzhou/service/impl/WorkflowServiceImpl.java

@ -1,9 +1,12 @@
package com.easy.admin.modules.huzhou.service.impl;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.easy.admin.activiti.constant.ActivitiTaskStatusConst;
import com.easy.admin.activiti.constant.status.ActivitiSuspensionStatus;
@ -13,7 +16,10 @@ import com.easy.admin.activiti.model.ActivitiTask;
import com.easy.admin.activiti.service.ActivitiModelService;
import com.easy.admin.activiti.service.ActivitiProcessDefinitionService;
import com.easy.admin.activiti.service.ActivitiTaskService;
import com.easy.admin.auth.dao.SysUserRoleMapper;
import com.easy.admin.auth.model.SysUser;
import com.easy.admin.auth.model.SysUserRole;
import com.easy.admin.auth.service.SysUserService;
import com.easy.admin.common.api.vo.Result;
import com.easy.admin.common.core.common.pagination.Page;
@ -21,15 +27,12 @@ import com.easy.admin.common.core.common.select.Select;
import com.easy.admin.common.core.util.ToolUtil;
import com.easy.admin.modules.huzhou.dao.HuzhouProcessinfoMapper;
import com.easy.admin.modules.huzhou.dao.WorkflowMapper;
import com.easy.admin.modules.huzhou.entity.HuzhouProcessinfo;
import com.easy.admin.modules.huzhou.entity.*;
import com.easy.admin.modules.huzhou.entity.HuzhouProjectinfo;
import com.easy.admin.modules.huzhou.service.IHuzhouProcessinfoService;
import com.easy.admin.modules.huzhou.vo.WorkflowActionParamOV;
import com.easy.admin.util.ShiroUtil;
import com.easy.admin.modules.huzhou.entity.WorkFlow;
import com.easy.admin.modules.huzhou.entity.WorkflowBaseInfo;
import com.easy.admin.modules.huzhou.service.IWorkflowService;
import org.activiti.bpmn.model.*;
import org.activiti.engine.HistoryService;
@ -39,6 +42,7 @@ import org.activiti.engine.TaskService;
import org.activiti.engine.history.HistoricActivityInstance;
import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.history.HistoricTaskInstanceQuery;
import org.activiti.engine.history.HistoricVariableInstance;
import org.activiti.engine.impl.identity.Authentication;
import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
import org.activiti.engine.impl.pvm.PvmTransition;
@ -57,6 +61,8 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
@Service
@ -80,11 +86,14 @@ public class WorkflowServiceImpl implements IWorkflowService {
@Autowired
private WorkflowMapper workflowMapper;
@Autowired
private IHuzhouProcessinfoService processinfoService;
@Autowired
private ActivitiTaskMapper activitiTaskMapper;
@Autowired
private SysUserService sysUserService;
@Autowired
private SysUserRoleMapper userRoleMapper;
public WorkFlow createFlow(String processDefinitionKey,String id){
String definitionId = activitiModelService.selectProcessDefinitionId(processDefinitionKey);
ActivitiProcessDefinitionVO activitiProcessDefinitionVO = new ActivitiProcessDefinitionVO();
@ -215,10 +224,20 @@ public class WorkflowServiceImpl implements IWorkflowService {
// outRes.put("showApprovalForm",true);
workflowActionParamOV.setShowApprovalForm(true);
}
if(filteredList.size()==0&&taskInstance.getProcessDefinitionId().contains("createURT")){
if(taskInstance.getName().equals("发起人")){
Select select = new Select();
select.setLabel("撤回");
select.setValue("2");
actionButtons.add(select);
workflowActionParamOV.setButtons(actionButtons);
workflowActionParamOV.setShowApprovalForm(true);
}
}
}
}
}
}else{
//代办 发起人可以作废,还要可以修改,加一个修改表示(前端也行)
workflowActionParamOV.setButtons(actionButtons);
@ -428,4 +447,271 @@ public class WorkflowServiceImpl implements IWorkflowService {
return page;
}
@Override
public List<HashMap<String, Object>> getprocessInfo(String processInstanceId, String projectid, String stage) {
//通过项目id查询流程id
List<String> currentTaskName=new ArrayList<>();
if(projectid!=null){
LambdaQueryWrapper<HuzhouProcessinfo> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(HuzhouProcessinfo::getProjectid,projectid);
queryWrapper.eq(HuzhouProcessinfo::getProcessName,stage);
queryWrapper.orderByDesc(BaseEntity::getCreateDate);
HuzhouProcessinfo huzhouProcessinfo = processinfoService.list(queryWrapper).get(0);
processInstanceId=huzhouProcessinfo.getProcessinstanceid();
}
List<HistoricTaskInstance> list = historyService.createHistoricTaskInstanceQuery()
.processInstanceId(processInstanceId)
.orderByTaskCreateTime().asc().list();
List<HashMap<String,Object>> approvalEntityList = new ArrayList<>();
String approvalSuggestion = "";
HistoricVariableInstance historicVariableInstance = null;
List<Comment> commentList = null;
for( int i =0;i<list.size();i++) {
HistoricTaskInstance item = list.get(i);
HashMap<String, Object> hashMap = new HashMap<>();
commentList = taskService.getTaskComments(item.getId());
if (commentList != null && !commentList.isEmpty()) {
approvalSuggestion = commentList.get(0).getFullMessage();
} else {
approvalSuggestion = "";
}
Map<String, Object> taskLocalVariables = item.getTaskLocalVariables();
//获取当前节点的任务变量
List<HistoricVariableInstance> variablelist = historyService.createHistoricVariableInstanceQuery()
.taskId(item.getId())
.list();
if (variablelist.size()>0) {
for (HistoricVariableInstance hisvar:variablelist) {
hashMap.put(hisvar.getVariableName(),hisvar.getValue());//approvalStatue
}
}else{
//当前人在处理
hashMap.put("isdangqian","1");
currentTaskName.add(item.getName());
}
hashMap.put("operateDate", item.getEndTime());
String assignee = item.getAssignee();
hashMap.put("operator", assignee);
String nickname="";
if(com.alibaba.excel.util.StringUtils.isNotBlank(assignee)){
SysUser user = sysUserService.getById(assignee);
nickname = user.getNickname();
String phoneNumber = user.getPhoneNumber();
hashMap.put("operator", nickname);
hashMap.put("operatorPhone", phoneNumber);
}else{
continue;
}
hashMap.put("taskName", item.getName());
hashMap.put("comment", approvalSuggestion);
boolean isPut =true;
for (HashMap<String,Object> hash: approvalEntityList) {
String operator = hash.get("operator").toString();
if(com.alibaba.excel.util.StringUtils.isNotBlank(approvalSuggestion)&&approvalSuggestion.contains("撤回")){
if(operator.equals(nickname)){
hashMap.put("taskName",hash.get("taskName"));
}
}
//是否重复
Date operateDate = (Date) hash.get("operateDate");
Date endTime = item.getEndTime();
if(endTime!=null&&operateDate!=null){
long between = DateUtil.between(operateDate, endTime, DateUnit.SECOND);
if(operator.equals(nickname)&& between<5){
isPut =false;
}
}
}
if(isPut){
approvalEntityList.add(hashMap);
}
}
//获取未激活的审批人信息
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
.processInstanceId(processInstanceId)
.singleResult();
//说明流程未结束
if(processInstance!=null){
BpmnModel bpmnModel = repositoryService.getBpmnModel(processInstance.getProcessDefinitionId());
Collection<FlowElement> flowElements = bpmnModel.getProcesses().get(0).getFlowElements();
List<UserTask> userTaskList = new ArrayList<>();
for (FlowElement element : bpmnModel.getProcesses().get(0).getFlowElements()) {
if (element instanceof UserTask) {
UserTask userTask = (UserTask) element;
userTaskList.add(userTask);
}
}
for(HashMap<String, Object> lastUser:approvalEntityList){
if(processInstance.getProcessDefinitionKey().equals("createURT")){
if (!"1".equals(lastUser.get("approvalStatue"))) {
continue;
}
for (int i =0;i<userTaskList.size();i++ ) {
UserTask task=userTaskList.get(i);
// HashMap<String, Object> lastUser = approvalEntityList.get(approvalEntityList.size() - 1);//获取最后一个
Object taskName = lastUser.get("taskName");
boolean match = task.getName().equals(taskName);
if(match){
userTaskList.remove(task);
}
// else{
// userTaskList.remove(task);
// break;
// }
// i--;
}
}else{
// HistoricTaskInstance item = list.get(list.size()-1);
for (int i =0;i<userTaskList.size();i++ ) {
UserTask task=userTaskList.get(i);
// HashMap<String, Object> lastUser = approvalEntityList.get(approvalEntityList.size() - 1);//获取最后一个
Object taskName = lastUser.get("taskName");
boolean match = task.getName().equals(taskName);
if(match){
userTaskList.remove(task);
}
else {
break;
}
}
}
}
for (UserTask userTask: userTaskList ) {
HashMap<String, Object> hashMap = new HashMap<>();
List<String> candidateGroups = userTask.getCandidateGroups();
String assignee = userTask.getAssignee();
hashMap.put("taskName", userTask.getName());
if(currentTaskName.contains(userTask.getName())){
hashMap.put("isdangqian","1");
}
if(candidateGroups.size()==0){
if(assignee==null){
//设置审批人名字
//说明任务没有被认领
//获取变量名称
List<String> candidateUsers = userTask.getCandidateUsers();
String candidateUsersString = candidateUsers.get(0);//${taskLeadingDepartment}
//正则表达式提取变量名
Pattern pattern = Pattern.compile("\\$\\{(.*?)\\}");
Matcher matcher = pattern.matcher(candidateUsersString);
if (matcher.find()) {
String groupName = matcher.group(1);// 提取大括号中的内容
// 获取所有变量
Map<String, Object> variables = runtimeService.getVariables(processInstanceId);
Object variable = runtimeService.getVariable(processInstanceId, groupName);
if(variable instanceof String){
String startUserid = (String)variable;
SysUser user = sysUserService.getById(startUserid);
String nickname = user.getNickname();
String phoneNumber = user.getPhoneNumber();
hashMap.put("operator", nickname);
hashMap.put("operatorPhone", phoneNumber);
}else{
List<String> variableValue = (List<String>)variable;
String name = "";
String phone = "";
for (String id:variableValue
) {
SysUser user = sysUserService.getById(id);
String nickname = user.getNickname();
String phoneNumber = user.getPhoneNumber();
name=name+nickname+",";
phone=phone+phoneNumber+",";
}
hashMap.put("operator", name.substring(0,name.length()-1));
hashMap.put("operatorPhone", phone.substring(0,phone.length()-1));
if(userTask.getName().equals("总咨询单位")){
hashMap.put("operatorPhone", "18478831015");
}
}
}
}else{
SysUser user = sysUserService.getById(assignee);
String nickname = user.getNickname();
String phoneNumber = user.getPhoneNumber();
hashMap.put("operator", nickname);
hashMap.put("operatorPhone", phoneNumber);
}
}else{
LambdaQueryWrapper<SysUserRole> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SysUserRole::getRoleId,candidateGroups.get(0));
List<SysUserRole> sysUserRoles = userRoleMapper.selectList(queryWrapper);
String name="";
String phone="";
if(sysUserRoles.size()>0){
for (SysUserRole userRole:sysUserRoles){
SysUser user = sysUserService.getById(userRole.getUserId());
String nickname = user.getNickname();
String phoneNumber = user.getPhoneNumber();
name=name+nickname+",";
phone=phone+phoneNumber+",";
}
}
if(com.alibaba.excel.util.StringUtils.isNotBlank(name)){
name=name.substring(0,name.length()-1);
phone=phone.substring(0,phone.length()-1);
}
hashMap.put("operator", name);
hashMap.put("operatorPhone", phone);
if(userTask.getName().equals("总咨询单位")){
hashMap.put("operatorPhone", "18478831015");
}
}
Boolean isrecall = true;
for (HashMap<String,Object> hash: approvalEntityList) {
String operator = hash.get("operator").toString();//历史任务
String nickname = hashMap.get("operator").toString();//当前任务
String taskName= hashMap.get("taskName").toString();//当前任务
if(operator.equals(nickname)&&hash.get("operateDate")==null&&taskName.equals(hash.get("taskName"))){
isrecall = false;
}
}
if(isrecall){
approvalEntityList.add(hashMap);
}
}
}
// 使用 Stream 对列表进行排序
List<HashMap<String, Object>> sortedList = approvalEntityList.stream()
.sorted((o1, o2) -> {
Date d1 = (Date) o1.get("operateDate");
Date d2 = (Date) o2.get("operateDate");
// 如果 d1 是 null 或不存在,排在后面
if (d1 == null && d2 != null) {
return 1;
}
// 如果 d2 是 null 或不存在,排在后面
if (d1 != null && d2 == null) {
return -1;
}
// 如果两者都为 null 或两者都不为 null,按照日期排序
if (d1 == null && d2 == null) {
return 0;
}
return d1.compareTo(d2);
})
.collect(Collectors.toList());
// if(list.size()>0&&list.get(0).getProcessDefinitionId().contains("createURT")) {
// sortedList.forEach(hashMap -> {
// hashMap.put("operatorPhone", "");
// });
// }
return sortedList;
}
}

Loading…
Cancel
Save