Explorar el Código

增加单位成本和能效对比

wukai hace 1 mes
padre
commit
6e354bb305
Se han modificado 1 ficheros con 101 adiciones y 12 borrados
  1. 101 12
      src/views/dye/line/calc.vue

+ 101 - 12
src/views/dye/line/calc.vue

@@ -59,42 +59,48 @@
             <span>{{ lineDataList0[0].line }}号线统计</span>
           </div>
           <el-row :gutter="10">
-            <el-col :span="4">
+            <el-col :span="3">
               <div class="stat-item">
                 <div class="stat-label">产量(米)</div>
                 <div class="stat-value">{{ calculateTotal(lineDataList0, 'length') }}</div>
               </div>
             </el-col>
-            <el-col :span="4">
+            <el-col :span="3">
               <div class="stat-item">
                 <div class="stat-label">电量(kW·h)</div>
                 <div class="stat-value">{{ calculateTotal(lineDataList0, 'energy') }}</div>
               </div>
             </el-col>
-            <el-col :span="4">
+            <el-col :span="3">
               <div class="stat-item">
                 <div class="stat-label">电流(A)</div>
                 <div class="stat-value">{{ calculateAverage(lineDataList0, 'amp') }}</div>
               </div>
             </el-col>
-            <el-col :span="4">
+            <el-col :span="3">
               <div class="stat-item">
                 <div class="stat-label">速度(m/min)</div>
                 <div class="stat-value">{{ calculateAverage(lineDataList0, 'speed') }}</div>
               </div>
             </el-col>
-            <el-col :span="4">
+            <el-col :span="3">
               <div class="stat-item">
                 <div class="stat-label">定型温度(°C)</div>
                 <div class="stat-value">{{ calculateAverage(lineDataList0, 'tmpDx') }}</div>
               </div>
             </el-col>
-            <el-col :span="4">
+            <el-col :span="3">
               <div class="stat-item">
                 <div class="stat-label">烫光温度(°C)</div>
                 <div class="stat-value">{{ calculateAverage(lineDataList0, 'tmpTg') }}</div>
               </div>
             </el-col>
+            <el-col :span="3">
+              <div class="stat-item">
+                <div class="stat-label" style="white-space: nowrap;">单位成本<br>(kW·h/米)</div>
+                <div class="stat-value">{{ calculateUnitCost(lineDataList0) }}</div>
+              </div>
+            </el-col>
           </el-row>
         </el-card>
       </el-col>
@@ -106,47 +112,67 @@
             <span>{{ lineDataList1[0].line }}号线统计</span>
           </div>
           <el-row :gutter="10">
-            <el-col :span="4">
+            <el-col :span="3">
               <div class="stat-item">
                 <div class="stat-label">产量(米)</div>
                 <div class="stat-value">{{ calculateTotal(lineDataList1, 'length') }}</div>
               </div>
             </el-col>
-            <el-col :span="4">
+            <el-col :span="3">
               <div class="stat-item">
                 <div class="stat-label">电量(kW·h)</div>
                 <div class="stat-value">{{ calculateTotal(lineDataList1, 'energy') }}</div>
               </div>
             </el-col>
-            <el-col :span="4">
+            <el-col :span="3">
               <div class="stat-item">
                 <div class="stat-label">电流(A)</div>
                 <div class="stat-value">{{ calculateAverage(lineDataList1, 'amp') }}</div>
               </div>
             </el-col>
-            <el-col :span="4">
+            <el-col :span="3">
               <div class="stat-item">
                 <div class="stat-label">速度(m/min)</div>
                 <div class="stat-value">{{ calculateAverage(lineDataList1, 'speed') }}</div>
               </div>
             </el-col>
-            <el-col :span="4">
+            <el-col :span="3">
               <div class="stat-item">
                 <div class="stat-label">定型温度(°C)</div>
                 <div class="stat-value">{{ calculateAverage(lineDataList1, 'tmpDx') }}</div>
               </div>
             </el-col>
-            <el-col :span="4">
+            <el-col :span="3">
               <div class="stat-item">
                 <div class="stat-label">烫光温度(°C)</div>
                 <div class="stat-value">{{ calculateAverage(lineDataList1, 'tmpTg') }}</div>
               </div>
             </el-col>
+            <el-col :span="6">
+              <div class="stat-item">
+                <div class="stat-label" style="white-space: nowrap;">单位成本(kW·h/米)</div>
+                <div class="stat-value">{{ calculateUnitCost(lineDataList1) }}</div>
+              </div>
+            </el-col>
           </el-row>
         </el-card>
       </el-col>
     </el-row>
 
+    <!-- 对比分析结论 -->
+    <el-row :gutter="20" style="margin-bottom: 20px;" v-if="lineDataList0.length > 0 && lineDataList1.length > 0">
+      <el-col :span="24">
+        <el-card>
+          <div slot="header" class="clearfix">
+            <span style="font-weight: bold;">产线能效对比分析</span>
+          </div>
+          <div style="padding: 10px;">
+            <p v-html="analysisText"></p>
+          </div>
+        </el-card>
+      </el-col>
+    </el-row>
+
     <!-- 折线图和表格左右布局 -->
     <el-row :gutter="20">
       <!-- 左侧产线图表和表格 -->
@@ -448,6 +474,69 @@ function calculateAverage(dataList, field) {
   return average.toFixed(2);
 }
 
+// 计算单位成本 (电量/产量)
+function calculateUnitCost(dataList) {
+  if (!dataList || !Array.isArray(dataList) || dataList.length === 0) {
+    return '0';
+  }
+
+  const totalLength = dataList.reduce((sum, item) => {
+    const length = item.length;
+    return sum + (length !== null && length !== undefined ? parseFloat(length) : 0);
+  }, 0);
+
+  const totalEnergy = dataList.reduce((sum, item) => {
+    const energy = item.energy;
+    return sum + (energy !== null && energy !== undefined ? parseFloat(energy) : 0);
+  }, 0);
+
+  // 如果产量为0,无法计算单位成本
+  if (totalLength === 0) {
+    return '0';
+  }
+
+  // 直接计算 电量/产量 的比率
+  const unitCost = totalEnergy / totalLength;
+  return unitCost.toFixed(2);
+}
+
+// 生成分析文本
+const analysisText = computed(() => {
+  if (lineDataList0.value.length === 0 || lineDataList1.value.length === 0) {
+    return '';
+  }
+
+  const line0 = lineDataList0.value[0].line;
+  const line1 = lineDataList1.value[0].line;
+
+  const unitCost0 = parseFloat(calculateUnitCost(lineDataList0.value));
+  const unitCost1 = parseFloat(calculateUnitCost(lineDataList1.value));
+
+  const totalLength0 = parseFloat(calculateTotal(lineDataList0.value, 'length'));
+  const totalLength1 = parseFloat(calculateTotal(lineDataList1.value, 'length'));
+
+  const totalEnergy0 = parseFloat(calculateTotal(lineDataList0.value, 'energy'));
+  const totalEnergy1 = parseFloat(calculateTotal(lineDataList1.value, 'energy'));
+
+  let comparison = '';
+  if (unitCost0 < unitCost1) {
+    const diffPercent = ((unitCost1 - unitCost0) / unitCost1 * 100).toFixed(2);
+    comparison = `${line0}号线能效更优,单位成本比${line1}号线低${diffPercent}%。`;
+  } else if (unitCost0 > unitCost1) {
+    const diffPercent = ((unitCost0 - unitCost1) / unitCost0 * 100).toFixed(2);
+    comparison = `${line1}号线能效更优,单位成本比${line0}号线低${diffPercent}%。`;
+  } else {
+    comparison = `两条产线能效相当。`;
+  }
+
+  const efficiency0 = totalLength0 > 0 ? (totalEnergy0 / totalLength0).toFixed(2) : '0';
+  const efficiency1 = totalLength1 > 0 ? (totalEnergy1 / totalLength1).toFixed(2) : '0';
+
+  return `在 ${queryParams.value.workDay} 的生产中,${line0}号线总产量${totalLength0.toFixed(0)}米,总耗电量${totalEnergy0.toFixed(2)}kW·h,
+  单位成本为${efficiency0}kW·h/米;${line1}号线总产量${totalLength1.toFixed(0)}米,总耗电量${totalEnergy1.toFixed(2)}kW·h,
+  单位成本为${efficiency1}kW·h/米。${comparison}较低的单位成本意味着更高的能源利用效率,请根据实际情况合理安排生产计划。`;
+});
+
 // 按产线分组的数据
 const groupedRzLineList = computed(() => {
   const grouped = {};