|
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.history.HistoricProcessInstance;
|
import org.flowable.engine.history.HistoricProcessInstanceQuery;
|
import org.springblade.core.oss.OssTemplate;
|
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.basesetting.producedivision.entity.QinzheFgb;
|
import org.springblade.mdm.basesetting.producedivision.service.QinzheFgbService;
|
import org.springblade.mdm.commons.contants.DictBizConstants;
|
import org.springblade.mdm.commons.service.ParamService;
|
import org.springblade.mdm.flow.constants.FlowConstant;
|
import org.springblade.mdm.flow.constants.FlowVariableConstant;
|
import org.springblade.mdm.flow.entity.FlowProgramFile;
|
import org.springblade.mdm.flow.entity.TaskDispatch;
|
import org.springblade.mdm.flow.service.ApproveInfoQueryService;
|
import org.springblade.mdm.flow.service.FlowProgramFileService;
|
import org.springblade.mdm.flow.service.FlowProgramProperties;
|
import org.springblade.mdm.flow.service.TaskDispatchService;
|
import org.springblade.mdm.flow.vo.ApproveTableInfo;
|
import org.springblade.mdm.flow.vo.FlowVO;
|
import org.springblade.mdm.program.entity.NcNodeHis;
|
import org.springblade.mdm.program.service.NcNodeHisService;
|
import org.springblade.mdm.program.service.NcNodeService;
|
import org.springblade.mdm.statreport.utils.WordReplaceUtil;
|
import org.springblade.system.feign.IDictBizClient;
|
import org.springframework.stereotype.Service;
|
|
import java.io.ByteArrayOutputStream;
|
import java.io.IOException;
|
import java.io.InputStream;
|
import java.time.LocalDateTime;
|
import java.util.*;
|
|
/**
|
* 流程业务实现类
|
*
|
* @author Chill
|
*/
|
@Service
|
@AllArgsConstructor
|
public class ConfirmTablePrintService {
|
|
private final IDictBizClient dictBizClient;
|
private final HistoryService historyService;
|
private final FlowProgramFileService flowProgramFileService;
|
private ApproveInfoQueryService approveInfoQueryService;
|
private final MachineService machineService;
|
private final NcNodeService nodeService;
|
private final NcNodeHisService nodeHisService;
|
private final ParamService paramService;
|
private final TaskDispatchService taskDispatchService;
|
private final OssTemplate ossTemplate;
|
private final QinzheFgbService qinzheFgbService;
|
private static final String DATE_PATTERN = "yyyy-M-d";
|
/**
|
* 导出word岸本
|
* @param dispatch 任务分派
|
* @param props 流程属性
|
*/
|
public ByteArrayOutputStream exportConfirmTableDoc(FlowProgramProperties props) throws IOException {
|
ByteArrayOutputStream os= new ByteArrayOutputStream();
|
String tplOssName = paramService.confirmTableTemplateOssFileName();
|
try(InputStream tplInputStream = ossTemplate.statFileStream(tplOssName);) {
|
WordReplaceUtil.convert(getData( props), tplInputStream, os);
|
}
|
return os;
|
}
|
|
/**
|
* 获取填充数据
|
*/
|
|
Map<String,String> getData(FlowProgramProperties props) {
|
ApproveTableInfo approveInfo = approveInfoQueryService.getApproveInfo(props);
|
Machine machine;
|
String machineCode = props.getMachineCode();
|
machine = machineService.getByCode(machineCode);
|
|
Map<String, String> dataMap = new HashMap<>();
|
//NcNode node = this.nodeService.getById(props.getNodeId());
|
NcNodeHis node = nodeHisService.getById(props.getNodeId());
|
TaskDispatch dispatch = taskDispatchService.getByProgramNo(node.getProgramNo());
|
|
if(dispatch == null){
|
//防止老数据报错
|
dispatch = new TaskDispatch();
|
}
|
dataMap.put("bh",props.getProgramNo());//编号,就是数控程序编号
|
|
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());
|
dataMap.put("drawingEdition", props.getDrawingNoEdition());//word内不能跟drawingNo有相同字符
|
|
QinzheFgb qzfgb = qinzheFgbService.getByLjh(props.getDrawingNo());
|
dataMap.put("drawingName",qzfgb.getLjmc());
|
|
dataMap.put("productModel", props.getProductModel());
|
|
//页数,页号
|
dataMap.put("tp", "1");
|
dataMap.put("pg", "1");
|
|
|
dataMap.put("processName", dispatch.getProcessName());
|
dataMap.put("processCard", dispatch.getProcessCard());
|
|
String ctlSystem = "";
|
R<String> ctmR = dictBizClient.getValue(DictBizConstants.CONTROL_SYSTEM, machine.getControlSystem());
|
if (ctmR.isSuccess()) {
|
ctlSystem = ctmR.getData();
|
}
|
dataMap.put("deviation", props.getDeviation() == null ? "" : props.getDeviation());
|
dataMap.put("controlSystem", ctlSystem);
|
if (StringUtils.isNotBlank(dispatch.getOperator())){
|
dataMap.put("czz", dispatch.getOperator()+"/"+formatTimeForTable(dispatch.getOperateTime()));//操作员,时间
|
}else{
|
dataMap.put("czz", "");
|
}
|
dataMap.put("programNo",props.getProgramNo());
|
if(StringUtils.isNotBlank(dispatch.getInspector())) {
|
dataMap.put("jyy",dispatch.getInspector()+"/"+formatTimeForTable(dispatch.getCheckTime()));//实际检验员和检验时间
|
|
//有检验员,即 符合该工序工艺卡片尺寸特性要求
|
dataMap.put("fuhey", WordReplaceUtil.CHECKED);
|
dataMap.put("fuhen", WordReplaceUtil.UNCHECKED);
|
|
dataMap.put("jly",WordReplaceUtil.CHECKED);
|
dataMap.put("jln",WordReplaceUtil.UNCHECKED);
|
}else {
|
dataMap.put("jyy",""); //填充空检验员
|
|
dataMap.put("fuhey", WordReplaceUtil.UNCHECKED);
|
dataMap.put("fuhen", WordReplaceUtil.CHECKED);
|
|
dataMap.put("jly",WordReplaceUtil.UNCHECKED);
|
dataMap.put("jln",WordReplaceUtil.CHECKED);
|
}
|
|
dataMap.put("bianzhi",approveInfo.getProgrammerName()+"/"+formatTimeForTable(approveInfo.getProgrammingDate()));//编程人员
|
//approveInfo.getDispatchDate()
|
dataMap.put("jiaodui",approveInfo.getTeamLeaderName()+"/"+formatTimeForTable(approveInfo.getCheckDate()));//校对:专业组长
|
dataMap.put("shenhe",approveInfo.getSeniorName()+"/"+formatTimeForTable(approveInfo.getApproveDate()));
|
|
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(FlowConstant.CURE_PROCESS_KEY).includeProcessVariables();
|
//.finished() // 只查询已完成的流程.unfinished() // 查询未完成的流程
|
query.variableNotExists(FlowVariableConstant.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(FlowVariableConstant.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 formatTimeForTable(Date date){
|
if(date==null){
|
return "";
|
}
|
|
return DateUtil.format(date, DATE_PATTERN);
|
}
|
/**
|
获取列表中的文件名
|
*/
|
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;
|
}
|
|
}
|