有个奖励类型任务悬赏需求,求个优雅方案

如题,求个表结构设计和一些逻辑,主要奖励余额为主,要方便后期维护的(之前有现成的,但是像一些完成任务的逻辑比较分散不太好维护)

框架为thinkcmf但不限于该框架,主要求逻辑和表结构

任务会包括一些邀请新人完善资料等…
有现成的解决方案更好

目前表结构

有个奖励类型任务悬赏需求,求个优雅方案

理想的光照不到现实的黑暗,明灯是黑夜中的奢侈品。如果你接受不了真实生活千疮百孔的消极,那么,请移步儿童区...
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

博客:使用pipeline设计模式实现用户积分任务需求
看我回答 我做的跟你做的是一样的事情…

CREATE TABLE `user_tasks` (
  `id` int NOT NULL AUTO_INCREMENT,
  `image` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
  `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
  `scriptname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
  `starttime` timestamp NULL DEFAULT NULL,
  `endtime` timestamp NOT NULL,
  `reward` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '奖励类型 credit: 积分,',
  `reward_var` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
  `bonus` int DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  `deleted_at` timestamp NULL DEFAULT NULL,
  `is_once` int DEFAULT NULL,
  `group` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC;
CREATE TABLE `user_task_finish` (
  `id` int NOT NULL AUTO_INCREMENT,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  `user_id` int NOT NULL,
  `task_id` int NOT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=35331 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC;

Laravel

1个月前 评论
working (楼主) 1个月前
讨论数量: 22

我也会按照这个表来设计,只是我会把任务类型哪里颗粒度设置到最小,用户身份哪里看系统,颗粒度到最小更好,其他的没啥了

1个月前 评论
working (楼主) 1个月前
wade (作者) 1个月前
working (楼主) 1个月前

int(1) 和 tinyint(1) ,够用的情况下,优先选择tinyint(1),因为占字节少、节省空间。

1个月前 评论
working (楼主) 1个月前
Rache1 1个月前
zxr615 1个月前
Rache1 1个月前

:joy:之前做过 但做完没上线

1个月前 评论
working (楼主) 1个月前
东莞小公主 1个月前

建议做一些冗余字段设计,比如任务完成时间同步记录到任务表中,查询时仅根据是否存在完成时间判断任务是否完成,而不是去关联任务日志表(日志表后续数量增长比较大),其他像任务进度等等也可以做冗余,尽量不去关联任务日志表,另外楼主的这个表字段选用真是没眼看,有空看看数据表设计方面的信息,int的长度在不适用补全功能的情况下不需要区别是1还是11,不是所有数字都用int,也不是所有字符都用varchar,更不是全是255,还有设计金额字段一定要用双浮点类型,楼主重新设计一下吧

1个月前 评论
working (楼主) 1个月前
lgbxhr (作者) 1个月前
working (楼主) 1个月前

任务本身可以有一张表 内含比如任务类型 ,循环类型(每日 每周 每月 一次性),完成次数(一周几次),完成条件(达成几次),奖励类型,奖励数量,奖励可以考虑分出去 而后是用户任务完成表,用来记录开始状态与完成状态以及奖励领取状态(奖励信息快照等),以及循环的标记等等 再细化一点可以装抽象一步任务动作,任务动作限制等,以完成整体的任务后台可配置化 还有奖励发放模块等等

1个月前 评论
working (楼主) 1个月前

博客:使用pipeline设计模式实现用户积分任务需求
看我回答 我做的跟你做的是一样的事情…

CREATE TABLE `user_tasks` (
  `id` int NOT NULL AUTO_INCREMENT,
  `image` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
  `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
  `scriptname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
  `starttime` timestamp NULL DEFAULT NULL,
  `endtime` timestamp NOT NULL,
  `reward` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '奖励类型 credit: 积分,',
  `reward_var` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
  `bonus` int DEFAULT NULL,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  `deleted_at` timestamp NULL DEFAULT NULL,
  `is_once` int DEFAULT NULL,
  `group` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC;
CREATE TABLE `user_task_finish` (
  `id` int NOT NULL AUTO_INCREMENT,
  `created_at` timestamp NULL DEFAULT NULL,
  `updated_at` timestamp NULL DEFAULT NULL,
  `user_id` int NOT NULL,
  `task_id` int NOT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=35331 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ROW_FORMAT=DYNAMIC;

Laravel

1个月前 评论
working (楼主) 1个月前

这个系统在哪里能看得到

1个月前 评论
working (楼主) 1个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!