|
package org.springblade.mdm.flow.service;
|
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.lang3.StringUtils;
|
import org.flowable.engine.HistoryService;
|
import org.flowable.engine.history.HistoricProcessInstance;
|
import org.flowable.task.api.history.HistoricTaskInstance;
|
import org.springblade.core.tool.api.R;
|
import org.springblade.core.tool.utils.Func;
|
import org.springblade.mdm.basesetting.producedivision.entity.ProduceDivision;
|
import org.springblade.mdm.basesetting.producedivision.service.ProduceDivisionService;
|
import org.springblade.mdm.commons.service.UserCommonService;
|
import org.springblade.mdm.flow.vo.ApproveTableInfo;
|
import org.springblade.mdm.program.entity.NcNode;
|
import org.springblade.mdm.program.entity.NcNodeHis;
|
import org.springblade.mdm.program.entity.NcProgramApproved;
|
import org.springblade.mdm.program.service.NcNodeHisService;
|
import org.springblade.mdm.program.service.NcNodeService;
|
import org.springblade.mdm.program.service.NcProgramApprovedService;
|
import org.springblade.system.feign.IUserClient;
|
import org.springblade.system.pojo.entity.User;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
|
import java.util.*;
|
|
/**
|
* 数控程序审批信息查询服务
|
*
|
* @author yangys
|
*/
|
@Slf4j
|
@Service
|
public class ApproveInfoQueryService {
|
@Autowired
|
private NcNodeHisService ncNodeHisService;
|
@Autowired
|
private HistoryService historyService;
|
@Autowired
|
private IUserClient useClient;
|
@Autowired
|
private NcProgramApprovedService programApprovedService;
|
@Autowired
|
private ProduceDivisionService produceDivisionService;
|
@Autowired
|
private UserCommonService userCommonService;
|
/**
|
* 获取实际审批人姓名,和时间
|
* @param props 流程属性
|
* @return 审批人信息,程序编号
|
*/
|
public ApproveTableInfo getApproveInfo(FlowProgramProperties props){
|
ApproveTableInfo appInfo = new ApproveTableInfo();
|
|
Long teamLeaderId = 0L;
|
Long programmerId= 0L;
|
Long checkerId = 0L;
|
Long seniorId = 0L;
|
//获取审批人和时间信息
|
List<HistoricTaskInstance> hisTasks = historyService.createHistoricTaskInstanceQuery()
|
.processInstanceId(props.getProcessInstanceId()).orderByTaskCreateTime().desc().list();
|
|
for(HistoricTaskInstance task : hisTasks){
|
if(appInfo.getDispatchDate()== null && StringUtils.containsIgnoreCase(task.getTaskDefinitionKey(),"teamLeaderTask")){
|
appInfo.setDispatchDate(task.getEndTime());
|
teamLeaderId = Func.toLong(task.getAssignee());
|
}
|
|
if(appInfo.getProgrammingDate()== null && StringUtils.containsIgnoreCase(task.getTaskDefinitionKey(),"program")){
|
appInfo.setProgrammingDate(task.getEndTime());
|
programmerId = Func.toLong(task.getAssignee());
|
}
|
|
if(appInfo.getCheckDate()== null && StringUtils.containsIgnoreCase(task.getTaskDefinitionKey(),"check")){
|
appInfo.setCheckDate(task.getEndTime());
|
checkerId = Func.toLong(task.getAssignee());
|
}
|
|
if(appInfo.getApproveDate()== null && StringUtils.containsIgnoreCase(task.getTaskDefinitionKey(),"approve")){
|
appInfo.setApproveDate(task.getEndTime());
|
seniorId = Func.toLong(task.getAssignee());
|
}
|
}
|
if(teamLeaderId != 0) {
|
appInfo.setTeamLeaderName(userCommonService.getUserNameById(teamLeaderId));
|
}else{
|
//没找到组长(不是试切任务),直接查找零件号对应得数据
|
try {
|
ProduceDivision div = produceDivisionService.getByDrawingNoWithQinzhe(props.getDrawingNo());
|
appInfo.setTeamLeaderName(userCommonService.getUserNameById(div.getTeamLeaderId()));
|
}catch(Exception e){
|
log.error("根据零件号:{}找不到人员职责表数据",props.getDrawingNo(),e);
|
appInfo.setTeamLeaderName("");
|
}
|
}
|
appInfo.setProgrammerName(userCommonService.getUserNameById(programmerId));
|
appInfo.setCheckerName(userCommonService.getUserNameById(checkerId));
|
appInfo.setSeniorName(userCommonService.getUserNameById(seniorId));
|
|
//查询数控程序编号
|
Optional<NcProgramApproved> appOpt = programApprovedService.lambdaQuery().eq(NcProgramApproved::getProcessInstanceId, props.getProcessInstanceId()).oneOpt();
|
if(appOpt.isEmpty()){
|
appInfo.setProgramName("(未生成)");
|
}else{
|
NcNodeHis programPkgNameNode = this.ncNodeHisService.getById(appOpt.get().getNcNodeId());
|
appInfo.setProgramName(programPkgNameNode.programName());
|
}
|
|
return appInfo;
|
}
|
|
}
|