This commit is contained in:
zt
2025-08-21 00:48:10 +08:00
parent 4660a18dbd
commit 914c37260e
2 changed files with 81 additions and 0 deletions

View File

@ -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<List<BusBillofquantities>> obtainTheList(Long projectId) {
BusBillofquantitiesVersions one = busBillofquantitiesVersionsService.getOne(Wrappers.<BusBillofquantitiesVersions>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<BusBillofquantities> list = busBillofquantitiesService.list(Wrappers.<BusBillofquantities>lambdaQuery()
.eq(BusBillofquantities::getVersions, one.getVersions())
);
return R.ok(list);
}
}

View File

@ -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<BusMrpBaseMapper, BusMrpB
private final IBusMaterialbatchdemandplanService planservice;
private final IBusBillofquantitiesService busBillofquantitiesService;
/**
* 查询物资-批次需求计划基础信息
*
@ -181,6 +188,47 @@ public class BusMrpBaseServiceImpl extends ServiceImpl<BusMrpBaseMapper, BusMrpB
.eq(BusMaterialbatchdemandplan::getMrpBaseId, convert.getId()));
if (CollectionUtil.isNotEmpty(dto.getPlanList())) {
// 按 suppliespriceId 分组统计本次提交的数量
Map<Long, BigDecimal> batchSumMap = dto.getPlanList().stream()
.collect(Collectors.groupingBy(
BusMaterialbatchdemandplanBo::getSuppliespriceId,
Collectors.reducing(
BigDecimal.ZERO,
BusMaterialbatchdemandplanBo::getDemandQuantity,
BigDecimal::add
)
));
// 检查每种物料是否超出数量限制
for (Map.Entry<Long, BigDecimal> entry : batchSumMap.entrySet()) {
Long suppliespriceId = entry.getKey();
BigDecimal batchSum = entry.getValue();
// 获取数据库中已有的数量
List<BusMaterialbatchdemandplan> 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<BusMaterialbatchdemandplan> plans = MapstructUtils.convert(dto.getPlanList(), BusMaterialbatchdemandplan.class);
plans.forEach(item -> {
item.setMrpBaseId(convert.getId());