package cn.iocoder.yudao.module.wms.enums.stock;
|
|
import lombok.AllArgsConstructor;
|
import lombok.Getter;
|
|
/**
|
* 库存业务类型枚举
|
*
|
* 定义库存变动的业务来源
|
*
|
* @author 芋道源码
|
*/
|
@Getter
|
@AllArgsConstructor
|
public enum StockBizTypeEnum {
|
|
// ==================== 入库类型 ====================
|
|
PURCHASE_IN(10, "采购入库"),
|
PURCHASE_IN_CANCEL(11, "采购入库作废"),
|
|
PRODUCE_IN(30, "生产入库"),
|
PRODUCE_IN_CANCEL(31, "生产入库作废"),
|
|
PRODUCE_RETURN(50, "生产退料"),
|
PRODUCE_RETURN_CANCEL(51, "生产退料作废"),
|
|
SALE_RETURN_IN(70, "销售退货入库"),
|
SALE_RETURN_IN_CANCEL(71, "销售退货入库作废"),
|
|
TRANSFER_IN(80, "调拨入库"),
|
TRANSFER_IN_CANCEL(81, "调拨入库作废"),
|
|
CHECK_IN(100, "盘盈入库"),
|
CHECK_IN_CANCEL(101, "盘盈入库作废"),
|
|
// ==================== 出库类型 ====================
|
|
SALE_OUT(20, "销售出库"),
|
SALE_OUT_CANCEL(21, "销售出库作废"),
|
|
PRODUCE_ISSUE(40, "生产领料"),
|
PRODUCE_ISSUE_CANCEL(41, "生产领料作废"),
|
|
PURCHASE_RETURN_OUT(60, "采购退货出库"),
|
PURCHASE_RETURN_OUT_CANCEL(61, "采购退货出库作废"),
|
|
TRANSFER_OUT(90, "调拨出库"),
|
TRANSFER_OUT_CANCEL(91, "调拨出库作废"),
|
|
CHECK_OUT(110, "盘亏出库"),
|
CHECK_OUT_CANCEL(111, "盘亏出库作废");
|
|
/**
|
* 业务类型编码
|
*/
|
private final Integer type;
|
|
/**
|
* 业务类型名称
|
*/
|
private final String name;
|
|
/**
|
* 判断是否为入库类型
|
*/
|
public boolean isInbound() {
|
// 入库类型编码:10, 30, 50, 70, 80, 100
|
return type % 20 == 10 || type == 50 || type == 70 || type == 100;
|
}
|
|
/**
|
* 判断是否为出库类型
|
*/
|
public boolean isOutbound() {
|
// 出库类型编码:20, 40, 60, 90, 110
|
return type % 20 == 0 && type != 0 && !isInbound();
|
}
|
|
/**
|
* 判断是否为作废类型
|
*/
|
public boolean isCancel() {
|
return type % 10 == 1 && type != 11; // 作废类型的编码尾数为 1
|
}
|
|
/**
|
* 获取对应的正常业务类型(如果是作废类型)
|
*/
|
public StockBizTypeEnum getNormalType() {
|
if (isCancel()) {
|
return fromType(type - 1);
|
}
|
return this;
|
}
|
|
/**
|
* 获取对应的作废业务类型(如果是正常类型)
|
*/
|
public StockBizTypeEnum getCancelType() {
|
if (!isCancel()) {
|
return fromType(type + 1);
|
}
|
return this;
|
}
|
|
/**
|
* 根据类型编码获取枚举
|
*/
|
public static StockBizTypeEnum fromType(Integer type) {
|
for (StockBizTypeEnum value : values()) {
|
if (value.getType().equals(type)) {
|
return value;
|
}
|
}
|
return null;
|
}
|
|
}
|