From aace821b91207e2e17adfad107cc4089347f4b35 Mon Sep 17 00:00:00 2001 From: HuangHuiKang Date: Mon, 29 Jun 2026 11:21:54 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E4=BF=AE=E6=94=B9=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E4=BA=A7=E5=93=81=E7=89=A9=E6=96=99=E6=A1=A3=E6=A1=88=E5=8F=8A?= =?UTF-8?q?=E5=BA=93=E5=8C=BA=E6=89=93=E5=8D=B0=E6=A8=A1=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WarehouseAreaController.java | 19 ++++++++++++ .../warehousearea/vo/WarehouseAreaRespVO.java | 3 ++ .../dal/mysql/stock/ErpStockOutMapper.java | 30 +++++++++++++++++-- .../warehousearea/WarehouseAreaMapper.java | 3 ++ .../erp/framework/bean/ProductTypeEnum.java | 8 ++--- .../product/ErpProductServiceImpl.java | 17 +++++++---- .../warehousearea/WarehouseAreaService.java | 2 ++ .../WarehouseAreaServiceImpl.java | 7 +++++ .../warehousearea/WarehouseAreaMapper.xml | 10 ++++++- 9 files changed, 86 insertions(+), 13 deletions(-) diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/warehousearea/WarehouseAreaController.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/warehousearea/WarehouseAreaController.java index aeb8e7838..0acf7573b 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/warehousearea/WarehouseAreaController.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/warehousearea/WarehouseAreaController.java @@ -82,6 +82,7 @@ public class WarehouseAreaController { WarehouseAreaDO warehouseArea = warehouseAreaService.getWarehouseArea(id); WarehouseAreaRespVO respVO = BeanUtils.toBean(warehouseArea, WarehouseAreaRespVO.class); fillQrcodeUrl(respVO, warehouseArea); + fillTemplateJson(respVO); return success(respVO); } @@ -92,6 +93,7 @@ public class WarehouseAreaController { PageResult pageResult = warehouseAreaService.getWarehouseAreaPage(pageReqVO); PageResult result = BeanUtils.toBean(pageResult, WarehouseAreaRespVO.class); fillQrcodeUrl(result.getList()); + fillTemplateJson(result.getList()); return success(result); } @@ -126,6 +128,23 @@ public class WarehouseAreaController { } } + private void fillTemplateJson(WarehouseAreaRespVO respVO) { + if (respVO == null) { + return; + } + respVO.setTemplateJson(warehouseAreaService.selectPrintTemplate()); + } + + private void fillTemplateJson(List list) { + if (list == null || list.isEmpty()) { + return; + } + String templateJson = warehouseAreaService.selectPrintTemplate(); + for (WarehouseAreaRespVO respVO : list) { + respVO.setTemplateJson(templateJson); + } + } + @GetMapping("/export-excel") @Operation(summary = "导出ERP 库区信息 Excel") diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/warehousearea/vo/WarehouseAreaRespVO.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/warehousearea/vo/WarehouseAreaRespVO.java index 90dd3d320..e6eac600b 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/warehousearea/vo/WarehouseAreaRespVO.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/warehousearea/vo/WarehouseAreaRespVO.java @@ -28,6 +28,9 @@ public class WarehouseAreaRespVO { @Schema(description = "二维码 URL") private String qrcodeUrl; + @Schema(description = "打印模板Json", example = "") + private String templateJson; + @Schema(description = "库区名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") @ExcelProperty("库区名称") private String areaName; diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/stock/ErpStockOutMapper.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/stock/ErpStockOutMapper.java index a3672abf4..1ffce95e0 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/stock/ErpStockOutMapper.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/stock/ErpStockOutMapper.java @@ -9,6 +9,7 @@ import com.alibaba.excel.util.StringUtils; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import org.apache.ibatis.annotations.Mapper; +import org.apache.poi.util.StringUtil; import java.util.Arrays; import java.util.List; @@ -18,8 +19,22 @@ import java.util.stream.Collectors; public interface ErpStockOutMapper extends BaseMapperX { default PageResult selectPage(ErpStockOutPageReqVO reqVO) { - MPJLambdaWrapperX query = new MPJLambdaWrapperX() - .likeIfPresent(ErpStockOutDO::getNo, reqVO.getNo()) + MPJLambdaWrapperX query = new MPJLambdaWrapperX<>(); + + Long productId = reqVO.getProductId(); + if (StringUtil.isNotBlank(reqVO.getNo())) { + if (reqVO.getNo().contains("PRODUCTMATERIAL-")) { + productId = Long.valueOf(reqVO.getNo().replace("PRODUCTMATERIAL-", "")); + } else { + query.likeIfPresent(ErpStockOutDO::getNo, reqVO.getNo()); + } + } + + if (productId != null || reqVO.getWarehouseId() != null) { + query.inSql(ErpStockOutDO::getId, buildItemFilterSql(productId, reqVO.getWarehouseId())); + } + + query .eqIfPresent(ErpStockOutDO::getCustomerId, reqVO.getCustomerId()) .eqIfPresent(ErpStockOutDO::getStockUserId, reqVO.getStockUserId()) .eqIfPresent(ErpStockOutDO::getOutType, reqVO.getOutType()) @@ -40,6 +55,17 @@ public interface ErpStockOutMapper extends BaseMapperX { return selectJoinPage(reqVO, ErpStockOutDO.class, query); } + default String buildItemFilterSql(Long productId, Long warehouseId) { + StringBuilder itemFilterSql = new StringBuilder("select distinct out_id from erp_stock_out_item where deleted = 0"); + if (productId != null) { + itemFilterSql.append(" and product_id = ").append(productId); + } + if (warehouseId != null) { + itemFilterSql.append(" and warehouse_id = ").append(warehouseId); + } + return itemFilterSql.toString(); + } + default int updateByIdAndStatus(Long id, Integer status, ErpStockOutDO updateObj) { return update(updateObj, new LambdaUpdateWrapper() .eq(ErpStockOutDO::getId, id) diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/warehousearea/WarehouseAreaMapper.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/warehousearea/WarehouseAreaMapper.java index d4a645d5a..80ae8f4f9 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/warehousearea/WarehouseAreaMapper.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/warehousearea/WarehouseAreaMapper.java @@ -7,6 +7,7 @@ import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.module.erp.dal.dataobject.warehousearea.WarehouseAreaDO; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import cn.iocoder.yudao.module.erp.controller.admin.warehousearea.vo.*; /** @@ -50,4 +51,6 @@ public interface WarehouseAreaMapper extends BaseMapperX { return selectCount(WarehouseAreaDO::getWarehouseId, warehouseId); } + String selectPrintTemplate(@Param("templateType") Integer templateType); + } diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/framework/bean/ProductTypeEnum.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/framework/bean/ProductTypeEnum.java index ba02994a7..a029e28ff 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/framework/bean/ProductTypeEnum.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/framework/bean/ProductTypeEnum.java @@ -10,11 +10,11 @@ import java.util.Arrays; @AllArgsConstructor public enum ProductTypeEnum implements IntArrayValuable { - ITEM(1, "原料"), - PRODUCT(2, "产品"), - TOOL(3, "工具"), + ITEM(1, "产品"), + PRODUCT(2, "物料"), + BEIJIAN(3, "备件"), HAOCAI(4, "耗材"), - BEIJIAN(5, "备件"); + TOOL(5, "工具"); public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(ProductTypeEnum::getTypeId).toArray(); /** diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/product/ErpProductServiceImpl.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/product/ErpProductServiceImpl.java index 75a8d556a..5c7a9e950 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/product/ErpProductServiceImpl.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/product/ErpProductServiceImpl.java @@ -33,6 +33,7 @@ import cn.iocoder.yudao.module.erp.dal.mysql.productpackagingschemerel.ProductPa import cn.iocoder.yudao.module.erp.dal.mysql.productmoldrel.ProductMoldRelMapper; import cn.iocoder.yudao.module.erp.dal.mysql.productsupplierrel.ProductSupplierRelMapper; import cn.iocoder.yudao.module.erp.dal.mysql.stock.ErpStockMapper; +import cn.iocoder.yudao.module.erp.framework.bean.ProductTypeEnum; import cn.iocoder.yudao.module.erp.service.purchase.ErpSupplierService; import cn.iocoder.yudao.module.erp.service.stock.ErpWarehouseService; import cn.iocoder.yudao.module.erp.service.stock.ErpStockService; @@ -503,12 +504,7 @@ public class ErpProductServiceImpl implements ErpProductService { if (id != null) { ErpProductRespVO product = getProduct(id); if (product != null) { - Integer templateType = 0; - if (product.getCategoryType() == 1 ) { - templateType = 1; // 打印模板产品值 - } else if(product.getCategoryId() == 5){ - templateType = 5; // 打印模板备件值 - } + Integer templateType = isSpareProductCategory(product) ? 5 : 1; String template = productMapper.selectPrintTemplate(templateType); product.setTemplateJson(template); } @@ -526,6 +522,15 @@ public class ErpProductServiceImpl implements ErpProductService { throw exception(PRODUCT_NOT_EXISTS); } + private boolean isSpareProductCategory(ErpProductRespVO product) { + Long categoryId = product.getSubCategoryId() != null ? product.getSubCategoryId() : product.getCategoryId(); + if (categoryId == null) { + return Objects.equals(product.getCategoryType(), ProductTypeEnum.BEIJIAN.getTypeId()); + } + ErpProductCategoryDO category = productCategoryMapper.selectById(categoryId); + return category != null && Objects.equals(category.getType(), ProductTypeEnum.BEIJIAN.getTypeId()); + } + diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/warehousearea/WarehouseAreaService.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/warehousearea/WarehouseAreaService.java index 11c56531b..71eed8c59 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/warehousearea/WarehouseAreaService.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/warehousearea/WarehouseAreaService.java @@ -68,5 +68,7 @@ public interface WarehouseAreaService { List getWarehouseListByStatusAndWarehouseId(Integer status, Long warehouseId); + String selectPrintTemplate(); + void regenerateCode(Long id, String code) throws UnsupportedEncodingException; } diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/warehousearea/WarehouseAreaServiceImpl.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/warehousearea/WarehouseAreaServiceImpl.java index 4afbffe5a..ed31a7305 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/warehousearea/WarehouseAreaServiceImpl.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/warehousearea/WarehouseAreaServiceImpl.java @@ -33,6 +33,8 @@ import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.WAREHOUSE_ARE @Slf4j public class WarehouseAreaServiceImpl implements WarehouseAreaService { + private static final int WAREHOUSE_AREA_PRINT_TEMPLATE_TYPE = 7; + @Resource private WarehouseAreaMapper warehouseAreaMapper; @@ -128,6 +130,11 @@ public class WarehouseAreaServiceImpl implements WarehouseAreaService { return result; } + @Override + public String selectPrintTemplate() { + return warehouseAreaMapper.selectPrintTemplate(WAREHOUSE_AREA_PRINT_TEMPLATE_TYPE); + } + @Override public void regenerateCode(Long id, String code) throws UnsupportedEncodingException { if (warehouseAreaMapper.selectById(id) == null) { diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/resources/mapper/warehousearea/WarehouseAreaMapper.xml b/yudao-module-erp/yudao-module-erp-biz/src/main/resources/mapper/warehousearea/WarehouseAreaMapper.xml index 123b6c774..dbd7bfdc7 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/resources/mapper/warehousearea/WarehouseAreaMapper.xml +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/resources/mapper/warehousearea/WarehouseAreaMapper.xml @@ -9,4 +9,12 @@ 文档可见:https://www.iocoder.cn/MyBatis/x-plugins/ --> - \ No newline at end of file + + +