From aeecf4bcf750cd186755ddfa9623c9e5679866e7 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Sun, 4 Jan 2026 13:46:19 +0800 Subject: [PATCH] =?UTF-8?q?feat(eqp):=20=E6=B7=BB=E5=8A=A0=E8=BE=85?= =?UTF-8?q?=E6=96=99=E5=BA=93=E5=AD=98=E5=8F=98=E6=9B=B4=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在控制器中新增 changeStock 接口用于处理辅料库存增减操作 - 实现库存变动业务逻辑,支持增加和减少两种操作类型 - 添加变动数量校验和库存充足性检查机制 - 集成事务管理确保库存更新和变动记录的一致性 - 新增变动记录日志功能记录每次库存变更详情 - 实现操作人信息自动获取和审计字段填充 - 完善参数校验和错误处理机制 --- .../EqpAuxiliaryMaterialChangeController.java | 10 +++ .../IEqpAuxiliaryMaterialChangeService.java | 8 ++ ...EqpAuxiliaryMaterialChangeServiceImpl.java | 82 +++++++++++++++++++ 3 files changed, 100 insertions(+) diff --git a/klp-mes/src/main/java/com/klp/mes/eqp/controller/EqpAuxiliaryMaterialChangeController.java b/klp-mes/src/main/java/com/klp/mes/eqp/controller/EqpAuxiliaryMaterialChangeController.java index 052040bf..e17e469e 100644 --- a/klp-mes/src/main/java/com/klp/mes/eqp/controller/EqpAuxiliaryMaterialChangeController.java +++ b/klp-mes/src/main/java/com/klp/mes/eqp/controller/EqpAuxiliaryMaterialChangeController.java @@ -96,4 +96,14 @@ public class EqpAuxiliaryMaterialChangeController extends BaseController { @PathVariable Long[] changeIds) { return toAjax(iEqpAuxiliaryMaterialChangeService.deleteWithValidByIds(Arrays.asList(changeIds), true)); } + + /** + * 辅料库存变更接口(增加/减少库存) + * @param bo 辅料变动请求BO + * @return 操作结果 + */ + @PostMapping("/changeStock") + public R changeStock(@RequestBody EqpAuxiliaryMaterialChangeBo bo) { + return iEqpAuxiliaryMaterialChangeService.changeStock(bo); + } } diff --git a/klp-mes/src/main/java/com/klp/mes/eqp/service/IEqpAuxiliaryMaterialChangeService.java b/klp-mes/src/main/java/com/klp/mes/eqp/service/IEqpAuxiliaryMaterialChangeService.java index 8ed0fa67..9a5decc2 100644 --- a/klp-mes/src/main/java/com/klp/mes/eqp/service/IEqpAuxiliaryMaterialChangeService.java +++ b/klp-mes/src/main/java/com/klp/mes/eqp/service/IEqpAuxiliaryMaterialChangeService.java @@ -1,5 +1,6 @@ package com.klp.mes.eqp.service; +import com.klp.common.core.domain.R; import com.klp.mes.eqp.domain.EqpAuxiliaryMaterialChange; import com.klp.mes.eqp.domain.vo.EqpAuxiliaryMaterialChangeVo; import com.klp.mes.eqp.domain.bo.EqpAuxiliaryMaterialChangeBo; @@ -46,4 +47,11 @@ public interface IEqpAuxiliaryMaterialChangeService { * 校验并批量删除辅料变动记录信息 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + /** + * 辅料库存变更(增加/减少) + * @param bo 辅料变动请求BO + * @return 操作结果 + */ + R changeStock(EqpAuxiliaryMaterialChangeBo bo); } diff --git a/klp-mes/src/main/java/com/klp/mes/eqp/service/impl/EqpAuxiliaryMaterialChangeServiceImpl.java b/klp-mes/src/main/java/com/klp/mes/eqp/service/impl/EqpAuxiliaryMaterialChangeServiceImpl.java index 2194f52e..09dab5a1 100644 --- a/klp-mes/src/main/java/com/klp/mes/eqp/service/impl/EqpAuxiliaryMaterialChangeServiceImpl.java +++ b/klp-mes/src/main/java/com/klp/mes/eqp/service/impl/EqpAuxiliaryMaterialChangeServiceImpl.java @@ -1,12 +1,16 @@ package com.klp.mes.eqp.service.impl; import cn.hutool.core.bean.BeanUtil; +import com.klp.common.core.domain.R; import com.klp.common.core.page.TableDataInfo; import com.klp.common.core.domain.PageQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.klp.common.helper.LoginHelper; import com.klp.common.utils.StringUtils; +import com.klp.mes.eqp.domain.EqpAuxiliaryMaterial; +import com.klp.mes.eqp.mapper.EqpAuxiliaryMaterialMapper; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import com.klp.mes.eqp.domain.bo.EqpAuxiliaryMaterialChangeBo; @@ -14,7 +18,9 @@ import com.klp.mes.eqp.domain.vo.EqpAuxiliaryMaterialChangeVo; import com.klp.mes.eqp.domain.EqpAuxiliaryMaterialChange; import com.klp.mes.eqp.mapper.EqpAuxiliaryMaterialChangeMapper; import com.klp.mes.eqp.service.IEqpAuxiliaryMaterialChangeService; +import org.springframework.transaction.annotation.Transactional; +import java.util.Date; import java.util.List; import java.util.Map; import java.util.Collection; @@ -31,6 +37,8 @@ public class EqpAuxiliaryMaterialChangeServiceImpl implements IEqpAuxiliaryMater private final EqpAuxiliaryMaterialChangeMapper baseMapper; + private final EqpAuxiliaryMaterialMapper eqpAuxiliaryMaterialMapper; + /** * 查询辅料变动记录 */ @@ -110,4 +118,78 @@ public class EqpAuxiliaryMaterialChangeServiceImpl implements IEqpAuxiliaryMater } return baseMapper.deleteBatchIds(ids) > 0; } + + @Override + @Transactional(rollbackFor = Exception.class) + public R changeStock(EqpAuxiliaryMaterialChangeBo bo) { + // 1. 基础参数校验(基于EqpAuxiliaryMaterialChangeBo的字段) + if (bo.getAuxiliaryId() == null) { + return R.fail("辅料ID不能为空"); + } + if (bo.getChangeQuantity() == null || bo.getChangeQuantity() <= 0) { + return R.fail("变动数量必须为正整数"); + } + if (StringUtils.isBlank(bo.getChangeType())) { + return R.fail("变动类型(增加/减少)不能为空"); + } + // 校验变动类型合法性 + if (!"增加".equals(bo.getChangeType()) && !"减少".equals(bo.getChangeType())) { + return R.fail("变动类型仅支持“增加”或“减少”"); + } + + // 2. 查询辅料信息 + EqpAuxiliaryMaterial auxiliaryMaterial = eqpAuxiliaryMaterialMapper.selectById(bo.getAuxiliaryId()); + if (auxiliaryMaterial == null) { + return R.fail("辅料不存在"); + } + if ("2".equals(auxiliaryMaterial.getDelFlag())) { + return R.fail("辅料已删除,无法操作"); + } + + // 3. 库存变动逻辑 + Long newQuantity; // 替换为Integer(原表quantity是int) + if ("减少".equals(bo.getChangeType())) { + // 减少库存时校验库存充足性 + if (auxiliaryMaterial.getQuantity() < bo.getChangeQuantity()) { + return R.fail("库存不足,当前库存:" + auxiliaryMaterial.getQuantity() + ",需减少:" + bo.getChangeQuantity()); + } + newQuantity = auxiliaryMaterial.getQuantity() - bo.getChangeQuantity(); + } else { + // 增加库存直接累加 + newQuantity = auxiliaryMaterial.getQuantity() + bo.getChangeQuantity(); + } + + // 4. 更新辅料库存(填充审计字段) + auxiliaryMaterial.setQuantity(newQuantity); + // 从上下文获取操作人(替换为你的登录助手类) + String operator = String.valueOf(LoginHelper.getUsername()); + auxiliaryMaterial.setUpdateBy(operator); + auxiliaryMaterial.setUpdateTime(new Date()); + boolean updateSuccess = eqpAuxiliaryMaterialMapper.updateById(auxiliaryMaterial) > 0; + if (!updateSuccess) { + return R.fail("库存更新失败"); + } + + // 5. 插入变动记录(基于EqpAuxiliaryMaterialChangeBo转换) + EqpAuxiliaryMaterialChange changeLog = new EqpAuxiliaryMaterialChange(); + // 从Bo复制核心字段 + changeLog.setAuxiliaryId(bo.getAuxiliaryId()); + changeLog.setChangeType(bo.getChangeType()); + changeLog.setChangeQuantity(bo.getChangeQuantity()); + changeLog.setReason(bo.getReason()); // 变动原因 + changeLog.setRemark(bo.getRemark()); // 备注 + // 补充审计字段 + changeLog.setChangeTime(new Date()); + changeLog.setCreateBy(operator); + changeLog.setUpdateBy(operator); + changeLog.setDelFlag("0"); // 未删除 + + // 插入变动记录 + int insertCount = baseMapper.insert(changeLog); + if (insertCount <= 0) { + return R.fail("变动记录插入失败"); + } + + return R.ok("库存变动成功,新库存:" + newQuantity); + } }