소스 검색

工时修改

ouyj 2 달 전
부모
커밋
e361d90a35

+ 5 - 4
ygtx-gxt/src/main/java/com/ygtx/gxt/mapper/GxtOrderHourMapper.java

@@ -3,6 +3,7 @@ package com.ygtx.gxt.mapper;
 import com.ygtx.gxt.domain.GxtRepairOrder;
 import com.ygtx.gxt.domain.GxtWorkOrder;
 import com.ygtx.gxt.domain.OrderScoreInfo;
+import com.ygtx.gxt.dto.SuspensionTimeRecord;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -33,16 +34,16 @@ public interface GxtOrderHourMapper
      * 查询维修工单挂起时长记录
      * 
      * @param orderId 工单ID
-     * @return 挂起时长记录数组 [开工前挂起秒数, 作业中挂起秒数, 夜间自动挂起秒数]
+     * @return 挂起时长记录DTO
      */
-    public int[] selectRepairOrderSuspensionTime(@Param("orderId") Long orderId);
+    public SuspensionTimeRecord selectRepairOrderSuspensionTime(@Param("orderId") Long orderId);
     
     /**
      * 查询维保工单挂起时长记录
      * 
      * @param orderId 工单ID
-     * @return 挂起时长记录数组 [开工前挂起秒数, 作业中挂起秒数, 夜间自动挂起秒数]
+     * @return 挂起时长记录DTO
      */
-    public int[] selectWorkOrderSuspensionTime(@Param("orderId") Long orderId);
+    public SuspensionTimeRecord selectWorkOrderSuspensionTime(@Param("orderId") Long orderId);
 
 }

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

@@ -8,6 +8,7 @@ import com.ygtx.common.utils.SecurityUtils;
 import com.ygtx.common.utils.StringUtils;
 import com.ygtx.framework.aspectj.DataScopeAspect;
 import com.ygtx.gxt.domain.*;
+import com.ygtx.gxt.dto.SuspensionTimeRecord;
 import com.ygtx.gxt.mapper.*;
 import com.ygtx.gxt.service.IGxtOrderHourService;
 import com.ygtx.gxt.service.IGxtRepairOrderService;
@@ -103,7 +104,7 @@ public class GxtOrderHourServiceImpl implements IGxtOrderHourService {
         for (OrderScoreInfo order : orderList) {
             /*double processingHours = calculateOrderProcessingHours(order);
             order.setHandleHour(processingHours);*/
-            long[] suspensionTimes = new long[3]; // 总挂起时长, 开工前挂起时长, 开工挂起后时长
+            long[] suspensionTimes = new long[4]; // 总挂起时长, 开工前挂起时长, 开工挂起后时长
             if (order.getOrderType() == 1) { // 维修工单
                 suspensionTimes = calculateRepairOrderSuspensionTime(order.getId());
             } else if (order.getOrderType() == 2) { // 维保工单
@@ -936,31 +937,34 @@ public class GxtOrderHourServiceImpl implements IGxtOrderHourService {
      * 自动挂起对应的actionType是auto_suspend,恢复对应的是auto_resume
      *
      * @param orderId 工单ID
-     * @return 包含总挂起时长、开工前挂起时长、开工后挂起时长的数组,索引0为总时长,索引1为开工前时长,索引2为开工后时长(毫秒)
+     * @return 包含总挂起时长、开工前挂起时长、开工后挂起时长、夜间挂起时长的数组,索引0为总时长,索引1为开工前时长,索引2为开工后时长(毫秒),索引3为夜间挂起时长(毫秒)
      */
     private long[] calculateRepairOrderSuspensionTime(Long orderId) {
         // 从数据库中直接获取挂起时长记录
-        int[] suspensionRecord = gxtOrderHourMapper.selectRepairOrderSuspensionTime(orderId);
+        SuspensionTimeRecord suspensionRecord = gxtOrderHourMapper.selectRepairOrderSuspensionTime(orderId);
         
-        if (suspensionRecord != null && suspensionRecord.length >= 3) {
+        if (suspensionRecord != null) {
             // 数据库存储的是秒,需要转换为毫秒
-            int beforeStartSeconds = suspensionRecord[0];  // 开工前挂起秒数
-            int inWorkSeconds = suspensionRecord[1];       // 作业中挂起秒数
-            int nightAutoSeconds = suspensionRecord[2];    // 夜间自动挂起秒数
+            int beforeStartSeconds = suspensionRecord.getBeforeStartSeconds() != null ? suspensionRecord.getBeforeStartSeconds() : 0;  // 开工前挂起秒数
+            int inWorkSeconds = suspensionRecord.getInWorkSeconds() != null ? suspensionRecord.getInWorkSeconds() : 0;                   // 作业中挂起秒数
+            int nightAutoSeconds = suspensionRecord.getNightAutoSeconds() != null ? suspensionRecord.getNightAutoSeconds() : 0;         // 夜间自动挂起秒数
             
             // 总挂起时长 = 开工前挂起 + 作业中挂起 + 夜间自动挂起
             long totalSuspensionTime = (long)(beforeStartSeconds + inWorkSeconds + nightAutoSeconds) * 1000;
             
             // 开工前挂起时长 = 开工前挂起 + 夜间自动挂起(夜间自动挂起也算作开工前)
-            long beforeStartSuspensionTime = (long)(beforeStartSeconds + nightAutoSeconds) * 1000;
+            //long beforeStartSuspensionTime = (long)(beforeStartSeconds + nightAutoSeconds) * 1000;
+            long beforeStartSuspensionTime = (long)beforeStartSeconds* 1000;
             
             // 开工后挂起时长 = 作业中挂起
             long afterStartSuspensionTime = (long)inWorkSeconds * 1000;
-            
-            return new long[]{totalSuspensionTime, beforeStartSuspensionTime, afterStartSuspensionTime};
+
+            long nightAutoSecondsTime = (long)nightAutoSeconds * 1000;
+
+            return new long[]{totalSuspensionTime, beforeStartSuspensionTime, afterStartSuspensionTime, nightAutoSecondsTime};
         } else {
             // 如果没有找到记录,返回默认值
-            return new long[]{0L, 0L, 0L};
+            return new long[]{0L, 0L, 0L, 0L};
         }
     }
 
@@ -970,31 +974,34 @@ public class GxtOrderHourServiceImpl implements IGxtOrderHourService {
      * 自动挂起对应的actionType是auto_suspend,恢复对应的是auto_resume
      *
      * @param orderId 工单ID
-     * @return 包含总挂起时长、开工前挂起时长、开工后挂起时长的数组,索引0为总时长,索引1为开工前时长,索引2为开工后时长(毫秒)
+     * @return 包含总挂起时长、开工前挂起时长、开工后挂起时长、夜间挂起时长的数组,索引0为总时长,索引1为开工前时长,索引2为开工后时长(毫秒),索引3为夜间挂起时长(毫秒)
      */
     private long[] calculateWorkOrderSuspensionTime(Long orderId) {
         // 从数据库中直接获取挂起时长记录
-        int[] suspensionRecord = gxtOrderHourMapper.selectWorkOrderSuspensionTime(orderId);
+        SuspensionTimeRecord suspensionRecord = gxtOrderHourMapper.selectWorkOrderSuspensionTime(orderId);
         
-        if (suspensionRecord != null && suspensionRecord.length >= 3) {
+        if (suspensionRecord != null) {
             // 数据库存储的是秒,需要转换为毫秒
-            int beforeStartSeconds = suspensionRecord[0];  // 开工前挂起秒数
-            int inWorkSeconds = suspensionRecord[1];       // 作业中挂起秒数
-            int nightAutoSeconds = suspensionRecord[2];    // 夜间自动挂起秒数
+            int beforeStartSeconds = suspensionRecord.getBeforeStartSeconds() != null ? suspensionRecord.getBeforeStartSeconds() : 0;  // 开工前挂起秒数
+            int inWorkSeconds = suspensionRecord.getInWorkSeconds() != null ? suspensionRecord.getInWorkSeconds() : 0;                   // 作业中挂起秒数
+            int nightAutoSeconds = suspensionRecord.getNightAutoSeconds() != null ? suspensionRecord.getNightAutoSeconds() : 0;         // 夜间自动挂起秒数
             
             // 总挂起时长 = 开工前挂起 + 作业中挂起 + 夜间自动挂起
             long totalSuspensionTime = (long)(beforeStartSeconds + inWorkSeconds + nightAutoSeconds) * 1000;
-            
+
             // 开工前挂起时长 = 开工前挂起 + 夜间自动挂起(夜间自动挂起也算作开工前)
-            long beforeStartSuspensionTime = (long)(beforeStartSeconds + nightAutoSeconds) * 1000;
-            
+            //long beforeStartSuspensionTime = (long)(beforeStartSeconds + nightAutoSeconds) * 1000;
+            long beforeStartSuspensionTime = (long)beforeStartSeconds* 1000;
+
             // 开工后挂起时长 = 作业中挂起
             long afterStartSuspensionTime = (long)inWorkSeconds * 1000;
-            
-            return new long[]{totalSuspensionTime, beforeStartSuspensionTime, afterStartSuspensionTime};
+
+            long nightAutoSecondsTime = (long)nightAutoSeconds * 1000;
+
+            return new long[]{totalSuspensionTime, beforeStartSuspensionTime, afterStartSuspensionTime, nightAutoSecondsTime};
         } else {
             // 如果没有找到记录,返回默认值
-            return new long[]{0L, 0L, 0L};
+            return new long[]{0L, 0L, 0L, 0L};
         }
     }
 
@@ -1020,7 +1027,7 @@ public class GxtOrderHourServiceImpl implements IGxtOrderHourService {
         }
 
         // 挂起时长 = 恢复时间 - 挂起时间
-        long[] suspensionTimes = new long[3]; // 总挂起时长, 开工前挂起时长, 开工挂起后时长
+        long[] suspensionTimes = new long[4]; // 总挂起时长, 开工前挂起时长, 开工挂起后时长
         if (order.getOrderType() == 1) { // 维修工单
             suspensionTimes = calculateRepairOrderSuspensionTime(order.getId());
         } else if (order.getOrderType() == 2) { // 维保工单
@@ -1037,8 +1044,8 @@ public class GxtOrderHourServiceImpl implements IGxtOrderHourService {
         long acceptSuspensionTime = 0;
         if (order.getAcceptTime() != null && order.getAssignTime() != null) {
             // 计算接单期间的自动挂起时长
-            acceptSuspensionTime = calculateOrderAcceptSuspensionTime(order.getId(), order.getAssignTime(), order.getAcceptTime(), order.getOrderType());
-            
+            //acceptSuspensionTime = calculateOrderAcceptSuspensionTime(order.getId(), order.getAssignTime(), order.getAcceptTime(), order.getOrderType());
+            acceptSuspensionTime = suspensionTimes[3];
             long diffMillis = order.getAcceptTime().getTime() - order.getAssignTime().getTime();
             order.setAcceptHour((diffMillis - acceptSuspensionTime) / (1000.0 * 60 * 60));
         }
@@ -1221,7 +1228,7 @@ public class GxtOrderHourServiceImpl implements IGxtOrderHourService {
         }
         
         // 计算挂起时长
-        long[] suspensionTimes = new long[3]; // 总挂起时长, 开工前挂起时长, 开工挂起后时长
+        long[] suspensionTimes = new long[4]; // 总挂起时长, 开工前挂起时长, 开工挂起后时长
         if (order.getOrderType() == 1) { // 维修工单
             suspensionTimes = calculateRepairOrderSuspensionTime(order.getId());
         } else if (order.getOrderType() == 2) { // 维保工单

+ 2 - 2
ygtx-gxt/src/main/resources/mapper/gxt/GxtOrderHourMapper.xml

@@ -236,7 +236,7 @@
     </select>
     
     <!-- 查询维修工单挂起时长记录 -->
-    <select id="selectRepairOrderSuspensionTime" resultType="int">
+    <select id="selectRepairOrderSuspensionTime" resultType="com.ygtx.gxt.dto.SuspensionTimeRecord">
         SELECT 
             COALESCE(total_before_start_suspend_seconds, 0) as beforeStartSeconds,
             COALESCE(total_in_work_suspend_seconds, 0) as inWorkSeconds,
@@ -246,7 +246,7 @@
     </select>
     
     <!-- 查询维保工单挂起时长记录 -->
-    <select id="selectWorkOrderSuspensionTime" resultType="int">
+    <select id="selectWorkOrderSuspensionTime" resultType="com.ygtx.gxt.dto.SuspensionTimeRecord">
         SELECT 
             COALESCE(total_before_start_suspend_seconds, 0) as beforeStartSeconds,
             COALESCE(total_in_work_suspend_seconds, 0) as inWorkSeconds,

+ 2 - 1
ygtx-ui/package.json

@@ -25,7 +25,8 @@
     "crypto-js": "^4.2.0",
     "echarts": "5.6.0",
     "element-plus": "2.10.7",
-    "file-saver": "2.0.5",
+    "exceljs": "^4.4.0",
+    "file-saver": "^2.0.5",
     "font-awesome": "^4.7.0",
     "fuse.js": "6.6.2",
     "js-beautify": "1.14.11",