From 66032f62b4a3b6a649fc02b392ae41278399b58b Mon Sep 17 00:00:00 2001
From: wangjuncheng <1>
Date: 星期二, 08 七月 2025 15:23:19 +0800
Subject: [PATCH] 添加打印加坝数据代码, 但调用被注释

---
 src/views/left/CitySim.vue |  349 ++++++++++++++++++++++++++++++----------------------------
 1 files changed, 181 insertions(+), 168 deletions(-)

diff --git a/src/views/left/CitySim.vue b/src/views/left/CitySim.vue
index 27af36b..a4de983 100644
--- a/src/views/left/CitySim.vue
+++ b/src/views/left/CitySim.vue
@@ -1,10 +1,6 @@
 <template>
   <div style="width: 100%; height: 100%">
-    <div
-      class="left-top"
-      v-if="simStore.selectTab == '琛屾斂鍖哄垝浠跨湡'"
-      style="margin-top: 0px"
-    >
+    <div class="left-top" v-if="simStore.selectTab == '琛屾斂鍖哄垝浠跨湡'" style="margin-top: 0px">
       琛屾斂鍖哄垝浠跨湡锛�30m绮惧害锛�
     </div>
     <div class="left-top" v-if="simStore.selectTab == '閲嶇偣鍖哄煙浠跨湡'">
@@ -15,134 +11,56 @@
     </div>
 
     <div class="forms" :class="{ 'no-background': !showBackground }">
-      <el-form
-        :rules="rules"
-        :model="forms"
-        label-width="auto"
-        style="max-width: 600px"
-      >
+      <el-form :rules="rules" :model="forms" label-width="auto" style="max-width: 600px">
         <el-form-item label="鏂规鍚嶇О:">
-          <el-input
-            v-model="forms.name"
-            style="max-width: 600px"
-            placeholder="璇疯緭鍏ユ柟妗堝悕绉�"
-          >
+          <el-input v-model="forms.name" style="max-width: 600px" placeholder="璇疯緭鍏ユ柟妗堝悕绉�">
           </el-input>
         </el-form-item>
         <el-form-item label="涓婁紶鍙傛暟">
-          <el-upload
-            :on-remove="handleRemove"
-            v-model:file-list="forms.fileList"
-            class="upload-demo"
-            :auto-upload="false"
-            :multiple="false"
-            :on-change="handleFileChange"
-            :limit="1"
-            :on-exceed="handleExceed"
-            :before-upload="beforeUpload"
-            accept=".xlsx,.xls,.csv"
-          >
+          <el-upload :on-remove="handleRemove" v-model:file-list="forms.fileList" class="upload-demo"
+            :auto-upload="false" :multiple="false" :on-change="handleFileChange" :limit="1" :on-exceed="handleExceed"
+            :before-upload="beforeUpload" accept=".xlsx,.xls,.csv">
             <el-button type="primary">鐐瑰嚮涓婁紶闄嶉洦鏁版嵁</el-button>
             <template #append>mm/h</template>
           </el-upload>
         </el-form-item>
         <el-form-item label="闆ㄥ己鍗曚綅" v-if="forms.fileList.length !== 0">
-          <el-select
-            v-model="forms.intensityUnit"
-            placeholder="璇烽�夋嫨闆ㄥ己鍗曚綅"
-            style="max-width: 600px"
-            :disabled="!!forms.intensityUnit"
-          >
-            <el-option
-              v-for="item in intensityOptions"
-              :key="item.value"
-              :label="item.label"
-              :value="item.value"
-            />
+          <el-select v-model="forms.intensityUnit" placeholder="璇烽�夋嫨闆ㄥ己鍗曚綅" style="max-width: 600px"
+            :disabled="!!forms.intensityUnit">
+            <el-option v-for="item in intensityOptions" :key="item.value" :label="item.label" :value="item.value" />
           </el-select>
         </el-form-item>
-        <el-form-item
-          label="琛屾斂鍖哄煙:"
-          v-if="simStore.selectTab == '琛屾斂鍖哄垝浠跨湡'"
-        >
-          <el-select
-            @change="changeGeom"
-            v-model="forms.geom"
-            placeholder="璇烽�夋嫨妯℃嫙鍖哄煙"
-            style="max-width: 600px"
-          >
-            <el-option
-              v-for="item in options"
-              :key="item.value"
-              :label="item.label"
-              :value="item"
-            />
+        <el-form-item label="琛屾斂鍖哄煙:" v-if="simStore.selectTab == '琛屾斂鍖哄垝浠跨湡'">
+          <el-select @change="changeGeom" v-model="forms.geom" placeholder="璇烽�夋嫨妯℃嫙鍖哄煙" style="max-width: 600px">
+            <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item" />
           </el-select>
         </el-form-item>
-        <el-form-item
-          label="閲嶇偣鍖哄煙:"
-          v-if="simStore.selectTab == '閲嶇偣鍖哄煙浠跨湡'"
-        >
-          <el-select
-            @change="changeGeom"
-            v-model="forms.geom"
-            placeholder="璇烽�夋嫨妯℃嫙鍖哄煙"
-            style="max-width: 600px"
-          >
-            <el-option
-              v-for="item in options"
-              :key="item.value"
-              :label="item.label"
-              :value="item"
-            />
+        <el-form-item label="閲嶇偣鍖哄煙:" v-if="simStore.selectTab == '閲嶇偣鍖哄煙浠跨湡'">
+          <el-select @change="changeGeom" v-model="forms.geom" placeholder="璇烽�夋嫨妯℃嫙鍖哄煙" style="max-width: 600px">
+            <el-option v-for="item in options" :key="item.value" :label="item.label" :value="item" />
           </el-select>
         </el-form-item>
 
         <el-form-item label="闄嶉洦閲�:">
-          <el-input
-            v-model="forms.rainfall"
-            style="max-width: 600px"
-            placeholder="璇疯緭鍏ラ檷闆ㄩ噺"
-          >
+          <el-input v-model="forms.rainfall" style="max-width: 600px" placeholder="璇疯緭鍏ラ檷闆ㄩ噺">
             <template #append>mm</template>
           </el-input>
         </el-form-item>
         <el-form-item label="閫夋嫨鏃堕棿:">
-          <el-date-picker
-            v-if="forms.fileList.length !== 0"
-            v-model="forms.hours"
-            type="datetime"
-            placeholder="璇烽�夋嫨寮�濮嬫椂闂�"
-          />
-          <el-date-picker
-            v-if="forms.fileList.length == 0"
-            v-model="forms.hours"
-            type="datetimerange"
-            start-placeholder="寮�濮嬫椂闂�"
-            end-placeholder="缁撴潫鏃堕棿"
-            format="YYYY-MM-DD HH:mm:ss"
-            date-format="YYYY/MM/DD ddd"
-            time-format="A hh:mm:ss"
-            @change="change"
-          />
+          <el-date-picker v-if="forms.fileList.length !== 0" v-model="forms.hours" type="datetime"
+            placeholder="璇烽�夋嫨寮�濮嬫椂闂�" />
+          <el-date-picker v-if="forms.fileList.length == 0" v-model="forms.hours" type="datetimerange"
+            start-placeholder="寮�濮嬫椂闂�" end-placeholder="缁撴潫鏃堕棿" format="YYYY-MM-DD HH:mm:ss" date-format="YYYY/MM/DD ddd"
+            time-format="A hh:mm:ss" @change="change" />
         </el-form-item>
         <el-form-item label="闄嶉洦鏃堕暱:">
-          <el-input
-            disabled
-            v-model="forms.duration"
-            style="max-width: 600px"
-            placeholder="璇疯緭鍏ラ檷闆ㄦ椂闀�"
-          >
+          <el-input disabled v-model="forms.duration" style="max-width: 600px" placeholder="璇疯緭鍏ラ檷闆ㄦ椂闀�">
             <template #append>h</template>
           </el-input>
         </el-form-item>
 
         <el-form-item label="闄嶉洦寮哄害:">
-          <el-input
-            v-model="forms.intensity"
-            style="max-width: 600px"
-            placeholder="璇疯緭鍏ラ檷闆ㄥ己搴�"
-          >
+          <el-input v-model="forms.intensity" style="max-width: 600px" placeholder="璇疯緭鍏ラ檷闆ㄥ己搴�">
             <template #append>mm/h</template>
           </el-input>
         </el-form-item>
@@ -186,7 +104,7 @@
 const intensityOptions = ref([
   { value: "mm/h", label: "mm/h" },
   { value: "mm/5min", label: "mm/5min" },
-  { value: "mm/1min", label: "mm/1min" },
+  { value: "mm/min", label: "mm/min" },
 ]);
 
 // 瀹氫箟涓�涓柟娉曪紝鐢ㄤ簬鏍规嵁 type 鑾峰彇鍖哄煙鏁版嵁
@@ -277,9 +195,11 @@
       forms.geom = props.selectedArea;
     }
     await simStore.addSimCheme(forms);
+    // 鎵撳嵃鎷︽尅鍧濇墍闇�瑕佺殑鏁版嵁
+    // printDamEntities();
     resetForm(); // 鍙湁鍦ㄤ繚瀛樻垚鍔熷悗鎵嶉噸缃〃鍗�
     EventBus.emit("close-selectArea");
-  } catch (error) {}
+  } catch (error) { }
 };
 
 // 閲嶇疆琛ㄥ崟
@@ -447,15 +367,16 @@
 
 /**
  * 鏁版嵁澶勭悊涓诲嚱鏁�
+ * @param {Array} data - 瑙f瀽鍚庣殑鍘熷鏁版嵁鏁扮粍锛屾瘡涓厓绱犳槸涓�涓璞�
  */
 const processData = (data) => {
-  // 妫�鏌ョ┖鏁版嵁
+  // 妫�鏌ユ槸鍚︿负绌烘暟鎹�
   if (data.length === 0) {
     ElMessage.warning("鏂囦欢鍐呭涓虹┖锛�");
     return;
   }
 
-  // 鍖归厤瀛楁鍚�
+  // 鍖归厤鍒楀悕锛堜緥濡傗�滄椂闂粹�濄�佲�滃皬鏃堕洦寮衡�濓級
   const columns = matchColumns(data[0]);
 
   // 鏍¢獙蹇呰瀛楁鏄惁瀛樺湪
@@ -475,22 +396,18 @@
     return;
   }
 
-  // 鏃堕棿鍒楁牎楠屾槸鍚﹀崌搴�
+  // 鏍¢獙鏃堕棿鍒楁槸鍚﹀崌搴忔帓鍒�
   if (!isTimeColumnSorted(data, columns.time)) {
     ElMessage.error("鏃堕棿鍒楀繀椤绘寜鍗囧簭鎺掑垪锛�");
     forms.fileList = [];
     return;
   }
 
-  // 鎻愬彇鍗曚綅
-  forms.intensityUnit = extractUnitFromHeader(columns.intensity);
+  // 鎻愬彇鍗曚綅锛堝 mm/h锛夛紝鑻ユ病鏈夊垯璁句负绌哄瓧绗︿覆
+  forms.intensityUnit = extractUnitFromHeader(columns.intensity) || "";
 
-  if (!forms.intensityUnit) {
-    forms.intensityUnit = "";
-  }
-
-  // 杞崲 key 鍚嶅苟杞崲鏁板�肩被鍨�
-  forms.rainFallList = data.map((row) => ({
+  // 灏嗗師濮嬫暟鎹浆鎹负缁熶竴缁撴瀯鐨勫璞℃暟缁�
+  const rawRainFallList = data.map((row) => ({
     time: row[columns.time],
     intensity: parseFloat(row[columns.intensity]),
     total: columns.totalRainfall
@@ -498,21 +415,44 @@
       : undefined,
   }));
 
-  console.log(forms.rainFallList, "瑙f瀽鍚庣殑闄嶉洦鏁版嵁");
+  // 鏇存柊 forms.rainFallList锛屽彲鐢ㄤ簬鍥捐〃鏄剧ず绛夌敤閫�
+  forms.rainFallList = rawRainFallList;
 
-  // 璁$畻缁熻淇℃伅
-  const firstTime = parseDateTime(data[0][columns.time]);
-  const lastTime = parseDateTime(data[data.length - 1][columns.time]);
+
+  // 鍒ゆ柇鏄惁涓烘暣灏忔椂鏁版嵁锛堝嵆鐩搁偦鏃堕棿闂撮殧鏄惁涓烘暣灏忔椂锛�
+  const isHourlyData = checkIfHourlyData(rawRainFallList);
+
+  let hourlyRainfallList = [];
+
+  if (!isHourlyData) {
+    // 濡傛灉涓嶆槸鏁村皬鏃舵暟鎹紝鎸夊皬鏃惰繘琛岃仛鍚堝鐞�
+    hourlyRainfallList = aggregateToHourlyRainfall(rawRainFallList);
+    console.log(hourlyRainfallList, "淇鍚庣殑灏忔椂闆ㄥ己");
+  } else {
+    // 濡傛灉鏄暣灏忔椂鏁版嵁锛岀洿鎺ヤ娇鐢ㄥ師濮嬮洦寮哄��
+    hourlyRainfallList = rawRainFallList.map((item) => ({
+      time: item.time,
+      intensity: item.intensity,
+    }));
+  }
+
+  // 璁$畻璧峰鏃堕棿鍜岀粨鏉熸椂闂达紙姣鏁帮級
+  const firstTime = parseDateTime(hourlyRainfallList[0]?.time);
+  const lastTime = parseDateTime(
+    hourlyRainfallList[hourlyRainfallList.length - 1]?.time
+  );
+
+  // 璁$畻鎸佺画鏃堕棿锛堝崟浣嶏細灏忔椂锛�
   const durationSeconds = Math.floor((lastTime - firstTime) / 1000);
-  forms.duration = (durationSeconds / 3600).toFixed(2); // 灏忔椂
+  forms.duration = (durationSeconds / 3600).toFixed(2); // 鍗曚綅锛氬皬鏃�
 
+  // 鎵惧嚭鏈�澶у皬鏃堕洦寮�
   const maxIntensity = Math.max(
-    ...data
-      .map((row) => parseFloat(row[columns.intensity]))
-      .filter((v) => !isNaN(v))
+    ...hourlyRainfallList.map((item) => item.intensity).filter((v) => !isNaN(v))
   ).toFixed(2);
   forms.intensity = maxIntensity;
 
+  // 鑻ユ湁鎬婚檷闆ㄩ噺鍒楋紝鍙栧嚭鏈�鍚庝竴涓�间綔涓烘�婚檷闆ㄩ噺
   if (columns.totalRainfall) {
     const lastTotal = parseFloat(data[data.length - 1][columns.totalRainfall]);
     forms.rainfall = isNaN(lastTotal) ? 0 : lastTotal.toFixed(2);
@@ -521,56 +461,80 @@
   }
 };
 
-// // 澶勭悊鏁版嵁
-// const processData = (data) => {
-//   // 1. 妫�鏌ユ暟鎹槸鍚︿负绌�
-//   if (data.length === 0) {
-//     ElMessage.warning("鏂囦欢鍐呭涓虹┖锛�");
-//     return;
-//   }
+/**
+ * 妫�鏌ユ暟鎹槸鍚︿负鏁村皬鏃惰褰�
+ * @param {Array} rainList - 鍘熷闄嶉洦鏁版嵁鍒楄〃锛屾瘡涓厓绱犲寘鍚� time 鍜� intensity
+ * @returns {boolean} - 鏄惁涓烘暣灏忔椂鏁版嵁
+ */
+function checkIfHourlyData(rainList) {
+  if (rainList.length < 2) return true; // 鍙湁涓�涓偣锛岄粯璁よ涓烘暣灏忔椂鏁版嵁
 
-//   // 2. 鑾峰彇琛ㄥご锛堢涓�鍒楁槸鏃堕棿鍒楋級
-//   const tableColumns = Object.keys(data[0]);
-//   const timeColumn = tableColumns[0]; // 鍋囪绗竴鍒楁槸鏃堕棿
+  for (let i = 1; i < rainList.length; i++) {
+    // 瑙f瀽涓や釜鐩搁偦鏃堕棿鐐�
+    const time1 = parseDateTime(rainList[i - 1].time);
+    const time2 = parseDateTime(rainList[i].time);
 
-//   // 3. 鏍¢獙鏃堕棿鍒楁槸鍚︽寜鍗囧簭鎺掑垪
-//   if (!isTimeColumnSorted(data, timeColumn)) {
-//     ElMessage.error("鏃堕棿鍒楀繀椤绘寜鍗囧簭鎺掑垪锛�");
-//     forms.fileList = [];
-//     return; // 缁堟澶勭悊
-//   }
+    // 璁$畻鏃堕棿宸紙鍒嗛挓锛�
+    const diffMinutes = Math.abs(time2 - time1) / (1000 * 60);
 
-//   const intensityColumn = tableColumns[1]; // 闆ㄥ己鍒楋紙濡� "灏忔椂闆ㄥ己(mm/h)"锛�
-//   // console.log(intensityColumn, "intensityColumnintensityColumnintensityColumn");
-//   // 3. 鎻愬彇绗簩鍒楃殑鍗曚綅锛堝 "(mm/h)" 鈫� "mm/h"锛�
-//   const intensityUnit = extractUnitFromHeader(intensityColumn);
-//   forms.intensityUnit = intensityUnit; // 瀛樺偍鍗曚綅锛堝彲閫夛級
-//   console.log(forms.intensityUnit,'aaaaaaaaaaaaaaaaaaaaa')
+    // 濡傛灉鏃堕棿宸笉鏄暣灏忔椂锛堜笉鑳借60鏁撮櫎锛夛紝鍒欎笉鏄暣灏忔椂鏁版嵁
+    if (diffMinutes % 60 !== 0) {
+      return false;
+    }
+  }
 
-//   // 4. 濡傛灉鏍¢獙閫氳繃锛岀户缁鐞嗘暟鎹�
-//   forms.rainFallList = transformKeys(data);
-//   console.log(forms.rainFallList, "data");
+  return true;
+}
 
-//   // 5. 璁$畻闄嶉洦鏃堕暱銆侀洦寮恒�佺疮璁¢洦閲忥紙鍘熼�昏緫锛�
-//   const firstTime = parseDateTime(data[0][timeColumn]);
-//   const lastTime = parseDateTime(data[data.length - 1][timeColumn]);
-//   const timeDuration = Math.floor((lastTime - firstTime) / 1000);
-//   // 闄嶉洦鏃堕暱
-//   forms.duration = (timeDuration / 3600).toFixed(2);
-//   // 闄嶉洦寮哄害
-//   const maxValue = Math.max(
-//     ...data.map((row) => {
-//       const value = parseFloat(row[tableColumns[1]]);
-//       return isNaN(value) ? -Infinity : value;
-//     })
-//   ).toFixed(2);
-//   forms.intensity = maxValue;
+/**
+ * 灏嗕换鎰忔椂闂寸矑搴︾殑闆ㄥ己鏁版嵁锛屾寜灏忔椂鑱氬悎涓衡�滃皬鏃堕洦寮衡��
+ * @param {Array} rainList - 鍘熷鏁版嵁鍒楄〃锛屾瘡涓厓绱犲寘鍚� time 鍜� intensity
+ * @returns {Array} - 鎸夊皬鏃跺垎缁勭殑鑱氬悎缁撴灉
+ */
+function aggregateToHourlyRainfall(rainList) {
+  const grouped = {}; // 鐢ㄤ簬涓存椂瀛樺偍姣忎釜灏忔椂鐨勬暟鎹�
 
-//   const lastValue = data[data.length - 1][tableColumns[2]];
-//   forms.rainfall = lastValue;
+  for (const item of rainList) {
+    // 瑙f瀽鏃堕棿瀛楃涓蹭负鏃堕棿鎴�
+    const timestamp = parseDateTime(item.time);
 
-// };
+    // 濡傛灉瑙f瀽澶辫触锛岃烦杩囧綋鍓嶉」
+    if (isNaN(timestamp)) {
+      console.warn("鏃犳晥鐨勬椂闂存牸寮忥紝宸茶烦杩�", item.time);
+      continue;
+    }
 
+    // 灏嗘椂闂存埑杞负 Date 瀵硅薄浠ヤ究鎿嶄綔鏃ユ湡
+    const dt = new Date(timestamp);
+
+    // 鏋勯�犲勾鏈堟棩+灏忔椂閿紙濡傦細"2024-08-25 14"锛�
+    const year = String(dt.getFullYear()).padStart(4, "0");
+    const month = String(dt.getMonth() + 1).padStart(2, "0"); // 娉ㄦ剰鏈堜唤浠�0寮�濮�
+    const date = String(dt.getDate()).padStart(2, "0");
+    const hour = String(dt.getHours()).padStart(2, "0");
+
+    const hourKey = `${year}-${month}-${date} ${hour}`;
+
+    // 鍒濆鍖栬灏忔椂鐨勮仛鍚堝璞�
+    if (!grouped[hourKey]) {
+      grouped[hourKey] = {
+        time: `${hourKey}:00:00`, // 鏍囧噯鍖栦负鏁寸偣鏃堕棿
+        intensity: 0,
+      };
+    }
+
+    // 绱姞璇ュ皬鏃跺唴鎵�鏈夐洦寮哄��
+    grouped[hourKey].intensity += item.intensity;
+  }
+
+  // 灏嗚仛鍚堢粨鏋滆浆涓烘暟缁勫苟淇濈暀涓や綅灏忔暟
+  const result = Object.values(grouped).map((item) => ({
+    time: item.time,
+    intensity: Number(item.intensity.toFixed(2)),
+  }));
+
+  return result;
+}
 /**
  * 瑙f瀽鏃ユ湡鏃堕棿瀛楃涓叉垨Excel鏁板瓧鏃ユ湡锛岃繑鍥炴椂闂存埑锛堟绉掓暟锛�
  * @param {string|number} dateString - 鏃ユ湡瀛楃涓叉垨Excel鏁板瓧鏃ユ湡
@@ -681,6 +645,52 @@
     // ElMessage.error("鍚姩妯℃嫙澶辫触锛岃绋嶅悗鍐嶈瘯");
   }
 }
+// ========================================鎷︽尅鍧�===============================================================
+// 鑾峰彇鎷︽尅鍧濇暟鎹�
+function printDamEntities() {
+  const entities = viewer.entities.values;
+  const damDataList = [];
+
+  for (let i = 0; i < entities.length; i++) {
+    const entity = entities[i];
+
+    if (entity.name && (entity.name === '鏍忔。鍧�1' || entity.name === '鏍忔。鍧�2')) {
+      damDataList.push({
+        name: entity.name,
+        position: entity.position?._value,
+        heading: entity.heading?._value ?? entity.heading,
+        pitch: entity.pitch?._value ?? entity.pitch,
+        roll: entity.roll?._value ?? entity.roll,
+        modelScale: entity.model?.scale?._value ?? entity.model?.scale
+      });
+    }
+  }
+  if (damDataList.length > 0) {
+    console.log("銆愭爮妗e潩瀹炰綋鏁版嵁鍒楄〃銆戯細", damDataList);
+    deleteDamEntitiesAfterDelay();
+  } else {
+    console.log("鏈壘鍒颁换浣曞悕涓� '鏍忔。鍧�1' 鎴� '鏍忔。鍧�2' 鐨勫疄浣�");
+  }
+}
+// 淇濆瓨鏂规鍚庡畾鏃舵竻闄ゆ柊寤虹殑鎷︽尅鍧濇暟鎹�
+function deleteDamEntitiesAfterDelay() {
+  setTimeout(() => {
+    const entities = Array.from(viewer.entities.values);
+    const damsToDelete = entities.filter(
+      entity => entity.name === '鏍忔。鍧�1' || entity.name === '鏍忔。鍧�2'
+    );
+
+    damsToDelete.forEach(entity => {
+      viewer.entities.remove(entity);
+    });
+
+    if (damsToDelete.length > 0) {
+      console.log(`銆愬凡鍒犻櫎銆戝叡 ${damsToDelete.length} 涓爮妗e潩瀹炰綋`);
+    } else {
+      console.log("鏈壘鍒颁换浣曞彲鍒犻櫎鐨勬爮妗e潩瀹炰綋");
+    }
+  }, 5000);
+}
 </script>
 
 <style lang="less" scoped>
@@ -698,14 +708,17 @@
   margin-top: 0px;
   background-image: none;
 }
+
 /deep/ .el-input-group__append,
 .el-input-group__prepend {
   background-color: #084b42;
   color: #fff;
 }
+
 /deep/ .el-form-item__label {
   color: #61f7d4 !important;
 }
+
 /deep/ .el-upload-list__item-file-name {
   white-space: normal;
 }

--
Gitblit v1.9.3