diff --git a/xinnengyuan/ruoyi-admin/src/main/resources/application-prod.yml b/xinnengyuan/ruoyi-admin/src/main/resources/application-prod.yml index f364ac33..89b5243e 100644 --- a/xinnengyuan/ruoyi-admin/src/main/resources/application-prod.yml +++ b/xinnengyuan/ruoyi-admin/src/main/resources/application-prod.yml @@ -55,6 +55,14 @@ spring: url: jdbc:mysql://192.168.110.2:13386/xinnengyuan?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true username: xinnengyuan password: mEZPC5Sdf3r2HENi + # 从库数据源 + slave: + lazy: true + type: ${spring.datasource.type} + driverClassName: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://192.168.110.2:13386/zmkgc?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true + username: zmkgc + password: nWKDKRNRT48tFBdh # # 从库数据源 # slave: # lazy: true diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/EnterpriseBigScreenController.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/EnterpriseBigScreenController.java index 36176c08..c4c12cb8 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/EnterpriseBigScreenController.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/controller/EnterpriseBigScreenController.java @@ -77,6 +77,15 @@ public class EnterpriseBigScreenController { return R.ok(enterpriseBigScreenService.getProjectOutputValueComparison()); } + /** + * 项目进度完成度和计划容量 + */ + @SaCheckPermission("enterprise:bigScreen:projectProgressCapacity") + @GetMapping("/projectProgressCapacity") + public R> getProjectProgressCapacity() { + return R.ok(enterpriseBigScreenService.getProjectProgressCapacity()); + } + /** * 风险预警 */ 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 c66c59ec..245a1438 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 @@ -164,9 +164,9 @@ public class ProjectBigScreenController { projectId = project.getGoId(); String pic; if (projectId == 60) { - pic = "http://xny.yj-3d.com:7363/"; + pic = "http://xny.yj-3d.com:7464"; } else { - pic = "http://xny.yj-3d.com:7464/"; + pic = "http://xny.yj-3d.com:7363"; } List busTours = projectBigScreenMapper.selectTourByProjectId(projectId); return R.ok(busTours.stream().map(tour -> { @@ -256,7 +256,9 @@ public class ProjectBigScreenController { Long goId = project.getGoId(); if (goId != null) { List sysProjectIntroduces = projectBigScreenMapper.selectByProjectId(goId); - return R.ok(sysProjectIntroduces.getFirst().getRichText()); + if (CollUtil.isNotEmpty(sysProjectIntroduces)) { + return R.ok(sysProjectIntroduces.getFirst().getRichText()); + } } } // return R.ok(projectBigScreenService.getProjectGeneralize(projectId)); diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/domain/vo/EnterpriseKeyIndexVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/domain/vo/EnterpriseKeyIndexVo.java index 676a09c6..bb988b43 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/domain/vo/EnterpriseKeyIndexVo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/domain/vo/EnterpriseKeyIndexVo.java @@ -17,22 +17,22 @@ public class EnterpriseKeyIndexVo implements Serializable { private static final long serialVersionUID = -3987781906203623727L; /** - * 在建项目数量 + * 光伏项目数量 */ - private Long ongoingProject; + private Integer photovoltaicCount; /** - * 合同总额(单位:亿元) + * 风电项目数量 */ - private Long totalContractAmount; + private Integer windElectricityCount; /** - * 总容量 + * 光伏项目总容量 */ - private BigDecimal totalCapacity; + private BigDecimal photovoltaicTotalCapacity; /** - * 今日施工项目数量 + * 风电项目总容量 */ - private Long todayProject; + private BigDecimal windElectricityTotalCapacity; } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/domain/vo/ProjectProgressCapacityVo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/domain/vo/ProjectProgressCapacityVo.java new file mode 100644 index 00000000..e646d78c --- /dev/null +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/domain/vo/ProjectProgressCapacityVo.java @@ -0,0 +1,39 @@ +package org.dromara.bigscreen.domain.vo; + +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.math.BigDecimal; + +/** + * @author lilemy + * @date 2025-09-12 18:55 + */ +@Data +public class ProjectProgressCapacityVo implements Serializable { + + @Serial + private static final long serialVersionUID = -7370580195063977801L; + + /** + * 项目id + */ + private Long projectId; + + /** + * 项目名称 + */ + private String projectName; + + /** + * 进度百分比 + */ + private BigDecimal progressPercentage; + + /** + * 计划容量 + */ + private BigDecimal plannedCapacity; + +} diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/service/EnterpriseBigScreenService.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/service/EnterpriseBigScreenService.java index e8c89118..00162b62 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/service/EnterpriseBigScreenService.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/service/EnterpriseBigScreenService.java @@ -1,10 +1,7 @@ package org.dromara.bigscreen.service; import org.dromara.bigscreen.domain.dto.WeatherQueryReq; -import org.dromara.bigscreen.domain.vo.EnterpriseKeyIndexVo; -import org.dromara.bigscreen.domain.vo.OutputValueComparisonVo; -import org.dromara.bigscreen.domain.vo.ProjectProgressAnalysisVo; -import org.dromara.bigscreen.domain.vo.RiskEarlyWarningVo; +import org.dromara.bigscreen.domain.vo.*; import org.dromara.manager.weathermanager.vo.WeatherVo; import java.util.List; @@ -50,4 +47,11 @@ public interface EnterpriseBigScreenService { * @return 天气列表 */ List getWeather3DaysList(WeatherQueryReq req); + + /** + * 获取项目进度占比 + * + * @return 项目进度占比 + */ + List getProjectProgressCapacity(); } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/service/impl/EnterpriseBigScreenServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/service/impl/EnterpriseBigScreenServiceImpl.java index 55ff07d0..c928c400 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/service/impl/EnterpriseBigScreenServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/bigscreen/service/impl/EnterpriseBigScreenServiceImpl.java @@ -8,8 +8,6 @@ import org.dromara.bigscreen.service.EnterpriseBigScreenService; import org.dromara.common.core.enums.BusinessStatusEnum; import org.dromara.common.core.utils.DateUtils; import org.dromara.common.utils.BigDecimalUtil; -import org.dromara.ctr.domain.CtrExpensesContract; -import org.dromara.ctr.domain.CtrIncomeContract; import org.dromara.ctr.service.ICtrExpensesContractService; import org.dromara.ctr.service.ICtrIncomeContractService; import org.dromara.manager.weathermanager.WeatherConstant; @@ -24,7 +22,6 @@ import org.dromara.out.service.IOutConstructionValueService; import org.dromara.out.service.IOutMonthPlanAuditService; import org.dromara.out.service.IOutValueAllocationService; import org.dromara.progress.domain.PgsProgressCategory; -import org.dromara.progress.domain.PgsProgressPlanDetail; import org.dromara.progress.service.IPgsProgressCategoryService; import org.dromara.progress.service.IPgsProgressPlanDetailService; import org.dromara.project.domain.BusProject; @@ -39,7 +36,6 @@ import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.math.RoundingMode; -import java.time.LocalDate; import java.util.*; import java.util.stream.Collectors; @@ -102,36 +98,32 @@ public class EnterpriseBigScreenServiceImpl implements EnterpriseBigScreenServic .eq(BusProject::getStatus, 0) .eq(BusProject::getPId, 0) .list(); - // 总容量 - BigDecimal totalCapacity = projectList.stream().map(BusProject::getActual) + // 光伏项目 + int photovoltaicCount = projectList.stream() + .filter(s -> s.getProjectType().equals("1")) + .toList() + .size(); + BigDecimal photovoltaicTotalCapacity = projectList.stream() + .filter(s -> s.getProjectType().equals("1")) + .map(BusProject::getActual) .filter(s -> s != null && !s.isBlank()) // 过滤掉空值 .map(BigDecimal::new) // 转成 BigDecimal .reduce(BigDecimal.ZERO, BigDecimal::add); - // 总合同金额 - List incomeContractList = incomeContractService.lambdaQuery() - .select(CtrIncomeContract::getAmount) - .list(); - BigDecimal totalIncomeAmount = incomeContractList.stream() - .map(CtrIncomeContract::getAmount) - .filter(Objects::nonNull) + // 风电项目 + int windElectricityCount = projectList.stream() + .filter(s -> s.getProjectType().equals("2")) + .toList() + .size(); + BigDecimal windElectricityTotalCapacity = projectList.stream() + .filter(s -> s.getProjectType().equals("2")) + .map(BusProject::getActual) + .filter(s -> s != null && !s.isBlank()) // 过滤掉空值 + .map(BigDecimal::new) // 转成 BigDecimal .reduce(BigDecimal.ZERO, BigDecimal::add); - List expensesContractList = expensesContractService.lambdaQuery() - .select(CtrExpensesContract::getAmount) - .list(); - BigDecimal totalExpensesAmount = expensesContractList.stream() - .map(CtrExpensesContract::getAmount) - .filter(Objects::nonNull) - .reduce(BigDecimal.ZERO, BigDecimal::add); - // 今日施工项目数量 - Long todayProject = progressPlanDetailService.lambdaQuery() - .select(PgsProgressPlanDetail::getProjectId) - .eq(PgsProgressPlanDetail::getDate, LocalDate.now()) - .list() - .stream().map(PgsProgressPlanDetail::getProjectId).distinct().count(); - vo.setOngoingProject((long) projectList.size()); - vo.setTotalCapacity(totalCapacity); - vo.setTotalContractAmount(totalIncomeAmount.add(totalExpensesAmount).longValue()); - vo.setTodayProject(todayProject); + vo.setPhotovoltaicCount(photovoltaicCount); + vo.setWindElectricityCount(windElectricityCount); + vo.setPhotovoltaicTotalCapacity(photovoltaicTotalCapacity); + vo.setWindElectricityTotalCapacity(windElectricityTotalCapacity); return vo; } @@ -380,4 +372,69 @@ public class EnterpriseBigScreenServiceImpl implements EnterpriseBigScreenServic public List getWeather3DaysList(WeatherQueryReq req) { return weatherManager.getWeatherListVo(req.getLng(), req.getLat(), WeatherConstant.THREE_DAYS_WEATHER_PATH); } + + /** + * 获取项目进度占比 + * + * @return 项目进度占比 + */ + @Override + public List getProjectProgressCapacity() { + // 1. 查询顶级项目 + List projectList = projectService.lambdaQuery() + .select(BusProject::getId, BusProject::getProjectName, BusProject::getActual, BusProject::getPlan) + .eq(BusProject::getStatus, 0) + .eq(BusProject::getPId, 0) + .list(); + if (CollUtil.isEmpty(projectList)) { + return List.of(); + } + // 2. 拿到顶级项目 id + List projectIds = projectList.stream() + .map(BusProject::getId) + .distinct() + .toList(); + // 3. 查询子项目(pId 在顶级项目id里) + List subProject = projectService.lambdaQuery() + .select(BusProject::getId, BusProject::getPId) + .in(BusProject::getPId, projectIds) + .list(); + // 4. 按父项目id分组子项目 + Map> subProjectMap = subProject.stream() + .collect(Collectors.groupingBy(BusProject::getPId)); + // 5. 查询所有子项目的进度分类 + List progressCategoryList = progressCategoryService.lambdaQuery() + .select(PgsProgressCategory::getId, + PgsProgressCategory::getProjectId, + PgsProgressCategory::getCompleted, + PgsProgressCategory::getTotal) + .in(CollUtil.isNotEmpty(subProject), + PgsProgressCategory::getProjectId, + subProject.stream().map(BusProject::getId).toList()) + .list(); + // 6. 按子项目id分组进度分类 + Map> progressCategoryMap = progressCategoryList.stream() + .collect(Collectors.groupingBy(PgsProgressCategory::getProjectId)); + return projectList.stream().map(project -> { + ProjectProgressCapacityVo detailVo = new ProjectProgressCapacityVo(); + detailVo.setProjectId(project.getId()); + detailVo.setProjectName(project.getProjectName()); + detailVo.setPlannedCapacity(new BigDecimal(project.getPlan())); + List children = subProjectMap.getOrDefault(project.getId(), List.of()); + List categoryList = new ArrayList<>(); + for (BusProject child : children) { + categoryList.addAll(progressCategoryMap.getOrDefault(child.getId(), List.of())); + } + if (CollUtil.isNotEmpty(categoryList)) { + BigDecimal completed = categoryList.stream().map(PgsProgressCategory::getCompleted) + .filter(Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add); + BigDecimal total = categoryList.stream().map(PgsProgressCategory::getTotal) + .filter(Objects::nonNull) + .reduce(BigDecimal.ZERO, BigDecimal::add); + detailVo.setProgressPercentage(BigDecimalUtil.toPercentage(completed, total)); + } + return detailVo; + }).toList(); + } } diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/job/cycle/IncSyncValidProgressPlanIsDelay.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/job/cycle/IncSyncValidProgressPlanIsDelay.java index 4a74e0b4..3b4ca199 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/job/cycle/IncSyncValidProgressPlanIsDelay.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/job/cycle/IncSyncValidProgressPlanIsDelay.java @@ -13,7 +13,7 @@ import org.springframework.stereotype.Component; * @date 2025/5/29 9:38 */ @Slf4j -@Component +//@Component public class IncSyncValidProgressPlanIsDelay { @Resource diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysNoticeBo.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysNoticeBo.java index cdcc5750..7c24ce8e 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysNoticeBo.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysNoticeBo.java @@ -9,6 +9,8 @@ import org.dromara.common.core.xss.Xss; import org.dromara.common.mybatis.core.domain.BaseEntity; import org.dromara.system.domain.SysNotice; +import java.io.Serial; + /** * 通知公告业务对象 sys_notice * @@ -20,6 +22,9 @@ import org.dromara.system.domain.SysNotice; @AutoMapper(target = SysNotice.class, reverseConvertGenerate = false) public class SysNoticeBo extends BaseEntity { + @Serial + private static final long serialVersionUID = -6718628284877138550L; + /** * 公告ID */ diff --git a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java index c0336df4..b81e0689 100644 --- a/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java +++ b/xinnengyuan/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysUserServiceImpl.java @@ -416,8 +416,8 @@ public class SysUserServiceImpl implements ISysUserService, UserService { insertUserRole(user, true); // 新增用户与岗位管理 insertUserPost(user, true); - // 获取旧的系统用户 - SysUser oldUser = baseMapper.selectById(user.getUserId()); +/* // 获取旧的系统用户 + SysUser oldUser = baseMapper.selectById(user.getUserId());*/ SysUser sysUser = MapstructUtils.convert(user, SysUser.class); // 防止错误更新后导致的数据误删除 int flag = baseMapper.updateById(sysUser);