# 打卡结算 ui设计工具:即时设计 小程序框架:uniapp 后端框架:spring boot + mybatis + tk mybatis+ spring mvc 数据库:mysql 待增加功能 1. 结算规则要支持节假日补充规则 2. 打卡任务的年视图的统计功能 ## 系统功能 * 用户 1. (已开发)微信用户登录 说明:简单获取头像、微信openid、昵称,然后用于后台数据处理和前端显示即可 2. (未完成,这个最后开发)昵称修改 3. (未完成,这个最后开发)头像修改 * 打卡任务 1. (已开发)查询当前用户拥有的打卡任务列表 显示内容:任务名称、任务描述、奖励数、全勤奖励标识、周末奖励标识、本周打卡记录,今日打卡情况 说明:今日打卡情况未完成时的状态,根据不同的打卡类型有不同的显示 * 打卡类型:单次打卡,未完成显示“完成” * 打卡类型:计数,未完成显示“计数”,并且显示当前已打卡次数 * 打卡类型:计时,未完成显示“计时”,并且显示当前已记录的打卡时间 2. (已开发)新建/编辑任务 显示内容:任务名称、奖励数、全勤奖励标识、周末奖励标识、任务描述,打卡类型,打卡配置(四种比较规则、两种数值类型) 说明:目前有3种打卡类型,打卡配置根据打卡类型的不同而有所变化,从而形成丰富的打卡规则 * 打卡类型:单次打卡、计数、计时 * 打卡配置: * 单次打卡:这个不需要额外配置 * 计数:需要设置比较规则和数值 * 计时:需要设置比较规则和时间 * 比较规则:大于、小于、大于等于、小于等于 3. (已开发)删除任务 4. (已开发)打卡 5. (已开发,待自测)补打卡 对于不同的打卡类型,都是默认直接完成打卡 如果完全没有打过卡:按照当时的打卡规则,直接生成一条新的打卡记录和结算记录 如果打过卡但是未完成的 * 对于单次打卡:不存在这种情况 * 对于计数打卡:修改打卡记录的数据并记录修改值和对应的状态位,修改结算记录并记录修改值和对应的状态位 * 对于计时打卡:修改打卡记录的数据并记录修改值和对应的状态位,修改结算记录并记录修改值和对应的状态位 6. (已开发,待自测)误打卡撤销 有两种情况: 1. 当天撤销 对于单次打卡:直接删除打卡记录即可 对于计数打卡:直接扣减次数(-1)即可,次数变成0即删除打卡记录 对于计时打卡:直接删除打卡记录即可,然后重新再打卡即可 2. (这种情况应该不存在,打卡当时应该就能即时处理不会留到结算后)~~结算后撤销,对于不同的打卡类型,都是默认直接没有打过卡~~ ~~删除对应记录,根据对应任务反向计算即可,并记录修改值和对应的状态位~~ 7. (已开发)归档 8. (未完成)针对单一任务查询时间范围内的打卡信息 显示内容:具体到天是否已打卡、打卡记录、打卡统计(打卡次数、全勤率) 注意:这里在表增加一个状态值辅助判断 * 奖励 1. (已开发)查询当前用户拥有的奖励数 显示内容:总奖励数、已领取奖励数、待领取奖励数 2. (已开发,全部领取需要前端部分支持)领取奖励(部分领取、一次性全部领取) 说明:全部领取功能通过前端页面支持,后端不需要额外开发 3. (已开发)按时间范围查询当前用户的领取奖励记录 * 刮刮乐 1. (已开发)查询当前用户的投入刮刮乐信息 显示内容:投入金额、中奖金额 2. (已开发)追加投入金额记录/中奖记录 3. (已开发)撤销投入金额记录/中奖记录 4. (已开发)按时间范围的刮刮乐查询记录 显示内容:投入金额记录、中奖记录 * 结算 1. (已完成,待自测)手动运维接口,可以指定具体结算日期 2. (已完成)按时间范围查询当前用户的结算记录 * 系统 1. (已开发,待自测)每晚自动结算 ## 字典 ### 彩票来源 字典名称:彩票来源 字典编码:LOTTERY_SOURCE 字典项: | 字典项编码 | 字典名称 | | --------------- | -------- | | WELFARE_LOTTERY | 福利彩票 | | SPORTS_LOTTERY | 体育彩票 | ### 彩票刮刮乐种类 字典名称:彩票刮刮乐种类 字典编码:LOTTERY_SCRATCH_OFF_CATEGORY 字典项 | 字典项编码 | 字典名称 | | ---------- | -------- | | XINGYUN88 | 幸运88 | | CHAOGEILI | 超给力 | ## 表设计 ### 用户表 表名: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 | 字段 | 类型 | 描述 | | ---------------- | ----------- | ------------------------------------------------------------ | | id | bigint | 主键 | | punch_in_id | bigint | 打卡任务表主键 | | punch_in_date | varchar(10) | 打卡日期 | | count_track | int | 次数记录 | | time_track | time | 时间记录 | | punch_in_status | int | 打卡状态(0-进行中,1-完成,2-未完成) ,结算后修改状态,单次打卡除外 | | created_by | bigint | 创建人 | | creation_time | timestamp | 创建时间 | | last_updated_by | bigint | 最后更信人 | | last_update_time | timestamp | 最后更新时间 | | version | bigint | 版本号 | | delete_flag | tinyint | 逻辑删除标志(0-未删除,1-已删除) | ### 打卡任务结算表 表名:punch_in_settlement | 字段 | 类型 | 描述 | | ------------------------ | ----------- | ------------------------------------------------------------ | | id | bigint | 主键 | | user_id | bigint | 用户表主键 | | settle_reward_num | int | 结算奖励数 | | before_settle_reward_num | int | 结算前用户拥有的奖励数 | | after_settle_reward_num | int | 结算后用户拥有的奖励数 | | settlement_task_id | bigint | 结算任务表id | | settlement_time | timestamp | 结算时间 | | notify_id | bigint | 通知表ID | | notify_status | varchar(20) | 结算通知状态(fail-通知失败,success-成功通知,pending-待通知) | | notify_time | timestamp | 结算通知时间 | | created_by | bigint | 创建人 | | creation_time | timestamp | 创建时间 | | last_updated_by | bigint | 最后更信人 | | last_update_time | timestamp | 最后更新时间 | | version | bigint | 版本号 | | delete_flag | tinyint | 逻辑删除标志(0-未删除,1-已删除) | ### 打卡任务记录与结算关联表 表名:punch_in_record_settlement_rela | 字段 | 类型 | 描述 | | ---------------- | --------- | -------------------------------------------------------- | | 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_claim_reward_record | 字段 | 类型 | 描述 | | ----------------------- | --------- | ---------------------------------- | | id | bigint | 主键 | | user_id | bigint | 用户表主键 | | claim_reward_num | int | 本次领取奖励数 | | claim_reward_time | timestamp | 领取奖励时间 | | before_claim_reward_num | int | 领取前用户拥有的奖励数 | | after_claim_reward_num | int | 领取后用户拥有的奖励数 | | created_by | bigint | 创建人 | | creation_time | timestamp | 创建时间 | | last_updated_by | bigint | 最后更信人 | | last_update_time | timestamp | 最后更新时间 | | version | bigint | 版本号 | | delete_flag | tinyint | 逻辑删除标志(0-未删除,1-已删除) | ### 奖励结算定时任务执行记录表 表名:settlement_task | 字段 | 类型 | 描述 | | ---------------------- | ----------- | ---------------------------------- | | id | bigint | 主键 | | settle_date | varchar(10) | 结算日期 | | start_time | timestamp | 任务开始时间 | | end_time | timestamp | 任务结束时间 | | processed_num | int | 待处理结算数量 | | processed_settle_num | int | 处理已结算数量 | | processed_unsettle_num | int | 处理没结算数量 | | error_message | text | 失败异常信息 | | created_by | bigint | 创建人 | | creation_time | timestamp | 创建时间 | | last_updated_by | bigint | 最后更信人 | | last_update_time | timestamp | 最后更新时间 | | version | bigint | 版本号 | | delete_flag | tinyint | 逻辑删除标志(0-未删除,1-已删除) | ### ~~通知定时任务执行记录表(暂时无用)~~ 表名:settlement_notify_task | 字段 | 类型 | 描述 | | ------------------ | --------- | ---------------------------------- | | id | bigint | 主键 | | start_time | timestamp | 任务开始时间 | | end_time | timestamp | 任务结束时间 | | notify_num | int | 通知数量 | | notify_success_num | int | 通知成功数量 | | notify_fail_num | int | 通知失败数量 | | error_message | text | 失败异常信息 | | created_by | bigint | 创建人 | | creation_time | timestamp | 创建时间 | | last_updated_by | bigint | 最后更信人 | | last_update_time | timestamp | 最后更新时间 | | version | bigint | 版本号 | | delete_flag | tinyint | 逻辑删除标志(0-未删除,1-已删除) | ### 彩票刮刮乐记录 表名:lottery_scratch_record | 字段 | 类型 | 描述 | | ---------------- | ------------- | ----------------------------------------------------- | | id | bigint | 主键 | | user_id | bigint | 用户主键 | | action_type | int | 动作类型(0-投入/购买,1-中奖,2-撤销投入,3-撤销中奖) | | 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 | int | 状态(1-启用,0-失效) | | 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 | 字典表主键 | | 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) * [tk.mybatis 2.1.15 如何将枚举类型在类中进行自动转换](https://blog.csdn.net/qq_42766445/article/details/134196790)