From 8b3793ac8072918f52201f5d54f1cdf49ce02299 Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期一, 21 四月 2025 11:40:48 +0800
Subject: [PATCH] 录像可用率自定义列修改与导出

---
 ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java |  155 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 155 insertions(+), 0 deletions(-)

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 3406bf0..65358a2 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
@@ -1,5 +1,7 @@
 package com.ycl.platform.service.impl;
 
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
@@ -9,7 +11,9 @@
 import com.mongodb.client.MongoCollection;
 import com.mongodb.client.MongoDatabase;
 import com.ycl.platform.domain.entity.*;
+import com.ycl.platform.domain.excel.RecordingAvailabilityExport;
 import com.ycl.platform.domain.excel.TMonitorExp;
+import com.ycl.platform.domain.form.UpdateDynamicValueForm;
 import com.ycl.platform.domain.query.DataCenterQuery;
 import com.ycl.platform.domain.result.HK.*;
 import com.ycl.platform.domain.result.SYS.TMonitorResult;
@@ -17,8 +21,10 @@
 import com.ycl.platform.domain.vo.DataCenter.BigPicUsefulVO;
 import com.ycl.platform.domain.vo.DataCenter.MonitorQualifyResultVO;
 import com.ycl.platform.domain.vo.DataCenter.SnapClockVO;
+import com.ycl.platform.domain.vo.DynamicColumnVO;
 import com.ycl.platform.domain.vo.PointDetailVO;
 import com.ycl.platform.domain.vo.home.HomeFaceVO;
+import com.ycl.platform.mapper.DynamicColumnMapper;
 import com.ycl.platform.mapper.ImageResourceSecurityDetailMapper;
 import com.ycl.platform.mapper.YwPointMapper;
 import com.ycl.platform.service.*;
@@ -31,9 +37,11 @@
 import com.ycl.utils.poi.ExcelUtil;
 import constant.ApiConstants;
 import constant.CheckConstants;
+import constant.RecordingAvailability;
 import enumeration.general.AreaDeptEnum;
 import jakarta.servlet.http.HttpServletResponse;
 import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.CollectionUtils;
 import org.bson.Document;
 import org.springframework.data.domain.Sort;
@@ -44,6 +52,7 @@
 import org.springframework.data.mongodb.core.query.TextCriteria;
 import org.springframework.stereotype.Service;
 
+import java.io.IOException;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.text.DecimalFormat;
@@ -60,6 +69,7 @@
  */
 @Service
 @RequiredArgsConstructor
+@Slf4j
 public class DataCenterServiceImpl implements DataCenterService {
 
     private final MongoTemplate mongoTemplate;
@@ -68,11 +78,139 @@
     private final ICheckIndexVideoService checkIndexVideoService;
     private final ICheckIndexCarService checkIndexCarService;
     private final ICheckIndexFaceService checkIndexFaceService;
+    private final DynamicColumnMapper dynamicColumnMapper;
+
 
 
     private final static String TIME_FIELD = "mongoCreateTime";
 
     private static DecimalFormat DF = new DecimalFormat("#.####");
+
+    @Override
+    public void recordingAvailabilityExport(HttpServletResponse response,DataCenterQuery params) throws IOException {
+        List<String> likeFileds = Arrays.asList("deviceId", "deviceName");
+        Query query = MongoUtil.getQuery(params, "createTime", likeFileds, null);
+        //涓嬫媺妗嗗綍鍍忔儏鍐垫煡璇㈡潯浠�
+        if (params.getOption() != null) {
+            query.addCriteria(Criteria.where("recordStatus").is(params.getOption()));
+        }
+        List<RecordMetaDSumResult> resultList = mongoTemplate.find(query, RecordMetaDSumResult.class);
+        List<DynamicColumnVO> dynamicColumnVOList = dynamicColumnMapper.getDynamicColumnByTableName("uy_record_meta_d_sum");
+        //缈昏瘧琛屾斂鍖哄煙
+        resultList.forEach(item -> {
+            String areaCode = item.getArealayername().substring(0, 6);
+            AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromCode(areaCode);
+            if (areaDeptEnum != null) item.setArealayername(areaDeptEnum.getName());
+        });
+        Map<String,List<DynamicColumnVO>> groupByRefStringIdMap = dynamicColumnVOList.stream().collect(Collectors.groupingBy(DynamicColumnVO::getRefStringId));
+        //鎻愰偅瀹跺浐瀹氳〃澶�
+        LinkedHashSet<String> headers = new LinkedHashSet<>();
+        headers.add(RecordingAvailability.arealayername);
+        headers.add(RecordingAvailability.arealayerno);
+        headers.add(RecordingAvailability.createTime);
+        headers.add(RecordingAvailability.deviceId);
+        headers.add(RecordingAvailability.missDuration);
+        headers.add(RecordingAvailability.platId);
+        headers.add(RecordingAvailability.recordDuration);
+        headers.add(RecordingAvailability.recordStatusText);
+        headers.add(RecordingAvailability.statTime);
+
+        List<String> headersList = new LinkedList<>();
+        List<String> dynamicsHeaders = dynamicColumnMapper.getHeader("uy_record_meta_d_sum");
+
+        //娣诲姞鍔ㄦ�佽〃澶�
+        if (!org.springframework.util.CollectionUtils.isEmpty(dynamicsHeaders)) {
+            //浣跨敤閾捐〃淇濊瘉鍚庣画琛ュ厖鏁版嵁鏃惰幏鍙栨暟鎹『搴忎竴鑷�
+            headersList.addAll(dynamicsHeaders);
+            headers.addAll(headersList);
+        }
+        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+        SimpleDateFormat dateFormat2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+        List<List<Object>> data = new ArrayList<>();
+        for (RecordMetaDSumResult result : resultList){
+            List<Object> row = new ArrayList<>();
+            row.add(result.getArealayername());
+            row.add(result.getArealayerno());
+            row.add(dateFormat2.format(result.getCreateTime()));
+            row.add(result.getDeviceId());
+            row.add(result.getMissDuration());
+            row.add(result.getPlatId());
+            row.add(result.getRecordDuration());
+            row.add(result.getRecordStatusText());
+            row.add(dateFormat2.format(result.getCreateTime()));
+            //娣诲姞鍔ㄦ�佸垪鏁版嵁
+            for (String header : headersList){
+                boolean flag = false;
+                List<DynamicColumnVO> columnVOS = groupByRefStringIdMap.get(result.getId());
+                if (!CollectionUtils.isEmpty(columnVOS)) {
+                    for (DynamicColumnVO columnVO : columnVOS) {
+                        if (header.equals(columnVO.getLabelValue())) {
+                            row.add(columnVO.getColumnValue());
+                            flag = true;
+                        }
+                    }
+                }
+                //娌℃壘鍒扮敤绌轰覆鍗犱綅
+                if (!flag) row.add("");
+            }
+            data.add(row);
+        }
+        List<List<String>> headList = new ArrayList<>();
+        for (String header : headers) {
+            headList.add(Collections.singletonList(header));
+        }
+        EasyExcel.write(response.getOutputStream())
+                .head(headList) // 璁剧疆琛ㄥご
+                .sheet("褰曞儚鍙敤鐜�") // 璁剧疆sheet鍚嶇О
+                .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
+                .doWrite(data); // 鍐欏叆鏁版嵁
+    }
+
+    @Override
+    public void pointOnlineExport(HttpServletResponse response,DataCenterQuery query) throws IOException  {
+
+    }
+
+    @Override
+    public Result updateDynamicValue(UpdateDynamicValueForm form) {
+        List<DynamicColumnVO> list = form.getDynamicColumnVOList();
+
+        if (CollectionUtils.isEmpty(list) || StringUtils.isEmpty(form.getId())) {
+            throw new RuntimeException("淇敼鑷畾涔夊垪鐨勪紶鍏ュ�间负null鎴栦紶鍏d涓簄ull");
+        }
+        List<DynamicColumnValue> updateList = new ArrayList<>();
+        List<DynamicColumnValue> addList = new ArrayList<>();
+
+        for (DynamicColumnVO dynamicColumnVO : list){
+            if(dynamicColumnVO.getColumnValue() == null){
+                continue;
+            }
+            DynamicColumnValue dynamicColumnValue = new DynamicColumnValue();
+            dynamicColumnValue.setColumnValue(dynamicColumnVO.getColumnValue());
+            dynamicColumnValue.setDynamicColumnId(dynamicColumnVO.getId());
+            dynamicColumnValue.setRefStringId(form.getId());
+            dynamicColumnValue.setRefId(0);
+            if(dynamicColumnVO.getValueId() == null){
+                addList.add(dynamicColumnValue);
+            }else {
+                dynamicColumnValue.setId(dynamicColumnVO.getValueId());
+                updateList.add(dynamicColumnValue);
+            }
+        }
+        log.error("addList:{}",addList);
+        log.error("updateList:{}",updateList);
+        if (CollectionUtils.isNotEmpty(addList)){
+            dynamicColumnMapper.saveBatch(addList);
+        }
+        if (CollectionUtils.isNotEmpty(updateList)) {
+            dynamicColumnMapper.updateBatch(updateList);
+        }
+        return Result.ok("淇敼鎴愬姛");
+
+
+
+    }
 
     /**
      * 瑙嗛锛氱偣浣嶅湪绾跨巼
@@ -798,6 +936,7 @@
      * @return
      */
     @Override
+
     public Result videoAvailabilityRate(DataCenterQuery params) {
         List<String> likeFileds = Arrays.asList("deviceId", "deviceName");
         Query query = MongoUtil.getQuery(params, "createTime", likeFileds, null);
@@ -808,11 +947,18 @@
         long total = mongoTemplate.count(query, RecordMetaDSumResult.class);
         MongoUtil.setPage(query, params, "createTime");
         List<RecordMetaDSumResult> resultList = mongoTemplate.find(query, RecordMetaDSumResult.class);
+        //鏌ヨ鍔ㄦ�佸垪鏁版嵁
+        //鏌ヨ鍔ㄦ�佸垪鏁版嵁鏇村叿id鏌ヨ
+//        List<DynamicColumnVO> dynamicColumnNames = dynamicColumnMapper.getDynamicColumnByTableName("uy_record_meta_d_sum");
         //缈昏瘧琛屾斂鍖哄煙
         resultList.forEach(item -> {
             String areaCode = item.getArealayername().substring(0, 6);
             AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromCode(areaCode);
             if (areaDeptEnum != null) item.setArealayername(areaDeptEnum.getName());
+
+            List<DynamicColumnVO> list = dynamicColumnMapper.getDynamicColumnByTable("uy_record_meta_d_sum",item.getId());
+            item.setDynamicColumnList(list);
+
         });
         // 缁熻鏁伴噺
         MongoDatabase database = mongoTemplate.getDb();
@@ -859,12 +1005,15 @@
         resultCount.add(0, totalCount + "");
 
         BigDecimal onlineRate = BigDecimal.ZERO;
+//        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"));
         }
         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);
@@ -2973,6 +3122,10 @@
             sampleCount = doc.getInteger("sampleCount");
             expCount = doc.getInteger("expCount");
         }
+
+
+        //鏂版瀯寤鸿仛鍚堟煡璇㈢绾挎椂闂�
+
         List<String> countList = new ArrayList<>();
 
         // 缁熻鏁�
@@ -2995,6 +3148,8 @@
             onlineRate = new BigDecimal(sampleCount-expCount).divide(new BigDecimal(sampleCount), 3,RoundingMode.DOWN).multiply(new BigDecimal("100"));
         }
         countList.add(this.remove0(onlineRate));
+
+
         HashMap<String, Object> map = new HashMap<>();
         map.put("count", countList);
         map.put("list", voList);

--
Gitblit v1.8.0