企业大屏
This commit is contained in:
		| @ -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 | ||||
|  | ||||
| @ -77,6 +77,15 @@ public class EnterpriseBigScreenController { | ||||
|         return R.ok(enterpriseBigScreenService.getProjectOutputValueComparison()); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 项目进度完成度和计划容量 | ||||
|      */ | ||||
|     @SaCheckPermission("enterprise:bigScreen:projectProgressCapacity") | ||||
|     @GetMapping("/projectProgressCapacity") | ||||
|     public R<List<ProjectProgressCapacityVo>> getProjectProgressCapacity() { | ||||
|         return R.ok(enterpriseBigScreenService.getProjectProgressCapacity()); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 风险预警 | ||||
|      */ | ||||
|  | ||||
| @ -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<BusTour> busTours = projectBigScreenMapper.selectTourByProjectId(projectId); | ||||
|         return R.ok(busTours.stream().map(tour -> { | ||||
| @ -256,9 +256,11 @@ public class ProjectBigScreenController { | ||||
|             Long goId = project.getGoId(); | ||||
|             if (goId != null) { | ||||
|                 List<SysProjectIntroduce> sysProjectIntroduces = projectBigScreenMapper.selectByProjectId(goId); | ||||
|                 if (CollUtil.isNotEmpty(sysProjectIntroduces)) { | ||||
|                     return R.ok(sysProjectIntroduces.getFirst().getRichText()); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| //        return R.ok(projectBigScreenService.getProjectGeneralize(projectId)); | ||||
|         return R.ok(); | ||||
|     } | ||||
|  | ||||
| @ -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; | ||||
| } | ||||
|  | ||||
| @ -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; | ||||
|  | ||||
| } | ||||
| @ -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<WeatherVo> getWeather3DaysList(WeatherQueryReq req); | ||||
|  | ||||
|     /** | ||||
|      * 获取项目进度占比 | ||||
|      * | ||||
|      * @return 项目进度占比 | ||||
|      */ | ||||
|     List<ProjectProgressCapacityVo> getProjectProgressCapacity(); | ||||
| } | ||||
|  | ||||
| @ -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<CtrIncomeContract> 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<CtrExpensesContract> 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<WeatherVo> getWeather3DaysList(WeatherQueryReq req) { | ||||
|         return weatherManager.getWeatherListVo(req.getLng(), req.getLat(), WeatherConstant.THREE_DAYS_WEATHER_PATH); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 获取项目进度占比 | ||||
|      * | ||||
|      * @return 项目进度占比 | ||||
|      */ | ||||
|     @Override | ||||
|     public List<ProjectProgressCapacityVo> getProjectProgressCapacity() { | ||||
|         // 1. 查询顶级项目 | ||||
|         List<BusProject> 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<Long> projectIds = projectList.stream() | ||||
|             .map(BusProject::getId) | ||||
|             .distinct() | ||||
|             .toList(); | ||||
|         // 3. 查询子项目(pId 在顶级项目id里) | ||||
|         List<BusProject> subProject = projectService.lambdaQuery() | ||||
|             .select(BusProject::getId, BusProject::getPId) | ||||
|             .in(BusProject::getPId, projectIds) | ||||
|             .list(); | ||||
|         // 4. 按父项目id分组子项目 | ||||
|         Map<Long, List<BusProject>> subProjectMap = subProject.stream() | ||||
|             .collect(Collectors.groupingBy(BusProject::getPId)); | ||||
|         // 5. 查询所有子项目的进度分类 | ||||
|         List<PgsProgressCategory> 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<Long, List<PgsProgressCategory>> 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<BusProject> children = subProjectMap.getOrDefault(project.getId(), List.of()); | ||||
|             List<PgsProgressCategory> 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(); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -13,7 +13,7 @@ import org.springframework.stereotype.Component; | ||||
|  * @date 2025/5/29 9:38 | ||||
|  */ | ||||
| @Slf4j | ||||
| @Component | ||||
| //@Component | ||||
| public class IncSyncValidProgressPlanIsDelay { | ||||
|  | ||||
|     @Resource | ||||
|  | ||||
| @ -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 | ||||
|      */ | ||||
|  | ||||
| @ -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); | ||||
|  | ||||
		Reference in New Issue
	
	Block a user