package com.chinaztt.mes.plan.state.manufacturing; import cn.hutool.core.collection.CollectionUtil; import com.chinaztt.mes.common.handler.StateMachineHandler; import com.chinaztt.mes.plan.entity.ManufacturingOrder; import com.chinaztt.mes.plan.mapper.ManufacturingOrderMapper; import com.chinaztt.mes.plan.service.ManufacturingOrderService; import com.chinaztt.mes.plan.state.manufacturing.constant.ManufacturingOrderEvents; import com.chinaztt.mes.plan.state.manufacturing.constant.ManufacturingOrderStateStringValues; import com.chinaztt.ztt.common.core.util.R; import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.springframework.messaging.Message; import org.springframework.statemachine.StateMachine; import org.springframework.statemachine.annotation.OnTransition; import org.springframework.statemachine.annotation.WithStateMachine; import org.springframework.stereotype.Component; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; /** * @Author: cxf * @Date: 2020-09-19 9:51 */ @AllArgsConstructor @Component @WithStateMachine(id = "manufacturingOrderStateMachine") public class ManufacturingOrderStateListener { private ManufacturingOrderMapper manufacturingOrderMapper; private ManufacturingOrderService manufacturingOrderService; /** * 已下达 */ @OnTransition(target = ManufacturingOrderStateStringValues.ISSUED) public boolean issued(StateMachine stateMachine, Message msg) { ManufacturingOrder manufacturingOrder = (ManufacturingOrder) msg.getHeaders().get("manufacturingOrder"); //已计划到已下达 if (manufacturingOrder.getState().equals(ManufacturingOrderStateStringValues.PLANNED)) { //修改车间状态 R result = manufacturingOrderService.changeState(manufacturingOrder, "RELEASE"); if (result.getCode() == 1) { stateMachine.getExtendedState().getVariables().put(StateMachineHandler.ERROR_KEY, manufacturingOrder.getMoNo() + result.getMsg()); return false; } } //已完成到已下达 if (manufacturingOrder.getState().equals(ManufacturingOrderStateStringValues.COMPLETED)) { //修改车间订单状态 R result = manufacturingOrderService.changeState(manufacturingOrder, false); if (result.getCode() == 1) { stateMachine.getExtendedState().getVariables().put(StateMachineHandler.ERROR_KEY, manufacturingOrder.getMoNo() + result.getMsg()); return false; } } //已取消到已下达 if (manufacturingOrder.getState().equals(ManufacturingOrderStateStringValues.CANCELED)) { stateMachine.getExtendedState().getVariables().put(StateMachineHandler.ERROR_KEY, "已取消不可改为已下达"); return false; } manufacturingOrder.setState(ManufacturingOrderStateStringValues.ISSUED); manufacturingOrderMapper.updateById(manufacturingOrder); return true; } /** * 已完成 */ @OnTransition(target = ManufacturingOrderStateStringValues.COMPLETED) public boolean completed(StateMachine stateMachine, Message msg) { ManufacturingOrder manufacturingOrder = (ManufacturingOrder) msg.getHeaders().get("manufacturingOrder"); //判断一下对应的工单是否全部完成/取消 List checkResult = manufacturingOrderMapper.checkOperationTaskStateByMoId(manufacturingOrder.getId(), Arrays.asList("04completed","05canceled")); if (CollectionUtil.isNotEmpty(checkResult)) { stateMachine.getExtendedState().getVariables().put(StateMachineHandler.ERROR_KEY, "工单:" + checkResult.stream().collect(Collectors.joining("、")) + "未完成/未取消"); return false; } //已计划到已完成 if (manufacturingOrder.getState().equals(ManufacturingOrderStateStringValues.PLANNED)) { stateMachine.getExtendedState().getVariables().put(StateMachineHandler.ERROR_KEY, "请先下达"); return false; } //已下达到已完成 if (manufacturingOrder.getState().equals(ManufacturingOrderStateStringValues.ISSUED)) { //修改车间订单状态 R result = manufacturingOrderService.changeState(manufacturingOrder, true); if (result.getCode() == 1) { stateMachine.getExtendedState().getVariables().put(StateMachineHandler.ERROR_KEY, manufacturingOrder.getMoNo() + result.getMsg()); return false; } } manufacturingOrder.setState(ManufacturingOrderStateStringValues.COMPLETED); manufacturingOrderMapper.updateById(manufacturingOrder); return true; } /** * 已取消 */ @OnTransition(target = ManufacturingOrderStateStringValues.CANCELED) public boolean canceled(StateMachine stateMachine, Message msg) { ManufacturingOrder manufacturingOrder = (ManufacturingOrder) msg.getHeaders().get("manufacturingOrder"); //已计划到已取消 if (manufacturingOrder.getState().equals(ManufacturingOrderStateStringValues.PLANNED) && StringUtils.isNotBlank(manufacturingOrder.getIfsOrderNo())) { //修改车间状态 R result = manufacturingOrderService.changeState(manufacturingOrder, "CANCEL"); if (result.getCode() == 1) { stateMachine.getExtendedState().getVariables().put(StateMachineHandler.ERROR_KEY, manufacturingOrder.getMoNo() + result.getMsg()); return false; } } //已下达到已取消 if (manufacturingOrder.getState().equals(ManufacturingOrderStateStringValues.ISSUED) && StringUtils.isNotBlank(manufacturingOrder.getIfsOrderNo())) { //修改车间订单状态 R result = manufacturingOrderService.changeState(manufacturingOrder, "CANCEL"); if (result.getCode() == 1) { stateMachine.getExtendedState().getVariables().put(StateMachineHandler.ERROR_KEY, manufacturingOrder.getMoNo() + result.getMsg()); return false; } } manufacturingOrder.setState(ManufacturingOrderStateStringValues.CANCELED); manufacturingOrderMapper.updateById(manufacturingOrder); return true; } /** * 已计划 */ @OnTransition(target = ManufacturingOrderStateStringValues.PLANNED) public boolean plan(StateMachine stateMachine, Message msg) { ManufacturingOrder manufacturingOrder = (ManufacturingOrder) msg.getHeaders().get("manufacturingOrder"); //已完成到已计划 if (manufacturingOrder.getState().equals(ManufacturingOrderStateStringValues.COMPLETED)) { stateMachine.getExtendedState().getVariables().put(StateMachineHandler.ERROR_KEY, "已完成订单不可改为已计划"); return false; } //已取消到已计划 if (manufacturingOrder.getState().equals(ManufacturingOrderStateStringValues.CANCELED)) { stateMachine.getExtendedState().getVariables().put(StateMachineHandler.ERROR_KEY, "已取消订单不可改为已计划"); return false; } manufacturingOrder.setState(ManufacturingOrderStateStringValues.PLANNED); manufacturingOrderMapper.updateById(manufacturingOrder); return true; } }