diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/constant/CommonConstant.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/constant/CommonConstant.java index d2e4adc..47b5d46 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/constant/CommonConstant.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/constant/CommonConstant.java @@ -129,4 +129,17 @@ public class CommonConstant { Tuples.of("6", "农业") ))); + /** + * 重点群体列表 + */ + public static final List> KEY_GROUP_LIST = + Collections.unmodifiableList(new ArrayList<>(Arrays.asList( + Tuples.of("1", "失业人员"), + Tuples.of("2", "高校毕业生"), + Tuples.of("3", "残疾人"), + Tuples.of("4", "低收入家庭"), + Tuples.of("5", "零就业家庭"), + Tuples.of("6", "其他重点人群") + ))); + } diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/AnalysisKeyGroupServiceSituationController.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/AnalysisKeyGroupServiceSituationController.java index fa70263..9cdf915 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/AnalysisKeyGroupServiceSituationController.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/controller/AnalysisKeyGroupServiceSituationController.java @@ -1,9 +1,11 @@ package com.ruoyi.cms.controller; +import com.ruoyi.cms.domain.dto.KeyGroupQueryDTO; 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.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -109,4 +111,25 @@ public class AnalysisKeyGroupServiceSituationController { public AjaxResult heatmap(@RequestBody QueryParamDto dto) { return AjaxResult.success(analysisKeyGroupServiceSituationService.heatmap(dto)); } + + /** + * 查询重点人群类型列表 + * + * @return 重点人群类型列表 + */ + @GetMapping("/keyGroupTypeList") + public AjaxResult keyGroupTypeList() { + return AjaxResult.success(analysisKeyGroupServiceSituationService.keyGroupTypeList()); + } + + /** + * 查询重点群体帮扶分页列表 + * + * @param dto 查询参数 + * @return 查询结果 + */ + @PostMapping("/pageKeyGroup") + public AjaxResult pageKeyGroup(@RequestBody KeyGroupQueryDTO dto) { + return analysisKeyGroupServiceSituationService.pageKeyGroup(dto); + } } \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/dto/KeyGroupQueryDTO.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/dto/KeyGroupQueryDTO.java new file mode 100644 index 0000000..59b8a41 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/dto/KeyGroupQueryDTO.java @@ -0,0 +1,35 @@ +package com.ruoyi.cms.domain.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +/** + * 重点群体查询参数 + * + * @author 马宝龙 + * @date 2026/6/26 + */ +@EqualsAndHashCode(callSuper = true) +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class KeyGroupQueryDTO extends PageDTO { + private static final long serialVersionUID = -4339925492039700077L; + + /** + * 团场 + */ + private String area; + /** + * 姓名 + */ + private String name; + /** + * 重点人群类型 + */ + private String keyGroupType; +} diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/dto/PageDTO.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/dto/PageDTO.java new file mode 100644 index 0000000..b28ee06 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/dto/PageDTO.java @@ -0,0 +1,36 @@ +package com.ruoyi.cms.domain.dto; + +import lombok.Data; + +import javax.validation.constraints.Min; +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * 分页参数 + * + * @author 马宝龙 + * @date 2026/6/26 + */ +@Data +public class PageDTO implements Serializable { + private static final long serialVersionUID = 2667497663931774784L; + + /** + * 页码 + */ + public static final Integer PAGE_NO = 1; + /** + * 每页条数 + */ + public static final Integer PAGE_SIZE = 10; + + + @NotNull(message = "页码不能为空") + @Min(value = 1, message = "页码最小值为 1") + private Integer pageNo = PAGE_NO; + + @NotNull(message = "每页条数不能为空") + @Min(value = 1, message = "每页条数最小值为 1") + private Integer pageSize = PAGE_SIZE; +} diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/vo/KeyGroupResultVo.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/vo/KeyGroupResultVo.java new file mode 100644 index 0000000..5249a56 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/vo/KeyGroupResultVo.java @@ -0,0 +1,51 @@ +package com.ruoyi.cms.domain.vo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * 重点群体查询结果 + * + * @author 马宝龙 + * @date 2026/6/25 + */ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +public class KeyGroupResultVo implements Serializable { + private static final long serialVersionUID = -370774975897655676L; + /** + * ID + */ + private Long id; + /** + * 姓名 + */ + private String name; + /** + * 人员类型 + */ + private String keyGroupType; + /** + * 人员类型描述 + */ + private String keyGroupTypeDesc; + /** + * 服务内容 + */ + private String serviceContent; + /** + * 服务时间 + */ + private LocalDateTime serviceTime; + /** + * 技能等级描述 + */ + private String skillLevelDesc; +} diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/vo/PageVO.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/vo/PageVO.java new file mode 100644 index 0000000..359b35e --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/domain/vo/PageVO.java @@ -0,0 +1,46 @@ +package com.ruoyi.cms.domain.vo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.List; + +/** + * 分页结果 + * + * @param 类型 + * @author 马宝龙 + * @date 2026/6/26 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class PageVO implements Serializable { + private static final long serialVersionUID = 1292342806693154866L; + + /** + * 分页内容 + */ + private List list; + /** + * 总数 + */ + private Long total; + /** + * 总页数 + */ + private Integer totalPage; + /** + * 是否首页 + */ + private Boolean isFirst; + /** + * 是否尾页 + */ + private Boolean isLast; + +} diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/AnalysisKeyGroupServiceSituationService.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/AnalysisKeyGroupServiceSituationService.java index b40008e..cba3250 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/AnalysisKeyGroupServiceSituationService.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/AnalysisKeyGroupServiceSituationService.java @@ -1,12 +1,19 @@ package com.ruoyi.cms.service; +import com.ruoyi.cms.domain.dto.KeyGroupQueryDTO; import com.ruoyi.cms.domain.dto.QueryParamDto; +import com.ruoyi.cms.domain.vo.DictVo; import com.ruoyi.cms.domain.vo.HeatmapVo; 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.common.annotation.Log; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.enums.BusinessType; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import java.util.List; @@ -82,4 +89,19 @@ public interface AnalysisKeyGroupServiceSituationService { * @return 热力图列表 */ List heatmap(QueryParamDto dto); + + /** + * 查询重点人群类型列表 + * + * @return 重点人群类型列表 + */ + List keyGroupTypeList(); + + /** + * 查询重点群体帮扶分页列表 + * + * @param dto 查询参数 + * @return 查询结果 + */ + AjaxResult pageKeyGroup(@RequestBody KeyGroupQueryDTO dto); } \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AnalysisKeyGroupServiceSituationServiceImpl.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AnalysisKeyGroupServiceSituationServiceImpl.java index 5ea7316..0dc7021 100644 --- a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AnalysisKeyGroupServiceSituationServiceImpl.java +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/service/impl/AnalysisKeyGroupServiceSituationServiceImpl.java @@ -1,14 +1,20 @@ package com.ruoyi.cms.service.impl; import com.ruoyi.cms.constant.CommonConstant; +import com.ruoyi.cms.domain.dto.KeyGroupQueryDTO; import com.ruoyi.cms.domain.dto.QueryParamDto; +import com.ruoyi.cms.domain.vo.DictVo; import com.ruoyi.cms.domain.vo.HeatmapVo; +import com.ruoyi.cms.domain.vo.KeyGroupResultVo; 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 com.ruoyi.cms.util.PageUtil; +import com.ruoyi.common.core.domain.AjaxResult; +import com.ruoyi.common.utils.DateUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -17,6 +23,7 @@ import reactor.util.function.Tuples; import java.math.BigDecimal; import java.math.RoundingMode; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -208,4 +215,108 @@ public class AnalysisKeyGroupServiceSituationServiceImpl implements AnalysisKeyG } return list; } + + @Override + public List keyGroupTypeList() { + + List list = new ArrayList<>(); + for (Tuple2 industry : CommonConstant.KEY_GROUP_LIST) { + list.add(DictVo.builder().code(industry.getT1()).desc(industry.getT2()).build()); + } + + return list; + } + + @Override + public AjaxResult pageKeyGroup(KeyGroupQueryDTO dto) { + // 查询总数 + long count = 8L; + if (0 == count) { + return AjaxResult.success(PageUtil.empty()); + } + // 查询分页内容 + List voList = new ArrayList<>(); + KeyGroupResultVo vo = KeyGroupResultVo.builder() + .id(1L) + .name("张三") + .keyGroupType("1") + .keyGroupTypeDesc("失业人员") + .serviceContent("xxx") + .serviceTime(LocalDateTime.now()) + .skillLevelDesc("xxx") + .build(); + voList.add(vo); + vo = KeyGroupResultVo.builder() + .id(2L) + .name("李四") + .keyGroupType("2") + .keyGroupTypeDesc("高校毕业生") + .serviceContent("xxx") + .serviceTime(LocalDateTime.now()) + .skillLevelDesc("xxx") + .build(); + voList.add(vo); + vo = KeyGroupResultVo.builder() + .id(3L) + .name("王五") + .keyGroupType("3") + .keyGroupTypeDesc("残疾人") + .serviceContent("xxx") + .serviceTime(LocalDateTime.now()) + .skillLevelDesc("xxx") + .build(); + voList.add(vo); + vo = KeyGroupResultVo.builder() + .id(4L) + .name("郑六") + .keyGroupType("4") + .keyGroupTypeDesc("低收入家庭") + .serviceContent("xxx") + .serviceTime(LocalDateTime.now()) + .skillLevelDesc("xxx") + .build(); + voList.add(vo); + vo = KeyGroupResultVo.builder() + .id(5L) + .name("吕七") + .keyGroupType("5") + .keyGroupTypeDesc("零就业家庭") + .serviceContent("xxx") + .serviceTime(LocalDateTime.now()) + .skillLevelDesc("xxx") + .build(); + voList.add(vo); + vo = KeyGroupResultVo.builder() + .id(6L) + .name("陈九") + .keyGroupType("6") + .keyGroupTypeDesc("其他重点人群") + .serviceContent("xxx") + .serviceTime(LocalDateTime.now()) + .skillLevelDesc("xxx") + .build(); + voList.add(vo); + vo = KeyGroupResultVo.builder() + .id(7L) + .name("孙十") + .keyGroupType("1") + .keyGroupTypeDesc("失业人员") + .serviceContent("xxx") + .serviceTime(LocalDateTime.now()) + .skillLevelDesc("xxx") + .build(); + voList.add(vo); + vo = KeyGroupResultVo.builder() + .id(8L) + .name("赵一") + .keyGroupType("2") + .keyGroupTypeDesc("高校毕业生") + .serviceContent("xxx") + .serviceTime(LocalDateTime.now()) + .skillLevelDesc("xxx") + .build(); + voList.add(vo); + + return AjaxResult.success(PageUtil.init(voList, count, dto.getPageNo(), dto.getPageSize())); + } } \ No newline at end of file diff --git a/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/PageUtil.java b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/PageUtil.java new file mode 100644 index 0000000..400afa5 --- /dev/null +++ b/ruoyi-bussiness/src/main/java/com/ruoyi/cms/util/PageUtil.java @@ -0,0 +1,67 @@ +package com.ruoyi.cms.util; + + +import com.ruoyi.cms.domain.dto.PageDTO; +import com.ruoyi.cms.domain.vo.PageVO; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + +/** + * 分页工具类 + * + * @author 马宝龙 + * @date 2026/6/26 + */ +public class PageUtil { + private PageUtil() { + } + + /** + * 返回空分页对象 + * + * @param 类型 + * @return 空分页 + */ + public static PageVO empty() { + return PageVO.builder() + .list(new ArrayList<>()) + .total(0L) + .totalPage(0) + .isFirst(true) + .isLast(true) + .build(); + } + + /** + * 初始化分页 + * + * @param list 内容列表 + * @param total 总数 + * @param pageNo 页码 + * @param pageSize 每页数量 + * @param 类型 + * @return 分页 + */ + public static PageVO init(List list, Long total, Integer pageNo, Integer pageSize) { + + total = Optional.ofNullable(total).orElse(0L); + pageNo = Optional.ofNullable(pageNo).orElse(PageDTO.PAGE_NO); + pageSize = Optional.ofNullable(pageSize).orElse(PageDTO.PAGE_SIZE); + + int totalPage = (int) (total / pageSize); + int morePage = (int) (total % pageSize); + if (morePage > 0) { + totalPage += 1; + } + + return PageVO.builder() + .list(list) + .total(total) + .totalPage(totalPage) + .isFirst(pageNo.equals(PageDTO.PAGE_NO)) + .isLast(pageNo.equals(totalPage)) + .build(); + } +}