分享项目用到的处理数据的代码块(持续更新中·······)

分享  收藏
7 / 791
  1. 数组字符 处理成分隔的字符 py
arrPackCode = input['arrpackcode']
#替换大括号和双引号
strPackCode = arrPackCode .replace("\"","").replace("[","").replace("]","") 

output = {'字符':strPackCode }

效果:

["10086319265269","10086643504236"]
处理成 610086319265269,10086643504236

实现需求:判断是否存在。

2.传入字符,去掉传入内容 js

incode = input.codelv1
outcode = input.outlv1
//把传进来的条码换空
newcode = incode.replace(outcode,"")
//去掉多余的逗号
newcode = newcode.replace(",,",",")
//如果开头是","就去掉
if (newcode.startsWith(",")){
newcode = newcode.substring(1,newcode.length)
}
//如果结尾是","就去掉
if (newcode.endsWith(",")){
newcode = newcode.substring(0, newcode.length - 1)
}
output = { newcode:newcode};

效果:610086319265269,10086643504236
传入 610086319265269
输出 10086643504236

实现需求:拆分。

3.多条数据 组成数组 js

//let arrA =  JSON.parse(input.a?input.a:'[]'); 传入多条节点
let arrA=['1','2','3']
let arrB =['B1','B-2','B-3']
let arrC =['C-1','C-2','C-3']
let arrD =['D-1','D-2','D-3']
let arrResult=[]
for(let i = 0; i < arrA.length; i++){
      let arrData={}
      arrData.名称 = arrA[i]
      arrData.规格 = arrB[i]
      arrData.批号 = arrC[i]
      arrData.有效期 = arrD[i]
      arrResult.push(arrData)
    }
output = {output:arrResult};

效果:[{"名称":"1","规格":"B1","批号":"C-1","有效期":"D-1"},{"名称":"2","规格":"B-2","批号":"C-2","有效期":"D-2"},{"名称":"3","规格":"B-3","批号":"C-3","有效期":"D-3"}]

实现需求:组装数据。

4.子流程累加处理成数组 js

var arry = [];

var cdata=input.code;//条码
var tdata=input.time;//扫码时间
var sowner =input.owner;//厂家

var cdatas =JSON.parse(input.codearr?input.codearr:'[]');//总码(此为存储数据字段,关键内容)

arry.push({Code: cdata, ActDate: tdata,OwnerCorpID:sowner});
cdatas = cdatas.concat(arry);

output={条码: arry,总码:cdatas}

效果:[{"Code":"00001502734015","ActDate":"2023-07-12 16:09","OwnerCorpID":"厂家"},{"Code":"00001499048668","ActDate":"2023-07-12 16:09","OwnerCorpID":"厂家"}]

实现需求:组装 XML 前置处理。或用于其他。

//另一种简单的,用于企微拼接用户id


var uidarr = [];
var usr =input.user;//成员
var uid =input.userid;//成员工号
var lsuid =JSON.parse(input.lsuid?input.lsuid:'[]');//中间字段,修改触发时请清空此字段,不然会累加
uidarr.push(uid);
uidarry = lsuid.concat(uidarr);
output={成员: uidarr,总成员:uidarry}

成员 数组 ["aaa"] 总成员 数组 ["aaaa","aaa"]

5.形成 XML 文件 附件(之前有帖子忘了)js

var builder = require('xmlbuilder');
<!--根节点-->
var Document = builder.create('Document',{ version: '1.0' ,encoding:'utf-8'});
<!--二级节点-->
var Events =  Document.ele('Events');
<!--三级节点-->
var Event =  Events.ele('Event', {'Name': 'SalesWareHouseOut' ,'MainAction': 'WareHouseOut'});
<!--四级节点-->
var DataField =  Event.ele('DataField');
var CodeList = JSON.parse(input.codearr?input.codearr:'[]');
var hetong= input.hetonghao;


 
/*上个内容 第4点 的处理结果
CodeList = [{'Code' : '0040166951780','Actor' : '1','ActDate' : '2022-01-21 16:23:14', 'CorpOrderID' : '202201201', 'FromCorpID' : '', 'ToCorpID' : '', 'OwnerCorpID' : ''}];
*/
 for( var i = 0; i < CodeList.length; i++)
{
  var nodetext = DataField.ele('Data');
  nodetext.att('Code', CodeList[i]['Code']);
  nodetext.att('Actor', "1");
  nodetext.att('ActDate', CodeList[i]['ActDate']);
  nodetext.att('CorpOrderID', hetong);
  nodetext.att('FromCorpID', "");
  nodetext.att('ToCorpID', "");
  nodetext.att('OwnerCorpID', CodeList[i]['OwnerCorpID']);

}

var xml = Document.end({ pretty: true});
<!--处理成base64--->
var xmlToBase64 = new Buffer.from(xml).toString('base64');

output = {'XML':xml,'xmlbase64':xmlToBase64 , '数据长度':CodeList.length}

效果:直接形成 XML 附件(自行调用内部接口更新形成附件)
image.png
实现需求:归档,或上传其他系统,可用于条码存储类,其他需要的。

6.两两数组,组成 JSON py

import json
# 填充数组["qq","aa"]
jsonk = json.loads(input['key'])
jsonv = json.loads(input['value'])
if len(jsonk):
    parameter = {}
    for i, val in enumerate(jsonk):  
        parameter[jsonk[i]] = jsonv[i]

parameter = json.dumps(parameter,ensure_ascii=False)

output = {'parameter':parameter}

效果:{"qq": "qq", "aa": "aa"}

实现需求:接口请求参数。(法大大填充)

7.生成定长位数编号(补 0)js

初始数据用,生成数据可以自行组装

var no = Number(input.size)
//数字,保留几位
function push0(num, length) {
    if ((num + "").length >= length) {
        return num;
    }
    return push0("0" + num, length);
}
var wh = [];
for (var i = 1; i < no; i++) {
    wh.push(push0(i, 4))
}

output = {仓库数据: wh};

效果:
image.png

7.中国节假日 py
自集成中 安装 chinese_calendar

import datetime
# 判断日期 = datetime.date(2023, 10, 10) 是不是工作日,节假日,调休日
from chinese_calendar import is_holiday, is_workday,is_in_lieu
dayNow = datetime.datetime.now()
'''
print('is_workday: ',is_workday(dayNow))
print('is_holiday: ',is_holiday(dayNow))
print('is_in_lieu: ',is_in_lieu(dayNow))
'''
output = {'工作日':is_workday(dayNow),'节假日':is_holiday(dayNow),'调休日':is_in_lieu(dayNow)}

效果
image.png

import datetime
import chinese_calendar
import json

from datetime import date

start_time = datetime.date(2024,1,1)  # 指定开始时间
end_time = datetime.date(2024, 12, 31)  # 指定结束时间
#自定义解析
class DateEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, date):
            return obj.strftime('%Y-%m-%d')
        return json.JSONEncoder.default(self, obj)

workdays = json.dumps({'date': chinese_calendar.get_workdays(start_time, end_time) }, cls=DateEncoder, ensure_ascii=False) # 两个日期间所有工作日
holidays = json.dumps({'date': chinese_calendar.get_holidays(start_time, end_time) }, cls=DateEncoder, ensure_ascii=False)  # 两个日期间所有节假日
solarterms = json.dumps({'date': chinese_calendar.get_solar_terms(start_time, end_time) }, cls=DateEncoder, ensure_ascii=False)  # 两个日期间所有24节气
 
output = {'工作日':workdays,'节假日':holidays,'24节气':solarterms}

最终结果:

image.png

8.多选个数排序 js(前端默认值)
需要自定义函数

image.png

image.png

效果

image.png

tips:复制一个多选 作为题目 答案 可以直接配出对错哟!

9.当月日期范围 js (前端默认值)

var date = new Date();
//第一天
var fstday = date.setDate(1);
//月份天数
var days = new Date(date.getFullYear(), date.getMonth()-1, 0).getDate();
//最后一天
var lastday = date.setDate(days);

return new Date(fstday).toISOString();
//格式yyyy-mm-dd 需要其他格式自行格式处理

image.png

效果:获取当月(指定日期)月份的第一天和最后一天
注:同理年份也类似
10.年周,起始日期 js

var nowday = new Date();
//var nowday = new Date("2024-1-26");
var year = nowday.getFullYear().toString();
var yearfirstday = new Date(nowday.getFullYear(), 0, 1);
//算法:当前天数跟年的第一天 天数除以7
var d = Math.round((nowday.valueOf() - yearfirstday.valueOf()) / 86400000);
var weekNo = Math.ceil((d + (yearfirstday.getDay() + 1 - 1)) / 7);
//算出星期
var day = nowday.getDay() === 0 ? 7 : nowday.getDay()
//周第一天
var fistday = new Date(nowday.setDate(nowday.getDate() - (day-1)))
//周最后一天
var lastday = new Date(fistday .getFullYear(), fistday.getMonth(), fistday.getDate() + 7)

output = {年份:year,周序号: weekNo,星期:day, 周的第一天:fistday ,周最后一天:lastday };

结果展示 🎉️ 🎉️ 🎉️
存在问题:当传入参数时 周第一天需要-2,最后一天需要 +6;不要问为什么,nodejs 时区问题不好处理

image.png

11.抽奖 js

var lotteries = [1, 2, 3, 4, 5];  //抽奖集合
var lotterie = 2;  // 抽奖数量  
var inlotteries = [];  
  
for(var i = 0; i < lotterie ; i++) {  
    var randomnum = Math.floor(Math.random() * lotteries.length);  //随机出中奖下标
    inlotteries.push(lotteries[randomnum]);  //中奖合集
    lotteries.splice(randomnum, 1);  // 移除抽中的,以避免重复  
}  
  
output = {中奖元素: inlotteries};  // 这将打印你获取的随机元素数组

效果展示:

image.png

数据来源可以是多条获取的数据源节点,把其中一个字段作为抽奖的集合即可

12、子表字段拼接(跟 1 类似)

获取子表某一字段进行拼接,组成文本到打印模板单元格
与多条关联的显示方式不为列表时的显示一致
子表没法直接算只有走工作流拆了

var gongxu = JSON.parse(input.key?input.key:'[]');
var gongxutxt =  gongxu.join(",");
output = {'工序':gongxutxt }

image.png

13 、更新踩坑 pymssql

自己调下缩进!!!尤其是循环部分

import pymssql
import json

output = {}
try:
  #tds_version 为新本本参数,2019版本后好像不需要
  #db = pymssql.connect(host='localhost', user='sa', password='', database='')

  db = pymssql.connect(host='', user='', password='',port='1433',database='',tds_version = '7.0')

  cursor = db.cursor()
  sql ="SELECT	* form db"
  output['执行查询语句'] = sql
  print(sql)
  cursor.execute(sql)
  cols=cursor.description

# len(data) 字段数 len(datas) 数据量

  datas = cursor.fetchall()
  allop=[]
  for data in datas:
        i = 0
       op= {}
       for col in cols:
             op[cols[cols.index(col)][i]] =str(data[cols.index(col)])
       i=i+1
       allop.append(op)

  output['data'] = json.loads(json.dumps(allop, ensure_ascii=False))
  print(json.loads(json.dumps(allop, ensure_ascii=False)))
  output['code'] = 0
  output['msg'] = '连接成功!'
  print(len(datas))

except pymssql.Error as e:
  output['code'] = 1
  output['msg'] = '连接失败!'
  print(e)