优化
This commit is contained in:
@ -2,6 +2,7 @@ package org.dromara.cailiaoshebei.controller;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import jakarta.validation.constraints.*;
|
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.BusMrpDto;
|
||||||
import org.dromara.cailiaoshebei.domain.dto.BusMrpExportDto;
|
import org.dromara.cailiaoshebei.domain.dto.BusMrpExportDto;
|
||||||
import org.dromara.cailiaoshebei.domain.vo.BusMrpVo;
|
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.dto.desCollect.DesCollectBatchDto;
|
||||||
import org.dromara.design.domain.vo.DesCollectVo;
|
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.web.bind.annotation.*;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.dromara.common.idempotent.annotation.RepeatSubmit;
|
import org.dromara.common.idempotent.annotation.RepeatSubmit;
|
||||||
@ -41,6 +48,10 @@ public class BusMrpBaseController extends BaseController {
|
|||||||
|
|
||||||
private final IBusMrpBaseService busMrpBaseService;
|
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));
|
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.ProcessEvent;
|
||||||
import org.dromara.common.core.domain.event.ProcessTaskEvent;
|
import org.dromara.common.core.domain.event.ProcessTaskEvent;
|
||||||
import org.dromara.common.core.enums.BusinessStatusEnum;
|
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.MapstructUtils;
|
||||||
import org.dromara.common.core.utils.StringUtils;
|
import org.dromara.common.core.utils.StringUtils;
|
||||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
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 com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.dromara.common.utils.excel.ExcelDynamicReader;
|
import org.dromara.common.utils.excel.ExcelDynamicReader;
|
||||||
|
import org.dromara.design.domain.BusBillofquantities;
|
||||||
import org.dromara.design.domain.DesCollect;
|
import org.dromara.design.domain.DesCollect;
|
||||||
|
import org.dromara.design.service.IBusBillofquantitiesService;
|
||||||
import org.springframework.context.event.EventListener;
|
import org.springframework.context.event.EventListener;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.dromara.cailiaoshebei.domain.bo.BusMrpBaseBo;
|
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.dromara.cailiaoshebei.service.IBusMrpBaseService;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 物资-批次需求计划基础信息Service业务层处理
|
* 物资-批次需求计划基础信息Service业务层处理
|
||||||
@ -56,6 +61,8 @@ public class BusMrpBaseServiceImpl extends ServiceImpl<BusMrpBaseMapper, BusMrpB
|
|||||||
|
|
||||||
private final IBusMaterialbatchdemandplanService planservice;
|
private final IBusMaterialbatchdemandplanService planservice;
|
||||||
|
|
||||||
|
private final IBusBillofquantitiesService busBillofquantitiesService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询物资-批次需求计划基础信息
|
* 查询物资-批次需求计划基础信息
|
||||||
*
|
*
|
||||||
@ -181,6 +188,47 @@ public class BusMrpBaseServiceImpl extends ServiceImpl<BusMrpBaseMapper, BusMrpB
|
|||||||
.eq(BusMaterialbatchdemandplan::getMrpBaseId, convert.getId()));
|
.eq(BusMaterialbatchdemandplan::getMrpBaseId, convert.getId()));
|
||||||
|
|
||||||
if (CollectionUtil.isNotEmpty(dto.getPlanList())) {
|
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);
|
List<BusMaterialbatchdemandplan> plans = MapstructUtils.convert(dto.getPlanList(), BusMaterialbatchdemandplan.class);
|
||||||
plans.forEach(item -> {
|
plans.forEach(item -> {
|
||||||
item.setMrpBaseId(convert.getId());
|
item.setMrpBaseId(convert.getId());
|
||||||
|
Reference in New Issue
Block a user