diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/controller/BusMrpBaseController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/controller/BusMrpBaseController.java index 33923cc6..be6f08d3 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/controller/BusMrpBaseController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/controller/BusMrpBaseController.java @@ -2,6 +2,7 @@ package org.dromara.cailiaoshebei.controller; import java.util.List; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.*; @@ -9,8 +10,14 @@ import cn.dev33.satoken.annotation.SaCheckPermission; import org.dromara.cailiaoshebei.domain.dto.BusMrpDto; import org.dromara.cailiaoshebei.domain.dto.BusMrpExportDto; import org.dromara.cailiaoshebei.domain.vo.BusMrpVo; +import org.dromara.common.core.enums.BusinessStatusEnum; +import org.dromara.common.core.exception.ServiceException; +import org.dromara.design.domain.BusBillofquantities; +import org.dromara.design.domain.BusBillofquantitiesVersions; import org.dromara.design.domain.dto.desCollect.DesCollectBatchDto; import org.dromara.design.domain.vo.DesCollectVo; +import org.dromara.design.service.IBusBillofquantitiesService; +import org.dromara.design.service.IBusBillofquantitiesVersionsService; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import org.dromara.common.idempotent.annotation.RepeatSubmit; @@ -41,6 +48,10 @@ public class BusMrpBaseController extends BaseController { private final IBusMrpBaseService busMrpBaseService; + private final IBusBillofquantitiesVersionsService busBillofquantitiesVersionsService; + + private final IBusBillofquantitiesService busBillofquantitiesService; + /** * 查询物资-批次需求计划基础信息列表 */ @@ -129,4 +140,26 @@ public class BusMrpBaseController extends BaseController { return toAjax(busMrpBaseService.importData(dto)); } + /** + * 获取工程量清单列表 + */ + @SaCheckPermission("cailiaoshebei:purchaseDoc:add") + @GetMapping("/engineeringList") + public R> obtainTheList(Long projectId) { + + BusBillofquantitiesVersions one = busBillofquantitiesVersionsService.getOne(Wrappers.lambdaQuery() + .eq(BusBillofquantitiesVersions::getWorkOrderType, "3") //物资工程量清单 + .eq(BusBillofquantitiesVersions::getProjectId, projectId) + .eq(BusBillofquantitiesVersions::getStatus, BusinessStatusEnum.FINISH.getStatus()) + .last("limit 1") + ); + if (one == null){ + throw new ServiceException("请先完成物资工程量清单"); + } + List list = busBillofquantitiesService.list(Wrappers.lambdaQuery() + .eq(BusBillofquantities::getVersions, one.getVersions()) + ); + + return R.ok(list); + } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/service/impl/BusMrpBaseServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/service/impl/BusMrpBaseServiceImpl.java index 6e07d846..3e019345 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/service/impl/BusMrpBaseServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/service/impl/BusMrpBaseServiceImpl.java @@ -17,6 +17,7 @@ import org.dromara.common.core.domain.event.ProcessDeleteEvent; import org.dromara.common.core.domain.event.ProcessEvent; import org.dromara.common.core.domain.event.ProcessTaskEvent; import org.dromara.common.core.enums.BusinessStatusEnum; +import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -26,7 +27,9 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import org.dromara.common.utils.excel.ExcelDynamicReader; +import org.dromara.design.domain.BusBillofquantities; import org.dromara.design.domain.DesCollect; +import org.dromara.design.service.IBusBillofquantitiesService; import org.springframework.context.event.EventListener; import org.springframework.stereotype.Service; import org.dromara.cailiaoshebei.domain.bo.BusMrpBaseBo; @@ -36,10 +39,12 @@ import org.dromara.cailiaoshebei.mapper.BusMrpBaseMapper; import org.dromara.cailiaoshebei.service.IBusMrpBaseService; import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Collection; +import java.util.stream.Collectors; /** * 物资-批次需求计划基础信息Service业务层处理 @@ -56,6 +61,8 @@ public class BusMrpBaseServiceImpl extends ServiceImpl batchSumMap = dto.getPlanList().stream() + .collect(Collectors.groupingBy( + BusMaterialbatchdemandplanBo::getSuppliespriceId, + Collectors.reducing( + BigDecimal.ZERO, + BusMaterialbatchdemandplanBo::getDemandQuantity, + BigDecimal::add + ) + )); + + // 检查每种物料是否超出数量限制 + for (Map.Entry entry : batchSumMap.entrySet()) { + Long suppliespriceId = entry.getKey(); + BigDecimal batchSum = entry.getValue(); + + // 获取数据库中已有的数量 + List existingList = planservice.list( + Wrappers.lambdaQuery(BusMaterialbatchdemandplan.class) + .eq(BusMaterialbatchdemandplan::getSuppliespriceId, suppliespriceId) + .ne(BusMaterialbatchdemandplan::getMrpBaseId, convert.getId()) // 排除当前批次 + ); + + BigDecimal existingSum = existingList.stream() + .map(BusMaterialbatchdemandplan::getDemandQuantity) + .reduce(BigDecimal.ZERO, BigDecimal::add); + + // 检查总数量是否超出限制 + BusBillofquantities billofquantities = busBillofquantitiesService.getById(suppliespriceId); + if (existingSum.add(batchSum).compareTo(billofquantities.getQuantity()) > 0) { + // 找到超出限制的物料名称用于提示 + String itemName = dto.getPlanList().stream() + .filter(plan -> plan.getSuppliespriceId().equals(suppliespriceId)) + .findFirst() + .map(BusMaterialbatchdemandplanBo::getName) + .orElse("未知物料"); + throw new ServiceException(itemName + "超出数量"); + } + } + + // 转换并保存数据 List plans = MapstructUtils.convert(dto.getPlanList(), BusMaterialbatchdemandplan.class); plans.forEach(item -> { item.setMrpBaseId(convert.getId());