跳到主要内容

如何实现抽签效果?

场景/问题描述

客户希望下属单位每次发起数据抽签,得到不重复的序号。

思路逻辑

创建一个抽签基础表,通过发起基础表数据来维护抽签情况,再通过抽签应用去进行抽签,对于已抽取到的签号通过qr把对应行更新。

配置过程

抽签基础表

image.png

用于生成所需抽签号,以及记录是否已经被占用。

function generateArrayObjects(num) {
var array = [];

for (var i = 1; i <= num; i++) {
array.push({ "num": i });
}

return array;
}

var num = qf_field.{本轮抽签数$$1747DA07E$$};

var resultArray = generateArrayObjects(num);

qf_output = {result : resultArray}

image.pngimage.pngimage.png

配置关联已有表格,自动生成序号记录表:

image.png

抽签应用

image.png

用于给各单位抽签。

var table = qf_field.{表格$$1747DEE8A$$};

function getRandomUnoccupiedNumber(array) {
// 保存状态为"未占用"的对象
var unoccupiedObjects = [{"field_162510244":"","field_162499813":null}];

// 遍历数组,找到状态为"未占用"的对象
for (var i = 0; i < array.length; i++) {
if (array[i]["field_162510244"] === "未占用") {
unoccupiedObjects.push(array[i]);
}
}

if(unoccupiedObjects.length>1){unoccupiedObjects.shift();}
// 从保存的对象数组中随机选择一个对象
var randomIndex = Math.floor(Math.random() * unoccupiedObjects.length);
var randomObject = unoccupiedObjects[randomIndex];

// 返回选中对象的序号属性

return randomObject["field_162499813"];
}

if(table==null){qf_output = {result : 0}}
else{

// 获取随机未占用的序号
var randomUnoccupiedNumber = getRandomUnoccupiedNumber(table);

// 输出结果
qf_output = {result : randomUnoccupiedNumber}
}

image.png

image.png

通过流程去更新基础表的抽签号状态

image.png

image.png

image.png

申请人节点配置下提交校验-应用校验(用于避免有多个成员同时更新基础表的情况)

aeb219f55fa9f99cedeb702bbcfa8d89.png

image.png

实现效果

数据管理-抽签基础表 - Google Chrome 2023-08-30 15-20-58.mp4

抽签应用-test - Google Chrome 2023-08-30 15-21-36.mp4

视频:抽签应用-test - Google Chrome 2023-08-30 15-21-36.mp4。请在原文中查看。

视频:数据管理-抽签基础表 - Google Chrome 2023-08-30 15-20-58.mp4。请在原文中查看。