package com.chinaztt.mes.warehouse.state.joinstockorder;
|
|
import cn.hutool.core.collection.CollectionUtil;
|
import com.chinaztt.mes.common.handler.StateMachineHandler;
|
import com.chinaztt.mes.warehouse.dto.JoinStockOrderDTO;
|
import com.chinaztt.mes.warehouse.entity.JoinStockOrder;
|
import com.chinaztt.mes.warehouse.entity.Stock;
|
import com.chinaztt.mes.warehouse.mapper.JoinStockOrderMapper;
|
import com.chinaztt.mes.warehouse.mapper.StockMapper;
|
import com.chinaztt.mes.warehouse.state.joinstockorder.constant.JoinStockOrderEvents;
|
import com.chinaztt.mes.warehouse.state.joinstockorder.constant.JoinStockOrderStateStringValues;
|
import com.chinaztt.mes.warehouse.util.StockUtils;
|
import com.chinaztt.mes.warehouse.util.TransactionType;
|
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.math.BigDecimal;
|
import java.util.List;
|
import java.util.stream.Collectors;
|
|
|
/**
|
* @Author: cxf
|
* @Date: 2020-07-24 9:51
|
*/
|
@AllArgsConstructor
|
@Component
|
@WithStateMachine(id = "joinStockOrderStateMachine")
|
public class JoinStockOrderStateListener {
|
private StockUtils stockUtils;
|
private JoinStockOrderMapper joinStockOrderMapper;
|
|
private StockMapper stockMapper;
|
|
/**
|
* 确认
|
*/
|
@OnTransition(source = JoinStockOrderStateStringValues.UNCONFIRMED, target = JoinStockOrderStateStringValues.CONFIRMED)
|
public boolean confirm(StateMachine stateMachine, Message<JoinStockOrderEvents> msg) {
|
JoinStockOrder joinStockOrder = (JoinStockOrder) msg.getHeaders().get("joinStockOrder");
|
try {
|
// 1.更新状态
|
joinStockOrder.setStatus(JoinStockOrderStateStringValues.CONFIRMED);
|
joinStockOrderMapper.updateById(joinStockOrder);
|
// 2.更新实时库存锁定数量
|
stockUtils.updateById(joinStockOrder.getStockId(), BigDecimal.ZERO, joinStockOrder.getReservedQuantity(), BigDecimal.ZERO, BigDecimal.ZERO, null, TransactionType.CONFIRM_RESERVED.getValue());
|
// 3.更新库存的客户订单号
|
JoinStockOrderDTO order = joinStockOrderMapper.getStockOrderById(joinStockOrder.getId());
|
Stock update = new Stock();
|
update.setId(joinStockOrder.getStockId());
|
update.setCustomerOrderNo(order.getCustomerOrderNo());
|
stockMapper.updateById(update);
|
} catch (RuntimeException e) {
|
stateMachine.getExtendedState().getVariables().put(StateMachineHandler.ERROR_KEY, joinStockOrder.getPartBatchNo() + ":" + e.getMessage());
|
return false;
|
}
|
return true;
|
}
|
|
/**
|
* 取消
|
*
|
* @param stateMachine
|
* @param msg
|
* @return
|
*/
|
@OnTransition(source = JoinStockOrderStateStringValues.CONFIRMED, target = JoinStockOrderStateStringValues.UNCONFIRMED)
|
public boolean cancel(StateMachine stateMachine, Message<JoinStockOrderEvents> msg) {
|
JoinStockOrder joinStockOrder = (JoinStockOrder) msg.getHeaders().get("joinStockOrder");
|
try {
|
// 1.更新状态
|
joinStockOrder.setStatus(JoinStockOrderStateStringValues.UNCONFIRMED);
|
joinStockOrderMapper.updateById(joinStockOrder);
|
// 2.更新实时库存锁定数量
|
stockUtils.updateById(joinStockOrder.getStockId(), BigDecimal.ZERO, joinStockOrder.getReservedQuantity().negate(), BigDecimal.ZERO, BigDecimal.ZERO, null, TransactionType.CANCEL_RESERVED.getValue());
|
} catch (RuntimeException e) {
|
stateMachine.getExtendedState().getVariables().put(StateMachineHandler.ERROR_KEY, joinStockOrder.getPartBatchNo() + ":" + e.getMessage());
|
return false;
|
}
|
return true;
|
}
|
|
|
}
|