From 307ba2b509c599a47287b7eddb5df7e97797cb0c Mon Sep 17 00:00:00 2001 From: kkk-ops <1050738955@qq.com> Date: Sun, 1 Feb 2026 22:51:39 +0800 Subject: [PATCH] =?UTF-8?q?=E9=85=8D=E6=96=B9=E4=BF=9D=E5=AD=98bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/erp/enums/ErrorCodeConstants.java | 2 ++ .../erp/dal/mysql/stock/ErpStockMapper.java | 5 ++++ .../product/ErpProductServiceImpl.java | 26 +++++++++++++++-- .../erp/service/stock/ErpStockService.java | 9 ++++++ .../service/stock/ErpStockServiceImpl.java | 5 ++++ yudao-module-iot/yudao-module-iot-biz/pom.xml | 6 ++++ .../recipepoint/vo/RecipePointRespVO.java | 5 +++- .../dataobject/recipepoint/RecipePointDO.java | 5 ++++ .../recipepoint/RecipePointServiceImpl.java | 29 ++++++++++++++++++- .../service/dvrepair/DvRepairServiceImpl.java | 21 +++++++++----- .../moldrepair/MoldRepairServiceImpl.java | 22 +++++++++----- .../mes/service/task/TaskServiceImpl.java | 2 +- 12 files changed, 118 insertions(+), 19 deletions(-) diff --git a/yudao-module-erp/yudao-module-erp-api/src/main/java/cn/iocoder/yudao/module/erp/enums/ErrorCodeConstants.java b/yudao-module-erp/yudao-module-erp-api/src/main/java/cn/iocoder/yudao/module/erp/enums/ErrorCodeConstants.java index 9a32e91f7a..3f1aec71d2 100644 --- a/yudao-module-erp/yudao-module-erp-api/src/main/java/cn/iocoder/yudao/module/erp/enums/ErrorCodeConstants.java +++ b/yudao-module-erp/yudao-module-erp-api/src/main/java/cn/iocoder/yudao/module/erp/enums/ErrorCodeConstants.java @@ -176,4 +176,6 @@ public interface ErrorCodeConstants { ErrorCode AUTOCODE_RULE_NOT_EXISTS = new ErrorCode(1_111_004, "编码规则不存在"); ErrorCode AUTOCODE_PART_NOT_EXISTS = new ErrorCode(1_111_005, "编码规则组成不存在"); ErrorCode AUTOCODE_GEN_NOT_UNIQUE = new ErrorCode(1_111_006, "编码已存在"); + + ErrorCode PRODUCT_REFERENCES_EXIST = new ErrorCode(1_003_000_000, "存在产品已被引用,请先删除引用。"); } diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/stock/ErpStockMapper.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/stock/ErpStockMapper.java index e981a3a931..9a562ebc30 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/stock/ErpStockMapper.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/dal/mysql/stock/ErpStockMapper.java @@ -36,6 +36,11 @@ public interface ErpStockMapper extends BaseMapperX { ErpStockDO::getWarehouseId, warehouseId); } + default List selectByProductId(Long productId) { + return selectList(new QueryWrapper() + .eq("product_id", productId)); + } + default int updateCountIncrement(Long id, BigDecimal count, boolean negativeEnable) { LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() .eq(ErpStockDO::getId, id); 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 a1cb107a65..a053e5d3e1 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 @@ -11,8 +11,12 @@ import cn.iocoder.yudao.module.erp.controller.admin.product.vo.product.ProductSa import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductCategoryDO; import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductDO; import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductUnitDO; +import cn.iocoder.yudao.module.erp.dal.dataobject.stock.ErpStockDO; import cn.iocoder.yudao.module.erp.dal.mysql.product.ErpProductCategoryMapper; import cn.iocoder.yudao.module.erp.dal.mysql.product.ErpProductMapper; +import cn.iocoder.yudao.module.erp.dal.mysql.stock.ErpStockMapper; +import cn.iocoder.yudao.module.erp.service.stock.ErpStockService; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -25,8 +29,7 @@ import java.util.Map; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; -import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.PRODUCT_NOT_ENABLE; -import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.PRODUCT_NOT_EXISTS; +import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.*; /** * ERP 产品 Service 实现类 @@ -48,6 +51,15 @@ public class ErpProductServiceImpl implements ErpProductService { @Resource private ErpProductUnitService productUnitService; + @Resource + private ErpStockMapper erpStockMapper; + + @Resource + @Lazy // 延迟注入 + private ErpStockService erpStockService; + + + @Override public Long createProduct(ProductSaveReqVO createReqVO) { // TODO 芋艿:校验分类 @@ -90,6 +102,16 @@ public class ErpProductServiceImpl implements ErpProductService { public void deleteProduct(Long id) { // 校验存在 validateProductExists(id); + + //throw exception(PRODUCT_REFERENCES_EXIST); + + ErpProductDO erpProductDO = productMapper.selectById(id); + List list = erpStockService.getStockByProductId(erpProductDO.getId()); + if(list != null && !list.isEmpty()){ + for(ErpStockDO erpStockDO : list){ + erpStockMapper.deleteById(erpStockDO.getId()); + } + } // 删除 productMapper.deleteById(id); } diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/stock/ErpStockService.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/stock/ErpStockService.java index c231e83a8a..b596432641 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/stock/ErpStockService.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/stock/ErpStockService.java @@ -5,6 +5,7 @@ import cn.iocoder.yudao.module.erp.controller.admin.stock.vo.stock.ErpStockPageR import cn.iocoder.yudao.module.erp.dal.dataobject.stock.ErpStockDO; import java.math.BigDecimal; +import java.util.List; /** * ERP 产品库存 Service 接口 @@ -21,6 +22,14 @@ public interface ErpStockService { */ ErpStockDO getStock(Long id); + /** + * 基于产品 + 仓库,获得产品库存 + * + * @param productId 产品编号 + * @return 产品库存 + */ + List getStockByProductId(Long productId); + /** * 基于产品 + 仓库,获得产品库存 * diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/stock/ErpStockServiceImpl.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/stock/ErpStockServiceImpl.java index 3401670eb7..d408473be4 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/stock/ErpStockServiceImpl.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/stock/ErpStockServiceImpl.java @@ -10,6 +10,7 @@ import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; import java.math.BigDecimal; +import java.util.List; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.STOCK_COUNT_NEGATIVE; @@ -48,6 +49,10 @@ public class ErpStockServiceImpl implements ErpStockService { public ErpStockDO getStock(Long productId, Long warehouseId) { return stockMapper.selectByProductIdAndWarehouseId(productId, warehouseId); } + @Override + public List getStockByProductId(Long productId) { + return stockMapper.selectByProductId(productId); + } @Override public BigDecimal getStockCount(Long productId) { diff --git a/yudao-module-iot/yudao-module-iot-biz/pom.xml b/yudao-module-iot/yudao-module-iot-biz/pom.xml index 68577fdfaa..60e41dee82 100644 --- a/yudao-module-iot/yudao-module-iot-biz/pom.xml +++ b/yudao-module-iot/yudao-module-iot-biz/pom.xml @@ -93,6 +93,12 @@ 2.3.0-jdk8-SNAPSHOT compile + + cn.iocoder.boot + yudao-module-erp-biz + 2.3.0-jdk8-SNAPSHOT + compile + diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipepoint/vo/RecipePointRespVO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipepoint/vo/RecipePointRespVO.java index f931eb1d8a..fb8ad3b2e4 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipepoint/vo/RecipePointRespVO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/controller/admin/recipepoint/vo/RecipePointRespVO.java @@ -38,9 +38,12 @@ public class RecipePointRespVO { private String dataType; @Schema(description = "单位") - @ExcelProperty("单位") private String dataUnit; + @Schema(description = "单位") + @ExcelProperty("单位") + private String dataUnitName; + @Schema(description = "备注", example = "你说的对") @ExcelProperty("备注") private String remark; diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/recipepoint/RecipePointDO.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/recipepoint/RecipePointDO.java index 20895cbd31..33014cdcb1 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/recipepoint/RecipePointDO.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/dal/dataobject/recipepoint/RecipePointDO.java @@ -53,6 +53,11 @@ public class RecipePointDO extends BaseDO { * 单位 */ private String dataUnit; + /** + * 单位 + */ + @TableField(exist = false) + private String dataUnitName; /** * 备注 */ diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipepoint/RecipePointServiceImpl.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipepoint/RecipePointServiceImpl.java index 7293387f0f..c9d3e5adf9 100644 --- a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipepoint/RecipePointServiceImpl.java +++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/service/recipepoint/RecipePointServiceImpl.java @@ -1,11 +1,16 @@ package cn.iocoder.yudao.module.iot.service.recipepoint; +import cn.iocoder.yudao.framework.common.util.collection.MapUtils; +import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductUnitDO; +import cn.iocoder.yudao.module.erp.service.product.ErpProductUnitService; import org.springframework.stereotype.Service; import javax.annotation.Resource; import org.springframework.validation.annotation.Validated; import org.springframework.transaction.annotation.Transactional; import java.util.*; +import java.util.stream.Collectors; + import cn.iocoder.yudao.module.iot.controller.admin.recipepoint.vo.*; import cn.iocoder.yudao.module.iot.dal.dataobject.recipepoint.RecipePointDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -15,6 +20,7 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.iot.dal.mysql.recipepoint.RecipePointMapper; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; import static cn.iocoder.yudao.module.iot.enums.ErrorCodeConstants.*; /** @@ -28,6 +34,8 @@ public class RecipePointServiceImpl implements RecipePointService { @Resource private RecipePointMapper recipePointMapper; + @Resource + private ErpProductUnitService productUnitService; @Override public Long createRecipePoint(RecipePointSaveReqVO createReqVO) { @@ -63,7 +71,26 @@ public class RecipePointServiceImpl implements RecipePointService { @Override public PageResult getRecipePointPage(RecipePointPageReqVO pageReqVO) { - return recipePointMapper.selectPage(pageReqVO); + PageResult pageResult = recipePointMapper.selectPage(pageReqVO); + Set unitIds = pageResult.getList().stream() + .filter(Objects::nonNull) + .map(RecipePointDO::getDataUnit) + .filter(dataUnit -> dataUnit != null && !dataUnit.trim().isEmpty()) + .filter(dataUnit -> dataUnit.matches("\\d+")) // 确保是纯数字 + .map(Long::valueOf) + .collect(Collectors.toSet()); + Map unitMap = productUnitService.getProductUnitMap(unitIds); + List recipePointDOList = BeanUtils.toBean(pageResult.getList(), RecipePointDO.class, recipePoint -> { + Long unitId = null; + try { + unitId = Long.valueOf(recipePoint.getDataUnit()); + } catch (NumberFormatException e) { + return; + } + MapUtils.findAndThen(unitMap, unitId, + unit -> recipePoint.setDataUnitName(unit.getName())); + }); + return new PageResult<>(recipePointDOList, pageResult.getTotal()); } @Override diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/dvrepair/DvRepairServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/dvrepair/DvRepairServiceImpl.java index 5214bafc41..d82bb165c8 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/dvrepair/DvRepairServiceImpl.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/dvrepair/DvRepairServiceImpl.java @@ -4,6 +4,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.security.core.LoginUser; import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; +import cn.iocoder.yudao.module.erp.controller.admin.autocode.util.AutoCodeUtil; import cn.iocoder.yudao.module.iot.dal.dataobject.devicemodel.DeviceModelDO; import cn.iocoder.yudao.module.mes.controller.admin.dashboard.vo.dashboard.EventStatisticsVO; import cn.iocoder.yudao.module.mes.controller.admin.dvrepair.enums.RepairResultEnum; @@ -54,17 +55,23 @@ public class DvRepairServiceImpl implements DvRepairService { @Resource private DvRepairLineMapper dvRepairLineMapper; + @Resource + private AutoCodeUtil autoCodeUtil; + @Override @Transactional(rollbackFor = Exception.class) public Long createDvRepair(DvRepairSaveReqVO createReqVO) { + if (StringUtils.isEmpty(createReqVO.getRepairCode())) { + createReqVO.setRepairCode(autoCodeUtil.genSerialCode("DVR_CODE",null)); + } else { + //编码重复判断 + Long count = dvRepairMapper.selectCount(new LambdaQueryWrapper() + .eq(DvRepairDO::getRepairCode, createReqVO.getRepairCode()) + ); - //编码重复判断 - Long count = dvRepairMapper.selectCount(new LambdaQueryWrapper() - .eq(DvRepairDO::getRepairCode, createReqVO.getRepairCode()) - ); - - if (count > 0) { - throw exception(DV_REPAIR_CODE_EXISTS); + if (count > 0) { + throw exception(DV_REPAIR_CODE_EXISTS); + } } // 插入 DvRepairDO dvRepair = BeanUtils.toBean(createReqVO, DvRepairDO.class); diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldrepair/MoldRepairServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldrepair/MoldRepairServiceImpl.java index 9aa3713959..01e4c1967b 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldrepair/MoldRepairServiceImpl.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldrepair/MoldRepairServiceImpl.java @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.mes.service.moldrepair; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.erp.controller.admin.autocode.util.AutoCodeUtil; import cn.iocoder.yudao.module.mes.controller.admin.dashboard.vo.dashboard.EventStatisticsVO; import cn.iocoder.yudao.module.common.controller.admin.moldrepair.enums.RepairResultEnum; import cn.iocoder.yudao.module.common.controller.admin.moldrepair.vo.MoldRepairLineRespVO; @@ -19,6 +20,7 @@ import cn.iocoder.yudao.module.mes.service.moldrepair.MoldRepairService; import com.alibaba.excel.util.StringUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -55,17 +57,23 @@ public class MoldRepairServiceImpl implements MoldRepairService { @Resource private MoldRepairLineMapper moldRepairLineMapper; + @Resource + private AutoCodeUtil autoCodeUtil; + @Override @Transactional(rollbackFor = Exception.class) public Long createMoldRepair(MoldRepairSaveReqVO createReqVO) { + if (StringUtils.isEmpty(createReqVO.getRepairCode())) { + createReqVO.setRepairCode(autoCodeUtil.genSerialCode("MR_CODE",null)); + } else { + //编码重复判断 + Long count = moldRepairMapper.selectCount(new LambdaQueryWrapper() + .eq(MoldRepairDO::getRepairCode, createReqVO.getRepairCode()) + ); - //编码重复判断 - Long count = moldRepairMapper.selectCount(new LambdaQueryWrapper() - .eq(MoldRepairDO::getRepairCode, createReqVO.getRepairCode()) - ); - - if (count > 0) { - throw exception(MOLD_REPAIR_CODE_EXISTS); + if (count > 0) { + throw exception(MOLD_REPAIR_CODE_EXISTS); + } } // 插入 MoldRepairDO moldRepair = BeanUtils.toBean(createReqVO, MoldRepairDO.class); diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/task/TaskServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/task/TaskServiceImpl.java index 8965994b14..bf6ce53a9c 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/task/TaskServiceImpl.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/task/TaskServiceImpl.java @@ -54,7 +54,7 @@ public class TaskServiceImpl implements TaskService { @Resource private MesNoRedisDAO noRedisDAO; - @Autowired + @Resource private AutoCodeUtil autoCodeUtil; @Override