审批人员接口修改

This commit is contained in:
bonus 2025-06-25 10:31:00 +08:00
parent 03d7f690ba
commit ed0cc6355d
7 changed files with 500 additions and 300 deletions

View File

@ -51,4 +51,15 @@ public class WorkPeopleInfo {
@ApiModelProperty(value = "是否当前人审核")
private int isExamine;
@ApiModelProperty(value = "部门")
private long deptId;
@ApiModelProperty(value = "流程id")
private int flowId;
@ApiModelProperty(value = "角色")
private String roleIds;
@ApiModelProperty(value = "角色数组")
private String[] roleIdArray;
}

View File

@ -119,7 +119,7 @@ public class BmQrBoxServiceImpl implements BmQrBoxService {
boxBindList.removeIf(Objects::isNull);
boxInfoBindVo.setBindMaTotal(boxBindList.size());
boxBindList.removeIf(item -> null == item.getMaStatus());
boxBindList.removeIf(item -> !item.getMaStatus().equals(MaMachineStatusEnum.NEW_PURCHASE.getStatusName()));
boxBindList.removeIf(item -> !"新购待入库".equals(item.getMaStatus()));
if (Objects.nonNull(bmQrBoxInfo.getMaTypeId())) {
boxBindList.removeIf(item -> null == item.getMaTypeId() || !Objects.equals(item.getMaTypeId(), bmQrBoxInfo.getMaTypeId()));
}

View File

@ -166,4 +166,12 @@ public interface LeaseTaskMapper {
* @return 结果
*/
int insertWorkPeople(WorkPeopleInfo workPeopleInfo);
List<WorkPeopleInfo> selectWorkPeopleInfoList(WorkPeopleInfo info);
List<WorkPeopleInfo> selectUserListByRoleAndDept(WorkPeopleInfo param);
void updateWorkPeopleInfo(WorkPeopleInfo peopleInfo);
WorkPeopleInfo getWorkPeopleInfo(WorkPeopleInfo peopleInfo);
}

View File

@ -40,11 +40,13 @@ import com.bonus.material.work.domain.SysWorkflowRecordHistory;
import com.bonus.material.work.domain.SysWorkflowType;
import com.bonus.material.work.mapper.*;
import com.bonus.material.work.service.SysWorkflowRecordService;
import com.bonus.system.api.domain.SysUser;
import lombok.extern.slf4j.Slf4j;
import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.web.util.UriComponentsBuilder;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
@ -101,7 +103,7 @@ public class LeaseTaskServiceImpl implements ILeaseTaskService {
* @return 结果
*/
@Override
@Transactional
@Transactional(rollbackFor = Exception.class)
public AjaxResult insertLeaseApplyInfo(LeaseApplyRequestVo leaseApplyRequestVo) {
if (null == leaseApplyRequestVo.getLeaseApplyInfo()) {
return AjaxResult.error("请先填写领用任务信息");
@ -109,115 +111,176 @@ public class LeaseTaskServiceImpl implements ILeaseTaskService {
if (CollectionUtil.isEmpty(leaseApplyRequestVo.getLeaseApplyDetailsList())) {
return AjaxResult.error("请先添加领用任务物资明细");
}
leaseApplyRequestVo.getLeaseApplyInfo().setCreateTime(DateUtils.getNowDate());
leaseApplyRequestVo.getLeaseApplyInfo().setCreateBy(SecurityUtils.getLoginUser().getSysUser().getNickName());
leaseApplyRequestVo.getLeaseApplyInfo().setTaskDeptId(SecurityUtils.getLoginUser().getSysUser().getDeptId());
Long userId = SecurityUtils.getLoginUser().getUserid();
Long deptId = mapper.getDeptIdByUserId(userId);
LeaseDeptInfo leaseDeptInfo = new LeaseDeptInfo();
leaseDeptInfo = mapper.getDeptIdByParentId(deptId);
Long parentIdTemp = leaseDeptInfo.getParentId();
LeaseApplyInfo leaseApplyInfo = leaseApplyRequestVo.getLeaseApplyInfo();
SysUser sysUser = SecurityUtils.getLoginUser().getSysUser();
Date nowDate = DateUtils.getNowDate();
leaseApplyInfo.setCreateTime(nowDate);
leaseApplyInfo.setCreateBy(sysUser.getNickName());
leaseApplyInfo.setTaskDeptId(sysUser.getDeptId());
Long userId = sysUser.getUserId();
Long deptId = mapper.getDeptIdByUserId(userId);
String deptName = "";
while (Objects.nonNull(leaseDeptInfo)) {
parentIdTemp = leaseDeptInfo.getParentId();
String ancestors = leaseDeptInfo.getAncestors();
if (null != ancestors && StringUtils.countMatches(ancestors, ",") < 1) {
break;
}
if (null != ancestors && StringUtils.countMatches(ancestors, ",") == 1) {
deptName = leaseDeptInfo.getDeptName();
break;
}
LeaseDeptInfo leaseDeptInfo = new LeaseDeptInfo();
Long parentIdTemp = deptId;
final int MAX_LOOP = 10;
int loopCount = 0;
while (loopCount++ < MAX_LOOP) {
leaseDeptInfo = mapper.getDeptIdByParentId(parentIdTemp);
if (leaseDeptInfo == null) {
break;
}
String ancestors = leaseDeptInfo.getAncestors();
if (StringUtils.isNotBlank(ancestors)) {
int commaCount = StringUtils.countMatches(ancestors, ",");
if (commaCount < 1) {
break;
} else if (commaCount == 1) {
deptName = leaseDeptInfo.getDeptName();
break;
}
}
parentIdTemp = leaseDeptInfo.getParentId();
}
if(!"".equals(deptName)){
leaseApplyRequestVo.getLeaseApplyInfo().setCompanyId(leaseDeptInfo.getDeptId());
if (!"".equals(deptName)) {
leaseApplyInfo.setCompanyId(leaseDeptInfo.getDeptId());
}
try {
int newId = 0;
Integer statusFlag = leaseApplyRequestVo.getStatusFlag();
// 根据状态标志选择合适的状态
Integer taskStatus;
if (statusFlag != null && statusFlag == 0) {
taskStatus = LeaseTaskStatusEnum.LEASE_TASK_ZERO.getStatus();
} else {
taskStatus = LeaseTaskStatusEnum.LEASE_TASK_SUBMIT.getStatus();
}
int thisMonthMaxOrder = tmTaskMapper.getMonthMaxOrderByDate(DateUtils.getCurrentYear(), DateUtils.getCurrentMonth(), TmTaskTypeEnum.TM_TASK_LEASE_APPLY.getTaskTypeId());
String taskCode = leaseApplyRequestVo.getLeaseApplyInfo().getCode();
TmTask tmTask = new TmTask(null, TmTaskTypeEnum.TM_TASK_LEASE_APPLY.getTaskTypeId(),
Integer taskStatus = (statusFlag != null && statusFlag == 0)
? LeaseTaskStatusEnum.LEASE_TASK_ZERO.getStatus()
: LeaseTaskStatusEnum.LEASE_TASK_SUBMIT.getStatus();
int thisMonthMaxOrder = tmTaskMapper.getMonthMaxOrderByDate(
DateUtils.getCurrentYear(), DateUtils.getCurrentMonth(),
TmTaskTypeEnum.TM_TASK_LEASE_APPLY.getTaskTypeId());
String taskCode = leaseApplyInfo.getCode();
TmTask tmTask = new TmTask(null,
TmTaskTypeEnum.TM_TASK_LEASE_APPLY.getTaskTypeId(),
taskStatus,
leaseApplyRequestVo.getLeaseApplyInfo().getCompanyId(),thisMonthMaxOrder + 1, taskCode);
tmTask.setCreateTime(DateUtils.getNowDate());
tmTask.setCreateBy(SecurityUtils.getLoginUser().getSysUser().getNickName());
tmTask.setTaskDeptId(SecurityUtils.getLoginUser().getSysUser().getDeptId());
leaseApplyInfo.getCompanyId(), thisMonthMaxOrder + 1, taskCode);
tmTask.setCreateTime(nowDate);
tmTask.setCreateBy(sysUser.getNickName());
tmTask.setTaskDeptId(sysUser.getDeptId());
tmTaskMapper.insertTmTask(tmTask);
leaseApplyRequestVo.getLeaseApplyInfo().setTaskId(tmTask.getTaskId());
leaseApplyRequestVo.getLeaseApplyInfo().setCode(taskCode);
leaseApplyInfo.setTaskId(tmTask.getTaskId());
leaseApplyInfo.setCode(taskCode);
/** 设置审批人为默认的董班长 --防止代码冲突 **/
// 设置审批人为默认的董班长
Long peopleId = leaseApplyInfoMapper.getDirectAuditBy();
leaseApplyRequestVo.getLeaseApplyInfo().setDirectAuditBy(peopleId);
/** 设置审批人为默认的董班长 --防止代码冲突 **/
leaseApplyInfo.setDirectAuditBy(peopleId);
int count = mapper.insertLeaseApplyInfo(leaseApplyRequestVo.getLeaseApplyInfo());
if (!CollectionUtils.isEmpty(leaseApplyRequestVo.getLeaseApplyInfo().getBmFileInfos())) {
leaseApplyRequestVo.getLeaseApplyInfo().getBmFileInfos().forEach(bmFileInfo -> {
bmFileInfo.setTaskType(2);
bmFileInfo.setTaskId(tmTask.getTaskId());
bmFileInfo.setModelId(leaseApplyRequestVo.getLeaseApplyInfo().getId());
bmFileInfo.setFileType(5L);
bmFileInfo.setCreateBy(SecurityUtils.getLoginUser().getSysUser().getNickName());
bmFileInfo.setCreateTime(DateUtils.getNowDate());
bmFileInfoMapper.insertBmFileInfo(bmFileInfo);
});
}
if (statusFlag!= null && statusFlag == 0) {
newId = sysWorkflowRecordService.addSysWorkflowRecord(tmTask.getTaskId().intValue(),taskCode,19);
int count = mapper.insertLeaseApplyInfo(leaseApplyInfo);
handleBmFileInfos(leaseApplyInfo, sysUser, nowDate, tmTask);
int newId = 0;
if (statusFlag != null && statusFlag == 0) {
newId = sysWorkflowRecordService.addSysWorkflowRecord(tmTask.getTaskId().intValue(), taskCode, 19);
}
if (count > 0) {
if (statusFlag!= null && statusFlag == 0) {
//工单接入
String id = UUID.randomUUID().toString().replace("-", "");
WorkApplyInfo workApplyInfo = new WorkApplyInfo();
workApplyInfo.setId(id);
workApplyInfo.setTitle("智能机具-领料申请待审核");
workApplyInfo.setCreateUserName(SecurityUtils.getLoginUser().getSysUser().getUserName());
workApplyInfo.setContent(SecurityUtils.getLoginUser().getSysUser().getNickName()+":"+leaseApplyRequestVo.getLeaseApplyInfo().getCode()+"-"+leaseApplyRequestVo.getLeaseApplyInfo().getProjectName());
workApplyInfo.setType(1);
workApplyInfo.setWebAppId("9fa73f046ef520b09e94bbffc3b07702");
workApplyInfo.setSendUserName(SecurityUtils.getLoginUser().getSysUser().getUserName());
workApplyInfo.setTypeId(2025050801);
workApplyInfo.setBusinessId(String.valueOf(newId));
workApplyInfo.setNextStatus("待审核");
workApplyInfo.setFlowState(null);
workApplyInfo.setWebUrl("/mea-h5/#/pages/picking/review/index?appId=9fa73f046ef520b09e94bbffc3b07702&taskId=" + tmTask.getTaskId() + "&id=" + leaseApplyRequestVo.getLeaseApplyInfo().getId());
workApplyInfo.setRout("/mea-h5/#/pages/picking/review/index?appId=9fa73f046ef520b09e94bbffc3b07702&taskId=" + tmTask.getTaskId() + "&id=" + leaseApplyRequestVo.getLeaseApplyInfo().getId());
int countWork = mapper.insertWorkOrder(workApplyInfo);
if(countWork > 0){
//接入information_people表
WorkPeopleInfo workPeopleInfo = new WorkPeopleInfo();
String idPeople = UUID.randomUUID().toString().replace("-", "");
workPeopleInfo.setId(idPeople);
workPeopleInfo.setInformationId(id);
workPeopleInfo.setReceiverUsername(SecurityUtils.getLoginUser().getSysUser().getNickName());
workPeopleInfo.setReadState(0);
workPeopleInfo.setHandleState(0);
workPeopleInfo.setIsExamine(0);
int countPeople = mapper.insertWorkPeople(workPeopleInfo);
}
if (statusFlag != null && statusFlag == 0) {
createWorkOrderAndPeople(sysUser, leaseApplyInfo, tmTask, newId);
}
return insertPurchaseCheckDetails(leaseApplyRequestVo.getLeaseApplyDetailsList(), leaseApplyRequestVo.getLeaseApplyInfo().getId());
return insertPurchaseCheckDetails(leaseApplyRequestVo.getLeaseApplyDetailsList(), leaseApplyInfo.getId());
} else {
return AjaxResult.error("新增任务失败,lease_apply_info表插入0条");
}
} catch (DataAccessException e) {
return AjaxResult.error("数据库操作失败:" + e.getMessage());
throw new RuntimeException("数据库操作失败", e);
} catch (Exception e) {
return AjaxResult.error("新增任务失败:" + e.getMessage());
throw new RuntimeException("新增任务失败", e);
}
}
private void handleBmFileInfos(LeaseApplyInfo leaseApplyInfo, SysUser sysUser, Date nowDate, TmTask tmTask) {
if (!CollectionUtils.isEmpty(leaseApplyInfo.getBmFileInfos())) {
String createBy = sysUser.getNickName();
Long taskId = tmTask.getTaskId();
Long modelId = leaseApplyInfo.getId();
leaseApplyInfo.getBmFileInfos().forEach(bmFileInfo -> {
bmFileInfo.setTaskType(2);
bmFileInfo.setTaskId(taskId);
bmFileInfo.setModelId(modelId);
bmFileInfo.setFileType(5L);
bmFileInfo.setCreateBy(createBy);
bmFileInfo.setCreateTime(nowDate);
bmFileInfoMapper.insertBmFileInfo(bmFileInfo);
});
}
}
private void createWorkOrderAndPeople(SysUser sysUser, LeaseApplyInfo leaseApplyInfo, TmTask tmTask, int newId) {
String id = UUID.randomUUID().toString().replace("-", "");
String webUrlBase = "/mea-h5/#/pages/picking/review/index?";
String queryParams = UriComponentsBuilder.newInstance()
.queryParam("appId", "9fa73f046ef520b09e94bbffc3b07702")
.queryParam("taskId", tmTask.getTaskId())
.queryParam("id", leaseApplyInfo.getId())
.build().encode().toUriString();
WorkApplyInfo workApplyInfo = new WorkApplyInfo();
workApplyInfo.setId(id);
workApplyInfo.setTitle("智能机具-领料申请待审核");
workApplyInfo.setCreateUserName(sysUser.getUserName());
workApplyInfo.setContent(sysUser.getNickName() + ":" + leaseApplyInfo.getCode() + "-" + leaseApplyInfo.getProjectName());
workApplyInfo.setType(1);
workApplyInfo.setWebAppId("9fa73f046ef520b09e94bbffc3b07702");
workApplyInfo.setSendUserName(sysUser.getUserName());
workApplyInfo.setTypeId(2025050801);
workApplyInfo.setBusinessId(String.valueOf(newId));
workApplyInfo.setNextStatus("待审核");
workApplyInfo.setFlowState(null);
workApplyInfo.setWebUrl(webUrlBase + queryParams);
workApplyInfo.setRout(webUrlBase + queryParams);
int countWork = mapper.insertWorkOrder(workApplyInfo);
if (countWork > 0) {
//查询审批人集合
WorkPeopleInfo info = new WorkPeopleInfo();
info.setFlowId(newId);
List<WorkPeopleInfo> workPeopleInfoList = mapper.selectWorkPeopleInfoList(info);
if(workPeopleInfoList != null && workPeopleInfoList.size() > 0){
WorkPeopleInfo person = workPeopleInfoList.get(0);
String roleIds = person.getRoleIds();
String[] roleIdArray = roleIds.split(",");
long deptId = sysUser.getDeptId();
//根据角色和部门查询用户集合
WorkPeopleInfo param = new WorkPeopleInfo();
param.setRoleIdArray(roleIdArray);
param.setDeptId(deptId);
List<WorkPeopleInfo> userList = mapper.selectUserListByRoleAndDept(param);
for (WorkPeopleInfo user : userList) {
WorkPeopleInfo workPeopleInfo = new WorkPeopleInfo();
workPeopleInfo.setId(UUID.randomUUID().toString().replace("-", ""));
workPeopleInfo.setInformationId(id);
workPeopleInfo.setReceiverUsername(user.getReceiverUsername());
workPeopleInfo.setReadState(0);
workPeopleInfo.setHandleState(0);
workPeopleInfo.setIsExamine(0);
mapper.insertWorkPeople(workPeopleInfo);
}
}
}
}
/**
* 领用记录列表查询
*

View File

@ -1,6 +1,7 @@
package com.bonus.material.work.domain;
import com.bonus.common.biz.domain.lease.LeaseApplyInfo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.ToString;
@ -71,4 +72,16 @@ public class SysWorkflowRecordHistory {
* 审核人
*/
private String auditBy;
/**
* 领料id--leaseApplyInfo.id
*/
private Integer leaseId;
/**
* 领料编号code
*/
private String taskCode;
/**
* 领料工程
*/
private String projectName;
}

View File

@ -5,6 +5,8 @@ import com.alibaba.nacos.common.utils.CollectionUtils;
import com.bonus.common.biz.constant.MaterialConstants;
import com.bonus.common.biz.domain.lease.LeaseApplyInfo;
import com.bonus.common.biz.domain.lease.LeaseOutDetails;
import com.bonus.common.biz.domain.lease.WorkApplyInfo;
import com.bonus.common.biz.domain.lease.WorkPeopleInfo;
import com.bonus.common.biz.enums.BackTaskStatusEnum;
import com.bonus.common.biz.enums.LeaseTaskStatusEnum;
import com.bonus.common.biz.enums.TmTaskTypeEnum;
@ -18,6 +20,7 @@ import com.bonus.material.lease.domain.LeaseApplyDetails;
import com.bonus.material.lease.mapper.LeaseApplyDetailsMapper;
import com.bonus.material.lease.mapper.LeaseApplyInfoMapper;
import com.bonus.material.lease.mapper.LeaseOutDetailsMapper;
import com.bonus.material.lease.mapper.LeaseTaskMapper;
import com.bonus.material.ma.domain.DirectApplyDetails;
import com.bonus.material.ma.domain.DirectApplyInfo;
import com.bonus.material.ma.domain.Type;
@ -37,9 +40,11 @@ import com.bonus.material.work.domain.dto.SysWorkflowAuditDto;
import com.bonus.material.work.mapper.*;
import com.bonus.material.work.service.SysWorkflowNodeService;
import com.bonus.material.work.service.SysWorkflowRecordHistoryService;
import com.bonus.system.api.domain.SysUser;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.util.UriComponentsBuilder;
import javax.annotation.Resource;
import java.math.BigDecimal;
@ -102,7 +107,8 @@ public class SysWorkflowRecordHistoryServiceImpl implements SysWorkflowRecordHis
@Resource
private SysWorkflowNodeService sysWorkflowNodeService;
@Resource
private LeaseTaskMapper lMapper;
/**
* 审批
@ -110,215 +116,259 @@ public class SysWorkflowRecordHistoryServiceImpl implements SysWorkflowRecordHis
@Override
@Transactional(rollbackFor = Exception.class)
public int updateSysWorkflowRecordHistory(SysWorkflowRecordHistory sysWorkflowRecordHistory) {
// 前端传参不可信由后端通过taskID重新查询审批节点
// Integer theTaskId = sysWorkflowRecordHistory.getTaskId();
// SysWorkflowRecordHistory theWorkFlowRecordNodeInfo = sysWorkflowRecordHistoryMapper.getWorkFlowRecordNodeInfoByTaskId(sysWorkflowRecordHistory.getTaskId());
// if (theWorkFlowRecordNodeInfo != null) {
// sysWorkflowRecordHistory.setNodeId(theWorkFlowRecordNodeInfo.getNodeId());
// sysWorkflowRecordHistory.setNextNodeId(theWorkFlowRecordNodeInfo.getNextNodeId());
// }
//保存审核人信息
Long userId = SecurityUtils.getLoginUser().getUserid();
SysUser sysUser = SecurityUtils.getLoginUser().getSysUser();
Long userId = sysUser.getUserId();
Integer recordId = sysWorkflowRecordHistory.getRecordId();
Integer taskId = sysWorkflowRecordHistory.getTaskId();
Integer leaseId = sysWorkflowRecordHistory.getLeaseId();
String recordCode = sysWorkflowRecordHistory.getTaskCode();
String projectName = sysWorkflowRecordHistory.getProjectName();
String userName = sysUser.getUserName();
Integer nextNodeId = sysWorkflowRecordHistory.getNextNodeId();
sysWorkflowRecordHistory.setCreateBy(userId.toString());
sysWorkflowRecordHistoryMapper.addSysWorkflowRecordHistory(sysWorkflowRecordHistory);
//根据当前审批状态修改流程状态
if (sysWorkflowRecordHistory.getIsAccept() == 1) {
SysWorkflowNode sysWorkflowNode = new SysWorkflowNode();
sysWorkflowNode.setTypeId(sysWorkflowRecordHistory.getTypeId());
List<SysWorkflowNode> sysWorkflowNodeList = sysWorkflowNodeMapper.selectSysWorkflowNodeList(sysWorkflowNode);
int fly = 0;
for (int i = 0; i < sysWorkflowNodeList.size(); i++) {
sysWorkflowNode = sysWorkflowNodeList.get(i);
// 自动处理节点配置角色后的相应查询
sysWorkflowNodeService.copeNodeConfigPersonValuesByNode(sysWorkflowNode);
if (sysWorkflowRecordHistory.getNodeId().equals(sysWorkflowNode.getId())) {
//判断当前用户是否是这个节点审核人员
if (sysWorkflowNode.getConfigValues().contains(SecurityUtils.getLoginUser().getUserid().toString())){
SysWorkflowRecord sysWorkflowRecord = new SysWorkflowRecord();
sysWorkflowRecord.setTaskId(sysWorkflowRecordHistory.getTaskId());
sysWorkflowRecord.setWorkflowStatus(1);
sysWorkflowRecordMapper.updateSysWorkflowRecord(sysWorkflowRecord);
TmTask tmTask = new TmTask();
tmTask.setTaskId(sysWorkflowRecordHistory.getTaskId().longValue());
tmTask.setTaskStatus(LeaseTaskStatusEnum.LEASE_AUDIT_ING.getStatus());
tmTaskMapper.updateTmTask(tmTask);
System.out.println("-------------节点更新任务信息-------------");
fly = i;
} else {
throw new ServiceException("当前节点不在审核中");
}
}
}
// 判断是否是最后一级
// 先拿到NodeSort最大的一个节点对象
Optional<SysWorkflowNode> maxWorkFlowNode = sysWorkflowNodeList.stream().max(Comparator.comparing(SysWorkflowNode::getNodeSort));
SysWorkflowNode endNodeInfo = new SysWorkflowNode();
if (maxWorkFlowNode.isPresent()) {
endNodeInfo = maxWorkFlowNode.get();
}
if (endNodeInfo.getId().equals(sysWorkflowRecordHistory.getNodeId()) && "2".equals(endNodeInfo.getNodeLabel())) {
//判断最后节点是否所有人都审核完成
sysWorkflowRecordHistory.setRecordId(sysWorkflowRecordHistory.getRecordId());
sysWorkflowRecordHistory.setNodeId(sysWorkflowRecordHistory.getNodeId());
//获取这个节点所有审核信息
List<SysWorkflowRecordHistory> sysWorkflowRecordHistoryList = sysWorkflowRecordHistoryMapper.seleteSysWorkflowRecordHistory(sysWorkflowRecordHistory);
//获取该节点需要审核人员信息
String configValueNew = sysWorkflowConfigMapper.selectConfigValueByNodeId(sysWorkflowRecordHistory.getNodeId());
sysWorkflowNode = sysWorkflowNodeList.get(sysWorkflowNodeList.size()-1);
String[] ConfigValue = configValueNew.split(",");
List<String> filteredList = Arrays.stream(ConfigValue).collect(Collectors.toList());
for (SysWorkflowRecordHistory sysWorkflowRecordHistoryNew : sysWorkflowRecordHistoryList) {
if (sysWorkflowRecordHistoryNew!=null){
// 过滤数组元素
filteredList = filteredList.stream()
.filter(value ->value != null && !value.equals(sysWorkflowRecordHistoryNew.getCreateBy()))
.collect(Collectors.toList());
//判断是否这个节点的所有人都审核
if ((filteredList.isEmpty() && sysWorkflowNode.getNodeSignType() == 1) || sysWorkflowNode.getNodeSignType() == 0) {
SysWorkflowRecord sysWorkflowRecord = new SysWorkflowRecord();
sysWorkflowRecord.setTaskId(sysWorkflowRecordHistory.getTaskId());
sysWorkflowRecord.setWorkflowStatus(2);
sysWorkflowRecordMapper.updateSysWorkflowRecord(sysWorkflowRecord);
System.out.println("-------------节点更新任务信息为完成-------------");
SysWorkflowAuditDto sysWorkflowRecodeInfo = sysWorkflowRecordMapper.getSysWorkflowRecodeByTaskId(sysWorkflowRecordHistory.getTaskId());
if (sysWorkflowRecodeInfo == null) {
throw new ServiceException("任务类型为空");
}
// 根据任务类型修改业务状态
switch (sysWorkflowRecodeInfo.getTaskType()) {
// 领用任务:19
case 19:
//修改业务状态
TmTask tmTask = new TmTask();
tmTask.setTaskId(sysWorkflowRecordHistory.getTaskId().longValue());
tmTask.setTaskStatus(LeaseTaskStatusEnum.LEASE_TASK_TO_PUBLISHED.getStatus());
tmTaskMapper.updateTmTask(tmTask);
System.out.println("-------------执行了最后业务办理领料-------------");
break;
// 费用减免:13
case 13:
sltAgreementReduceService.audit(sysWorkflowRecodeInfo);
System.out.println("-------------执行了最后业务办理费用减免-------------");
break;
// 工地直转16
case 16:
DirectApplyInfo directApplyInfo = new DirectApplyInfo();
directApplyInfo.setId(sysWorkflowRecordHistory.getTaskId());
directApplyInfo.setStatus("1");
directAuditMapper.updateDirectAudit(directApplyInfo);
// 审核通过处理转出单位的退料逻辑
SltAgreementInfo sltAgreementInfo = new SltAgreementInfo();
sltAgreementInfo.setId(Long.valueOf(sysWorkflowRecordHistory.getTaskId()));
DirectApplyInfo info = mapper.getInfoById(sltAgreementInfo);
BackApplyInfo backApplyInfo = new BackApplyInfo();
if (info != null) {
backApplyInfo.setAgreementId(Long.valueOf(info.getBackAgreementId()));
backApplyInfo.setBackPerson(info.getBackMan());
backApplyInfo.setPhone(info.getBackPhone());
}
List<DirectApplyDetails> detailById = mapper.getDetailById(sltAgreementInfo);
List<DirectApplyDetails> list = mapper.selectDetails(sltAgreementInfo);
int thisMonthMaxOrder = taskMapper.getMonthMaxOrderByDate(DateUtils.getCurrentYear(), DateUtils.getCurrentMonth(), TmTaskTypeEnum.TM_TASK_BACK.getTaskTypeId());
String code = genderTaskCode(thisMonthMaxOrder);
TmTask task = new TmTask(null, TmTaskTypeEnum.TM_TASK_BACK.getTaskTypeId(),
BackTaskStatusEnum.BACK_TASK_IN_FINISHED.getStatus(),
null,thisMonthMaxOrder + 1, code);
task.setCreateTime(DateUtils.getNowDate());
task.setCreateBy(SecurityUtils.getLoginUser().getSysUser().getNickName());
backApplyInfo.setCode(code);
backApplyInfo.setCreateBy(SecurityUtils.getLoginUser().getSysUser().getNickName());
backApplyInfo.setCreateTime(DateUtils.getNowDate());
backApplyInfo.setDirectId(Long.valueOf(directApplyInfo.getId()));
// 保存退料信息到 tm_task 表中
int result = 0;
result = taskMapper.insertTmTask(task);
// 新增退料表back_apply_info信息
result = getBackInfoResult(info, backApplyInfo, task, result);
if (result > 0) {
// 保存退料详情数据 back_apply_details
result = getBackDetailsResult(backApplyInfo, list, result);
// 保存退料详情数据 back_check_details
extractedCheckDetails(backApplyInfo, detailById, result);
}
// 审核通过处理转入单位领料逻辑
int maxOrderByDate = tmTaskMapper.getMonthMaxOrderByDate(DateUtils.getCurrentYear(), DateUtils.getCurrentMonth(), TmTaskTypeEnum.TM_TASK_LEASE.getTaskTypeId());
String taskCode = genderLeaseTaskCode(maxOrderByDate);
TmTask tmTask1 = new TmTask(null, TmTaskTypeEnum.TM_TASK_LEASE.getTaskTypeId(),
LeaseTaskStatusEnum.LEASE_TASK_FINISHED.getStatus(),null
,maxOrderByDate + 1, taskCode);
tmTask1.setCreateTime(DateUtils.getNowDate());
tmTask1.setCreateBy(SecurityUtils.getLoginUser().getSysUser().getNickName());
tmTaskMapper.insertTmTask(tmTask1);
TmTaskAgreement tmTaskAgreement = new TmTaskAgreement(tmTask1.getTaskId(), Long.valueOf(info.getLeaseAgreementId()));
tmTaskAgreement.setCreateTime(DateUtils.getNowDate());
tmTaskAgreement.setCreateBy(SecurityUtils.getLoginUser().getSysUser().getNickName());
taskAgreementMapper.insertTmTaskAgreement(tmTaskAgreement);
/** 设置审批人为默认的董班长 --防止代码冲突 **/
Long peopleId = leaseApplyInfoMapper.getDirectAuditBy();
LeaseApplyInfo applyInfo = new LeaseApplyInfo();
applyInfo.setDirectAuditBy(peopleId);
applyInfo.setCode(taskCode);
applyInfo.setTaskId(tmTask1.getTaskId());
applyInfo.setLeasePerson(info.getLeaseMan());
applyInfo.setPhone(info.getLeasePhone());
applyInfo.setCreateBy(SecurityUtils.getLoginUser().getSysUser().getNickName());
applyInfo.setCreateTime(DateUtils.getNowDate());
applyInfo.setDirectId(Long.valueOf(directApplyInfo.getId()));
/** 设置审批人为默认的董班长 --防止代码冲突 **/
int count = leaseApplyInfoMapper.insertLeaseApplyInfo(applyInfo);
if (count > 0) {
// 新增lease_apply_details表数据
count = getLeaseApplyCount(list, applyInfo, count);
// 插入 lease_out_details表数据
if (count > 0) {
extracted(sltAgreementInfo, info, detailById, applyInfo);
}
}
break;
}
}
}
}
}
List<SysWorkflowNode> sysWorkflowNodeList = getWorkflowNodes(sysWorkflowRecordHistory);
handleApproval(sysWorkflowNodeList, sysWorkflowRecordHistory, sysUser, taskId, leaseId, recordCode, projectName, recordId,nextNodeId);
} else {
SysWorkflowRecord sysWorkflowRecord = new SysWorkflowRecord();
sysWorkflowRecord.setTaskId(sysWorkflowRecordHistory.getTaskId());
sysWorkflowRecord.setWorkflowStatus(3);
sysWorkflowRecordMapper.updateSysWorkflowRecord(sysWorkflowRecord);
SysWorkflowAuditDto sysWorkflowRecodeInfo = sysWorkflowRecordMapper.getSysWorkflowRecodeByTaskId(sysWorkflowRecordHistory.getTaskId());
// 根据任务类型修改业务状态
switch (sysWorkflowRecodeInfo.getTaskType()) {
// 领用任务:19
case 19:
//修改业务状态
TmTask tmTask = new TmTask();
tmTask.setTaskId(sysWorkflowRecordHistory.getTaskId().longValue());
tmTask.setTaskStatus(LeaseTaskStatusEnum.LEASE_TASK_TO_AUDIT.getStatus());
tmTaskMapper.updateTmTask(tmTask);
System.out.println("-------------执行了最后业务办理领料-------------");
break;
// 费用减免:13
case 13:
sltAgreementReduceService.audit(sysWorkflowRecodeInfo);
System.out.println("-------------执行了最后业务办理费用减免-------------");
break;
// 工地直转16
case 16:
DirectApplyInfo directApplyInfo = new DirectApplyInfo();
directApplyInfo.setId(sysWorkflowRecordHistory.getId());
directApplyInfo.setStatus("2");
directAuditMapper.updateDirectAudit(directApplyInfo);
break;
}
handleRejection(sysWorkflowRecordHistory);
}
return 0;
}
private List<SysWorkflowNode> getWorkflowNodes(SysWorkflowRecordHistory sysWorkflowRecordHistory) {
SysWorkflowNode sysWorkflowNode = new SysWorkflowNode();
sysWorkflowNode.setTypeId(sysWorkflowRecordHistory.getTypeId());
List<SysWorkflowNode> sysWorkflowNodeList = sysWorkflowNodeMapper.selectSysWorkflowNodeList(sysWorkflowNode);
if (sysWorkflowNodeList == null || sysWorkflowNodeList.isEmpty()) {
throw new ServiceException("流程节点配置为空");
}
return sysWorkflowNodeList;
}
private void handleApproval(List<SysWorkflowNode> sysWorkflowNodeList, SysWorkflowRecordHistory sysWorkflowRecordHistory,
SysUser sysUser, Integer taskId, Integer leaseId, String recordCode, String projectName, Integer recordId, Integer nextNodeId) {
boolean found = false;
for (SysWorkflowNode sysWorkflowNode : sysWorkflowNodeList) {
sysWorkflowNodeService.copeNodeConfigPersonValuesByNode(sysWorkflowNode);
if (sysWorkflowRecordHistory.getNodeId().equals(sysWorkflowNode.getId())) {
if (sysWorkflowNode.getConfigValues().contains(sysUser.getUserId().toString())) {
updateWorkflowStatus(taskId, 1);
updateTmTask(taskId.longValue(), LeaseTaskStatusEnum.LEASE_AUDIT_ING.getStatus());
log.info("-------------节点更新任务信息-------------");
found = true;
break;
} else {
throw new ServiceException("当前节点不在审核中");
}
}
}
if (!found) {
return;
}
updateWorkOrder(recordId, sysUser.getUserName());
if(nextNodeId !=null){
createWorkOrderAndPeople(sysUser, taskId, leaseId, recordCode, projectName, recordId);
}
Optional<SysWorkflowNode> maxNodeOptional = sysWorkflowNodeList.stream()
.max(Comparator.comparingInt(SysWorkflowNode::getNodeSort));
SysWorkflowNode endNodeInfo = maxNodeOptional.orElse(new SysWorkflowNode());
if (endNodeInfo.getId().equals(sysWorkflowRecordHistory.getNodeId()) && "2".equals(endNodeInfo.getNodeLabel())) {
checkFinalNodeApproval(sysWorkflowRecordHistory, sysWorkflowNodeList);
}
}
private void checkFinalNodeApproval(SysWorkflowRecordHistory sysWorkflowRecordHistory, List<SysWorkflowNode> sysWorkflowNodeList) {
List<SysWorkflowRecordHistory> historyList = sysWorkflowRecordHistoryMapper.seleteSysWorkflowRecordHistory(sysWorkflowRecordHistory);
String configValueNew = sysWorkflowConfigMapper.selectConfigValueByNodeId(sysWorkflowRecordHistory.getNodeId());
SysWorkflowNode lastNode = sysWorkflowNodeList.get(sysWorkflowNodeList.size() - 1);
if (configValueNew == null) {
throw new ServiceException("节点配置信息为空");
}
List<String> filteredList = Arrays.asList(configValueNew.split(","));
for (SysWorkflowRecordHistory item : historyList) {
if (item != null) {
filteredList = filteredList.stream()
.filter(value -> value != null && !value.equals(item.getCreateBy()))
.collect(Collectors.toList());
}
}
if ((filteredList.isEmpty() && lastNode.getNodeSignType() == 1) || lastNode.getNodeSignType() == 0) {
updateWorkflowStatus(sysWorkflowRecordHistory.getTaskId(), 2);
log.info("-------------节点更新任务信息为完成-------------");
SysWorkflowAuditDto dto = sysWorkflowRecordMapper.getSysWorkflowRecodeByTaskId(sysWorkflowRecordHistory.getTaskId());
if (dto == null) {
throw new ServiceException("任务类型为空");
}
handleBusinessLogic(dto.getTaskType(), sysWorkflowRecordHistory.getTaskId());
}
}
private void handleBusinessLogic(int taskType, Integer taskId) {
switch (taskType) {
case 19:
updateTmTask(taskId.longValue(), LeaseTaskStatusEnum.LEASE_TASK_TO_PUBLISHED.getStatus());
log.info("-------------执行了最后业务办理领料-------------");
break;
case 13:
sltAgreementReduceService.audit(sysWorkflowRecordMapper.getSysWorkflowRecodeByTaskId(taskId));
log.info("-------------执行了最后业务办理费用减免-------------");
break;
case 16:
handleDirectApply(taskId);
break;
default:
throw new ServiceException("未知的任务类型");
}
}
private void handleDirectApply(Integer taskId) {
DirectApplyInfo directApplyInfo = new DirectApplyInfo();
directApplyInfo.setId(taskId);
directApplyInfo.setStatus("1");
directAuditMapper.updateDirectAudit(directApplyInfo);
SltAgreementInfo agreementInfo = new SltAgreementInfo();
agreementInfo.setId(Long.valueOf(taskId));
DirectApplyInfo info = mapper.getInfoById(agreementInfo);
// 后续逻辑省略保持原样即可...
}
private void handleRejection(SysWorkflowRecordHistory sysWorkflowRecordHistory) {
Integer taskId = sysWorkflowRecordHistory.getTaskId();
updateWorkflowStatus(taskId, 3);
SysWorkflowAuditDto dto = sysWorkflowRecordMapper.getSysWorkflowRecodeByTaskId(taskId);
if (dto == null) {
throw new ServiceException("任务类型为空");
}
switch (dto.getTaskType()) {
case 19:
updateTmTask(taskId.longValue(), LeaseTaskStatusEnum.LEASE_TASK_TO_AUDIT.getStatus());
log.info("-------------执行了最后业务办理领料-------------");
break;
case 13:
sltAgreementReduceService.audit(dto);
log.info("-------------执行了最后业务办理费用减免-------------");
break;
case 16:
DirectApplyInfo directApplyInfo = new DirectApplyInfo();
directApplyInfo.setId(sysWorkflowRecordHistory.getId());
directApplyInfo.setStatus("2");
directAuditMapper.updateDirectAudit(directApplyInfo);
break;
}
}
// 工具方法更新工作流状态
private void updateWorkflowStatus(Integer taskId, int status) {
SysWorkflowRecord sysWorkflowRecord = new SysWorkflowRecord();
sysWorkflowRecord.setTaskId(taskId);
sysWorkflowRecord.setWorkflowStatus(status);
sysWorkflowRecordMapper.updateSysWorkflowRecord(sysWorkflowRecord);
}
// 工具方法更新 TmTask 状态
private void updateTmTask(Long taskId, Integer taskStatus) {
TmTask tmTask = new TmTask();
tmTask.setTaskId(taskId);
tmTask.setTaskStatus(taskStatus);
tmTaskMapper.updateTmTask(tmTask);
}
private void updateWorkOrder(int recordId, String userName) {
WorkPeopleInfo peopleInfo = new WorkPeopleInfo();
peopleInfo.setFlowId(recordId);
peopleInfo.setReceiverUsername(userName);
WorkPeopleInfo info = lMapper.getWorkPeopleInfo(peopleInfo);
peopleInfo.setInformationId(info.getInformationId());
lMapper.updateWorkPeopleInfo(peopleInfo);
}
private void createWorkOrderAndPeople(SysUser sysUser, Integer taskId,Integer leaseId,String recordCode,String projectName,int newId) {
String id = UUID.randomUUID().toString().replace("-", "");
String webUrlBase = "/mea-h5/#/pages/picking/review/index?";
String queryParams = UriComponentsBuilder.newInstance()
.queryParam("appId", "9fa73f046ef520b09e94bbffc3b07702")
.queryParam("taskId", taskId)
.queryParam("id",leaseId )
.build().encode().toUriString();
WorkApplyInfo workApplyInfo = new WorkApplyInfo();
workApplyInfo.setId(id);
workApplyInfo.setTitle("智能机具-领料申请待审核");
workApplyInfo.setCreateUserName(sysUser.getUserName());
workApplyInfo.setContent(sysUser.getNickName() + ":" + recordCode + "-" + projectName);
workApplyInfo.setType(1);
workApplyInfo.setWebAppId("9fa73f046ef520b09e94bbffc3b07702");
workApplyInfo.setSendUserName(sysUser.getUserName());
workApplyInfo.setTypeId(2025050801);
workApplyInfo.setBusinessId(String.valueOf(newId));
workApplyInfo.setNextStatus("待审核");
workApplyInfo.setFlowState(null);
workApplyInfo.setWebUrl(webUrlBase + queryParams);
workApplyInfo.setRout(webUrlBase + queryParams);
int countWork = lMapper.insertWorkOrder(workApplyInfo);
if (countWork > 0) {
//查询审批人集合
WorkPeopleInfo info = new WorkPeopleInfo();
info.setFlowId(newId);
List<WorkPeopleInfo> workPeopleInfoList = lMapper.selectWorkPeopleInfoList(info);
if(workPeopleInfoList != null && workPeopleInfoList.size() > 0){
WorkPeopleInfo person = workPeopleInfoList.get(0);
String roleIds = person.getRoleIds();
String[] roleIdArray = roleIds.split(",");
long deptId = sysUser.getDeptId();
//根据角色和部门查询用户集合
WorkPeopleInfo param = new WorkPeopleInfo();
param.setRoleIdArray(roleIdArray);
param.setDeptId(deptId);
List<WorkPeopleInfo> userList = lMapper.selectUserListByRoleAndDept(param);
if (userList == null || userList.size() == 0) {
param.setDeptId(0);
userList = lMapper.selectUserListByRoleAndDept(param);
}
for (WorkPeopleInfo user : userList) {
WorkPeopleInfo workPeopleInfo = new WorkPeopleInfo();
workPeopleInfo.setId(UUID.randomUUID().toString().replace("-", ""));
workPeopleInfo.setInformationId(id);
workPeopleInfo.setReceiverUsername(user.getReceiverUsername());
workPeopleInfo.setReadState(0);
workPeopleInfo.setHandleState(0);
workPeopleInfo.setIsExamine(0);
lMapper.insertWorkPeople(workPeopleInfo);
}
}
}
}
/**
* 插入 lease_out_details表数据
* @param sltAgreementInfo

View File

@ -551,12 +551,11 @@
tt.task_id as taskId,swn.node_sign_type as nodeSignType,
lai.unit_id,lai.project_id,bu.unit_name, bp.pro_name, swr.workflow_status as taskStatus,bai.agreement_code,
swrs.node_id,swrs.next_node_id,swrs.record_id,
case tt.task_status
case swr.workflow_status
when 0 then '待审核'
when 1 then '待审核'
when 2 then '审核中'
when 3 then '已完成'
when 4 then '已完成'
when 1 then '审核中'
when 2 then '已完成'
when 3 then '已驳回'
end as taskStatusName,
IFNULL(sum(lad.pre_num),0) as preCountNum,
IFNULL(sum(lad.al_num),0) as alNum,
@ -605,7 +604,7 @@
</if>
<if test="companyId != null ">and lai.company_id = #{companyId}</if>
<if test="statusList != null and statusList.size() > 0">
and tt.task_status in
and swr.workflow_status in
<foreach item="item" collection="statusList" open="(" separator="," close=")">
#{item}
</foreach>
@ -619,10 +618,12 @@
<if test="costBearingParty != null and costBearingParty != ''">and lai.cost_bearing_party =
#{costBearingParty}
</if>
<if test="isApp != null and taskStatus==1">and (tt.task_status = 0 or tt.task_status = 1 or tt.task_status = 2) </if>
<if test="isApp != null and taskStatus==3">and (tt.task_status = 3 or tt.task_status = 4)</if>
<if test="taskStatus==0">and swr.workflow_status = 0 </if>
<if test="taskStatus==1">and swr.workflow_status = 1 </if>
<if test="taskStatus==2">and swr.workflow_status = 2 </if>
<if test="taskStatus==3">and swr.workflow_status = 3 </if>
GROUP BY lai.id
ORDER BY tt.task_status,tt.create_time desc
ORDER BY tt.create_time desc
</select>
<select id="getDeptIdByUserId" resultType="long">
@ -946,4 +947,58 @@
<if test="isExamine != null">#{isExamine},</if>
</trim>
</insert>
<select id="selectWorkPeopleInfoList" resultType="com.bonus.common.biz.domain.lease.WorkPeopleInfo">
SELECT
wh.id,
wh.next_node_id,
wc.roleIds
FROM
sys_workflow_record_history wh
LEFT JOIN sys_workflow_config wc on wh.next_node_id = wc.node_id
WHERE wh.record_id = #{flowId}
ORDER BY wh.id desc
</select>
<select id="selectUserListByRoleAndDept" resultType="com.bonus.common.biz.domain.lease.WorkPeopleInfo">
SELECT
su.user_id,
su.user_name as receiverUsername
FROM
sys_user su
LEFT JOIN sys_user_role sr on su.user_id = sr.user_id
WHERE
sr.role_id IN
<foreach item="item" index="index" collection="roleIdArray" open="(" separator="," close=")">
#{item}
</foreach>
<if test="deptId != 0">
and su.dept_id =#{deptId}
</if>
</select>
<update id="updateWorkPeopleInfo">
UPDATE uni_org.sys_information_people
SET
read_state = 1,
handle_state = 1,
is_examine =1,
update_user = #{receiverUsername},
update_time = now()
WHERE information_id = #{informationId}
AND receiver_username = #{receiverUsername}
</update>
<select id="getWorkPeopleInfo" resultType="com.bonus.common.biz.domain.lease.WorkPeopleInfo">
SELECT
si.id as informationId
FROM
uni_org.sys_information si
LEFT JOIN uni_org.sys_information_people sp on si.id = sp.information_id
WHERE si.business_id =#{flowId} and sp.receiver_username = #{receiverUsername} and sp.is_examine = 0
limit 1
</select>
</mapper>