ソースを参照

自动结单匹配修改

HD_wangm 2 ヶ月 前
コミット
39ad4f0151

+ 10 - 0
ygtx-gxt/src/main/java/com/ygtx/gxt/domain/GxtMisInfo.java

@@ -61,6 +61,8 @@ public class GxtMisInfo extends BaseEntity {
 
     private Date restartTime;
 
+    private Long orderType;
+
     public String getMisNo() {
         return misNo;
     }
@@ -204,4 +206,12 @@ public class GxtMisInfo extends BaseEntity {
     public void setRestartTime(Date restartTime) {
         this.restartTime = restartTime;
     }
+
+    public Long getOrderType() {
+        return orderType;
+    }
+
+    public void setOrderType(Long orderType) {
+        this.orderType = orderType;
+    }
 }

+ 1 - 1
ygtx-gxt/src/main/java/com/ygtx/gxt/domain/GxtOrderData.java

@@ -106,7 +106,7 @@ public class GxtOrderData extends BaseEntity
     private String clsc;
 
     /** 启机并网时长 */
-    @Excel(name = "复运时长(h)")
+    @Excel(name = "验收时长(h)")
     private String qjbwsc;
 
     /** 停机时长 */

+ 3 - 3
ygtx-gxt/src/main/java/com/ygtx/gxt/service/impl/GxtOrderHourServiceImpl.java

@@ -1150,7 +1150,7 @@ public class GxtOrderHourServiceImpl implements IGxtOrderHourService {
             order.setWorkHour(diffMillis / (1000.0 * 60 * 60));
         }
         
-        // 复运时长 = 复运时间 – 结束打卡时间
+        // 验收时长 = 复运时间 – 结束打卡时间
         if (order.getRestartTime() != null && order.getRealEndTime() != null) {
             long diffMillis = order.getRestartTime().getTime() - order.getRealEndTime().getTime();
             order.setRestartHour(diffMillis / (1000.0 * 60 * 60));
@@ -1194,8 +1194,8 @@ public class GxtOrderHourServiceImpl implements IGxtOrderHourService {
                 order.setDowntimeHour(originalDowntimeHour);
             }
         }
-        // 使用新方法计算停运时长:停运时长 = 下发时长 + 接单时长 + 准备时长 + 挂起时长 + 作业时长 + 复运时长
-        // G(停运时长)=A(下发时长)+B(接单时长)+C(准备时长)+D(挂起时长)+E(作业时长)+F(复运时长)
+        // 使用新方法计算停运时长:停运时长 = 下发时长 + 接单时长 + 准备时长 + 挂起时长 + 作业时长 + 验收时长
+        // G(停运时长)=A(下发时长)+B(接单时长)+C(准备时长)+D(挂起时长)+E(作业时长)+F(验收时长)
         if (originalDowntimeHour != null) {
             Double newDowntimeHour = 0.0;
             

+ 10 - 0
ygtx-gxt/src/main/java/com/ygtx/gxt/task/OrderAutoFinalizeTask.java

@@ -73,11 +73,16 @@ public class OrderAutoFinalizeTask {
         for (GxtRepairOrder repairOrder : repairOrderList) {
             // 关联查询MIS工单信息
             GxtMisInfo misInfo = new GxtMisInfo();
+            if(repairOrder != null && repairOrder.getPcsStationName() != null
+                    && repairOrder.getPcsStationName().contains("三墩风电场")){
+                repairOrder.setPcsStationName("三墩风电场");
+            }
             misInfo.setPcsStationName(repairOrder.getPcsStationName());
             misInfo.setPcsDeviceName(repairOrder.getPcsDeviceName());
             misInfo.setPauseTime(repairOrder.getOccurTime());
             misInfo.setRestartTime(repairOrder.getRestartTime());
             misInfo.setWorkOrderStatus("结束");
+            misInfo.setOrderType(1L);
             List<GxtMisInfo> misInfoList = misInfoMapper.selectAutoGxtMisInfoList(misInfo);
             
             GxtMisInfo validMisInfo = null;
@@ -238,11 +243,16 @@ public class OrderAutoFinalizeTask {
         for (GxtWorkOrder workOrder : workOrderList) {
             // 关联查询MIS工单信息
             GxtMisInfo misInfo = new GxtMisInfo();
+            if(workOrder != null && workOrder.getPcsStationName() != null
+                    && workOrder.getPcsStationName().contains("三墩风电场")){
+                workOrder.setPcsStationName("三墩风电场");
+            }
             misInfo.setPcsStationName(workOrder.getPcsStationName());
             misInfo.setPcsDeviceName(workOrder.getPcsDeviceName());
             misInfo.setPauseTime(workOrder.getPauseTime());
             misInfo.setRestartTime(workOrder.getRestartTime());
             misInfo.setWorkOrderStatus("结束");
+            misInfo.setOrderType(2L);
             List<GxtMisInfo> misInfoList = misInfoMapper.selectAutoGxtMisInfoList(misInfo);
             
             GxtMisInfo validMisInfo = null;

+ 13 - 2
ygtx-gxt/src/main/resources/mapper/gxt/source/GxtMisInfoMapper.xml

@@ -78,8 +78,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         WHERE t.work_order_device IS NOT NULL
         AND t.pcs_station_name = #{pcsStationName}
         AND t.work_order_device = #{pcsDeviceName}
-        AND t.real_start_time &gt;= #{pauseTime}
-        AND t.real_start_time &lt; #{restartTime}
+        <!-- 维修工单 -->
+        <if test="orderType != null and orderType != '' and orderType == 1">
+            AND t.real_start_time &gt;= #{pauseTime}
+            AND t.real_start_time &lt; #{restartTime}
+            AND t.real_end_time &gt; #{restartTime}
+        </if>
+        <!-- 维保工单 -->
+        <if test="orderType != null and orderType != '' and orderType == 2">
+            AND t.real_start_time &lt; #{pauseTime}
+            <!-- 开始时间与停机时间相差 ≤ 60分钟(分钟级时间差) -->
+            AND TIMESTAMPDIFF(MINUTE, t.real_start_time, #{pauseTime}) &lt;= 60
+            AND t.real_end_time &gt; #{restartTime}
+        </if>
         <if test="misNo != null  and misNo != ''"> and work_order_project_code like concat('%', #{misNo}, '%')</if>
         <if test="workOrderStatus != null  and workOrderStatus != ''"> and work_order_status in
             <foreach collection="workOrderStatus.split(',')" item="status" open="(" separator="," close=")">

+ 2 - 1
ygtx-ui/src/views/gxt/gxtOrder/index.vue

@@ -2252,7 +2252,8 @@ function handleFinish(row) {
         restartTime: row.restartTime,
         pcsDeviceName: row.pcsDeviceName,
         pcsStationName: row.pcsStationName,
-        workOrderStatus: '结束'
+        workOrderStatus: '结束',
+        orderType: 2
       }).then(response => {
         const misInfo = response.rows
         debugger

+ 4 - 2
ygtx-ui/src/views/gxt/orderMyTodo/index.vue

@@ -2831,7 +2831,8 @@ function handleRepairOrderFinalize(row) {
       restartTime: row.restartTime,
       pcsDeviceName: row.pcsDeviceName,
       pcsStationName: row.pcsStationName,
-      workOrderStatus: '结束'
+      workOrderStatus: '结束',
+      orderType: 1
     }).then(response => {
       const misInfo = response.rows
       if (misInfo.length > 0 && misInfo.length == 1) {
@@ -3000,7 +3001,8 @@ function handleFinish(row) {
       restartTime: row.restartTime,
       pcsDeviceName: row.pcsDeviceName,
       pcsStationName: row.pcsStationName,
-      workOrderStatus: '结束'
+      workOrderStatus: '结束',
+      orderType: 2
     }).then(response => {
       const misInfo = response.rows
       debugger

+ 17 - 17
ygtx-ui/src/views/gxt/orderScore/index.vue

@@ -374,7 +374,7 @@
                 <el-table-column
                     label="停运扣分"
                     align="center"
-                    prop="stopScore" 
+                    prop="stopScore"
                     v-if="hasStopScore()"
                     style="width: 33%;">
                   <template #default="scope">
@@ -1497,20 +1497,20 @@ function checkReviewScoreChanged() {
   if (!reviewForm.value || !reviewForm.value.scorePersonList) {
     return false;
   }
-  
+
   return reviewForm.value.scorePersonList.some(person => {
-    const selfScore = person.selfScore !== null && person.selfScore !== undefined && person.selfScore !== '' 
-      ? parseFloat(person.selfScore) 
+    const selfScore = person.selfScore !== null && person.selfScore !== undefined && person.selfScore !== ''
+      ? parseFloat(person.selfScore)
       : null;
-    const reviewScore = person.reviewScore !== null && person.reviewScore !== undefined && person.reviewScore !== '' 
-      ? parseFloat(person.reviewScore) 
+    const reviewScore = person.reviewScore !== null && person.reviewScore !== undefined && person.reviewScore !== ''
+      ? parseFloat(person.reviewScore)
       : null;
-    
+
     // 如果自评得分和复评得分都存在且不相等,则返回true
     if (selfScore !== null && reviewScore !== null) {
       return Math.abs(selfScore - reviewScore) > 0.005; // 使用容差避免浮点数精度问题
     }
-    
+
     // 如果自评得分存在但复评得分不存在,或反之,也认为是不同
     return (selfScore !== null && reviewScore === null) || (selfScore === null && reviewScore !== null);
   });
@@ -1522,15 +1522,15 @@ function checkItemCompletionFactorChanged() {
     // 不是维保工单,不需要检查分项完成系数
     return false;
   }
-  
+
   const currentFactor = reviewForm.value.itemCompletionFactor;
   const initialFactor = reviewForm.value.initialItemCompletionFactor;
-  
+
   if (currentFactor == null || initialFactor == null) {
     // 如果任一值为null,认为没有变化
     return false;
   }
-  
+
   // 比较分项完成系数是否发生变化
   return Math.abs(parseFloat(currentFactor) - parseFloat(initialFactor)) > 0.005;
 }
@@ -1949,14 +1949,14 @@ function onReviewScoreInputChange(row) {
   if (debounceTimer) {
     clearTimeout(debounceTimer);
   }
-  
+
   // 设置新的定时器
   debounceTimer = setTimeout(() => {
     updateReviewTotalScore(row);
-    
+
     // 检查是否需要显示修改理由
     const shouldShowModifyReason = checkReviewScoreChanged() || checkItemCompletionFactorChanged();
-    
+
     if (shouldShowModifyReason && !showModifyReason.value) {
       // 需要显示修改理由,且当前未显示
       showModifyReason.value = true;
@@ -2194,11 +2194,11 @@ function handleReview(row) {
     isItemCompletionFactorEditable.value = false;
     showReturnReason.value = false;
     showModifyReason.value = false;
-    
+
     // 检查是否需要显示修改理由 - 检查复评得分是否与自评得分不同或分项完成系数是否变化
     // 在数据加载完成后检查是否需要显示修改理由
    /* const shouldShowModifyReason = checkReviewScoreChanged() || checkItemCompletionFactorChanged();
-    
+
     if (shouldShowModifyReason && !showModifyReason.value) {
       showModifyReason.value = true;
     } else if (!shouldShowModifyReason && showModifyReason.value) {
@@ -3419,7 +3419,7 @@ function hasOtherOrQitaInspectionType() {
 function hasStopScore() {
   // 检查当前查看的工单是否存在停运扣分
   if (viewForm.value && viewForm.value.scorePersonList && Array.isArray(viewForm.value.scorePersonList)) {
-    return viewForm.value.scorePersonList.some(person => 
+    return viewForm.value.scorePersonList.some(person =>
       person.stopScore !== null && person.stopScore !== undefined && person.stopScore !== ''
     );
   }

+ 2 - 1
ygtx-ui/src/views/gxt/repairOrder/index.vue

@@ -3447,7 +3447,8 @@ function handleFinalize(row, method) {
       restartTime: row.restartTime,
       pcsDeviceName: row.pcsDeviceName,
       pcsStationName: row.pcsStationName,
-      workOrderStatus: '结束'
+      workOrderStatus: '结束',
+      orderType: 1
     }).then(response => {
       const misInfo = response.rows
       debugger

+ 2 - 2
ygtx-ui/src/views/index4.vue

@@ -254,7 +254,7 @@
                   <el-checkbox v-model="indicatorFilters.workhour.items.clsc" label="作业时长" @change="handleWorkhourSelect" />
                 </label>
                 <label class="checkbox-item">
-                  <el-checkbox v-model="indicatorFilters.workhour.items.qjbwsc" label="复运时长" @change="handleWorkhourSelect" />
+                  <el-checkbox v-model="indicatorFilters.workhour.items.qjbwsc" label="验收时长" @change="handleWorkhourSelect" />
                 </label>
                 <label class="checkbox-item">
                   <el-checkbox v-model="indicatorFilters.workhour.items.tjsc" label="停运时长" @change="handleWorkhourSelect" />
@@ -496,7 +496,7 @@
             <el-table-column v-if="queryParams.xysc" prop="xysc" label="接单时长(h)" :style="{ width: changeWidth() * 1.5 + '%' }" header-align="center" align="center" :formatter="formatScore"></el-table-column>
             <el-table-column v-if="queryParams.zbsc" prop="zbsc" label="准备时长(h)" :style="{ width: changeWidth() * 1.5 + '%' }" header-align="center" align="center" :formatter="formatScore"></el-table-column>
             <el-table-column v-if="queryParams.clsc" prop="clsc" label="作业时长(h)" :style="{ width: changeWidth() * 1.5 + '%' }" header-align="center" align="center" :formatter="formatScore"></el-table-column>
-            <el-table-column v-if="queryParams.qjbwsc" prop="qjbwsc" label="复运时长(h)" :style="{ width: changeWidth() * 1.5 + '%' }" header-align="center" align="center" :formatter="formatScore"></el-table-column>
+            <el-table-column v-if="queryParams.qjbwsc" prop="qjbwsc" label="验收时长(h)" :style="{ width: changeWidth() * 1.5 + '%' }" header-align="center" align="center" :formatter="formatScore"></el-table-column>
             <el-table-column v-if="queryParams.tjsc" prop="tjsc" label="停运时长(h)" :style="{ width: changeWidth() * 1.5 + '%' }" header-align="center" align="center" :formatter="formatScore"></el-table-column>
             <el-table-column v-if="queryParams.gqsc" prop="gqsc" label="挂起时长(h)" :style="{ width: changeWidth() * 1.5 + '%' }" header-align="center" align="center" :formatter="formatScore"></el-table-column>
           </el-table>