# 打卡结算 ui设计工具:即时设计 小程序框架:uniapp 后端框架:spring boot + mybatis + tk mybatis+ spring mvc 数据库:mysql 数据库备份工具:gobackup ## 系统功能 ### 基本概念 #### 打卡 * 打卡类型:计时、计数、单次打卡(计数的特例,只需计一次数) * 单位:次数、分钟 * 比较规则:大于等于、小于等于 * 比较的目标:用于判断是否完成打卡;一般情况下,只有一个比较**目标1**;但是启用法定节假日的话,还有一个难度比较低的比较**目标2**,用于判断比较 * 重复频率:每日、法定工作日、法定节假日(含周末)、自定义(周一至周日) * 全勤周期:每周、每月 * 打卡任务分类: * 普通打卡任务:没有明确的结束时间,任务永远不会结束 * 任务式打卡任务:有明确的结束时间,任务到期自动结束并进行归档 #### 获取积分奖励的方式 1. 单个任务**当天**完成打卡则给予奖励 2. 单个任务**法定节假日(含周末)**双倍奖励 3. 单个任务全勤双倍奖励,即在**一个周期内**打卡完成数在容错范围内则给予奖励 4. 单个任务连续完成打卡则给予额外奖励,按照**连续打卡**完成天数**超过N天**k开始进行计算 5. 多个任务完成打卡则给予额外奖励,按照**当天打卡**完成数**超过固定值**进行计算 6. 多个任务连续完成打卡则给予奖励,按照**连续打卡**完成数**超过N天**开始进行计算 #### 结算规则 注:在连续完成的时候,需要关注的是完成的天数,其它不用理会 ##### 积分计算公式 单个任务积分=基本积分+(可选)额外积分+(可选)连续完成额外积分+法定节假日(含周末)双倍奖励+全勤双倍奖励 多个任务积分=多任务额外积分+连续完成额外积分 总积分=单个任务积分+(可选)多个任务积分 说明: * 基本积分:满足打卡比较条件就能获得基本积分 * 额外积分:根据新的比较单位(X次,Y分钟,完成数、完成率)进行判断,完成一次就获得一次额外积分 * 固定积分:额外打一次卡就给一次固定积分,本质是动态积分的特例 例子:打卡10次,前5次是基本的,后5次是额外的,积分区间:基本积分5;x>5,奖励积分10;其中的x是打卡次数。共计积分:5+5x5=30积分 * 动态积分:根据不同的区间,给对应的积分 例子:打卡10次,前5次是基本的,后5次是额外的,积分区间:基本积分5;6≤x≤8,奖励积分10;9≤x≤10,奖励积分15;其中的x是打卡次数。共计积分:5+10x3+15x2=65积分 ##### (可选)前置判断: 1. 开始前有连续N天,不结算积分,不计算连续打卡天数 2. 中途没有完成打卡则重新开始 如果没有完成的天数小于等于N天,则有连续Y天不结算积分(等同于一个小的开始,Y自己设置),连续打卡天数天数重置 如果大于N天,则等同于任务重新开始 注:可以应用在单个任务,也可以应用在多个任务 #### 积分账户 * 基本户:用于结算积分转入,或者兑换奖励 * 一般户:专项专用,只能兑换指定奖励 ### 按页面划分 #### 今日待办任务(主页) 1. 显示今日待办的打卡任务数量 2. 显示今日待办的打卡任务列表 显示元素:任务名称、任务描述、奖励的基本积分数、节假日奖励标识、全勤奖励标识、自动打卡标识、本周的打卡情况、打卡按钮 注意点: 1. 打卡按钮根据不同的打卡类型有不同的显示 * 打卡类型:单次打卡,未完成则显示“完成” * 打卡类型:计数,未完成则显示“计数”,并且显示当前已打卡次数 * 打卡类型:计时,未完成则显示“计时”,并且显示当前已记录的打卡时间 2. 任务显示时机控制,控制过了某个时间点才出现,不要一下子就把当天的都列出来 3. 列表需要根据排序进行显示 2. 支持的功能操作:创建打卡任务、打卡 #### 打卡任务列表 1. 显示总的打卡任务数量 2. 显示总的打卡任务列表 显示元素:任务名称、任务描述、奖励的基本积分数、节假日奖励标识、全勤奖励标识、自动打卡标识 注意点: 1. 列表需要根据排序进行显示 2. 查询时可以筛选是否显示已归档任务,默认不显示 2. 支持的功能操作:创建打卡任务、编辑、删除、打卡、补打卡、误打卡撤销、归档 * 补打卡规则: 1. 如果完全没有打过卡:按照当时的打卡规则,直接生成一条新的打卡记录和结算记录 2. 如果打过卡但是未完成的 * 对于单次打卡:不存在这种情况 * 对于计数打卡:修改打卡记录的数据并记录修改值和对应的状态位,修改结算记录并记录修改值和对应的状态位 * 对于计时打卡:修改打卡记录的数据并记录修改值和对应的状态位,修改结算记录并记录修改值和对应的状态位 * 误打卡撤销规则: 1. 只允许当天撤销 2. 数据变化 对于单次打卡:直接删除打卡记录即可 对于计数打卡:直接扣减次数(-1)即可,次数变成0即删除打卡记录 对于计时打卡:直接删除打卡记录即可,然后重新再打卡即可 #### 打卡任务详情页 * 月选项卡 1. 本月打卡统计数据显示,包含:本月需打卡数、本月已打卡数、本月完成打卡数、本月打卡率、本月打卡完成率,本月获取积分数 2. 数据折线图(本月每日) 说明: 1. 如果是打卡类型是单次打卡则无须显示;如果是如果打卡类型是计时或者计数,那么折线图显示对应的每日的时间/次数变化 2. 数据直接从打卡任务记录表获取 3. 显示本月的打卡日志 打卡类型:单次,显示元素包含:打卡日期(格式:xxxx-xx-xx) 、打卡状态(完成打卡/未完成打卡)、打卡时长(格式:00:00:00,计时打卡特有)、打卡次数(格式:x次,计数打卡特有)、结算状态、结算积分,结算时对应的打卡任务配置快照 4. 支持的功能操作:编辑、删除、打卡、补打卡、误打卡撤销、归档 * 年选项卡 1. 本年打卡统计数据显示,包含:本年需打卡数、本年已打卡数、本年完成打卡数、本年打卡率、本年打卡完成率,本年获取积分数 2. 数据折线图(全年每日) 说明: 1. 如果是打卡类型是单次打卡则无须显示;如果是如果打卡类型是计时或者计数,那么折线图显示对应的每日的时间/次数变化 2. 数据直接从打卡任务记录表获取 3. 显示全年的打卡日志(需分页) 打卡类型:单次,显示元素包含:打卡日期(格式:xxxx-xx-xx) 、打卡状态(完成打卡/未完成打卡)、打卡时长(格式:00:00:00,计时打卡特有)、打卡次数(格式:x次,计数打卡特有)、结算状态、结算积分,结算时对应的打卡任务配置快照 4. 支持的功能操作:编辑、删除、打卡、补打卡、误打卡撤销、归档 #### 数据统计图表 * 图表选项卡 1. 积分折线表,显示包含:每日积分的结算数(增加数量)、每日积分的消耗数量、每日剩余总积分 2. 打卡任务数折线表,包含:总打卡任务数量、每日的打卡数量、每日完成的打卡任务数量 说明:数据可以从打卡多任务记录表中获取 3. 新用户折线表,即每日新增的用户数量,是**特权用户才有权限查看** * 打卡日志选项卡 1. 日历显示完成的打卡数,如果为0则不显示 2. 具体某日的打卡记录(通过打卡日历,直接在打卡任务记录表中筛选即可) 说明:通过在打卡日历选择具体日期,然后直接在打卡任务记录表中筛选即可 #### 积分商城 1. 显示账户及其拥有的积分(基本户、一般户) 2. 显示可兑换的奖励列表,显示元素包含:名称、兑换所需积分、兑换按钮 3. 支持的功能操作:大乐透号码生成器、双色球号码生成器、兑换奖励 #### 用户中心 1. 显示用户的基本信息,显示元素包含:字符头像、昵称、昵称修改按钮、登录按钮 2. 显示统计数据 * 积分区,显示元素包括:总待使用积分、总已使用积分,总积分数 * 彩票去,显示元素包括:总消费金额、总中奖金额 说明:数据从用户表中获取 3. 显示可跳转页面 * 积分结算记录 1. 分页显示结算记录,显示元素包括:结算前的积分、结算后的积分、结算积分、结算日期 2. 支持的功能操作:按时间范围(结算日期)筛选 * 积分兑换记录 1. 分页显示兑换记录,显示元素包括:兑换的奖励名称、兑换所需的积分、兑换时间 2. 支持的功能操作:按时间范围(兑换时间)、奖励名称(全模糊)筛选 * 彩票消费与中奖记录 1. 分页显示彩票消费与中奖记录,显示元素包括:彩票来源、彩票金额,消费金额、中奖金额、记录时间 2. 支持的功能操作:按时间范围(记录时间)、彩票来源、彩票金额筛选 * 账户转账记录 1. 分页显示转账记录,显示元素包括:转出账户、转入账户、涉及的积分、操作时间 * 积分账户 1. 显示所有账户,显示元素包括:账户名称、所拥有的积分 2. 支持的功能操作:添加新账户、账户之间转账、一般户与可兑换奖励物的关联 * 奖励列表 1. 显示所有的可兑换奖励,显示元素包括:奖励的名称、所需兑换积分、自动兑换标识 2. 支持的功能操作:添加新奖励、编辑、删除 * 免责声明 * 关于我们 4. 支持的功能操作:昵称修改、退出登录、登录 说明:登录时,只需要记录昵称和微信openId即可 #### 系统 ##### 定时任务 1. 自动结算 2. 自动归档 3. 自动打卡,按最低完成标准打卡 4. 自动兑换,按设定的兑换次数进行自动兑换,优先从专用账户兑换,再从基本账户兑换 注:如果奖励关联了专用账户,需要校验兑换账户和 5. 打卡任务-月统计,包含:本月需打卡数、本月已打卡数、本月完成打卡数、本月打卡率、本月打卡完成率,本月获取积分数 6. 打卡任务-年统计,包含:本年需打卡数、本年已打卡数、本年完成打卡数、本年打卡率、本年打卡完成率,本年获取积分数 7. 积分统计,包含:每日积分的结算数(增加数量)、每日积分的消耗数量、每日剩余总积分 8. 新用户数量统计 9. 自动删除无使用的数据 ##### 运维接口 1. 清除缓存 2. 调起定时任务 3. 手动结算接口,注:需要**防止重复结算** 4. 初始化逻辑:打卡任务记录表(punch_in_task_history)中的连续状态、连续时间和结算的积分需要用代码进行初始化 初始化后需要把对应的字段改回去 ## 字典 ### 刮刮乐来源 字典名称:刮刮乐来源 字典编码:LOTTERY_SCRATCH_SOURCE 字典项: | 字典项编码 | 字典名称 | | --------------- | -------- | | WELFARE_SCRATCH | 福利彩票 | | SPORTS_SCRATCH | 体育彩票 | ### 福利彩票刮刮乐种类 字典名称:福利彩票刮刮乐种类 字典编码:WELFARE_SCRATCH 字典项 | 字典项编码 | 字典名称 | | ----------- | -------- | | XINGYUN88 | 幸运88 | | CHAOGEILI | 超给力 | | XIXIANGFENG | 喜相逢 | ### 体育彩票刮刮乐种类 字典名称:体育彩票刮刮乐种类 字典编码:SPORTS_SCRATCH 字典项 | 字典项编码 | 字典名称 | | ---------- | -------- | | | | | | | ### 刮刮乐动作类型 字典名称:刮刮乐动作类型 字典编码:SCRATCH_ACTION_TYPE 字典项 | 字典项编码 | 字典名称 | | ---------- | -------- | | 0 | 投入 | | 1 | 中奖 | ### 启用状态标志 字典名称:启用状态标志 字典编码:ENABLE_STATUS 字典项 | 字典项编码 | 字典名称 | | ---------- | -------- | | 0 | 关闭 | | 1 | 启用 | ### 打卡类型 字典名称:打卡类型 字典编码:PUNCH_IN_CATEGORY 字典项 | 字典项编码 | 字典名称 | | ---------- | -------- | | 0 | 单次打卡 | | 1 | 计数 | | 2 | 计时 | ### 打卡比较规则 字典名称:打卡比较规则 字典编码:PUNCH_IN_RULE 字典项 | 字典项编码 | 字典名称 | | ---------- | -------- | | 0 | 大于等于 | | 1 | 小于等于 | ## 表设计 ![](%E6%8A%80%E6%9C%AF%E6%96%87%E6%A1%A3.assets/%E6%89%93%E5%8D%A1%E7%BB%93%E7%AE%97%E9%A1%B9%E7%9B%AE.png) ### 用户表 表名:user | 字段 | 类型 | 描述 | | -------------------- | ------------- | ---------------------------------- | | id | bigint | 主键 | | open_id | varchar(128) | 微信小程序openId | | nickname | varchar(100) | 昵称 | | total_points | int | 总积分 | | unused_points | int | 未使用积分 | | used_points | int | 已使用积分 | | total_consume_amount | decimal(10,2) | 总消费金额(元) | | total_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_task | 字段 | 类型 | 描述 | 索引 | | ----------------------------------- | ------------ | ------------------------------------------------------------ | -------- | | id | bigint | 主键 | 主键索引 | | task_unique_id | bigint | 任务唯一ID | 普通索引 | | task_status | varchar(10) | 任务状态(活跃-ACTIVE,归档-ARCHIVE) | | | task_version | int | 任务修改版本 | | | task_name | varchar(128) | 任务名称 | | | description | varchar(300) | 任务描述 | | | points | int | 奖励的积分(基本) | | | end_date | date | 结束日期 | | | archive_status | varchar(10) | 是否归档(活跃-ACTIVE,归档-ARCHIVE) | | | display_order | int | 显示顺序 | | | display_time | time | 显示时间 | | | punch_in_method | varchar(10) | 打卡方式(单次打卡-SINGLE,计数-COUNT、计时-TIMING) | | | compare_rule | varchar(10) | 比较规则(大于等于-GTE,小于等于-LTE) | | | count_track | int | 次数记录 | | | time_track | time | 时间记录 | | | holiday_status | varchar(10) | 是否启用节假日奖励(ENABLED-启用,DISABLED-关闭) | | | holiday_count_track | int | 次数记录(节假日用) | | | holiday_time_track | time | 时间记录(节假日用) | | | full_attendance_status | varchar(10) | 是否启用全勤奖励(ENABLED-启用,DISABLED-关闭) | | | full_attendance_period | varchar(10) | 全勤周期(周-WEEK,月-MONTH) | | | full_attendance_fault_tolerance_cnt | int | 全勤容错次数 | | | repeat_category | varchar(10) | 重复周期类型(每日-EVERYDAY、法定工作日-WORKDAY、法定节假日(含周末)-HOLIADY、自定义(周一至周日)-CUSTOM) | | | repeat_custom_day | varchar(13) | 自定义重复日(周一-1,周二-2,周三-3,周四-4,周五-5,周六-6,周日-7) | | | extra_method | varchar(10) | 额外奖励方式(无-NONE,固定-FIXED,区间-INTERVAL) | | | extra_time_step | time | 额外的时间间隔 | | | extra_points | int | 奖励的积分(额外) | | | grace_status | varchar(10) | 是否启用宽限期(ENABLED-启用,DISABLED-关闭) | | | grace_day | int | 宽限期(单位:天) | | | interrupted_day | int | 打卡中断天数(单位:天) | | | penalty_day | int | 惩罚天数(单位:天) | | | auto_status | varchar(10) | 是否启用自动打卡(ENABLED-启用,DISABLED-关闭) | | | created_by | bigint | 创建人 | 普通索引 | | creation_time | timestamp | 创建时间 | | | last_updated_by | bigint | 最后更新人 | | | last_update_time | timestamp | 最后更新时间 | | | version | bigint | 版本号 | | | delete_flag | tinyint | 逻辑删除标志(0-未删除,1-已删除) | | ### 打卡任务拓展表 表名:punch_in_task_ext | 字段 | 类型 | 描述 | 索引 | | ---------------- | ----------- | ---------------------------------------- | -------- | | id | bigint | 主键 | 主键索引 | | user_id | bigint | 用户ID | 普通索引 | | punch_in_task_id | bigint | 打卡任务ID | 普通索引 | | dimension | varchar(10) | 使用维度(一天-ONE_DAY,多天-MULTI_DAY) | | | initial_value | int | 起始值(单位:次) | | | extra_points | int | 奖励的积分(额外) | | | created_by | bigint | 创建人 | | | creation_time | timestamp | 创建时间 | | | last_updated_by | bigint | 最后更新人 | | | last_update_time | timestamp | 最后更新时间 | | | version | bigint | 版本号 | | | delete_flag | tinyint | 逻辑删除标志(0-未删除,1-已删除) | | ### 打卡多任务表 表名:punch_in_multi_task | 字段 | 类型 | 描述 | 索引 | | -------------------- | ------------ | -------------------------------------------------- | -------- | | id | bigint | 主键 | 主键索引 | | user_id | bigint | 用户ID | 普通索引 | | multi_task_unique_id | bigint | 打卡多任务唯一ID | 普通索引 | | multi_task_status | varchar(10) | 任务状态(活跃-ACTIVE,归档-ARCHIVE) | | | multi_task_version | int | 任务修改版本 | | | punch_in_method | varchar(10) | 打卡方式(次数-COUNT,比率-RATE) | | | punch_in_done_count | int | 打卡完成次数 | | | punch_in_done_rate | decimal(5,2) | 打卡完成率 | | | points | int | 奖励的积分(基本) | | | grace_status | varchar(10) | 是否启用宽限期(ENABLED-启用,DISABLED-关闭) | | | grace_day | int | 宽限期(单位:天) | | | interrupted_day | int | 打卡中断天数(单位:天) | | | penalty_day | int | 惩罚天数(单位:天) | | | extra_method | varchar(10) | 额外奖励方式(无-NONE,固定-FIXED,区间-INTERVAL) | | | extra_points | int | 奖励的积分(额外) | | | created_by | bigint | 创建人 | | | creation_time | timestamp | 创建时间 | | | last_updated_by | bigint | 最后更新人 | | | last_update_time | timestamp | 最后更新时间 | | | version | bigint | 版本号 | | | delete_flag | tinyint | 逻辑删除标志(0-未删除,1-已删除) | | ### 打卡多任务拓展表 表名:punch_in_multi_task_ext | 字段 | 类型 | 描述 | 索引 | | -------------------- | ----------- | ---------------------------------------- | -------- | | id | bigint | 主键 | 主键索引 | | user_id | bigint | 用户ID | 普通索引 | | multi_task_unique_id | bigint | 多任务ID | 普通索引 | | dimension | varchar(10) | 使用维度(一天-ONE_DAY,多天-MULTI_DAY) | | | initial_value | int | 起始值(单位:次) | | | extra_points | int | 奖励的积分(额外) | | | created_by | bigint | 创建人 | | | creation_time | timestamp | 创建时间 | | | last_updated_by | bigint | 最后更新人 | | | last_update_time | timestamp | 最后更新时间 | | | version | bigint | 版本号 | | | delete_flag | tinyint | 逻辑删除标志(0-未删除,1-已删除) | | ### 打卡多任务关联表 表名:punch_in_multi_task_rela 说明:这里的打卡多任务ID和打卡任务ID均不用唯一ID,用于记录对应的快照关系 | 字段 | 类型 | 描述 | 索引 | | ---------------------- | --------- | ---------------------------------- | -------- | | id | bigint | 主键 | 主键索引 | | user_id | bigint | 用户ID | 普通索引 | | punch_in_multi_task_id | bigint | 打卡多任务ID | 普通索引 | | punch_in_task_id | bigint | 打卡任务ID | 普通索引 | | created_by | bigint | 创建人 | | | creation_time | timestamp | 创建时间 | | | last_updated_by | bigint | 最后更新人 | | | last_update_time | timestamp | 最后更新时间 | | | version | bigint | 版本号 | | | delete_flag | tinyint | 逻辑删除标志(0-未删除,1-已删除) | | ### 打卡任务记录表 表名:punch_in_task_history | 字段 | 类型 | 描述 | 索引 | | ----------------------- | ----------- | ------------------------------------------------------------ | -------- | | id | bigint | 主键 | 主键索引 | | user_id | bigint | 用户ID | 普通索引 | | punch_in_task_unique_id | bigint | 打卡任务唯一ID | 普通索引 | | punch_in_date | varchar(10) | 打卡日期 | 普通索引 | | punch_in_status | varchar(10) | 打卡状态(DONE-完成,UNDONE-未完成) | | | count_track | int | 次数记录 | | | time_track | time | 时间记录 | | | consecutive_status | varchar(20) | 连续打卡状态(正常打卡-NORMAL、中断--INTERRUPTED) | | | consecutive_day | int | 连续天数,第一天开始就等于1 | | | settle_task_history_id | bigint | 结算任务执行记录ID | 普通索引 | | settle_status | varchar(20) | 结算状态(未结算-UNSETTLED,宽限期跳过J-GRACE_SKIP,惩罚跳过-PENALTY_SKIP,已结算-SETTLED) | | | settle_punch_in_task_id | bigint | 结算时的打卡任务ID | | | settle_points | int | 结算奖励积分 | | | created_by | bigint | 创建人 | | | creation_time | timestamp | 创建时间 | 普通索引 | | last_updated_by | bigint | 最后更新人 | | | last_update_time | timestamp | 最后更新时间 | | | version | bigint | 版本号 | | | delete_flag | tinyint | 逻辑删除标志(0-未删除,1-已删除) | | ### 打卡多任务记录表 表名:punch_in_multi_task_history | 字段 | 类型 | 描述 | 索引 | | ----------------------------- | ------------ | ------------------------------------------------------------ | -------- | | id | bigint | 主键 | 主键索引 | | user_id | bigint | 用户ID | 普通索引 | | punch_in_multi_task_unique_id | bigint | 打卡多任务唯一ID | 普通索引 | | punch_in_date | varchar(10) | 打卡日期 | 普通索引 | | punch_in_status | varchar(10) | 打卡状态(DONE-完成,UNDONE-未完成) | | | total_task_count | int | 总任务数 | | | punch_in_done_count | int | 打卡完成数 | | | punch_in_done_rate | decimal(5,2) | 打卡完成率 | | | consecutive_status | varchar(20) | 连续打卡状态(正常打卡-NORMAL、中断--INTERRUPTED) | | | consecutive_day | int | 连续天数,第一天开始就等于1 | | | settle_task_history_id | bigint | 结算任务执行记录ID | 普通索引 | | settle_status | varchar(20) | 结算状态(未结算-UNSETTLED,宽限期跳过J-GRACE_SKIP,惩罚跳过-PENALTY_SKIP,已结算-SETTLED) | | | settle_punch_in_multi_task_id | bigint | 结算时的打卡多任务ID | | | settle_points | int | 结算奖励积分 | | | created_by | bigint | 创建人 | | | creation_time | timestamp | 创建时间 | | | last_updated_by | bigint | 最后更新人 | | | last_update_time | timestamp | 最后更新时间 | | | version | bigint | 版本号 | | | delete_flag | tinyint | 逻辑删除标志(0-未删除,1-已删除) | | ### 打卡任务状态表 表名:punch_in_status 作用:punch_in_multi_task_unique_id和punch_in_task_unique_id字段不能同时出现,是一张公用表,punch_in_multi_task_unique_id出现时是多任务的打卡状态,punch_in_task_unique_id出现时是单任务的打卡状态 | 字段 | 类型 | 描述 | 索引 | | ----------------------------- | ----------- | ------------------------------------------------ | -------- | | id | bigint | 主键 | 主键索引 | | user_id | bigint | 用户ID | 普通索引 | | punch_in_multi_task_unique_id | bigint | 打卡多任务唯一ID | 普通索引 | | punch_in_task_unique_id | bigint | 打卡任务唯一ID | 普通索引 | | consecutive_status | varchar(20) | 连续打卡状态(正常打卡-NORMAL、中断--INTERRUPTED) | | | consecutive_day | int | 连续天数,第一天开始就等于1 | | | start_date | date | 开始日期 | | | end_date | date | 结束日期 | | | created_by | bigint | 创建人 | | | creation_time | timestamp | 创建时间 | | | last_updated_by | bigint | 最后更新人 | | | last_update_time | timestamp | 最后更新时间 | | | version | bigint | 版本号 | | | delete_flag | tinyint | 逻辑删除标志(0-未删除,1-已删除) | | ### 打卡任务状态记录表 表名:punch_in_status_history | 字段 | 类型 | 描述 | 索引 | | ----------------------------- | ----------- | ------------------------------------------------ | -------- | | id | bigint | 主键 | 主键索引 | | user_id | bigint | 用户ID | 普通索引 | | punch_in_multi_task_unique_id | bigint | 打卡多任务唯一ID | 普通索引 | | punch_in_task_unique_id | bigint | 打卡任务唯一ID | 普通索引 | | consecutive_status | varchar(20) | 连续打卡状态(正常打卡-NORMAL、中断--INTERRUPTED) | | | consecutive_day | int | 连续天数,第一天开始就等于1 | | | start_date | date | 开始日期 | | | end_date | date | 结束日期 | | | created_by | bigint | 创建人 | | | creation_time | timestamp | 创建时间 | 普通索引 | | last_updated_by | bigint | 最后更新人 | | | last_update_time | timestamp | 最后更新时间 | | | version | bigint | 版本号 | | | delete_flag | tinyint | 逻辑删除标志(0-未删除,1-已删除) | | ### 结算积分记录表 表名:settle_points_history | 字段 | 类型 | 描述 | 索引 | | ---------------------- | ----------- | ---------------------------------- | -------- | | id | bigint | 主键 | 主键索引 | | settle_task_history_id | bigint | 结算任务执行记录ID | 普通索引 | | user_id | bigint | 用户表主键 | 普通索引 | | settle_date | varchar(10) | 结算日期 | 普通索引 | | settle_points | int | 结算积分 | | | before_settle_points | int | 结算前用户拥有的积分 | | | after_settle_points | int | 结算后用户拥有的积分 | | | created_by | bigint | 创建人 | | | creation_time | timestamp | 创建时间 | | | last_updated_by | bigint | 最后更新人 | | | last_update_time | timestamp | 最后更新时间 | | | version | bigint | 版本号 | | | delete_flag | tinyint | 逻辑删除标志(0-未删除,1-已删除) | | ### 结算任务执行记录表 表名:settle_task_history | 字段 | 类型 | 描述 | 索引 | | ---------------------- | ----------- | ---------------------------------- | -------- | | id | bigint | 主键 | 主键索引 | | settle_date | varchar(10) | 结算日期 | 普通索引 | | processed_total_num | int | 待处理的总结算数量 | | | processed_settle_num | int | 处理已结算数量 | | | processed_unsettle_num | int | 处理没结算数量 | | | created_by | bigint | 创建人 | | | creation_time | timestamp | 创建时间 | | | last_updated_by | bigint | 最后更新人 | | | last_update_time | timestamp | 最后更新时间 | | | version | bigint | 版本号 | | | delete_flag | tinyint | 逻辑删除标志(0-未删除,1-已删除) | | ### 物品消费与中奖记录 表名:item_consume_win_history | 字段 | 类型 | 描述 | 索引 | | ---------------- | ------------- | ------------------------------------------------------------ | -------- | | id | bigint | 主键 | 主键索引 | | user_id | bigint | 用户ID | 普通索引 | | action | varchar(30) | 动作(消费-CONSUME,中奖-WIN,撤销消费-REVERSE_CONSUME,撤销中奖-REVERSE_WIN) | | | source | varchar(100) | 来源 | | | category | varchar(100) | 种类 | | | 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 | varchar(10) | 状态(ENABLED-启用,DISABLED-失效) | | | created_by | bigint | 创建人 | | | creation_time | timestamp | 创建时间 | | | last_updated_by | bigint | 最后更新人 | | | last_update_time | timestamp | 最后更新时间 | | | version | bigint | 版本号 | | | delete_flag | tinyint | 逻辑删除标志(0-未删除,1-已删除) | | ### 系统字典项表 表名:sys_dict_item | 字段 | 类型 | 描述 | 索引 | | ---------------- | ------------ | ------------------------------------------- | -------- | | id | bigint | 主键 | 主键索引 | | dict_id | bigint | 字典表主键 | 普通索引 | | data_type | varchar(10) | 数据类型(STRING-字符串,INTEGER-整型数值) | | | item_code | varchar(100) | 字典项编码 | 普通索引 | | item_name | varchar(100) | 字典项名称 | | | description | varchar(200) | 描述 | | | status | varchar(10) | 状态(ENABLED-启用,DISABLED-失效) | | | created_by | bigint | 创建人 | | | creation_time | timestamp | 创建时间 | | | last_updated_by | bigint | 最后更新人 | | | last_update_time | timestamp | 最后更新时间 | | | version | bigint | 版本号 | | | delete_flag | tinyint | 逻辑删除标志(0-未删除,1-已删除) | | ### 账户 表名:account | 字段 | 类型 | 描述 | 索引 | | ---------------- | ------------ | ---------------------------------------- | -------- | | id | bigint | 主键 | 主键索引 | | user_id | bigint | 用户id | 普通索引 | | account_name | varchar(100) | 账户名称 | | | account_type | varchar(30) | 账户类型(BASIC-基本户,GENERAL-一般户) | | | points | int | 奖励积分 | | | created_by | bigint | 创建人 | | | creation_time | timestamp | 创建时间 | | | last_updated_by | bigint | 最后更新人 | | | last_update_time | timestamp | 最后更新时间 | | | version | bigint | 版本号 | | | delete_flag | tinyint | 逻辑删除标志(0-未删除,1-已删除) | | ### 账户转账记录 表名:account_transfer_history | 字段 | 类型 | 描述 | 索引 | | ------------------------- | --------- | ---------------------------------- | -------- | | id | bigint | 主键 | 主键索引 | | user_id | bigint | 用户id | 普通索引 | | sender_account_id | bigint | 转出账户id | | | recipient_account_id | bigint | 转入账户id | | | transfer_points | int | 转账积分 | | | sa_points_before_transfer | int | 转出账户转出前积分 | | | sa_points_after_transfer | int | 转出账户转出后积分 | | | ra_points_before_transfer | int | 转入账户转入前积分 | | | ra_points_after_transfer | int | 转入账户转入后积分 | | | created_by | bigint | 创建人 | | | creation_time | timestamp | 创建时间 | 普通索引 | | last_updated_by | bigint | 最后更新人 | | | last_update_time | timestamp | 最后更新时间 | | | version | bigint | 版本号 | | | delete_flag | tinyint | 逻辑删除标志(0-未删除,1-已删除) | | ### 奖励 表名:reward | 字段 | 类型 | 描述 | 索引 | | ------------------- | ------------ | --------------------------------------------- | -------- | | id | bigint | 主键 | 主键索引 | | user_id | bigint | 用户id | 普通索引 | | reward_unique_id | bigint | 奖励唯一ID | | | reward_status | varchar(10) | 奖励状态(活跃-ACTIVE,归档-ARCHIVE) | | | reward_version | int | 奖励修改版本 | | | reward_name | varchar(100) | 奖励名称 | | | exchange_points | int | 兑换所需积分 | | | auto_status | varchar(10) | 是否启用自动兑换(ENABLED-启用,DISABLED-关闭) | | | auto_exchange_count | int | 自动兑换数量 | | | created_by | bigint | 创建人 | | | creation_time | timestamp | 创建时间 | | | last_updated_by | bigint | 最后更新人 | | | last_update_time | timestamp | 最后更新时间 | | | version | bigint | 版本号 | | | delete_flag | tinyint | 逻辑删除标志(0-未删除,1-已删除) | | ### 奖励与账户关联表 表名:reward_account_rela | 字段 | 类型 | 描述 | 索引 | | ---------------- | --------- | ---------------------------------- | -------- | | id | bigint | 主键 | 主键索引 | | user_id | bigint | 用户id | 普通索引 | | reward_unique_id | bigint | 奖励唯一id | | | account_id | bigint | 账户id | | | created_by | bigint | 创建人 | | | creation_time | timestamp | 创建时间 | | | last_updated_by | bigint | 最后更新人 | | | last_update_time | timestamp | 最后更新时间 | | | version | bigint | 版本号 | | | delete_flag | tinyint | 逻辑删除标志(0-未删除,1-已删除) | | ### 奖励兑换记录 表名:reward_exchange_history | 字段 | 类型 | 描述 | 索引 | | ------------------------------ | ----------- | ---------------------------------------- | -------- | | id | bigint | 主键 | 主键索引 | | user_id | bigint | 用户id | 普通索引 | | reward_id | bigint | 奖励id | | | exchange_method | varchar(10) | 兑换类型(手动兑换-MANUAL,自动兑换-AUTO) | | | exchange_count | int | 兑换次数 | | | exchange_total_points | int | 兑换所需总积分 | | | account_id | bigint | 兑换使用的账户id | | | account_points_before_exchange | int | 兑换前账户中的积分 | | | account_points_after_exchange | int | 兑换后账户中的积分 | | | created_by | bigint | 创建人 | | | creation_time | timestamp | 创建时间 | 普通索引 | | last_updated_by | bigint | 最后更新人 | | | last_update_time | timestamp | 最后更新时间 | | | version | bigint | 版本号 | | | delete_flag | tinyint | 逻辑删除标志(0-未删除,1-已删除) | | ### 打卡任务月数据统计 表名:punch_in_stats_month | 字段 | 类型 | 描述 | 索引 | | -------------------- | ------------ | ---------------------------------- | -------- | | id | bigint | 主键 | 主键索引 | | user_id | bigint | 用户id | 普通索引 | | task_unique_id | bigint | 任务唯一ID | 普通索引 | | stats_time | char(7) | 统计时间(格式:yyyy-MM) | 普通索引 | | punch_in_total_count | int | 本月需打卡数 | | | punch_in_count | int | 本月已打卡数 | | | punch_in_done_count | int | 本月完成打卡数 | | | punch_in_rate | decimal(5,2) | 本月打卡率 | | | punch_in_done_rate | decimal(5,2) | 本月打卡完成率 | | | points | int | 本月获取积分数 | | | created_by | bigint | 创建人 | | | creation_time | timestamp | 创建时间 | | | last_updated_by | bigint | 最后更新人 | | | last_update_time | timestamp | 最后更新时间 | | | version | bigint | 版本号 | | | delete_flag | tinyint | 逻辑删除标志(0-未删除,1-已删除) | | ### 打卡任务年数据统计 表名:punch_in_stats_year | 字段 | 类型 | 描述 | 索引 | | -------------------- | ------------ | ---------------------------------- | -------- | | id | bigint | 主键 | 主键索引 | | user_id | bigint | 用户id | 普通索引 | | task_unique_id | bigint | 任务唯一ID | 普通索引 | | stats_time | char(4) | 统计时间(格式:yyyy) | 普通索引 | | punch_in_total_count | int | 本年需打卡数 | | | punch_in_count | int | 本年已打卡数 | | | punch_in_done_count | int | 本年完成打卡数 | | | punch_in_rate | decimal(5,2) | 本年打卡率 | | | punch_in_done_rate | decimal(5,2) | 本年打卡完成率 | | | points | int | 本年获取积分数 | | | created_by | bigint | 创建人 | | | creation_time | timestamp | 创建时间 | | | last_updated_by | bigint | 最后更新人 | | | last_update_time | timestamp | 最后更新时间 | | | version | bigint | 版本号 | | | delete_flag | tinyint | 逻辑删除标志(0-未删除,1-已删除) | | ### 积分数据统计 表名:points_stats | 字段 | 类型 | 描述 | 索引 | | ---------------- | --------- | ---------------------------------- | -------- | | id | bigint | 主键 | 主键索引 | | user_id | bigint | 用户id | 普通索引 | | stats_time | char(10) | 统计时间(格式:yyyy-MM-dd) | 普通索引 | | settle_points | int | 每日积分的结算数 | | | consume_points | int | 每日积分的消耗数量 | | | total_points | int | 每日剩余总积分 | | | created_by | bigint | 创建人 | | | creation_time | timestamp | 创建时间 | | | last_updated_by | bigint | 最后更新人 | | | last_update_time | timestamp | 最后更新时间 | | | version | bigint | 版本号 | | | delete_flag | tinyint | 逻辑删除标志(0-未删除,1-已删除) | | ### 新用户数据统计 表名:new_user_stats | 字段 | 类型 | 描述 | 索引 | | ---------------- | --------- | ---------------------------------- | -------- | | id | bigint | 主键 | 主键索引 | | stats_time | char(10) | 统计时间(格式:yyyy-MM-dd) | 普通索引 | | new_user_count | int | 新用户数量 | | | created_by | bigint | 创建人 | | | creation_time | timestamp | 创建时间 | | | last_updated_by | bigint | 最后更新人 | | | last_update_time | timestamp | 最后更新时间 | | | version | bigint | 版本号 | | | delete_flag | tinyint | 逻辑删除标志(0-未删除,1-已删除) | | ### 定时任务执行配置表 表名:sys_schedule_task | 字段 | 类型 | 描述 | | ---------------- | ------------ | --------------------------------------------- | | id | bigint | 主键 | | task_code | varchar(100) | 定时任务编码 | | task_name | varchar(100) | 定时任务名称 | | execute_status | varchar(10) | 是否启用定时任务(ENABLED-启用、DISABLED-关闭) | | created_by | bigint | 创建人 | | creation_time | timestamp | 创建时间 | | last_updated_by | bigint | 最后更新人 | | last_update_time | timestamp | 最后更新时间 | | version | bigint | 版本号 | | delete_flag | tinyint | 逻辑删除标志(0-未删除,1-已删除) | ### 定时任务执行记录表 表名:sys_schedule_task_history | 字段 | 类型 | 描述 | 索引 | | ---------------- | ------------- | --------------------------------------------------- | -------- | | id | bigint | 主键 | 主键索引 | | task_code | varchar(100) | 定时任务编码 | | | task_name | varchar(100) | 定时任务名称 | | | launch_method | varchar(10) | 启动方式(AUTO-自动,MANUAL-手动) | | | start_time | timestamp | 任务开始时间 | | | end_time | timestamp | 任务结束时间 | | | process_status | varchar(10) | 执行状态(RUNNING-执行中,SUCCESS-成功,FAIL-失败) | | | error_message | varchar(5000) | 错误信息 | | | 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) * [tk.mybatis 2.1.15 如何将枚举类型在类中进行自动转换](https://blog.csdn.net/qq_42766445/article/details/134196790)