package com.chinaztt.mes.technology.state.bom; import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.chinaztt.mes.common.handler.StateMachineHandler; import com.chinaztt.mes.technology.entity.Bom; import com.chinaztt.mes.technology.entity.BomComponent; import com.chinaztt.mes.technology.entity.Routing; import com.chinaztt.mes.technology.mapper.BomComponentMapper; import com.chinaztt.mes.technology.mapper.BomMapper; import com.chinaztt.mes.technology.mapper.RoutingMapper; import com.chinaztt.mes.technology.mapper.RoutingOperationMapper; import com.chinaztt.mes.technology.state.bom.constant.BomEvents; import com.chinaztt.mes.technology.state.bom.constant.BomStateStringValues; 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 = "bomStateMachine") public class BomStateListener { private BomMapper bomMapper; private BomComponentMapper bomComponentMapper; /** * 接受 */ @OnTransition(source = BomStateStringValues.DRAFT, target = BomStateStringValues.ACCEPTED) public boolean accept(StateMachine stateMachine, Message msg) { Bom bom = (Bom) msg.getHeaders().get("bom"); List bomComponentList = bomComponentMapper.selectList(Wrappers.lambdaQuery().eq(BomComponent::getBomId, bom.getId())); if (CollectionUtil.isEmpty(bomComponentList)) { stateMachine.getExtendedState().getVariables().put(StateMachineHandler.ERROR_KEY, "bom未生成完整工艺树"); return false; } bom.setState(BomStateStringValues.ACCEPTED); bomMapper.updateById(bom); return true; } /** * 作废 */ @OnTransition(source = BomStateStringValues.ACCEPTED, target = BomStateStringValues.CANCELLED) public boolean cancel(StateMachine stateMachine, Message msg) { Bom bom = (Bom) msg.getHeaders().get("bom"); bom.setState(BomStateStringValues.CANCELLED); bomMapper.updateById(bom); return true; } /** * 撤回 * * @param stateMachine * @param msg * @return */ @OnTransition(source = BomStateStringValues.ACCEPTED, target = BomStateStringValues.DRAFT) public boolean revoke(StateMachine stateMachine, Message msg) { Bom bom = (Bom) msg.getHeaders().get("bom"); bom.setState(BomStateStringValues.DRAFT); bomMapper.updateById(bom); return true; } }