package org.springblade.mdm.thirdpart.controller;
|
|
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.commons.lang3.StringUtils;
|
import org.springblade.core.tool.api.R;
|
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.FlowContants;
|
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.flow.vo.FlowStartResult;
|
import org.springblade.mdm.flow.vo.TaskAssignVO;
|
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.factory.annotation.Autowired;
|
import org.springframework.web.bind.annotation.*;
|
|
import java.util.ArrayList;
|
import java.util.List;
|
|
@Slf4j
|
@RestController
|
@RequestMapping("/thirdparty/")
|
@Tag(name = "MES接口", description = "MES接口")
|
public class MesController {
|
|
@Autowired
|
private MesTaskService mesTaskService;
|
@Autowired
|
private StartDispatcher dispatcher;
|
@Autowired
|
private TaskDispatchService taskDispatchService;
|
@Autowired
|
private QinzheFgbService qinzheFgbService;
|
/**
|
* 新增
|
*/
|
@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);
|
if (!errors.isEmpty()) {
|
String msg = formatError(errors);
|
log.error("接收MES任务{},验证失败:{}",mesTaskVO,msg);
|
return R.fail(msg);
|
}
|
|
TaskDispatch dispatch = mesTaskService.saveTask(startVO);
|
|
log.info("MES任务保存成功");
|
if(!dispatch.isDuplicateTask()){
|
try {
|
FlowStartResult result = dispatcher.start(startVO);
|
|
dispatch.setStatus(TaskDispatch.STATUS_STARTED);
|
dispatch.setProcessInstanceId(result.getProcessInstanceId());
|
dispatch.setProgramNo(result.getProgramNo());
|
taskDispatchService.updateById(dispatch);
|
}catch (Exception e){
|
dispatch.setStatus(TaskDispatch.STATUS_EXCEPTION);
|
dispatch.setErrMsg(e.getMessage());
|
taskDispatchService.updateById(dispatch);
|
|
log.error("MES任务启动失败", e);
|
}
|
}
|
return R.success();
|
}catch (Exception e) {
|
log.error("接收mes任务失败", e);
|
return R.fail(e.getMessage());
|
}
|
|
}
|
|
//private IResultCode formatError(List<String> errors) {
|
private String formatError(List<String> errors) {
|
return StringUtils.join(errors,",");
|
}
|
|
/**
|
* 验证数据
|
* @param startVO
|
* @return 粗呕信息列表
|
*/
|
private List<String> checkTaskData(TaskAssignVO startVO) {
|
List<String> errorList = new ArrayList<>();
|
if(StringUtils.isBlank(startVO.getDrawingNo())){
|
errorList.add("图号不能为空");
|
}
|
|
if(StringUtils.isBlank(startVO.getProcessNo())){
|
errorList.add("工序号不能为空");
|
}
|
|
if(StringUtils.isBlank(startVO.getProcessEdition())){
|
errorList.add("工序版次不能为空");
|
}
|
if(StringUtils.isBlank(startVO.getMachineCode())){
|
errorList.add("设备编码不能为空");
|
}
|
|
if(StringUtils.isBlank(startVO.getProcessName())){
|
errorList.add("工序名称不能为空");
|
}
|
return errorList;
|
}
|
|
/**
|
* 从mesvo转换为内部任务分派vo
|
* @param mesTaskVO mes发送数据VO
|
* @return mdm内部的派工VO
|
*/
|
TaskAssignVO toTaskAssignVO(MesTaskVO mesTaskVO) {
|
TaskAssignVO taskAssignVO = new 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);
|
return taskAssignVO;
|
}
|
|
/**
|
* 查询产品型号
|
* @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);
|
List<String> errors = checkFinishTaskData(finishTaskVO);
|
if (!errors.isEmpty()) {
|
String msg = formatError(errors);
|
log.error("接收MES完成推送{},验证失败:{}",finishTaskVO,msg);
|
return R.fail(msg);
|
}
|
try {
|
mesTaskService.finishTask(finishTaskVO);
|
return R.success();
|
}catch(Exception 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.getOperationId())){
|
errorList.add("工序唯一码不能为空");
|
}
|
if(StringUtils.isBlank(finishTaskVO.getInspector())){
|
errorList.add("检验员不能为空");
|
}
|
if(finishTaskVO.getAcruslEndEime() == null){
|
errorList.add("检验反馈时间不能为空");
|
}
|
return errorList;
|
|
}
|
@GetMapping("/ping")
|
@Operation(summary = "MES ping", description = "测试接口通畅")
|
public R<String> ping() {
|
try {
|
|
return R.data("pong");
|
}catch (Exception e) {
|
return R.fail(e.getMessage());
|
}
|
|
}
|
|
}
|