跳到主要内容

两个文本控制流水号的生成

场景/问题描述

一、如果判断第一个文本框内的值为“外购”返回“1.”,值为“自制”返回“2.”,值为“外协”返回“3.”,值为“组件”返回“4.”. 二、判断第二个文本框内的值为“压铸”返回“01.”,值为“冲压”返回“02.”,值为“型材”返回“03.”,值为“注塑”返回“04.”,值为“线缆”返回“05.”,值为“辅料”返回“05.”. 三、流水号(当一个全新码出现时,流水号是从0001开始的)

例如:如果是外购压铸,返回的编号就是1010001,自制型材,返回编号就是2030001

思路逻辑

方式1:主要使用数据关联功能来进行编号的递增处理,辅助字段过多

方式2:直接使用代码块来进行数据的处理

针对方式2由于是跟自身应用数据进行对比,所以如果数据并发的话,可能会出现编号重复的情况,后续代码块节点上线可以解决

配置过程

方式1:轻流公式实现

表单字段配置

image.png

第一个数字

IFS(文本一=="外购",1,文本一=="自制",2,文本一=="外协",3,文本一=="组件",4)

image.png

第二个数字

IFS(文本二=="压铸","01",文本二=="冲压","02",文本二=="型材","03",文本二=="注塑","04",文本二=="线缆","05",文本二=="辅料","06")

image.png

前置码

CONCAT(第一个数字,第二个数字)

image.png

流水码

IF(数据关联!=null,RIGHT(CONCAT("0000",NUM(数据关联)+1),4),"0001")

image.png

数据关联

image.png

编码

CONCAT(前置码,流水码)

image.png

实现效果

image.png

image.png

方式2:代码块实现

代码与测试

表单设计

image.png

代码注释

URL:替换成获取应用数据接口

token:超管token

queId:分别对应value1、value2、流水号字段的字段ID

image.png

const axios = require('axios');

function getNextSerialNumber(value1, value2, res_list) {
if (value1 === null || value2 === null) {
return ''; // 如果 value1 或 value2 为空,则返回空字符串
}

const value1Map = {
'外购': '1',
'自制': '2',
'外协': '3',
'组件': '4'
};

const value2Map = {
'压铸': '01',
'冲压': '02',
'型材': '03',
'注塑': '04',
'线缆': '05',
'辅料': '06'
};

const matchingItems = res_list.filter(item => item.value1 === value1 && item.value2 === value2);

if (matchingItems.length > 0) {
// 根据已存在的流水号进行排序取最大值
const previousSerialNumbers = matchingItems.map(item => parseInt(item['流水号'], 10));
const maxPreviousSerialNumber = Math.max(...previousSerialNumbers);
const nextSerialNumber = (maxPreviousSerialNumber + 1).toString().padStart(7, '0');

return nextSerialNumber;
} else {
const defaultSerialNumber = `${value1Map[value1]}${value2Map[value2]}0001`;

return defaultSerialNumber;
}
}


// 调用接口获取应用数据并处理
const fetchData = async () => {
const data = JSON.stringify({
"pageSize": "50",
"pageNum": "1"
});

const config = {
method: 'post',
maxBodyLength: Infinity,
url: 'https://api.qingflow.com/app/551b8be9/apply/filter',
headers: {
'accessToken': '8121b22f-40b4-40d6-a8cf-a863962ef8**',
'Content-Type': 'application/json',
'Cookie': 'JSESSIONID=F8953EA331EA8DEECF62B316EA4E314F; acw_tc=707c9fc516910311626161583e19f22f71de013243edf8ebfaf5adae3c88f2'
},
data: data
};

const res = await axios(config);
const msg = res.data;
const result = msg.result.result;
const res_list = [];
const res_dict = new Map();

result.forEach(value => {
const res_msg = new Map();
const answers = value.answers;

answers.forEach(v => {
const queId = v.queId;
const queTitle = v.queTitle;

if (queId === 160784791) {
const values = v.values;
const dataValue = values[0].dataValue;
res_msg[queTitle] = dataValue;
}
if (queId === 160784792) {
const values = v.values;
const dataValue = values[0].dataValue;
res_msg[queTitle] = dataValue;
}
if (queId === 160784800) {
const values = v.values;
const dataValue = values[0].dataValue;
res_msg[queTitle] = dataValue;
res_list.push(res_msg);
}
});
});

const nextSerialNumber = getNextSerialNumber(qf_field.{value1$$172AC9D19$$}, qf_field.{value2$$172AC9D1A$$}, res_list);
//console.log(nextSerialNumber);
qf_output={nextSerialNumber}
};

// 调用函数获取数据并处理
fetchData();

字段配置

image.png

实现效果

image.png