Commit b660fe452d3ca98454a0fcb7bcbe755bd659a88f
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
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/stocktaking/plan/MesWmStockTakingPlanDO.java
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/wm/stocktaking/task/MesWmStockTakingTaskDO.java
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<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 | } | ... | ... |