From 2a2885f45160b4048a27e75d5be03ba9232c7363 Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期二, 10 九月 2024 17:34:42 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ycl-common/src/main/java/constant/RedisConstant.java                             |    4 
 ycl-server/src/main/java/com/ycl/task/ClearRedisTask.java                        |   28 ++
 ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml                    |   39 +++
 ycl-server/src/main/java/com/ycl/platform/mapper/ReportMapper.java               |    8 
 ycl-server/src/main/resources/mapper/zgyw/WorkOrderErrorTypeMapper.xml           |    4 
 ycl-server/src/main/java/com/ycl/platform/controller/WorkOrderController.java    |   25 ++
 ycl-server/src/main/java/com/ycl/platform/mapper/TMonitorMapper.java             |    7 
 ycl-pojo/src/main/java/com/ycl/platform/domain/vo/WorkOrderVO.java               |    4 
 ycl-server/src/main/resources/application-dev.yml                                |    4 
 ycl-pojo/src/main/java/com/ycl/platform/domain/query/WorkOrderQuery.java         |    2 
 ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderErrorTypeMapper.java   |    8 
 ycl-server/src/main/java/com/ycl/platform/service/WorkOrderService.java          |   11 
 ycl-server/src/main/java/com/ycl/thread/OnlineCheckThread.java                   |  129 ++++++++++++
 ycl-server/src/main/java/com/ycl/platform/service/impl/ReportServiceImpl.java    |   15 +
 ycl-pojo/src/main/java/com/ycl/platform/domain/vo/WorkOrderDetailVO.java         |   79 +++++++
 ycl-server/src/main/java/com/ycl/platform/service/ReportService.java             |    8 
 ycl-server/src/main/java/com/ycl/platform/controller/ReportController.java       |    7 
 ycl-server/src/main/resources/mapper/zgyw/ReportMapper.xml                       |   28 ++
 ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java |   21 +
 ycl-server/src/main/java/com/ycl/task/UYTask.java                                |  103 +++++----
 ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderMapper.java            |    9 
 ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml                     |   16 +
 ycl-pojo/src/main/java/com/ycl/platform/domain/vo/OnlineThreadVO.java            |   21 ++
 23 files changed, 511 insertions(+), 69 deletions(-)

diff --git a/ycl-common/src/main/java/constant/RedisConstant.java b/ycl-common/src/main/java/constant/RedisConstant.java
index b576a18..6e66eb4 100644
--- a/ycl-common/src/main/java/constant/RedisConstant.java
+++ b/ycl-common/src/main/java/constant/RedisConstant.java
@@ -6,4 +6,8 @@
     //杞﹁締銆佷汉鑴稿湪绾跨巼  Redis 姣忔湀鏁版嵁涓柇娆℃暟 Hash key
     public final static String Check_Car_ViewConnect = "CarViewConnectNoData";
     public final static String Check_Face_ViewConnect = "FaceViewConnectNoData";
+
+    /** 鐐逛綅鍦ㄧ嚎锛宧ash鐨刱ey */
+    public final static String ONLINE_KEY = "ONLINE_";
+
 }
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/query/WorkOrderQuery.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/query/WorkOrderQuery.java
index 1712e99..0249df5 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/query/WorkOrderQuery.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/query/WorkOrderQuery.java
@@ -24,7 +24,7 @@
     /**
      * 宸ュ崟鍙�
      */
-    private String workOrderNo;
+    private String keyword;
 
     /**
      * 杩愮淮澶勭悊鏃堕棿
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/OnlineThreadVO.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/OnlineThreadVO.java
new file mode 100644
index 0000000..c952333
--- /dev/null
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/OnlineThreadVO.java
@@ -0,0 +1,21 @@
+package com.ycl.platform.domain.vo;
+
+import com.ycl.platform.domain.entity.WorkOrder;
+import lombok.Data;
+
+/**
+ * 鐩戞祴鍦ㄧ嚎鐨勭嚎绋嬭繑鍥炲璞�
+ *
+ * @author锛歺p
+ * @date锛�2024/9/10 11:44
+ */
+@Data
+public class OnlineThreadVO {
+
+    private Boolean online;
+
+    private String ip;
+
+    private WorkOrder workOrder;
+
+}
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/WorkOrderDetailVO.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/WorkOrderDetailVO.java
new file mode 100644
index 0000000..7e5c654
--- /dev/null
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/WorkOrderDetailVO.java
@@ -0,0 +1,79 @@
+package com.ycl.platform.domain.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ycl.platform.base.AbsVo;
+import com.ycl.platform.domain.entity.WorkOrder;
+import lombok.Data;
+import org.springframework.beans.BeanUtils;
+import org.springframework.lang.NonNull;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 宸ュ崟灞曠ず
+ *
+ * @author xp
+ * @since 2024-03-05
+ */
+@Data
+public class WorkOrderDetailVO extends AbsVo {
+
+    /** 宸ュ崟鍙� */
+    private String workOrderNo;
+
+    /** 鐘舵�� */
+    private String status;
+
+    /** 杩愮淮鍗曚綅 */
+    private Integer unitId;
+    private String unitName;
+    private String unitContact;
+    private String unitContactPhone;
+
+    /** 宸ュ崟鏉ユ簮/璁惧鍚嶇О */
+    private String source;
+
+    /**
+     * 璁惧缂栧彿
+     */
+    private String serialNumber;
+
+    /**
+     * 澶勭悊鏃堕檺
+     */
+    private Integer processingPeriod;
+
+    /**
+     * 鏄惁閲嶇偣鐐逛綅
+     */
+    private Boolean important;
+
+    /** 鏁呴殰绫诲瀷 */
+    private List<String> errorTypeList;
+
+    /** 鏁呴殰绫诲瀷 */
+    private String errorType;
+
+    /** 0鏈秴鏃� 1瓒呮椂 */
+    private Integer overtime;
+
+    /** 涓嬪彂鏃堕棿 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date distributeTime;
+
+    /**
+     * 鏄惁鎶ュ
+     */
+    private Boolean hasReport;
+
+    public static WorkOrderDetailVO getVoByEntity(@NonNull WorkOrder entity, WorkOrderDetailVO vo) {
+        if(vo == null) {
+            vo = new WorkOrderDetailVO();
+        }
+        BeanUtils.copyProperties(entity, vo);
+        return vo;
+    }
+
+}
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/WorkOrderVO.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/WorkOrderVO.java
index 4d730b9..38acde9 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/WorkOrderVO.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/WorkOrderVO.java
@@ -7,6 +7,8 @@
 import java.time.LocalDateTime;
 import java.util.Date;
 import java.util.List;
+
+import enumeration.general.WorkOrderStatusEnum;
 import org.springframework.lang.NonNull;
 import org.springframework.beans.BeanUtils;
 import io.swagger.annotations.ApiModel;
@@ -27,7 +29,7 @@
     private String workOrderNo;
 
     /** 鐘舵�� */
-    private String status;
+    private WorkOrderStatusEnum status;
 
     /** 杩愮淮鍗曚綅 */
     private Integer unitId;
diff --git a/ycl-server/src/main/java/com/ycl/platform/controller/ReportController.java b/ycl-server/src/main/java/com/ycl/platform/controller/ReportController.java
index bf5d5ef..197de36 100644
--- a/ycl-server/src/main/java/com/ycl/platform/controller/ReportController.java
+++ b/ycl-server/src/main/java/com/ycl/platform/controller/ReportController.java
@@ -127,4 +127,11 @@
         ExcelUtil<ReportVO> util = new ExcelUtil<>(ReportVO.class);
         util.exportExcel(response, list, "杩愮淮鍗曚綅");
     }
+
+    @GetMapping("/list/{gb}")
+    @ApiOperation(value = "鏍规嵁鍥芥爣鐮佹煡鎶ュ", notes = "鏍规嵁鍥芥爣鐮佹煡鎶ュ")
+    public Result getListByGb(@PathVariable("gb") String gb)
+    {
+        return reportService.getListByGb(gb);
+    }
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/controller/WorkOrderController.java b/ycl-server/src/main/java/com/ycl/platform/controller/WorkOrderController.java
index 39216f0..d2067df 100644
--- a/ycl-server/src/main/java/com/ycl/platform/controller/WorkOrderController.java
+++ b/ycl-server/src/main/java/com/ycl/platform/controller/WorkOrderController.java
@@ -1,9 +1,11 @@
 package com.ycl.platform.controller;
 
+import com.ycl.platform.domain.entity.WorkOrderAuditingRecord;
 import com.ycl.platform.domain.form.*;
 import com.ycl.platform.domain.query.DistributeWorkOrderQuery;
 import com.ycl.platform.domain.query.WorkOrderQuery;
 import com.ycl.platform.domain.vo.DistributeWorkOrderVO;
+import com.ycl.platform.domain.vo.WorkOrderYwConditionRecordVO;
 import com.ycl.platform.service.WorkOrderService;
 import com.ycl.system.Result;
 import com.ycl.system.domain.group.Add;
@@ -143,4 +145,27 @@
     public Result list() {
         return workOrderService.all();
     }
+
+
+
+    @GetMapping("/detail/info/{workOrderNo}")
+    @ApiOperation(value = "璇︽儏", notes = "璇︽儏")
+    @PreAuthorize("@ss.hasPermi('work:order:detail')")
+    public Result detailByNo(@PathVariable("workOrderNo") String workOrderNo) {
+        return workOrderService.detailByNo(workOrderNo);
+    }
+
+    @GetMapping("/yw-condition-list/{workOrderNo}")
+    @ApiOperation(value = "杩愮淮鎯呭喌璁板綍鍒楄〃", notes = "杩愮淮鎯呭喌璁板綍鍒楄〃")
+    public Result ywCondition(@PathVariable String workOrderNo) {
+        List<WorkOrderYwConditionRecordVO> data = workOrderService.selectYwConditionByYwId(workOrderNo);
+        return Result.ok().data(data);
+    }
+
+    @GetMapping("/yw-auditing-list/{workOrderNo}")
+    @ApiOperation(value = "杩愮淮瀹℃牳璁板綍", notes = "杩愮淮瀹℃牳璁板綍")
+    public Result ywAuditingByYwId(@PathVariable String workOrderNo) {
+        List<WorkOrderAuditingRecord> data = workOrderService.selectYwAuditingListByYwId(workOrderNo);
+        return Result.ok().data(data);
+    }
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/mapper/ReportMapper.java b/ycl-server/src/main/java/com/ycl/platform/mapper/ReportMapper.java
index f61f978..544aa1d 100644
--- a/ycl-server/src/main/java/com/ycl/platform/mapper/ReportMapper.java
+++ b/ycl-server/src/main/java/com/ycl/platform/mapper/ReportMapper.java
@@ -49,4 +49,12 @@
      * @return
      */
     List<Report> getTogether(@Param("pid") String pid);
+
+    /**
+     * 鍥芥爣鐮佹煡璁惧
+     *
+     * @param gb
+     * @return
+     */
+    List<ReportVO> getListByGb(@Param("gb") String gb);
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/mapper/TMonitorMapper.java b/ycl-server/src/main/java/com/ycl/platform/mapper/TMonitorMapper.java
index 266054a..bda6714 100644
--- a/ycl-server/src/main/java/com/ycl/platform/mapper/TMonitorMapper.java
+++ b/ycl-server/src/main/java/com/ycl/platform/mapper/TMonitorMapper.java
@@ -156,13 +156,14 @@
      *
      * @return
      */
-    List<String> getDistinctIP();
+    List<TMonitor> getDistinctIP();
 
     /**
      * 鏍规嵁ip淇敼鐐逛綅琛ㄧ殑鏄惁鍦ㄧ嚎瀛楁
-     * @param online
+     * @param onlineList
      */
-    void updateOnline(@Param("online") UpdateOnlineVO online);
+    void updateOnline(@Param("onlineList") List<UpdateOnlineVO> onlineList);
+
 
     /**
      * 鐐逛綅鍦ㄧ嚎鐜�
diff --git a/ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderErrorTypeMapper.java b/ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderErrorTypeMapper.java
index 96603cc..16efe99 100644
--- a/ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderErrorTypeMapper.java
+++ b/ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderErrorTypeMapper.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ycl.platform.domain.entity.WorkOrderErrorType;
+import com.ycl.system.entity.SysDictData;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.security.core.parameters.P;
 import org.springframework.stereotype.Repository;
@@ -87,4 +88,11 @@
      */
     int addMany(@Param("errorTypeList") List<WorkOrderErrorType> errorTypeList);
 
+    /**
+     * 鑾峰彇鏁呴殰绫诲瀷锛岃繛琛ㄥ瓧鍏�
+     *
+     * @param workOrderNo
+     * @return
+     */
+    List<SysDictData> getErrorList(@Param("workOrderNo") String workOrderNo);
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderMapper.java b/ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderMapper.java
index 1625fb5..c37308f 100644
--- a/ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderMapper.java
+++ b/ycl-server/src/main/java/com/ycl/platform/mapper/WorkOrderMapper.java
@@ -5,6 +5,7 @@
 import com.ycl.platform.domain.entity.WorkOrder;
 import com.ycl.platform.domain.query.*;
 import com.ycl.platform.domain.vo.DeviceInfoVO;
+import com.ycl.platform.domain.vo.WorkOrderDetailVO;
 import com.ycl.platform.domain.vo.WorkOrderVO;
 import com.ycl.platform.domain.vo.YwPointJobVO;
 import com.ycl.platform.domain.vo.screen.ScreenWorkOrderVO;
@@ -92,4 +93,12 @@
      * @return
      */
     List<WorkOrder> getNotFinishedWorkOrders(@Param("list") List<String> serialNumberList);
+
+    /**
+     * 宸ュ崟鍙锋煡璇︽儏
+     *
+     * @param workOrderNo
+     * @return
+     */
+    WorkOrderDetailVO detailByNo(@Param("workOrderNo") String workOrderNo);
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/ReportService.java b/ycl-server/src/main/java/com/ycl/platform/service/ReportService.java
index bcea92c..02eef8c 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/ReportService.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/ReportService.java
@@ -109,4 +109,12 @@
      * @return
      */
     Result getTogether(String pid);
+
+    /**
+     * 鍥芥爣鐮佹煡鎶ュ璁板綍
+     *
+     * @param gb
+     * @return
+     */
+    Result getListByGb(String gb);
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/WorkOrderService.java b/ycl-server/src/main/java/com/ycl/platform/service/WorkOrderService.java
index 0f3bf8b..e968d6d 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/WorkOrderService.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/WorkOrderService.java
@@ -26,13 +26,12 @@
 public interface WorkOrderService extends IService<WorkOrder> {
 
     /**
-     * 绯荤粺鍐呴儴鐨勬坊鍔狅紝涓嬪彂
+     * 绯荤粺鍐呴儴鐨勬坊鍔�
      *
      * @param workOrderList
      * @return
      */
     Boolean innerAddWorkOrder(List<WorkOrder> workOrderList);
-
 
     /**
      * 娣诲姞
@@ -216,4 +215,12 @@
      * @return
      */
     Result processImg(String workOrderNo);
+
+    /**
+     * 宸ュ崟璇︽儏
+     *
+     * @param workOrderNo
+     * @return
+     */
+    Result detailByNo(String workOrderNo);
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/ReportServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/ReportServiceImpl.java
index a4e0441..b9df674 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/impl/ReportServiceImpl.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/ReportServiceImpl.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
 import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ycl.platform.domain.dto.ReportImportDTO;
 import com.ycl.platform.domain.entity.*;
@@ -386,4 +387,18 @@
         }
         return Result.ok("鎿嶄綔鎴愬姛");
     }
+
+    @Override
+    public Result getListByGb(String gb) {
+        List<ReportVO> list = baseMapper.getListByGb(gb);
+        for (ReportVO report : list) {
+            List<ReportErrorType> errors = new LambdaQueryChainWrapper<>(reportErrorTypeService.getBaseMapper())
+                    .eq(ReportErrorType::getReportId, report.getId())
+                    .orderByDesc(ReportErrorType::getCreateTime)
+                    .list();
+            String err = errors.stream().map(ReportErrorType::getErrorType).collect(Collectors.joining(","));
+            report.setErrorType(err);
+        }
+        return Result.ok().data(list);
+    }
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java
index edc2c11..a946f0c 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java
@@ -26,6 +26,7 @@
 import com.ycl.platform.wvp.WVPResult;
 import com.ycl.system.Result;
 import com.ycl.system.domain.SysConfig;
+import com.ycl.system.entity.SysDictData;
 import com.ycl.system.mapper.SysConfigMapper;
 import com.ycl.system.mapper.SysDictDataMapper;
 import com.ycl.system.model.LoginUser;
@@ -55,11 +56,6 @@
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
-import javax.imageio.ImageIO;
-import javax.swing.*;
-import java.awt.image.BufferedImage;
-import java.io.File;
-import java.io.IOException;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.util.*;
@@ -782,4 +778,19 @@
         }
         return Result.ok().data(process);
     }
+
+    @Override
+    public Result detailByNo(String workOrderNo) {
+        WorkOrderDetailVO workOrder = baseMapper.detailByNo(workOrderNo);
+        // 鏄惁鎶ュ
+        boolean hasReport = new LambdaQueryChainWrapper<>(reportMapper)
+                .eq(Report::getSerialNumber, workOrder.getSerialNumber())
+                .exists();
+        workOrder.setHasReport(hasReport);
+        // 鏁呴殰绫诲瀷
+        List<SysDictData> errorList = workOrderErrorTypeService.getBaseMapper().getErrorList(workOrder.getWorkOrderNo());
+        List<String> errList = errorList.stream().map(SysDictData::getDictLabel).collect(Collectors.toList());
+        workOrder.setErrorTypeList(errList);
+        return Result.ok().data(workOrder);
+    }
 }
diff --git a/ycl-server/src/main/java/com/ycl/task/ClearRedisTask.java b/ycl-server/src/main/java/com/ycl/task/ClearRedisTask.java
new file mode 100644
index 0000000..37b16cd
--- /dev/null
+++ b/ycl-server/src/main/java/com/ycl/task/ClearRedisTask.java
@@ -0,0 +1,28 @@
+package com.ycl.task;
+
+import constant.RedisConstant;
+import lombok.RequiredArgsConstructor;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Component;
+
+/**
+ * 瀹氭椂娓呯悊redis涓殑鏁版嵁
+ *
+ * @author锛歺p
+ * @date锛�2024/9/10 15:26
+ */
+@RequiredArgsConstructor
+@Component("clearRedisTask")
+public class ClearRedisTask {
+
+    private final RedisTemplate redisTemplate;
+
+    /**
+     * 娓呴櫎鍦ㄧ嚎鐩戞祴鐨剅edis璁$绾挎鏁�
+     *
+     */
+    public void clearOnlineData() {
+        redisTemplate.delete(RedisConstant.ONLINE_KEY);
+    }
+
+}
diff --git a/ycl-server/src/main/java/com/ycl/task/UYTask.java b/ycl-server/src/main/java/com/ycl/task/UYTask.java
index 2c3ae39..c070048 100644
--- a/ycl-server/src/main/java/com/ycl/task/UYTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/UYTask.java
@@ -3,24 +3,33 @@
 import com.alibaba.fastjson2.JSONObject;
 import com.mongodb.client.result.DeleteResult;
 import com.ycl.feign.UYClient;
+import com.ycl.platform.domain.entity.TMonitor;
+import com.ycl.platform.domain.entity.WorkOrder;
 import com.ycl.platform.domain.entity.YwPoint;
 import com.ycl.platform.domain.param.UY.*;
 import com.ycl.platform.domain.result.UY.RecordMetaDSumResult;
 import com.ycl.platform.domain.result.UY.*;
+import com.ycl.platform.domain.vo.OnlineThreadVO;
 import com.ycl.platform.domain.vo.UpdateOnlineVO;
 import com.ycl.platform.mapper.TMonitorMapper;
 import com.ycl.platform.service.UYErrorTypeCheckService;
+import com.ycl.platform.service.WorkOrderService;
 import com.ycl.platform.service.YwPointService;
+import com.ycl.system.domain.SysConfig;
+import com.ycl.system.mapper.SysConfigMapper;
+import com.ycl.thread.OnlineCheckThread;
 import com.ycl.utils.DateUtils;
 import com.ycl.utils.http.HttpUtils;
 import com.ycl.utils.http.SelfHttpUtil;
 import constant.ApiConstants;
+import constant.RedisConstant;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.mongodb.core.MongoTemplate;
 import org.springframework.data.mongodb.core.query.Criteria;
 import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.HttpStatusCode;
 import org.springframework.http.ResponseEntity;
@@ -30,14 +39,10 @@
 import java.io.IOException;
 import java.net.InetAddress;
 import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
-import java.util.concurrent.ArrayBlockingQueue;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
+import java.util.*;
+import java.util.concurrent.*;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 //浼樹簯瀵规帴鏁版嵁浠诲姟
 @Slf4j
@@ -51,6 +56,9 @@
     private final YwPointService pointService;
     private final TMonitorMapper monitorMapper;
     private final SelfHttpUtil selfHttpUtil;
+    private final RedisTemplate redisTemplate;
+    private final WorkOrderService workOrderService;
+    private final SysConfigMapper sysConfigMapper;
 
     @Value("${youYun.tenantId}")
     private String tenantId;
@@ -170,44 +178,51 @@
     /**
      * 鐐逛綅鍦ㄧ嚎妫�娴�
      */
-    public void pointOnline() {
+    public void pointOnline() throws ExecutionException, InterruptedException {
         log.info("寮�濮嬫娴嬬偣浣嶅湪绾�");
-        // 鍏堟煡鍑鸿澶嘔P闆嗗悎
-        List<String> ipList = monitorMapper.getDistinctIP();
-        String prefix = "http://";
-        Date now = new Date();
-        for (String ip : ipList) {
-            executorService.submit(() -> {
-                // 鍏堟娴嬭兘鍚﹁闂ip鐨勭綉椤�
-                ResponseEntity<Object> res = null;
-                UpdateOnlineVO online = new UpdateOnlineVO();
-                online.setIp(ip);
-                if ("127.0.0.1".equals(ip)) {
-                    online.setOnline(Boolean.FALSE);
-                    monitorMapper.updateOnline(online);
-                    return;
-                }
-                try {
-                    res = selfHttpUtil.get(prefix + ip, null, null);
-                    online.setOnline(Objects.nonNull(res) && HttpStatus.OK == res.getStatusCode());
-                } catch (Exception e) {
-                    online.setOnline(Boolean.FALSE);
-                }
-                online.setUpdateTime(now);
-
-                // 濡傛灉http寰楀埌鐨勪笉鍦ㄧ嚎锛岄偅涔堝啀ping涓�涓�
-                boolean reachable = false;
-                if (! online.getOnline()) {
-                    try {
-                        reachable = InetAddress.getByName(ip).isReachable(3000);
-                    } catch (IOException e) {
-                        e.printStackTrace();
-                    }
-                    online.setOnline(reachable);
-                }
-                monitorMapper.updateOnline(online);
-            });
+        Integer times = 2;
+        SysConfig config = new SysConfig();
+        config.setConfigKey("DAY_OF_POINT_OUTLINE_TIMES");
+        SysConfig sysConfig = sysConfigMapper.selectConfig(config);
+        if (Objects.nonNull(sysConfig)) {
+            times = Integer.valueOf(sysConfig.getConfigValue());
+        } else {
+            log.error("璇烽厤缃绾挎鏁帮紝姝ゆ璁剧疆涓洪粯璁ゅ��2");
         }
+        // 鍏堟煡鍑鸿澶嘔P闆嗗悎
+        List<TMonitor> monitorList = monitorMapper.getDistinctIP();
+        List<Future<OnlineThreadVO>> futureList = new ArrayList<>(48);
+        List<OnlineThreadVO> dataList = new ArrayList<>(48);
+        for (TMonitor monitor : monitorList) {
+            OnlineCheckThread thread = new OnlineCheckThread(monitor, redisTemplate, selfHttpUtil, times);
+            Future<OnlineThreadVO> future = executorService.submit(thread);
+            futureList.add(future);
+        }
+        for (Future<OnlineThreadVO> future : futureList) {
+            dataList.add(future.get()); // get鏂规硶浼氶樆濉烇紝鐭ラ亾鎷垮埌缁撴灉鎵嶇户缁墽琛宖or
+        }
+
+        // 鏇存柊point琛ㄧ殑鍦ㄧ嚎鏍囪瘑
+        Date now = new Date();
+        List<UpdateOnlineVO> willUpdateList = dataList.stream().map(item -> {
+            UpdateOnlineVO vo = new UpdateOnlineVO();
+            vo.setOnline(item.getOnline());
+            vo.setIp(item.getIp());
+            vo.setUpdateTime(now);
+            return vo;
+        }).collect(Collectors.toList());
+        monitorMapper.updateOnline(willUpdateList);
+
+        // 宸ュ崟
+        List<WorkOrder> workOrderList = dataList.stream()
+                .filter(item -> Objects.nonNull(item.getWorkOrder()))
+                .map(OnlineThreadVO::getWorkOrder)
+                .collect(Collectors.toList());
+        if (CollectionUtils.isEmpty(workOrderList)) {
+            return;
+        }
+        workOrderService.innerAddWorkOrder(workOrderList);
+        log.info("鐐逛綅鍦ㄧ嚎鐩戞祴瀹屾垚");
     }
 
     //鐐逛綅鍦ㄧ嚎鐜�
diff --git a/ycl-server/src/main/java/com/ycl/thread/OnlineCheckThread.java b/ycl-server/src/main/java/com/ycl/thread/OnlineCheckThread.java
new file mode 100644
index 0000000..a3c762d
--- /dev/null
+++ b/ycl-server/src/main/java/com/ycl/thread/OnlineCheckThread.java
@@ -0,0 +1,129 @@
+package com.ycl.thread;
+
+import com.ycl.platform.domain.entity.TMonitor;
+import com.ycl.platform.domain.entity.WorkOrder;
+import com.ycl.platform.domain.vo.OnlineThreadVO;
+import com.ycl.platform.domain.vo.UpdateOnlineVO;
+import com.ycl.utils.http.SelfHttpUtil;
+import constant.RedisConstant;
+import enumeration.ErrorType;
+import enumeration.general.WorkOrderStatusEnum;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+
+import java.io.IOException;
+import java.net.InetAddress;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+import java.util.concurrent.Callable;
+
+/**
+ * @author锛歺p
+ * @date锛�2024/9/10 11:43
+ */
+@Slf4j
+public class OnlineCheckThread implements Callable<OnlineThreadVO> {
+
+    private TMonitor monitor;
+
+    private RedisTemplate redisTemplate;
+
+    private SelfHttpUtil selfHttpUtil;
+
+    private Integer times;
+
+    public OnlineCheckThread(TMonitor monitor, RedisTemplate redisTemplate, SelfHttpUtil selfHttpUtil, Integer times) {
+        this.monitor = monitor;
+        this.redisTemplate = redisTemplate;
+        this.selfHttpUtil = selfHttpUtil;
+        this.times = times;
+    }
+
+    public Integer getTimes() {
+        return times;
+    }
+
+    public void setTimes(Integer times) {
+        this.times = times;
+    }
+
+    public SelfHttpUtil getSelfHttpUtil() {
+        return selfHttpUtil;
+    }
+
+    public void setSelfHttpUtil(SelfHttpUtil selfHttpUtil) {
+        this.selfHttpUtil = selfHttpUtil;
+    }
+
+    public TMonitor getMonitor() {
+        return monitor;
+    }
+
+    public void setMonitor(TMonitor monitor) {
+        this.monitor = monitor;
+    }
+
+    public RedisTemplate getRedisTemplate() {
+        return redisTemplate;
+    }
+
+    public void setRedisTemplate(RedisTemplate redisTemplate) {
+        this.redisTemplate = redisTemplate;
+    }
+
+    @Override
+    public OnlineThreadVO call() throws Exception {
+        // 鍏堟娴嬭兘鍚﹁闂ip鐨勭綉椤�
+        ResponseEntity<Object> res = null;
+        OnlineThreadVO vo = new OnlineThreadVO();
+        vo.setIp(monitor.getIp());
+        log.info("鐩戞祴IP锛�" + monitor.getIp());
+        String prefix = "http://";
+        if ("127.0.0.1".equals(monitor.getIp())) {
+            vo.setOnline(Boolean.FALSE);
+            return vo;
+        }
+        try {
+            res = selfHttpUtil.get(prefix + monitor.getIp(), null, null);
+            vo.setOnline(Objects.nonNull(res) && HttpStatus.OK == res.getStatusCode());
+        } catch (Exception e) {
+            vo.setOnline(Boolean.FALSE);
+        }
+
+        // 濡傛灉http寰楀埌鐨勪笉鍦ㄧ嚎锛岄偅涔堝啀ping涓�涓�
+        boolean reachable = false;
+        if (!vo.getOnline()) {
+            try {
+                reachable = InetAddress.getByName(monitor.getIp()).isReachable(3000);
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+            vo.setOnline(reachable);
+        }
+        if (!vo.getOnline()) {
+            Integer outLineTimes = (Integer) redisTemplate.opsForHash().get(RedisConstant.ONLINE_KEY, monitor.getIp());
+            if (Objects.isNull(outLineTimes)) {
+                outLineTimes = 1;
+            } else {
+                outLineTimes += 1;
+            }
+            redisTemplate.opsForHash().put(RedisConstant.ONLINE_KEY, monitor.getIp(), outLineTimes);
+            // 涓�澶╁唴鐩戞祴鍒扮绾�1娆′互涓婏紝鐢熸垚宸ュ崟
+            if (outLineTimes >= times) {
+                WorkOrder workOrder = new WorkOrder();
+                workOrder.setSerialNumber(monitor.getSerialNumber());
+                List<String> errList = new ArrayList<>();
+                errList.add(ErrorType.DEVICE_OFFLINE.getValue());
+                workOrder.setErrorTypeList(errList);
+                workOrder.setStatus(WorkOrderStatusEnum.DISTRIBUTED);
+                vo.setWorkOrder(workOrder);
+            }
+        }
+        return vo;
+    }
+
+}
diff --git a/ycl-server/src/main/resources/application-dev.yml b/ycl-server/src/main/resources/application-dev.yml
index cdc2747..137d862 100644
--- a/ycl-server/src/main/resources/application-dev.yml
+++ b/ycl-server/src/main/resources/application-dev.yml
@@ -37,9 +37,9 @@
 spring:
   # 鏁版嵁婧愰厤缃�
   datasource:
-    url: jdbc:mysql://localhost:3306/zgyw?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowMultiQueries=true&allowPublicKeyRetrieval=true
+    url: jdbc:mysql://101.35.247.188:3306/zgyw?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowMultiQueries=true&allowPublicKeyRetrieval=true
     username: root
-    password: 1234
+    password: ycl@202466
     type: com.alibaba.druid.pool.DruidDataSource
     driver-class-name: com.mysql.cj.jdbc.Driver
 
diff --git a/ycl-server/src/main/resources/mapper/zgyw/ReportMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/ReportMapper.xml
index 1b7816b..1877141 100644
--- a/ycl-server/src/main/resources/mapper/zgyw/ReportMapper.xml
+++ b/ycl-server/src/main/resources/mapper/zgyw/ReportMapper.xml
@@ -61,6 +61,34 @@
         ORDER BY r.update_time DESC
     </select>
 
+    <select id="getListByGb"  resultType="com.ycl.platform.domain.vo.ReportVO">
+        SELECT
+           DISTINCT
+            r.id,
+            r.report_materials,
+            r.create_time,
+            r.report_type,
+            r.report_content,
+            r.status,
+            r.serial_number as pointId,
+            r.begin_create_time,
+            r.end_create_time,
+            r.import_batch_number,
+            r.update_time,
+            u.unit_name,
+            p.yw_person_name as peopleName,
+            pt.point_name
+        FROM
+            t_report r
+                INNER JOIN t_report_error_type ret ON ret.report_id = r.id and ret.deleted = 0
+                LEFT JOIN t_yw_unit u ON r.unit_id = u.id and u.deleted = 0
+                LEFT JOIN t_yw_people p ON r.people_id = p.id and p.deleted = 0
+                LEFT JOIN t_yw_point pt ON r.serial_number = pt.serial_number and pt.deleted = 0
+        WHERE
+            r.serial_number = #{gb} AND r.deleted = 0
+        ORDER BY r.update_time DESC
+    </select>
+
     <select id="examineRecord" resultMap="BaseResultMap">
         SELECT
             r.*, u.unit_name, p.yw_person_name as peopleName, pt.point_name, ar.result, ar.result_remark, ar.create_time as auditing_time
diff --git a/ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml
index 3ab225e..5bfc1f0 100644
--- a/ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml
+++ b/ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml
@@ -594,16 +594,22 @@
               serial_number in <foreach collection="gbList" open="(" separator="," close=")" item="no">#{no}</foreach>
     </select>
 
-    <select id="getDistinctIP" resultType="string">
+    <select id="getDistinctIP" resultType="com.ycl.platform.domain.entity.TMonitor">
         SELECT
-            DISTINCT ip
+            DISTINCT ip, serial_number
         FROM
             t_monitor
     </select>
 
     <update id="updateOnline">
-        update t_yw_ponit set online = #{online.online}, update_time = #{online.updateTime} WHERE EXISTS (
-                                                                                                          SELECT 1 FROM t_monitor WHERE ip = #{online.ip} AND t_monitor.serial_number = t_yw_point.serial_number
-                                                                                                      );
+        <foreach collection="onlineList" item="online" separator=";">
+            UPDATE
+                t_yw_point
+            SET
+                online = #{online.online},
+                update_time = #{online.updateTime}
+            WHERE
+                EXISTS (SELECT 1 FROM t_monitor WHERE ip = #{online.ip} AND t_monitor.serial_number = t_yw_point.serial_number)
+        </foreach>
     </update>
 </mapper>
diff --git a/ycl-server/src/main/resources/mapper/zgyw/WorkOrderErrorTypeMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/WorkOrderErrorTypeMapper.xml
index 5505241..ee9d42b 100644
--- a/ycl-server/src/main/resources/mapper/zgyw/WorkOrderErrorTypeMapper.xml
+++ b/ycl-server/src/main/resources/mapper/zgyw/WorkOrderErrorTypeMapper.xml
@@ -97,4 +97,8 @@
         </foreach>
     </insert>
 
+    <select id="getErrorList" resultType="com.ycl.system.entity.SysDictData">
+        SELECT da.dict_value, da.dict_label FROM t_work_order_error_type oer INNER JOIN sys_dict_data da ON oer.error_name = da.dict_value WHERE oer.work_order_no = #{workOrderNo}
+    </select>
+
 </mapper>
diff --git a/ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml
index 4717be2..b65027e 100644
--- a/ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml
+++ b/ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml
@@ -32,7 +32,17 @@
 
     <select id="page" resultMap="BaseResultMap">
         SELECT
-        wo.id,wo.status, wo.work_order_no, wo.serial_number,wo.create_time, wo.unit_id, wo.yw_people_id, wo.yw_handle_time, wo.yw_result, wo.yw_check_result, wo.overtime, wo.deduct,
+        wo.id,wo.status,
+        wo.work_order_no,
+        wo.serial_number,
+        wo.create_time,
+        wo.unit_id,
+        wo.yw_people_id,
+        wo.yw_handle_time,
+        wo.yw_result,
+        wo.yw_check_result,
+        wo.overtime,
+        wo.deduct,
         u.unit_name,
         p.yw_person_name,
         tm.name as source,
@@ -52,14 +62,11 @@
         <if test="query.unitId != null">
             AND wo.unit_id = #{query.unitId}
         </if>
-        <if test="query.workOrderNo != null and query.workOrderNo != ''">
-            AND wo.work_order_no = #{query.workOrderNo}
+        <if test="query.keyword != null and query.keyword != ''">
+            AND (wo.work_order_no like concat('%', #{query.keyword}, '%') or tm.name like concat('%', #{query.keyword}, '%'))
         </if>
         <if test="query.status != null and query.status != ''">
             AND wo.status = #{query.status}
-        </if>
-        <if test="query.status == null or query.status == ''">
-            AND wo.status = 'DISTRIBUTED'
         </if>
         <if test="query.start != null">
             AND wo.yw_handle_time BETWEEN #{query.start} AND #{query.end}
@@ -289,4 +296,24 @@
         <result column="status" property="status" typeHandler="com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler"/>
         <result column="error_names" property="errorType"/>
     </resultMap>
+
+    <select id="detailByNo" resultType="com.ycl.platform.domain.vo.WorkOrderDetailVO">
+        SELECT
+            wo.id,
+            wo.work_order_no,
+            wo.serial_number,
+            dr.create_time as distributeTime,
+            m.name as source,
+            yw.unit_name,
+            yw.unit_contact,
+            yw.unit_contact_phone,
+            wo.overtime,
+            wo.processing_period,
+            wo.status
+        FROM
+          t_work_order wo
+              INNER JOIN t_work_order_distribute_record dr ON wo.work_order_no = dr.work_order_no AND dr.deleted = 0 AND wo.work_order_no = #{workOrderNo}
+              INNER JOIN t_monitor m ON m.serial_number = wo.serial_number
+              LEFT JOIN t_yw_unit yw ON yw.id = wo.unit_id AND yw.deleted = 0
+    </select>
 </mapper>

--
Gitblit v1.8.0