diff --git a/xinnengyuan/ruoyi-admin/src/test/java/org/dromara/test/RecognizerTest.java b/xinnengyuan/ruoyi-admin/src/test/java/org/dromara/test/RecognizerTest.java index fb8215e6..819f5a30 100644 --- a/xinnengyuan/ruoyi-admin/src/test/java/org/dromara/test/RecognizerTest.java +++ b/xinnengyuan/ruoyi-admin/src/test/java/org/dromara/test/RecognizerTest.java @@ -23,7 +23,7 @@ public class RecognizerTest { @Test void test() { - RecognizeVo recognize = recognizerManager.recognize("http://xny.yj-3d.com:7363/file/tif/20250625160218orthophoto.png", List.of(RecognizerTypeEnum.PHO)); + RecognizeVo recognize = recognizerManager.recognize("http://xny.yj-3d.com:7363/file/tif/20250625160218orthophoto.png", List.of(RecognizerTypeEnum.SOLAR)); log.info("recognize: {}", recognize); } } 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/bigscreen/controller/ProjectBigScreenController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/ProjectBigScreenController.java index 1142ff37..d107ea42 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/ProjectBigScreenController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/ProjectBigScreenController.java @@ -2,14 +2,11 @@ package org.dromara.bigscreen.controller; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.hutool.core.collection.CollectionUtil; -import cn.hutool.json.JSONObject; -import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import jakarta.annotation.Resource; import jakarta.validation.constraints.NotNull; import lombok.RequiredArgsConstructor; -import org.dromara.bigscreen.domain.dto.WurenjiQueryReq; import org.dromara.bigscreen.domain.dto.Ys7DeviceUpdateReq; import org.dromara.bigscreen.domain.vo.ProjectImageProgressVo; import org.dromara.bigscreen.domain.vo.ProjectLandVo; @@ -22,12 +19,8 @@ import org.dromara.common.core.exception.ServiceException; import org.dromara.common.idempotent.annotation.RepeatSubmit; import org.dromara.common.log.annotation.Log; import org.dromara.common.log.enums.BusinessType; -import org.dromara.common.redis.utils.RedisUtils; import org.dromara.common.web.core.BaseController; -import org.dromara.drone.service.IDroProjectDroneService; import org.dromara.gps.domain.bo.GpsEquipmentBo; -import org.dromara.gps.domain.vo.GpsEquipmentSonVo; -import org.dromara.gps.service.IGpsEquipmentService; import org.dromara.land.domain.BusLandBlock; import org.dromara.land.domain.BusLandTransferLedger; import org.dromara.land.domain.BusLandTransferLedgerSon; @@ -54,10 +47,8 @@ import org.springframework.web.bind.annotation.*; import java.math.BigDecimal; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.function.Consumer; import java.util.stream.Collectors; /** @@ -103,10 +94,10 @@ public class ProjectBigScreenController extends BaseController { List levelList = busLandTransferLedgerService.list(Wrappers.lambdaQuery(BusLandTransferLedger.class) .eq(BusLandTransferLedger::getProjectId, projectId)); - if(CollectionUtil.isNotEmpty(levelList)){ + if (CollectionUtil.isNotEmpty(levelList)) { List list1 = levelList.stream().map(BusLandTransferLedger::getId).toList(); LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); - lambdaQueryWrapper.in(BusLandTransferLedgerSon::getParentId,list1); + lambdaQueryWrapper.in(BusLandTransferLedgerSon::getParentId, list1); List sonList = busLandTransferLedgerSonService.list(lambdaQueryWrapper); Map collect = sonList.stream().filter(vo -> "1".equals(vo.getTransferStatus())) .collect(Collectors.toMap(BusLandTransferLedgerSon::getParentId, BusLandTransferLedgerSon::getAreaValue)); @@ -283,8 +274,8 @@ public class ProjectBigScreenController extends BaseController { */ @SaCheckPermission("project:bigScreen:imageProgress") @GetMapping("/imageProgress/{projectId}") - public R getProjectImageProgress(@NotNull(message = "主键不能为空") - @PathVariable Long projectId) { + public R> getProjectImageProgress(@NotNull(message = "主键不能为空") + @PathVariable Long projectId) { return R.ok(projectBigScreenService.getProjectImageProgress(projectId)); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/domain/vo/ProjectImageProgressVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/domain/vo/ProjectImageProgressVo.java index 6eebaec5..63dafd57 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/domain/vo/ProjectImageProgressVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/domain/vo/ProjectImageProgressVo.java @@ -16,39 +16,49 @@ public class ProjectImageProgressVo implements Serializable { @Serial private static final long serialVersionUID = 7963637133004484891L; + /** + * 类别名称 + */ + private String progressName; + + /** + * 进度百分比 + */ + private BigDecimal progressTotal; + /** * 场区百分比 */ - private BigDecimal areaPercentage; +// private BigDecimal areaPercentage; /** * 道路百分比 */ - private BigDecimal roadPercentage; +// private BigDecimal roadPercentage; /** * 集电线路百分比 */ - private BigDecimal collectorLinePercentage; +// private BigDecimal collectorLinePercentage; /** * 送出线路百分比 */ - private BigDecimal exportLinePercentage; +// private BigDecimal exportLinePercentage; /** * 升压站百分比 */ - private BigDecimal substationPercentage; +// private BigDecimal substationPercentage; /** * 箱变百分比 */ - private BigDecimal boxTransformerPercentage; +// private BigDecimal boxTransformerPercentage; /** * 总百分比 */ - private BigDecimal totalPercentage; +// private BigDecimal totalPercentage; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/service/ProjectBigScreenService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/service/ProjectBigScreenService.java index 4ee8f7bc..0c5e64b3 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/service/ProjectBigScreenService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/service/ProjectBigScreenService.java @@ -1,11 +1,10 @@ package org.dromara.bigscreen.service; -import jakarta.validation.constraints.NotNull; import org.dromara.bigscreen.domain.vo.ProjectImageProgressVo; import org.dromara.bigscreen.domain.vo.ProjectPeopleVo; import org.dromara.bigscreen.domain.vo.ProjectSafetyInspectionVo; -import org.dromara.manager.weathermanager.vo.WeatherVo; import org.dromara.gps.domain.bo.GpsEquipmentBo; +import org.dromara.manager.weathermanager.vo.WeatherVo; import org.dromara.project.domain.vo.project.BusProjectSafetyDayVo; import org.dromara.project.domain.vo.projectnews.BusProjectNewsVo; @@ -64,7 +63,7 @@ public interface ProjectBigScreenService { * @param projectId 项目id * @return 项目形象进度 */ - ProjectImageProgressVo getProjectImageProgress(Long projectId); + List getProjectImageProgress(Long projectId); /** * 获取项目概括 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/service/impl/ProjectBigScreenServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/service/impl/ProjectBigScreenServiceImpl.java index fd7441cd..4a0ef7a9 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/service/impl/ProjectBigScreenServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/service/impl/ProjectBigScreenServiceImpl.java @@ -4,7 +4,6 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; import jakarta.annotation.Resource; import org.dromara.bigscreen.domain.vo.ProjectImageProgressVo; import org.dromara.bigscreen.domain.vo.ProjectPeopleVo; @@ -15,8 +14,6 @@ import org.dromara.common.core.constant.HttpStatus; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.redis.utils.RedisUtils; import org.dromara.common.utils.BigDecimalUtil; -import org.dromara.common.websocket.dto.WebSocketMessageDto; -import org.dromara.common.websocket.utils.WebSocketUtils; import org.dromara.contractor.domain.SubConstructionUser; import org.dromara.contractor.service.ISubConstructionUserService; import org.dromara.drone.service.IDroProjectDroneService; @@ -26,8 +23,8 @@ import org.dromara.gps.service.IGpsEquipmentService; import org.dromara.manager.weathermanager.vo.WeatherVo; import org.dromara.other.domain.OthYs7Device; import org.dromara.other.service.IOthYs7DeviceService; +import org.dromara.progress.constant.PgsProgressCategoryConstant; import org.dromara.progress.domain.PgsProgressCategory; -import org.dromara.progress.domain.enums.PgsProgressUnitTypeEnum; import org.dromara.progress.service.IPgsProgressCategoryService; import org.dromara.project.domain.BusProject; import org.dromara.project.domain.BusProjectTeam; @@ -37,16 +34,12 @@ import org.dromara.project.domain.vo.projectnews.BusProjectNewsVo; import org.dromara.project.service.*; import org.dromara.safety.domain.HseRecognizeRecord; import org.dromara.safety.service.IHseRecognizeRecordService; -import org.redisson.api.RTopic; -import org.redisson.api.RedissonClient; -import org.redisson.api.listener.MessageListener; import org.springframework.beans.BeanUtils; import org.springframework.context.annotation.Lazy; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; import java.math.BigDecimal; -import java.math.RoundingMode; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; @@ -241,9 +234,59 @@ public class ProjectBigScreenServiceImpl implements ProjectBigScreenService { * @return 项目形象进度 */ @Override - public ProjectImageProgressVo getProjectImageProgress(Long projectId) { + public List getProjectImageProgress(Long projectId) { checkProject(projectId); - ProjectImageProgressVo vo = new ProjectImageProgressVo(); + // 获取当前项目的所有子项目 + List projectIds = new ArrayList<>(projectService.lambdaQuery() + .select(BusProject::getId) + .eq(BusProject::getPId, projectId) + .list() + .stream() + .map(BusProject::getId) + .toList()); + projectIds.add(projectId); + // 查询该子项目下的顶级进度类别(父ID为0) + List list = progressCategoryService.lambdaQuery() + .in(PgsProgressCategory::getProjectId, projectIds) + .eq(PgsProgressCategory::getParentId, PgsProgressCategoryConstant.TOP_PARENT_ID) + .list(); + // 如果没有查询到顶级进度类别,直接返回空集合 + if (CollUtil.isEmpty(list)) { + return List.of(); + } + List topList = new ArrayList<>(); + // 获取这些顶级类别的所有子节点 + List ids = list.stream().map(PgsProgressCategory::getId).distinct().toList(); + List childrenNodes = progressCategoryService.getChildrenNodeByTopIds(ids); + if (CollUtil.isNotEmpty(list)) { + // 按名称分组(同名的放在一起) + Map> subMap = list.stream() + .collect(Collectors.groupingBy(PgsProgressCategory::getName)); + for (Map.Entry> entry : subMap.entrySet()) { + ProjectImageProgressVo topVo = new ProjectImageProgressVo(); + topVo.setProgressName(entry.getKey()); + List value = entry.getValue(); + // 获取这些类别下的所有叶子节点 + List topIds = value.stream().map(PgsProgressCategory::getId).distinct().toList(); + List leafNodesByTopIds = childrenNodes.stream() + .filter(node -> { + Set ancestorSet = Arrays.stream(node.getAncestors().split(",")) + .map(Long::parseLong) + .collect(Collectors.toSet()); + return topIds.stream().anyMatch(ancestorSet::contains); + }).toList(); + // 如果有叶子节点,统计进度和状态;否则初始化为未完成 + if (CollUtil.isNotEmpty(leafNodesByTopIds)) { + topVo.setProgressTotal(progressCategoryService.getCompletedPercentage(leafNodesByTopIds)); + } else { + topVo.setProgressTotal(BigDecimal.ZERO); + } + // 加入结果集 + topList.add(topVo); + } + } + return topList; +/* ProjectImageProgressVo vo = new ProjectImageProgressVo(); // 获取所有子项目列表 List subProjectList = projectService.lambdaQuery() .eq(BusProject::getPId, projectId) @@ -368,7 +411,7 @@ public class ProjectBigScreenServiceImpl implements ProjectBigScreenService { .add(vo.getBoxTransformerPercentage()) .divide(BigDecimal.valueOf(6), 2, RoundingMode.HALF_UP) // 保留两位小数 ); - return vo; + return vo;*/ } /** @@ -400,7 +443,7 @@ public class ProjectBigScreenServiceImpl implements ProjectBigScreenService { @Override public List getList(Long projectId) { - if (projectId == null){ + if (projectId == null) { throw new ServiceException("项目id不能为空!!!"); } Object object = RedisUtils.getCacheObject("xmjdp:" + projectId); @@ -414,10 +457,10 @@ public class ProjectBigScreenServiceImpl implements ProjectBigScreenService { @Override public void setList(GpsEquipmentBo bo) { - if (bo.getProjectId() == null){ + if (bo.getProjectId() == null) { throw new ServiceException("项目id不能为空!!!"); } - RedisUtils.setCacheObject("xmjdp:"+bo.getProjectId(), bo.getIdList()); + RedisUtils.setCacheObject("xmjdp:" + bo.getProjectId(), bo.getIdList()); } @Override @@ -427,8 +470,8 @@ public class ProjectBigScreenServiceImpl implements ProjectBigScreenService { // 获取当前时间 LocalDateTime now = LocalDateTime.now(); - List voList = gpsEquipmentService.getClientList(projectId,startOfDay,now); - List appList = gpsEquipmentService.getUserListByProjectId(projectId,startOfDay,now); + List voList = gpsEquipmentService.getClientList(projectId, startOfDay, now); + List appList = gpsEquipmentService.getUserListByProjectId(projectId, startOfDay, now); List othYs7DeviceList = othYs7DeviceService.lambdaQuery() .eq(OthYs7Device::getProjectId, projectId) .between(OthYs7Device::getUpdateTime, startOfDay, now) @@ -533,10 +576,10 @@ public class ProjectBigScreenServiceImpl implements ProjectBigScreenService { sxtMap1.put("children", sxtChildrenMap1); wrjMap.put("id", 3); wrjMap.put("label", "无人机"); - wrjMap.put("children",wrjChildrenMap); + wrjMap.put("children", wrjChildrenMap); wrjMap1.put("id", 8); wrjMap1.put("label", "无人机"); - wrjMap1.put("children",wrjChildrenMap1); + wrjMap1.put("children", wrjChildrenMap1); maps.add(gpsMap); 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/drone/domain/DroDroneConfig.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/drone/domain/DroDroneConfig.java index 56756388..6369cab4 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/drone/domain/DroDroneConfig.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/drone/domain/DroDroneConfig.java @@ -1,9 +1,10 @@ package org.dromara.drone.domain; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; +import org.dromara.common.mybatis.core.domain.BaseEntity; import java.io.Serial; @@ -27,11 +28,6 @@ public class DroDroneConfig extends BaseEntity { @TableId(value = "id") private Long id; - /** - * 项目id - */ - private Long projectId; - /** * 无人机服务地址 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/drone/domain/bo/DroDroneConfigBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/drone/domain/bo/DroDroneConfigBo.java index 0217970c..2c217418 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/drone/domain/bo/DroDroneConfigBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/drone/domain/bo/DroDroneConfigBo.java @@ -32,12 +32,6 @@ public class DroDroneConfigBo extends BaseEntity { @NotNull(message = "主键id不能为空", groups = {EditGroup.class}) private Long id; - /** - * 项目id - */ - @NotNull(message = "项目id不能为空", groups = {AddGroup.class, EditGroup.class}) - private Long projectId; - /** * 无人机服务地址 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/drone/service/impl/DroDroneConfigServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/drone/service/impl/DroDroneConfigServiceImpl.java index 898ded2a..05e98d37 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/drone/service/impl/DroDroneConfigServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/drone/service/impl/DroDroneConfigServiceImpl.java @@ -71,7 +71,6 @@ public class DroDroneConfigServiceImpl implements IDroDroneConfigService { Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.orderByAsc(DroDroneConfig::getId); - lqw.eq(bo.getProjectId() != null, DroDroneConfig::getProjectId, bo.getProjectId()); return lqw; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/controller/FacPhotovoltaicPanelController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/controller/FacPhotovoltaicPanelController.java index 974a7bf4..3d0ef26d 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/controller/FacPhotovoltaicPanelController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/controller/FacPhotovoltaicPanelController.java @@ -6,8 +6,6 @@ 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; import org.dromara.common.log.annotation.Log; @@ -79,7 +77,7 @@ public class FacPhotovoltaicPanelController extends BaseController { @Log(title = "设施-光伏板", businessType = BusinessType.INSERT) @RepeatSubmit() @PostMapping() - public R add(@Validated(AddGroup.class) @RequestBody FacPhotovoltaicPanelCreateReq req) { + public R add(@Validated @RequestBody FacPhotovoltaicPanelCreateReq req) { return R.ok(facPhotovoltaicPanelService.insertByBo(req)); } @@ -101,7 +99,7 @@ public class FacPhotovoltaicPanelController extends BaseController { @Log(title = "设施-光伏板", businessType = BusinessType.UPDATE) @RepeatSubmit() @PutMapping() - public R edit(@Validated(EditGroup.class) @RequestBody FacPhotovoltaicPanelUpdateReq req) { + public R edit(@Validated @RequestBody FacPhotovoltaicPanelUpdateReq req) { return toAjax(facPhotovoltaicPanelService.updateByBo(req)); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/dto/photovoltaicpanel/FacPhotovoltaicPanelCreateReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/dto/photovoltaicpanel/FacPhotovoltaicPanelCreateReq.java index 93108332..b85e6b3e 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/dto/photovoltaicpanel/FacPhotovoltaicPanelCreateReq.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/domain/dto/photovoltaicpanel/FacPhotovoltaicPanelCreateReq.java @@ -1,5 +1,7 @@ package org.dromara.facility.domain.dto.photovoltaicpanel; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; import lombok.Data; import java.io.Serial; @@ -26,9 +28,16 @@ public class FacPhotovoltaicPanelCreateReq implements Serializable { */ private Long matrixId; + /** + * 进度类别id + */ + @NotNull(message = "进度类别id不能为空") + private Long progressCategoryId; + /** * 光伏板名称 */ + @NotBlank(message = "光伏板名称不能为空") private String name; /** @@ -36,19 +45,4 @@ public class FacPhotovoltaicPanelCreateReq implements Serializable { */ private List> positionList; - /** - * 完成状态(0未开始 1进行中 2完成) - */ - private String status; - - /** - * 完成类型(1手动填报 2AI填报) - */ - private String finishType; - - /** - * 备注 - */ - private String remark; - } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/impl/FacPhotovoltaicPanelPartsServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/impl/FacPhotovoltaicPanelPartsServiceImpl.java index 49882c4a..ef869a68 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/impl/FacPhotovoltaicPanelPartsServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/impl/FacPhotovoltaicPanelPartsServiceImpl.java @@ -849,7 +849,7 @@ public class FacPhotovoltaicPanelPartsServiceImpl implements IFacPhotovoltaicPan photovoltaicPanelPointService.updateFinishNumberByCoordinate(projectIds, matchPoints); } else if (type.equals(RecognizerTypeEnum.PILE.getValue())) { photovoltaicPanelColumnService.updateFinishNumberByCoordinate(projectIds, matchPoints); - } else if (type.equals(RecognizerTypeEnum.SHELVES.getValue())) { + } else if (type.equals(RecognizerTypeEnum.BRACKET.getValue())) { photovoltaicPanelSupportService.updateFinishNumberByCoordinate(projectIds, matchPoints); } } @@ -880,7 +880,7 @@ public class FacPhotovoltaicPanelPartsServiceImpl implements IFacPhotovoltaicPan return list.stream().map(column -> new IdCoordinatePoint(column.getId(), column.getPositions())).toList(); } - } else if (type.equals(RecognizerTypeEnum.SHELVES.getValue())) { + } else if (type.equals(RecognizerTypeEnum.BRACKET.getValue())) { List list = photovoltaicPanelSupportService.lambdaQuery() .in(FacPhotovoltaicPanelSupport::getProjectId, projectIds) .ne(FacPhotovoltaicPanelSupport::getStatus, FacFinishStatusEnum.FINISH.getValue()) diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/impl/FacPhotovoltaicPanelServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/impl/FacPhotovoltaicPanelServiceImpl.java index 0d553e2d..49958449 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/impl/FacPhotovoltaicPanelServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/facility/service/impl/FacPhotovoltaicPanelServiceImpl.java @@ -23,10 +23,7 @@ import org.dromara.facility.constant.FacRedisKeyConstant; import org.dromara.facility.domain.FacMatrix; import org.dromara.facility.domain.FacPhotovoltaicPanel; import org.dromara.facility.domain.dto.geojson.*; -import org.dromara.facility.domain.dto.photovoltaicpanel.FacPhotovoltaicPanelCreateByGeoJsonReq; -import org.dromara.facility.domain.dto.photovoltaicpanel.FacPhotovoltaicPanelCreateReq; -import org.dromara.facility.domain.dto.photovoltaicpanel.FacPhotovoltaicPanelQueryReq; -import org.dromara.facility.domain.dto.photovoltaicpanel.FacPhotovoltaicPanelUpdateReq; +import org.dromara.facility.domain.dto.photovoltaicpanel.*; import org.dromara.facility.domain.enums.FacFinishStatusEnum; import org.dromara.facility.domain.enums.FacFinishTypeEnum; import org.dromara.facility.domain.vo.photovoltaicpanel.FacPhotovoltaicPanelVo; @@ -152,6 +149,7 @@ public class FacPhotovoltaicPanelServiceImpl extends ServiceImpl getInfo(@NotNull(message = "主键不能为空") - @PathVariable Long id) { + @PathVariable Long id) { return R.ok(outConstructionValueService.queryById(id)); } + /** + * 获取所有施工产值 + */ + @SaCheckPermission("out:constructionValue:query") + @GetMapping("/allValue") + public R getAllValue(OutConstructionValueBo bo) { + return R.ok(outConstructionValueService.getAllValue(bo)); + } + /** * 新增施工产值 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/controller/OutConstructionValueRangeController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/controller/OutConstructionValueRangeController.java index 97968352..d4c6b327 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/controller/OutConstructionValueRangeController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/controller/OutConstructionValueRangeController.java @@ -16,6 +16,7 @@ import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.web.core.BaseController; import org.dromara.out.domain.bo.OutConstructionValueRangeBo; +import org.dromara.out.domain.vo.OutConstructionAllValueRangeVo; import org.dromara.out.domain.vo.OutConstructionValueRangeVo; import org.dromara.out.service.IOutConstructionValueRangeService; import org.springframework.validation.annotation.Validated; @@ -81,6 +82,15 @@ public class OutConstructionValueRangeController extends BaseController { return R.ok(outConstructionValueRangeService.queryById(id, true)); } + /** + * 获取所有施工产值范围 + */ + @SaCheckPermission("out:constructionValueRange:query") + @GetMapping("/allValue") + public R getAllValue(OutConstructionValueRangeBo bo) { + return R.ok(outConstructionValueRangeService.getAllValue(bo)); + } + /** * 新增施工产值范围 diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/bo/OutConstructionValueBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/bo/OutConstructionValueBo.java index 8851b6d8..adceed0f 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/bo/OutConstructionValueBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/bo/OutConstructionValueBo.java @@ -1,13 +1,13 @@ package org.dromara.out.domain.bo; -import org.dromara.out.domain.OutConstructionValue; -import org.dromara.common.mybatis.core.domain.BaseEntity; -import org.dromara.common.core.validate.AddGroup; -import org.dromara.common.core.validate.EditGroup; import io.github.linpeilie.annotations.AutoMapper; +import jakarta.validation.constraints.NotNull; import lombok.Data; import lombok.EqualsAndHashCode; -import jakarta.validation.constraints.*; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.out.domain.OutConstructionValue; import java.math.BigDecimal; import java.time.LocalDate; @@ -26,7 +26,7 @@ public class OutConstructionValueBo extends BaseEntity { /** * 主键ID */ - @NotNull(message = "主键ID不能为空", groups = { EditGroup.class }) + @NotNull(message = "主键ID不能为空", groups = {EditGroup.class}) private Long id; /** @@ -37,7 +37,7 @@ public class OutConstructionValueBo extends BaseEntity { /** * 项目ID */ - @NotNull(message = "项目ID不能为空", groups = { AddGroup.class, EditGroup.class }) + @NotNull(message = "项目ID不能为空", groups = {AddGroup.class, EditGroup.class}) private Long projectId; /** @@ -53,13 +53,13 @@ public class OutConstructionValueBo extends BaseEntity { /** * 人工填报数量 */ - @NotNull(message = "人工填报数量不能为空", groups = { AddGroup.class, EditGroup.class }) + @NotNull(message = "人工填报数量不能为空", groups = {AddGroup.class, EditGroup.class}) private Integer artificialNum; /** * 无人机识别数量 */ - @NotNull(message = "无人机识别数量不能为空", groups = { AddGroup.class, EditGroup.class }) + @NotNull(message = "无人机识别数量不能为空", groups = {AddGroup.class, EditGroup.class}) private Integer uavNum; /** @@ -70,7 +70,7 @@ public class OutConstructionValueBo extends BaseEntity { /** * 确认数量 */ - @NotNull(message = "确认数量不能为空", groups = { AddGroup.class, EditGroup.class }) + @NotNull(message = "确认数量不能为空", groups = {AddGroup.class, EditGroup.class}) private Integer confirmNum; /** @@ -86,7 +86,7 @@ public class OutConstructionValueBo extends BaseEntity { /** * 上报日期 */ - @NotNull(message = "上报日期不能为空", groups = { AddGroup.class, EditGroup.class }) + @NotNull(message = "上报日期不能为空", groups = {AddGroup.class, EditGroup.class}) private LocalDate reportDate; /** @@ -94,5 +94,20 @@ public class OutConstructionValueBo extends BaseEntity { */ private String auditStatus; + /** + * 计量方式(0无 1数量 2百分比) + */ + private String unitType; + + /** + * 开始日期 + */ + private LocalDate startDate; + + /** + * 结束日期 + */ + private LocalDate endDate; + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/OutConstructionAllValueRangeVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/OutConstructionAllValueRangeVo.java new file mode 100644 index 00000000..256938fd --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/OutConstructionAllValueRangeVo.java @@ -0,0 +1,28 @@ +package org.dromara.out.domain.vo; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * @author lilemy + * @date 2025-10-11 15:10 + */ +@Data +public class OutConstructionAllValueRangeVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1258889254649279094L; + + /** + * 対乙产值 + */ + private BigDecimal outValue; + + /** + * 对甲产值 + */ + private BigDecimal ownerValue; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/OutConstructionAllValueVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/OutConstructionAllValueVo.java new file mode 100644 index 00000000..99e375f9 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/OutConstructionAllValueVo.java @@ -0,0 +1,28 @@ +package org.dromara.out.domain.vo; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * @author lilemy + * @date 2025-10-11 15:20 + */ +@Data +public class OutConstructionAllValueVo implements Serializable { + + @Serial + private static final long serialVersionUID = 250916682355050142L; + + /** + * 対乙产值 + */ + private BigDecimal outValue; + + /** + * 对甲产值 + */ + private BigDecimal ownerValue; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/IOutConstructionValueRangeService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/IOutConstructionValueRangeService.java index 0de70638..721900d9 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/IOutConstructionValueRangeService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/IOutConstructionValueRangeService.java @@ -5,6 +5,7 @@ import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.out.domain.OutConstructionValueRange; import org.dromara.out.domain.bo.OutConstructionValueRangeBo; +import org.dromara.out.domain.vo.OutConstructionAllValueRangeVo; import org.dromara.out.domain.vo.OutConstructionValueRangeVo; import java.util.Collection; @@ -68,4 +69,12 @@ public interface IOutConstructionValueRangeService extends IService ids, Boolean isValid); + + /** + * 获取所有施工范围产值 + * + * @param bo 查询条件 + * @return 所有施工范围产值 + */ + OutConstructionAllValueRangeVo getAllValue(OutConstructionValueRangeBo bo); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/IOutConstructionValueService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/IOutConstructionValueService.java index 4e2fabc7..35940fe4 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/IOutConstructionValueService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/IOutConstructionValueService.java @@ -1,12 +1,12 @@ package org.dromara.out.service; -import org.dromara.out.domain.vo.OutConstructionValueVo; -import org.dromara.out.domain.bo.OutConstructionValueBo; -import org.dromara.out.domain.OutConstructionValue; -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.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.out.domain.OutConstructionValue; +import org.dromara.out.domain.bo.OutConstructionValueBo; +import org.dromara.out.domain.vo.OutConstructionAllValueVo; +import org.dromara.out.domain.vo.OutConstructionValueVo; import java.math.BigDecimal; import java.util.Collection; @@ -18,7 +18,7 @@ import java.util.List; * @author Lion Li * @date 2025-07-30 */ -public interface IOutConstructionValueService extends IService{ +public interface IOutConstructionValueService extends IService { /** * 查询施工产值 @@ -77,5 +77,13 @@ public interface IOutConstructionValueService extends IService= date + if (bo.getStartDate() != null) { + // 获取本周的星期一 + LocalDate monday = bo.getStartDate().with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)); + lqw.ge(OutConstructionValueRange::getStartDate, monday); // 开始时间 <= date + } + if (bo.getEndDate() != null) { + // 获取本周的星期日 + LocalDate sunday = bo.getEndDate().with(TemporalAdjusters.nextOrSame(DayOfWeek.SUNDAY)); + lqw.le(OutConstructionValueRange::getEndDate, sunday); // 结束时间 >= date } lqw.eq(StringUtils.isNotBlank(bo.getAuditStatus()), OutConstructionValueRange::getAuditStatus, bo.getAuditStatus()); return lqw; @@ -162,6 +174,31 @@ public class OutConstructionValueRangeServiceImpl extends ServiceImpl 0; } + /** + * 获取所有施工范围产值 + * + * @param bo 查询条件 + * @return 所有施工范围产值 + */ + @Override + public OutConstructionAllValueRangeVo getAllValue(OutConstructionValueRangeBo bo) { + // 根据查询条件获取对应施工产值 + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + List list = baseMapper.selectVoList(lqw); + OutConstructionAllValueRangeVo vo = new OutConstructionAllValueRangeVo(); + // 统计对乙产值 + BigDecimal outValue = list.stream().map(OutConstructionValueRangeVo::getOutValue) + .reduce(BigDecimal.ZERO, BigDecimal::add) + .setScale(4, RoundingMode.HALF_UP); + vo.setOutValue(outValue); + // 统计对甲产值 + BigDecimal ownerValue = list.stream().map(OutConstructionValueRangeVo::getOwnerValue) + .reduce(BigDecimal.ZERO, BigDecimal::add) + .setScale(4, RoundingMode.HALF_UP); + vo.setOwnerValue(ownerValue); + return vo; + } + /** * 总体流程监听(例如: 草稿,撤销,退回,作废,终止,已完成,单任务完成等) * 正常使用只需#processEvent.flowCode=='leave1' diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutConstructionValueServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutConstructionValueServiceImpl.java index 11b03578..4532ad92 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutConstructionValueServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/service/impl/OutConstructionValueServiceImpl.java @@ -10,6 +10,7 @@ import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.constant.HttpStatus; 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.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.facility.domain.FacMatrix; @@ -17,13 +18,16 @@ import org.dromara.facility.service.IFacMatrixService; import org.dromara.out.domain.OutConstructionValue; import org.dromara.out.domain.OutConstructionValueRange; import org.dromara.out.domain.bo.OutConstructionValueBo; +import org.dromara.out.domain.vo.OutConstructionAllValueVo; import org.dromara.out.domain.vo.OutConstructionValueVo; import org.dromara.out.mapper.OutConstructionValueMapper; import org.dromara.out.service.IOutConstructionValueRangeService; import org.dromara.out.service.IOutConstructionValueService; import org.dromara.progress.domain.PgsProgressCategory; +import org.dromara.progress.domain.dto.progressplandetail.PgsProgressPlanDetailCreateReq; import org.dromara.progress.domain.vo.progresscategory.PgsProgressCategoryVo; import org.dromara.progress.service.IPgsProgressCategoryService; +import org.dromara.progress.service.IPgsProgressPlanDetailService; import org.dromara.project.domain.BusProject; import org.dromara.project.domain.vo.project.BusProjectVo; import org.dromara.project.service.IBusProjectService; @@ -31,10 +35,7 @@ import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.math.RoundingMode; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Map; +import java.util.*; /** * 施工产值Service业务层处理 @@ -54,6 +55,8 @@ public class OutConstructionValueServiceImpl extends ServiceImpl lqw = Wrappers.lambdaQuery(); lqw.orderByDesc(OutConstructionValue::getId); Long projectId = bo.getProjectId(); + List ids = new ArrayList<>(); if (projectId != null) { // 获取子项目列表 List subProjectIds = projectService.lambdaQuery() .eq(BusProject::getPId, projectId) .list(); - if (CollUtil.isNotEmpty(subProjectIds)) { - List ids = new ArrayList<>(subProjectIds.stream().map(BusProject::getId).toList()); - ids.add(projectId); - lqw.in(OutConstructionValue::getProjectId, ids); - } else { - lqw.eq(OutConstructionValue::getProjectId, projectId); - } + ids = new ArrayList<>(subProjectIds.stream().map(BusProject::getId).toList()); + ids.add(projectId); + } + if (CollUtil.isNotEmpty(ids)) { + lqw.in(OutConstructionValue::getProjectId, ids); } lqw.eq(bo.getMatrixId() != null, OutConstructionValue::getMatrixId, bo.getMatrixId()); lqw.eq(bo.getRangeId() != null, OutConstructionValue::getRangeId, bo.getRangeId()); @@ -126,7 +128,24 @@ public class OutConstructionValueServiceImpl extends ServiceImpl categoryLqw = new LambdaQueryWrapper<>(); + categoryLqw.select(PgsProgressCategory::getId); + categoryLqw.eq(PgsProgressCategory::getUnitType, bo.getUnitType()); + categoryLqw.eq(bo.getMatrixId() != null, PgsProgressCategory::getMatrixId, bo.getMatrixId()); + if (CollUtil.isNotEmpty(ids)) { + categoryLqw.in(PgsProgressCategory::getProjectId, ids); + } + List progressCategories = pgsProgressCategoryService.list(categoryLqw); + if (CollUtil.isNotEmpty(progressCategories)) { + List categoryIds = progressCategories.stream().map(PgsProgressCategory::getId).toList(); + lqw.in(OutConstructionValue::getProgressCategoryId, categoryIds); + } + } return lqw; } @@ -169,20 +188,27 @@ public class OutConstructionValueServiceImpl extends ServiceImpl 0; } @@ -223,6 +249,31 @@ public class OutConstructionValueServiceImpl extends ServiceImpl lqw = buildQueryWrapper(bo); + List list = baseMapper.selectVoList(lqw); + OutConstructionAllValueVo vo = new OutConstructionAllValueVo(); + // 统计对乙产值 + BigDecimal outValue = list.stream().map(OutConstructionValueVo::getOutValue) + .reduce(BigDecimal.ZERO, BigDecimal::add) + .setScale(4, RoundingMode.HALF_UP); + vo.setOutValue(outValue); + // 统计对甲产值 + BigDecimal ownerValue = list.stream().map(OutConstructionValueVo::getOwnerValue) + .reduce(BigDecimal.ZERO, BigDecimal::add) + .setScale(4, RoundingMode.HALF_UP); + vo.setOwnerValue(ownerValue); + return vo; + } + /** * 补充数据 */ @@ -230,7 +281,7 @@ public class OutConstructionValueServiceImpl extends ServiceImpl insertFacility(@Validated @RequestBody PgsProgressCategoryCreateFacilityReq req) { + return toAjax(pgsProgressCategoryService.insertFacility(req)); + } + + /** + * 批量新增设施进度类别 + */ + @SaCheckPermission("progress:progressCategory:add") + @Log(title = "进度类别", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping("/batch/facility") + public R insertFacility(@Validated @RequestBody PgsProgressCategoryCreateBatchFacilityReq req) { + return toAjax(pgsProgressCategoryService.insertBatchFacility(req)); + } + /** * 修改进度类别 */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/controller/PgsProgressPlanDetailController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/controller/PgsProgressPlanDetailController.java index 904dfedb..74fc8b0b 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/controller/PgsProgressPlanDetailController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/controller/PgsProgressPlanDetailController.java @@ -56,7 +56,7 @@ public class PgsProgressPlanDetailController extends BaseController { @RepeatSubmit() @PostMapping("/insert/percentage") public R insertPercentageDetail(@Validated @RequestBody PgsProgressPlanDetailCreateReq req) { - return toAjax(pgsProgressPlanDetailService.insertPercentageNumberDetail(req)); + return toAjax(pgsProgressPlanDetailService.insertPercentageNumberDetail(req, true)); } /** diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/controller/app/PgsProgressPlanDetailAppController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/controller/app/PgsProgressPlanDetailAppController.java index 70c4bec6..d4c193f2 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/controller/app/PgsProgressPlanDetailAppController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/controller/app/PgsProgressPlanDetailAppController.java @@ -57,7 +57,7 @@ public class PgsProgressPlanDetailAppController extends BaseController { @RepeatSubmit() @PostMapping("/insert") public R insertDetail(@Validated @RequestBody PgsProgressPlanDetailCreateReq req) { - return toAjax(progressPlanDetailService.insertPercentageNumberDetail(req)); + return toAjax(progressPlanDetailService.insertPercentageNumberDetail(req, true)); } /** diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progresscategory/PgsProgressCategoryCreateBatchFacilityReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progresscategory/PgsProgressCategoryCreateBatchFacilityReq.java new file mode 100644 index 00000000..0aaa2e4e --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progresscategory/PgsProgressCategoryCreateBatchFacilityReq.java @@ -0,0 +1,32 @@ +package org.dromara.progress.domain.dto.progresscategory; + +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author lilemy + * @date 2025-10-11 14:25 + */ +@Data +public class PgsProgressCategoryCreateBatchFacilityReq implements Serializable { + + @Serial + private static final long serialVersionUID = -1134967798239895738L; + + /** + * 进度类别id + */ + @NotNull(message = "进度类别id不能为空") + private Long progressCategoryId; + + /** + * 设施数量 + */ + @NotNull(message = "设施数量不能为空") + @Min(value = 1, message = "设施数量不能小于1") + private Integer number; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progresscategory/PgsProgressCategoryCreateFacilityReq.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progresscategory/PgsProgressCategoryCreateFacilityReq.java new file mode 100644 index 00000000..01963974 --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progresscategory/PgsProgressCategoryCreateFacilityReq.java @@ -0,0 +1,31 @@ +package org.dromara.progress.domain.dto.progresscategory; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; + +/** + * @author lilemy + * @date 2025-10-11 11:32 + */ +@Data +public class PgsProgressCategoryCreateFacilityReq implements Serializable { + + @Serial + private static final long serialVersionUID = -89082568070992741L; + + /** + * 进度类别id + */ + @NotNull(message = "进度类别id不能为空") + private Long progressCategoryId; + + /** + * 设施名称 + */ + @NotBlank(message = "设施名称不能为空") + private String name; +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/IPgsProgressCategoryService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/IPgsProgressCategoryService.java index 3fcbc374..583396e3 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/IPgsProgressCategoryService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/IPgsProgressCategoryService.java @@ -196,4 +196,20 @@ public interface IPgsProgressCategoryService extends IService { + // 获取当天已创建的设施数量 + Long count = photovoltaicPanelService.lambdaQuery() + .eq(FacPhotovoltaicPanel::getProjectId, projectId) + .eq(FacPhotovoltaicPanel::getMatrixId, matrixId) + .eq(FacPhotovoltaicPanel::getProgressCategoryId, progressCategoryId) + .likeRight(FacPhotovoltaicPanel::getName, formattedDate) + .count(); + // 封装数据 + FacPhotovoltaicPanel panel = new FacPhotovoltaicPanel(); + panel.setProjectId(projectId); + panel.setMatrixId(matrixId); + panel.setName(formattedDate + "." + (count + 1)); + panel.setProgressCategoryId(progressCategoryId); + panel.setProgressCategoryName(name); + panel.setRemark("手动添加"); + isSave = photovoltaicPanelService.save(panel); + } + case PgsProgressCategoryConstant.INVERTER_WORK_TYPE -> { + // 获取当天已创建的设施数量 + Long count = inverterService.lambdaQuery() + .eq(FacInverter::getProjectId, projectId) + .eq(FacInverter::getMatrixId, matrixId) + .eq(FacInverter::getProgressCategoryId, progressCategoryId) + .likeRight(FacInverter::getName, formattedDate) + .count(); + // 封装数据 + FacInverter inverter = new FacInverter(); + inverter.setProjectId(projectId); + inverter.setMatrixId(matrixId); + inverter.setName(formattedDate + "." + (count + 1)); + inverter.setProgressCategoryId(progressCategoryId); + inverter.setProgressCategoryName(name); + inverter.setRemark("手动添加"); + isSave = inverterService.save(inverter); + } + case PgsProgressCategoryConstant.BOX_TRANSFORMER_WORK_TYPE -> { + // 获取当天已创建的设施数量 + Long count = boxTransformerService.lambdaQuery() + .eq(FacBoxTransformer::getProjectId, projectId) + .eq(FacBoxTransformer::getMatrixId, matrixId) + .eq(FacBoxTransformer::getProgressCategoryId, progressCategoryId) + .likeRight(FacBoxTransformer::getName, formattedDate) + .count(); + // 封装数据 + FacBoxTransformer boxTransformer = new FacBoxTransformer(); + boxTransformer.setProjectId(projectId); + boxTransformer.setMatrixId(matrixId); + boxTransformer.setName(formattedDate + "." + (count + 1)); + boxTransformer.setProgressCategoryId(progressCategoryId); + boxTransformer.setProgressCategoryName(name); + boxTransformer.setRemark("手动添加"); + isSave = boxTransformerService.save(boxTransformer); + } + case PgsProgressCategoryConstant.PHOTOVOLTAIC_PANEL_POINT_WORK_TYPE -> { + // 获取当天已创建的设施数量 + Long count = photovoltaicPanelPointService.lambdaQuery() + .eq(FacPhotovoltaicPanelPoint::getProjectId, projectId) + .eq(FacPhotovoltaicPanelPoint::getMatrixId, matrixId) + .eq(FacPhotovoltaicPanelPoint::getProgressCategoryId, progressCategoryId) + .likeRight(FacPhotovoltaicPanelPoint::getName, formattedDate) + .count(); + // 封装数据 + FacPhotovoltaicPanelPoint point = new FacPhotovoltaicPanelPoint(); + point.setProjectId(projectId); + point.setMatrixId(matrixId); + point.setName(formattedDate + "." + (count + 1)); + point.setProgressCategoryId(progressCategoryId); + point.setProgressCategoryName(name); + point.setRemark("手动添加"); + isSave = photovoltaicPanelPointService.save(point); + } + case PgsProgressCategoryConstant.PHOTOVOLTAIC_PANEL_COLUMN_WORK_TYPE -> { + // 获取当天已创建的设施数量 + Long count = photovoltaicPanelColumnService.lambdaQuery() + .eq(FacPhotovoltaicPanelColumn::getProjectId, projectId) + .eq(FacPhotovoltaicPanelColumn::getMatrixId, matrixId) + .eq(FacPhotovoltaicPanelColumn::getProgressCategoryId, progressCategoryId) + .likeRight(FacPhotovoltaicPanelColumn::getName, formattedDate) + .count(); + // 封装数据 + FacPhotovoltaicPanelColumn column = new FacPhotovoltaicPanelColumn(); + column.setProjectId(projectId); + column.setMatrixId(matrixId); + column.setName(formattedDate + "." + (count + 1)); + column.setProgressCategoryId(progressCategoryId); + column.setProgressCategoryName(name); + column.setRemark("手动添加"); + isSave = photovoltaicPanelColumnService.save(column); + } + case PgsProgressCategoryConstant.PHOTOVOLTAIC_PANEL_SUPPORT_WORK_TYPE -> { + // 获取当天已创建的设施数量 + Long count = photovoltaicPanelSupportService.lambdaQuery() + .eq(FacPhotovoltaicPanelSupport::getProjectId, projectId) + .eq(FacPhotovoltaicPanelSupport::getMatrixId, matrixId) + .eq(FacPhotovoltaicPanelSupport::getProgressCategoryId, progressCategoryId) + .likeRight(FacPhotovoltaicPanelSupport::getName, formattedDate) + .count(); + // 封装数据 + FacPhotovoltaicPanelSupport support = new FacPhotovoltaicPanelSupport(); + support.setProjectId(projectId); + support.setMatrixId(matrixId); + support.setName(formattedDate + "." + (count + 1)); + support.setProgressCategoryId(progressCategoryId); + support.setProgressCategoryName(name); + support.setRemark("手动添加"); + isSave = photovoltaicPanelSupportService.save(support); + } + case null, default -> throw new ServiceException("不支持的设施类型", HttpStatus.BAD_REQUEST); + } + if (!isSave) { + throw new ServiceException("添加设施失败,数据库异常", HttpStatus.ERROR); + } + // 更新进度类别数量 + PgsProgressCategory updateCategory = new PgsProgressCategory(); + updateCategory.setId(progressCategoryId); + updateCategory.setTotal(category.getTotal().add(BigDecimal.ONE)); + boolean update = this.updateById(updateCategory); + if (!update) { + throw new ServiceException("修改进度类别数量失败,数据库异常", HttpStatus.ERROR); + } + return true; + } + + /** + * 批量新增设施批量 + * + * @param req 设施信息 + * @return 是否新增成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertBatchFacility(PgsProgressCategoryCreateBatchFacilityReq req) { + Long progressCategoryId = req.getProgressCategoryId(); + Integer number = req.getNumber(); + PgsProgressCategory category = this.getById(progressCategoryId); + if (category == null) { + throw new ServiceException("对应进度类别不存在", HttpStatus.NOT_FOUND); + } + // 根据类别,新增对应的设施 + String workType = category.getWorkType(); + String type = workType.split("_")[0]; + // 获取当前日期 + LocalDate today = LocalDate.now(); + // 定义格式化器:yyyyMMdd + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd"); + // 格式化日期 + String formattedDate = today.format(formatter); + Long projectId = category.getProjectId(); + Long matrixId = category.getMatrixId(); + String name = category.getName(); + switch (type) { + case PgsProgressCategoryConstant.PHOTOVOLTAIC_PANEL_WORK_TYPE -> { + // 获取当天已创建的设施数量 + Long count = photovoltaicPanelService.lambdaQuery() + .eq(FacPhotovoltaicPanel::getProjectId, projectId) + .eq(FacPhotovoltaicPanel::getMatrixId, matrixId) + .eq(FacPhotovoltaicPanel::getProgressCategoryId, progressCategoryId) + .likeRight(FacPhotovoltaicPanel::getName, formattedDate) + .count(); + // 封装数据 + List newList = new ArrayList<>(); + for (int i = 1; i <= number; i++) { + FacPhotovoltaicPanel panel = new FacPhotovoltaicPanel(); + panel.setProjectId(projectId); + panel.setMatrixId(matrixId); + panel.setName(formattedDate + "." + (count + i)); + panel.setProgressCategoryId(progressCategoryId); + panel.setProgressCategoryName(name); + panel.setRemark("手动添加"); + newList.add(panel); + } + photovoltaicPanelService.saveBatch(newList); + } + case PgsProgressCategoryConstant.INVERTER_WORK_TYPE -> { + // 获取当天已创建的设施数量 + Long count = inverterService.lambdaQuery() + .eq(FacInverter::getProjectId, projectId) + .eq(FacInverter::getMatrixId, matrixId) + .eq(FacInverter::getProgressCategoryId, progressCategoryId) + .likeRight(FacInverter::getName, formattedDate) + .count(); + // 封装数据 + List newList = new ArrayList<>(); + for (int i = 1; i <= number; i++) { + FacInverter inverter = new FacInverter(); + inverter.setProjectId(projectId); + inverter.setMatrixId(matrixId); + inverter.setName(formattedDate + "." + (count + i)); + inverter.setProgressCategoryId(progressCategoryId); + inverter.setProgressCategoryName(name); + inverter.setRemark("手动添加"); + newList.add(inverter); + } + inverterService.saveBatch(newList); + } + case PgsProgressCategoryConstant.BOX_TRANSFORMER_WORK_TYPE -> { + // 获取当天已创建的设施数量 + Long count = boxTransformerService.lambdaQuery() + .eq(FacBoxTransformer::getProjectId, projectId) + .eq(FacBoxTransformer::getMatrixId, matrixId) + .eq(FacBoxTransformer::getProgressCategoryId, progressCategoryId) + .likeRight(FacBoxTransformer::getName, formattedDate) + .count(); + // 封装数据 + List newList = new ArrayList<>(); + for (int i = 1; i <= number; i++) { + FacBoxTransformer boxTransformer = new FacBoxTransformer(); + boxTransformer.setProjectId(projectId); + boxTransformer.setMatrixId(matrixId); + boxTransformer.setName(formattedDate + "." + (count + i)); + boxTransformer.setProgressCategoryId(progressCategoryId); + boxTransformer.setProgressCategoryName(name); + boxTransformer.setRemark("手动添加"); + newList.add(boxTransformer); + } + boxTransformerService.saveBatch(newList); + } + case PgsProgressCategoryConstant.PHOTOVOLTAIC_PANEL_POINT_WORK_TYPE -> { + // 获取当天已创建的设施数量 + Long count = photovoltaicPanelPointService.lambdaQuery() + .eq(FacPhotovoltaicPanelPoint::getProjectId, projectId) + .eq(FacPhotovoltaicPanelPoint::getMatrixId, matrixId) + .eq(FacPhotovoltaicPanelPoint::getProgressCategoryId, progressCategoryId) + .likeRight(FacPhotovoltaicPanelPoint::getName, formattedDate) + .count(); + // 封装数据 + List newList = new ArrayList<>(); + for (int i = 1; i <= number; i++) { + FacPhotovoltaicPanelPoint point = new FacPhotovoltaicPanelPoint(); + point.setProjectId(projectId); + point.setMatrixId(matrixId); + point.setName(formattedDate + "." + (count + i)); + point.setProgressCategoryId(progressCategoryId); + point.setProgressCategoryName(name); + point.setRemark("手动添加"); + newList.add(point); + } + photovoltaicPanelPointService.saveBatch(newList); + } + case PgsProgressCategoryConstant.PHOTOVOLTAIC_PANEL_COLUMN_WORK_TYPE -> { + // 获取当天已创建的设施数量 + Long count = photovoltaicPanelColumnService.lambdaQuery() + .eq(FacPhotovoltaicPanelColumn::getProjectId, projectId) + .eq(FacPhotovoltaicPanelColumn::getMatrixId, matrixId) + .eq(FacPhotovoltaicPanelColumn::getProgressCategoryId, progressCategoryId) + .likeRight(FacPhotovoltaicPanelColumn::getName, formattedDate) + .count(); + // 封装数据 + List newList = new ArrayList<>(); + for (int i = 1; i <= number; i++) { + FacPhotovoltaicPanelColumn column = new FacPhotovoltaicPanelColumn(); + column.setProjectId(projectId); + column.setMatrixId(matrixId); + column.setName(formattedDate + "." + (count + i)); + column.setProgressCategoryId(progressCategoryId); + column.setProgressCategoryName(name); + column.setRemark("手动添加"); + newList.add(column); + } + photovoltaicPanelColumnService.saveBatch(newList); + } + case PgsProgressCategoryConstant.PHOTOVOLTAIC_PANEL_SUPPORT_WORK_TYPE -> { + // 获取当天已创建的设施数量 + Long count = photovoltaicPanelSupportService.lambdaQuery() + .eq(FacPhotovoltaicPanelSupport::getProjectId, projectId) + .eq(FacPhotovoltaicPanelSupport::getMatrixId, matrixId) + .eq(FacPhotovoltaicPanelSupport::getProgressCategoryId, progressCategoryId) + .likeRight(FacPhotovoltaicPanelSupport::getName, formattedDate) + .count(); + // 封装数据 + List newList = new ArrayList<>(); + for (int i = 1; i <= number; i++) { + FacPhotovoltaicPanelSupport support = new FacPhotovoltaicPanelSupport(); + support.setProjectId(projectId); + support.setMatrixId(matrixId); + support.setName(formattedDate + "." + (count + i)); + support.setProgressCategoryId(progressCategoryId); + support.setProgressCategoryName(name); + support.setRemark("手动添加"); + newList.add(support); + } + photovoltaicPanelSupportService.saveBatch(newList); + } + case null, default -> throw new ServiceException("不支持的设施类型", HttpStatus.BAD_REQUEST); + } + // 更新进度类别数量 + PgsProgressCategory updateCategory = new PgsProgressCategory(); + updateCategory.setId(progressCategoryId); + updateCategory.setTotal(category.getTotal().add(BigDecimal.valueOf(number))); + boolean update = this.updateById(updateCategory); + if (!update) { + throw new ServiceException("修改进度类别数量失败,数据库异常", HttpStatus.ERROR); + } + return true; + } + } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressPlanDetailServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressPlanDetailServiceImpl.java index 28a2d700..bd091c4a 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressPlanDetailServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/service/impl/PgsProgressPlanDetailServiceImpl.java @@ -116,6 +116,7 @@ public class PgsProgressPlanDetailServiceImpl extends ServiceImpl projectIds = planDetailList.stream() - .map(PgsProgressPlanDetail::getProjectId).collect(Collectors.toSet()); + .map(PgsProgressPlanDetail::getProjectId) + .collect(Collectors.toSet()); // 获取所有父级项目 List projectList = projectService.listByIds(projectIds); List allProjectIds = projectList @@ -934,8 +936,8 @@ public class PgsProgressPlanDetailServiceImpl extends ServiceImpl subProject = new ArrayList<>(projectList.stream() .filter(project -> Objects.equals(project.getPId(), id)) @@ -1139,8 +1141,8 @@ public class PgsProgressPlanDetailServiceImpl extends ServiceImpl projectIds = projects.stream().map(BusProject::getId).distinct().toList(); // 识别类型:洞、桩、架、架子 - List enumList = List.of(RecognizerTypeEnum.HOLE, RecognizerTypeEnum.PHO, - RecognizerTypeEnum.PILE, RecognizerTypeEnum.SHELVES); + List enumList = List.of(RecognizerTypeEnum.HOLE, RecognizerTypeEnum.SOLAR, + RecognizerTypeEnum.PILE, RecognizerTypeEnum.BRACKET); // 调用识别算法 RecognizeVo recognizeVo = null; try { @@ -1177,11 +1179,11 @@ public class PgsProgressPlanDetailServiceImpl extends ServiceImpl inspection.getIsReply().equals("2")) - .toList() - .size(); - int correctSituationCount = safetyInspectionList.stream() - .filter(inspection -> inspection.getIsReply().equals("1") && !inspection.getStatus().equals("1")) - .toList() - .size(); gisVo.setTeamMeetingCount((long) teamMeetings.size()); - gisVo.setSafetyInspectionCount((long) safetyInspectionCount); - gisVo.setCorrectSituationCount((long) correctSituationCount); - gisVo.setCorrectSituation(String.format("%.2f", correctSituationCount * 100.0 / safetyInspectionCount)); + gisVo.setSafetyInspectionCount((long) safetyInspectionList.size()); + gisVo.setCorrectSituationCount(passCount); + gisVo.setCorrectSituation(String.format("%.2f", passCount * 100.0 / safetyInspectionList.size())); return gisVo; } 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