从0到1:企事业单位知识竞赛答题小程序迭代开发笔记一

背景调研

企事业单位知识竞赛答题小程序,在信息技术迅猛发展的时代,企业和事业单位在提升员工素质和知识水平方面面临着新的挑战。为了增强员工的学习积极性、提高团队凝聚力和整体素质,越来越多的单位开始组织知识竞赛活动。传统的知识竞赛往往依赖于线下纸质问卷,不仅耗时耗力,还难以及时统计结果。因此知识竞赛答题小程序,能够通过数字化手段提升竞赛的效率和互动性

功能规划

  • 分类题库:按照领域(例如生产安全、法律常识、交通安全,环保知识,卫生常识,学习强国等)和知识点进行分类,方便用户选择。
  • 随机抽题:用户可以选择特定领域,系统随机生成题目。
  • 答题竞赛: 模拟真实竞赛或考试环境,可以设置每场的时间。
  • 解析详解:每道题目提供详细的解答和解析,帮助用户理解解题思路。
  • 排行榜:展示用户的积分排名,促进比赛竞争。
  • 后台-题库管理:支持直接录入,或者通过Excel导入题库(每次5000条)
  • 后台-答题参数设置:可以设置竞赛开始状态,每次答题数目,每次答题时长限制,每天可参与答题竞赛次数等参数

概要设计脑图

在这里插入图片描述

数据库设计

QuestionModel.DB_STRUCTURE = {_pid: 'string|true',QUESTION_ID: 'string|true',QUESTION_TITLE: 'string|true|comment=题目',QUESTION_STATUS: 'int|true|default=1|comment=状态 0=未启用,1=使用中',QUESTION_CATE_ID: 'string|true|default=0|comment=分类',QUESTION_CATE_NAME: 'string|false|comment=分类冗余', QUESTION_ORDER: 'int|true|default=9999',QUESTION_FORMS: 'array|true|default=[]',QUESTION_OBJ: 'object|true|default={}', QUESTION_ADD_TIME: 'int|true',QUESTION_EDIT_TIME: 'int|true',QUESTION_ADD_IP: 'string|false',QUESTION_EDIT_IP: 'string|false',
};AnswerModel.DB_STRUCTURE = {_pid: 'string|true',ANSWER_ID: 'string|true',ANSWER_USER_ID: 'string|true',ANSWER_TYPE: 'int|true|default=0|comment=类型 0=测试,1=正式',ANSWER_CATE_ID: 'string|true|default=0|comment=分类',ANSWER_CATE_NAME: 'string|false|comment=分类冗余', ANSWER_DAY: 'string|true',ANSWER_START: 'int|true|default=0',ANSWER_END: 'int|true|default=0',ANSWER_DURATION: 'string|false',ANSWER_PER: 'int|true|default=0',ANSWER_SCORE: 'int|true|default=0',ANSWER_CNT: 'int|true|default=0',ANSWER_SUCC_CNT: 'int|true|default=0',ANSWER_LIST: 'array|true|default=[]',ANSWER_ADD_TIME: 'int|true',ANSWER_EDIT_TIME: 'int|true',ANSWER_ADD_IP: 'string|false',ANSWER_EDIT_IP: 'string|false',
};

核心算法

class QuestionService extends BaseProjectService {async getAnswerDetail(id) {return await AnswerModel.getOne(id);}async delAnswer(userId, id) {return await AnswerModel.del({ ANSWER_USER_ID: userId, _id: id });}// 得分统计async statAnswer(userId) {let where = {ANSWER_USER_ID: userId,ANSWER_TYPE: 1}let cnt = await AnswerModel.count(where);let score = await AnswerModel.sum(where, 'ANSWER_SCORE');let data = {USER_ANSWER_CNT: cnt,USER_ANSWER_SCORE: score}await UserModel.edit({ USER_MINI_OPENID: userId }, data);}// 每日可答题次数校验async isAnswerTimes(userId, cateId) {let dayCnt = 100;let setup = await setupUtil.get('answer');if (setup) {setup = dataUtil.dbForms2Obj(setup);dayCnt = Number(setup.daycnt);if (setup.open != true) {return '竞赛尚未开始!';}}let where = {ANSWER_CATE_ID: String(cateId),ANSWER_USER_ID: userId,ANSWER_TYPE: 1,ANSWER_DAY: timeUtil.time('Y-M-D')}let cnt = await AnswerModel.count(where);if (cnt >= dayCnt) {return '每日竞赛答题最多' + dayCnt + '次,请明日再来!';}return '';}async saveMyAnswer(userId,{start,end,list,type,cateId,cateName}) {}// 随机N条记录,生成本次题库async genQuestion(userId, type, cateId) {return { questionList: [], maxTime: 86400 };}async getMyAnswerList(userId, {search, // 搜索条件sortType, // 搜索菜单sortVal, // 搜索菜单orderBy, // 排序 page,size,isTotal = true,oldTotal}) {orderBy = orderBy || {'ANSWER_ADD_TIME': 'desc'};let fields = 'ANSWER_SCORE,ANSWER_CATE_NAME,ANSWER_TYPE,ANSWER_ADD_TIME,ANSWER_CNT,ANSWER_PER,ANSWER_SUCC_CNT,ANSWER_DURATION,ANSWER_START,ANSWER_END';let where = {};where.and = {ANSWER_USER_ID: userId,_pid: this.getProjectId() //复杂的查询在此处标注PID};if (util.isDefined(search) && search) {where.or = [];} else if (sortType && util.isDefined(sortVal)) {// 搜索菜单switch (sortType) {case 'type': {where.and.ANSWER_TYPE = Number(sortVal);break;}case 'cateId': {where.and.ANSWER_CATE_ID = String(sortVal);break;}case 'sort': {orderBy = this.fmtOrderBySort(sortVal, 'ANSWER_ADD_TIME');break;}}}return await AnswerModel.getList(where, fields, orderBy, page, size, isTotal, oldTotal);}async getScoreRankList({search, // 搜索条件sortType, // 搜索菜单sortVal, // 搜索菜单orderBy, // 排序 page,size,isTotal = true,oldTotal}) {orderBy = {'USER_ANSWER_SCORE': 'desc'};let fields = 'USER_NAME,USER_ANSWER_SCORE';let where = {};where.and = {_pid: this.getProjectId() //复杂的查询在此处标注PID};if (util.isDefined(search) && search) {where.or = [];} else if (sortType && util.isDefined(sortVal)) {// 搜索菜单switch (sortType) {case 'sort': {orderBy = this.fmtOrderBySort(sortVal, 'ANSWER_ADD_TIME');break;}}}return await UserModel.getList(where, fields, orderBy, page, size, isTotal, oldTotal);}}

UI设计

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

后台管理系统

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

git代码下载

点击下载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1555866.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【全球顶级域名后缀】

数据时间: 2024.10.6 广告: 五分钟申请SSL证书 (手机电脑都能用) ["aaa","aarp","abarth","abb","abbott","abbvie","abc","able","abogado","abudhabi","ac"…

GemFilter:基于早期层压缩加速长文本LLM推理

GemFilter 是一种用于加速长文本输入的 LLM 推理并降低内存消耗的新型 AI 方法,其利用 LLM 早期层识别关键信息的能力,从而显著压缩输入序列,并在保持性能的同时,实现高达 2.4 倍的加速和 30% 的内存使用减少。 论文介绍 大型语…

从代码到语言:CoreGen 助力自动化提交信息生成

1.概述 源代码与自然语言之间的语义鸿沟是生成高质量代码提交信息的一个重大挑战。代码提交信息对于开发者来说非常重要,因为它们简明扼要地描述了代码更改的高层次意图,帮助开发人员无需深入了解具体实现即可掌握软件的演变过程。手动编写高质量的提交信…

融资、投流、造血,大模型「新星」开启变现竞速

被称为“AI大模型应用元年”的2024年已过半,行业变化太快,充斥着各种声音。 原本漫长的技术发展周期,在大模型身上被装上了加速键。从卷参数、到卷应用,短短两年时间,玩家“百模大战”、资本烈火烹油,都在…

模型 SECI(知识的创造)

系列文章 分享 模型,了解更多👉 模型_思维模型目录。知识创造的螺旋转化模型。 1 SECI的应用 1.1 Tech Innovations移动应用创新 Tech Innovations是一家软件开发公司,致力于开发创新的移动应用程序。为了提升团队的知识共享和创新能力&…

论文选题没思路?用这7个GPT提示词10分钟确定论文选题

选题是论文写作的第一步,也是至关重要的一步。毕业论文选题都是让大学生头疼的大事。没有灵感、方向不清、信息太多,常常让人无从下手。现在有了ChatGPT这样的AI写作辅助工具,它可以帮你快速生成丰富的选题思路,轻松解决选题难题。…

fiddler抓包18-2_导出jmeter、postman脚本(带请求头)

课程大纲 1. Fiddler导出请求为curl脚本 选中请求,“文件” - “导出会话” - “选中的会话” - “cURL Script”。 2. 导入jmeter ① 复制curl脚本。 ② 打开jmeter,“工具” - “import from cURL”,粘贴脚本,勾选“Add cooki…

【百度文心智能体】想开发爆款智能体?来看看 万圣节之夜探秘者 智能体开发流程大揭秘

目录 前言 一. 创作灵感 二. 智能体中Prompt如何设计 2.1 头像 && 聊天背景 2.2 智能体简介 && 角色定位与目标 2.3 思考路径 && 个性化 2.4 开场白 && 自动追问 2.5 插件选择 三. 总结 前言 从2022年11月底ChatGPT …

Github优质项目推荐-第四期

文章目录 Github优质项目推荐 - 第四期一、【Umi-OCR】,26.1k stars - 文字识别工具二、【AFFiNE】,41k stars - 知识库平台三、【NocoBase】,12k stars - 无代码/低代码平台四、【neovim】,82.3k stars - 改良版VIM五、【generat…

构建llama.cpp并在linux上使用gpu

使用gpu构建llama.cpp 更多详情参见https://github.com/abetlen/llama-cpp-python,官网网站会随着版本迭代更新。 下载并进入llama.cpp 地址:https://github.com/ggerganov/llama.cpp 可以下载到本地再传到服务器上 git clone https://github.com/gg…

linux安装mysql显示公钥尚未安装 :mysql-community-libs-8.0.39-1.el7.x86_64.rpm 的公钥尚未安装

linux安装mysql显示公钥尚未安装 mysql-community-libs-8.0.39-1.el7.x86_64.rpm 的公钥尚未安装 如题,当执行 yum install -y mysql-community-server 报错 解决办法 命令行执行 yum install -y mysql-community-server --nogpgcheck 也就是在原来的命令后面…

【星汇极客】手把手教学STM32 HAL库+FreeRTOS之创建工程(0)

前言 本人是一名嵌入式学习者,在大学期间也参加了不少的竞赛并获奖,包括但不限于:江苏省电子设计竞赛省一、睿抗机器人国二、中国高校智能机器人国二、嵌入式设计竞赛国三、光电设计竞赛国三、节能减排竞赛国三。 后面会经常写一下博客&…

程序设计语言基础错题解析【软考】

目录 前言1.编译与解释2.编译器工作过程2.1编译过程概述2.2对语句的处理2.3源程序数据类型目的 3.中间代码4.正规式5.错误管理6.后缀表达式7.传值与传址7.1基础7.2实际计算 8.多种程序语言特点 前言 本文专门用来记录本人在做软考中有关程序设计语言基础的错题,我始…

【C/C++】错题记录(四)

题目一 一个函数可以有很多个返回值(有很多个return语句),但是最终只能有一个return语句执行。 题目二 题目三 题目四 题目五 程序数据结构算法 题目六 题目七 题目八 题目九 D选项是语句……

【进程间通信(二)】【命名管道】

目录 1. 命名管道1.1 现象1.2 理解1.3 编码通信 2. 了解日志2.1 了解可变参数2.2 在通信中加入日志信息 【进程间通信(一)】【管道通信(上)】 【进程间通信(一)】【管道通信(下)】 这…

深入解析DPU:AI时代的芯片分工与超级网卡

引言 在当今AI时代,计算需求的爆炸性增长使得传统数据中心的架构面临着巨大的挑战。数据处理任务越来越复杂,尤其是在大型AI模型如GPT和BERT的应用中,如何提高数据中心的计算和传输效率成为关键问题。传统的CPU(中央处理器&#…

希捷8T硬盘exfat变0字节的恢复方法

最近流行的3.5寸大容量台式硬盘移动盒子是一种性价比较高的组合,为了方便如涉及到跨平台(win和mac),大多数此类组合选择了exfat文件系统。下边这个案例就是我们经常遇到的exfat变0字节。 故障存储: ST8000HKVS002 8T/exfat 文件…

第十三章 Redis短信登录实战(基于Redis)

目录 一、概述 1.1. Session复制 1.2. 使用Redis 二、基于Redis实现共享Session登录 2.1. 实现思路 2.2. 功能实现的主要代码 2.2.1. 用户业务接口 2.2.2. 用户业务接口实现类 2.2.3. 用户控制层 2.2.4. 登录拦截器 2.2.5. 拦截器配置类 2.3. 优化登录拦截器 完…

Git基本操作与分支

一、操作入门 先看大屏幕:先背过 再来操作 初始化 刚入门的小朋友可能出现这种问题: 原因是:需要自己创建一个记事本文件 add的作用是添加指定文件到暂存区。 commit是提交暂存区到仓库区,此处的仓库是本地仓库,本…

选择最佳HR系统_6款产品评测与推荐

本文盘点了ZohoPeople、SAPSuccessFactors等六款主流HRMS,各系统各具特色,如ZohoPeople的全球化云管理、SAP的高定制化、Workday的实时数据分析等,适合不同规模企业需求,建议企业试用后决策。 一、Zoho People Zoho People 是一个…