From a3634e88dd90d371e33e90b261dc937a3f7e65d4 Mon Sep 17 00:00:00 2001 From: HuangHuiKang Date: Wed, 10 Jun 2026 11:29:50 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E4=BF=AE=E6=94=B9=E5=85=A5=E5=BA=93?= =?UTF-8?q?=E5=8D=95=E6=8D=AE=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../stock/ErpStockInApproveActionEnum.java | 17 ++++++++++ yudao-module-erp/yudao-module-erp-biz/pom.xml | 7 +++- .../stock/vo/in/ErpStockInSaveReqVO.java | 3 -- .../product/ErpProductServiceImpl.java | 14 +++++--- .../service/stock/ErpStockInServiceImpl.java | 32 ++++++++++--------- .../service/stock/ErpStockOutServiceImpl.java | 25 +++++++++++++-- .../module/infra/api/config/ConfigApi.java | 2 ++ .../infra/api/config/ConfigApiImpl.java | 6 ++++ .../infra/dal/mysql/config/ConfigMapper.java | 4 +++ .../infra/service/config/ConfigService.java | 2 ++ .../service/config/ConfigServiceImpl.java | 5 +++ .../moldoperate/MoldOperateServiceImpl.java | 8 ++--- 12 files changed, 96 insertions(+), 29 deletions(-) create mode 100644 yudao-module-erp/yudao-module-erp-api/src/main/java/cn/iocoder/yudao/module/erp/enums/stock/ErpStockInApproveActionEnum.java diff --git a/yudao-module-erp/yudao-module-erp-api/src/main/java/cn/iocoder/yudao/module/erp/enums/stock/ErpStockInApproveActionEnum.java b/yudao-module-erp/yudao-module-erp-api/src/main/java/cn/iocoder/yudao/module/erp/enums/stock/ErpStockInApproveActionEnum.java new file mode 100644 index 000000000..8659e4f06 --- /dev/null +++ b/yudao-module-erp/yudao-module-erp-api/src/main/java/cn/iocoder/yudao/module/erp/enums/stock/ErpStockInApproveActionEnum.java @@ -0,0 +1,17 @@ +package cn.iocoder.yudao.module.erp.enums.stock; + +import lombok.Getter; +import lombok.RequiredArgsConstructor; + +@RequiredArgsConstructor +@Getter +public enum ErpStockInApproveActionEnum { + + SUBMIT("SUBMIT"), + APPROVE("APPROVE"), + REJECT("REJECT"), + AUTO_APPROVE("AUTO_APPROVE"); + + private final String actionType; + +} diff --git a/yudao-module-erp/yudao-module-erp-biz/pom.xml b/yudao-module-erp/yudao-module-erp-biz/pom.xml index baee6d76f..41b280faf 100644 --- a/yudao-module-erp/yudao-module-erp-biz/pom.xml +++ b/yudao-module-erp/yudao-module-erp-biz/pom.xml @@ -27,6 +27,11 @@ yudao-module-erp-api ${revision} + + cn.iocoder.boot + yudao-module-infra-api + ${revision} + @@ -76,4 +81,4 @@ - \ No newline at end of file + diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/vo/in/ErpStockInSaveReqVO.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/vo/in/ErpStockInSaveReqVO.java index 794323a8d..4655ac624 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/vo/in/ErpStockInSaveReqVO.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/stock/vo/in/ErpStockInSaveReqVO.java @@ -30,9 +30,6 @@ public class ErpStockInSaveReqVO { @Schema(description = "经办人编号", example = "1888") private Long stockUserId; - @Schema(description = "是否需要审核", example = "true") - private Boolean needAudit; - @Schema(description = "审核人编号", example = "1888") private Long auditUserId; 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 f558e7826..65186b3f9 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 @@ -529,10 +529,16 @@ public class ErpProductServiceImpl implements ErpProductService { Map unitMap = productUnitService.getProductUnitMap( convertSet(list, ErpProductDO::getUnitId)); return BeanUtils.toBean(list, ErpProductRespVO.class, product -> { - MapUtils.findAndThen(categoryMap, product.getCategoryId(), - category -> product.setCategoryName(category.getName())); - MapUtils.findAndThen(subCategoryMap, product.getSubCategoryId(), - subCategory -> product.setSubCategoryName(subCategory.getName())); + MapUtils.findAndThen(categoryMap, product.getCategoryId(), category -> { + product.setCategoryName(category.getName()); + if (product.getCategoryType() == null) { + product.setCategoryType(category.getType()); + } + }); + MapUtils.findAndThen(subCategoryMap, product.getSubCategoryId(), subCategory -> { + product.setSubCategoryName(subCategory.getName()); + product.setCategoryType(subCategory.getType()); + }); MapUtils.findAndThen(unitMap, product.getUnitId(), unit -> product.setUnitName(unit.getName())); if (Boolean.TRUE.equals(product.getDeleted())) { diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/stock/ErpStockInServiceImpl.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/stock/ErpStockInServiceImpl.java index f22987be1..0726f0fb6 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/stock/ErpStockInServiceImpl.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/stock/ErpStockInServiceImpl.java @@ -25,12 +25,14 @@ import cn.iocoder.yudao.module.erp.dal.mysql.stock.ErpStockInMapper; import cn.iocoder.yudao.module.erp.dal.mysql.stock.ErpStockMapper; import cn.iocoder.yudao.module.erp.dal.redis.no.ErpNoRedisDAO; import cn.iocoder.yudao.module.erp.enums.ErpAuditStatus; +import cn.iocoder.yudao.module.erp.enums.stock.ErpStockInApproveActionEnum; import cn.iocoder.yudao.module.erp.enums.stock.ErpStockRecordBizTypeEnum; import cn.iocoder.yudao.module.erp.service.mold.MoldBrandService; import cn.iocoder.yudao.module.erp.service.product.ErpProductService; import cn.iocoder.yudao.module.erp.service.purchase.ErpSupplierService; import cn.iocoder.yudao.module.erp.service.stock.bo.ErpStockRecordCreateReqBO; import cn.iocoder.yudao.module.erp.service.warehousearea.WarehouseAreaService; +import cn.iocoder.yudao.module.infra.api.config.ConfigApi; import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -72,11 +74,6 @@ import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.WAREHOUSE_LOC @Validated public class ErpStockInServiceImpl implements ErpStockInService { - private static final String ACTION_SUBMIT = "SUBMIT"; - private static final String ACTION_APPROVE = "APPROVE"; - private static final String ACTION_REJECT = "REJECT"; - private static final String ACTION_AUTO_APPROVE = "AUTO_APPROVE"; - @Resource private ErpStockInMapper stockInMapper; @Resource @@ -101,6 +98,8 @@ public class ErpStockInServiceImpl implements ErpStockInService { private WarehouseAreaService warehouseAreaService; @Resource private AdminUserApi adminUserApi; + @Resource + private ConfigApi configApi; @Override @Transactional(rollbackFor = Exception.class) @@ -117,7 +116,7 @@ public class ErpStockInServiceImpl implements ErpStockInService { throw exception(STOCK_IN_NO_EXISTS); } - boolean needAudit = !Boolean.FALSE.equals(createReqVO.getNeedAudit()); + boolean needAudit = needAudit(); Integer status = needAudit ? ErpAuditStatus.DRAFT.getStatus() : ErpAuditStatus.APPROVE.getStatus(); ErpStockInDO stockIn = BeanUtils.toBean(createReqVO, ErpStockInDO.class, in -> in .setNo(no) @@ -131,7 +130,7 @@ public class ErpStockInServiceImpl implements ErpStockInService { if (!needAudit) { applyStockInEffect(stockIn, stockInItems, null); - createApproveRecord(stockIn.getId(), ACTION_AUTO_APPROVE, null, + createApproveRecord(stockIn.getId(), ErpStockInApproveActionEnum.AUTO_APPROVE, null, ErpAuditStatus.APPROVE.getStatus(), null, "无需审核,系统自动入库"); } return stockIn.getId(); @@ -154,7 +153,7 @@ public class ErpStockInServiceImpl implements ErpStockInService { adminUserApi.validateUser(updateReqVO.getAuditUserId()); } List stockInItems = validateStockInItems(updateReqVO.getItems(), updateReqVO.getInType()); - boolean needAudit = !Boolean.FALSE.equals(updateReqVO.getNeedAudit()); + boolean needAudit = needAudit(); ErpStockInDO updateObj = BeanUtils.toBean(updateReqVO, ErpStockInDO.class, in -> in .setNeedAudit(needAudit) .setTotalCount(getSumValue(stockInItems, ErpStockInItemDO::getCount, BigDecimal::add)) @@ -215,7 +214,7 @@ public class ErpStockInServiceImpl implements ErpStockInService { if (updateCount == 0) { throw exception(STOCK_IN_SUBMIT_FAIL_STATUS); } - createApproveRecord(stockIn.getId(), ACTION_SUBMIT, fromStatus, + createApproveRecord(stockIn.getId(), ErpStockInApproveActionEnum.SUBMIT, fromStatus, ErpAuditStatus.PROCESS.getStatus(), auditUserId, submitReqVO.getRemark()); } @@ -248,7 +247,7 @@ public class ErpStockInServiceImpl implements ErpStockInService { } Long targetUserId = NumberUtils.parseLong(stockIn.getCreator()); createApproveRecord(stockIn.getId(), ErpAuditStatus.APPROVE.getStatus().equals(auditReqVO.getStatus()) - ? ACTION_APPROVE : ACTION_REJECT, + ? ErpStockInApproveActionEnum.APPROVE : ErpStockInApproveActionEnum.REJECT, fromStatus, auditReqVO.getStatus(), targetUserId, auditReqVO.getRemark()); } @@ -329,7 +328,7 @@ public class ErpStockInServiceImpl implements ErpStockInService { boolean approve, Integer bizType) { stockInItems.forEach(stockInItem -> { BigDecimal count = approve ? stockInItem.getCount() : stockInItem.getCount().negate(); - if (Objects.equals(stockIn.getInType(), "妯″叿鍏ュ簱")) { + if (Objects.equals(stockIn.getInType(), "模具入库")) { MoldBrandDO moldDO = moldBrandService.getMoldBrand(stockInItem.getMoldSetId()); Integer recordBizType = bizType != null ? bizType : (approve ? ErpStockRecordBizTypeEnum.OTHER_IN.getType() @@ -360,11 +359,15 @@ public class ErpStockInServiceImpl implements ErpStockInService { return true; } - private void createApproveRecord(Long stockInId, String actionType, Integer fromStatus, + private boolean needAudit() { + return !"0".equals(configApi.getConfigValueByCategoryAndKey("biz", "isAudit")); + } + + private void createApproveRecord(Long stockInId, ErpStockInApproveActionEnum action, Integer fromStatus, Integer toStatus, Long targetUserId, String remark) { stockInApproveRecordMapper.insert(ErpStockInApproveRecordDO.builder() .stockInId(stockInId) - .actionType(actionType) + .actionType(action.getActionType()) .fromStatus(fromStatus) .toStatus(toStatus) .targetUserId(targetUserId) @@ -374,7 +377,7 @@ public class ErpStockInServiceImpl implements ErpStockInService { private List validateStockInItems(List list, String inType) { validateWarehouseAreas(list); - if (Objects.equals(inType, "妯″叿鍏ュ簱")) { + if (Objects.equals(inType, "模具入库")) { List moldList = moldBrandService.validMoldList(convertSet(list, ErpStockInSaveReqVO.Item::getMoldSetId)); Map moldMap = convertMap(moldList, MoldBrandDO::getId); Map warehouseMap = convertMap( @@ -466,4 +469,3 @@ public class ErpStockInServiceImpl implements ErpStockInService { } } } - diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/stock/ErpStockOutServiceImpl.java b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/stock/ErpStockOutServiceImpl.java index 199ff3823..e3a4b5553 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/stock/ErpStockOutServiceImpl.java +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/java/cn/iocoder/yudao/module/erp/service/stock/ErpStockOutServiceImpl.java @@ -22,6 +22,7 @@ import cn.iocoder.yudao.module.erp.service.mold.MoldService; import cn.iocoder.yudao.module.erp.service.product.ErpProductService; import cn.iocoder.yudao.module.erp.service.sale.ErpCustomerService; import cn.iocoder.yudao.module.erp.service.stock.bo.ErpStockRecordCreateReqBO; +import cn.iocoder.yudao.module.infra.api.config.ConfigApi; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; @@ -47,6 +48,10 @@ import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.*; @Validated public class ErpStockOutServiceImpl implements ErpStockOutService { + private static final String AUDIT_CONFIG_CATEGORY = "biz"; + private static final String AUDIT_CONFIG_KEY = "isAudit"; + private static final String AUDIT_CONFIG_DISABLE_VALUE = "0"; + @Resource private ErpStockOutMapper stockOutMapper; @Resource @@ -67,6 +72,8 @@ public class ErpStockOutServiceImpl implements ErpStockOutService { private ErpCustomerService customerService; @Resource private ErpStockRecordService stockRecordService; + @Resource + private ConfigApi configApi; @Override @@ -83,8 +90,10 @@ public class ErpStockOutServiceImpl implements ErpStockOutService { } // 2.1 插入出库单 + boolean needAudit = needAudit(); + Integer status = needAudit ? ErpAuditStatus.PROCESS.getStatus() : ErpAuditStatus.APPROVE.getStatus(); ErpStockOutDO stockOut = BeanUtils.toBean(createReqVO, ErpStockOutDO.class, in -> in - .setNo(no).setStatus(ErpAuditStatus.PROCESS.getStatus()) + .setNo(no).setStatus(status) .setTotalCount(getSumValue(stockOutItems, ErpStockOutItemDO::getCount, BigDecimal::add)) .setTotalPrice(getSumValue(stockOutItems, ErpStockOutItemDO::getTotalPrice, BigDecimal::add, BigDecimal.ZERO))); stockOutMapper.insert(stockOut); @@ -96,6 +105,9 @@ public class ErpStockOutServiceImpl implements ErpStockOutService { // moldDO.setStatus(ErpAuditStatus.PROCESS.getStatus()); // 未审核 // moldService.updateMold(BeanUtils.toBean(moldDO, MoldSaveReqVO.class)); // } + if (!needAudit) { + operateStockOutEffect(stockOut, stockOutItems, true, ErpAuditStatus.APPROVE.getStatus()); + } return stockOut.getId(); } @@ -137,6 +149,11 @@ public class ErpStockOutServiceImpl implements ErpStockOutService { } List stockOutItems = stockOutItemMapper.selectListByOutId(id); + operateStockOutEffect(stockOut, stockOutItems, approve, status); + } + + private void operateStockOutEffect(ErpStockOutDO stockOut, List stockOutItems, + boolean approve, Integer status) { stockOutItems.forEach(stockOutItem -> { BigDecimal count = approve ? stockOutItem.getCount().negate() : stockOutItem.getCount(); if (Objects.equals(stockOut.getOutType(), "模具出库")) { @@ -166,6 +183,10 @@ public class ErpStockOutServiceImpl implements ErpStockOutService { } } + private boolean needAudit() { + return !AUDIT_CONFIG_DISABLE_VALUE.equals(configApi.getConfigValueByCategoryAndKey(AUDIT_CONFIG_CATEGORY, AUDIT_CONFIG_KEY)); + } + private List validateStockOutItems(List list,String outType) { if (Objects.equals(outType, "模具出库")) { List moldList = moldBrandService.validMoldList( @@ -293,4 +314,4 @@ public class ErpStockOutServiceImpl implements ErpStockOutService { } -} \ No newline at end of file +} diff --git a/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/config/ConfigApi.java b/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/config/ConfigApi.java index 85de49e07..4a5fc2409 100644 --- a/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/config/ConfigApi.java +++ b/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/config/ConfigApi.java @@ -15,4 +15,6 @@ public interface ConfigApi { */ String getConfigValueByKey(String key); + String getConfigValueByCategoryAndKey(String category, String key); + } diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/api/config/ConfigApiImpl.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/api/config/ConfigApiImpl.java index c6529130f..137f1c5a8 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/api/config/ConfigApiImpl.java +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/api/config/ConfigApiImpl.java @@ -25,4 +25,10 @@ public class ConfigApiImpl implements ConfigApi { return config != null ? config.getValue() : null; } + @Override + public String getConfigValueByCategoryAndKey(String category, String key) { + ConfigDO config = configService.getConfigByCategoryAndKey(category, key); + return config != null ? config.getValue() : null; + } + } diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/config/ConfigMapper.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/config/ConfigMapper.java index 466403c6e..74e40a464 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/config/ConfigMapper.java +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/dal/mysql/config/ConfigMapper.java @@ -14,6 +14,10 @@ public interface ConfigMapper extends BaseMapperX { return selectOne(ConfigDO::getConfigKey, key); } + default ConfigDO selectByCategoryAndKey(String category, String key) { + return selectOne(ConfigDO::getCategory, category, ConfigDO::getConfigKey, key); + } + default PageResult selectPage(ConfigPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() .likeIfPresent(ConfigDO::getName, reqVO.getName()) diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/config/ConfigService.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/config/ConfigService.java index a555c74c3..61b8dd848 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/config/ConfigService.java +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/config/ConfigService.java @@ -52,6 +52,8 @@ public interface ConfigService { */ ConfigDO getConfigByKey(String key); + ConfigDO getConfigByCategoryAndKey(String category, String key); + /** * 获得参数配置分页列表 * diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/config/ConfigServiceImpl.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/config/ConfigServiceImpl.java index 6d14ad9fc..12345e34e 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/config/ConfigServiceImpl.java +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/config/ConfigServiceImpl.java @@ -74,6 +74,11 @@ public class ConfigServiceImpl implements ConfigService { return configMapper.selectByKey(key); } + @Override + public ConfigDO getConfigByCategoryAndKey(String category, String key) { + return configMapper.selectByCategoryAndKey(category, key); + } + @Override public PageResult getConfigPage(ConfigPageReqVO pageReqVO) { return configMapper.selectPage(pageReqVO); diff --git a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldoperate/MoldOperateServiceImpl.java b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldoperate/MoldOperateServiceImpl.java index bcae9124c..b3a6b19c1 100644 --- a/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldoperate/MoldOperateServiceImpl.java +++ b/yudao-module-mes/yudao-module-mes-biz/src/main/java/cn/iocoder/yudao/module/mes/service/moldoperate/MoldOperateServiceImpl.java @@ -158,10 +158,10 @@ public class MoldOperateServiceImpl implements MoldOperateService { moldOperate.setDeviceId(deviceLedgerDO.getId()); moldOperate.setDeviceName(deviceLedgerDO.getDeviceName()); moldOperate.setLineId(lineId); - OrganizationDO organizationDO = organizationMapper.selectById(lineId); - if (organizationDO != null) { - moldOperate.setLineName(organizationDO.getName()); - } +// OrganizationDO organizationDO = organizationMapper.selectById(lineId); +// if (organizationDO != null) { +// moldOperate.setLineName(organizationDO.getName()); +// } }