blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/entity/TaskDispatch.java
@@ -96,6 +96,14 @@ private String mesTaskId; /** * 操作员(mes提供) */ private String operator; /** * 操作者时间(mes提供) */ private Date operateTime; /** * 检验员(mes提供) */ private String inspector; blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/ApproveInfoQueryService.java
@@ -4,9 +4,13 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.engine.HistoryService; import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.task.api.history.HistoricTaskInstance; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.Func; import org.springblade.mdm.basesetting.producedivision.entity.ProduceDivision; import org.springblade.mdm.basesetting.producedivision.service.ProduceDivisionService; import org.springblade.mdm.commons.service.UserCommonService; import org.springblade.mdm.flow.vo.ApproveTableInfo; import org.springblade.mdm.program.entity.NcNode; import org.springblade.mdm.program.entity.NcProgramApproved; @@ -35,7 +39,10 @@ private IUserClient useClient; @Autowired private NcProgramApprovedService programApprovedService; @Autowired private ProduceDivisionService produceDivisionService; @Autowired private UserCommonService userCommonService; /** * 获取实际审批人姓名,和时间 * @param props 流程属性 @@ -73,11 +80,21 @@ seniorId = Func.toLong(task.getAssignee()); } } appInfo.setTeamLeaderName(getNameByUserid(teamLeaderId)); appInfo.setProgrammerName(getNameByUserid(programmerId)); appInfo.setCheckerName(getNameByUserid(checkerId)); appInfo.setSeniorName(getNameByUserid(seniorId)); if(teamLeaderId != 0) { appInfo.setTeamLeaderName(userCommonService.getUserNameById(teamLeaderId)); }else{ //没找到组长(不是试切任务),直接查找零件号对应得数据 try { ProduceDivision div = produceDivisionService.getByDrawingNoWithQinzhe(props.getDrawingNo()); appInfo.setTeamLeaderName(userCommonService.getUserNameById(div.getTeamLeaderId())); }catch(Exception e){ log.error("根据零件号:{}找不到人员职责表数据",props.getDrawingNo(),e); appInfo.setTeamLeaderName(""); } } appInfo.setProgrammerName(userCommonService.getUserNameById(programmerId)); appInfo.setCheckerName(userCommonService.getUserNameById(checkerId)); appInfo.setSeniorName(userCommonService.getUserNameById(seniorId)); //查询数控程序编号 Optional<NcProgramApproved> appOpt = programApprovedService.lambdaQuery().eq(NcProgramApproved::getProcessInstanceId, props.getProcessInstanceId()).oneOpt(); @@ -91,13 +108,4 @@ return appInfo; } String getNameByUserid(Long userid){ String name = StringUtils.EMPTY; //审核 R<User> userR = useClient.userInfoById(userid); if (userR.isSuccess()) { name = userR.getData().getName(); } return name; } } blade-service/blade-mdm/src/main/java/org/springblade/mdm/flow/service/TaskDispatchService.java
@@ -133,4 +133,8 @@ Optional<TaskDispatch> opt = lambdaQuery().eq(TaskDispatch::getMesTaskId, mesTaskId).oneOpt(); return opt.orElse(null); } public TaskDispatch getByProgramNo(String programNo) { return lambdaQuery().eq(TaskDispatch::getProgramNo, programNo).one(); } } blade-service/blade-mdm/src/main/java/org/springblade/mdm/statreport/controller/ConfirmTablePrintController.java
@@ -6,12 +6,10 @@ import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.servlet.http.HttpServletResponse; import liquibase.logging.mdc.customobjects.History; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.poi.ss.usermodel.DateUtil; import org.flowable.engine.HistoryService; import org.flowable.engine.RuntimeService; import org.flowable.engine.history.HistoricProcessInstance; import org.springblade.core.mp.support.Condition; import org.springblade.core.mp.support.Query; @@ -21,11 +19,8 @@ import org.springblade.mdm.flow.service.FlowCommonService; import org.springblade.mdm.flow.service.FlowProgramProperties; import org.springblade.mdm.flow.service.TaskDispatchService; import org.springblade.mdm.flow.vo.DispathTaskQueryVO; import org.springblade.mdm.flow.vo.FlowVO; import org.springblade.mdm.statreport.service.ApproveTableService; import org.springblade.mdm.statreport.service.ConfirmTablePrintService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -45,8 +40,7 @@ private FlowCommonService flowCommonService; private ConfirmTablePrintService confirmTablePrintService; private final TaskDispatchService taskDispatchService; private final HistoryService hisService; private final HistoryService historyService; @GetMapping("/confirm-page") @ApiOperationSupport(order = 3) @Operation(summary = "确认单列表", description = "确认单列表") @@ -60,16 +54,15 @@ @Operation(summary = "导出数控程序确认表", description = "数控程序确认表") public void exportConfirmTable(String processInstanceId,HttpServletResponse response) throws IOException { HistoricProcessInstance his = hisService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); String taskDispatchId = his.getBusinessKey(); TaskDispatch dispatch = taskDispatchService.getById(taskDispatchId); FlowProgramProperties props = flowCommonService.getProgramPropertiesFromHis(processInstanceId); HistoricProcessInstance his = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); //TaskDispatch dispatch = taskDispatchService.getById(his.getBusinessKey()); String progName = props.getDrawingNo()+"-"+props.getProcessNo()+"-"+props.getProcessEdition(); String filename = UrlUtil.encode("数控程序确认表"+progName)+".docx"; ByteArrayOutputStream outputStream = confirmTablePrintService.exportConfirmTableDoc(dispatch,props); ByteArrayOutputStream outputStream = confirmTablePrintService.exportConfirmTableDoc(props); byte[] fileBytes = outputStream.toByteArray(); blade-service/blade-mdm/src/main/java/org/springblade/mdm/statreport/controller/CuredProgramController.java
@@ -30,7 +30,7 @@ import java.util.Map; /** * 固化程序统计 * 固化程序统计,统计一段时间内固化了多少程序 */ @Slf4j @RestController blade-service/blade-mdm/src/main/java/org/springblade/mdm/statreport/mapper/TaskDispatchStatMapper.xml
@@ -3,11 +3,13 @@ <mapper namespace="org.springblade.mdm.statreport.mapper.TaskDispatchStatMapper"> <select id="pageQuery" resultType="org.springblade.mdm.statreport.vo.TaskDispatchStatVO"> select t.drawing_no,t.process_no,t.process_edition,t.create_time,n.update_time cure_time select t.id,t.drawing_no,t.process_no,t.process_edition,t.machine_code,t.create_time,n.update_time cure_time, t.process_instance_id from mdm_task_dispatch t left join mdm_nc_node n on t.drawing_no=n.drawing_no and t.process_no=n.process_no and t.process_edition=n.process_edition and n.is_deleted=0 and n.is_cured=1 and n.node_type='60' and n.is_deleted=0 and n.is_cured=1 and n.node_type='60' and t.machine_code=n.machine_code and n.is_last_edition=1 <where> t.is_deleted=0 and t.status=2 and (t.deviation is null or t.deviation='') <if test="query.drawingNo != null and query.drawingNo!=''"> blade-service/blade-mdm/src/main/java/org/springblade/mdm/statreport/service/ApproveTableService.java
@@ -93,7 +93,7 @@ dataMap.put("startTime",dispatchDateStr);//工段负责人/单元负责人派出时间 dataMap.put("fuzeren",approveInfo.getProgrammerName());//负责人 int isProgram = 0; if(StringUtils.equals(props.getHasCuredProgram(),FlowContants.Y)){ //校对任务 dataMap.put("jd", WordReplaceUtil.CHECKED); @@ -109,31 +109,24 @@ dataMap.put("fzy",WordReplaceUtil.CHECKED); //仿真 是 dataMap.put("fzn",WordReplaceUtil.UNCHECKED);//仿真 否 Date programDate = approveInfo.getCheckDate(); Date checkDate = approveInfo.getCheckDate(); String checkDateStr = " "; if (checkDate != null) { checkDateStr = DateUtil.format(programDate, DATE_PATTERN); } String approveDateStr = " "; if (approveInfo.getApproveDate() != null) { approveDateStr = DateUtil.format(approveInfo.getApproveDate(), DATE_PATTERN); } String bianzhi = userCommonService.getUserNameById(dispatch.getCreateUser()); String bianzhiDateStr = DateUtil.format(dispatch.getCreateTime(), DATE_PATTERN); dataMap.put("bianzhi",bianzhi+"/"+bianzhiDateStr);//编制:计划员/发起时间 dataMap.put("jiaodui",approveInfo.getTeamLeaderName()+"/时间不确定"); dataMap.put("shenpi",approveInfo.getSeniorName()+"/时间不确定"); dataMap.put("bianzhi",bianzhi+"/"+formatTimeForTable(dispatch.getCreateTime()));//编制:计划员/发起时间 dataMap.put("jiaodui",approveInfo.getTeamLeaderName()+"/"+formatTimeForTable(approveInfo.getDispatchDate())); // dataMap.put("shenpi",approveInfo.getSeniorName()+"/"+formatTimeForTable(approveInfo.getApproveDate()));//就是高师审批时间 dataMap.put("sendPath",machine.getProgSendDir()!=null?machine.getProgSendDir():""); return dataMap; } String formatTimeForTable(Date date){ String DATE_PATTERN = "yyyy-M-d"; if(date==null){ return ""; } return DateUtil.format(date, DATE_PATTERN); } /* public void exportApproveTableOld(String processInstanceId, OutputStream os) throws DocumentException, IOException { blade-service/blade-mdm/src/main/java/org/springblade/mdm/statreport/service/ConfirmTablePrintService.java
@@ -6,44 +6,36 @@ 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.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.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.ApproveInfoQueryService; 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.service.TaskDispatchService; import org.springblade.mdm.flow.vo.ApproveTableInfo; import org.springblade.mdm.flow.vo.FlowVO; import org.springblade.mdm.program.entity.NcNode; import org.springblade.mdm.program.service.NcNodeService; 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.*; @@ -58,24 +50,25 @@ 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; private ApproveInfoQueryService approveInfoQueryService; private final MachineService machineService; private final NcNodeService nodeService; 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(TaskDispatch dispatch, FlowProgramProperties props) throws IOException { public ByteArrayOutputStream exportConfirmTableDoc(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); WordReplaceUtil.convert(getData( props), tplInputStream, os); } return os; } @@ -84,53 +77,74 @@ * 获取填充数据 */ Map<String,String> getData(TaskDispatch dispatch,FlowProgramProperties props){ //ApproveTableInfo approveInfo = approveInfoQueryService.getApproveInfo(props); Map<String,String> getData(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<>(); NcNode node = this.nodeService.getById(props.getNodeId()); TaskDispatch dispatch = taskDispatchService.getByProgramNo(node.getProgramNo()); dataMap.put("bh","不明确"); dataMap.put("bh",node.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有相同字符 String DATE_PATTERN = "yyyy-M-d"; QinzheFgb qzfgb = qinzheFgbService.getByLjh(props.getDrawingNo()); dataMap.put("drawingName",qzfgb.getLjmc()); String dispatchDateStr = " "; 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",dispatch.getDeviation()==null?"":dispatch.getDeviation()); dataMap.put("deviation", props.getDeviation() == null ? "" : props.getDeviation()); dataMap.put("controlSystem",ctlSystem); dataMap.put("czz","操作者"); dataMap.put("jyy","检验员"); if (StringUtils.isNotBlank(dispatch.getOperator())){ dataMap.put("czz", dispatch.getOperator()+"/"+formatTimeForTable(dispatch.getOperateTime()));//操作员,时间 }else{ dataMap.put("czz", ""); } dataMap.put("programNo",dispatch.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",""); //填充空检验员 String bianzhiDateStr = "";//DateUtil.format(dispatch.getCreateTime(), DATE_PATTERN); dataMap.put("fuhey", WordReplaceUtil.UNCHECKED); dataMap.put("fuhen", WordReplaceUtil.CHECKED); dataMap.put("jly",WordReplaceUtil.UNCHECKED); dataMap.put("jln",WordReplaceUtil.CHECKED); } dataMap.put("bianzhi","编程员?/"+bianzhiDateStr); dataMap.put("jiaodui","工艺校对?/时间不确定"); dataMap.put("shenhe","高师?/时间不确定"); 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():""); @@ -182,7 +196,7 @@ vo.setHistoryTaskEndTime(processInstance.getEndTime()); vo.setFile(getFileString(processInstance.getId())); //vo.setFile(getFileString(processInstance.getId())); records.add(vo); } @@ -190,6 +204,14 @@ return page; } String formatTimeForTable(Date date){ if(date==null){ return ""; } return DateUtil.format(date, DATE_PATTERN); } /** 获取列表中的文件名 */ blade-service/blade-mdm/src/main/java/org/springblade/mdm/statreport/service/TaskDispatchStatService.java
@@ -6,15 +6,22 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.poi.ss.usermodel.DateUtil; import org.flowable.engine.HistoryService; import org.flowable.engine.RuntimeService; import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.engine.runtime.ProcessInstance; import org.flowable.variable.api.event.FlowableVariableEvent; import org.jetbrains.annotations.NotNull; import org.springblade.core.mp.support.Condition; import org.springblade.core.oss.OssTemplate; import org.springblade.core.tool.api.R; 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.service.ParamService; import org.springblade.mdm.commons.service.UserCommonService; import org.springblade.mdm.flow.constants.FlowContants; import org.springblade.mdm.flow.constants.FlowVariableContants; import org.springblade.mdm.flow.entity.TaskDispatch; import org.springblade.mdm.flow.service.ApproveInfoQueryService; import org.springblade.mdm.flow.service.FlowProgramProperties; @@ -49,8 +56,9 @@ @Autowired private MachineService machineService; @Autowired private TaskDispatchService taskDispatchService; private HistoryService historyService; @Autowired private RuntimeService runtimeService; @Autowired private TaskDispatchStatMapper taskDispatchStatMapper; @@ -62,6 +70,25 @@ IPage<TaskDispatchStatVO> voPage = taskDispatchStatMapper.pageQuery(Condition.getPage(queryVO),queryVO); voPage.getRecords().forEach(vo -> { HistoricProcessInstance hisInst = historyService.createHistoricProcessInstanceQuery().processInstanceId(vo.getProcessInstanceId()).singleResult(); if(hisInst != null){ vo.setProgrammerName(userCommonService.getUserNameById(Func.toLong(hisInst.getProcessVariables().get(FlowVariableContants.PROGRAMMER)))); } if(vo.getCureTime() == null){ ProcessInstance runInst = runtimeService.createProcessInstanceQuery().processInstanceId(vo.getProcessInstanceId()).singleResult(); if(runInst == null || runInst.isEnded()){ vo.setStatus(2);//固化中 }else{ vo.setStatus(1);//试切中 } }else{ vo.setStatus(3);//已固化 } }); return voPage; } } blade-service/blade-mdm/src/main/java/org/springblade/mdm/statreport/vo/TaskDispatchStatVO.java
@@ -17,10 +17,8 @@ * 设备编号 */ private String machineCode; /** * 工序名称,如“精铣” */ //private String processName; private String processInstanceId; /** * 工序版次 @@ -31,22 +29,15 @@ */ private String processNo; /** * 工艺版次 */ private String craftEdition; /** * 零组件号/图号 */ private String drawingNo; /** * 图号版次 */ private String drawingNoEdition; /** * 产品型号 * 主管工艺姓名 */ private String productModel; private String programmerName; /** blade-service/blade-mdm/src/main/java/org/springblade/mdm/thirdpart/service/MesTaskService.java
@@ -3,6 +3,7 @@ import lombok.extern.slf4j.Slf4j; import org.flowable.engine.RuntimeService; import org.flowable.engine.runtime.ProcessInstance; import org.springblade.mdm.flow.constants.FlowVariableContants; import org.springblade.mdm.flow.entity.TaskDispatch; import org.springblade.mdm.flow.service.TaskDispatchService; @@ -57,7 +58,12 @@ taskDispatch.setCheckTime(finishTaskVO.getCheckTime()); taskDispatchService.updateById(taskDispatch); ProcessInstance inst = runtimeService.createProcessInstanceQuery() .processInstanceId(taskDispatch.getProcessInstanceId()).active().singleResult(); if(inst != null){ runtimeService.setVariable(taskDispatch.getProcessInstanceId(), FlowVariableContants.PROCESS_CARD,finishTaskVO.getProcessCard()); } } } }