yangys
2025-09-23 3baca21e0e6563f8379359ef2ba78c224eb4bc80
blade-service/blade-mdm/src/main/java/org/springblade/mdm/thirdpart/controller/MesController.java
@@ -5,7 +5,12 @@
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springblade.core.tool.api.R;
import org.springblade.mdm.flow.constants.FlowContants;
import org.springblade.core.tool.utils.DateUtil;
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.flow.constants.FlowConstant;
import org.springblade.mdm.flow.entity.TaskDispatch;
import org.springblade.mdm.flow.excution.StartDispatcher;
import org.springblade.mdm.flow.service.TaskDispatchService;
@@ -14,7 +19,6 @@
import org.springblade.mdm.thirdpart.service.MesTaskService;
import org.springblade.mdm.thirdpart.vo.MesTaskFinishVO;
import org.springblade.mdm.thirdpart.vo.MesTaskVO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -33,13 +37,18 @@
   private StartDispatcher dispatcher;
   @Autowired
   private TaskDispatchService taskDispatchService;
   @Autowired
   private QinzheFgbService qinzheFgbService;
   @Autowired
   private MachineService machineService;
   /**
    * 新增
    */
   @PostMapping("/new-mes-task")
   @PostMapping("/mes-new-task")
   @Operation(summary = "接收MES任务", description = "接收MES任务")
   public R<Void> newTask(@RequestBody MesTaskVO mesTaskVO) {
      try {
         log.info("接收MES任务,参数:{}", mesTaskVO);
         TaskAssignVO startVO = this.toTaskAssignVO(mesTaskVO);
         List<String> errors = checkTaskData(startVO);
@@ -51,7 +60,7 @@
         TaskDispatch dispatch = mesTaskService.saveTask(startVO);
         log.error("MES任务保存成功");
         log.info("MES任务保存成功");
         if(!dispatch.isDuplicateTask()){
            try {
               FlowStartResult result = dispatcher.start(startVO);
@@ -70,7 +79,7 @@
         }
         return R.success();
      }catch (Exception e) {
         log.error("接收mes任务失败", e);;
         log.error("接收mes任务失败", e);
         return R.fail(e.getMessage());
      }
@@ -84,7 +93,7 @@
   /**
    * 验证数据
    * @param startVO
    * @return
    * @return 粗呕信息列表
    */
   private List<String> checkTaskData(TaskAssignVO startVO) {
      List<String> errorList = new ArrayList<>();
@@ -102,25 +111,68 @@
      if(StringUtils.isBlank(startVO.getMachineCode())){
         errorList.add("设备编码不能为空");
      }
      //TODO 工序名称 我们是必填,
      if(StringUtils.isBlank(startVO.getProcessName())){
         errorList.add("工序名称不能为空");
      }
      return errorList;
   }
   /**
    * 从mesvo转换为内部任务分派vo
    * @param mesTaskVO
    * @return
    * @param mesTaskVO mes发送数据VO
    * @return mdm内部的派工VO
    */
   TaskAssignVO toTaskAssignVO(MesTaskVO mesTaskVO) {
      TaskAssignVO taskAssignVO = new TaskAssignVO();
      BeanUtils.copyProperties(mesTaskVO, taskAssignVO);
      taskAssignVO.setOrderNumber(mesTaskVO.getOrderNumber());
      taskAssignVO.setDrawingNo(mesTaskVO.getDrawingCode());
      taskAssignVO.setDrawingNoEdition(mesTaskVO.getDrawingVersion());
      taskAssignVO.setProcessNo(mesTaskVO.getOperationCode());
      taskAssignVO.setProcessName(mesTaskVO.getOperationName());
      taskAssignVO.setCraftEdition(mesTaskVO.getRoutingVersion());
      taskAssignVO.setProcessEdition(mesTaskVO.getOperationVersion());
      taskAssignVO.setOperationId(mesTaskVO.getOperationId());
      taskAssignVO.setEquipmentCode(mesTaskVO.getEquipmentCode());
      Machine machine = this.machineService.getByEquipmentCode(mesTaskVO.getEquipmentCode());
      if(machine != null) {
         taskAssignVO.setMachineCode(machine.getCode());
      }
      taskAssignVO.setMachineMode(mesTaskVO.getEquipmentModel());
      taskAssignVO.setDispatchBy(mesTaskVO.getDspatchBy());
      if (mesTaskVO.getProductModel() != null) {
         taskAssignVO.setProductModel(mesTaskVO.getProductModel());
      }else{
         taskAssignVO.setProductModel(this.queryProductModel(mesTaskVO.getDrawingCode()));
      }
      try {
         taskAssignVO.setPlanStartTime(DateUtil.fromDate(DateUtil.parse(mesTaskVO.getPlanStartTime(),"yyyy-MM-dd HH:mm:ss")).toLocalDate());
      }catch(Exception e){
         log.error("接收mes数据,计划开始时间转换错误");
      }
      taskAssignVO.setTitle(taskAssignVO.getDrawingNo()+"-"+taskAssignVO.getProcessNo()+"-"+taskAssignVO.getProcessEdition()+"计划任务");
      taskAssignVO.setIsTempFlow(FlowContants.N);
      taskAssignVO.setIsTempFlow(FlowConstant.N);
      return taskAssignVO;
   }
   @PostMapping("/finish-task")
   /**
    * 查询产品型号
    * @param drawingNo 图号
    * @return 产品型号
    */
   String queryProductModel(String drawingNo){
      QinzheFgb fgb = qinzheFgbService.getByLjh(drawingNo);
      if(fgb!= null){
         return fgb.getCph();
      }else{
         return null;
      }
   }
   @PostMapping("/mes-finish-task")
   @Operation(summary = "MES任务完成推送", description = "MES任务完成推送")
   public R<Void> finishTask(@RequestBody MesTaskFinishVO finishTaskVO) {
      log.info("收到mes任务完成推送:{}",finishTaskVO);
@@ -134,23 +186,29 @@
         mesTaskService.finishTask(finishTaskVO);
         return R.success();
      }catch(Exception e){
         log.error("接收MES工序完成信息失败", e);;
         log.error("接收MES工序完成信息失败", e);
         return R.fail("内部错误");
      }
   }
   /**
    * MES二次推送数据检查
    * @param finishTaskVO 二次推送数据
    * @return 错误信息列表
    */
   private List<String> checkFinishTaskData(MesTaskFinishVO finishTaskVO) {
      List<String> errorList = new ArrayList<>();
      if(StringUtils.isBlank(finishTaskVO.getMesTaskId())){
         errorList.add("唯一标识不能为空");
      if(StringUtils.isBlank(finishTaskVO.getOperationId())){
         errorList.add("工序唯一码不能为空");
      }
      /*
      if(StringUtils.isBlank(finishTaskVO.getInspector())){
         errorList.add("检验员不能为空");
      }
      if(finishTaskVO.getCheckTime() == null){
      if(finishTaskVO.getAcruslEndTime() == null){
         errorList.add("检验反馈时间不能为空");
      }
      }*/
      return errorList;
   }