diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StErpWarehouseTransferServiceImpl.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StErpWarehouseTransferServiceImpl.java index a4fcfe08c..15e4f371c 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StErpWarehouseTransferServiceImpl.java +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StErpWarehouseTransferServiceImpl.java @@ -5,6 +5,7 @@ import cn.hutool.core.util.NumberUtil; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springblade.core.log.exception.ServiceException; @@ -12,6 +13,7 @@ import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.secure.BladeUser; import org.springblade.wms.excel.StErpWarehouseTransferExcel; import org.springblade.wms.mapper.StErpWarehouseTransferMapper; +import org.springblade.wms.mapper.StUserRightMapper; import org.springblade.wms.pojo.entity.*; import org.springblade.wms.pojo.vo.StErpWarehouseTransferVO; import org.springblade.wms.service.*; @@ -45,6 +47,8 @@ public class StErpWarehouseTransferServiceImpl extends BaseServiceImpl selectStErpWarehouseTransferPage(IPage page, StErpWarehouseTransferVO stErpWarehouseTransfer) { @@ -63,9 +67,36 @@ public class StErpWarehouseTransferServiceImpl extends BaseServiceImpl transfer.getOutQuantity()) { - throw new ServiceException("入库数量不能大于出库数量"); + throw new ServiceException("入库数量不能大于ERP出库数量"); + } + + String urTypeStorehouse = StUserRight.UR_TYPE_STOREHOUSE; + + // 查询用户是否有该库房的操作权限 + Long count = stUserRightMapper.selectCount(Wrappers.lambdaQuery(StUserRight.class) + .eq(StUserRight::getUserId, user.getUserId()) + .eq(StUserRight::getTheId, shId) + .eq(StUserRight::getUrType, urTypeStorehouse) + .eq(StUserRight::getIsDeleted, 0) + ); + + // 无权限 → 直接拦截 + if (count == null || count == 0) { + throw new ServiceException("您无当前库房操作权限,不允许入库!"); } + StStorageLocation location = stStorageLocationService.getById(slId); + List piNos = stRealtimeStockService.findBySlIdAndGoodsCode(slId, location.getGoodsCode()); + String transferPino = transfer.getBatchCode(); + if (CollUtil.isNotEmpty(piNos)) { + // 库位已有库存 → 必须和转移单 pino 一致 + boolean pinoMatch = piNos.stream().anyMatch(p -> p.equals(transferPino)); + if (!pinoMatch) { + throw new ServiceException("批次号不匹配!当前库位批次:" + piNos + ",转移单批次:" + transferPino); + } + } + + /* 1. 主账单(无 ID 则新增)*/ StStockInoutRecord inout = new StStockInoutRecord(); inout.setSirCode(stStockInoutRecordService.generateCode()); diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StOtherReceiptRecordServiceImpl.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StOtherReceiptRecordServiceImpl.java index ece1193bb..324654907 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StOtherReceiptRecordServiceImpl.java +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StOtherReceiptRecordServiceImpl.java @@ -112,6 +112,17 @@ public class StOtherReceiptRecordServiceImpl extends BaseServiceImpl piNos = stRealtimeStockService.findBySlIdAndGoodsCode(detail.getSlId(), location.getGoodsCode()); + String detailPiNo = detail.getPiNo(); + if (CollUtil.isNotEmpty(piNos)) { + // 库位已有库存 → 必须和转移单 pino 一致 + boolean pinoMatch = piNos.stream().anyMatch(p -> p.equals(detailPiNo)); + if (!pinoMatch) { + throw new ServiceException("批次号不匹配!当前库位批次:" + piNos + ",其他入库批次:" + detailPiNo); + } + } + // detail.setSirCode(stStockInoutRecordService.generateCode()); detail.setInOutSource(StStockInoutRecord.INOUT_SOURCE_OTHER_PURCHASE_RECEIPT); // 赋值公共属性:批次号、入库单关联ID、部门/创建人 diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StRequisitionServiceImpl.java b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StRequisitionServiceImpl.java index 9ee8fb8f3..eb5ec8d73 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StRequisitionServiceImpl.java +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/service/impl/StRequisitionServiceImpl.java @@ -1,11 +1,13 @@ package org.springblade.wms.service.impl; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletResponse; import net.sourceforge.barbecue.Barcode; @@ -18,10 +20,12 @@ import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.secure.BladeUser; import org.springblade.wms.excel.StRequisitionExcel; import org.springblade.wms.mapper.StRequisitionMapper; +import org.springblade.wms.mapper.StUserRightMapper; import org.springblade.wms.pojo.dto.StRequisitionDTO; import org.springblade.wms.pojo.entity.StGoods; import org.springblade.wms.pojo.entity.StRequisition; import org.springblade.wms.pojo.entity.StStockInoutRecord; +import org.springblade.wms.pojo.entity.StUserRight; import org.springblade.wms.pojo.vo.StRequisitionVO; import org.springblade.wms.service.*; import org.springframework.stereotype.Service; @@ -52,6 +56,8 @@ public class StRequisitionServiceImpl extends BaseServiceImpl selectStRequisitionPage(IPage page, StRequisitionVO stRequisition) { return page.setRecords(baseMapper.selectStRequisitionPage(page, stRequisition)); @@ -198,29 +204,21 @@ public class StRequisitionServiceImpl extends BaseServiceImpl getBarCode(Long srId) { - // 1. 初始化返回数据结构(与原有getBarCode方法保持一致) -// Map data = new HashMap<>(1); -// List> list = new ArrayList<>(); -// Map map = new HashMap<>(); Map resultMap = new HashMap<>(2); StRequisition stRequisition = getById(srId); - // 2. 核心:处理出库单号,生成条形码(Base64格式) + // 处理出库单号,生成条形码(Base64格式) // 出库单号原值(空则显示"/") String invadjCodeValue = StringUtils.isNotBlank(stRequisition.getInvadjCode()) ? stRequisition.getInvadjCode() : "/"; resultMap.put("invadjCode", invadjCodeValue); // 生成出库单号条形码(尺寸:宽300,高80,可根据打印需求调整) resultMap.put("invadjCodeBar", generateBarcodeAsBase64(invadjCodeValue, 200, 50)); - String buyCodeValue = StringUtils.isNotBlank(stRequisition.getBuyCode()) ? stRequisition.getBuyCode() : "/"; - resultMap.put("buyCode", buyCodeValue); + String goodsCodeValue = StringUtils.isNotBlank(stRequisition.getPrtno()) ? stRequisition.getPrtno() : "/"; + resultMap.put("goodsCode", goodsCodeValue); // 生成出库单号条形码(尺寸:宽300,高80,可根据打印需求调整) - resultMap.put("buyCodeBar", generateBarcodeAsBase64(buyCodeValue, 200, 50)); - - // 4. 组装返回数据(与原有方法结构统一) -// list.add(map); -// data.put("data", list); + resultMap.put("goodsCodeBar", generateBarcodeAsBase64(goodsCodeValue, 200, 50)); return resultMap; } @@ -251,6 +249,32 @@ public class StRequisitionServiceImpl extends BaseServiceImpl piNos = stRealtimeStockService.findBySlIdAndGoodsCode(slId, requisition.getPrtno()); + String requisitionPiNo = requisition.getPiNo(); + if (CollUtil.isNotEmpty(piNos)) { + // 库位已有库存 → 必须和转移单 pino 一致 + boolean pinoMatch = piNos.stream().anyMatch(p -> p.equals(requisitionPiNo)); + if (!pinoMatch) { + throw new ServiceException("批次号不匹配!当前库位批次:" + piNos + ",物料入库批次:" + requisitionPiNo); + } + } + requisition.setCurStatus(StRequisition.CUR_STATUS_PUSH); baseMapper.updateById(requisition);