Commit b660fe452d3ca98454a0fcb7bcbe755bd659a88f

Authored by YunaiV
1 parent 75c1a638

✨ feat(mes): 修改库存冻结标识字段名称为 'frozen'

将库存相关的冻结标识字段从 'frozenFlag' 修改为 'frozen',以提高代码一致性和可读性。涉及多个数据对象和请求/响应对象的更新。
Showing 25 changed files with 144 additions and 21 deletions
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/materialstock/vo/MesWmMaterialStockFreezeReqVO.java
... ... @@ -14,7 +14,7 @@ public class MesWmMaterialStockFreezeReqVO {
14 14  
15 15 @Schema(description = "是否冻结", requiredMode = Schema.RequiredMode.REQUIRED, example = "false")
16 16 @NotNull(message = "冻结状态不能为空")
17   - private Boolean frozenFlag;
  17 + private Boolean frozen;
18 18  
19 19 }
20 20  
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/materialstock/vo/MesWmMaterialStockRespVO.java
... ... @@ -84,7 +84,7 @@ public class MesWmMaterialStockRespVO {
84 84  
85 85 @Schema(description = "是否冻结", requiredMode = Schema.RequiredMode.REQUIRED, example = "false")
86 86 @ExcelProperty("是否冻结")
87   - private Boolean frozenFlag;
  87 + private Boolean frozen;
88 88  
89 89 @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
90 90 @ExcelProperty("创建时间")
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/plan/vo/MesWmStockTakingPlanRespVO.java
... ... @@ -42,7 +42,7 @@ public class MesWmStockTakingPlanRespVO {
42 42  
43 43 @Schema(description = "是否冻结库存", requiredMode = Schema.RequiredMode.REQUIRED, example = "false")
44 44 @ExcelProperty("是否冻结库存")
45   - private Boolean frozenFlag;
  45 + private Boolean frozen;
46 46  
47 47 @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "0")
48 48 @ExcelProperty("状态")
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/plan/vo/MesWmStockTakingPlanSaveReqVO.java
... ... @@ -38,7 +38,7 @@ public class MesWmStockTakingPlanSaveReqVO {
38 38  
39 39 @Schema(description = "是否冻结库存", example = "false")
40 40 @NotNull(message = "是否冻结库存不能为空")
41   - private Boolean frozenFlag;
  41 + private Boolean frozen;
42 42  
43 43 @Schema(description = "备注", example = "备注")
44 44 private String remark;
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/task/vo/MesWmStockTakingTaskRespVO.java
... ... @@ -56,7 +56,7 @@ public class MesWmStockTakingTaskRespVO {
56 56  
57 57 @Schema(description = "是否冻结库存", requiredMode = Schema.RequiredMode.REQUIRED, example = "false")
58 58 @ExcelProperty("是否冻结库存")
59   - private Boolean frozenFlag;
  59 + private Boolean frozen;
60 60  
61 61 @Schema(description = "开始时间")
62 62 @ExcelProperty("开始时间")
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/wm/stocktaking/task/vo/MesWmStockTakingTaskSaveReqVO.java
... ... @@ -49,7 +49,7 @@ public class MesWmStockTakingTaskSaveReqVO {
49 49  
50 50 @Schema(description = "是否冻结库存", example = "false")
51 51 @NotNull(message = "是否冻结库存不能为空")
52   - private Boolean frozenFlag;
  52 + private Boolean frozen;
53 53  
54 54 @Schema(description = "备注", example = "备注")
55 55 private String remark;
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/materialstock/MesWmMaterialStockDO.java
... ... @@ -104,6 +104,6 @@ public class MesWmMaterialStockDO extends BaseDO {
104 104 /**
105 105 * 是否冻结
106 106 */
107   - private Boolean frozenFlag;
  107 + private Boolean frozen;
108 108  
109 109 }
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/stocktaking/plan/MesWmStockTakingPlanDO.java
... ... @@ -63,7 +63,7 @@ public class MesWmStockTakingPlanDO extends BaseDO {
63 63 /**
64 64 * 是否冻结库存
65 65 */
66   - private Boolean frozenFlag;
  66 + private Boolean frozen;
67 67  
68 68 /**
69 69 * 状态
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/stocktaking/task/MesWmStockTakingTaskDO.java
... ... @@ -71,7 +71,7 @@ public class MesWmStockTakingTaskDO extends BaseDO {
71 71 /**
72 72 * 是否冻结库存
73 73 */
74   - private Boolean frozenFlag;
  74 + private Boolean frozen;
75 75  
76 76 /**
77 77 * 开始时间
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/warehouse/MesWmWarehouseAreaDO.java
... ... @@ -22,6 +22,11 @@ import java.math.BigDecimal;
22 22 public class MesWmWarehouseAreaDO extends BaseDO {
23 23  
24 24 /**
  25 + * 虚拟线边库位编码(配合 {@link MesWmWarehouseDO#WIP_VIRTUAL_WAREHOUSE} 使用)
  26 + */
  27 + public static final String WIP_VIRTUAL_AREA = "WIP_VIRTUAL_AREA";
  28 +
  29 + /**
25 30 * 编号
26 31 */
27 32 @TableId
... ... @@ -66,6 +71,7 @@ public class MesWmWarehouseAreaDO extends BaseDO {
66 71 * 枚举 {@link cn.iocoder.yudao.framework.common.enums.CommonStatusEnum}
67 72 */
68 73 private Integer status;
  74 +
69 75 /**
70 76 * 是否冻结
71 77 */
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/warehouse/MesWmWarehouseDO.java
... ... @@ -22,6 +22,15 @@ import java.math.BigDecimal;
22 22 public class MesWmWarehouseDO extends BaseDO {
23 23  
24 24 /**
  25 + * 虚拟线边库编码
  26 + *
  27 + * 业务背景:在线边库模式下,物料从总仓库发放到车间,但未被工序消耗前,这部分物料属于在制品(WIP)。
  28 + * 为了在系统中实现“发料与实际消耗”的解耦,并在不增加物理库位管理复杂度的前提下防止生产报工被负库存阻塞,
  29 + * 系统默认提供一个虚拟的线边库统管这些在制品。
  30 + */
  31 + public static final String WIP_VIRTUAL_WAREHOUSE = "WIP_VIRTUAL_WAREHOUSE";
  32 +
  33 + /**
25 34 * 编号
26 35 */
27 36 @TableId
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/warehouse/MesWmWarehouseLocationDO.java
... ... @@ -22,6 +22,11 @@ import java.math.BigDecimal;
22 22 public class MesWmWarehouseLocationDO extends BaseDO {
23 23  
24 24 /**
  25 + * 虚拟线边库区编码(配合 {@link MesWmWarehouseDO#WIP_VIRTUAL_WAREHOUSE} 使用)
  26 + */
  27 + public static final String WIP_VIRTUAL_LOCATION = "WIP_VIRTUAL_LOCATION";
  28 +
  29 + /**
25 30 * 编号
26 31 */
27 32 @TableId
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/materialstock/MesWmMaterialStockMapper.java
... ... @@ -27,7 +27,7 @@ public interface MesWmMaterialStockMapper extends BaseMapperX<MesWmMaterialStock
27 27 .inIfPresent(MesWmMaterialStockDO::getItemId, itemIds)
28 28 .eqIfPresent(MesWmMaterialStockDO::getWarehouseId, reqVO.getWarehouseId())
29 29 .eqIfPresent(MesWmMaterialStockDO::getLocationId, reqVO.getLocationId())
30   - .eqIfPresent(MesWmMaterialStockDO::getFrozenFlag, reqVO.getFrozen())
  30 + .eqIfPresent(MesWmMaterialStockDO::getFrozen, reqVO.getFrozen())
31 31 .ne(MesWmMaterialStockDO::getQuantity, BigDecimal.ZERO)
32 32 .orderByAsc(MesWmMaterialStockDO::getReceiptTime));
33 33 }
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/warehouse/MesWmWarehouseAreaMapper.java
... ... @@ -27,9 +27,8 @@ public interface MesWmWarehouseAreaMapper extends BaseMapperX<MesWmWarehouseArea
27 27 .orderByDesc(MesWmWarehouseAreaDO::getId));
28 28 }
29 29  
30   - default MesWmWarehouseAreaDO selectByCode(Long locationId, String code) {
  30 + default MesWmWarehouseAreaDO selectByCode(String code) {
31 31 return selectOne(new LambdaQueryWrapperX<MesWmWarehouseAreaDO>()
32   - .eq(MesWmWarehouseAreaDO::getLocationId, locationId)
33 32 .eq(MesWmWarehouseAreaDO::getCode, code));
34 33 }
35 34  
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/wm/warehouse/MesWmWarehouseLocationMapper.java
... ... @@ -30,6 +30,11 @@ public interface MesWmWarehouseLocationMapper extends BaseMapperX&lt;MesWmWarehouse
30 30 .eq(MesWmWarehouseLocationDO::getCode, code));
31 31 }
32 32  
  33 + default MesWmWarehouseLocationDO selectByCode(String code) {
  34 + return selectOne(new LambdaQueryWrapperX<MesWmWarehouseLocationDO>()
  35 + .eq(MesWmWarehouseLocationDO::getCode, code));
  36 + }
  37 +
33 38 default MesWmWarehouseLocationDO selectByName(Long warehouseId, String name) {
34 39 return selectOne(new LambdaQueryWrapperX<MesWmWarehouseLocationDO>()
35 40 .eq(MesWmWarehouseLocationDO::getWarehouseId, warehouseId)
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/materialstock/MesWmMaterialStockServiceImpl.java
... ... @@ -95,7 +95,7 @@ public class MesWmMaterialStockServiceImpl implements MesWmMaterialStockService
95 95  
96 96 // 更新冻结状态
97 97 materialStockMapper.updateById(new MesWmMaterialStockDO()
98   - .setId(updateReqVO.getId()).setFrozenFlag(updateReqVO.getFrozenFlag()));
  98 + .setId(updateReqVO.getId()).setFrozen(updateReqVO.getFrozen()));
99 99 }
100 100  
101 101 @Override
... ... @@ -144,7 +144,7 @@ public class MesWmMaterialStockServiceImpl implements MesWmMaterialStockService
144 144 .batchId(batchId).vendorId(vendorId)
145 145 .quantity(BigDecimal.ZERO) // 初始数量为 0,由 updateMaterialStockQuantity 更新
146 146 .receiptTime(receiptTime != null ? receiptTime : LocalDateTime.now())
147   - .frozenFlag(false)
  147 + .frozen(false)
148 148 .build();
149 149 materialStockMapper.insert(newStock);
150 150 return newStock;
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/stocktaking/task/MesWmStockTakingTaskServiceImpl.java
... ... @@ -129,7 +129,7 @@ public class MesWmStockTakingTaskServiceImpl implements MesWmStockTakingTaskServ
129 129  
130 130 // 3. 根据冻结标识,对物资进行冻结
131 131 // TODO @芋艿:后续跟进下!
132   - if (Boolean.TRUE.equals(task.getFrozenFlag())) {
  132 + if (Boolean.TRUE.equals(task.getFrozen())) {
133 133 for (MesWmStockTakingTaskLineDO line : lines) {
134 134 if (line.getMaterialStockId() != null) {
135 135 updateMaterialStockFrozen(line.getMaterialStockId(), true);
... ... @@ -150,7 +150,7 @@ public class MesWmStockTakingTaskServiceImpl implements MesWmStockTakingTaskServ
150 150  
151 151 // 3. 解冻库存
152 152 // TODO @芋艿:后续跟进下!
153   - if (Boolean.TRUE.equals(task.getFrozenFlag())) {
  153 + if (Boolean.TRUE.equals(task.getFrozen())) {
154 154 List<MesWmStockTakingTaskLineDO> lines = stockTakingTaskLineService.getStockTakingTaskLineListByTaskId(id);
155 155 unfreezeStockTakingTaskStocks(lines);
156 156 }
... ... @@ -166,7 +166,7 @@ public class MesWmStockTakingTaskServiceImpl implements MesWmStockTakingTaskServ
166 166 }
167 167 task.setStatus(MesWmStockTakingTaskStatusEnum.CANCELED.getStatus());
168 168 stockTakingTaskMapper.updateById(task);
169   - if (Boolean.TRUE.equals(task.getFrozenFlag())) {
  169 + if (Boolean.TRUE.equals(task.getFrozen())) {
170 170 unfreezeStockTakingTaskStocks(stockTakingTaskLineService.getStockTakingTaskLineListByTaskId(id));
171 171 }
172 172 }
... ... @@ -211,7 +211,7 @@ public class MesWmStockTakingTaskServiceImpl implements MesWmStockTakingTaskServ
211 211 private void updateMaterialStockFrozen(Long materialStockId, boolean frozen) {
212 212 MesWmMaterialStockFreezeReqVO reqVO = new MesWmMaterialStockFreezeReqVO();
213 213 reqVO.setId(materialStockId);
214   - reqVO.setFrozenFlag(frozen);
  214 + reqVO.setFrozen(frozen);
215 215 materialStockService.updateMaterialStockFrozen(reqVO);
216 216 }
217 217  
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/transaction/MesWmTransactionServiceImpl.java
... ... @@ -166,7 +166,7 @@ public class MesWmTransactionServiceImpl implements MesWmTransactionService {
166 166 }
167 167  
168 168 // 2. 检查库存记录冻结
169   - if (Boolean.TRUE.equals(materialStock.getFrozenFlag())) {
  169 + if (Boolean.TRUE.equals(materialStock.getFrozen())) {
170 170 throw exception(WM_TRANSACTION_STOCK_FROZEN,
171 171 warehouse.getName(), location.getName(), area.getName());
172 172 }
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/transfer/MesWmTransferServiceImpl.java
... ... @@ -316,7 +316,7 @@ public class MesWmTransferServiceImpl implements MesWmTransferService {
316 316 }
317 317 MesWmMaterialStockFreezeReqVO freezeReqVO = new MesWmMaterialStockFreezeReqVO();
318 318 freezeReqVO.setId(line.getMaterialStockId());
319   - freezeReqVO.setFrozenFlag(frozen);
  319 + freezeReqVO.setFrozen(frozen);
320 320 materialStockService.updateMaterialStockFrozen(freezeReqVO);
321 321 }
322 322 }
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/warehouse/MesWmWarehouseAreaService.java
... ... @@ -100,4 +100,12 @@ public interface MesWmWarehouseAreaService {
100 100 */
101 101 void validateWarehouseAreaExists(Long warehouseId, Long locationId, Long areaId);
102 102  
  103 + /**
  104 + * 按编码获得库位(如果是虚拟线边库位编码且不存在,会自动插入)
  105 + *
  106 + * @param code 编码
  107 + * @return 库位
  108 + */
  109 + MesWmWarehouseAreaDO getWarehouseAreaByCode(String code);
  110 +
103 111 }
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/warehouse/MesWmWarehouseAreaServiceImpl.java
1 1 package cn.iocoder.yudao.module.mes.service.wm.warehouse;
2 2  
3 3 import cn.hutool.core.collection.CollUtil;
  4 +import cn.hutool.core.lang.Assert;
4 5 import cn.hutool.core.util.ObjUtil;
  6 +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
5 7 import cn.iocoder.yudao.framework.common.pojo.PageResult;
6 8 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
7 9 import cn.iocoder.yudao.module.mes.controller.admin.wm.warehouse.vo.area.MesWmWarehouseAreaPageReqVO;
... ... @@ -109,7 +111,7 @@ public class MesWmWarehouseAreaServiceImpl implements MesWmWarehouseAreaService
109 111 }
110 112  
111 113 private void validateWarehouseAreaCodeUnique(Long id, Long locationId, String code) {
112   - MesWmWarehouseAreaDO area = areaMapper.selectByCode(locationId, code);
  114 + MesWmWarehouseAreaDO area = areaMapper.selectByCode(code);
113 115 if (area == null) {
114 116 return;
115 117 }
... ... @@ -180,4 +182,31 @@ public class MesWmWarehouseAreaServiceImpl implements MesWmWarehouseAreaService
180 182 }
181 183 }
182 184  
  185 + @Override
  186 + public MesWmWarehouseAreaDO getWarehouseAreaByCode(String code) {
  187 + // 1. 查询库位,存在则直接返回
  188 + MesWmWarehouseAreaDO area = areaMapper.selectByCode(code);
  189 + if (area != null) {
  190 + return area;
  191 + }
  192 +
  193 + // 2. 如果是虚拟线边库位编码,则自动初始化
  194 + if (MesWmWarehouseAreaDO.WIP_VIRTUAL_AREA.equals(code)) {
  195 + // 2.1 先确保虚拟库区存在(getWarehouseLocationByCode 会级联创建仓库 + 库区)
  196 + MesWmWarehouseLocationDO location = locationService.getWarehouseLocationByCode(
  197 + MesWmWarehouseLocationDO.WIP_VIRTUAL_LOCATION);
  198 + Assert.notNull(location, "虚拟库区必须存在");
  199 + // 2.2 自动初始化
  200 + MesWmWarehouseAreaDO newArea = MesWmWarehouseAreaDO.builder()
  201 + .locationId(location.getId()).code(code).name("虚拟线边库位")
  202 + .status(CommonStatusEnum.ENABLE.getStatus()).frozen(false)
  203 + .allowItemMixing(true).allowBatchMixing(true)
  204 + .remark("系统自动初始化的虚拟线边库位")
  205 + .build();
  206 + areaMapper.insert(newArea);
  207 + return newArea;
  208 + }
  209 + return null;
  210 + }
  211 +
183 212 }
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/warehouse/MesWmWarehouseLocationService.java
... ... @@ -91,4 +91,12 @@ public interface MesWmWarehouseLocationService {
91 91 */
92 92 Long getWarehouseLocationCountByWarehouseId(Long warehouseId);
93 93  
  94 + /**
  95 + * 按编码获得库区(如果是虚拟线边库区编码且不存在,会自动插入)
  96 + *
  97 + * @param code 编码
  98 + * @return 库区
  99 + */
  100 + MesWmWarehouseLocationDO getWarehouseLocationByCode(String code);
  101 +
94 102 }
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/warehouse/MesWmWarehouseLocationServiceImpl.java
... ... @@ -7,6 +7,7 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
7 7 import cn.iocoder.yudao.module.mes.controller.admin.wm.warehouse.vo.location.MesWmWarehouseLocationPageReqVO;
8 8 import cn.iocoder.yudao.module.mes.controller.admin.wm.warehouse.vo.location.MesWmWarehouseLocationSaveReqVO;
9 9 import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseLocationDO;
  10 +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseDO;
10 11 import cn.iocoder.yudao.module.mes.dal.mysql.wm.warehouse.MesWmWarehouseLocationMapper;
11 12 import cn.iocoder.yudao.module.mes.enums.wm.BarcodeBizTypeEnum;
12 13 import cn.iocoder.yudao.module.mes.service.md.workstation.MesMdWorkstationService;
... ... @@ -160,4 +161,29 @@ public class MesWmWarehouseLocationServiceImpl implements MesWmWarehouseLocation
160 161 return locationMapper.selectCountByWarehouseId(warehouseId);
161 162 }
162 163  
  164 + @Override
  165 + public MesWmWarehouseLocationDO getWarehouseLocationByCode(String code) {
  166 + // 1. 查询库区,存在则直接返回
  167 + MesWmWarehouseLocationDO location = locationMapper.selectByCode(code);
  168 + if (location != null) {
  169 + return location;
  170 + }
  171 +
  172 + // 2. 如果是虚拟线边库区编码,则自动初始化
  173 + if (MesWmWarehouseLocationDO.WIP_VIRTUAL_LOCATION.equals(code)) {
  174 + // 2.1 先确保虚拟仓库存在(getWarehouseByCode 会级联创建仓库)
  175 + MesWmWarehouseDO warehouse = warehouseService.getWarehouseByCode(MesWmWarehouseDO.WIP_VIRTUAL_WAREHOUSE);
  176 + cn.hutool.core.lang.Assert.notNull(warehouse, "虚拟仓库必须存在");
  177 + // 2.2 自动初始化
  178 + MesWmWarehouseLocationDO newLocation = MesWmWarehouseLocationDO.builder()
  179 + .warehouseId(warehouse.getId()).code(code).name("虚拟线边库区")
  180 + .areaStatus(cn.iocoder.yudao.framework.common.enums.CommonStatusEnum.ENABLE.getStatus())
  181 + .frozen(false).remark("系统自动初始化的虚拟线边库区")
  182 + .build();
  183 + locationMapper.insert(newLocation);
  184 + return newLocation;
  185 + }
  186 + return null;
  187 + }
  188 +
163 189 }
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/warehouse/MesWmWarehouseService.java
... ... @@ -82,4 +82,12 @@ public interface MesWmWarehouseService {
82 82 return convertMap(getWarehouseList(ids), MesWmWarehouseDO::getId);
83 83 }
84 84  
  85 + /**
  86 + * 按编码获得仓库(如果是虚拟线边库编码且不存在,会自动插入)
  87 + *
  88 + * @param code 编码
  89 + * @return 仓库
  90 + */
  91 + MesWmWarehouseDO getWarehouseByCode(String code);
  92 +
85 93 }
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/wm/warehouse/MesWmWarehouseServiceImpl.java
... ... @@ -148,4 +148,24 @@ public class MesWmWarehouseServiceImpl implements MesWmWarehouseService {
148 148 return warehouseMapper.selectListByIds(ids);
149 149 }
150 150  
  151 + @Override
  152 + public MesWmWarehouseDO getWarehouseByCode(String code) {
  153 + // 1. 查询仓库,存在则直接返回
  154 + MesWmWarehouseDO warehouse = warehouseMapper.selectByCode(code);
  155 + if (warehouse != null) {
  156 + return warehouse;
  157 + }
  158 +
  159 + // 2. 如果是虚拟线边库编码,则自动初始化
  160 + if (MesWmWarehouseDO.WIP_VIRTUAL_WAREHOUSE.equals(code)) {
  161 + MesWmWarehouseDO newWarehouse = MesWmWarehouseDO.builder()
  162 + .code(code).name("虚拟线边仓库").frozen(false)
  163 + .remark("系统自动初始化的虚拟线边仓库(用于生产报工与在制品管理解耦)")
  164 + .build();
  165 + warehouseMapper.insert(newWarehouse);
  166 + return newWarehouse;
  167 + }
  168 + return null;
  169 + }
  170 +
151 171 }
... ...