如何实现抽签效果?
场景/问题描述
客户希望下属单位每次发起数据抽签,得到不重复的序号。
思路逻辑
创建一个抽签基础表,通过发起基础表数据来维护抽签情况,再通过抽签应用去进行抽签,对于已抽取到的签号通过qr把对应行更新。
配置过程
抽签基础表

用于生成所需抽签号,以及记录是否已经被占用。
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}



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

抽签应用

用于给各单位抽签。
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}
}


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



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


实现效果
数据管理-抽签基础表 - 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。请在原文中查看。