diff --git a/xinnengyuan/ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/listener/WebSocketTopicListener.java b/xinnengyuan/ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/listener/WebSocketTopicListener.java index 0ad39aff..b22a06c7 100644 --- a/xinnengyuan/ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/listener/WebSocketTopicListener.java +++ b/xinnengyuan/ruoyi-common/ruoyi-common-websocket/src/main/java/org/dromara/common/websocket/listener/WebSocketTopicListener.java @@ -26,7 +26,7 @@ public class WebSocketTopicListener implements ApplicationRunner, Ordered { public void run(ApplicationArguments args) throws Exception { // 订阅WebSocket消息 WebSocketUtils.subscribeMessage((message) -> { - log.info("WebSocket主题订阅收到消息session keys={} message={}", message.getSessionKeys(), message.getMessage()); +// log.info("WebSocket主题订阅收到消息session keys={} message={}", message.getSessionKeys(), message.getMessage()); // 如果key不为空就按照key发消息 如果为空就群发 if (CollUtil.isNotEmpty(message.getSessionKeys())) { message.getSessionKeys().forEach(key -> { 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 0f5a3bf6..3826bd72 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 @@ -13,6 +13,7 @@ import lombok.RequiredArgsConstructor; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.constraints.*; import cn.dev33.satoken.annotation.SaCheckPermission; +import org.dromara.cailiaoshebei.domain.bo.RemainingReq; import org.dromara.cailiaoshebei.domain.dto.BusMrpDto; import org.dromara.cailiaoshebei.domain.dto.BusMrpExportDto; import org.dromara.cailiaoshebei.domain.vo.BusMrpVo; @@ -24,6 +25,10 @@ import org.dromara.design.domain.bo.CoryObtainTheListReq; import org.dromara.design.domain.vo.ObtainTheListRes; import org.dromara.design.service.IBusBillofquantitiesService; import org.dromara.design.service.IBusBillofquantitiesVersionsService; +import org.dromara.tender.domain.bo.BusBiddingPlanBo; +import org.dromara.tender.domain.vo.BusBiddingPlanVo; +import org.dromara.tender.domain.vo.BusBillofquantitiesLimitListVo; +import org.dromara.tender.service.IBusBiddingPlanService; import org.springframework.beans.BeanUtils; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*; @@ -59,6 +64,7 @@ public class BusMrpBaseController extends BaseController { private final IBusBillofquantitiesVersionsService busBillofquantitiesVersionsService; private final IBusBillofquantitiesService busBillofquantitiesService; + private final IBusBiddingPlanService busBiddingPlanService; /** * 查询物资-批次需求计划基础信息列表 @@ -141,8 +147,14 @@ public class BusMrpBaseController extends BaseController { * 获取剩余量 */ @GetMapping("/remaining") - public R> remaining(Long projectId, String suppliespriceName,String specification,Long mrpBaseId) { - return R.ok(busMrpBaseService.remaining(projectId,suppliespriceName,specification,mrpBaseId)); + public R>> remaining( RemainingReq req) { + String[] split = req.getLimitListId().split(","); + List> maps = new ArrayList<>(); + for (String id : split) { + Map remaining = busMrpBaseService.remaining(req.getProjectId(), Long.valueOf(id), req.getMrpBaseId()); + maps.add(remaining); + } + return R.ok(maps); } @@ -175,6 +187,35 @@ public class BusMrpBaseController extends BaseController { return R.ok(list); } + /** + * 获取工程量清单列表 + */ + @SaCheckPermission("cailiaoshebei:mrpBase:getZhaoBiaoList") + @GetMapping("/getZhaoBiaoList") + public R> getZhaoBiaoList(CoryObtainTheListReq req) { + BusBiddingPlanBo bo = new BusBiddingPlanBo(); + bo.setProjectId(req.getProjectId()); + bo.setType("3"); + bo.setBidStatus(1); + List busBiddingPlanVos = busBiddingPlanService.queryList(bo); + return R.ok(busBiddingPlanVos); + } + + /** + * 招标计划数据详情 + * @param bo + * @return + */ + @SaCheckPermission("cailiaoshebei:mrpBase:getMore") + @GetMapping("/getMore") + public R> getMore(BusBiddingPlanBo bo) { + if (bo.getId() == null) { + throw new ServiceException("id不能为空"); + } + return R.ok(busBiddingPlanService.getMore(bo)); + } + + /** * 获取工程量清单列表 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/controller/app/BusMrpBaseAppController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/controller/app/BusMrpBaseAppController.java index 59bc1be5..5d7dff17 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/controller/app/BusMrpBaseAppController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/controller/app/BusMrpBaseAppController.java @@ -106,8 +106,8 @@ public class BusMrpBaseAppController extends BaseController { * 获取剩余量 */ @GetMapping("/remaining") - public R> remaining(Long projectId, String suppliespriceName,String specification,Long mrpBaseId) { - return R.ok(busMrpBaseService.remaining(projectId,suppliespriceName,specification,mrpBaseId)); + public R> remaining(Long projectId,Long limitListId,Long mrpBaseId) { + return R.ok(busMrpBaseService.remaining(projectId,limitListId,mrpBaseId)); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/domain/bo/BusPlanDocAssociationBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/domain/bo/BusPlanDocAssociationBo.java index 6683d1f0..35af73c1 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/domain/bo/BusPlanDocAssociationBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/domain/bo/BusPlanDocAssociationBo.java @@ -42,6 +42,10 @@ public class BusPlanDocAssociationBo extends BaseEntity { * 采购联系单id */ private Long docId; + /** + * + */ + private Long suppliespriceId; /** * 需求数量 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/domain/bo/RemainingReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/domain/bo/RemainingReq.java new file mode 100644 index 00000000..ee9f569f --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/domain/bo/RemainingReq.java @@ -0,0 +1,16 @@ +package org.dromara.cailiaoshebei.domain.bo; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +@Data +public class RemainingReq implements Serializable { + + private Long projectId; + + private String limitListId; + + private Long mrpBaseId; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/domain/vo/BusMaterialbatchdemandplanVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/domain/vo/BusMaterialbatchdemandplanVo.java index 3340e58c..29cc5702 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/domain/vo/BusMaterialbatchdemandplanVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/domain/vo/BusMaterialbatchdemandplanVo.java @@ -140,4 +140,12 @@ public class BusMaterialbatchdemandplanVo implements Serializable { */ private BigDecimal remaining; + + /** + * 供应商提供数量 + */ + private BigDecimal tenderQuantity; + + + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/service/IBusMrpBaseService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/service/IBusMrpBaseService.java index 6b25834c..1cde849e 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/service/IBusMrpBaseService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/service/IBusMrpBaseService.java @@ -86,5 +86,5 @@ public interface IBusMrpBaseService extends IService{ /** * 获取物资已有数量 */ - Map remaining(Long projectId, String suppliespriceName, String specification, Long mrpBaseId); + Map remaining(Long projectId,Long limitListId,Long mrpBaseId); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/service/impl/BusMaterialbatchdemandplanServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/service/impl/BusMaterialbatchdemandplanServiceImpl.java index 2621d80a..06ceb3cb 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/service/impl/BusMaterialbatchdemandplanServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/cailiaoshebei/service/impl/BusMaterialbatchdemandplanServiceImpl.java @@ -24,10 +24,13 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import org.dromara.design.domain.BusBillofquantities; import org.dromara.design.service.IBusBillofquantitiesService; +import org.dromara.tender.domain.BusBillofquantitiesLimitList; import org.dromara.tender.domain.bo.BusBiddingPlanBo; import org.dromara.tender.domain.vo.BusBiddingPlanVo; import org.dromara.tender.domain.vo.BusBillofquantitiesLimitListVo; +import org.dromara.tender.domain.vo.BusTenderPlanningLimitListVo; import org.dromara.tender.service.IBusBiddingPlanService; +import org.dromara.tender.service.IBusBillofquantitiesLimitListService; import org.dromara.tender.service.ITenderSupplierInputService; import org.springframework.context.annotation.Lazy; import org.springframework.beans.factory.annotation.Autowired; @@ -41,6 +44,7 @@ import org.dromara.cailiaoshebei.mapper.BusMaterialbatchdemandplanMapper; import org.dromara.cailiaoshebei.service.IBusMaterialbatchdemandplanService; import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; import java.util.*; /** @@ -72,6 +76,9 @@ public class BusMaterialbatchdemandplanServiceImpl extends ServiceImpl busBiddingPlanVos = busBiddingPlanService.getBillofquantitiesLimitListVo(bo1); + Map map = busBiddingPlanService.getCailiaoCount(bo1); if (busBiddingPlanVos == null || busBiddingPlanVos.isEmpty()) { throw new ServiceException("该供应商暂无材料"); } - Set hashSet = new HashSet<>(); - busBiddingPlanVos.stream().forEach(vo -> { - hashSet.add(vo.getName()+"+"+vo.getSpecification()); + Set hashSet = new HashSet<>(); + busBiddingPlanVos.forEach(vo -> { + hashSet.add(vo.getId()); }); - List list = result.getRecords().stream().filter(vo -> { - String key = vo.getName() + "+" + vo.getSpecification(); // 拼接字符串(需与 Set 中格式一致) - return hashSet.contains(key); // 仅保留 Set 中存在的数据 - }).toList(); - result.setRecords(list); + result.getRecords().stream().filter(vo -> { + return hashSet.contains(vo.getSuppliespriceId()); // 仅保留 Set 中存在的数据 + }).forEach(item->{ + if (map.containsKey(item.getId())) { + item.setTenderQuantity(map.get(item.getId())); + } + }); + } - result.getRecords().stream().forEach(vo -> { + result.getRecords().forEach(vo -> { if (vo.getSuppliespricePid() != null){ - BusBillofquantities billofquantities = busBillofquantitiesService.getById(vo.getSuppliespricePid()); + BusBillofquantitiesLimitList billofquantities = busBillofquantitiesLimitListService.getById(vo.getSuppliespricePid()); vo.setSuppliespricePname(billofquantities.getName()); } }); 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 71556819..720f9284 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 @@ -29,6 +29,10 @@ import lombok.RequiredArgsConstructor; import org.dromara.common.utils.excel.ExcelDynamicReader; import org.dromara.design.domain.BusBillofquantities; import org.dromara.design.service.IBusBillofquantitiesService; +import org.dromara.tender.domain.BusBillofquantitiesLimitList; +import org.dromara.tender.domain.BusTenderPlanningLimitList; +import org.dromara.tender.service.IBusBillofquantitiesLimitListService; +import org.dromara.tender.service.IBusTenderPlanningLimitListService; import org.springframework.context.event.EventListener; import org.springframework.stereotype.Service; import org.dromara.cailiaoshebei.domain.bo.BusMrpBaseBo; @@ -57,7 +61,10 @@ public class BusMrpBaseServiceImpl extends ServiceImpl voList = planservice.queryList(planBo); for (BusMaterialbatchdemandplanVo vo : voList) { - Map map = remaining(vo.getProjectId(),vo.getName(), vo.getSpecification(), id); + Map map = remaining(vo.getProjectId(), vo.getSuppliespriceId(), id); vo.setRemaining(Convert.toBigDecimal(map.get("remainingQuantity"))); } busMrpVo.setMrpBaseBo(busMrpBaseVo); @@ -190,14 +197,13 @@ public class BusMrpBaseServiceImpl extends ServiceImpl batchSumMap = dto.getPlanList().stream() + // String name = item.getName() != null ? item.getName() : ""; + // String spec = item.getSpecification() != null ? item.getSpecification() : ""; + // return name + "&&&" + spec; + Map batchSumMap = dto.getPlanList().stream() .collect(Collectors.groupingBy( // 关键修改:使用 name + specification 拼接作为分组键 - item -> { - String name = item.getName() != null ? item.getName() : ""; - String spec = item.getSpecification() != null ? item.getSpecification() : ""; - return name + "&&&" + spec; - }, + BusMaterialbatchdemandplanBo::getSuppliespriceId, Collectors.reducing( BigDecimal.ZERO, item -> { @@ -209,45 +215,36 @@ public class BusMrpBaseServiceImpl extends ServiceImpl entry : batchSumMap.entrySet()) { - String biaoshi = entry.getKey(); + for (Map.Entry entry : batchSumMap.entrySet()) { + Long biaoshi = entry.getKey(); BigDecimal batchSum = entry.getValue(); - String[] split = biaoshi.split("&&&"); // 获取数据库中已有的数量 List existingList = planservice.list( Wrappers.lambdaQuery(BusMaterialbatchdemandplan.class) - .eq(BusMaterialbatchdemandplan::getName, split[0]) - .eq(BusMaterialbatchdemandplan::getSpecification,split[1]) + .eq(BusMaterialbatchdemandplan::getSuppliespriceId, biaoshi) .ne(BusMaterialbatchdemandplan::getMrpBaseId, convert.getId()) // 排除当前批次 ); - + //计算数据库保存数量 BigDecimal existingSum = existingList.stream() .map(BusMaterialbatchdemandplan::getDemandQuantity) .reduce(BigDecimal.ZERO, BigDecimal::add); // 检查总数量是否超出限制 - List busBillofquantities = busBillofquantitiesService.getBaseMapper().selectList(new LambdaQueryWrapper() - .eq(BusBillofquantities::getProjectId, dto.getMrpBaseBo().getProjectId()) - .eq(BusBillofquantities::getName, split[0]) - .eq(BusBillofquantities::getSpecification, split[1])); - BigDecimal quantity = busBillofquantities.stream() - .map(BusBillofquantities::getQuantity) + List busTenderPlanningLimitLists = tenderPlanningLimitListService.getBaseMapper() + .selectList(new LambdaQueryWrapper() + .eq(BusTenderPlanningLimitList::getLimitListId, biaoshi)); + BigDecimal quantity = busTenderPlanningLimitLists.stream() + .map(BusTenderPlanningLimitList::getNum) .filter(Objects::nonNull) .reduce(BigDecimal.ZERO, BigDecimal::add); if (existingSum.add(batchSum).compareTo(quantity) > 0) { // 找到超出限制的物料名称用于提示 String itemName = dto.getPlanList().stream() - .filter(item -> { - String name = item.getName() != null ? item.getName() : ""; - String spec = item.getSpecification() != null ? item.getSpecification() : ""; - return (name + "&&&" + spec).equals(biaoshi); - - }) + .filter(item -> Objects.equals(biaoshi, item.getSuppliespriceId())) .findFirst() .map(item -> { String name = item.getName() != null ? item.getName() : ""; - String spec = item.getSpecification() != null ? item.getSpecification() : ""; - return "名称:“"+name + "”,规格:“" + spec+"”"; + return "名称:“"+name + "”"; }) .orElse("未知物料"); throw new ServiceException(itemName + "超出数量"); @@ -257,11 +254,11 @@ public class BusMrpBaseServiceImpl extends ServiceImpl plans = MapstructUtils.convert(dto.getPlanList(), BusMaterialbatchdemandplan.class); plans.forEach(item -> { -// BusBillofquantities byId = busBillofquantitiesService.getById(item.getSuppliespriceId()); -// if (!"0".equals(byId.getPid())) { -// BusBillofquantities one = busBillofquantitiesService.getOne(new LambdaQueryWrapper().eq(BusBillofquantities::getSid, byId.getPid())); -// item.setSuppliespricePid(one.getId()); -// } + BusBillofquantitiesLimitList byId = busBillofquantitiesService.getById(item.getSuppliespriceId()); + if (!"0".equals(byId.getPid())) { + BusBillofquantitiesLimitList one = busBillofquantitiesService.getOne(new LambdaQueryWrapper().eq(BusBillofquantitiesLimitList::getSid, byId.getPid())); + item.setSuppliespricePid(one.getId()); + } item.setMrpBaseId(convert.getId()); item.setProjectId(convert.getProjectId()); }); @@ -297,23 +294,21 @@ public class BusMrpBaseServiceImpl extends ServiceImpl remaining(Long projectId, String suppliespriceName, String specification, Long mrpBaseId) { + public Map remaining(Long projectId, Long limitListId,Long mrpBaseId) { Map map = new HashMap<>(); - List busBillofquantities = busBillofquantitiesService.getBaseMapper() - .selectList(new LambdaQueryWrapper() - .eq(BusBillofquantities::getProjectId, projectId) - .eq(BusBillofquantities::getName, suppliespriceName) - .eq(BusBillofquantities::getSpecification,specification)); - BigDecimal quantity = busBillofquantities.stream() - .map(BusBillofquantities::getQuantity) + List busTenderPlanningLimitLists = tenderPlanningLimitListService.getBaseMapper() + .selectList(new LambdaQueryWrapper() + .eq(BusTenderPlanningLimitList::getLimitListId, limitListId)); + BigDecimal quantity = busTenderPlanningLimitLists.stream() + .map(BusTenderPlanningLimitList::getNum) .filter(Objects::nonNull) .reduce(BigDecimal.ZERO, BigDecimal::add); -// BusBillofquantities byId = busBillofquantitiesService.getById(suppliespriceId); + + BusBillofquantitiesLimitList busBillofquantities = busBillofquantitiesService.getById(limitListId); // 获取数据库中已有的数量 List existingList = planservice.list( Wrappers.lambdaQuery(BusMaterialbatchdemandplan.class) - .eq(BusMaterialbatchdemandplan::getName, suppliespriceName) - .eq(BusMaterialbatchdemandplan::getSpecification ,specification) + .eq(BusMaterialbatchdemandplan::getSuppliespriceId ,limitListId) .ne(mrpBaseId!=null,BusMaterialbatchdemandplan::getMrpBaseId, mrpBaseId)// 排除当前批次 ); BigDecimal reduce = BigDecimal.ZERO; @@ -323,10 +318,11 @@ public class BusMrpBaseServiceImpl extends ServiceImpl 0; if (flag) { bo.setId(add.getId()); @@ -204,20 +208,60 @@ public class BusPurchaseDocServiceImpl extends ServiceImpl associationList) { + public void validNum(List associationList, Long supplierId) { for (BusPlanDocAssociationBo association : associationList) { - + //获取批次需求计划 BusMaterialbatchdemandplan byId = materialbatchdemandplanService.getById(association.getPlanId()); - + List statuss = new ArrayList<>(); + statuss.add(BusinessStatusEnum.DRAFT.getStatus()); + statuss.add(BusinessStatusEnum.FINISH.getStatus()); + statuss.add(BusinessStatusEnum.WAITING.getStatus()); + //查询处于草稿、待审核、已审核状态的联系单 + List ids = new ArrayList<>(); + //该供应商的联系单 + List ids1 = new ArrayList<>(); + for (BusPurchaseDoc busPurchaseDoc : baseMapper.selectList(new LambdaQueryWrapper().in(BusPurchaseDoc::getStatus, statuss))) { + ids.add(busPurchaseDoc.getId()); + if (busPurchaseDoc.getSupplierId().equals(supplierId)) { + ids1.add(busPurchaseDoc.getId()); + } + } + List busTenderPlanningLimitLists = tenderPlanningLimitListService.getBaseMapper() + .selectList(new LambdaQueryWrapper() + .eq(BusTenderPlanningLimitList::getLimitListId, association.getSuppliespriceId())); + BigDecimal quantity = busTenderPlanningLimitLists.stream() + .map(BusTenderPlanningLimitList::getNum) + .filter(Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add); + //查询处于这些采购联系单 List list = planDocAssociationService.list(Wrappers.lambdaQuery(BusPlanDocAssociation.class) - .eq(BusPlanDocAssociation::getPlanId, association.getPlanId())); + .eq(BusPlanDocAssociation::getPlanId, association.getPlanId()) + .in(BusPlanDocAssociation::getDocId, ids)); + List busMaterialbatchdemandplans = materialbatchdemandplanService.getBaseMapper().selectList(new LambdaQueryWrapper() + .eq(BusMaterialbatchdemandplan::getSuppliespriceId, association.getSuppliespriceId())); + Set planids = new HashSet<>(); + busMaterialbatchdemandplans.forEach(busMaterialbatchdemandplan -> { + planids.add(busMaterialbatchdemandplan.getId()); + }); + if (!ids1.isEmpty()){ + List list1 = planDocAssociationService.list(Wrappers.lambdaQuery(BusPlanDocAssociation.class) + .in(BusPlanDocAssociation::getDocId, ids1)); + //计算材料已存在的数量 + BigDecimal cltotal = list1.stream() + .filter(Objects::nonNull) + .filter(item->planids.contains(item.getPlanId())) + .map(BusPlanDocAssociation::getDemandQuantity) + .reduce(BigDecimal.ZERO, BigDecimal::add); + if (cltotal.add(association.getDemandQuantity()).compareTo(quantity) > 0) { + throw new ServiceException("材料:" + byId.getName() + "已超出供应商提供数量"); + } + } + //计算采购已存在的数量 BigDecimal total = list.stream() .map(BusPlanDocAssociation::getDemandQuantity) .filter(Objects::nonNull) .reduce(BigDecimal.ZERO, BigDecimal::add); - - if (total.add(association.getDemandQuantity()).compareTo(byId.getDemandQuantity()) > 0) { throw new ServiceException("材料:" + byId.getName() + "已超出计划单的物料批次需求计划数量"); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/controller/BusTenderPlanLimitListController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/controller/BusTenderPlanLimitListController.java index 3a9e1d91..2f65f7d8 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/controller/BusTenderPlanLimitListController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/controller/BusTenderPlanLimitListController.java @@ -6,6 +6,7 @@ import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import lombok.RequiredArgsConstructor; import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; import org.dromara.common.core.validate.EditGroup; import org.dromara.common.excel.utils.ExcelUtil; import org.dromara.common.idempotent.annotation.RepeatSubmit; @@ -84,6 +85,15 @@ public class BusTenderPlanLimitListController extends BaseController { return R.ok(busBillofquantitiesLimitListService.sheetList(bo)); } + /** + * 获取指定版本的全部大类 + */ + @SaCheckPermission("tender:tenderPlanLimitList:pList") + @GetMapping("/pList") + public R> pList(BusBillofquantitiesLimitListBo bo) { + return R.ok(busBillofquantitiesLimitListService.pList(bo)); + } + /** * 导出限价一览列表 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/service/IBusBiddingPlanService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/service/IBusBiddingPlanService.java index 36c607ec..07d70864 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/service/IBusBiddingPlanService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/service/IBusBiddingPlanService.java @@ -1,20 +1,19 @@ package org.dromara.tender.service; import jakarta.validation.constraints.NotNull; -import org.dromara.tender.domain.vo.BusBiddingPlanAnnexVo; -import org.dromara.tender.domain.vo.BusBiddingPlanDetailVo; -import org.dromara.tender.domain.vo.BusBiddingPlanVo; +import org.dromara.tender.domain.vo.*; import org.dromara.tender.domain.bo.BusBiddingPlanBo; import org.dromara.tender.domain.BusBiddingPlan; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; import com.baomidou.mybatisplus.extension.service.IService; -import org.dromara.tender.domain.vo.BusBillofquantitiesLimitListVo; import org.springframework.web.multipart.MultipartFile; +import java.math.BigDecimal; import java.util.Collection; import java.util.List; +import java.util.Map; /** * 招标计划Service接口 @@ -106,4 +105,6 @@ public interface IBusBiddingPlanService extends IService{ * @return */ List getBillofquantitiesLimitListVo(BusBiddingPlanBo bo1); + + Map getCailiaoCount(BusBiddingPlanBo bo1); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/service/IBusBillofquantitiesLimitListService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/service/IBusBillofquantitiesLimitListService.java index 3881fafa..fbe2dead 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/service/IBusBillofquantitiesLimitListService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/service/IBusBillofquantitiesLimitListService.java @@ -112,4 +112,6 @@ public interface IBusBillofquantitiesLimitListService extends IService queryVoByIds(List ids); List queryVoList(BusBillofquantitiesLimitListBo bo); + + List pList(BusBillofquantitiesLimitListBo bo); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/service/impl/BusBiddingPlanServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/service/impl/BusBiddingPlanServiceImpl.java index 934a955c..caca0758 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/service/impl/BusBiddingPlanServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/service/impl/BusBiddingPlanServiceImpl.java @@ -17,9 +17,7 @@ import org.dromara.system.service.ISysOssService; import org.dromara.tender.domain.*; import org.dromara.tender.domain.bo.BusBiddingPlanAnnexBo; import org.dromara.tender.domain.bo.BusTenderPlanningLimitListBo; -import org.dromara.tender.domain.vo.BusBiddingPlanAnnexVo; -import org.dromara.tender.domain.vo.BusBiddingPlanDetailVo; -import org.dromara.tender.domain.vo.BusBillofquantitiesLimitListVo; +import org.dromara.tender.domain.vo.*; import org.dromara.tender.mapper.BusTenderPlanningLimitListMapper; import org.dromara.tender.service.IBusBiddingPlanAnnexService; import org.dromara.tender.service.IBusBillofquantitiesLimitListService; @@ -27,7 +25,6 @@ import org.dromara.tender.service.ITenderSupplierInputService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.dromara.tender.domain.bo.BusBiddingPlanBo; -import org.dromara.tender.domain.vo.BusBiddingPlanVo; import org.dromara.tender.mapper.BusBiddingPlanMapper; import org.dromara.tender.service.IBusBiddingPlanService; import org.springframework.transaction.annotation.Transactional; @@ -375,6 +372,30 @@ public class BusBiddingPlanServiceImpl extends ServiceImpl getCailiaoCount(BusBiddingPlanBo bo1) { + //查询属于该供应商的招标计划 + List busBiddingPlanVos = baseMapper.selectVoList(new LambdaQueryWrapper() + .eq(BusBiddingPlan::getProjectId, bo1.getProjectId()) + .eq(BusBiddingPlan::getWinningBidderId, bo1.getWinningBidderId()) + .eq(BusBiddingPlan::getBidStatus,"1")); + List bplanIdds = new ArrayList<>(); + for (BusBiddingPlanVo busBiddingPlanVo : busBiddingPlanVos) { + bplanIdds.add(busBiddingPlanVo.getId()); + } + Map map = new HashMap<>(); + //获取该供应商的所有材料 + List busTenderPlanningLimitLists = busTenderPlanningLimitListMapper.selectList(new LambdaQueryWrapper().in(BusTenderPlanningLimitList::getBiddingPlanId, bplanIdds)); + for (BusTenderPlanningLimitList v : busTenderPlanningLimitLists) { + if (!map.containsKey(v.getId())) { + map.put(v.getId(), v.getNum()); + }else { + map.put(v.getId(), map.get(v.getId()).add(v.getNum())); + } + } + return map; + } + /** * 递归构建树形结构 * @param parentId 父节点ID(顶级节点为0) diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/service/impl/BusBillofquantitiesLimitListServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/service/impl/BusBillofquantitiesLimitListServiceImpl.java index d6eec69a..bc9f8c9f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/service/impl/BusBillofquantitiesLimitListServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/tender/service/impl/BusBillofquantitiesLimitListServiceImpl.java @@ -14,6 +14,7 @@ import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.utils.BatchNumberGenerator; import org.dromara.common.utils.excel.ExcelDynamicReader; import org.dromara.tender.domain.BusBLimitListVersions; import org.dromara.tender.domain.BusBillofquantitiesLimitList; @@ -124,6 +125,9 @@ public class BusBillofquantitiesLimitListServiceImpl extends ServiceImpl 0; if (flag) { @@ -152,7 +156,14 @@ public class BusBillofquantitiesLimitListServiceImpl extends ServiceImpl 0)) { +// throw new ServiceException("数量只能增加不能减少"); +// } BusBillofquantitiesLimitList update = MapstructUtils.convert(bo, BusBillofquantitiesLimitList.class); if (bo.getUnitPrice() == null){ update.setUnitPrice(null); @@ -171,6 +182,19 @@ public class BusBillofquantitiesLimitListServiceImpl extends ServiceImpl() +// .eq(BusBillofquantitiesLimitList::getVersions,entity.getVersions()) +// .eq(BusBillofquantitiesLimitList::getName, entity.getName()) +// .eq(BusBillofquantitiesLimitList::getSpecification, entity.getSpecification()) +// .eq(BusBillofquantitiesLimitList::getUnit, entity.getUnit()) +// .eq(BusBillofquantitiesLimitList::getSupplier, entity.getSupplier()) +// .eq(BusBillofquantitiesLimitList::getContractNumber, entity.getContractNumber()) +// .eq(BusBillofquantitiesLimitList::getProjectId, entity.getProjectId()) +// .ne(entity.getId() != null, BusBillofquantitiesLimitList::getId, entity.getId())); +// if (count > 0) { +// throw new ServiceException("该名称-规格-单位-供应商-合同编号的数据以存在!!!"); +// } + } /** @@ -184,6 +208,17 @@ public class BusBillofquantitiesLimitListServiceImpl extends ServiceImpl ids, Boolean isValid) { if (isValid) { //TODO 做一些业务上的校验,判断是否需要校验 +// List listVoList = baseMapper.selectVoByIds(ids); +// Set vlist = new HashSet<>(); +// for (BusBillofquantitiesLimitListVo vo : listVoList) { +// vlist.add(vo.getVersions()); +// } +// for (String v : vlist) { +// BusBLimitListVersionsVo vo = busBLimitListVersionsService.queryByVersion(v); +// if (vo != null && !BusinessStatusEnum.DRAFT.getStatus().equals(vo.getStatus())) { +// throw new ServiceException("该版本已经进入审核不允许再删除"); +// } +// } } return baseMapper.deleteByIds(ids) > 0; } @@ -323,6 +358,16 @@ public class BusBillofquantitiesLimitListServiceImpl extends ServiceImpl pList(BusBillofquantitiesLimitListBo bo) { + List listVoList = baseMapper.selectVoList(new LambdaQueryWrapper() + .eq(BusBillofquantitiesLimitList::getPid, "0") + .eq(BusBillofquantitiesLimitList::getProjectId, bo.getProjectId()) + .eq(BusBillofquantitiesLimitList::getType, bo.getType()) + .eq(BusBillofquantitiesLimitList::getVersions, bo.getVersions())); + return listVoList; + } + /** * 递归构建树形结构 * diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/tender/BusBillofquantitiesLimitListMapper.xml b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/tender/BusBillofquantitiesLimitListMapper.xml index db67b9ba..39e8bb90 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/tender/BusBillofquantitiesLimitListMapper.xml +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/resources/mapper/tender/BusBillofquantitiesLimitListMapper.xml @@ -34,6 +34,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" WHEN #{item.id} THEN #{item.taxRate} ELSE tax_rate + END, + quantity = CASE id + + WHEN #{item.id} THEN #{item.quantity} + + ELSE quantity END WHERE id IN