Преглед изворни кода

【feat】【第二版开发】
1.增加README.md文件

1.完善开发技术文档
2.增加第二版数据库结构变动sql
3.根据实体变动优化代码

ChenYL пре 1 година
родитељ
комит
2b4974e20c
32 измењених фајлова са 917 додато и 328 уклоњено
  1. 148 0
      doc/sql/update-v2.sql
  2. 246 96
      doc/技术文档.md
  3. 57 0
      src/main/java/com/punchsettle/server/atomic/entity/LotteryInvestRecord.java
  4. 50 0
      src/main/java/com/punchsettle/server/atomic/entity/LotteryWinRecord.java
  5. 32 0
      src/main/java/com/punchsettle/server/atomic/entity/PunchIn.java
  6. 13 0
      src/main/java/com/punchsettle/server/atomic/entity/PunchInRecord.java
  7. 12 0
      src/main/java/com/punchsettle/server/atomic/entity/PunchInRecordSettlementRela.java
  8. 49 0
      src/main/java/com/punchsettle/server/atomic/entity/SysDict.java
  9. 55 0
      src/main/java/com/punchsettle/server/atomic/entity/SysDictItem.java
  10. 31 0
      src/main/java/com/punchsettle/server/atomic/entity/User.java
  11. 0 50
      src/main/java/com/punchsettle/server/atomic/entity/UserReward.java
  12. 13 0
      src/main/java/com/punchsettle/server/atomic/mapper/LotteryInvestRecordMapper.java
  13. 13 0
      src/main/java/com/punchsettle/server/atomic/mapper/LotteryWinRecordMapper.java
  14. 13 0
      src/main/java/com/punchsettle/server/atomic/mapper/SysDictItemMapper.java
  15. 13 0
      src/main/java/com/punchsettle/server/atomic/mapper/SysDictMapper.java
  16. 2 1
      src/main/java/com/punchsettle/server/atomic/mapper/UserMapper.java
  17. 0 15
      src/main/java/com/punchsettle/server/atomic/mapper/UserRewardMapper.java
  18. 10 0
      src/main/java/com/punchsettle/server/atomic/service/ILotteryInvestRecordService.java
  19. 10 0
      src/main/java/com/punchsettle/server/atomic/service/ILotteryWinRecordService.java
  20. 10 0
      src/main/java/com/punchsettle/server/atomic/service/ISysDictItemService.java
  21. 10 0
      src/main/java/com/punchsettle/server/atomic/service/ISysDictService.java
  22. 0 46
      src/main/java/com/punchsettle/server/atomic/service/IUserRewardService.java
  23. 13 0
      src/main/java/com/punchsettle/server/atomic/service/IUserService.java
  24. 14 0
      src/main/java/com/punchsettle/server/atomic/service/impl/LotteryInvestRecordServiceImpl.java
  25. 14 0
      src/main/java/com/punchsettle/server/atomic/service/impl/LotteryWinRecordServiceImpl.java
  26. 14 0
      src/main/java/com/punchsettle/server/atomic/service/impl/SysDictItemServiceImpl.java
  27. 14 0
      src/main/java/com/punchsettle/server/atomic/service/impl/SysDictServiceImpl.java
  28. 0 75
      src/main/java/com/punchsettle/server/atomic/service/impl/UserRewardServiceImpl.java
  29. 21 0
      src/main/java/com/punchsettle/server/atomic/service/impl/UserServiceImpl.java
  30. 16 14
      src/main/java/com/punchsettle/server/service/manager/impl/RewardManagerImpl.java
  31. 18 19
      src/main/java/com/punchsettle/server/service/manager/impl/TaskManagerImpl.java
  32. 6 12
      src/main/java/com/punchsettle/server/service/manager/impl/UserManagerImpl.java

+ 148 - 0
doc/sql/update-v2.sql

@@ -0,0 +1,148 @@
+ALTER TABLE punch_settle.punch_in MODIFY COLUMN reward_num int DEFAULT 1 NOT NULL COMMENT '奖励倍数';
+
+ALTER TABLE punch_settle.punch_in ADD category INT DEFAULT 0 NOT NULL COMMENT '打卡类型(0-单次打卡,1-计数、2计时)';
+ALTER TABLE punch_settle.punch_in CHANGE category category INT DEFAULT 0 NOT NULL COMMENT '打卡类型(0-单次打卡,1-计数、2计时)' AFTER reward_num;
+ALTER TABLE punch_settle.punch_in ADD rule int NULL COMMENT '比较规则(0-大于,1-大于等于,2-小于,3-小于等于)';
+ALTER TABLE punch_settle.punch_in CHANGE rule rule int NULL COMMENT '比较规则(0-大于,1-大于等于,2-小于,3-小于等于)' AFTER category;
+ALTER TABLE punch_settle.punch_in ADD count_track int NULL COMMENT '次数记录';
+ALTER TABLE punch_settle.punch_in CHANGE count_track count_track int NULL COMMENT '次数记录' AFTER rule;
+ALTER TABLE punch_settle.punch_in ADD time_track TIME NULL COMMENT '时间记录';
+ALTER TABLE punch_settle.punch_in CHANGE time_track time_track TIME NULL COMMENT '时间记录' AFTER count_track;
+ALTER TABLE punch_settle.punch_in ADD description varchar(300) NULL COMMENT '任务描述';
+ALTER TABLE punch_settle.punch_in CHANGE description description varchar(300) NULL COMMENT '任务描述' AFTER time_track;
+
+ALTER TABLE punch_settle.punch_in_record ADD count_track int NULL COMMENT '次数记录';
+ALTER TABLE punch_settle.punch_in_record CHANGE count_track count_track int NULL COMMENT '次数记录' AFTER punch_in_date;
+ALTER TABLE punch_settle.punch_in_record ADD time_track TIME NULL COMMENT '时间记录';
+ALTER TABLE punch_settle.punch_in_record CHANGE time_track time_track TIME NULL COMMENT '时间记录' AFTER count_track;
+
+ALTER TABLE punch_settle.punch_in_record_settlement_rela ADD reward_num INT DEFAULT 1 NOT NULL COMMENT '奖励倍数';
+ALTER TABLE punch_settle.punch_in_record_settlement_rela CHANGE reward_num reward_num INT DEFAULT 1 NOT NULL COMMENT '奖励倍数' AFTER settlement_id;
+ALTER TABLE punch_settle.punch_in_record_settlement_rela ADD category INT DEFAULT 0 NOT NULL COMMENT '打卡类型(0-单次打卡,1-计数、2计时)';
+ALTER TABLE punch_settle.punch_in_record_settlement_rela CHANGE category category INT DEFAULT 0 NOT NULL COMMENT '打卡类型(0-单次打卡,1-计数、2计时)' AFTER reward_num;
+ALTER TABLE punch_settle.punch_in_record_settlement_rela ADD rule int NULL COMMENT '比较规则(0-大于,1-大于等于,2-小于,3-小于等于)';
+ALTER TABLE punch_settle.punch_in_record_settlement_rela CHANGE rule rule int NULL COMMENT '比较规则(0-大于,1-大于等于,2-小于,3-小于等于)' AFTER category;
+
+RENAME TABLE punch_settle.user_reward TO punch_settle.user_ext;
+ALTER TABLE punch_settle.user_ext
+COMMENT='用户拓展数据表';
+
+ALTER TABLE punch_settle.user_ext ADD lottery_invest_amount decimal(10,2) DEFAULT 0 NOT NULL COMMENT '彩票投入金额(元)';
+ALTER TABLE punch_settle.user_ext CHANGE lottery_invest_amount lottery_invest_amount decimal(10,2) DEFAULT 0 NOT NULL COMMENT '彩票投入金额(元)' AFTER claimed_reward_num;
+ALTER TABLE punch_settle.user_ext ADD lottery_win_amount decimal(10,2) DEFAULT 0 NOT NULL COMMENT '彩票中奖金额(元)';
+ALTER TABLE punch_settle.user_ext CHANGE lottery_win_amount lottery_win_amount decimal(10,2) DEFAULT 0 NOT NULL COMMENT '彩票中奖金额(元)' AFTER lottery_invest_amount;
+ALTER TABLE punch_settle.user_ext MODIFY COLUMN total_reward_num int DEFAULT 0 NOT NULL COMMENT '总奖励数';
+
+CREATE TABLE `lottery_invest_record` (
+  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `user_id` bigint NOT NULL COMMENT '用户表主键',
+  `source` varchar(100) NOT NULL COMMENT '来源',
+  `category` varchar(100) NOT NULL COMMENT '种类',
+  `invest_amount` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '投入金额(元)',
+  `created_by` bigint NOT NULL COMMENT '创建人',
+  `creation_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  `last_updated_by` bigint NOT NULL COMMENT '最后更新人',
+  `last_update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
+  `version` bigint NOT NULL DEFAULT '1' COMMENT '版本号',
+  `delete_flag` tinyint NOT NULL DEFAULT '0' COMMENT '逻辑删除标志(0-未删除,1-已删除)',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='彩票投入记录';
+
+CREATE TABLE `lottery_win_record` (
+  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `user_id` bigint NOT NULL COMMENT '用户表主键',
+  `source` varchar(100) NOT NULL COMMENT '来源',
+  `category` varchar(100) NOT NULL COMMENT '种类',
+  `win_amount` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '中奖金额(元)',
+  `created_by` bigint NOT NULL COMMENT '创建人',
+  `creation_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  `last_updated_by` bigint NOT NULL COMMENT '最后更新人',
+  `last_update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
+  `version` bigint NOT NULL DEFAULT '1' COMMENT '版本号',
+  `delete_flag` tinyint NOT NULL DEFAULT '0' COMMENT '逻辑删除标志(0-未删除,1-已删除)',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='彩票中奖记录';
+
+CREATE TABLE `sys_dict` (
+  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `name` varchar(30) NOT NULL COMMENT '名称(键)',
+  `value` varchar(100) NOT NULL COMMENT '值',
+  `description` varchar(200) NOT NULL COMMENT '描述',
+  `status` int DEFAULT NULL COMMENT '状态(1-启用,0-失效)',
+  `created_by` bigint NOT NULL COMMENT '创建人',
+  `creation_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  `last_updated_by` bigint NOT NULL COMMENT '最后更新人',
+  `last_update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
+  `version` bigint NOT NULL DEFAULT '1' COMMENT '版本号',
+  `delete_flag` tinyint NOT NULL DEFAULT '0' COMMENT '逻辑删除标志(0-未删除,1-已删除)',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='系统字典表';
+
+ALTER TABLE punch_settle.sys_dict MODIFY COLUMN status int DEFAULT 1 NULL COMMENT '状态(1-启用,0-失效)';
+
+CREATE TABLE `sys_dict_item` (
+  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `dict_id` bigint NOT NULL COMMENT '字典主键',
+  `name` varchar(30) NOT NULL COMMENT '名称(键)',
+  `value` varchar(100) NOT NULL COMMENT '值',
+  `description` varchar(200) NOT NULL COMMENT '描述',
+  `status` int DEFAULT NULL COMMENT '状态(1-启用,0-失效)',
+  `created_by` bigint NOT NULL COMMENT '创建人',
+  `creation_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
+  `last_updated_by` bigint NOT NULL COMMENT '最后更新人',
+  `last_update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后更新时间',
+  `version` bigint NOT NULL DEFAULT '1' COMMENT '版本号',
+  `delete_flag` tinyint NOT NULL DEFAULT '0' COMMENT '逻辑删除标志(0-未删除,1-已删除)',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='系统字典项表';
+
+ALTER TABLE punch_settle.sys_dict_item MODIFY COLUMN status int DEFAULT 1 NULL COMMENT '状态(1-启用,0-失效)';
+
+DROP TABLE punch_settle.settlement_notify_task;
+
+ALTER TABLE punch_settle.`user` DROP COLUMN reward_num;
+ALTER TABLE punch_settle.`user` DROP COLUMN claimed_reward_num;
+
+ALTER TABLE punch_settle.`user` ADD total_reward_num INT DEFAULT 0 NOT NULL COMMENT '总奖励数';
+ALTER TABLE punch_settle.`user` CHANGE total_reward_num total_reward_num INT DEFAULT 0 NOT NULL COMMENT '总奖励数' AFTER avatar;
+ALTER TABLE punch_settle.`user` ADD unclaimed_reward_num INT DEFAULT 0 NOT NULL COMMENT '未领取奖励数';
+ALTER TABLE punch_settle.`user` CHANGE unclaimed_reward_num unclaimed_reward_num INT DEFAULT 0 NOT NULL COMMENT '未领取奖励数' AFTER total_reward_num;
+ALTER TABLE punch_settle.`user` ADD claimed_reward_num INT DEFAULT 0 NOT NULL COMMENT '已领取奖励数';
+ALTER TABLE punch_settle.`user` CHANGE claimed_reward_num claimed_reward_num INT DEFAULT 0 NOT NULL COMMENT '已领取奖励数' AFTER unclaimed_reward_num;
+ALTER TABLE punch_settle.`user` ADD lottery_invest_amount decimal(10,2) DEFAULT 0.00 NOT NULL COMMENT '彩票投入金额(元)';
+ALTER TABLE punch_settle.`user` CHANGE lottery_invest_amount lottery_invest_amount decimal(10,2) DEFAULT 0.00 NOT NULL COMMENT '彩票投入金额(元)' AFTER claimed_reward_num;
+ALTER TABLE punch_settle.`user` ADD lottery_win_amount decimal(10,2) DEFAULT 0.00 NOT NULL COMMENT '彩票中奖金额(元)';
+ALTER TABLE punch_settle.`user` CHANGE lottery_win_amount lottery_win_amount decimal(10,2) DEFAULT 0.00 NOT NULL COMMENT '彩票中奖金额(元)' AFTER lottery_invest_amount;
+
+update user u, user_ext ue
+set u.total_reward_num = ue.total_reward_num ,
+u.unclaimed_reward_num = ue.unclaimed_reward_num ,
+u.claimed_reward_num = ue.claimed_reward_num ,
+u.lottery_invest_amount = ue.lottery_invest_amount ,
+u.lottery_win_amount = ue.lottery_win_amount
+where u.id = ue.user_id;
+
+ALTER TABLE punch_settle.sys_dict CHANGE value dict_code varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '字典项编码';
+ALTER TABLE punch_settle.sys_dict MODIFY COLUMN dict_code varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '字典项编码';
+ALTER TABLE punch_settle.sys_dict CHANGE name dict_name varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '字典名称';
+ALTER TABLE punch_settle.sys_dict MODIFY COLUMN dict_name varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '字典名称';
+ALTER TABLE punch_settle.sys_dict CHANGE dict_code dict_code varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '字典项编码' AFTER id;
+ALTER TABLE punch_settle.sys_dict MODIFY COLUMN dict_code varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '字典编码';
+ALTER TABLE punch_settle.sys_dict
+COMMENT='系统字典';
+ALTER TABLE punch_settle.sys_dict_item CHANGE name item_code varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '字典项编码';
+ALTER TABLE punch_settle.sys_dict_item MODIFY COLUMN item_code varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '字典项编码';
+ALTER TABLE punch_settle.sys_dict_item CHANGE value item_name varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '字典项名称';
+ALTER TABLE punch_settle.sys_dict_item MODIFY COLUMN item_name varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT '字典项名称';
+ALTER TABLE punch_settle.sys_dict MODIFY COLUMN description varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '描述';
+ALTER TABLE punch_settle.sys_dict_item MODIFY COLUMN description varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '描述';
+ALTER TABLE punch_settle.sys_dict_item MODIFY COLUMN status int DEFAULT 1 NOT NULL COMMENT '状态(1-启用,0-失效)';
+ALTER TABLE punch_settle.sys_dict MODIFY COLUMN status int DEFAULT 1 NOT NULL COMMENT '状态(1-启用,0-失效)';
+INSERT INTO punch_settle.sys_dict (id, dict_code, dict_name, description, status, created_by, creation_time, last_updated_by, last_update_time, version, delete_flag) VALUES(1, 'LOTTERY_SOURCE', '彩票来源', NULL, 1, 1, '2024-12-12 18:36:59', 1, '2024-12-12 18:37:42', 1, 0);
+INSERT INTO punch_settle.sys_dict (id, dict_code, dict_name, description, status, created_by, creation_time, last_updated_by, last_update_time, version, delete_flag) VALUES(2, 'LOTTERY_SCRATCH_OFF_CATEGORY', '彩票刮刮乐种类', NULL, 1, 1, '2024-12-12 18:38:27', 1, '2024-12-12 18:38:27', 1, 0);
+INSERT INTO punch_settle.sys_dict_item (id, dict_id, item_code, item_name, description, status, created_by, creation_time, last_updated_by, last_update_time, version, delete_flag) VALUES(1, 1, 'WELFARE_LOTTERY', '福利彩票', NULL, 1, 1, '2024-12-12 18:39:00', 1, '2024-12-12 18:39:00', 1, 0);
+INSERT INTO punch_settle.sys_dict_item (id, dict_id, item_code, item_name, description, status, created_by, creation_time, last_updated_by, last_update_time, version, delete_flag) VALUES(2, 1, 'SPORTS_LOTTERY', '体育彩票', NULL, 1, 1, '2024-12-12 18:39:56', 1, '2024-12-12 18:39:56', 1, 0);
+INSERT INTO punch_settle.sys_dict_item (id, dict_id, item_code, item_name, description, status, created_by, creation_time, last_updated_by, last_update_time, version, delete_flag) VALUES(3, 2, 'XINGYUN88', '幸运88', NULL, 1, 1, '2024-12-12 18:40:06', 1, '2024-12-12 18:40:06', 1, 0);
+INSERT INTO punch_settle.sys_dict_item (id, dict_id, item_code, item_name, description, status, created_by, creation_time, last_updated_by, last_update_time, version, delete_flag) VALUES(4, 2, 'CHAOGEILI', '超给力', NULL, 1, 1, '2024-12-12 18:40:06', 1, '2024-12-12 18:40:06', 1, 0);
+
+DROP TABLE punch_settle.user_ext;

+ 246 - 96
doc/技术文档.md

@@ -12,90 +12,192 @@ ui设计工具:即时设计
 
 
 
-## 系统设计
+待增加功能
 
+1. 结算规则要支持节假日补充规则
+2. 打卡任务的年视图的统计功能
 
 
-### 功能设计
+
+## 系统功能
 
 * 用户
 
   1. 微信用户登录
 
-     说明:简单记录下头像、微信id、昵称,然后用于区分即可
+     说明:简单获取头像、微信openid、昵称,然后用于后台数据处理和前端显示即可
+
+  2. 昵称修改(这个最后开发)
 
-  2. 用户注销?-这个不要应该也可以
+  3. 头像修改(这个最后开发)
 
 * 打卡任务
 
   1. 查询当前用户拥有的打卡任务列表
-  2. 新建任务
-  3. 编辑任务
-  4. 删除任务
-  5. 用户完成任务
+
+     显示内容:任务名称、任务描述、奖励数、全勤奖励标识、周末奖励标识、本周打卡记录,今日打卡情况
+
+     说明:今日打卡情况未完成时的状态,根据不同的打卡类型有不同的显示
+
+     * 打卡类型:单次打卡,未完成显示“完成”
+     * 打卡类型:计数,未完成显示“计数”,并且显示当前已打卡次数
+     * 打卡类型:计时,未完成显示“计时”,并且显示当前已记录的打卡时间
+
+  2. 新建/编辑任务
+
+     显示内容:任务名称、奖励数、全勤奖励标识、周末奖励标识、任务描述,打卡类型,打卡配置(四种比较规则、两种数值类型)
+
+     说明:目前有3种打卡类型,打卡配置根据打卡类型的不同而有所变化,从而形成丰富的打卡规则
+
+     * 打卡类型:单次打卡、计数、计时
+     * 打卡配置:
+       * 单次打卡:这个不需要额外配置
+       * 计数:需要设置比较规则和数值
+       * 计时:需要设置比较规则和时间
+     * 比较规则:大于、小于、大于等于、小于等于
+
+  3. 删除任务
+
+  4. 打卡
+
+  5. 补打卡
+
+  6. 误打卡撤销
+
+  7. 归档
+
+  8. 针对单一任务查询时间范围内的打卡信息
+
+     显示内容:具体到天是否已打卡、打卡记录、打卡统计(打卡次数、全勤率)
 
 * 奖励
 
   1. 查询当前用户拥有的奖励数
-  2. 领取奖励
+
+     显示内容:总奖励数、已领取奖励数、待领取奖励数
+
+  2. 领取奖励(部分领取、一次性全部领取)
+
+     说明:全部领取功能通过前端页面支持,后端不需要额外开发
+
+  3. 按时间范围查询当前用户的领取奖励记录
+
+* 刮刮乐
+
+  1. 查询当前用户的投入刮刮乐信息
+
+     显示内容:投入金额、中奖金额
+
+  2. 追加投入金额
+
+  3. 添加中奖记录
+
+  4. 按时间范围的刮刮乐查询记录
+
+     显示内容:投入金额记录、中奖记录
+
+* 结算
+
+  1. 手动运维接口,可以指定具体结算日期
+  2. 按时间范围查询当前用户的结算记录
 
 * 系统
 
   1. 每晚自动结算
 
-     说明:每日凌晨把昨天完成的任务获得的奖励进行自动统计
 
-  2. 每天自动推送结算通知(第二版再增加这个功能)
 
-     说明:把每日结算结果推送到微信
 
 
+## 字典
 
-### 表设计
 
 
+### 彩票来源
 
-#### 用户表
+字典名称:彩票来源
 
-表名:user
+字典编码:LOTTERY_SOURCE
 
-| 字段             | 类型          | 描述                               |
-| ---------------- | ------------- | ---------------------------------- |
-| id               | bigint        | 主键                               |
-| open_id          | varchar(128)  | 微信id                             |
-| nickname         | varchar(100)  | 微信昵称                           |
-| avatar           | varchar(1000) | 微信头像url                        |
-| created_by       | bigint        | 创建人                             |
-| creation_time    | timestamp     | 创建时间                           |
-| last_updated_by  | bigint        | 最后更新人                         |
-| last_update_time | timestamp     | 最后更新时间                       |
-| version          | bigint        | 版本号                             |
-| delete_flag      | tinyint       | 逻辑删除标志(0-未删除,1-已删除) |
+字典项:
 
+| 字典项编码      | 字典名称 |
+| --------------- | -------- |
+| WELFARE_LOTTERY | 福利彩票 |
+| SPORTS_LOTTERY  | 体育彩票 |
 
 
-#### 打卡任务表
 
-表名:punch_in
+### 彩票刮刮乐种类
+
+字典名称:彩票刮刮乐种类
+
+字典编码:LOTTERY_SCRATCH_OFF_CATEGORY
+
+字典项
+
+| 字典项编码 | 字典名称 |
+| ---------- | -------- |
+| XINGYUN88  | 幸运88   |
+| CHAOGEILI  | 超给力   |
+
+
+
+## 表设计
+
+
 
-| 字段                 | 类型         | 描述                               |
-| -------------------- | ------------ | ---------------------------------- |
-| id                   | bigint       | 主键                               |
-| task_name            | varchar(128) | 任务名称                           |
-| reward_num           | int          | 奖励倍数                           |
-| weekend_double_flag  | tinyint      | 是否启用周末双倍标志(0-不是,1-是) |
-| full_attendance_flag | tinyint      | 是否启用全勤奖励标志(0-不是,1-是) |
-| archive_flag         | tinyint      | 是否归档标志(0-不是,1-是)         |
-| created_by           | bigint       | 创建人                             |
-| creation_time        | timestamp    | 创建时间                           |
-| last_updated_by      | bigint       | 最后更信人                         |
-| last_update_time     | timestamp    | 最后更新时间                       |
-| version              | bigint       | 版本号                             |
-| delete_flag          | tinyint      | 逻辑删除标志(0-未删除,1-已删除) |
+### 用户表
+
+表名:user
+
+| 字段                  | 类型          | 描述                               |
+| --------------------- | ------------- | ---------------------------------- |
+| id                    | bigint        | 主键                               |
+| open_id               | varchar(128)  | 微信id                             |
+| nickname              | varchar(100)  | 微信昵称                           |
+| avatar                | varchar(1000) | 微信头像url                        |
+| total_reward_num      | int           | 总奖励数                           |
+| unclaimed_reward_num  | int           | 未领取奖励数                       |
+| claimed_reward_num    | int           | 已领取奖励数                       |
+| lottery_invest_amount | decimal(10,2) | 彩票投入金额(元)                   |
+| lottery_win_amount    | decimal(10,2) | 彩票中奖金额(元)                   |
+| created_by            | bigint        | 创建人                             |
+| creation_time         | timestamp     | 创建时间                           |
+| last_updated_by       | bigint        | 最后更新人                         |
+| last_update_time      | timestamp     | 最后更新时间                       |
+| version               | bigint        | 版本号                             |
+| delete_flag           | tinyint       | 逻辑删除标志(0-未删除,1-已删除) |
 
 
 
-#### 打卡任务记录表
+### 打卡任务表
+
+表名:punch_in
+
+| 字段                 | 类型         | 描述                                             |
+| -------------------- | ------------ | ------------------------------------------------ |
+| id                   | bigint       | 主键                                             |
+| task_name            | varchar(128) | 任务名称                                         |
+| reward_num           | int          | 奖励倍数                                         |
+| category             | int          | 打卡类型(0-单次打卡,1-计数、2计时)              |
+| rule                 | int          | 比较规则(0-大于,1-大于等于,2-小于,3-小于等于) |
+| count_track          | int          | 次数记录                                         |
+| time_track           | time         | 时间记录                                         |
+| description          | varchar(300) | 任务描述                                         |
+| weekend_double_flag  | tinyint      | 是否启用周末双倍标志(0-不是,1-是)               |
+| full_attendance_flag | tinyint      | 是否启用全勤奖励标志(0-不是,1-是)               |
+| archive_flag         | tinyint      | 是否归档标志(0-不是,1-是)                       |
+| created_by           | bigint       | 创建人                                           |
+| creation_time        | timestamp    | 创建时间                                         |
+| last_updated_by      | bigint       | 最后更信人                                       |
+| last_update_time     | timestamp    | 最后更新时间                                     |
+| version              | bigint       | 版本号                                           |
+| delete_flag          | tinyint      | 逻辑删除标志(0-未删除,1-已删除)               |
+
+
+
+### 打卡任务记录表
 
 表名:punch_in_record
 
@@ -104,6 +206,8 @@ ui设计工具:即时设计
 | id               | bigint      | 主键                               |
 | punch_in_id      | bigint      | 打卡任务表主键                     |
 | punch_in_date    | varchar(10) | 打卡日期                           |
+| count_track      | int         | 次数记录                           |
+| time_track       | time        | 时间记录                           |
 | created_by       | bigint      | 创建人                             |
 | creation_time    | timestamp   | 创建时间                           |
 | last_updated_by  | bigint      | 最后更信人                         |
@@ -113,7 +217,7 @@ ui设计工具:即时设计
 
 
 
-#### 打卡任务结算表
+### 打卡任务结算表
 
 表名:punch_in_settlement
 
@@ -138,45 +242,28 @@ ui设计工具:即时设计
 
 
 
-#### 打卡任务记录与结算关联表
+### 打卡任务记录与结算关联表
 
 表名:punch_in_record_settlement_rela
 
-| 字段             | 类型      | 描述                               |
-| ---------------- | --------- | ---------------------------------- |
-| id               | bigint    | 主键                               |
-| record_id        | bigint    | 打卡任务记录表ID                   |
-| settlement_id    | bigint    | 打卡任务结算表ID                   |
-| created_by       | bigint    | 创建人                             |
-| creation_time    | timestamp | 创建时间                           |
-| last_updated_by  | bigint    | 最后更信人                         |
-| last_update_time | timestamp | 最后更新时间                       |
-| version          | bigint    | 版本号                             |
-| delete_flag      | tinyint   | 逻辑删除标志(0-未删除,1-已删除) |
+| 字段             | 类型      | 描述                                                     |
+| ---------------- | --------- | -------------------------------------------------------- |
+| id               | bigint    | 主键                                                     |
+| record_id        | bigint    | 打卡任务记录表ID                                         |
+| settlement_id    | bigint    | 打卡任务结算表ID                                         |
+| reward_num       | int       | 奖励倍数                                                 |
+| category         | int       | 打卡类型(0-单次打卡,1-计数、2计时)打卡类型              |
+| rule             | int       | 比较规则(0-大于,1-大于等于,2-小于,3-小于等于)比较规则 |
+| created_by       | bigint    | 创建人                                                   |
+| creation_time    | timestamp | 创建时间                                                 |
+| last_updated_by  | bigint    | 最后更信人                                               |
+| last_update_time | timestamp | 最后更新时间                                             |
+| version          | bigint    | 版本号                                                   |
+| delete_flag      | tinyint   | 逻辑删除标志(0-未删除,1-已删除)                       |
 
 
 
-#### 用户奖励数据表
-
-表名:user_reward
-
-| 字段                 | 类型      | 描述                               |
-| -------------------- | --------- | ---------------------------------- |
-| id                   | bigint    | 主键                               |
-| user_id              | bigint    | 用户表主键                         |
-| total_reward_num     | int       | 总奖励数                           |
-| unclaimed_reward_num | int       | 未领取奖励数                       |
-| claimed_reward_num   | int       | 已领取奖励数                       |
-| created_by           | bigint    | 创建人                             |
-| creation_time        | timestamp | 创建时间                           |
-| last_updated_by      | bigint    | 最后更新人                         |
-| last_update_time     | timestamp | 最后更新时间                       |
-| version              | bigint    | 版本号                             |
-| delete_flag          | tinyint   | 逻辑删除标志(0-未删除,1-已删除) |
-
-
-
-#### 领取奖励记录表
+### 领取奖励记录表
 
 表名:user_claim_reward_record
 
@@ -197,7 +284,7 @@ ui设计工具:即时设计
 
 
 
-#### 奖励结算定时任务执行记录表
+### 奖励结算定时任务执行记录表
 
 表名:settlement_task
 
@@ -220,7 +307,7 @@ ui设计工具:即时设计
 
 
 
-#### 通知定时任务执行记录表
+### ~~通知定时任务执行记录表(暂时无用)~~
 
 表名:settlement_notify_task
 
@@ -242,29 +329,92 @@ ui设计工具:即时设计
 
 
 
-#### 开发参考
+### 彩票投入记录
+
+表名:lottery_invest_record
+
+| 字段             | 类型          | 描述                               |
+| ---------------- | ------------- | ---------------------------------- |
+| id               | bigint        | 主键                               |
+| user_id          | bigint        | 用户主键                           |
+| source           | varchar(100)  | 来源                               |
+| category         | varchar(100)  | 种类                               |
+| invest_amount    | decimal(10,2) | 投入金额(元)                     |
+| created_by       | bigint        | 创建人                             |
+| creation_time    | timestamp     | 创建时间                           |
+| last_updated_by  | bigint        | 最后更信人                         |
+| last_update_time | timestamp     | 最后更新时间                       |
+| version          | bigint        | 版本号                             |
+| delete_flag      | tinyint       | 逻辑删除标志(0-未删除,1-已删除) |
 
-* [两种优雅的获取当前登录用户ID的方式](https://blog.csdn.net/tomorrow9813/article/details/131736382)
-* [学会自己编写Mybatis插件(拦截器)实现自定义需求](https://juejin.cn/post/7220321558103097404#heading-3)
-* [Mybatis拦截器教程及几个实用自定义拦截器分享](https://juejin.cn/post/7242129949179248700#heading-5)
 
 
+### 彩票中奖记录
 
-## IDEA设置
+表名:lottery_win_record
 
+| 字段             | 类型          | 描述                               |
+| ---------------- | ------------- | ---------------------------------- |
+| id               | bigint        | 主键                               |
+| source           | varchar(100)  | 来源                               |
+| category         | varchar(100)  | 种类                               |
+| win_amount       | decimal(10,2) | 中奖金额(元)                     |
+| created_by       | bigint        | 创建人                             |
+| creation_time    | timestamp     | 创建时间                           |
+| last_updated_by  | bigint        | 最后更信人                         |
+| last_update_time | timestamp     | 最后更新时间                       |
+| version          | bigint        | 版本号                             |
+| delete_flag      | tinyint       | 逻辑删除标志(0-未删除,1-已删除) |
+
+
+
+### 系统字典表
+
+表名:sys_dict
 
+| 字段             | 类型         | 描述                               |
+| ---------------- | ------------ | ---------------------------------- |
+| id               | bigint       | 主键                               |
+| dict_code        | varchar(100) | 字典编码                           |
+| dict_name        | varchar(100) | 字典名称                           |
+| description      | varchar(200) | 描述                               |
+| status           | int          | 状态(1-启用,0-失效)               |
+| created_by       | bigint       | 创建人                             |
+| creation_time    | timestamp    | 创建时间                           |
+| last_updated_by  | bigint       | 最后更信人                         |
+| last_update_time | timestamp    | 最后更新时间                       |
+| version          | bigint       | 版本号                             |
+| delete_flag      | tinyint      | 逻辑删除标志(0-未删除,1-已删除) |
 
-### 类注释模板
 
-模板
 
-```java
-/**
- * @author ${USER}
- * @version 1.0.0
- * @date ${DATE} ${TIME}
- * @description TODO
- */
-```
+### 系统字典项表
+
+表名:sys_dict_item
+
+| 字段             | 类型         | 描述                               |
+| ---------------- | ------------ | ---------------------------------- |
+| id               | bigint       | 主键                               |
+| dict_id          | bigint       | 字典表主键                         |
+| item_code        | varchar(100) | 字典项编码                         |
+| item_name        | varchar(100) | 字典项名称                         |
+| description      | varchar(200) | 描述                               |
+| status           | int          | 状态(1-启用,0-失效)               |
+| created_by       | bigint       | 创建人                             |
+| creation_time    | timestamp    | 创建时间                           |
+| last_updated_by  | bigint       | 最后更信人                         |
+| last_update_time | timestamp    | 最后更新时间                       |
+| version          | bigint       | 版本号                             |
+| delete_flag      | tinyint      | 逻辑删除标志(0-未删除,1-已删除) |
+
+
+
+
+
+## 开发参考
+
+* [两种优雅的获取当前登录用户ID的方式](https://blog.csdn.net/tomorrow9813/article/details/131736382)
+* [学会自己编写Mybatis插件(拦截器)实现自定义需求](https://juejin.cn/post/7220321558103097404#heading-3)
+* [Mybatis拦截器教程及几个实用自定义拦截器分享](https://juejin.cn/post/7242129949179248700#heading-5)
+
 
-参考:[IDEA 创建类注释模板](https://blog.csdn.net/GyaoG/article/details/120415660)

+ 57 - 0
src/main/java/com/punchsettle/server/atomic/entity/LotteryInvestRecord.java

@@ -0,0 +1,57 @@
+package com.punchsettle.server.atomic.entity;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @description 彩票投入记录
+ * @date 2024/12/12 18:53
+ */
+
+import com.punchsettle.server.common.entity.BaseEntity;
+import jakarta.persistence.Column;
+import jakarta.persistence.Table;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @description 彩票投入记录
+ * @date 2024/12/12 18:56
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Table(name = "lottery_invest_record")
+public class LotteryInvestRecord extends BaseEntity implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -4667296005259491578L;
+
+    /**
+     * 用户表主键
+     */
+    @Column(name = "user_id")
+    private Long userId;
+
+    /**
+     * 来源
+     */
+    @Column(name = "source")
+    private String source;
+
+    /**
+     * 种类
+     */
+    @Column(name = "category")
+    private String category;
+
+    /**
+     * 投入金额(元)
+     */
+    @Column(name = "invest_amount")
+    private BigDecimal investAmount;
+}

+ 50 - 0
src/main/java/com/punchsettle/server/atomic/entity/LotteryWinRecord.java

@@ -0,0 +1,50 @@
+package com.punchsettle.server.atomic.entity;
+
+import com.punchsettle.server.common.entity.BaseEntity;
+import jakarta.persistence.Column;
+import jakarta.persistence.Table;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @description 彩票中奖记录
+ * @date 2024/12/12 18:56
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Table(name = "lottery_win_record")
+public class LotteryWinRecord extends BaseEntity implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -3521710481088966503L;
+
+    /**
+     * 用户表主键
+     */
+    @Column(name = "user_id")
+    private Long userId;
+
+    /**
+     * 来源
+     */
+    @Column(name = "source")
+    private String source;
+
+    /**
+     * 种类
+     */
+    @Column(name = "category")
+    private String category;
+
+    /**
+     * 中奖金额(元)
+     */
+    @Column(name = "win_amount")
+    private BigDecimal winAmount;
+}

+ 32 - 0
src/main/java/com/punchsettle/server/atomic/entity/PunchIn.java

@@ -2,6 +2,8 @@ package com.punchsettle.server.atomic.entity;
 
 import java.io.Serial;
 import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
 
 import com.punchsettle.server.common.entity.BaseEntity;
 
@@ -36,6 +38,36 @@ public class PunchIn extends BaseEntity implements Serializable {
     @Column(name = "reward_num")
     private Integer rewardNum;
 
+    /**
+     * 打卡类型(0-单次打卡,1-计数、2计时)
+     */
+    @Column(name = "category")
+    private Integer category;
+
+    /**
+     * 比较规则(0-大于,1-大于等于,2-小于,3-小于等于)
+     */
+    @Column(name = "rule")
+    private Integer rule;
+
+    /**
+     * 次数记录
+     */
+    @Column(name = "count_track")
+    private Integer countTrack;
+
+    /**
+     * 时间记录
+     */
+    @Column(name = "time_track")
+    private LocalTime timeTrack;
+
+    /**
+     * 任务描述
+     */
+    @Column(name = "description")
+    private String description;
+
     /**
      * 是否启用周末双倍标志(0-不是,1-是)
      */

+ 13 - 0
src/main/java/com/punchsettle/server/atomic/entity/PunchInRecord.java

@@ -2,6 +2,7 @@ package com.punchsettle.server.atomic.entity;
 
 import java.io.Serial;
 import java.io.Serializable;
+import java.time.LocalTime;
 
 import com.punchsettle.server.common.entity.BaseEntity;
 
@@ -35,4 +36,16 @@ public class PunchInRecord extends BaseEntity implements Serializable {
      */
     @Column(name = "punch_in_date")
     private String punchInDate;
+
+    /**
+     * 次数记录
+     */
+    @Column(name = "count_track")
+    private Integer countTrack;
+
+    /**
+     * 时间记录
+     */
+    @Column(name = "time_track")
+    private LocalTime timeTrack;
 }

+ 12 - 0
src/main/java/com/punchsettle/server/atomic/entity/PunchInRecordSettlementRela.java

@@ -35,4 +35,16 @@ public class PunchInRecordSettlementRela extends BaseEntity implements Serializa
      */
     @Column(name = "settlement_id")
     private Long settlementId;
+
+    /**
+     * 打卡类型(0-单次打卡,1-计数、2计时)
+     */
+    @Column(name = "category")
+    private Integer category;
+
+    /**
+     * 比较规则(0-大于,1-大于等于,2-小于,3-小于等于)
+     */
+    @Column(name = "rule")
+    private Integer rule;
 }

+ 49 - 0
src/main/java/com/punchsettle/server/atomic/entity/SysDict.java

@@ -0,0 +1,49 @@
+package com.punchsettle.server.atomic.entity;
+
+import com.punchsettle.server.common.entity.BaseEntity;
+import jakarta.persistence.Column;
+import jakarta.persistence.Table;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @description 系统字典
+ * @date 2024/12/12 18:58
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Table(name = "sys_dict")
+public class SysDict extends BaseEntity implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -6968589703791460173L;
+
+    /**
+     * 字典编码
+     */
+    @Column(name = "dict_code")
+    private String dictCode;
+
+    /**
+     * 字典名称
+     */
+    @Column(name = "dict_name")
+    private String dictName;
+
+    /**
+     * 描述
+     */
+    @Column(name = "description")
+    private String description;
+
+    /**
+     * 状态(1-启用,0-失效)
+     */
+    @Column(name = "status")
+    private Integer status;
+}

+ 55 - 0
src/main/java/com/punchsettle/server/atomic/entity/SysDictItem.java

@@ -0,0 +1,55 @@
+package com.punchsettle.server.atomic.entity;
+
+import com.punchsettle.server.common.entity.BaseEntity;
+import jakarta.persistence.Column;
+import jakarta.persistence.Table;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @description 系统字典项表
+ * @date 2024/12/12 18:58
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Table(name = "sys_dict_item")
+public class SysDictItem extends BaseEntity implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = -4136809389672474430L;
+
+    /**
+     * 字典主键
+     */
+    @Column(name = "dict_id")
+    private Long dictId;
+
+    /**
+     * 字典项编码
+     */
+    @Column(name = "item_code")
+    private String itemCode;
+
+    /**
+     * 字典项名称
+     */
+    @Column(name = "item_name")
+    private String itemName;
+
+    /**
+     * 描述
+     */
+    @Column(name = "description")
+    private String description;
+
+    /**
+     * 状态(1-启用,0-失效)
+     */
+    @Column(name = "status")
+    private Integer status;
+}

+ 31 - 0
src/main/java/com/punchsettle/server/atomic/entity/User.java

@@ -2,6 +2,7 @@ package com.punchsettle.server.atomic.entity;
 
 import java.io.Serial;
 import java.io.Serializable;
+import java.math.BigDecimal;
 
 import com.punchsettle.server.common.entity.BaseEntity;
 
@@ -41,4 +42,34 @@ public class User extends BaseEntity implements Serializable {
      */
     @Column(name = "avatar")
     private String avatar;
+
+    /**
+     * 总奖励数
+     */
+    @Column(name = "total_reward_num")
+    private Integer totalRewardNum;
+
+    /**
+     * 未领取奖励数
+     */
+    @Column(name = "unclaimed_reward_num")
+    private Integer unclaimedRewardNum;
+
+    /**
+     * 已领取奖励数
+     */
+    @Column(name = "claimed_reward_num")
+    private Integer claimedRewardNum;
+
+    /**
+     * 彩票投入金额(元)
+     */
+    @Column(name = "lottery_invest_amount")
+    private BigDecimal lotteryInvestAmount;
+
+    /**
+     * 彩票中奖金额(元)
+     */
+    @Column(name = "lottery_win_amount")
+    private BigDecimal lotteryWinAmount;
 }

+ 0 - 50
src/main/java/com/punchsettle/server/atomic/entity/UserReward.java

@@ -1,50 +0,0 @@
-package com.punchsettle.server.atomic.entity;
-
-import java.io.Serial;
-import java.io.Serializable;
-
-import com.punchsettle.server.common.entity.BaseEntity;
-
-import jakarta.persistence.Column;
-import jakarta.persistence.Table;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-
-/**
- * @author tyuio
- * @version 1.0.0
- * @description 用户奖励数据表
- * @date 2024/11/25 20:39
- */
-@Data
-@EqualsAndHashCode(callSuper = true)
-@Table(name = "user_reward")
-public class UserReward extends BaseEntity implements Serializable {
-
-    @Serial
-    private static final long serialVersionUID = -4590939776485091913L;
-
-    /**
-     * 用户表主键
-     */
-    @Column(name = "user_id")
-    private Long userId;
-
-    /**
-     * 总奖励数
-     */
-    @Column(name = "total_reward_num")
-    private Integer totalRewardNum;
-
-    /**
-     * 未领取奖励数
-     */
-    @Column(name = "unclaimed_reward_num")
-    private Integer unclaimedRewardNum;
-
-    /**
-     * 已领取奖励数
-     */
-    @Column(name = "claimed_reward_num")
-    private Integer claimedRewardNum;
-}

+ 13 - 0
src/main/java/com/punchsettle/server/atomic/mapper/LotteryInvestRecordMapper.java

@@ -0,0 +1,13 @@
+package com.punchsettle.server.atomic.mapper;
+
+import com.punchsettle.server.atomic.entity.LotteryInvestRecord;
+import tk.mybatis.mapper.common.Mapper;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @description 彩票投入记录 Mapper
+ * @date 2024/12/12 19:05
+ */
+public interface LotteryInvestRecordMapper extends Mapper<LotteryInvestRecord> {
+}

+ 13 - 0
src/main/java/com/punchsettle/server/atomic/mapper/LotteryWinRecordMapper.java

@@ -0,0 +1,13 @@
+package com.punchsettle.server.atomic.mapper;
+
+import com.punchsettle.server.atomic.entity.LotteryWinRecord;
+import tk.mybatis.mapper.common.Mapper;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @description 彩票中奖记录 Mapper
+ * @date 2024/12/12 19:06
+ */
+public interface LotteryWinRecordMapper extends Mapper<LotteryWinRecord> {
+}

+ 13 - 0
src/main/java/com/punchsettle/server/atomic/mapper/SysDictItemMapper.java

@@ -0,0 +1,13 @@
+package com.punchsettle.server.atomic.mapper;
+
+import com.punchsettle.server.atomic.entity.SysDictItem;
+import tk.mybatis.mapper.common.BaseMapper;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @description 系统字典项 Mapper
+ * @date 2024/12/12 19:07
+ */
+public interface SysDictItemMapper extends BaseMapper<SysDictItem> {
+}

+ 13 - 0
src/main/java/com/punchsettle/server/atomic/mapper/SysDictMapper.java

@@ -0,0 +1,13 @@
+package com.punchsettle.server.atomic.mapper;
+
+import com.punchsettle.server.atomic.entity.SysDict;
+import tk.mybatis.mapper.common.BaseMapper;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @description 系统字典 Mapper
+ * @date 2024/12/12 19:06
+ */
+public interface SysDictMapper extends BaseMapper<SysDict> {
+}

+ 2 - 1
src/main/java/com/punchsettle/server/atomic/mapper/UserMapper.java

@@ -2,6 +2,7 @@ package com.punchsettle.server.atomic.mapper;
 
 import com.punchsettle.server.atomic.entity.User;
 
+import tk.mybatis.mapper.additional.update.batch.BatchUpdateSelectiveMapper;
 import tk.mybatis.mapper.common.Mapper;
 
 /**
@@ -10,5 +11,5 @@ import tk.mybatis.mapper.common.Mapper;
  * @date 2024/11/25 10:57
  * @author tyuio
  */
-public interface UserMapper extends Mapper<User> {
+public interface UserMapper extends Mapper<User>, BatchUpdateSelectiveMapper<User> {
 }

+ 0 - 15
src/main/java/com/punchsettle/server/atomic/mapper/UserRewardMapper.java

@@ -1,15 +0,0 @@
-package com.punchsettle.server.atomic.mapper;
-
-import com.punchsettle.server.atomic.entity.UserReward;
-
-import tk.mybatis.mapper.additional.update.batch.BatchUpdateSelectiveMapper;
-import tk.mybatis.mapper.common.Mapper;
-
-/**
- * @author tyuio
- * @version 1.0.0
- * @description 用户奖励数据表 mapper
- * @date 2024/11/25 20:49
- */
-public interface UserRewardMapper extends Mapper<UserReward>, BatchUpdateSelectiveMapper<UserReward> {
-}

+ 10 - 0
src/main/java/com/punchsettle/server/atomic/service/ILotteryInvestRecordService.java

@@ -0,0 +1,10 @@
+package com.punchsettle.server.atomic.service;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @description 彩票投入记录 service
+ * @date 2024/12/12 19:08
+ */
+public interface ILotteryInvestRecordService {
+}

+ 10 - 0
src/main/java/com/punchsettle/server/atomic/service/ILotteryWinRecordService.java

@@ -0,0 +1,10 @@
+package com.punchsettle.server.atomic.service;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @description 彩票中奖记录 service
+ * @date 2024/12/12 19:08
+ */
+public interface ILotteryWinRecordService {
+}

+ 10 - 0
src/main/java/com/punchsettle/server/atomic/service/ISysDictItemService.java

@@ -0,0 +1,10 @@
+package com.punchsettle.server.atomic.service;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @description 系统字典项 service
+ * @date 2024/12/12 19:09
+ */
+public interface ISysDictItemService {
+}

+ 10 - 0
src/main/java/com/punchsettle/server/atomic/service/ISysDictService.java

@@ -0,0 +1,10 @@
+package com.punchsettle.server.atomic.service;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @description 系统字典 service
+ * @date 2024/12/12 19:09
+ */
+public interface ISysDictService {
+}

+ 0 - 46
src/main/java/com/punchsettle/server/atomic/service/IUserRewardService.java

@@ -1,46 +0,0 @@
-package com.punchsettle.server.atomic.service;
-
-import java.util.List;
-
-import com.punchsettle.server.atomic.entity.UserReward;
-
-/**
- * @author tyuio
- * @version 1.0.0
- * @description 用户奖励数据表 service
- * @date 2024/11/25 22:10
- */
-public interface IUserRewardService {
-
-    /**
-     * 根据当前用户获取用户奖励数
-     * @param currentUserId 当前用户id
-     * @return
-     */
-    UserReward getByUserId(Long currentUserId);
-
-    /**
-     * 更新用户奖励数
-     * @param userReward
-     */
-    void updateReward(UserReward userReward);
-
-    /**
-     * 根据用户id列表查询用户奖励列表
-     * @param userIds
-     * @return
-     */
-    List<UserReward> listByUserIds(List<Long> userIds);
-
-    /**
-     * 批量更新用户奖励数
-     * @param userRewards
-     */
-    void batchUpdateUserReward(List<UserReward> userRewards);
-
-    /**
-     * 新增用户奖励记录
-     * @param userReward
-     */
-    void insert(UserReward userReward);
-}

+ 13 - 0
src/main/java/com/punchsettle/server/atomic/service/IUserService.java

@@ -43,4 +43,17 @@ public interface IUserService {
      * @param user
      */
     void updateById(User user);
+
+    /**
+     * 根据用户id列表查询用户信息
+     * @param ids
+     * @return
+     */
+    List<User> listByIds(List<Long> ids);
+
+    /**
+     * 批量更新用户信息
+     * @param users
+     */
+    void batchUpdateUser(List<User> users);
 }

+ 14 - 0
src/main/java/com/punchsettle/server/atomic/service/impl/LotteryInvestRecordServiceImpl.java

@@ -0,0 +1,14 @@
+package com.punchsettle.server.atomic.service.impl;
+
+import com.punchsettle.server.atomic.service.ILotteryInvestRecordService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @description 彩票投入记录 service
+ * @date 2024/12/12 19:10
+ */
+@Service
+public class LotteryInvestRecordServiceImpl implements ILotteryInvestRecordService {
+}

+ 14 - 0
src/main/java/com/punchsettle/server/atomic/service/impl/LotteryWinRecordServiceImpl.java

@@ -0,0 +1,14 @@
+package com.punchsettle.server.atomic.service.impl;
+
+import com.punchsettle.server.atomic.service.ILotteryWinRecordService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @description 彩票中奖记录 service
+ * @date 2024/12/12 19:10
+ */
+@Service
+public class LotteryWinRecordServiceImpl implements ILotteryWinRecordService {
+}

+ 14 - 0
src/main/java/com/punchsettle/server/atomic/service/impl/SysDictItemServiceImpl.java

@@ -0,0 +1,14 @@
+package com.punchsettle.server.atomic.service.impl;
+
+import com.punchsettle.server.atomic.service.ISysDictItemService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @description 系统字典项 service
+ * @date 2024/12/12 19:11
+ */
+@Service
+public class SysDictItemServiceImpl implements ISysDictItemService {
+}

+ 14 - 0
src/main/java/com/punchsettle/server/atomic/service/impl/SysDictServiceImpl.java

@@ -0,0 +1,14 @@
+package com.punchsettle.server.atomic.service.impl;
+
+import com.punchsettle.server.atomic.service.ISysDictService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author tyuio
+ * @version 1.0.0
+ * @description 系统字典 service
+ * @date 2024/12/12 19:11
+ */
+@Service
+public class SysDictServiceImpl implements ISysDictService {
+}

+ 0 - 75
src/main/java/com/punchsettle/server/atomic/service/impl/UserRewardServiceImpl.java

@@ -1,75 +0,0 @@
-package com.punchsettle.server.atomic.service.impl;
-
-import java.util.List;
-import java.util.Objects;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.util.CollectionUtils;
-
-import com.punchsettle.server.atomic.entity.UserReward;
-import com.punchsettle.server.atomic.mapper.UserRewardMapper;
-import com.punchsettle.server.atomic.service.IUserRewardService;
-import com.punchsettle.server.common.utils.Assert;
-
-import tk.mybatis.mapper.weekend.Weekend;
-import tk.mybatis.mapper.weekend.WeekendCriteria;
-
-/**
- * @author tyuio
- * @version 1.0.0
- * @description 用户奖励数据表 service
- * @date 2024/11/25 22:14
- */
-@Service
-public class UserRewardServiceImpl implements IUserRewardService {
-
-    @Autowired
-    private UserRewardMapper userRewardMapper;
-
-    @Override
-    public UserReward getByUserId(Long currentUserId) {
-        if (Objects.isNull(currentUserId)) {
-            return null;
-        }
-
-        UserReward userReward = new UserReward();
-        userReward.setUserId(currentUserId);
-        return userRewardMapper.selectOne(userReward);
-    }
-
-    @Override
-    public void updateReward(UserReward userReward) {
-        Assert.isNull(userReward);
-
-        if (Objects.isNull(userReward)) {
-            userRewardMapper.insertSelective(userReward);
-        } else {
-            userRewardMapper.updateByPrimaryKeySelective(userReward);
-        }
-    }
-
-    @Override
-    public List<UserReward> listByUserIds(List<Long> userIds) {
-        if(CollectionUtils.isEmpty(userIds)) {
-            return List.of();
-        }
-
-        Weekend<UserReward> weekend = Weekend.of(UserReward.class);
-        WeekendCriteria<UserReward, Object> criteria = weekend.weekendCriteria();
-        criteria.andIn(UserReward::getUserId, userIds);
-        return userRewardMapper.selectByExample(weekend);
-    }
-
-    @Override
-    public void batchUpdateUserReward(List<UserReward> userRewards) {
-        Assert.notEmpty(userRewards);
-        userRewardMapper.batchUpdateSelective(userRewards);
-    }
-
-    @Override
-    public void insert(UserReward userReward) {
-        Assert.isNull(userReward);
-        userRewardMapper.insert(userReward);
-    }
-}

+ 21 - 0
src/main/java/com/punchsettle/server/atomic/service/impl/UserServiceImpl.java

@@ -12,6 +12,9 @@ import com.punchsettle.server.atomic.mapper.UserMapper;
 import com.punchsettle.server.atomic.service.IUserService;
 
 import io.micrometer.common.util.StringUtils;
+import org.springframework.util.CollectionUtils;
+import tk.mybatis.mapper.weekend.Weekend;
+import tk.mybatis.mapper.weekend.WeekendCriteria;
 
 /**
  * @author tyuio
@@ -60,4 +63,22 @@ public class UserServiceImpl implements IUserService {
         Assert.isNull(user);
         userMapper.updateByPrimaryKeySelective(user);
     }
+
+    @Override
+    public List<User> listByIds(List<Long> ids) {
+        if(CollectionUtils.isEmpty(ids)) {
+            return List.of();
+        }
+
+        Weekend<User> weekend = Weekend.of(User.class);
+        WeekendCriteria<User, Object> criteria = weekend.weekendCriteria();
+        criteria.andIn(User::getId, ids);
+        return userMapper.selectByExample(weekend);
+    }
+
+    @Override
+    public void batchUpdateUser(List<User> users) {
+        Assert.notEmpty(users);
+        userMapper.batchUpdateSelective(users);
+    }
 }

+ 16 - 14
src/main/java/com/punchsettle/server/service/manager/impl/RewardManagerImpl.java

@@ -4,14 +4,14 @@ import java.sql.Timestamp;
 import java.util.Objects;
 import java.util.Optional;
 
+import com.punchsettle.server.atomic.entity.User;
+import com.punchsettle.server.atomic.service.IUserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import com.punchsettle.server.atomic.entity.UserClaimRewardRecord;
-import com.punchsettle.server.atomic.entity.UserReward;
 import com.punchsettle.server.atomic.service.IUserClaimRewardRecordService;
-import com.punchsettle.server.atomic.service.IUserRewardService;
 import com.punchsettle.server.common.exception.BusinessException;
 import com.punchsettle.server.common.utils.Assert;
 import com.punchsettle.server.dto.ClaimRewardDto;
@@ -32,7 +32,7 @@ public class RewardManagerImpl implements IRewardManager {
     private IUserClaimRewardRecordService userClaimRewardRecordService;
 
     @Autowired
-    private IUserRewardService userRewardService;
+    private IUserService userService;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -44,38 +44,40 @@ public class RewardManagerImpl implements IRewardManager {
         // 获取用户信息
         Long currentUserId =
             Optional.ofNullable(UserUtils.getCurrentUserId()).orElseThrow(() -> BusinessException.fail("无法获取当前用户ID"));
-        UserReward userReward = Optional.ofNullable(userRewardService.getByUserId(currentUserId)).orElseThrow(() -> BusinessException.fail("无法获取当前用户的奖励信息"));
+        User user = Optional.ofNullable(userService.getById(currentUserId)).orElseThrow(() -> BusinessException.fail("无法获取当前用户的奖励信息"));
 
         // 计算未领取奖励数、已领取奖励数
-        if (userReward.getUnclaimedRewardNum() < dto.getClaimRewardNum()) {
+        if (user.getUnclaimedRewardNum() < dto.getClaimRewardNum()) {
             throw BusinessException.fail("当前用户奖励不足,无法领取");
         }
-        int unclaimedRewardNum = userReward.getUnclaimedRewardNum() - dto.getClaimRewardNum();
-        int claimedRewardNum = userReward.getClaimedRewardNum() + dto.getClaimRewardNum();
+        int unclaimedRewardNum = user.getUnclaimedRewardNum() - dto.getClaimRewardNum();
+        int claimedRewardNum = user.getClaimedRewardNum() + dto.getClaimRewardNum();
 
         // 构建打卡记录
         UserClaimRewardRecord userClaimRewardRecord = new UserClaimRewardRecord();
         userClaimRewardRecord.setUserId(currentUserId);
         userClaimRewardRecord.setClaimRewardNum(dto.getClaimRewardNum());
         userClaimRewardRecord.setClaimRewardTime(new Timestamp(System.currentTimeMillis()));
-        userClaimRewardRecord.setBeforeClaimRewardNum(userReward.getUnclaimedRewardNum());
+        userClaimRewardRecord.setBeforeClaimRewardNum(user.getUnclaimedRewardNum());
         userClaimRewardRecord.setAfterClaimRewardNum(unclaimedRewardNum);
         userClaimRewardRecordService.insert(userClaimRewardRecord);
 
         // 更新用户奖励信息
-        userReward.setUnclaimedRewardNum(unclaimedRewardNum);
-        userReward.setClaimedRewardNum(claimedRewardNum);
-        userRewardService.updateReward(userReward);
+        User updateUser = new User();
+        updateUser.setId(user.getId());
+        updateUser.setUnclaimedRewardNum(unclaimedRewardNum);
+        updateUser.setClaimedRewardNum(claimedRewardNum);
+        userService.updateById(user);
     }
 
     @Override
     public UserRewardDto queryReward() {
         Long currentUserId = UserUtils.getCurrentUserId();
-        UserReward userReward = userRewardService.getByUserId(currentUserId);
-        Assert.isNullInBusiness(userReward, "用户没有奖励信息");
+        User user = userService.getById(currentUserId);
+        Assert.isNullInBusiness(user, "用户没有奖励信息");
 
         UserRewardDto userRewardDto = new UserRewardDto();
-        userRewardDto.setUnclaimedRewardNum(userReward.getUnclaimedRewardNum());
+        userRewardDto.setUnclaimedRewardNum(user.getUnclaimedRewardNum());
         return userRewardDto;
     }
 }

+ 18 - 19
src/main/java/com/punchsettle/server/service/manager/impl/TaskManagerImpl.java

@@ -10,6 +10,8 @@ import java.util.Objects;
 import java.util.function.Function;
 import java.util.stream.Collectors;
 
+import com.punchsettle.server.atomic.entity.User;
+import com.punchsettle.server.atomic.service.IUserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Service;
@@ -21,13 +23,11 @@ import com.punchsettle.server.atomic.entity.PunchInRecord;
 import com.punchsettle.server.atomic.entity.PunchInRecordSettlementRela;
 import com.punchsettle.server.atomic.entity.PunchInSettlement;
 import com.punchsettle.server.atomic.entity.SettlementTask;
-import com.punchsettle.server.atomic.entity.UserReward;
 import com.punchsettle.server.atomic.service.IPunchInRecordService;
 import com.punchsettle.server.atomic.service.IPunchInRecordSettlementRelaService;
 import com.punchsettle.server.atomic.service.IPunchInService;
 import com.punchsettle.server.atomic.service.IPunchInSettlementService;
 import com.punchsettle.server.atomic.service.ISettlementTaskService;
-import com.punchsettle.server.atomic.service.IUserRewardService;
 import com.punchsettle.server.dto.PunchInRecordQuery;
 import com.punchsettle.server.service.manager.ITaskManager;
 import com.punchsettle.server.utiis.DateUtils;
@@ -51,7 +51,7 @@ public class TaskManagerImpl implements ITaskManager {
     private IPunchInRecordService punchInRecordService;
 
     @Autowired
-    private IUserRewardService userRewardService;
+    private IUserService userService;
 
     @Autowired
     private IPunchInSettlementService punchInSettlementService;
@@ -96,8 +96,8 @@ public class TaskManagerImpl implements ITaskManager {
         }
 
         // 读取用户奖励数据
-        List<UserReward> userRewards = userRewardService.listByUserIds(userIds);
-        if (CollectionUtils.isEmpty(userRewards)) {
+        List<User> users = userService.listByIds(userIds);
+        if (CollectionUtils.isEmpty(users)) {
             log.info("结算任务结束,原因:没有找到用户奖励信息");
             return;
         }
@@ -126,8 +126,8 @@ public class TaskManagerImpl implements ITaskManager {
             punchInRecords.stream().collect(Collectors.groupingBy(PunchInRecord::getCreatedBy));
 
         // 用户-奖励分组
-        Map<Long, UserReward> userRewardMap = userRewards.stream()
-            .collect(Collectors.toMap(UserReward::getUserId, Function.identity(), (key1, key2) -> key1));
+        Map<Long, User> userRewardMap = users.stream()
+            .collect(Collectors.toMap(User::getId, Function.identity(), (key1, key2) -> key1));
 
         // 先创建结算任务执行记录
         SettlementTask settlementTask = new SettlementTask();
@@ -139,7 +139,7 @@ public class TaskManagerImpl implements ITaskManager {
         // 结算时间
         Timestamp settlementTime = new Timestamp(System.currentTimeMillis());
         List<PunchInSettlement> addPunchInSettlements = new ArrayList<>();
-        List<UserReward> updateUserRewards = new ArrayList<>();
+        List<User> updateUsers = new ArrayList<>();
         List<PunchInRecordSettlementRela> punchInRecordSettlementRelas = new ArrayList<>();
 
         // 有打卡记录的打卡任务则进行结算
@@ -151,8 +151,8 @@ public class TaskManagerImpl implements ITaskManager {
                 continue;
             }
             // 获取用户打卡奖励
-            UserReward userReward = userRewardMap.get(userId);
-            if (Objects.isNull(userReward)) {
+            User user = userRewardMap.get(userId);
+            if (Objects.isNull(user)) {
                 log.info("用户{}没有奖励信息,无法结算", userId);
                 continue;
             }
@@ -182,9 +182,9 @@ public class TaskManagerImpl implements ITaskManager {
             }
 
             // 计算结算前后,用户奖励数的变化
-            int beforeSettleRewardNum = userReward.getUnclaimedRewardNum();
+            int beforeSettleRewardNum = user.getUnclaimedRewardNum();
             int afterSettleRewardNum = beforeSettleRewardNum + settleRewardNum;
-            int totalRewardNum = userReward.getTotalRewardNum() + settleRewardNum;
+            int totalRewardNum = user.getTotalRewardNum() + settleRewardNum;
 
             // 构造结算信息
             PunchInSettlement addPunchInSettlement = new PunchInSettlement();
@@ -197,16 +197,15 @@ public class TaskManagerImpl implements ITaskManager {
             addPunchInSettlements.add(addPunchInSettlement);
 
             // 构造用户奖励信息
-            UserReward updateUserReward = new UserReward();
-            updateUserReward.setId(userReward.getId());
-            updateUserReward.setVersion(userReward.getVersion());
-            updateUserReward.setTotalRewardNum(totalRewardNum);
-            updateUserReward.setUnclaimedRewardNum(afterSettleRewardNum);
-            updateUserRewards.add(updateUserReward);
+            User updateUser = new User();
+            updateUser.setId(user.getId());
+            updateUser.setTotalRewardNum(totalRewardNum);
+            updateUser.setUnclaimedRewardNum(afterSettleRewardNum);
+            updateUsers.add(updateUser);
         }
 
         // 更新用户奖励信息
-        userRewardService.batchUpdateUserReward(updateUserRewards);
+        userService.batchUpdateUser(updateUsers);
 
         // 新增结算信息
         punchInSettlementService.batchInsert(addPunchInSettlements);

+ 6 - 12
src/main/java/com/punchsettle/server/service/manager/impl/UserManagerImpl.java

@@ -1,5 +1,6 @@
 package com.punchsettle.server.service.manager.impl;
 
+import java.math.BigDecimal;
 import java.util.Objects;
 
 import org.springframework.beans.factory.annotation.Autowired;
@@ -7,8 +8,6 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import com.punchsettle.server.atomic.entity.User;
-import com.punchsettle.server.atomic.entity.UserReward;
-import com.punchsettle.server.atomic.service.IUserRewardService;
 import com.punchsettle.server.atomic.service.IUserService;
 import com.punchsettle.server.common.utils.Assert;
 import com.punchsettle.server.service.manager.IUserManager;
@@ -28,9 +27,6 @@ public class UserManagerImpl implements IUserManager {
     @Autowired
     private IUserService userService;
 
-    @Autowired
-    private IUserRewardService userRewardService;
-
     @Override
     @Transactional(rollbackFor = Exception.class)
     public User getAndAddUser(User loginUserInfo) {
@@ -49,14 +45,12 @@ public class UserManagerImpl implements IUserManager {
         }
 
         // 没有则创建新用户
+        loginUserInfo.setUnclaimedRewardNum(0);
+        loginUserInfo.setClaimedRewardNum(0);
+        loginUserInfo.setTotalRewardNum(0);
+        loginUserInfo.setLotteryInvestAmount(BigDecimal.ZERO);
+        loginUserInfo.setLotteryWinAmount(BigDecimal.ZERO);
         userService.insert(loginUserInfo);
-        // 为新用户创建奖励数据
-        UserReward userReward = new UserReward();
-        userReward.setUserId(loginUserInfo.getId());
-        userReward.setUnclaimedRewardNum(0);
-        userReward.setClaimedRewardNum(0);
-        userReward.setTotalRewardNum(0);
-        userRewardService.insert(userReward);
 
         return loginUserInfo;
     }