| | |
| | | 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.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; |
| | |
| | | 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.*; |
| | | |
| | |
| | | private StartDispatcher dispatcher; |
| | | @Autowired |
| | | private TaskDispatchService taskDispatchService; |
| | | @Autowired |
| | | private QinzheFgbService qinzheFgbService; |
| | | /** |
| | | * 新增 |
| | | */ |
| | | @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); |
| | |
| | | |
| | | TaskDispatch dispatch = mesTaskService.saveTask(startVO); |
| | | |
| | | log.error("MES任务保存成功"); |
| | | log.info("MES任务保存成功"); |
| | | if(!dispatch.isDuplicateTask()){ |
| | | try { |
| | | FlowStartResult result = dispatcher.start(startVO); |
| | |
| | | } |
| | | return R.success(); |
| | | }catch (Exception e) { |
| | | log.error("接收mes任务失败", e);; |
| | | log.error("接收mes任务失败", e); |
| | | return R.fail(e.getMessage()); |
| | | } |
| | | |
| | |
| | | /** |
| | | * 验证数据 |
| | | * @param startVO |
| | | * @return |
| | | * @return 粗呕信息列表 |
| | | */ |
| | | private List<String> checkTaskData(TaskAssignVO startVO) { |
| | | List<String> errorList = new ArrayList<>(); |
| | |
| | | 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.setMachineCode(mesTaskVO.getEquipmentCode()); |
| | | 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); |
| | |
| | | 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.getAcruslEndEime() == null){ |
| | | errorList.add("检验反馈时间不能为空"); |
| | | } |
| | | return errorList; |