把PBP、前端对接、钉钉集成玩透的考试系统

news2024/11/29 8:37:45

在这里插入图片描述

文/刘俊良 周亮 年佳斌

编辑/杜逸敏

一、项目背景

客户需要开发一套企业内部的考试系统,用于企业内部规章制度的学习及考核。系统的主要功能包括:

  1. 每个员工都可以进行每日答题与专项答题。
  2. 根据答题结果,归类不同的题库以供员工查询学习。
  3. 交卷后系统自动完成判卷并积分。
  4. 与钉钉深度集成,包括实现考试系统与明道云单点登录;每日自动推送考试待办任务,完成答题后标记完成待办;每月自动推送积分榜
  5. 个性化配置,题库、答题数量、每日答题次数、题目计分规则等支持随时调整。

这是一套典型的兼具高复杂度与灵活性要求的系统,很难找到标准的商业软件来完全满足需求,定制开发又远超项目成本预期,而明道云完美地胜任了这项工作。下面,我们一起来看一下如何用明道云来实现这套考试系统。

二、成果预览

如图可见,用户只需要在移动端或者PC端进入系统,即可完成相应的操作,接下来本文将全面拆解这套系统的开发过程。

在这里插入图片描述

三、开发拆解

开发架构

考虑到用户页面交互的灵活性,本系统采用「原生前端开发+后端零代码」来实现。

原生前端:考试答题的交互页面,向后端调用题库数据与答题请求。

明道云后端:作为后台接收前端请求,完成考试结果验证、试卷生成、推送钉钉消息。

零代码后端开发

1.可视化配置数据库

经过分析,此系统主要包含用户、基础题库、答题题库、试卷、试卷题目、制度、专项等业务对象。我们使用工作表,快速完成这些业务实体的数据建模和规则编排。
在这里插入图片描述
在这里插入图片描述

2.通过强大的工作流引擎实现后端功能开发

Webhook实现接受前端请求并完成答题业务流

用户在前端提交答题后,前端会向明道云提供的Webhook地址推送相关数据。明道云工作流会自动批改答卷,增加积分,将已答题目标记归档,并给对应用户新增一套新的试卷。
在这里插入图片描述
在这里插入图片描述

3.使用业务封装能力强化系统后台处理能力

本系统封装了13个PBP工作流,9个工作表事件工作流,5个时间工作流,2个人员事件工作流来完成后端系统数据与流程的自动化处理。
在这里插入图片描述

系统将需要高频率实现的功能进行了业务封装,主要包括题库生成、试卷生成、组织架构同步等功能。
在这里插入图片描述

除此以外,我们还配置了多条工作流来保证业务的连续性,主要包括:

  • 新增专项或试卷后,自动新增对应考试题目
  • 当系统有新员工加入时,为其自动生成需要考试试卷
  • 当基础题库发生变更时,系统同步更改基础题库分发出去的所有题库。

4.使用集成中心完成深度的系统集成工作

由于客户要求与钉钉深度集成,需要打通钉钉的组织架构与消息待办接口。所以,我们将钉钉需要用到的能力通过API集成的方式封装到集成中心,一共封装了12个API。再结合自动化工作流,实现钉钉组织架构信息的自动同步以及消息待办的集成。

注:虽然明道云本身已经实现了与钉钉的打通,包括明道云的审批、填写和消息通知。不过考虑到系统需要获取钉钉用户的Union ID,而且考试业务并不是传统的审批、填写等待办,需要单独调用钉钉的Open API来实现个性化待办业务创建,我们才进行深度集成工作。

在这里插入图片描述

钉钉的功能设计要求管理员先创建审批实例,再创建审批待办,最后再调用消息通知接口,才能实现给用户推送消息待办的功能。而明道云通过PBP,将这三个接口调用封装成一个工作流,简洁高效调用。

在这里插入图片描述

完成以上PBP的配置后,我们再使用一个简单的定时工作流来调用它,就能实现每天给用户推送考试任务待办的功能。
在这里插入图片描述

通过以上自动化流程配置,用户体验变得非常流畅:每天早上8:30,用户会在钉钉上收到考试任务代办的通知,点击通知,会跳转至考试系统页面进行答题,完成答题后,系统会接收到相关数据并题目进行处理同时将今日的钉钉待办任务消除。

前端开发

1.个性化前端定制

因为本系统用户操作主要在前端,对于前端页面个性化程度要求很高,因此我们选择定制化前端开发来完成页面开发。

就考试系统而言,前端开发的复杂度并不高,项目团队也在不到一周的时间内完成了开发。不过值得提醒的是,这个前端开发并没有涉及到任何数据库开发,无论是缓存数据库还是数据存储都是通过明道云来实现。并且,现在市面上也有不少零代码进行前端开发的软件,因此这项工作本身也没有太大的难度。

2.通过API完成数据和信息交互

当前端页面完成开发后,我们需要实现前后端的打通,主要是通过API来完成。本系统的数据对象并不多,因此前端集成的工作也是很快就完成了,主要包括以下集成:

通过应用自动生成的API接口调用题库以及试卷数据

系统后台会自动生成相关的API接口,前端通过调用接口即可拿到相关的数据。
在这里插入图片描述

向后端提供的Webhook地址,推送考试试卷

明道云后端准备了两个Webhook地址,一个是接收考试结果数据,另一个是接收考试过程数据。

用户每完成一道题目作答,前端便会推送答题数据到明道云后台;完成考试交卷后也会推送相关数据到明道云后台,后台接收到数据后通过自动化工作流来进行相关处理,保证整个流程完整通畅。

重点难题

本系统也是项目团队第一次尝试原生前端与明道云后端结合的开发模式,在过程中也遇到几个重点难题,可以供相关项目开发时参考。

1.三套系统的账号体系打通

本项目涉及三个系统:钉钉、原生前端与明道云。部署模式是将原生前端以钉钉微应用的方式部署,实现原生前端与钉钉的免登录。用户不需要登录明道云,但是用户相关的考试数据都可以存储在明道云上。这是怎么实现的呢?

由于用户访问前端时,前端可以获取到用户的钉钉ID,因此我们在明道云上维护了一张表,建立用户的钉钉ID与明道云的UserID的映射。当用户访问前端页面,前端页面便请求明道云API拿到用户的UserID。再通过UserID,就可以准确获取到当前的题库以及试卷数据。
在这里插入图片描述

2.实现无延时的答题体验

在明道云后台会预先给用户生成两套试卷,一套激活,一套未激活。用户点击答题时前端会直接调用API获取激活的试卷,用户完成答题后,前端会推送Webhook请求,明道云后台会立刻将这套激活试卷标记为已完成,并将那套未激活试卷标记为激活,同时会在后台执行生成一套未激活试卷的工作流。

通过上述方案,明道云系统会在前端请求Webhook的同时,给用户生成好新的试卷,并执行工作流在几秒钟后生成好新的缓存的试卷。对于用户而言,他可以流程地在答完一套试卷后立刻开始下一套答题,体验无延时。

3.避免用户的作弊操作

这个问题是系统设计之初的漏洞。由于前端没有考虑缓存,因此用户在答题过程中只要不点击提交试卷,中途退出后再进入页面,就得重做一遍。有部分用户利用这个漏洞提交很多套满分答卷。

为了解决这个问题,我们加入了缓存功能:用户每在前端完成一道题目的回答,前端就会推送相关数据到明道云,明道云就会把该题目标记为已答并缓存答案。用户在过程中退出再重新进入页面时,系统会从明道云拿到答题的缓存数据,并将已经回答过的题目标记好答案,并不允许用户再次作答。

通过这样的缓存设计,我们避免了用户答题过程中的漏洞,整个系统得以顺利上线。

四、项目延展

小结一下,本系统主要是通过明道云的工作表快速完成可视化数据建模和数据存储,并通过工作流和业务封装能力完成大量后端CRUD功能的实现,最后依靠自身完善的开放性设计实现系统对接。

以本文所介绍的案例来看,大量的系统开发都可以按照这个模式来实现,通过零代码平台完成后端开发,并实现系统集成。如果有需要的话,我们再搭配一个个性化前端即可。基于此,零代码开发能在更多领域和场景有所建树。

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

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

相关文章

进击的 AI 生成,创造性的新世界!

2022年,AI艺术生成文本生成图像的AI绘画生成器如雨后春笋般涌现,以一幅幅“不明觉厉”的AI作品进入大众视野。从2月Disco Diffusion爆火,仅两个月后OpenAI发布DALL-E 2,谷歌和Meta紧随其后宣布了各自的AI”画家“Imagen和Make-A-S…

尚医通-排班规则接口-排班详情接口-前端整合(二十五)

目录: (1)医院排班-排班规则接口 (2)医院排班-排班规则-前端整合 (3)医院排班-排班详情接口 (4)医院排班-排班详情前端整合 (1)医院排班-排班…

一文分析Linux虚拟化KVM-Qemu分析之内存虚拟化

说明: KVM版本:5.9.1QEMU版本:5.0.0工具:Source Insight 3.5, Visio 1. 概述 深入分析Linux虚拟化KVM-Qemu之ARMv8虚拟化文中描述过内存虚拟化大体框架,再来回顾一下: 非虚拟化下的内存的访问…

剑指 Offer 07. 重建二叉树

剑指 Offer 07. 重建二叉树 一、题目 输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。 假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 Input: preorder [3,9,20,15,7], inorder [9,3,15,20,7] Output: [3,9,20,null,null,1…

ansible第三天作业

1.挂载本地光盘到/mnt 2.配置yum源仓库文件通过多种方式实现 仓库1 : Name: RH294_Base Description: RH294 base software Base urt: file:///mnt/BaseOS 不需要验证钦件包 GPG 签名 启用此软件仓库 仓库 2: Name: RH294_Stream Description …

QGIS编译---QGIS3.22.4 + Qt5.15.3 + VS2019 ---64位版本

0 编译结果 先放上编译结果: 图1 QGIS3.22 启动界面 图2 QGIS3.22 操作界面 1 前言 因一些主观、客观原因,一年多没更新博客了,提笔继续。 这是笔者编译的第三个版本QGIS,本次编译原因有四: (1&#xff…

05-微服务调用组件FeignDubbo实战

JAVA 项目中如何实现接口调用 1)Httpclient HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 Http 协议的客户端编程工具包,并且它支持 HTTP 协议最新版本和建议。HttpClient 相比传统 JDK 自带的UR…

Neo4j图数据库实现节点批量删除

1 前言 1-1 简介 由于对图数据库需要经常维护,图数据库建设初期,需要经常对数据写入删除等操作。 1-2 任务背景 再将1100万数据写入Neo4j后,由于需要对每个实体的label做精细化处理,之前写入的时候每个实体的label全部都为‘Comm…

Webhook端口使用介绍与演示

在API接口调用的集成项目中,用户调用知行之桥的API接口以给EDI系统推送数据时,经常会有这样的疑问:怎样查看是否调用接口成功?怎样查看数据是否推送成功?推送之后用户端会有怎样的响应提示? 为满足以上问题…

个人资料、消息、书签和偏好设置 干货 | 环境问题还是测试的老大难?两个步骤轻松搞定

在实际的工作中,绝大部分公司都至少有3个以上的环境,供测试与研发人员使用。测试人员不可能为每个环境都准备一个自动化测试的脚本,这样的维护成本太过庞大。所以就需要做到一套脚本,可以在各个环境上面运行。首先在上一节提到过的…

并发编程——7.共享模型之工具

目录7.共享模型之工具7.1.线程池7.1.1.自定义线程池7.1.2.ThreadPoolExecutor7.1.2.1.线程池状态7.1.2.2.构造方法7.1.2.3.newFixedThreadPool7.1.2.4.newCachedThreadPool7.1.2.5.newSingleThreadExecutor7.1.2.6.提交任务7.1.2.7.关闭线程池7.1.2.9.异步模式之工作线程7.1.2.…

python之字符串分割

str.split() 是 Python 中字符串类型的一个方法,可以用来将字符串按照指定的分隔符分割成多个子字符串。 例如,如果你有一个字符串 ‘a,b,c,d’,你可以这样分割它: >>> a,b,c,d.split(,) [a, b, c, d]这会将字符串按照…

Web API的方法论及实践

文章目录前言基本原则构建步骤API 实践商品呈现初始的设计个性化,千人千面 & 可视化超前的设计监控遗漏的监控业务服务效率是第一生产力业务服务API样例服务配置ClientInfo“用完即走”的业务服务一个周末的辛劳无数个喝咖啡的悠闲时光总结参考资料前言 对于网…

EMQX+阿里云飞天洛神云网络 NLB:MQTT 消息亿级并发、千万级吞吐性能达成

随着物联网技术的发展与各行业数字化进程的推进,全球物联网设备连接规模与日俱增。一个可靠高效的物联网系统需要具备高并发、大吞吐、低时延的数据处理能力,支撑海量物联网数据的接入与分析,从而进一步挖掘数据价值。 于今年五月发布的 EMQ…

Java后端知识之代码混淆-避免反编译工具获取原码

java, 代码混淆, 编译, 反编译本文是向大家介绍java后端小知识,它能够实现编译后的class代码加密,能够避免使用反编译工具获取源码。本文介绍java代码编译成class后,怎么避免用反编译工具获取源码。编译简单先看一下java源码反编译就是针对编…

MCU-51:单片机蜂鸣器播放孤勇者

目录一、蜂鸣器介绍二、驱动电路2.1 三极管驱动2.2 集成电路驱动三、蜂鸣器播放音乐3.1 键盘与音符对照3.2 音符与频率对照四、孤勇者乐谱五、代码演示前面学习了 MCU-51:单片机蜂鸣器播放音乐和提示音我们知道了可以用51单片机播放乐谱今天我们用51单片机播放 孤勇…

修改NuGet包默认存放位置

默认情况下,NuGet下载的包存放在系统盘(C盘中),这样一来,时间长了下载的包越多,C盘占用的空间也就越多。 1、问题描述 默认情况下,NuGet下载的包存放在系统盘(C盘中,一般在路径C:\Users\用户\.nuget\packag…

让人意外,iPhone15将增加中国制造的比例,苹果再回头

业界人士指出苹果的iPhone15将会分单给中国代工商,屏幕、镜头玻璃等也会增加给中国厂商的比例,这是在业界传闻苹果试图摆脱中国制造之后的好消息,显示出苹果仍然需要中国制造。一、iPhone15加大中国制造比例据悉iPhone15 Pro max将会有部分订…

【20230105】pip pip3 替换国内镜像源

1 存在问题 在使用默认pip3安装库时,出现超时情况。 pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host‘files.pythonhosted.org’, port443): Read timed out. 2 国内的pip源 阿里云:https://mirrors.aliyun.com/pypi/sim…

k8s之使用yaml创建pod

写在前面 本文一起看下如何通过声明式的yaml文件来创建pod。 1:命令式和声明式 命令式就是具体告诉计算机做什么,比如我们写的Java代码,Dockerfile定义FROM,COPY,CMD,RUN,Expose等语句&#…