package org.springblade.mdm.statreport.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import lombok.AllArgsConstructor; import org.flowable.engine.HistoryService; import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.engine.history.HistoricProcessInstanceQuery; import org.springblade.core.tool.utils.DateUtil; import org.springblade.mdm.basesetting.machine.entity.Machine; import org.springblade.mdm.basesetting.machine.service.MachineService; import org.springblade.mdm.basesetting.producedivision.entity.MdmDept; import org.springblade.mdm.basesetting.producedivision.service.MdmDeptService; import org.springblade.mdm.commons.service.UserCommonService; import org.springblade.mdm.flow.constants.FlowConstant; import org.springblade.mdm.flow.constants.FlowVariableConstant; import org.springblade.mdm.flow.service.FlowCommonService; import org.springblade.mdm.flow.service.FlowProgramProperties; import org.springblade.mdm.statreport.vo.CuredProgramQueryVO; import org.springblade.mdm.statreport.vo.CuredProgramVO; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import java.time.temporal.TemporalAdjusters; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Map; /** * 流程业务实现类 * * @author Chill */ @Service @AllArgsConstructor public class CuredProgramStatService { private final FlowCommonService flowCommonService; private final HistoryService historyService; private final MachineService machineService; private final MdmDeptService mdmDeptService; private final UserCommonService userCommonService; private final DeptRelationConfig deptRelationConfig; public IPage pageQuery(CuredProgramQueryVO queryVO) { //固化里路村官 HistoricProcessInstanceQuery query = this.historyService.createHistoricProcessInstanceQuery().finished().processDefinitionKey(FlowConstant.CURE_PROCESS_KEY).includeProcessVariables(); //.finished() // 只查询已完成的流程.unfinished() // 查询未完成的流程 query.variableNotExists(FlowVariableConstant.EXCEPTION);//非异常流程 if(queryVO.getEndMonth()!=null){ queryVO.setEndTimeBegin(queryVO.getEndMonth().withDayOfMonth(1)); queryVO.setEndTimeEnd(queryVO.getEndMonth().with(TemporalAdjusters.lastDayOfMonth())); } if(queryVO.getEndTimeBegin()!=null) { query.finishedAfter(DateUtil.toDate(queryVO.getEndTimeBegin())); } if(queryVO.getEndTimeEnd()!=null) { query.finishedBefore(DateUtil.toDate(queryVO.getEndTimeEnd())); } if(queryVO.getDeptIds()!=null && !queryVO.getDeptIds().isEmpty()) { //将专业组id,根据映射提取车间id List workshopList = new ArrayList<>(); Map relMap = deptRelationConfig.getDeptWorkshopMap(); for(Long deptId : queryVO.getDeptIds()){ workshopList.add(relMap.get(deptId)); } //根据车间id,查询所有的下级部门:主要应该是工段 List allMachineDeptIds = new ArrayList<>(workshopList); for(Long workshopId : workshopList){ MdmDept workshop = this.mdmDeptService.getById(workshopId); if(workshop!=null){ String gongduanAncestors =workshop.getAncestors()+","+workshopId;//车间下 allMachineDeptIds.addAll(mdmDeptService.lambdaQuery() .likeRight(MdmDept::getAncestors,gongduanAncestors) .list().stream().map(MdmDept::getId).toList()); } } List machines = this.machineService.lambdaQuery().in(Machine::getOwnerDept,allMachineDeptIds).list(); if(!machines.isEmpty()) { query.or(); for(Machine machine : machines){ query.variableValueEquals(FlowVariableConstant.MACHINE_CODE, machine.getCode()); } query.endOr(); }else{ //没找到机床,就应该查不到数据 query.variableNotExists(FlowVariableConstant.MACHINE_CODE); } } query.orderByProcessInstanceEndTime().desc(); // 按结束时间降序排列 IPage page = new Page<>(); long firstResult = (page.getCurrent()-1) * page.getSize(); List processes = query.listPage((int)firstResult,(int)queryVO.getSize()); page.setTotal(query.count()); List records = new LinkedList<>(); for(HistoricProcessInstance processInstance : processes) { CuredProgramVO vo = new CuredProgramVO(); FlowProgramProperties props = flowCommonService.getProgramPropertiesFromHis(processInstance.getId()); BeanUtils.copyProperties(props, vo); vo.setEndTime(processInstance.getEndTime()); vo.setActProgrammerName(props.getProgrammerName()); if(props.getActCheckerId() == 0){ vo.setActCheckerName(this.userCommonService.getUserNameById(props.getCheckerId()) ); }else{ vo.setActCheckerName(this.userCommonService.getUserNameById(props.getActCheckerId()) ); } if(props.getActCheckerId() == 0) { vo.setActSeniorName(this.userCommonService.getUserNameById(props.getSeniorId())); }else{ vo.setActSeniorName(this.userCommonService.getUserNameById(props.getActSeniorId())); } records.add(vo); } page.setRecords(records); return page; } }