實現(xiàn)特定格式編號自動生成(實現(xiàn)特定格式編號自動生成的方法)
在生成諸如訂單、合同等單據(jù)的時候,往往有生成特定格式編號的需求,下面介紹如何實現(xiàn)生成“特定前綴 年份 固定長度序號”的編號,其他類型可在此基礎(chǔ)上進(jìn)行調(diào)整。
準(zhǔn)備工作:
在白碼低代碼開發(fā)平臺上創(chuàng)建一個“編號表”數(shù)據(jù)表,添加兩個字段:編號(字符),序號(數(shù)字)
實現(xiàn)步驟:
1、創(chuàng)建“生編號”功能,添加“數(shù)據(jù)-獲取-編號表”步驟(當(dāng)前最新編號),點(diǎn)擊步驟的“設(shè)置”按鈕加載數(shù)據(jù)表屬性。
2、加“數(shù)據(jù)-新增-編號表”步驟(新建數(shù)據(jù)),點(diǎn)擊設(shè)置按鈕,將編號、序號、日期屬性隱藏,并把日期設(shè)為當(dāng)前時間。
3、獲取到相關(guān)id:
編號表id(entity):
編號表的編號屬性id(field):
編號表的序號屬性id(field):
編號表的日期屬性id(field):
4、添加“編程”步驟,引用前面兩個步驟的數(shù)據(jù):
5、繼續(xù)編寫代碼生成編號,完整代碼如下:
async function runProcess($model = model, $plugin = plugin, $params) { let index = new Number($params.index || 0);//當(dāng)前最新編號步驟的序號屬性,轉(zhuǎn)為數(shù)字,不存在時設(shè)為0 let date = $params.date;//當(dāng)前最新編號步驟的日期屬性 let inserted = $params.inserted;//新建數(shù)據(jù)步驟整個數(shù)據(jù) let entity = "60936206dec57120cee73e2e";//編號表id let codeField = "6093620b6d8eaf20d45ed568";//編號表的編號屬性id let indexField = "6093620f17f01720c753c60c";//編號表的序號屬性id let size = 5;//格式序號長度 let max = Array(size 1).join('9');//合法的最大編號值 //溢出 if (index "" == max) { $plugin.data.removeData(entity, inserted);//刪除新增的數(shù)據(jù) $model.error(-1, "編號已達(dá)到允許的最大值!");//拋出錯誤提示 return; } //生成id let year = date.substr(0, 4);//當(dāng)前系統(tǒng)最新數(shù)據(jù)的年份 let thisYear = new Date().getFullYear() "";//今年 let isNewId = false; let id = ""; while (!isNewId) { id = await createId(index); //查詢此工程編號是否存在,保證唯一性 let selected = await $plugin.data.queryData(entity, { [codeField]: id });//數(shù)據(jù)庫查詢 isNewId = selected.length == 0; } //將編號更新到新增數(shù)據(jù) await $plugin.data.updateData(entity, inserted._id, { [codeField]: id,//編號 [indexField]: index,//序號 }); //生成id的方法 function createId(i) { index = i; if (year != thisYear) { //新的一年,重新從1開始 index = 1; year = thisYear; } else { //仍然是當(dāng)年,繼續(xù)編號 index ; } //組成id return "DD" year "-" (Array(size).join('0') index).slice(-size); }}
6、將功能發(fā)布上線。