package com.chinaztt.mes.technology.state.routing; import cn.hutool.core.collection.CollectionUtil; import com.chinaztt.mes.common.handler.StateMachineHandler; import com.chinaztt.mes.technology.entity.Routing; import com.chinaztt.mes.technology.mapper.RoutingMapper; import com.chinaztt.mes.technology.mapper.RoutingOperationMapper; import com.chinaztt.mes.technology.state.routing.constant.RoutingEvents; import com.chinaztt.mes.technology.state.routing.constant.RoutingStateStringValues; import lombok.AllArgsConstructor; 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.List; /** * @Author: zhangxy * @Date: 2020-08-24 9:51 */ @AllArgsConstructor @Component @WithStateMachine(id = "routingStateMachine") public class RoutingStateListener { private RoutingMapper routingMapper; private RoutingOperationMapper routingOperationMapper; /** * 接受 */ @OnTransition(source = RoutingStateStringValues.DRAFT, target = RoutingStateStringValues.ACCEPTED) public boolean accept(StateMachine stateMachine, Message msg) { Routing routing = (Routing) msg.getHeaders().get("routing"); List ids = routingOperationMapper.checkOperationPartByRoutingId(routing.getId()); if (CollectionUtil.isNotEmpty(ids)) { stateMachine.getExtendedState().getVariables().put(StateMachineHandler.ERROR_KEY, "工序未全部绑定零件"); return false; } // ids = routingOperationMapper.checkMasterOperationByRoutingId(routing.getId()); // if (CollectionUtil.isEmpty(ids) || ids.size() != 1) { // stateMachine.getExtendedState().getVariables().put(StateMachineHandler.ERROR_KEY, "有且只能有一个工序绑定成品零件"); // return false; // } routing.setState(RoutingStateStringValues.ACCEPTED); routingMapper.updateById(routing); return true; } /** * 作废 */ @OnTransition(source = RoutingStateStringValues.ACCEPTED, target = RoutingStateStringValues.CANCELLED) public boolean cancel(StateMachine stateMachine, Message msg) { Routing routing = (Routing) msg.getHeaders().get("routing"); routing.setState(RoutingStateStringValues.CANCELLED); routingMapper.updateById(routing); return true; } /** * 撤回 * * @param stateMachine * @param msg * @return */ @OnTransition(source = RoutingStateStringValues.ACCEPTED, target = RoutingStateStringValues.DRAFT) public boolean revoke(StateMachine stateMachine, Message msg) { Routing routing = (Routing) msg.getHeaders().get("routing"); routing.setState(RoutingStateStringValues.DRAFT); routingMapper.updateById(routing); return true; } }