优化
This commit is contained in:
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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());
|
||||
|
Reference in New Issue
Block a user