From 4dca396d11df9b6e60db90baacd4966e66925e31 Mon Sep 17 00:00:00 2001 From: lcj <2331845269@qq.com> Date: Sun, 12 Oct 2025 14:16:05 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=9B=E5=BA=A6=E8=AE=A1=E5=88=92=EF=BC=8C?= =?UTF-8?q?=E6=96=BD=E5=B7=A5=E4=BA=A7=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/dromara/test/RecognizerTest.java | 2 +- .../ProjectBigScreenController.java | 17 +- .../domain/vo/ProjectImageProgressVo.java | 24 +- .../service/ProjectBigScreenService.java | 5 +- .../impl/ProjectBigScreenServiceImpl.java | 79 ++++- .../dromara/drone/domain/DroDroneConfig.java | 10 +- .../drone/domain/bo/DroDroneConfigBo.java | 6 - .../impl/DroDroneConfigServiceImpl.java | 1 - .../FacPhotovoltaicPanelController.java | 6 +- .../FacPhotovoltaicPanelCreateReq.java | 24 +- .../FacPhotovoltaicPanelPartsServiceImpl.java | 4 +- .../impl/FacPhotovoltaicPanelServiceImpl.java | 47 +-- .../enums/RecognizerTypeEnum.java | 5 +- .../OutConstructionValueController.java | 43 ++- .../OutConstructionValueRangeController.java | 10 + .../out/domain/bo/OutConstructionValueBo.java | 37 +- .../vo/OutConstructionAllValueRangeVo.java | 28 ++ .../domain/vo/OutConstructionAllValueVo.java | 28 ++ .../IOutConstructionValueRangeService.java | 9 + .../service/IOutConstructionValueService.java | 24 +- .../OutConstructionValueRangeServiceImpl.java | 43 ++- .../impl/OutConstructionValueServiceImpl.java | 99 ++++-- .../PgsProgressCategoryController.java | 22 ++ .../PgsProgressPlanDetailController.java | 2 +- .../PgsProgressPlanDetailAppController.java | 2 +- ...rogressCategoryCreateBatchFacilityReq.java | 32 ++ .../PgsProgressCategoryCreateFacilityReq.java | 31 ++ .../service/IPgsProgressCategoryService.java | 16 + .../IPgsProgressPlanDetailService.java | 2 +- .../impl/PgsProgressCategoryServiceImpl.java | 326 ++++++++++++++++++ .../PgsProgressPlanDetailServiceImpl.java | 20 +- .../impl/PgsProgressPlanServiceImpl.java | 11 +- .../impl/QltQualityInspectionServiceImpl.java | 16 +- .../impl/HseRecognizeRecordServiceImpl.java | 12 +- .../impl/HseSafetyInspectionServiceImpl.java | 22 +- 35 files changed, 856 insertions(+), 209 deletions(-) create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/OutConstructionAllValueRangeVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/out/domain/vo/OutConstructionAllValueVo.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progresscategory/PgsProgressCategoryCreateBatchFacilityReq.java create mode 100644 xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/progress/domain/dto/progresscategory/PgsProgressCategoryCreateFacilityReq.java 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-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/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; }