|
|
@@ -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) { // 维保工单
|