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<BomEvents> msg) {
|
Bom bom = (Bom) msg.getHeaders().get("bom");
|
List<BomComponent> bomComponentList = bomComponentMapper.selectList(Wrappers.<BomComponent>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<BomEvents> 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<BomEvents> msg) {
|
Bom bom = (Bom) msg.getHeaders().get("bom");
|
bom.setState(BomStateStringValues.DRAFT);
|
bomMapper.updateById(bom);
|
return true;
|
}
|
|
|
}
|