From 9d0d134447c84abcf34ddfda1f31099af7037c18 Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期四, 24 四月 2025 10:46:56 +0800
Subject: [PATCH] 录像可用率判断方式,海康的接口调整

---
 ycl-server/src/main/java/com/ycl/task/HKTask.java                                 |  404 +++++++++++++++++++++++++++++++++++-----
 ycl-pojo/src/main/java/com/ycl/platform/domain/param/HK/ScoreParam.java           |   17 +
 ycl-server/src/main/java/com/ycl/feign/HKLabelName.java                           |   37 +++
 ycl-server/src/main/java/com/ycl/feign/HKResultLabel.java                         |   23 ++
 ycl-server/src/main/java/com/ycl/feign/HkResultInfo.java                          |   36 +++
 ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java |   42 ++++
 ycl-server/src/main/java/com/ycl/feign/HKClient.java                              |   12 +
 7 files changed, 512 insertions(+), 59 deletions(-)

diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/param/HK/ScoreParam.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/param/HK/ScoreParam.java
index befd0e7..b7a8538 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/param/HK/ScoreParam.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/param/HK/ScoreParam.java
@@ -4,13 +4,16 @@
 
 @Data
 public class ScoreParam extends BaseParam{
-    //yyyy-MM-dd
+    //yyyy-MM-dd 绛� ID 涓虹┖锛岄粯璁ゆ煡璇㈠叏閲忔寚鏍囨垚缁�
     private String startDate;
     private String endDate;
-    //閲嶇偣鐐逛綅鏍囨敞 闈炲繀濉� 1閲嶇偣 0鍏ㄩ噺 榛樿鍏ㄩ噺
-    private Integer focusFlag;
-    //浜鸿劯涓氬姟鏍戠紪鐮�
-    private String faceTree;
-    //杞﹁締涓氬姟鏍戠紪鐮�
-    private String carTree;
+//    //閲嶇偣鐐逛綅鏍囨敞 闈炲繀濉� 1閲嶇偣 0鍏ㄩ噺 榛樿鍏ㄩ噺
+//    private Integer focusFlag;
+//    //浜鸿劯涓氬姟鏍戠紪鐮�
+//    private String faceTree;
+//    //杞﹁締涓氬姟鏍戠紪鐮�
+//    private String carTree;
+
+    //鏍囩id 绛� ID 涓虹┖锛岄粯璁ゆ煡璇㈠叏閲忔寚鏍囨垚缁�
+    private Integer labelId;
 }
diff --git a/ycl-server/src/main/java/com/ycl/feign/HKClient.java b/ycl-server/src/main/java/com/ycl/feign/HKClient.java
index 92b19bf..c741e85 100644
--- a/ycl-server/src/main/java/com/ycl/feign/HKClient.java
+++ b/ycl-server/src/main/java/com/ycl/feign/HKClient.java
@@ -32,6 +32,18 @@
      */
     @GetMapping("/aaoo/api/third/score/get")
     JSONObject getScore(@SpringQueryMap ScoreParam param);
+
+    /**
+     * 鑾峰彇娴峰悍鑰冩牳鎴愮哗鏂�
+     * 鑾峰彇娴峰悍鑰冩牳鎴愮哗
+     * @return 鑰冩牳鎴愮哗
+     */
+    @GetMapping("/aaoo/api/v1/getCheckScore")
+    JSONObject getScoreNew(@SpringQueryMap ScoreParam param);
+
+    @GetMapping("/aaoo/api/v1/getLabel")
+    JSONObject getGetLabel();
+
 //    /**
 //     * 鎸夊尯鍩熺粺璁$粡绾害寮傚父璁惧鎴栧崱鍙�
 //     * 1銆佹牴鎹粍缁囧尯鍩熸瘡10鍒嗛挓姹囨�婚噰闆嗚澶�/鍗″彛缁忕含搴﹀紓甯告暟閲忋��
diff --git a/ycl-server/src/main/java/com/ycl/feign/HKLabelName.java b/ycl-server/src/main/java/com/ycl/feign/HKLabelName.java
new file mode 100644
index 0000000..3f15ae8
--- /dev/null
+++ b/ycl-server/src/main/java/com/ycl/feign/HKLabelName.java
@@ -0,0 +1,37 @@
+package com.ycl.feign;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonValue;
+import lombok.Data;
+import lombok.Getter;
+
+@Getter
+public enum HKLabelName {
+    faceButtStability2023("faceButtStability2023","浜鸿劯瑙嗗浘搴撳鎺ョǔ瀹氭��"),
+    faceDelay("faceDelay","璁惧鎶撴媿浜鸿劯鏁版嵁涓婁紶鍙婃椂鎬�"),
+    faceClockAccuracy("faceClockAccuracy","浜鸿劯璁惧鎶撴媿鍥剧墖鏃堕挓鍑嗙‘鎬�"),
+    faceOnlineRate("faceOnlineRate","浜鸿劯鐐逛綅鍦ㄧ嚎鐜�"),
+    faceCapturedPicturesEligibility("faceCapturedPicturesEligibility","浜鸿劯璁惧鎶撴媿鍥剧墖鍚堟牸鎬�"),
+    faceBigPictureAccess("faceBigPictureAccess","浜鸿劯鍗″彛璁惧鎶撴媿鏁版嵁澶у浘鍙敤鎬�"),
+
+    carDelay("carDelay","杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁涓婁紶鍙婃椂鎬�"),
+    carOnlineRate2023("carOnlineRate2023","杞﹁締鐐逛綅鍦ㄧ嚎鐜�"),
+    carButtStability2023("carButtStability2023","杞﹁締瑙嗗浘搴撳鎺ョǔ瀹氭��"),
+    carBigPictureAccess("carBigPictureAccess","杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁澶у浘鍙敤鎬�"),
+    carCorrectRate("carCorrectRate","杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁鍑嗙‘鎬�"),
+    carClockAccuracy("carClockAccuracy","杞﹁締鍗″彛璁惧鏃堕挓鍑嗙‘鎬�"),
+    carQualifiedRate("carQualifiedRate","杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁瀹屾暣鎬�"),
+    carUrlOkRate("carUrlOkRate","杞﹁締鍗″彛璁惧url鍙敤鎬�");
+
+
+    @EnumValue // 鏍囨槑璇ュ瓧娈靛瓨鍏ユ暟鎹簱
+    @JsonValue // 鏍囨槑鍦ㄨ浆JSON鏃朵娇鐢ㄨ瀛楁锛屽嵆鍝嶅簲鏃�
+    private final String code;
+
+    private final String desc;
+
+    HKLabelName(String code, String desc) {
+        this.code = code;
+        this.desc = desc;
+    }
+}
diff --git a/ycl-server/src/main/java/com/ycl/feign/HKResultLabel.java b/ycl-server/src/main/java/com/ycl/feign/HKResultLabel.java
new file mode 100644
index 0000000..e1a4c1a
--- /dev/null
+++ b/ycl-server/src/main/java/com/ycl/feign/HKResultLabel.java
@@ -0,0 +1,23 @@
+package com.ycl.feign;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class HKResultLabel {
+    //鏍囩 ID
+    private Integer id;
+    //鏍囩鍚嶇О
+    private String labelName;
+    //鏄惁鏄粯璁ゆ爣绛� 1鏄� 0鍚�
+    private Integer isDefault;
+    //鏀规爣绛惧叧鑱旂殑鑰冩牳鎸囨爣椤�
+    private List<String> relatedIndex;
+
+    //鍏宠仈鎸囨爣鐨勫ぇ绫�
+    private List<String> relatedIndexCategory;
+
+    //鏄惁鑷姩鑰冩牳 1涓鸿嚜鍔� 0涓烘墜鍔�
+    private Integer isAuto;
+}
diff --git a/ycl-server/src/main/java/com/ycl/feign/HkResultInfo.java b/ycl-server/src/main/java/com/ycl/feign/HkResultInfo.java
new file mode 100644
index 0000000..7504b27
--- /dev/null
+++ b/ycl-server/src/main/java/com/ycl/feign/HkResultInfo.java
@@ -0,0 +1,36 @@
+package com.ycl.feign;
+
+import lombok.Data;
+
+@Data
+public class HkResultInfo {
+
+    //鎸囨爣id
+    private String indexCode;
+    //鍖哄幙缂栫爜
+    private String areaCode;
+    //鍖哄幙鍚嶇О
+    private String areaName;
+
+    //鎴愮哗
+    private Double score;
+//    //寮傚父鏁�
+//    private Integer errorNum;
+//    //鎬绘暟
+//    private Integer total;
+//    //姝g‘鐜�
+//    private String qualifiedRate;
+    //鎸囨爣鍚嶇О
+    private String checkCodeName;
+    //鎵规id
+    private Integer batchId;
+
+
+
+//    private String scoreRuleDesc;
+
+
+
+
+
+}
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java
index 9d9f588..0be079c 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java
@@ -23,6 +23,7 @@
 import com.ycl.platform.mapper.YwPointMapper;
 import com.ycl.platform.service.*;
 import com.ycl.system.Result;
+import com.ycl.system.service.ISysConfigService;
 import com.ycl.utils.DateUtils;
 import com.ycl.utils.MongoUtil;
 import com.ycl.utils.StringUtils;
@@ -1259,6 +1260,7 @@
         return Result.ok().data(map).total(total);
     }
 
+    private final ISysConfigService configService;
     /**
      * 瑙嗛锛氬綍鍍忓彲鐢ㄧ巼
      *
@@ -1268,6 +1270,17 @@
     @Override
 
     public Result videoAvailabilityRate(DataCenterQuery params) {
+        //鑾峰彇绯荤粺鍙傛暟
+        String dictLabel =  configService.selectConfigByKey("recording_min_time");
+
+        double recordingMinTime;
+        try {
+            recordingMinTime = Double.parseDouble(dictLabel) / 60; // 濡傛灉 dictLabel 鏄互灏忔椂涓哄崟浣嶏紝鍒欐棤闇�闄や互 60
+        } catch (Exception e) {
+            log.error("閰嶇疆鐨勫垹闄ゆ椂闂磋寖鍥存牸寮忎笉姝g‘: {}", dictLabel, e);
+            recordingMinTime = 12.0; // 榛樿 12 灏忔椂锛堜互灏忔椂涓哄崟浣嶏級
+        }
+
         List<String> likeFileds = Arrays.asList("deviceId", "deviceName");
         Query query = MongoUtil.getQuery(params, "createTime", likeFileds, null);
         //涓嬫媺妗嗗綍鍍忔儏鍐垫煡璇㈡潯浠�
@@ -1315,6 +1328,32 @@
             }
             return uniqueDeviceIdCount + "";
         }).collect(Collectors.toList());
+
+        //璁$畻褰曞儚鍙敤鐜�
+        MongoDatabase databaes2 = mongoTemplate.getDb();
+        MongoCollection<Document> collection2 = databaes2.getCollection("uy_record_meta_d_sum");
+
+        double finalRecordingMinTime = recordingMinTime;
+
+        List<Document> documentList = new ArrayList<>(3);
+        setTag(params, documentList);
+        Document recording = new Document("recordDuration",new Document("$gte", finalRecordingMinTime));
+        documentList.add(recording);
+        Document filter = new Document("$and", documentList);
+        // 鏋勫缓鑱氬悎绠¢亾
+        List<Document> pipeline = Arrays.asList(
+                new Document("$match", filter),
+                // $group 鍘婚噸
+                new Document("$group", new Document("_id", "$deviceId")),
+                new Document("$count", "uniqueDeviceIds")
+        );
+        AggregateIterable<Document> result = collection2.aggregate(pipeline);
+        Integer uniqueDeviceIdCount = 0;
+        for (Document doc : result) {
+            uniqueDeviceIdCount = doc.getInteger("uniqueDeviceIds");
+            break; // 涓嶉渶瑕佺户缁亶鍘嗭紝鍥犱负 $count 鍙細浜х敓涓�涓粨鏋�
+        }
+        log.error("鎵撳嵃锛歿}",uniqueDeviceIdCount);
 //        List<CheckIndexVideo> videoList = new LambdaQueryChainWrapper<>(checkIndexVideoService.getBaseMapper())
 //                .select(CheckIndexVideo::getVideoAvailable)
 //                .eq(params.getDataType().equals(1), CheckIndexVideo::getExamineTag, CheckConstants.Examine_Tag_Province)
@@ -1338,12 +1377,11 @@
 //        1锛氬畬鏁� 0锛氶棿姝� -1锛氬紓甯� |
         if (!StringUtils.isEmpty(resultCount.get(0)) && !"0".equals(resultCount.get(0))) {
             //resultCount.get(0)
-            onlineRate = new BigDecimal(resultCount.get(1)).divide(new BigDecimal(resultCount.get(0)), 3,RoundingMode.DOWN).multiply(new BigDecimal("100"));
+            onlineRate = new BigDecimal(resultCount.get(1)).divide(new BigDecimal(uniqueDeviceIdCount), 3,RoundingMode.DOWN).multiply(new BigDecimal("100"));
         }
         resultCount.add(this.remove0(onlineRate));
 
         HashMap<String, Object> map = new HashMap<>();
-        log.error("resultCount:{}",resultCount.get(3));
         map.put("count", resultCount);
         map.put("list", resultList);
         return Result.ok().data(map).total(total);
diff --git a/ycl-server/src/main/java/com/ycl/task/HKTask.java b/ycl-server/src/main/java/com/ycl/task/HKTask.java
index c6cad22..a5ecce0 100644
--- a/ycl-server/src/main/java/com/ycl/task/HKTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/HKTask.java
@@ -3,9 +3,7 @@
 import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.mongodb.client.result.DeleteResult;
-import com.ycl.feign.HKClient;
-import com.ycl.feign.HkApiUtil;
-import com.ycl.feign.UYClient;
+import com.ycl.feign.*;
 import com.ycl.platform.domain.entity.CheckIndexCar;
 import com.ycl.platform.domain.entity.CheckIndexFace;
 import com.ycl.platform.domain.entity.TMonitor;
@@ -27,9 +25,11 @@
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.cloud.client.loadbalancer.LoadBalancerRequestFactory;
 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.http.converter.StringHttpMessageConverter;
 import org.springframework.stereotype.Component;
 import org.springframework.util.CollectionUtils;
 
@@ -78,6 +78,10 @@
     private ICheckIndexFaceService faceService;
     @Autowired
     private CheckIndexFaceMapper faceMapper;
+    @Autowired
+    private StringHttpMessageConverter stringHttpMessageConverter;
+    @Autowired
+    private LoadBalancerRequestFactory loadBalancerRequestFactory;
 
     //杞﹁締璁惧鍏ㄦ鎸囨爣鐩戞祴缁撴灉
     public void vehicleDeviceInspectionTask() {
@@ -491,15 +495,135 @@
     }
 
     //鑰冩牳鎴愮哗
-    public void HkScoreTask() {
+//    public void HkScoreTask() {
+//        log.info("寮�濮嬫墽琛屾捣搴疯�冩牳鎴愮哗鏁版嵁");
+//        //鍑嗗鏂板鎴栦慨鏀圭殑鏁版嵁
+//        List<CheckIndexCar> cars = new ArrayList<>();
+//        List<CheckIndexFace> faces = new ArrayList<>();
+//        // 鏌ヨ鏄惁index琛ㄥ凡缁忓瓨鍦ㄤ粖鏃ユ暟鎹�
+//        List<CheckIndexFace> checkIndexFaceList = faceMapper.selectToday(utils.DateUtils.getDate());
+//        List<CheckIndexCar> checkIndexCarList = carMapper.selectToday(utils.DateUtils.getDate());
+//
+//        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+//        // 鑾峰彇褰撳墠鏃堕棿鐨凜alendar瀹炰緥
+//        Calendar calendar = Calendar.getInstance();
+//        // 璁剧疆鏃堕棿涓哄墠涓�澶�
+//        calendar.add(Calendar.DATE, -1);
+//        // 鑾峰彇鍓嶄竴澶╃殑Date瀵硅薄
+//        Date yesterday = calendar.getTime();
+//        //鍏堣姹傚叏閲忔暟鎹�
+//        ScoreParam param = new ScoreParam();
+//        param.setStartDate(format.format(yesterday));
+//        param.setEndDate(format.format(yesterday));
+////        param.setFocusFlag(ApiConstants.HK_FOCUS_FLAG_ALL);
+////        param.setCarTree(carCode);
+////        param.setFaceTree(faceCode);
+//        JSONObject scoreJson = hkClient.getScore(param);
+//        if (scoreJson != null) {
+//            String code = scoreJson.getString("code");
+//            if (ApiConstants.HKSuccessCode.equals(code)) {
+//                List<HKScoreResult> data = scoreJson.getList("data", HKScoreResult.class);
+//
+//                //鏍规嵁鏁版嵁杞崲涓篿ndex瀵硅薄
+//                data.forEach(score -> {
+//                    CheckIndexCar car = new CheckIndexCar();
+//                    CheckIndexFace face = new CheckIndexFace();
+//                    score2Index(score, car, face);
+//                    car.setExamineTag(CheckConstants.Examine_Tag_County);
+//                    face.setExamineTag(CheckConstants.Examine_Tag_County);
+//                    Optional<CheckIndexCar> carFirst = checkIndexCarList.stream()
+//                            .filter(index -> CheckConstants.Examine_Tag_County.equals(index.getExamineTag()) && car.getDeptId().equals(index.getDeptId()))
+//                            .findFirst();
+//                    Optional<CheckIndexFace> faceFirst = checkIndexFaceList.stream()
+//                            .filter(index -> CheckConstants.Examine_Tag_County.equals(index.getExamineTag()) && face.getDeptId().equals(index.getDeptId()))
+//                            .findFirst();
+//                    if (carFirst.isPresent()) {
+//                        car.setId(carFirst.get().getId());
+//                    }
+//                    if (faceFirst.isPresent()) {
+//                        face.setId(faceFirst.get().getId());
+//                    }
+//                    cars.add(car);
+//                    faces.add(face);
+//                });
+//            }
+//        }
+//
+//        //鍏堣姹傜渷鍘呮暟鎹�
+//        ScoreParam provinceParam = new ScoreParam();
+//        provinceParam.setStartDate(format.format(yesterday));
+//        provinceParam.setEndDate(format.format(yesterday));
+////        provinceParam.setFocusFlag(ApiConstants.HK_FOCUS_FLAG_ALL);
+////        provinceParam.setCarTree(carProvinceCode);
+////        provinceParam.setFaceTree(faceProvinceCode);
+//        JSONObject scoreProvinceJson = hkClient.getScore(provinceParam);
+//        if (scoreProvinceJson != null) {
+//            String code = scoreProvinceJson.getString("code");
+//            if (ApiConstants.HKSuccessCode.equals(code)) {
+//                List<HKScoreResult> data = scoreProvinceJson.getList("data", HKScoreResult.class);
+//
+//                //鏍规嵁鏁版嵁杞崲涓篿ndex瀵硅薄
+//                data.forEach(score -> {
+//                    CheckIndexCar car = new CheckIndexCar();
+//                    CheckIndexFace face = new CheckIndexFace();
+//                    score2Index(score, car, face);
+//                    car.setExamineTag(CheckConstants.Examine_Tag_Province);
+//                    face.setExamineTag(CheckConstants.Examine_Tag_Province);
+//                    Optional<CheckIndexCar> carFirst = checkIndexCarList.stream()
+//                            .filter(index -> CheckConstants.Examine_Tag_Province.equals(index.getExamineTag()) && car.getDeptId().equals(index.getDeptId()))
+//                            .findFirst();
+//                    Optional<CheckIndexFace> faceFirst = checkIndexFaceList.stream()
+//                            .filter(index -> CheckConstants.Examine_Tag_Province.equals(index.getExamineTag()) && face.getDeptId().equals(index.getDeptId()))
+//                            .findFirst();
+//                    if (carFirst.isPresent()) {
+//                        car.setId(carFirst.get().getId());
+//                    }
+//                    if (faceFirst.isPresent()) {
+//                        face.setId(faceFirst.get().getId());
+//                    }
+//                    cars.add(car);
+//                    faces.add(face);
+//                });
+//            }
+//        }
+//        //瀛樻斁鎴愮哗鍒癿ysql锛屽鏋滃瓨鍦ㄥ垯鏇挎崲涓嶅瓨鍦ㄥ氨鏂板銆�
+//        if (!CollectionUtils.isEmpty(cars)) carService.saveOrUpdateBatch(cars);
+//        if (!CollectionUtils.isEmpty(faces)) faceService.saveOrUpdateBatch(faces);
+//        log.info("缁撴潫娴峰悍鑰冩牳鎴愮哗鏁版嵁");
+//    }
+
+    public void HkScoreTask(){
         log.info("寮�濮嬫墽琛屾捣搴疯�冩牳鎴愮哗鏁版嵁");
+        //鍏堟墽琛岃幏寰楁爣绛� 鍥犱负鍏ㄩ噺榛樿浼犲弬涓簄ull锛屼絾鏄渷鍘呮暟鎹渶瑕佽幏寰楁爣绛�
+        JSONObject labelJson = hkClient.getGetLabel();
+        Integer faceLabelId = null;
+        Integer carLabelId = null;
+        if (labelJson != null) {
+            String code = labelJson.getString("code");
+            if (ApiConstants.HKSuccessCode.equals(code)){
+                //鑾峰緱label鑰冩牳鏍囩瀵硅薄
+                List<HKResultLabel> hkResultLabels = labelJson.getList("data",HKResultLabel.class);
+                for (HKResultLabel label : hkResultLabels) {
+                    if ("鐪佸巺浜鸿劯".equals(label.getLabelName())){
+                        faceLabelId = label.getId();
+                    }else if ("鐪佸巺杞﹁締".equals(label.getLabelName())){
+                        carLabelId = label.getId();
+                    }
+                }
+                log.error("鎵撳嵃hkResultLabels锛歿}",hkResultLabels);
+
+            }
+        }
+        if (faceLabelId == null || carLabelId == null){
+            log.error("娴峰悍鑾峰彇鐪佸巺鑰冩牳鏍囩涓簄ull");
+        }
+
         //鍑嗗鏂板鎴栦慨鏀圭殑鏁版嵁
         List<CheckIndexCar> cars = new ArrayList<>();
         List<CheckIndexFace> faces = new ArrayList<>();
         // 鏌ヨ鏄惁index琛ㄥ凡缁忓瓨鍦ㄤ粖鏃ユ暟鎹�
         List<CheckIndexFace> checkIndexFaceList = faceMapper.selectToday(utils.DateUtils.getDate());
         List<CheckIndexCar> checkIndexCarList = carMapper.selectToday(utils.DateUtils.getDate());
-
         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
         // 鑾峰彇褰撳墠鏃堕棿鐨凜alendar瀹炰緥
         Calendar calendar = Calendar.getInstance();
@@ -507,23 +631,51 @@
         calendar.add(Calendar.DATE, -1);
         // 鑾峰彇鍓嶄竴澶╃殑Date瀵硅薄
         Date yesterday = calendar.getTime();
-        //鍏堣姹傚叏閲忔暟鎹�
+
         ScoreParam param = new ScoreParam();
-        param.setStartDate(format.format(yesterday));
-        param.setEndDate(format.format(yesterday));
-        param.setFocusFlag(ApiConstants.HK_FOCUS_FLAG_ALL);
-        param.setCarTree(carCode);
-        param.setFaceTree(faceCode);
-        JSONObject scoreJson = hkClient.getScore(param);
+//        param.setStartDate(format.format(yesterday));
+//        param.setEndDate(format.format(yesterday));
+//        param.setLabelId();
+
+        //------------榛樿鍙傛暟涓簄ull璇锋眰鍏ㄩ噺鏁版嵁
+        JSONObject scoreJson = hkClient.getScoreNew(param);
+        log.error("鍏ㄩ噺鏁版嵁");
         if (scoreJson != null) {
+            List<HkResultInfo> allInfo = new ArrayList<>();
             String code = scoreJson.getString("code");
-            if (ApiConstants.HKSuccessCode.equals(code)) {
-                List<HKScoreResult> data = scoreJson.getList("data", HKScoreResult.class);
-                //鏍规嵁鏁版嵁杞崲涓篿ndex瀵硅薄
-                data.forEach(score -> {
+            if (ApiConstants.HKSuccessCode.equals(code)){
+                JSONObject data = scoreJson.getJSONObject("data");
+
+                Map<Integer,JSONObject> map = new HashMap<>();
+                //鑾峰緱data 涓� batchId 鐨勬壒娆d瀵硅薄 鏀惧叆map涓�
+                for (String batchIdKey :data.keySet() ) {
+                    JSONObject batch = data.getJSONObject(batchIdKey);
+                    //浠ユ壒娆d涓簁ey 鏀惧叆 JSONObject瀵硅薄
+                    map.put(Integer.valueOf(batchIdKey),batch);
+                    //鎵规id 涓� 鍚勫尯淇℃伅闆嗗悎
+                    log.error("鎵撳嵃鍑篸ata鍐呭涓壒娆d锛歿}锛屼互鍙婂搴旂殑缁撴灉info:{}",batchIdKey,batch);
+                }
+                //鑾峰緱鏈�澶х殑閿��
+                Optional<Integer> maxKey = map.keySet().stream()
+                        .max(Integer::compareTo);
+                if (maxKey.isPresent()) {
+                    //鑾峰彇鏈�澶х殑key 鎺ュ彛杩斿洖鍐呭涓渶鏂扮殑鎵规
+                    Integer id = maxKey.get();
+                    //杩欎竴灞備负鑾峰緱 data -> 涓� 鎵规鏁扮粍涓� -> 鍖哄煙code鏁扮粍鐨刱ey
+                    for (String areaCodeKey : map.get(id).keySet()) {
+                        //瀛樻斁鏈�鏂版壒娆$殑鍐呭鍒癮llInfo闆嗗悎涓�
+                        allInfo.addAll(map.get(id).getList(areaCodeKey,HkResultInfo.class));
+                    }
+                }
+                //瀵筧llInfo杩涜鍒嗙粍 鍒嗙粍鎸夊尯鍩焛d
+                Map<String, List<HkResultInfo>> groupedByAreaName = allInfo.stream()
+                        .collect(Collectors.groupingBy(HkResultInfo::getAreaCode));
+                for (Map.Entry<String, List<HkResultInfo>> entry : groupedByAreaName.entrySet()) {
+                    log.error("鏈�鏂版壒娆″唴鏁版嵁:{}",groupedByAreaName.get(entry.getKey()).size());
+                    log.error("鏈�鏂版壒娆″唴size:{}",groupedByAreaName.get(entry.getKey()));
                     CheckIndexCar car = new CheckIndexCar();
                     CheckIndexFace face = new CheckIndexFace();
-                    score2Index(score, car, face);
+                    score3Index(groupedByAreaName.get(entry.getKey()), car, face,entry.getKey());
                     car.setExamineTag(CheckConstants.Examine_Tag_County);
                     face.setExamineTag(CheckConstants.Examine_Tag_County);
                     Optional<CheckIndexCar> carFirst = checkIndexCarList.stream()
@@ -540,47 +692,128 @@
                     }
                     cars.add(car);
                     faces.add(face);
-                });
+                }
+                //璇锋眰鐪佸巺鏁版嵁
+
+
+            }else {
+                log.error("璋冪敤娴峰悍鍏ㄩ噺鏁版嵁api澶辫触");
             }
+
         }
 
-        //鍏堣姹傜渷鍘呮暟鎹�
-        ScoreParam provinceParam = new ScoreParam();
-        provinceParam.setStartDate(format.format(yesterday));
-        provinceParam.setEndDate(format.format(yesterday));
-        provinceParam.setFocusFlag(ApiConstants.HK_FOCUS_FLAG_ALL);
-        provinceParam.setCarTree(carProvinceCode);
-        provinceParam.setFaceTree(faceProvinceCode);
-        JSONObject scoreProvinceJson = hkClient.getScore(provinceParam);
-        if (scoreProvinceJson != null) {
-            String code = scoreProvinceJson.getString("code");
-            if (ApiConstants.HKSuccessCode.equals(code)) {
-                List<HKScoreResult> data = scoreProvinceJson.getList("data", HKScoreResult.class);
+        //------------鑾峰彇鐪佸巺鏁版嵁
+        List<HkResultInfo> provincialList = new ArrayList<>();
 
-                //鏍规嵁鏁版嵁杞崲涓篿ndex瀵硅薄
-                data.forEach(score -> {
-                    CheckIndexCar car = new CheckIndexCar();
-                    CheckIndexFace face = new CheckIndexFace();
-                    score2Index(score, car, face);
-                    car.setExamineTag(CheckConstants.Examine_Tag_Province);
-                    face.setExamineTag(CheckConstants.Examine_Tag_Province);
-                    Optional<CheckIndexCar> carFirst = checkIndexCarList.stream()
-                            .filter(index -> CheckConstants.Examine_Tag_Province.equals(index.getExamineTag()) && car.getDeptId().equals(index.getDeptId()))
-                            .findFirst();
-                    Optional<CheckIndexFace> faceFirst = checkIndexFaceList.stream()
-                            .filter(index -> CheckConstants.Examine_Tag_Province.equals(index.getExamineTag()) && face.getDeptId().equals(index.getDeptId()))
-                            .findFirst();
-                    if (carFirst.isPresent()) {
-                        car.setId(carFirst.get().getId());
+        //鑾峰彇鐪佸巺浜鸿劯鏁版嵁
+        if (faceLabelId != null){
+            log.error("faceLabelId:{}",faceLabelId);
+            param.setLabelId(faceLabelId);
+            JSONObject faceJson = hkClient.getScoreNew(param);
+            log.error("鐪佸巺浜鸿劯鏁版嵁");
+            if (faceJson != null) {
+                String code = scoreJson.getString("code");
+                if (ApiConstants.HKSuccessCode.equals(code)){
+                    JSONObject data = scoreJson.getJSONObject("data");
+
+                    Map<Integer,JSONObject> map = new HashMap<>();
+                    //鑾峰緱data 涓� batchId 鐨勬壒娆d瀵硅薄 鏀惧叆map涓�
+                    for (String batchIdKey :data.keySet() ) {
+                        JSONObject batch = data.getJSONObject(batchIdKey);
+                        //浠ユ壒娆d涓簁ey 鏀惧叆 JSONObject瀵硅薄
+                        map.put(Integer.valueOf(batchIdKey),batch);
+                        //鎵规id 涓� 鍚勫尯淇℃伅闆嗗悎
+                        log.error("鎵撳嵃鍑虹渷鍘呬汉鑴竏ata鍐呭涓壒娆d锛歿}锛屼互鍙婂搴旂殑缁撴灉info:{}",batchIdKey,batch);
                     }
-                    if (faceFirst.isPresent()) {
-                        face.setId(faceFirst.get().getId());
+                    //鑾峰緱鏈�澶х殑閿��
+                    Optional<Integer> maxKey = map.keySet().stream()
+                            .max(Integer::compareTo);
+                    if (maxKey.isPresent()) {
+                        //鑾峰彇鏈�澶х殑key 鎺ュ彛杩斿洖鍐呭涓渶鏂扮殑鎵规
+                        Integer id = maxKey.get();
+                        //杩欎竴灞備负鑾峰緱 data -> 涓� 鎵规鏁扮粍涓� -> 鍖哄煙code鏁扮粍鐨刱ey
+                        for (String areaCodeKey : map.get(id).keySet()) {
+                            //瀛樻斁鏈�鏂版壒娆$殑鍐呭鍒癮llInfo闆嗗悎涓�
+                            provincialList.addAll(map.get(id).getList(areaCodeKey,HkResultInfo.class));
+                        }
                     }
-                    cars.add(car);
-                    faces.add(face);
-                });
+
+                }else {
+                    log.error("璋冪敤娴峰悍鐪佸巺浜鸿劯鏁版嵁api澶辫触");
+                }
+
             }
+
+
+        }else {
+            log.error("faceLabelId:涓虹┖涓嶆墽琛岃幏寰楃渷鍘呮暟鎹�");
         }
+        //鑾峰彇鐪佸巺杞﹁締鏁版嵁
+        if (carLabelId != null){
+            log.error("carLabelId:{}",carLabelId);
+            param.setLabelId(carLabelId);
+            JSONObject carJson = hkClient.getScoreNew(param);
+            log.error("鐪佸巺杞﹁締鏁版嵁");
+            if (carJson != null) {
+                String code = scoreJson.getString("code");
+                if (ApiConstants.HKSuccessCode.equals(code)){
+                    JSONObject data = scoreJson.getJSONObject("data");
+
+                    Map<Integer,JSONObject> map = new HashMap<>();
+                    //鑾峰緱data 涓� batchId 鐨勬壒娆d瀵硅薄 鏀惧叆map涓�
+                    for (String batchIdKey :data.keySet() ) {
+                        JSONObject batch = data.getJSONObject(batchIdKey);
+                        //浠ユ壒娆d涓簁ey 鏀惧叆 JSONObject瀵硅薄
+                        map.put(Integer.valueOf(batchIdKey),batch);
+                        //鎵规id 涓� 鍚勫尯淇℃伅闆嗗悎
+                        log.error("鎵撳嵃鍑虹渷鍘呮垚杈哾ata鍐呭涓壒娆d锛歿}锛屼互鍙婂搴旂殑缁撴灉info:{}",batchIdKey,batch);
+                    }
+                    //鑾峰緱鏈�澶х殑閿��
+                    Optional<Integer> maxKey = map.keySet().stream()
+                            .max(Integer::compareTo);
+                    if (maxKey.isPresent()) {
+                        //鑾峰彇鏈�澶х殑key 鎺ュ彛杩斿洖鍐呭涓渶鏂扮殑鎵规
+                        Integer id = maxKey.get();
+                        //杩欎竴灞備负鑾峰緱 data -> 涓� 鎵规鏁扮粍涓� -> 鍖哄煙code鏁扮粍鐨刱ey
+                        for (String areaCodeKey : map.get(id).keySet()) {
+                            //瀛樻斁鏈�鏂版壒娆$殑鍐呭鍒癮llInfo闆嗗悎涓�
+                            provincialList.addAll(map.get(id).getList(areaCodeKey,HkResultInfo.class));
+                        }
+                    }
+                }else {
+                    log.error("璋冪敤娴峰悍鐪佸巺杞﹁締鏁版嵁api澶辫触");
+                }
+            }
+        }else {
+            log.error("carLabelId:涓虹┖涓嶆墽琛岃幏寰楃渷鍘呮暟鎹�");
+        }
+        //鑾峰彇瀹屾暟鎹紑濮嬪垎缁�
+        Map<String,List<HkResultInfo>> provincialGroupedByAreaName = provincialList.stream()
+                .collect(Collectors.groupingBy(HkResultInfo::getAreaCode));
+        for (Map.Entry<String, List<HkResultInfo>> entry : provincialGroupedByAreaName.entrySet()) {
+            log.error("鏈�鏂版壒娆″唴鐪佸巺鏁版嵁:{}",provincialGroupedByAreaName.get(entry.getKey()).size());
+            log.error("鏈�鏂版壒娆″唴鐪佸巺size:{}",provincialGroupedByAreaName.get(entry.getKey()));
+            CheckIndexCar car = new CheckIndexCar();
+            CheckIndexFace face = new CheckIndexFace();
+            score3Index(provincialGroupedByAreaName.get(entry.getKey()), car, face,entry.getKey());
+            car.setExamineTag(CheckConstants.Examine_Tag_Province);
+            face.setExamineTag(CheckConstants.Examine_Tag_Province);
+            Optional<CheckIndexCar> carFirst = checkIndexCarList.stream()
+                    .filter(index -> CheckConstants.Examine_Tag_Province.equals(index.getExamineTag()) && car.getDeptId().equals(index.getDeptId()))
+                    .findFirst();
+            Optional<CheckIndexFace> faceFirst = checkIndexFaceList.stream()
+                    .filter(index -> CheckConstants.Examine_Tag_Province.equals(index.getExamineTag()) && face.getDeptId().equals(index.getDeptId()))
+                    .findFirst();
+            if (carFirst.isPresent()) {
+                car.setId(carFirst.get().getId());
+            }
+            if (faceFirst.isPresent()) {
+                face.setId(faceFirst.get().getId());
+            }
+            cars.add(car);
+            faces.add(face);
+        }
+
         //瀛樻斁鎴愮哗鍒癿ysql锛屽鏋滃瓨鍦ㄥ垯鏇挎崲涓嶅瓨鍦ㄥ氨鏂板銆�
         if (!CollectionUtils.isEmpty(cars)) carService.saveOrUpdateBatch(cars);
         if (!CollectionUtils.isEmpty(faces)) faceService.saveOrUpdateBatch(faces);
@@ -621,6 +854,77 @@
         face.setFacePictureAvailability(new BigDecimal(score.getDownCrossPictureQualityFaceScoreString() == null ? "1" : score.getDownCrossPictureQualityFaceScoreString()));
     }
 
+    private void score3Index(List<HkResultInfo> score, CheckIndexCar car, CheckIndexFace face,String areaCode){
+        car.setCreateTime(new Date());
+        car.setPublish(PublishType.PUBLISHED.getCode());
+        face.setCreateTime(new Date());
+        face.setPublish(PublishType.PUBLISHED.getCode());
+        car.setDeptId(Long.parseLong(AreaDeptEnum.fromCode(areaCode).getDeptId() + ""));
+        face.setDeptId(Long.parseLong(AreaDeptEnum.fromCode(areaCode).getDeptId() + ""));
+
+        for(HkResultInfo hkResultInfo : score){
+            if (HKLabelName.carDelay.getCode().equals(hkResultInfo.getIndexCode())){
+                //杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁涓婁紶鍙婃椂鎬�
+                car.setVehicleUploadTimeliness(new BigDecimal(hkResultInfo.getScore() == null ? "1" : String.valueOf(hkResultInfo.getScore())));
+            }else if (HKLabelName.carOnlineRate2023.getCode().equals(hkResultInfo.getIndexCode())){
+                //杞﹁締鐐逛綅鍦ㄧ嚎鐜�
+                car.setSiteOnline(new BigDecimal(hkResultInfo.getScore() == null ? "1" : String.valueOf(hkResultInfo.getScore())));
+            }else if (HKLabelName.carButtStability2023.getCode().equals(hkResultInfo.getIndexCode())){
+                //杞﹁締瑙嗗浘搴撳鎺ョǔ瀹氭��
+                car.setViewConnectStability(new BigDecimal(hkResultInfo.getScore() == null ? "1" : String.valueOf(hkResultInfo.getScore())));
+            }else if (HKLabelName.carQualifiedRate.getCode().equals(hkResultInfo.getIndexCode())){
+                //杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁瀹屾暣鎬�
+                car.setVehicleCaptureIntegrity(new BigDecimal(hkResultInfo.getScore() == null ? "1" : String.valueOf(hkResultInfo.getScore())));
+            }else if (HKLabelName.carCorrectRate.getCode().equals(hkResultInfo.getIndexCode())){
+                //杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁鍑嗙‘鎬�
+                car.setVehicleCaptureAccuracy(new BigDecimal(hkResultInfo.getScore() == null ? "1" : String.valueOf(hkResultInfo.getScore())));
+            }else if (HKLabelName.carClockAccuracy.getCode().equals(hkResultInfo.getIndexCode())){
+                //杞﹁締鍗″彛璁惧鏃堕挓鍑嗙‘鎬�
+                car.setVehicleTimingAccuracy(new BigDecimal(hkResultInfo.getScore() == null ? "1" : String.valueOf(hkResultInfo.getScore())));
+            }else if (HKLabelName.carBigPictureAccess.getCode().equals(hkResultInfo.getIndexCode())){
+                //杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁澶у浘鍙敤鎬�
+                car.setVehiclePictureAvailability(new BigDecimal(hkResultInfo.getScore() == null ? "1" : String.valueOf(hkResultInfo.getScore())));
+            }else if (HKLabelName.carUrlOkRate.getCode().equals(hkResultInfo.getIndexCode())){
+                //杞﹁締鍗″彛璁惧url鍙敤鎬�
+                car.setVehicleUrlAvailability(new BigDecimal(hkResultInfo.getScore() == null ? "1" : String.valueOf(hkResultInfo.getScore())));
+            }else if(HKLabelName.faceButtStability2023.getCode().equals(hkResultInfo.getIndexCode())){
+                //浜鸿劯瑙嗗浘搴撳鎺ョǔ瀹氭��
+                face.setViewConnectStability(new BigDecimal(hkResultInfo.getScore() == null ? "1" : String.valueOf(hkResultInfo.getScore())));
+            }else if (HKLabelName.faceOnlineRate.getCode().equals(hkResultInfo.getIndexCode())){
+                //浜鸿劯鐐逛綅鍦ㄧ嚎鐜�
+                face.setSiteOnline(new BigDecimal(hkResultInfo.getScore() == null ? "1" : String.valueOf(hkResultInfo.getScore())));
+            }else if (HKLabelName.faceCapturedPicturesEligibility.getCode().equals(hkResultInfo.getIndexCode())){
+                //浜鸿劯璁惧鎶撴媿鍥剧墖鍚堟牸鎬�
+                face.setFacePictureQualification(new BigDecimal(hkResultInfo.getScore() == null ? "1" : String.valueOf(hkResultInfo.getScore())));
+            }else if (HKLabelName.faceClockAccuracy.getCode().equals(hkResultInfo.getIndexCode())){
+                //浜鸿劯璁惧鎶撴媿鍥剧墖鏃堕挓鍑嗙‘鎬�
+                face.setFaceTimingAccuracy(new BigDecimal(hkResultInfo.getScore() == null ? "1" : String.valueOf(hkResultInfo.getScore())));
+            }else if (HKLabelName.faceDelay.getCode().equals(hkResultInfo.getIndexCode())){
+                //璁惧鎶撴媿浜鸿劯鏁版嵁涓婁紶鍙婃椂鎬�
+                face.setFaceUploadTimeliness(new BigDecimal(hkResultInfo.getScore() == null ? "1" : String.valueOf(hkResultInfo.getScore())));
+            }else if (HKLabelName.faceBigPictureAccess.getCode().equals(hkResultInfo.getIndexCode())){
+                //浜鸿劯鍗″彛璁惧鎶撴媿鏁版嵁澶у浘鍙敤鎬�
+                face.setFacePictureAvailability(new BigDecimal(hkResultInfo.getScore() == null ? "1" : String.valueOf(hkResultInfo.getScore())));
+            }
+        }
+        //TODO:娌℃壘鍒拌�冩牳椤� 浜鸿劯鍗″彛淇℃伅閲囬泦鍑嗙‘鐜�
+        face.setFaceInformationCollectionAccuracy(new BigDecimal("1"));
+        //TODO:娌℃壘鍒拌�冩牳椤� 璁惧鐩綍涓�鑷寸巼
+        face.setDeviceDirectoryConsistent(new BigDecimal("1"));
+        //TODO:娌℃壘鍒拌�冩牳椤� 杞﹁締鍗″彛淇℃伅閲囬泦鍑嗙‘鐜�
+        car.setVehicleInformationCollectionAccuracy(new BigDecimal("1"));
+        //TODO:娌℃壘鍒拌�冩牳椤� 鑱旂綉鍗″彛璁惧鐩綍涓�鑷寸巼
+        car.setDeviceDirectoryConsistent(new BigDecimal("1"));
+
+
+
+    }
+
+
+
+
+
+
     //瑙f瀽鏁版嵁
     private <T> List<T> getDataList(JSONObject jsonObject, Class<T> resultClass, String message) {
         if (jsonObject != null && ApiConstants.HKSuccessCode.equals(jsonObject.getString("code"))) {

--
Gitblit v1.8.0