From 03875ea8335847d01bb59bbf3046d0cfdffacbc5 Mon Sep 17 00:00:00 2001 From: liweidong-hj Date: Mon, 18 May 2026 19:03:44 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../desk/dashboard/pojo/entity/DsPartEntity.java | 2 +- .../service/impl/PlateGoodsRecordServiceImpl.java | 13 ++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsPartEntity.java b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsPartEntity.java index cfcd336a5..f4674c431 100644 --- a/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsPartEntity.java +++ b/blade-service-api/blade-desk-api/src/main/java/org/springblade/desk/dashboard/pojo/entity/DsPartEntity.java @@ -159,7 +159,7 @@ public class DsPartEntity extends BaseEntity { * 镀层厚度 */ @Schema(description = "镀层厚度") - private Double plateThickness; + private String plateThickness; /** * 镀层物料 */ diff --git a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/PlateGoodsRecordServiceImpl.java b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/PlateGoodsRecordServiceImpl.java index 0a5653b1c..48eed8ddf 100644 --- a/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/PlateGoodsRecordServiceImpl.java +++ b/blade-service/blade-desk/src/main/java/org/springblade/desk/order/service/impl/PlateGoodsRecordServiceImpl.java @@ -259,7 +259,7 @@ public class PlateGoodsRecordServiceImpl extends BaseServiceImpl Date: Mon, 18 May 2026 19:54:29 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E4=BB=93=E5=BA=93=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../StErpWarehouseTransferServiceImpl.java | 33 ++++++++++++- .../impl/StOtherReceiptRecordServiceImpl.java | 11 +++++ .../impl/StRequisitionServiceImpl.java | 48 ++++++++++++++----- 3 files changed, 79 insertions(+), 13 deletions(-) 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); From 375bc494f08d82c0710d76071c599e687238f05d Mon Sep 17 00:00:00 2001 From: wusiyu <2015098864@qq.com> Date: Mon, 18 May 2026 20:40:42 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E4=BB=93=E5=BA=93=E7=AE=A1=E7=90=86?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/springblade/wms/mapper/StRealtimeStockMapper.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StRealtimeStockMapper.xml b/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StRealtimeStockMapper.xml index 5dc27c1ed..ae537f424 100644 --- a/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StRealtimeStockMapper.xml +++ b/blade-service/blade-wms/src/main/java/org/springblade/wms/mapper/StRealtimeStockMapper.xml @@ -556,8 +556,8 @@ AND t.sl_id = #{slId} -- 库位ID匹配 AND t.pi_no IS NOT NULL -- 过滤空批次号 AND t.is_deleted = 0 -- 过滤已删除的库存数据 - AND t.stock_quantity > 0 -- 核心新增:库存数量不等于0 - AND t.stock_quantity IS NOT NULL + AND t.quantity > 0 -- 核心新增:库存数量不等于0 + AND t.quantity IS NOT NULL