|
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<CuredProgramVO> 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<Long> workshopList = new ArrayList<>();
|
Map<Long,Long> relMap = deptRelationConfig.getDeptWorkshopMap();
|
for(Long deptId : queryVO.getDeptIds()){
|
workshopList.add(relMap.get(deptId));
|
}
|
//根据车间id,查询所有的下级部门:主要应该是工段
|
List<Long> 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<Machine> 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<CuredProgramVO> page = new Page<>();
|
long firstResult = (page.getCurrent()-1) * page.getSize();
|
List<HistoricProcessInstance> processes = query.listPage((int)firstResult,(int)queryVO.getSize());
|
|
page.setTotal(query.count());
|
|
|
List<CuredProgramVO> 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;
|
}
|
|
}
|