# 打卡结算 ui设计工具:即时设计 小程序框架:uniapp 后端框架:spring boot + mybatis + tk mybatis+ spring mvc 数据库:mysql ## 系统设计 ### 功能设计 * 用户 1. 微信用户登录 说明:简单记录下头像、微信id、昵称,然后用于区分即可 2. 用户注销?-这个不要应该也可以 * 打卡任务 1. 查询当前用户拥有的打卡任务列表 2. 新建任务 3. 编辑任务 4. 删除任务 5. 用户完成任务 * 奖励 1. 查询当前用户拥有的奖励数 2. 领取奖励 * 系统 1. 每晚自动结算 说明:每日凌晨把昨天完成的任务获得的奖励进行自动统计 2. 每天自动推送结算通知(第二版再增加这个功能) 说明:把每日结算结果推送到微信 ### 表设计 #### 用户表 表名:user | 字段 | 类型 | 描述 | | ---------------- | ------------- | ---------------------------------- | | 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-已删除) | #### 打卡任务表 表名:punch_in | 字段 | 类型 | 描述 | | -------------------- | ------------ | ---------------------------------- | | 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-已删除) | #### 打卡任务记录表 表名:punch_in_record | 字段 | 类型 | 描述 | | ---------------- | ----------- | ---------------------------------- | | id | bigint | 主键 | | punch_in_id | bigint | 打卡任务表主键 | | punch_in_date | varchar(10) | 打卡日期 | | 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 | | 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 | 字段 | 类型 | 描述 | | ----------------------- | --------- | ---------------------------------- | | 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-已删除) | #### 开发参考 * [两种优雅的获取当前登录用户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) ## 常用命令 ### Git命令 ```shell # 创建一个仓库目录,进入目录后执行命令 mkdir my-repo cd my-repo # 初始化一个本地仓库,但该仓库是作为远程仓库使用。 git init --bare ``` ### MySQL命令 ```shell # 初始化后才能使用,如果失败则要进行配置 mysqld --initialize-insecure # 注册mysql服务(需要管理员权限) mysqld -install # 启动mysql服务(需要管理员权限) net start mysql # 关闭mysql服务(需要管理员权限) net stop mysql ``` 参考: * [MySQL中的basedir和datadir的作用](https://blog.csdn.net/wolfalcon/article/details/80528678) * [MYSQL8.0安装、配置、启动、登入与卸载详细步骤总结](https://blog.csdn.net/qq_51688022/article/details/137105751) ## IDEA设置 ### 类注释模板 模板 ```java /** * @author ${USER} * @version 1.0.0 * @date ${DATE} ${TIME} * @description TODO */ ``` 参考:[IDEA 创建类注释模板](https://blog.csdn.net/GyaoG/article/details/120415660)