licp
2024-08-20 6f30bbf4f118d3357d1e6e503aa986227e2cc6ea
static/js/worker0.js
@@ -1,22 +1,30 @@
// 此线程为数据采集线程
// 保存数据
// 数据采集信息
let dataAcquisitionInfo = null;
// 数据列表
let list = null;
// 传递到主线程的数据
let result = {
  method:'',
  value:null
}
// 优化数采较多数据时--记录数采项目的Id数组,目的是取最后一个数采项目,传到主线程进行批量的数据采集保存
let arrSpecial = []
let numSpecial = 0;
// 接收主线程传递过来的数据
self.onmessage = function(event) {
  const data = JSON.parse(event.data);
  dataAcquisitionInfo = data.dataAcquisitionInfo;
  list = data.list;
  // console.log(111,dataAcquisitionInfo)
  arrSpecial = []
  numSpecial = 0
  // 处理数据
  handleData()
}
function handleData(){
  // 遍历数据列表
  list.forEach((item,index)=>{
    let num = 0;
    let str = ''
@@ -33,8 +41,9 @@
            str = str+m.v.v
          }
        }
        // 上面在记录检验项+检验子项的名称,如果数采包含检验项+检验子项的数据,则执行
        if(dataAcquisitionInfo[str]){
          let num = 0;
          let num = 0;//该检验项对应检验值的个数,用用判断最多有多少个检验值,如果多次采集超过了该个数,则赋值给最后一个检验值
          list[index].forEach(n=>{
            if(n.v.ps&&n.v.ps.value&&typeof n.v.ps.value == 'string'&&n.v.ps.value.includes('检验值')){
              num++
@@ -44,19 +53,23 @@
            if(n.v.ps&&n.v.ps.value&&typeof n.v.ps.value == 'string'&&n.v.ps.value.includes('检验值')){
              let arr = n.v.ps.value.split('值')
              if(Array.isArray(dataAcquisitionInfo[str].value)){
                // 如果数据源为数组,则执行
                for (let i = 0; i < dataAcquisitionInfo[str].value.length; i++) {
                  if(i+1==arr[1]){
                    // 赋值数采优化检验项列表
                    arrSpecial.push(n.i)
                    numSpecial++
                    setTimeout(()=>{
                      let num0 = 0
                      if(n.v.ct&&n.v.ct.fa&&typeof n.v.ct.fa == 'string'&&n.v.ct.fa.includes('.')){
                        // 保留模板配置的小数点位数
                        let str0 = n.v.ct.fa.split('.')[1]
                        num0 = str0.length
                        n.v.v = dataAcquisitionInfo[str].value[i]?Number(dataAcquisitionInfo[str].value[i]).toFixed(num0):dataAcquisitionInfo[str].value[i]
                      }else{
                        // 直接赋值
                        n.v.v = dataAcquisitionInfo[str].value[i]
                      }
                      // 传递给主线程
                      result = {
                        method:'changeInput',
                        value:{
@@ -69,18 +82,22 @@
                  }
                }
              }else{
                // 如果数据源为字符或数字,则执行
                if(arr[1] ==dataAcquisitionInfo[str].frequency){
                  // 如果数采次数等于检验值序号,则赋值给当前检验值
                  arrSpecial.push(n.i)
                  numSpecial++
                  setTimeout(()=>{
                    let num0 = 0
                    if(n.v.ct&&n.v.ct.fa&&typeof n.v.ct.fa == 'string'&&n.v.ct.fa.includes('.')){
                      // 保留模板配置的小数点位数
                      let str0 = n.v.ct.fa.split('.')[1]
                      num0 = str0.length
                      n.v.v = dataAcquisitionInfo[str].value?Number(dataAcquisitionInfo[str].value).toFixed(num0):dataAcquisitionInfo[str].value
                    }else{
                      // 直接赋值
                      n.v.v = dataAcquisitionInfo[str].value
                    }
                    // 传递给主线程
                    result = {
                      method:'changeInput',
                      value:{
@@ -91,18 +108,21 @@
                    self.postMessage(JSON.stringify(result))
                  },2000)
                }else if(Number(dataAcquisitionInfo[str].frequency)>num){
                  // 如果数采次数大于检验值序号,则赋值给最后一个检验值
                  if(n.v.ps.value.includes(num)){
                    arrSpecial.push(n.i)
                    numSpecial++
                    setTimeout(()=>{
                      let num0 = 0
                      if(n.v.ct&&n.v.ct.fa&&typeof n.v.ct.fa == 'string'&&n.v.ct.fa.includes('.')){
                        // 保留模板配置的小数点位数
                        let str0 = n.v.ct.fa.split('.')[1]
                        num0 = str0.length
                        n.v.v = dataAcquisitionInfo[str].value?Number(dataAcquisitionInfo[str].value).toFixed(num0):dataAcquisitionInfo[str].value
                      }else{
                        // 直接赋值
                        n.v.v = dataAcquisitionInfo[str].value
                      }
                      // 传递给主线程
                      result = {
                        method:'changeInput',
                        value:{
@@ -121,10 +141,11 @@
      }
    })
  })
  if(arrSpecial[numSpecial-1]){
  if(arrSpecial[arrSpecial.length-1]){
    //优化数采较多数据时-记录最后一个检验项的id,用于后续处理
    setTimeout(()=>{
      result = {
        getDataTypeId:arrSpecial[numSpecial-1],
        getDataTypeId:arrSpecial[arrSpecial.length-1],
      }
      self.postMessage(JSON.stringify(result))
    },0)