|
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<String,String> 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<String,String> 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<String> 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<FlowVO> confirmTablePage(IPage<FlowVO> 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<HistoricProcessInstance> processes = query
|
.listPage((int)firstResult, (int)page.getSize());
|
|
List<FlowVO> 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<FlowProgramFile> fileList = flowProgramFileService.lambdaQuery().eq(FlowProgramFile::getProcessInstanceId, processInstanceId).list();
|
|
result = String.join(",",fileList.stream().map(FlowProgramFile::getName).toList());
|
|
return result;
|
}
|
|
}
|