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 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 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; } }