From 6e005f2f4efb6975296fdd58d64f12e160e069c6 Mon Sep 17 00:00:00 2001 From: PengJ <2413927716@qq.com> Date: Mon, 9 Feb 2026 16:30:50 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E7=A7=AF=E5=88=86=E9=93=B6=E8=A1=8C?= =?UTF-8?q?=E3=80=91=E7=A7=AF=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../renkang/bank/enums/PointsSourceEnum.java | 4 +- .../bank/model/dto/UserPointsRankingDTO.java | 25 +- .../com/renkang/bank/model/po/PointsRule.java | 12 + .../com/renkang/bank/model/po/UserPoints.java | 5 + .../bank/model/vo/UserPointRankingVO.java | 18 ++ .../model/vo/UserPointsDeductDetailsVO.java | 48 ++++ .../bank/model/vo/UserPointsDetailsVO.java | 56 ++++ .../bank/model/vo/UserPointsListVO.java | 7 + .../bank/controller/UserPointsController.java | 43 ++- .../bank/mapper/UserPointsDetailsMapper.java | 3 + .../mapper/xml/UserPointsDetailsMapper.xml | 47 +++ .../redis/config/BankRedisStreamConfig.java | 90 ++++++ .../redis/listener/BankAsyncListener.java | 63 +++++ .../bank/service/IUserPointsService.java | 14 +- .../service/impl/UserPointsServiceImpl.java | 267 +++++++++++++++++- .../java/org/jeecg/enums/ExportExcelEnum.java | 16 +- .../main/java/org/jeecg/enums/ServerEnum.java | 7 +- .../controller/SysBannerApiController.java | 20 +- .../api/service/SysBannerApiService.java | 4 +- .../controller/SysBannerController.java | 18 -- 20 files changed, 719 insertions(+), 48 deletions(-) create mode 100644 health-bank/health-bank-api/src/main/java/com/renkang/bank/model/vo/UserPointsDeductDetailsVO.java create mode 100644 health-bank/health-bank-api/src/main/java/com/renkang/bank/model/vo/UserPointsDetailsVO.java create mode 100644 health-bank/health-bank-biz/src/main/java/com/renkang/bank/redis/config/BankRedisStreamConfig.java create mode 100644 health-bank/health-bank-biz/src/main/java/com/renkang/bank/redis/listener/BankAsyncListener.java diff --git a/health-bank/health-bank-api/src/main/java/com/renkang/bank/enums/PointsSourceEnum.java b/health-bank/health-bank-api/src/main/java/com/renkang/bank/enums/PointsSourceEnum.java index 5e8bc4c..44e3573 100644 --- a/health-bank/health-bank-api/src/main/java/com/renkang/bank/enums/PointsSourceEnum.java +++ b/health-bank/health-bank-api/src/main/java/com/renkang/bank/enums/PointsSourceEnum.java @@ -15,7 +15,7 @@ public enum PointsSourceEnum { TYPE_2_VIOLATION(2, "violation", "违规扣除"), TYPE_2_EXPIRED(2, "expired", "过期清除"); /** - *类型1-获得积分,2-扣减积分 + * 类型1-获得积分,2-扣减积分 */ public final Integer changeType; /** @@ -23,7 +23,7 @@ public enum PointsSourceEnum { */ public final String source; /** - *来源描述 + * 来源描述 */ public final String desc; diff --git a/health-bank/health-bank-api/src/main/java/com/renkang/bank/model/dto/UserPointsRankingDTO.java b/health-bank/health-bank-api/src/main/java/com/renkang/bank/model/dto/UserPointsRankingDTO.java index 52c47c3..f8a3860 100644 --- a/health-bank/health-bank-api/src/main/java/com/renkang/bank/model/dto/UserPointsRankingDTO.java +++ b/health-bank/health-bank-api/src/main/java/com/renkang/bank/model/dto/UserPointsRankingDTO.java @@ -6,6 +6,9 @@ import lombok.Data; import lombok.EqualsAndHashCode; import org.jeecg.base.PageInfo; +import java.util.Date; +import java.util.List; + /** * @author pj * @version 1.0 @@ -16,7 +19,27 @@ import org.jeecg.base.PageInfo; @Data public class UserPointsRankingDTO extends PageInfo { - @Schema(title = "榜单类型,0总榜,1周榜,2月榜") + @Schema(title = "榜单类型,0日榜,1周榜,2月榜,3季榜,4年榜,5选时排名,10总榜") private String rankType; + @Schema(title = "开始时间") + private Date startTime; + + @Schema(title = "截止时间") + private Date endTime; + + @Schema(title = "所属单位") + private String orgCode; + + @Schema(title = "所属部门") + private String deptCode; + + @Schema(title = "姓名") + private String realName; + + @Schema(title = "员工编号") + private String workNo; + + private List userIds; + } diff --git a/health-bank/health-bank-api/src/main/java/com/renkang/bank/model/po/PointsRule.java b/health-bank/health-bank-api/src/main/java/com/renkang/bank/model/po/PointsRule.java index fd319c9..8945f7b 100644 --- a/health-bank/health-bank-api/src/main/java/com/renkang/bank/model/po/PointsRule.java +++ b/health-bank/health-bank-api/src/main/java/com/renkang/bank/model/po/PointsRule.java @@ -81,4 +81,16 @@ public class PointsRule implements Serializable { @Schema(title = "最后修改时间") private Date lastModifyDate; + @Schema(title = "周期内打卡次数上限") + private Integer checkInUpper; + + @Schema(title = "年额外积分上限") + private BigDecimal yearExtraPointUpper; + + @Schema(title = "是否支持打卡叠加得分,0不支持,1支持") + private Integer supportCum; + + @Schema(title = "是否需要填写补充信息,0不需要,1需要") + private Integer needRemark; + } diff --git a/health-bank/health-bank-api/src/main/java/com/renkang/bank/model/po/UserPoints.java b/health-bank/health-bank-api/src/main/java/com/renkang/bank/model/po/UserPoints.java index 152d551..6b52e38 100644 --- a/health-bank/health-bank-api/src/main/java/com/renkang/bank/model/po/UserPoints.java +++ b/health-bank/health-bank-api/src/main/java/com/renkang/bank/model/po/UserPoints.java @@ -9,6 +9,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import org.jeecgframework.poi.excel.annotation.Excel; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; @@ -40,9 +41,11 @@ public class UserPoints implements Serializable { @Schema(title = "用户部门") private String orgCode; + @Excel(name = "当前可用积分", width = 15, orderNum = "7") @Schema(title = "当前可用积分") private BigDecimal points; + @Excel(name = "累计获得积分", width = 15, orderNum = "8") @Schema(title = "历史获得的积分总和") private BigDecimal addPointsSum; @@ -55,6 +58,7 @@ public class UserPoints implements Serializable { /** * 积分兑换记录总和,只记录积分兑换 */ + @Excel(name = "累计兑换积分", width = 15, orderNum = "9") @Schema(title = "历史兑换积分总和") private BigDecimal exchangePointsSum; @@ -71,6 +75,7 @@ public class UserPoints implements Serializable { @Schema(title = "最新一天消耗积分的总和") private BigDecimal latestDeductDaySum; + @Excel(name = "最近一次打卡时间", width = 25, format = "yyyy-MM-dd HH:mm:ss", orderNum = "10") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @Schema(title = "最新获得积分的日期") diff --git a/health-bank/health-bank-api/src/main/java/com/renkang/bank/model/vo/UserPointRankingVO.java b/health-bank/health-bank-api/src/main/java/com/renkang/bank/model/vo/UserPointRankingVO.java index afb702e..5256ff6 100644 --- a/health-bank/health-bank-api/src/main/java/com/renkang/bank/model/vo/UserPointRankingVO.java +++ b/health-bank/health-bank-api/src/main/java/com/renkang/bank/model/vo/UserPointRankingVO.java @@ -2,6 +2,7 @@ package com.renkang.bank.model.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import org.jeecgframework.poi.excel.annotation.Excel; import java.math.BigDecimal; @@ -14,27 +15,44 @@ import java.math.BigDecimal; @Data public class UserPointRankingVO { + @Excel(name = "排名", width = 15, orderNum = "8") @Schema(title = "排名") private Integer ranking; @Schema(title = "用户id") private String userId; + @Excel(name = "姓名", width = 15, orderNum = "3") @Schema(title = "姓名") private String realName; + @Excel(name = "员工编号", width = 15, orderNum = "4") + @Schema(title = "员工编号") + private String workNo; + + @Excel(name = "年龄", width = 15, orderNum = "6") + @Schema(title = "年龄") + private Integer age; + @Schema(title = "头像") private String avatar; + @Excel(name = "所属单位", width = 15, orderNum = "1") @Schema(title = "单位名称") private String orgName; + @Excel(name = "所属部门", width = 15, orderNum = "2") @Schema(title = "部门名称") private String deptName; @Schema(title = "性别") private Integer sex; + @Excel(name = "性别", width = 15, orderNum = "5") + @Schema(title = "性别") + private String sexName; + + @Excel(name = "日累计积分", width = 15, orderNum = "7") @Schema(title = "积分") private BigDecimal pointSum; } diff --git a/health-bank/health-bank-api/src/main/java/com/renkang/bank/model/vo/UserPointsDeductDetailsVO.java b/health-bank/health-bank-api/src/main/java/com/renkang/bank/model/vo/UserPointsDeductDetailsVO.java new file mode 100644 index 0000000..9d295fa --- /dev/null +++ b/health-bank/health-bank-api/src/main/java/com/renkang/bank/model/vo/UserPointsDeductDetailsVO.java @@ -0,0 +1,48 @@ +package com.renkang.bank.model.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 用户积分详情VO + * + * @author feng + * @date 2026-02-05 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@Schema(title = "用户积分详情VO", description = "用户积分详情VO") +public class UserPointsDeductDetailsVO { + + @Schema(title = "id") + private Long id; + + @Schema(title = "用户ID") + private String userId; + + @Excel(name = "积分变化", width = 15, orderNum = "2") + @Schema(title = "本次积分变化") + private BigDecimal points; + + @Excel(name = "支出信息", width = 25, orderNum = "1") + @Schema(title = "补充信息") + private String remark; + + @Schema(title = "关联业务ID(规则ID,礼品兑换订单Id等)") + private Long businessId; + + @Excel(name = "支出时间", width = 25, format = "yyyy-MM-dd HH:mm:ss", orderNum = "3") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @Schema(title = "创建时间") + private Date createTime; +} diff --git a/health-bank/health-bank-api/src/main/java/com/renkang/bank/model/vo/UserPointsDetailsVO.java b/health-bank/health-bank-api/src/main/java/com/renkang/bank/model/vo/UserPointsDetailsVO.java new file mode 100644 index 0000000..19e046c --- /dev/null +++ b/health-bank/health-bank-api/src/main/java/com/renkang/bank/model/vo/UserPointsDetailsVO.java @@ -0,0 +1,56 @@ +package com.renkang.bank.model.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +import java.util.Date; + +/** + * 用户积分详情VO + * + * @author feng + * @date 2026-02-05 + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@Schema(title = "用户积分详情VO", description = "用户积分详情VO") +public class UserPointsDetailsVO { + + @Schema(title = "id") + private Long id; + + @Schema(title = "用户ID") + private String userId; + + @Excel(name = "积分变化", width = 15, orderNum = "4") + @Schema(title = "本次积分变化") + private BigDecimal points; + + @Excel(name = "补充信息", width = 15, orderNum = "2") + @Schema(title = "补充信息") + private String remark; + + @Schema(title = "关联业务ID(规则ID,礼品兑换订单Id等)") + private Long businessId; + + @Excel(name = "健康行为", width = 25, orderNum = "1") + @Schema(title = "关联业务详情(可选择性的冗余业务详情:待定)") + private String businessInfo; + + @Excel(name = "打卡时间", width = 25, format = "yyyy-MM-dd HH:mm:ss", orderNum = "5") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + @Schema(title = "创建时间") + private Date createTime; + + @Excel(name = "行为周期", width = 15, replace = {"次_1", "日_2", "周_3", "月_4", "季度_5", "年_6"}, orderNum = "3") + @Schema(title = "问答频次(1-单次,2-日/次,3-周/次,4-月/次,5-季度/次,6-年/次)") + private Integer frequency; +} diff --git a/health-bank/health-bank-api/src/main/java/com/renkang/bank/model/vo/UserPointsListVO.java b/health-bank/health-bank-api/src/main/java/com/renkang/bank/model/vo/UserPointsListVO.java index ff22190..2797fb1 100644 --- a/health-bank/health-bank-api/src/main/java/com/renkang/bank/model/vo/UserPointsListVO.java +++ b/health-bank/health-bank-api/src/main/java/com/renkang/bank/model/vo/UserPointsListVO.java @@ -4,6 +4,7 @@ import com.renkang.bank.model.po.UserPoints; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import lombok.EqualsAndHashCode; +import org.jeecgframework.poi.excel.annotation.Excel; /** * @author pj @@ -15,21 +16,27 @@ import lombok.EqualsAndHashCode; @Data public class UserPointsListVO extends UserPoints { + @Excel(name = "姓名", width = 15, orderNum = "3") @Schema(title = "姓名") private String realName; + @Excel(name = "员工编号", width = 15, orderNum = "4") @Schema(title = "员工编号") private String workNo; + @Excel(name = "所属单位", width = 15, orderNum = "1") @Schema(title = "所属单位名称") private String orgName; + @Excel(name = "所属部门", width = 15, orderNum = "2") @Schema(title = "所属部门名称") private String deptName; + @Excel(name = "性别", width = 15, orderNum = "5") @Schema(title = "性别") private String sexName; + @Excel(name = "年龄", width = 15, orderNum = "6") @Schema(title = "年龄") private Integer age; } diff --git a/health-bank/health-bank-biz/src/main/java/com/renkang/bank/controller/UserPointsController.java b/health-bank/health-bank-biz/src/main/java/com/renkang/bank/controller/UserPointsController.java index 3d1b165..359a1ce 100644 --- a/health-bank/health-bank-biz/src/main/java/com/renkang/bank/controller/UserPointsController.java +++ b/health-bank/health-bank-biz/src/main/java/com/renkang/bank/controller/UserPointsController.java @@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.renkang.bank.model.dto.UpdUserPointsDTO; import com.renkang.bank.model.dto.UserPointsPageDTO; import com.renkang.bank.model.dto.UserPointsRankingDTO; -import com.renkang.bank.model.po.UserPointsDetails; import com.renkang.bank.model.vo.*; import com.renkang.bank.service.IUserPointsService; import io.swagger.v3.oas.annotations.Operation; @@ -30,9 +29,9 @@ public class UserPointsController { private IUserPointsService iUserPointsService; @Operation(summary = "测试积分变更", description = "测试积分变更") - @PostMapping(value = "/updateUserPoints") - public Result updateUserPoints(@RequestBody UpdUserPointsDTO dto) { - return Result.OK(iUserPointsService.updateUserPoints(dto)); + @PostMapping(value = "/testUpdateUserPoints") + public Result testUpdateUserPoints(@RequestBody UpdUserPointsDTO dto) { + return Result.OK(iUserPointsService.testUpdateUserPoints(dto)); } @Operation(summary = "用户积分信息-分页列表", description = "用户积分信息-分页列表") @@ -41,12 +40,26 @@ public class UserPointsController { return Result.OK(iUserPointsService.pageList(dto)); } + @Operation(summary = "用户积分信息-分页列表(导出)", description = "用户积分信息-分页列表(导出)") + @PostMapping(value = "/exportUserPoints") + public Result exportUserPoints(@RequestBody UserPointsPageDTO dto) { + iUserPointsService.exportUserPoints(dto); + return Result.OK("导出成功,请在导出记录查看"); + } + @Operation(summary = "用户积分信息-积分明细", description = "用户积分信息-积分明细") @PostMapping(value = "/detailPageList") - public Result> detailPageList(@RequestBody UserPointsPageDTO dto) { + public Result> detailPageList(@RequestBody UserPointsPageDTO dto) { return Result.OK(iUserPointsService.detailPageList(dto)); } + @Operation(summary = "用户积分信息-积分明细(导出)", description = "用户积分信息-积分明细(导出)") + @PostMapping(value = "/exportPointsDetail") + public Result exportPointsDetail(@RequestBody UserPointsPageDTO dto) { + iUserPointsService.exportPointsDetail(dto); + return Result.OK("导出成功,请在导出记录查看"); + } + @Operation(summary = "用户积分信息-扣除积分", description = "用户积分信息-扣除积分") @PostMapping(value = "/deductPoint") public Result deductPoint(@RequestBody UpdUserPointsDTO dto) { @@ -59,6 +72,26 @@ public class UserPointsController { return Result.OK(iUserPointsService.clockInMonitor(dto)); } + @Operation(summary = "用户积分信息-员工打卡监测(导出)", description = "用户积分信息-员工打卡监测(导出)") + @PostMapping(value = "/exportClockInMonitor") + public Result exportClockInMonitor(@RequestBody UserPointsPageDTO dto) { + iUserPointsService.exportClockInMonitor(dto); + return Result.OK("导出成功,请在导出记录查看"); + } + + @Operation(summary = "用户积分信息-员工积分排名", description = "用户积分信息-员工积分排名") + @PostMapping(value = "/userRanking") + public Result> userRanking(@RequestBody UserPointsRankingDTO dto) { + return Result.OK(iUserPointsService.userRanking(dto)); + } + + @Operation(summary = "用户积分信息-员工积分排名(导出)", description = "用户积分信息-员工积分排名(导出)") + @PostMapping(value = "/exportUserRanking") + public Result exportUserRanking(@RequestBody UserPointsRankingDTO dto) { + iUserPointsService.exportUserRanking(dto); + return Result.OK("导出成功,请在导出记录查看"); + } + @Operation(summary = "用户积分信息-app我的积分", description = "用户积分信息-app我的积分") @GetMapping(value = "/app/myPoints") public Result myPoints() { diff --git a/health-bank/health-bank-biz/src/main/java/com/renkang/bank/mapper/UserPointsDetailsMapper.java b/health-bank/health-bank-biz/src/main/java/com/renkang/bank/mapper/UserPointsDetailsMapper.java index fb0d8a8..a2c8215 100644 --- a/health-bank/health-bank-biz/src/main/java/com/renkang/bank/mapper/UserPointsDetailsMapper.java +++ b/health-bank/health-bank-biz/src/main/java/com/renkang/bank/mapper/UserPointsDetailsMapper.java @@ -2,6 +2,7 @@ package com.renkang.bank.mapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.github.yulichang.base.MPJBaseMapper; +import com.renkang.bank.model.dto.UserPointsRankingDTO; import com.renkang.bank.model.po.UserPointsDetails; import com.renkang.bank.model.vo.UserPointRankingVO; import org.apache.ibatis.annotations.Mapper; @@ -11,6 +12,8 @@ import java.util.Date; @Mapper public interface UserPointsDetailsMapper extends MPJBaseMapper { + IPage userRanking(IPage page, Date startTime, Date endTime, UserPointsRankingDTO dto); + IPage pointRanking(IPage page, Date startTime, Date endTime, String secondOrgCode); } diff --git a/health-bank/health-bank-biz/src/main/java/com/renkang/bank/mapper/xml/UserPointsDetailsMapper.xml b/health-bank/health-bank-biz/src/main/java/com/renkang/bank/mapper/xml/UserPointsDetailsMapper.xml index ca5340e..55dbb1e 100644 --- a/health-bank/health-bank-biz/src/main/java/com/renkang/bank/mapper/xml/UserPointsDetailsMapper.xml +++ b/health-bank/health-bank-biz/src/main/java/com/renkang/bank/mapper/xml/UserPointsDetailsMapper.xml @@ -3,6 +3,53 @@ "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + +