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<ManufacturingOrderEvents> 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<ManufacturingOrderEvents> msg) {
|
ManufacturingOrder manufacturingOrder = (ManufacturingOrder) msg.getHeaders().get("manufacturingOrder");
|
//判断一下对应的工单是否全部完成/取消
|
List<String> 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<ManufacturingOrderEvents> 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<ManufacturingOrderEvents> 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;
|
}
|
}
|