diff --git a/klp-mes/src/main/java/com/klp/mes/eqp/controller/EqpSparePartsChangeController.java b/klp-mes/src/main/java/com/klp/mes/eqp/controller/EqpSparePartsChangeController.java index 2afa9837..fdc8e2bd 100644 --- a/klp-mes/src/main/java/com/klp/mes/eqp/controller/EqpSparePartsChangeController.java +++ b/klp-mes/src/main/java/com/klp/mes/eqp/controller/EqpSparePartsChangeController.java @@ -3,6 +3,7 @@ package com.klp.mes.eqp.controller; import java.util.List; import java.util.Arrays; +import com.klp.mes.eqp.domain.bo.EqpSparePartBo; import lombok.RequiredArgsConstructor; import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.*; @@ -96,4 +97,10 @@ public class EqpSparePartsChangeController extends BaseController { @PathVariable Long[] changeIds) { return toAjax(iEqpSparePartsChangeService.deleteWithValidByIds(Arrays.asList(changeIds), true)); } + + //新增接口:库存变更接口 用来增加或者减少库存如果库存不足需要抛出异常 + @PostMapping("/changeStock") + public R changeStock(@RequestBody EqpSparePartsChangeBo bo) { + return iEqpSparePartsChangeService.changeStock(bo); + } } diff --git a/klp-mes/src/main/java/com/klp/mes/eqp/service/IEqpSparePartsChangeService.java b/klp-mes/src/main/java/com/klp/mes/eqp/service/IEqpSparePartsChangeService.java index c4ed8e7e..e3b5a98a 100644 --- a/klp-mes/src/main/java/com/klp/mes/eqp/service/IEqpSparePartsChangeService.java +++ b/klp-mes/src/main/java/com/klp/mes/eqp/service/IEqpSparePartsChangeService.java @@ -1,6 +1,8 @@ package com.klp.mes.eqp.service; +import com.klp.common.core.domain.R; import com.klp.mes.eqp.domain.EqpSparePartsChange; +import com.klp.mes.eqp.domain.bo.EqpSparePartBo; import com.klp.mes.eqp.domain.vo.EqpSparePartsChangeVo; import com.klp.mes.eqp.domain.bo.EqpSparePartsChangeBo; import com.klp.common.core.page.TableDataInfo; @@ -46,4 +48,6 @@ public interface IEqpSparePartsChangeService { * 校验并批量删除备品备件变动记录信息 */ Boolean deleteWithValidByIds(Collection ids, Boolean isValid); + + R changeStock(EqpSparePartsChangeBo bo); } diff --git a/klp-mes/src/main/java/com/klp/mes/eqp/service/impl/EqpSparePartsChangeServiceImpl.java b/klp-mes/src/main/java/com/klp/mes/eqp/service/impl/EqpSparePartsChangeServiceImpl.java index 694089a6..c6fa9c77 100644 --- a/klp-mes/src/main/java/com/klp/mes/eqp/service/impl/EqpSparePartsChangeServiceImpl.java +++ b/klp-mes/src/main/java/com/klp/mes/eqp/service/impl/EqpSparePartsChangeServiceImpl.java @@ -2,20 +2,30 @@ package com.klp.mes.eqp.service.impl; import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.klp.common.core.domain.R; +import com.klp.common.core.domain.model.LoginUser; 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.EqpSparePart; +import com.klp.mes.eqp.domain.bo.EqpSparePartBo; +import com.klp.mes.eqp.mapper.EqpSparePartMapper; +import liquibase.pro.packaged.A; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.klp.mes.eqp.domain.bo.EqpSparePartsChangeBo; import com.klp.mes.eqp.domain.vo.EqpSparePartsChangeVo; import com.klp.mes.eqp.domain.EqpSparePartsChange; import com.klp.mes.eqp.mapper.EqpSparePartsChangeMapper; import com.klp.mes.eqp.service.IEqpSparePartsChangeService; +import org.springframework.transaction.annotation.Transactional; +import java.util.Date; import java.util.List; import java.util.Map; import java.util.Collection; @@ -32,6 +42,9 @@ public class EqpSparePartsChangeServiceImpl implements IEqpSparePartsChangeServi private final EqpSparePartsChangeMapper baseMapper; + @Autowired + private EqpSparePartMapper eqpSparePartMapper; + /** * 查询备品备件变动记录 */ @@ -124,4 +137,78 @@ public class EqpSparePartsChangeServiceImpl implements IEqpSparePartsChangeServi } return baseMapper.deleteBatchIds(ids) > 0; } + + @Override + @Transactional(rollbackFor = Exception.class) + public R changeStock(EqpSparePartsChangeBo bo) { + // 1. 基础参数校验(基于EqpSparePartsChangeBo的字段) + if (bo.getPartId() == 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. 查询备件信息 + EqpSparePart sparePart = eqpSparePartMapper.selectById(bo.getPartId()); + if (sparePart == null) { + return R.fail("备品备件不存在"); + } + if ("2".equals(sparePart.getDelFlag())) { + return R.fail("备品备件已删除,无法操作"); + } + + // 3. 库存变动逻辑 + Long newQuantity; + if ("减少".equals(bo.getChangeType())) { + // 减少库存时校验库存充足性 + if (sparePart.getQuantity() < bo.getChangeQuantity()) { + return R.fail("库存不足,当前库存:" + sparePart.getQuantity() + ",需减少:" + bo.getChangeQuantity()); + } + newQuantity = sparePart.getQuantity() - bo.getChangeQuantity(); + } else { + // 增加库存直接累加 + newQuantity = sparePart.getQuantity() + bo.getChangeQuantity(); + } + + // 4. 更新备件库存(填充审计字段) + sparePart.setQuantity(newQuantity); + // 从Bo获取操作人(优先)或默认值 + String operator = String.valueOf(LoginHelper.getLoginUser()); + sparePart.setUpdateBy(operator); + sparePart.setUpdateTime(new Date()); + boolean updateSuccess = eqpSparePartMapper.updateById(sparePart) > 0; + if (!updateSuccess) { + return R.fail("库存更新失败"); + } + + // 5. 插入变动记录(基于EqpSparePartsChangeBo转换) + EqpSparePartsChange changeLog = new EqpSparePartsChange(); + // 从Bo复制核心字段 + changeLog.setPartId(bo.getPartId()); + changeLog.setChangeType(bo.getChangeType()); + changeLog.setChangeQuantity(bo.getChangeQuantity()); + changeLog.setReason(bo.getReason()); // 变动原因(Bo中应包含该字段) + changeLog.setRemark(bo.getRemark()); // 备注(Bo中应包含该字段) + // 补充审计字段 + changeLog.setChangeTime(new Date()); + changeLog.setCreateBy(operator); + changeLog.setUpdateBy(operator); + changeLog.setDelFlag("0"); // 未删除 + + // 插入变动记录(需注入对应Mapper) + int insertCount = baseMapper.insert(changeLog); + if (insertCount <= 0) { + return R.fail("变动记录插入失败"); + } + + return R.ok("库存变动成功,新库存:" + newQuantity); + } }