zhoupeng 1 anno fa
parent
commit
8a66ef0c25

+ 149 - 13
chaunyi_opc/opc_da/src/main/resources/static/app/static/webview/report-wv.html

@@ -272,7 +272,7 @@
 										drawBaseInfo(baseItem)
 										// 绘制数据值
 										drawTableData(reportTableItemList,
-											reportTableType)
+											reportTableType, data.data)
 										luckysheet.setRangeShow('BH1')
 										convertChart(tableData)
 										printExcel()
@@ -540,11 +540,26 @@
 						}
 
 						/** 绘制表格数据 */
-						function drawTableData(tableItemList, type) {
-							if (!tableItemList || tableItemList.length == 0) return
+						function drawTableData(tableItemList, type, tableInfo) {
+							if (!tableItemList || tableItemList.length == 0) {
+								this.updateLocalExcelContent()
+								return
+							}
 							// 事件驱动报表
 							if (type == 2 || type == 4) {
 								tableItemList.forEach((tableItem, i) => {
+									if (i == 0) {
+										let valueTimeList = tableItem.valueTimeList ? tableItem.valueTimeList.split(',') : []
+										let xAxis = tableItem.xaxis
+										let yAxis = tableItem.yaxis - 1
+										if (valueTimeList.length == 0) {
+										  luckysheet.setCellValue(xAxis, yAxis, '')
+										} else {
+										  valueTimeList.forEach((v, j) => {
+											luckysheet.setCellValue(xAxis + j, yAxis, v)
+										  })
+										}
+									}
 									let valueList = tableItem.valueList ? tableItem.valueList
 										.split(',') : []
 									let xAxis = tableItem.xaxis
@@ -558,28 +573,149 @@
 										})
 									}
 								})
+								this.updateLocalExcelContent()
+								return
+							}
+							// 设备报表
+							if (type == 5 || type == 6) {
+								tableItemList.forEach((tableItem, i) => {
+								  let standby = tableItem.standby ? JSON.parse(tableItem.standby) : {}
+								  let dataIndex = standby.index != null ? standby.index : -1
+								  let valueList = tableItem.valueList ? tableItem.valueList.split(',') : []
+								  let xAxis = tableItem.xaxis
+								  let yAxis = tableItem.yaxis
+								  // 序号、时间处理
+								  if (tableItem.timeItemType == 0) { // 序号、开始时间
+									let valueIndexList = tableItem.valueIndexList ? tableItem.valueIndexList.split(',') : []
+									this.deviceReportUpdateData('${index}', valueIndexList, false)
+									let valueTimeList = tableItem.valueTimeList ? tableItem.valueTimeList.split(',') : []
+									this.deviceReportUpdateData('${startTime}', valueTimeList, false)
+								  }
+								  if (tableItem.timeItemType == 1) { // 结束时间
+									let valueTimeList = tableItem.valueTimeList ? tableItem.valueTimeList.split(',') : []
+									this.deviceReportUpdateData('${stopTime}', valueTimeList, tableInfo.isGenCountTime == 1)
+								  }
+								  if (valueList.length == 0) {
+									luckysheet.setCellValue(xAxis, yAxis, '')
+								  } else {
+									valueList.forEach((v, j) => {
+									  luckysheet.setCellValue(xAxis + j, yAxis, v)
+									})
+								  }
+								})
+								this.updateLocalExcelContent()
 								return
 							}
 							// 其余报表信息
 							tableItemList.forEach((tableItem, i) => {
-								let standby = tableItem.standby ? JSON.parse(tableItem.standby) :
-								{}
-								let dataIndex = standby.index != null ? standby.index : -1
+								// let standby = tableItem.standby ? JSON.parse(tableItem.standby) :
+								// {}
+								// let dataIndex = standby.index != null ? standby.index : -1
 								let valueList = tableItem.valueList ? tableItem.valueList.split(
 									',') : []
-								let val = (dataIndex == -1 || (dataIndex + 1) > valueList
-										.length) ?
-									cqcyCode['invalidData'] : valueList[dataIndex]
+								// let val = (dataIndex == -1 || (dataIndex + 1) > valueList
+								// 		.length) ?
+								// 	cqcyCode['invalidData'] : valueList[dataIndex]
 								let xAxis = tableItem.xaxis
 								let yAxis = tableItem.yaxis
-								try {
-									luckysheet.setCellValue(xAxis, yAxis, val)
-								} catch (e) {
-									console.warn(e)
+								if (valueList.length == 0) {
+								  luckysheet.setCellValue(xAxis, yAxis, '')
+								} else {
+								  valueList.forEach((v, j) => {
+									luckysheet.setCellValue(xAxis + j, yAxis, v)
+								  })
 								}
 							})
+							this.updateLocalExcelContent()
 						}
 
+					/** 设备报表时间特殊处理 */
+					function deviceReportUpdateData(field, dataList, hasCalc) {
+					      let indexPos = sessionStorage.getItem(window.sessionName)
+					      if (indexPos) {
+					        let pos = indexPos.split(',')
+					        if (field == '${index}') {
+					          let yAxis = parseInt(pos[0])
+					          let xAxis = parseInt(pos[1])
+					          dataList.forEach((v, j) => {
+					            luckysheet.setCellValue(yAxis + j, xAxis, j + 1)
+					          })
+					        } else if (field == '${startTime}') {
+					          let yAxis = parseInt(pos[0])
+					          let xAxis = parseInt(pos[1]) + 1
+					          dataList.forEach((v, j) => {
+					            luckysheet.setCellValue(yAxis + j, xAxis, v)
+					          })
+					        } else if (field == '${stopTime}') {
+					          let yAxis = parseInt(pos[0])
+					          let xAxis = parseInt(pos[1]) + 2
+					          dataList.forEach((v, j) => {
+					            luckysheet.setCellValue(yAxis + j, xAxis, v)
+					            if (hasCalc) {
+					              let startDate = luckysheet.getCellValue(yAxis + j, xAxis - 1)
+					              let minutes = this.calculateMinutes(startDate, v)
+					              luckysheet.setCellValue(yAxis + j, xAxis + 1, minutes)
+					            }
+					          })
+					        }
+					        return
+					      }
+					      let option = luckysheet.getAllSheets()[0]
+					      option.celldata.map(item => {
+					        if (item.v.v) {
+					          item.v.v = String(item.v.v).trim()
+					          // 替换${xxx}内部数据
+					          if (item.v.v.match(/\${([^}]+)}/g)) {
+					            if (item.v.v.indexOf(field) > -1) {
+					              let yAxis = item.r
+					              let xAxis = item.c
+					              if (field == '${index}') {
+					                sessionStorage.setItem(window.sessionName, yAxis + ',' + xAxis)
+					                dataList.forEach((v, j) => {
+					                  luckysheet.setCellValue(yAxis + j, xAxis, j + 1)
+					                })
+					              } else {
+					                dataList.forEach((v, j) => {
+					                  luckysheet.setCellValue(yAxis + j, xAxis, v)
+					                  if (hasCalc) {
+					                    let startDate = luckysheet.getCellValue(yAxis + j, xAxis - 1)
+					                    let minutes = this.calculateMinutes(startDate, v)
+					                    luckysheet.setCellValue(yAxis + j, xAxis + 1, minutes)
+					                  }
+					                })
+					              }
+					            }
+					          }
+					        }
+					      })
+					    }
+						
+						/** 删除不合理数据值 */
+						function updateLocalExcelContent() {
+						  let option = luckysheet.getAllSheets()[0]
+						  option.celldata.map(item => {
+							if (item.v.v) {
+							  item.v.v = String(item.v.v).trim()
+							  // 替换${xxx}内部数据
+							  if (item.v.v.match(/\${([^}]+)}/g)) {
+								luckysheet.setCellValue(item.r, item.c, '')
+							  }
+							}
+						  })
+						}
+						
+						/** 计算分钟数 */
+						function calculateMinutes(time1, time2) {
+						  // 将时间字符串转换为Date对象
+						  let date1 = new Date(time1);
+						  let date2 = new Date(time2);
+						  // 计算时间差(以毫秒为单位)
+						  let diffInMilliseconds = Math.abs(date2.getTime() - date1.getTime());
+						  // 将时间差转换为分钟
+						  let minutes = Math.floor(diffInMilliseconds / 1000 / 60);
+						  return minutes;
+						}
+					
 						/** 绘制基础数据项布局信息 */
 						function drawBaseInfo(baseData) {
 							if (!baseData) return