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; } }