添加功能

This commit is contained in:
马宝龙
2026-06-26 23:10:33 +08:00
parent fd834d3647
commit 8515346945
7 changed files with 572 additions and 0 deletions

View File

@@ -0,0 +1,101 @@
package com.ruoyi.cms.controller;
import com.ruoyi.cms.domain.dto.QueryParamDto;
import com.ruoyi.cms.service.AnalysisKeyGroupServiceSituationService;
import com.ruoyi.common.core.domain.AjaxResult;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 重点人群跟踪服务情况分析
*
* @author 马宝龙
* @date 2026/6/26
*/
@RestController
@RequestMapping("/analysis/keyGroupServiceSituation")
@RequiredArgsConstructor
public class AnalysisKeyGroupServiceSituationController {
private final AnalysisKeyGroupServiceSituationService analysisKeyGroupServiceSituationService;
/**
* 数据总览
*
* @param dto 查询参数
* @return 数据总览
*/
@PostMapping("/overview")
public AjaxResult overview(@RequestBody QueryParamDto dto) {
return AjaxResult.success(analysisKeyGroupServiceSituationService.overview(dto));
}
/**
* 服务覆盖范围
*
* @param dto 查询参数
* @return 结果列表
*/
@PostMapping("/serviceCoverage")
public AjaxResult serviceCoverage(@RequestBody QueryParamDto dto) {
return AjaxResult.success(analysisKeyGroupServiceSituationService.serviceCoverage(dto));
}
/**
* 帮扶服务类型分析
*
* @param dto 查询参数
* @return 结果列表
*/
@PostMapping("/helpServiceType")
public AjaxResult helpServiceType(@RequestBody QueryParamDto dto) {
return AjaxResult.success(analysisKeyGroupServiceSituationService.helpServiceType(dto));
}
/**
* 帮扶成效评估
*
* @param dto 查询参数
* @return 结果列表
*/
@PostMapping("/helpResultScore")
public AjaxResult helpResultScore(@RequestBody QueryParamDto dto) {
return AjaxResult.success(analysisKeyGroupServiceSituationService.helpResultScore(dto));
}
/**
* 不同重点人群差异化分析
*
* @param dto 查询参数
* @return 结果列表
*/
@PostMapping("/keyGroupDifferentiation")
public AjaxResult keyGroupDifferentiation(@RequestBody QueryParamDto dto) {
return AjaxResult.success(analysisKeyGroupServiceSituationService.keyGroupDifferentiation(dto));
}
/**
* 帮扶过程与满意度
*
* @param dto 查询参数
* @return 结果列表
*/
@PostMapping("/helpProcessSatisfaction")
public AjaxResult helpProcessSatisfaction(@RequestBody QueryParamDto dto) {
return AjaxResult.success(analysisKeyGroupServiceSituationService.helpProcessSatisfaction(dto));
}
/**
* 问题与建议
*
* @param dto 查询参数
* @return 结果列表
*/
@PostMapping("/questionAndSuggestion")
public AjaxResult questionAndSuggestion(@RequestBody QueryParamDto dto) {
return AjaxResult.success(analysisKeyGroupServiceSituationService.questionAndSuggestion(dto));
}
}

View File

@@ -0,0 +1,43 @@
package com.ruoyi.cms.domain.vo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* 重点人群跟踪服务情况分析 - 帮扶成效评估
*
* @author 马宝龙
* @date 2026/6/25
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class KeyGroupServiceSituationHelpScoreVo implements Serializable {
private static final long serialVersionUID = -8478307079421272922L;
/**
* 编码
*/
private String code;
/**
* 描述
*/
private String desc;
/**
* 就业率
*/
private BigDecimal employmentRate;
/**
* 收入改善
*/
private BigDecimal incomeImprovement;
/**
* 生活质量改善
*/
private BigDecimal lifeQualityImprovement;
}

View File

@@ -0,0 +1,43 @@
package com.ruoyi.cms.domain.vo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* 重点人群跟踪服务情况分析 - 帮扶服务类型分析
*
* @author 马宝龙
* @date 2026/6/25
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class KeyGroupServiceSituationHelpTypeVo implements Serializable {
private static final long serialVersionUID = -8478307079421272922L;
/**
* 编码
*/
private String code;
/**
* 描述
*/
private String desc;
/**
* 服务人数
*/
private Long serviceCount;
/**
* 满意度
*/
private BigDecimal serviceSatisfaction;
/**
* 成效评分
*/
private BigDecimal resultScore;
}

View File

@@ -0,0 +1,47 @@
package com.ruoyi.cms.domain.vo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* 重点人群跟踪服务情况分析 - 不同重点人群差异化分析
*
* @author 马宝龙
* @date 2026/6/25
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class KeyGroupServiceSituationKeyGroupScoreVo implements Serializable {
private static final long serialVersionUID = -8478307079421272922L;
/**
* 编码
*/
private String code;
/**
* 描述
*/
private String desc;
/**
* 服务覆盖率
*/
private BigDecimal serviceCoverageRate;
/**
* 就业率
*/
private BigDecimal employmentRate;
/**
* 收入改善
*/
private BigDecimal incomeImprovement;
/**
* 满意度
*/
private BigDecimal serviceSatisfaction;
}

View File

@@ -0,0 +1,79 @@
package com.ruoyi.cms.domain.vo;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* 重点人群跟踪服务情况分析 - 数据总览
*
* @author 马宝龙
* @date 2026/6/25
*/
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class KeyGroupServiceSituationOverviewVo implements Serializable {
private static final long serialVersionUID = -8478307079421272922L;
/**
* 服务对象人数
*/
private Long serviceTargetCount;
/**
* 服务对象人数环比
*/
private BigDecimal serviceTargetCountMom;
/**
* 服务需求人数
*/
private Long serviceDemandCount;
/**
* 服务需求人数环比
*/
private BigDecimal serviceDemandCountMom;
/**
* 实际服务人数
*/
private Long actualServiceCount;
/**
* 实际服务人数环比
*/
private BigDecimal actualServiceCountMom;
/**
* 实际服务人次
*/
private Long actualServiceTimes;
/**
* 实际服务人次环比
*/
private BigDecimal actualServiceTimesMom;
/**
* 服务覆盖率
*/
private BigDecimal serviceCoverageRate;
/**
* 服务覆盖率环比
*/
private BigDecimal serviceCoverageRateMom;
/**
* 帮扶后就业率
*/
private BigDecimal afterHelpEmploymentRate;
/**
* 帮扶后就业率环比
*/
private BigDecimal afterHelpEmploymentRateMom;
/**
* 帮扶资金投放
*/
private Long helpFundPutCount;
/**
* 帮扶资金投放环比
*/
private BigDecimal helpFundPutCountMom;
}

View File

@@ -0,0 +1,76 @@
package com.ruoyi.cms.service;
import com.ruoyi.cms.domain.dto.QueryParamDto;
import com.ruoyi.cms.domain.vo.KeyGroupServiceSituationHelpScoreVo;
import com.ruoyi.cms.domain.vo.KeyGroupServiceSituationHelpTypeVo;
import com.ruoyi.cms.domain.vo.KeyGroupServiceSituationKeyGroupScoreVo;
import com.ruoyi.cms.domain.vo.KeyGroupServiceSituationOverviewVo;
import com.ruoyi.cms.domain.vo.QueryResultVo;
import java.util.List;
/**
* 重点人群跟踪服务情况分析
*
* @author 马宝龙
* @date 2026/6/26
*/
public interface AnalysisKeyGroupServiceSituationService {
/**
* 数据总览
*
* @param dto 查询参数
* @return 数据总览
*/
KeyGroupServiceSituationOverviewVo overview(QueryParamDto dto);
/**
* 服务覆盖范围
*
* @param dto 查询参数
* @return 结果列表
*/
List<QueryResultVo> serviceCoverage(QueryParamDto dto);
/**
* 帮扶服务类型分析
*
* @param dto 查询参数
* @return 结果列表
*/
List<KeyGroupServiceSituationHelpTypeVo> helpServiceType(QueryParamDto dto);
/**
* 帮扶成效评估
*
* @param dto 查询参数
* @return 结果列表
*/
List<KeyGroupServiceSituationHelpScoreVo> helpResultScore(QueryParamDto dto);
/**
* 不同重点人群差异化分析
*
* @param dto 查询参数
* @return 结果列表
*/
List<KeyGroupServiceSituationKeyGroupScoreVo> keyGroupDifferentiation(QueryParamDto dto);
/**
* 帮扶过程与满意度
*
* @param dto 查询参数
* @return 结果列表
*/
List<QueryResultVo> helpProcessSatisfaction(QueryParamDto dto);
/**
* 问题与建议
*
* @param dto 查询参数
* @return 结果列表
*/
List<QueryResultVo> questionAndSuggestion(QueryParamDto dto);
}

View File

@@ -0,0 +1,183 @@
package com.ruoyi.cms.service.impl;
import com.ruoyi.cms.domain.dto.QueryParamDto;
import com.ruoyi.cms.domain.vo.KeyGroupServiceSituationHelpScoreVo;
import com.ruoyi.cms.domain.vo.KeyGroupServiceSituationHelpTypeVo;
import com.ruoyi.cms.domain.vo.KeyGroupServiceSituationKeyGroupScoreVo;
import com.ruoyi.cms.domain.vo.KeyGroupServiceSituationOverviewVo;
import com.ruoyi.cms.domain.vo.QueryResultVo;
import com.ruoyi.cms.service.AnalysisKeyGroupServiceSituationService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
import reactor.util.function.Tuple2;
import reactor.util.function.Tuples;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
/**
* 重点人群跟踪服务情况分析
*
* @author 马宝龙
* @date 2026/6/26
*/
@Service
@Validated
@Slf4j
public class AnalysisKeyGroupServiceSituationServiceImpl implements AnalysisKeyGroupServiceSituationService {
@Override
public KeyGroupServiceSituationOverviewVo overview(QueryParamDto dto) {
return KeyGroupServiceSituationOverviewVo.builder()
.serviceTargetCount(15000L)
.serviceTargetCountMom(BigDecimal.valueOf(5.2))
.serviceDemandCount(12000L)
.serviceDemandCountMom(BigDecimal.valueOf(3.8))
.actualServiceCount(10800L)
.actualServiceCountMom(BigDecimal.valueOf(6.5))
.actualServiceTimes(25600L)
.actualServiceTimesMom(BigDecimal.valueOf(8.1))
.serviceCoverageRate(BigDecimal.valueOf(90.0))
.serviceCoverageRateMom(BigDecimal.valueOf(2.3))
.afterHelpEmploymentRate(BigDecimal.valueOf(72.5))
.afterHelpEmploymentRateMom(BigDecimal.valueOf(1.8))
.helpFundPutCount(3200L)
.helpFundPutCountMom(BigDecimal.valueOf(12.5))
.build();
}
@Override
public List<QueryResultVo> serviceCoverage(QueryParamDto dto) {
List<QueryResultVo> list = new ArrayList<>();
List<Tuple2<String, String>> coverageList =
Collections.unmodifiableList(new ArrayList<>(Arrays.asList(
Tuples.of("1", "失业人员"),
Tuples.of("2", "高校毕业生"),
Tuples.of("3", "残疾人"),
Tuples.of("4", "低收入家庭"),
Tuples.of("5", "零就业家庭"),
Tuples.of("6", "其他重点人群")
)));
for (Tuple2<String, String> item : coverageList) {
list.add(QueryResultVo.builder()
.code(item.getT1())
.desc(item.getT2())
.count((long) Math.floor(Math.random() * 10000) + 1)
.anotherCount((long) Math.floor(Math.random() * 10000) + 1)
.rate(BigDecimal.valueOf(Math.random() * 100 + 1).setScale(1, RoundingMode.HALF_UP))
.build());
}
return list;
}
@Override
public List<KeyGroupServiceSituationHelpTypeVo> helpServiceType(QueryParamDto dto) {
List<KeyGroupServiceSituationHelpTypeVo> list = new ArrayList<>();
List<Tuple2<String, String>> typeList =
Collections.unmodifiableList(new ArrayList<>(Arrays.asList(
Tuples.of("1", "职业指导"),
Tuples.of("2", "创业服务"),
Tuples.of("3", "职业培训"),
Tuples.of("4", "就业援助"),
Tuples.of("5", "职业介绍"),
Tuples.of("6", "就业见习")
)));
for (Tuple2<String, String> item : typeList) {
list.add(KeyGroupServiceSituationHelpTypeVo.builder()
.code(item.getT1())
.desc(item.getT2())
.serviceCount((long) Math.floor(Math.random() * 5000) + 1)
.serviceSatisfaction(new BigDecimal(Math.random() * 100).setScale(2, RoundingMode.HALF_UP))
.resultScore(new BigDecimal(Math.random() * 100).setScale(2, RoundingMode.HALF_UP))
.build());
}
return list;
}
@Override
public List<KeyGroupServiceSituationHelpScoreVo> helpResultScore(QueryParamDto dto) {
List<KeyGroupServiceSituationHelpScoreVo> list = new ArrayList<>();
for (int i = 0; i < 12; i++) {
list.add(KeyGroupServiceSituationHelpScoreVo.builder()
.code(i + 1 + "")
.desc(i + 1 + "")
.employmentRate(new BigDecimal(Math.random() * 100).setScale(2, RoundingMode.HALF_UP))
.incomeImprovement(new BigDecimal(Math.random() * 100).setScale(2, RoundingMode.HALF_UP))
.lifeQualityImprovement(new BigDecimal(Math.random() * 100).setScale(2, RoundingMode.HALF_UP))
.build());
}
return list;
}
@Override
public List<KeyGroupServiceSituationKeyGroupScoreVo> keyGroupDifferentiation(QueryParamDto dto) {
List<KeyGroupServiceSituationKeyGroupScoreVo> list = new ArrayList<>();
List<Tuple2<String, String>> groupList =
Collections.unmodifiableList(new ArrayList<>(Arrays.asList(
Tuples.of("1", "失业人员"),
Tuples.of("2", "高校毕业生"),
Tuples.of("3", "残疾人"),
Tuples.of("4", "低收入家庭"),
Tuples.of("5", "零就业家庭"),
Tuples.of("6", "其他重点人群")
)));
for (Tuple2<String, String> item : groupList) {
list.add(KeyGroupServiceSituationKeyGroupScoreVo.builder()
.code(item.getT1())
.desc(item.getT2())
.serviceCoverageRate(new BigDecimal(Math.random() * 100).setScale(2, RoundingMode.HALF_UP))
.employmentRate(new BigDecimal(Math.random() * 100).setScale(2, RoundingMode.HALF_UP))
.incomeImprovement(new BigDecimal(Math.random() * 100).setScale(2, RoundingMode.HALF_UP))
.serviceSatisfaction(new BigDecimal(Math.random() * 100).setScale(2, RoundingMode.HALF_UP))
.build());
}
return list;
}
@Override
public List<QueryResultVo> helpProcessSatisfaction(QueryParamDto dto) {
List<QueryResultVo> list = new ArrayList<>();
List<Tuple2<String, String>> satisfactionList =
Collections.unmodifiableList(new ArrayList<>(Arrays.asList(
Tuples.of("1", "服务态度"),
Tuples.of("2", "服务专业性"),
Tuples.of("3", "整体满意度"),
Tuples.of("4", "帮扶效果"),
Tuples.of("5", "服务响应时间")
)));
for (Tuple2<String, String> item : satisfactionList) {
list.add(QueryResultVo.builder()
.code(item.getT1())
.desc(item.getT2())
.amount(new BigDecimal(Math.random() * 5).setScale(2, RoundingMode.HALF_UP))
.build());
}
return list;
}
@Override
public List<QueryResultVo> questionAndSuggestion(QueryParamDto dto) {
List<QueryResultVo> list = new ArrayList<>();
List<Tuple2<String, String>> suggestionList =
Collections.unmodifiableList(new ArrayList<>(Arrays.asList(
Tuples.of("1", "帮扶资源不足"),
Tuples.of("2", "服务人员专业性不够"),
Tuples.of("3", "帮扶方式单一"),
Tuples.of("4", "跟踪服务不及时"),
Tuples.of("5", "信息系统不完善")
)));
for (Tuple2<String, String> item : suggestionList) {
list.add(QueryResultVo.builder()
.code(item.getT1())
.desc(item.getT2())
.count((long) Math.floor(Math.random() * 1000) + 1)
.build());
}
return list;
}
}