yangys
2025-09-13 e853c35455332a4652ec604c650ca82c411c864d
blade-service/blade-mdm/src/main/java/org/springblade/mdm/statreport/service/ConfirmTablePrintService.java
@@ -6,44 +6,37 @@
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.constants.FlowVariableContants;
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 +51,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 +78,78 @@
    * 获取填充数据
    */
   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);
      Map<String, String> dataMap = new HashMap<>();
      NcNode node = this.nodeService.getById(props.getNodeId());
      TaskDispatch dispatch = taskDispatchService.getByProgramNo(node.getProgramNo());
      if(dispatch == null){
         dispatch = new TaskDispatch();//TODO 后面去掉
         //防止老数据报错
         dispatch = new TaskDispatch();
      }
      dataMap.put("bh",props.getProgramNo());//编号,就是数控程序编号
      Map<String,String> dataMap = new HashMap<>();
      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有相同字符
      dataMap.put("bh","不明确");
      QinzheFgb qzfgb = qinzheFgbService.getByLjh(props.getDrawingNo());
      dataMap.put("drawingName",qzfgb.getLjmc());
      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("productModel", props.getProductModel());
      String DATE_PATTERN = "yyyy-M-d";
      //页数,页号
      dataMap.put("tp", "1");
      dataMap.put("pg", "1");
      String dispatchDateStr = " ";
      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()){
      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("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("programNo",dispatch.getProgramNo());
      dataMap.put("fuhey",WordReplaceUtil.CHECKED);
      dataMap.put("fuhen",WordReplaceUtil.UNCHECKED);
      dataMap.put("jly",WordReplaceUtil.CHECKED);
      dataMap.put("jln",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():"");
@@ -149,7 +168,7 @@
      //固化里路村官
      HistoricProcessInstanceQuery query = this.historyService.createHistoricProcessInstanceQuery().finished().processDefinitionKey(FlowContants.CURE_PROCESS_KEY).includeProcessVariables();
         //.finished() // 只查询已完成的流程.unfinished() // 查询未完成的流程
      query.variableNotExists(FlowContants.EXCEPTION);//非异常流程
      query.variableNotExists(FlowVariableContants.EXCEPTION);//非异常流程
      if(createTimeBegin!=null) {
         query.startedAfter(DateUtil.toDate(createTimeBegin));
      }
@@ -158,7 +177,7 @@
      }
      if(Func.isNotEmpty(drawingNo)) {
         String likeVal = "%" + drawingNo + "%";
         query.variableValueLike(FlowContants.DRAWING_NO,likeVal);
         query.variableValueLike(FlowVariableContants.DRAWING_NO,likeVal);
      }
@@ -182,7 +201,7 @@
         vo.setHistoryTaskEndTime(processInstance.getEndTime());
         vo.setFile(getFileString(processInstance.getId()));
         //vo.setFile(getFileString(processInstance.getId()));
         records.add(vo);
      }
@@ -190,6 +209,14 @@
      return page;
   }
   String formatTimeForTable(Date date){
      if(date==null){
         return "";
      }
      return DateUtil.format(date, DATE_PATTERN);
   }
   /**
   获取列表中的文件名
    */