package org.springblade.mdm.statreport.service; import com.baomidou.mybatisplus.core.metadata.IPage; import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.HistoryService; import org.flowable.engine.RuntimeService; import org.flowable.engine.TaskService; import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.engine.history.HistoricProcessInstanceQuery; import org.flowable.engine.task.Comment; import org.flowable.task.api.Task; import org.flowable.task.api.TaskInfoQuery; import org.flowable.task.api.TaskQuery; import org.flowable.task.api.history.HistoricTaskInstance; import org.flowable.task.api.history.HistoricTaskInstanceQuery; import org.springblade.core.oss.OssTemplate; import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; import org.springblade.mdm.basesetting.machine.entity.Machine; import org.springblade.mdm.basesetting.machine.service.MachineService; import org.springblade.mdm.commons.contants.DictBizConstants; import org.springblade.mdm.commons.service.ParamService; import org.springblade.mdm.flow.constants.FlowContants; import org.springblade.mdm.flow.entity.FlowProgramFile; import org.springblade.mdm.flow.entity.MdmFlowProcess; import org.springblade.mdm.flow.entity.TaskDispatch; import org.springblade.mdm.flow.service.FlowProgramFileService; import org.springblade.mdm.flow.service.FlowProgramProperties; import org.springblade.mdm.flow.util.MdmFlowCache; import org.springblade.mdm.flow.vo.ApproveTableInfo; import org.springblade.mdm.flow.vo.FlowVO; import org.springblade.mdm.statreport.utils.WordReplaceUtil; import org.springblade.system.feign.IDictBizClient; 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.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.*; /** * 流程业务实现类 * * @author Chill */ @Service @AllArgsConstructor public class ConfirmTablePrintService { private final RuntimeService runtimeService; private final IDictBizClient dictBizClient; private final HistoryService historyService; private final IUserClient userClient; private final FlowProgramFileService flowProgramFileService; @Autowired private MachineService machineService; @Autowired private ParamService paramService; @Autowired private OssTemplate ossTemplate; /** * 导出word岸本 * @param dispatch 任务分派 * @param props 流程属性 */ public ByteArrayOutputStream exportConfirmTableDoc(TaskDispatch dispatch, FlowProgramProperties props) throws IOException { ByteArrayOutputStream os= new ByteArrayOutputStream(); String tplOssName = paramService.confirmTableTemplateOssFileName(); try(InputStream tplInputStream = ossTemplate.statFileStream(tplOssName);) { WordReplaceUtil.convert(getData(dispatch, props), tplInputStream, os); } return os; } /** * 获取填充数据 */ Map getData(TaskDispatch dispatch,FlowProgramProperties props){ //ApproveTableInfo approveInfo = approveInfoQueryService.getApproveInfo(props); Machine machine; String machineCode = props.getMachineCode(); machine = machineService.getByCode(machineCode); if(dispatch == null){ dispatch = new TaskDispatch();//TODO 后面去掉 } Map dataMap = new HashMap<>(); dataMap.put("bh","不明确"); dataMap.put("drawingNo",props.getDrawingNo()); dataMap.put("processNo",props.getProcessNo()); dataMap.put("craftEdition",props.getCraftEdition()); dataMap.put("processEdition",props.getProcessEdition()); dataMap.put("machineMode",machine.getName()); String DATE_PATTERN = "yyyy-M-d"; String dispatchDateStr = " "; String ctlSystem = ""; R ctmR = dictBizClient.getValue(DictBizConstants.CONTROL_SYSTEM,machine.getControlSystem()); if(ctmR.isSuccess()){ ctlSystem = ctmR.getData(); } dataMap.put("deviation",dispatch.getDeviation()==null?"":dispatch.getDeviation()); dataMap.put("controlSystem",ctlSystem); dataMap.put("czz","操作者"); dataMap.put("jyy","检验员"); dataMap.put("programNo",dispatch.getProgramNo()); dataMap.put("fuhey",WordReplaceUtil.CHECKED); dataMap.put("fuhen",WordReplaceUtil.UNCHECKED); dataMap.put("jly",WordReplaceUtil.CHECKED); dataMap.put("jln",WordReplaceUtil.UNCHECKED); String bianzhiDateStr = "";//DateUtil.format(dispatch.getCreateTime(), DATE_PATTERN); dataMap.put("bianzhi","编程员?/"+bianzhiDateStr); dataMap.put("jiaodui","工艺校对?/时间不确定"); dataMap.put("shenhe","高师?/时间不确定"); dataMap.put("sendPath",machine.getProgSendDir()!=null?machine.getProgSendDir():""); return dataMap; } /** * 已完结的流程分页列表 * @param page 分页信息 * @param createTimeBegin * @param createTimeEnd * @param keyword 关键字 * @return */ public IPage confirmTablePage(IPage page, String drawingNo, String keyword,LocalDateTime createTimeBegin, LocalDateTime createTimeEnd) { //固化里路村官 HistoricProcessInstanceQuery query = this.historyService.createHistoricProcessInstanceQuery().finished().processDefinitionKey(FlowContants.CURE_PROCESS_KEY).includeProcessVariables(); //.finished() // 只查询已完成的流程.unfinished() // 查询未完成的流程 query.variableNotExists(FlowContants.EXCEPTION);//非异常流程 if(createTimeBegin!=null) { query.startedAfter(DateUtil.toDate(createTimeBegin)); } if(createTimeEnd!=null) { query.startedBefore(DateUtil.toDate(createTimeEnd)); } if(Func.isNotEmpty(drawingNo)) { String likeVal = "%" + drawingNo + "%"; query.variableValueLike(FlowContants.DRAWING_NO,likeVal); } query.orderByProcessInstanceEndTime().desc(); // 按结束时间降序排列 page.setTotal(query.count()); long firstResult = (page.getCurrent()-1) * page.getSize(); List processes = query .listPage((int)firstResult, (int)page.getSize()); List records = new LinkedList<>(); for(HistoricProcessInstance processInstance : processes) { FlowVO vo = new FlowVO(); vo.setProcessDefinitionKey(processInstance.getProcessDefinitionKey()); vo.setProcessInstanceId(processInstance.getId()); vo.setProcessDefinitionName(processInstance.getProcessDefinitionName()); vo.setVariables(processInstance.getProcessVariables()); vo.setProcessCreateTime(processInstance.getStartTime()); vo.setHistoryTaskEndTime(processInstance.getEndTime()); vo.setFile(getFileString(processInstance.getId())); records.add(vo); } page.setRecords(records); return page; } /** 获取列表中的文件名 */ String getFileString(String processInstanceId){ String result = ""; List fileList = flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId, processInstanceId).list(); result = String.join(",",fileList.stream().map(FlowProgramFile::getName).toList()); return result; } }