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

---
 ycl-pojo/src/main/java/com/ycl/platform/domain/form/UpdateDynamicValueForm.java       |   15 +
 ycl-server/src/main/java/com/ycl/platform/controller/DynamicColumnController.java     |   38 ++++
 ycl-server/src/main/resources/mapper/zgyw/DynamicColumnMapper.xml                     |   30 +++
 ycl-server/src/main/java/com/ycl/platform/mapper/DynamicColumnMapper.java             |    2 
 ycl-server/src/main/java/com/ycl/platform/service/impl/DynamicColumnServiceImpl.java  |   55 ++++++
 ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java     |  155 +++++++++++++++++++
 ycl-server/src/main/java/com/ycl/platform/service/DynamicColumnService.java           |   16 ++
 ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/RecordMetaDSumResult.java    |    8 
 ycl-pojo/src/main/java/com/ycl/platform/domain/excel/RecordingAvailabilityExport.java |   54 ++++++
 ycl-pojo/src/main/java/com/ycl/platform/domain/entity/DynamicColumnValue.java         |    3 
 ycl-common/src/main/java/constant/RecordingAvailability.java                          |   22 ++
 ycl-pojo/src/main/java/com/ycl/platform/domain/vo/DynamicColumnVO.java                |    4 
 ycl-server/src/main/java/com/ycl/platform/controller/DataCenterController.java        |   24 +++
 ycl-server/src/main/java/com/ycl/platform/service/DataCenterService.java              |   10 +
 14 files changed, 430 insertions(+), 6 deletions(-)

diff --git a/ycl-common/src/main/java/constant/RecordingAvailability.java b/ycl-common/src/main/java/constant/RecordingAvailability.java
new file mode 100644
index 0000000..1dbfd35
--- /dev/null
+++ b/ycl-common/src/main/java/constant/RecordingAvailability.java
@@ -0,0 +1,22 @@
+package constant;
+
+public class RecordingAvailability {
+    public final static String arealayername = "琛屾斂鍖哄煙";
+
+    public final static String arealayerno = "琛屾斂鍖哄煙ID";
+
+    public final static String createTime = "鍒涘缓鏃堕棿";
+
+    public final static String deviceId = "鎽勫儚鏈篒D";
+
+    public final static String missDuration = "缂哄け鏃堕暱";
+
+    public final static String platId = "鍥芥爣骞冲彴ID";
+
+    public final static String recordDuration = "褰曞儚鏃堕暱";
+
+    public final static String recordStatusText = "褰曞儚瀹屾暣鐘舵��";
+
+    public final static String statTime = "缁熻鏃堕棿";
+
+}
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/DynamicColumnValue.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/DynamicColumnValue.java
index 3f68e65..faab540 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/DynamicColumnValue.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/DynamicColumnValue.java
@@ -35,7 +35,8 @@
     /** 鍏宠仈鐨勬暟鎹甶d */
     private Integer refId;
 
-
+    @TableField("ref_String_id")
+    private String refStringId;
 
 
 }
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/excel/RecordingAvailabilityExport.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/excel/RecordingAvailabilityExport.java
new file mode 100644
index 0000000..7477ad7
--- /dev/null
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/excel/RecordingAvailabilityExport.java
@@ -0,0 +1,54 @@
+package com.ycl.platform.domain.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.format.DateTimeFormat;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ycl.platform.domain.vo.DynamicColumnVO;
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+public class RecordingAvailabilityExport {
+    /** 琛屾斂鍖哄煙*/
+    @ColumnWidth(100)
+    @ExcelProperty("琛屾斂鍖哄煙")
+    private String arealayername;
+
+    /** 琛屾斂鍖哄煙id*/
+    @ColumnWidth(100)
+    @ExcelProperty("琛屾斂鍖哄煙ID")
+    private String arealayerno;
+
+    @ColumnWidth(100)
+    @DateTimeFormat("yyyy-MM-dd")
+    @ExcelProperty("鍒涘缓鏃堕棿")
+    private Date createTime;
+
+    @ColumnWidth(100)
+    @ExcelProperty("鎽勫儚鏈篒D")
+    private String deviceId;
+
+    @ColumnWidth(100)
+    @ExcelProperty("缂哄け鏃堕暱")
+    private Double missDuration;
+
+    @ColumnWidth(100)
+    @ExcelProperty("鍥芥爣骞冲彴ID")
+    private String platId;
+
+    @ColumnWidth(100)
+    @ExcelProperty("褰曞儚鏃堕暱")
+    private Double recordDuration;
+
+    @ColumnWidth(100)
+    @ExcelProperty("褰曞儚瀹屾暣鐘舵��")
+    private String recordStatusText;
+
+    @ColumnWidth(100)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @ExcelProperty("缁熻鏃堕棿")
+    private Date statTime;
+}
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/form/UpdateDynamicValueForm.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/form/UpdateDynamicValueForm.java
new file mode 100644
index 0000000..db470f5
--- /dev/null
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/form/UpdateDynamicValueForm.java
@@ -0,0 +1,15 @@
+package com.ycl.platform.domain.form;
+
+import com.ycl.platform.domain.vo.DynamicColumnVO;
+import jakarta.validation.constraints.NotBlank;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class UpdateDynamicValueForm {
+    @NotBlank(message = "id涓嶈兘涓虹┖")
+    private String id;
+    List<DynamicColumnVO> dynamicColumnVOList;
+
+}
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/RecordMetaDSumResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/RecordMetaDSumResult.java
index f005ce1..0b06b83 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/RecordMetaDSumResult.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/RecordMetaDSumResult.java
@@ -2,6 +2,7 @@
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ycl.platform.domain.result.BaseResult;
+import com.ycl.platform.domain.vo.DynamicColumnVO;
 import lombok.Data;
 import org.springframework.data.mongodb.core.index.CompoundIndex;
 import org.springframework.data.mongodb.core.index.CompoundIndexes;
@@ -10,6 +11,7 @@
 import org.springframework.data.mongodb.core.mapping.Document;
 
 import java.util.Date;
+import java.util.List;
 import java.util.Objects;
 
 /**
@@ -81,7 +83,6 @@
      * 褰曞儚瀹屾暣鐘舵�侊紝1锛氬畬鏁达紝0锛氶棿姝囷紝-1锛氬紓甯�
      */
     private String recordStatusText;
-
     /**
      * 缁熻鏃堕棿锛屾牸寮忎负鏃ユ湡瀛楃涓�
      */
@@ -90,6 +91,11 @@
     private Date statTime;
 
     /**
+     * 鍔ㄦ�佸垪
+     */
+    private List<DynamicColumnVO> dynamicColumnList;
+
+    /**
      * 绉熸埛ID
      */
     private String tenantId;
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/DynamicColumnVO.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/DynamicColumnVO.java
index b40dcaa..847e3fa 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/DynamicColumnVO.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/DynamicColumnVO.java
@@ -27,6 +27,10 @@
     private String columnValue;
     /** 鍏宠仈鏁版嵁鐨刬d */
     private Integer refId;
+
+    /** 鍏宠仈鏁版嵁鐨刬d String绫诲瀷*/
+    private String refStringId;
+
     /** value琛ㄧ殑id */
     private Integer valueId;
     public static DynamicColumnVO getVoByEntity(@NonNull DynamicColumn entity, DynamicColumnVO vo) {
diff --git a/ycl-server/src/main/java/com/ycl/platform/controller/DataCenterController.java b/ycl-server/src/main/java/com/ycl/platform/controller/DataCenterController.java
index e1cd357..d7527f6 100644
--- a/ycl-server/src/main/java/com/ycl/platform/controller/DataCenterController.java
+++ b/ycl-server/src/main/java/com/ycl/platform/controller/DataCenterController.java
@@ -1,6 +1,7 @@
 package com.ycl.platform.controller;
 
 import annotation.Log;
+import com.ycl.platform.domain.form.UpdateDynamicValueForm;
 import com.ycl.platform.domain.query.DataCenterQuery;
 import com.ycl.platform.service.DataCenterService;
 import com.ycl.platform.service.ITMonitorService;
@@ -12,6 +13,8 @@
 import lombok.RequiredArgsConstructor;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
+
+import java.io.IOException;
 
 /**
  * 鏁版嵁涓績鎺ュ彛
@@ -147,6 +150,12 @@
         return dataCenterService.deptVideoAvailabilityRate(query);
     }
 
+    @PutMapping("/videoMinistryVideoAvailable/updateDynamicValue")
+    public Result updateDynamicValue(@RequestBody UpdateDynamicValueForm form){
+        return dataCenterService.updateDynamicValue(form);
+    }
+
+
     /**
      * 瑙嗛锛氬綍鍍忓彲鐢ㄧ巼
      *
@@ -182,6 +191,21 @@
         query.setTime();
         return dataCenterService.videoImportantPointLabelingAccuracy(query);
     }
+
+
+    @PostMapping("/recordingAvailability/export")
+    public void recordingAvailabilityExport(HttpServletResponse response,DataCenterQuery query) throws IOException {
+        query.setTime();
+        dataCenterService.recordingAvailabilityExport(response, query);
+    }
+
+    @PostMapping("/pointOnline/export")
+    public void pointOnlineExport(HttpServletResponse response,DataCenterQuery query) throws IOException {
+        query.setTime();
+         dataCenterService.pointOnlineExport(response,query);
+    }
+
+
     /**
      * 瑙嗛锛氬鍑洪噸鐐圭偣浣嶆爣娉ㄦ纭巼
      *
diff --git a/ycl-server/src/main/java/com/ycl/platform/controller/DynamicColumnController.java b/ycl-server/src/main/java/com/ycl/platform/controller/DynamicColumnController.java
index fe2b0be..6ff60ac 100644
--- a/ycl-server/src/main/java/com/ycl/platform/controller/DynamicColumnController.java
+++ b/ycl-server/src/main/java/com/ycl/platform/controller/DynamicColumnController.java
@@ -2,8 +2,8 @@
 
 import com.ycl.system.Result;
 import com.ycl.system.domain.group.Add;
-import com.ycl.system.domain.group.Update;
 import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.security.access.prepost.PreAuthorize;
 import lombok.RequiredArgsConstructor;
@@ -12,7 +12,6 @@
 import io.swagger.annotations.ApiOperation;
 import com.ycl.platform.service.DynamicColumnService;
 import com.ycl.platform.domain.form.DynamicColumnForm;
-import com.ycl.platform.domain.query.DynamicColumnQuery;
 import org.springframework.web.bind.annotation.*;
 
 /**
@@ -54,4 +53,39 @@
     public Result list() {
         return dynamicColumnService.all();
     }
+
+    @GetMapping("/listByTableName")
+    @ApiOperation(value = "鍒楄〃", notes = "鍒楄〃")
+    public Result listByTableName(@RequestParam @NotNull(message = "璺緞鍚嶄笉鑳戒负绌�")String pathName) {
+        String tableName = getTableNameByPathNane(pathName);
+        return dynamicColumnService.allByTableName(tableName);
+    }
+
+    @PostMapping("/addByTableName")
+    @ApiOperation(value = "娣诲姞", notes = "娣诲姞")
+    @PreAuthorize("@ss.hasPermi('dynamicColumn:add')")
+    public Result addByTableName(@RequestParam @NotNull(message = "璺緞鍚嶄笉鑳戒负绌�")String pathName,@RequestBody @Validated(Add.class) DynamicColumnForm form){
+        String tableName = getTableNameByPathNane(pathName);
+        return dynamicColumnService.addByTableName(tableName,form);
+    }
+
+    private final static String COLUMN_NAME_VIDEO = "uy_record_meta_d_sum";
+    private final static String COLUMN_NAME_POINT = "";
+
+    @PutMapping("/updateByTableName")
+    @ApiOperation(value = "淇敼", notes = "淇敼")
+    public Result updateByTableName(@RequestParam @NotNull(message = "璺緞鍚嶄笉鑳戒负绌�")String pathName, @RequestBody @NotEmpty(message = "鏁版嵁涓虹┖锛屾棤娉曚繚瀛�") List<DynamicColumnForm> columnList){
+        String tableName = getTableNameByPathNane(pathName);
+        return dynamicColumnService.updateByTableName(tableName,columnList);
+    }
+
+    private String getTableNameByPathNane(String pathName) {
+        String tableName = "";
+        if ("褰曞儚鍙敤鐜�".equals(pathName)){
+            tableName = COLUMN_NAME_VIDEO;
+        }else if("鐐逛綅鍦ㄧ嚎鐜�".equals(pathName)){
+            tableName = COLUMN_NAME_POINT;
+        }
+        return tableName;
+    }
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/mapper/DynamicColumnMapper.java b/ycl-server/src/main/java/com/ycl/platform/mapper/DynamicColumnMapper.java
index f4afe13..a5c3ac4 100644
--- a/ycl-server/src/main/java/com/ycl/platform/mapper/DynamicColumnMapper.java
+++ b/ycl-server/src/main/java/com/ycl/platform/mapper/DynamicColumnMapper.java
@@ -47,5 +47,7 @@
 
     void deleteBatch(@Param("deleteList") List<Integer> deleteList);
 
+    List<DynamicColumnVO> getDynamicColumnByTable(@Param("tableName")String tableName,@Param("id")String id);
+    List<DynamicColumnVO> getDynamicColumnByTableName(@Param("tableName")String tableName);
 
 }
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/DataCenterService.java b/ycl-server/src/main/java/com/ycl/platform/service/DataCenterService.java
index bad47b9..0bde438 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/DataCenterService.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/DataCenterService.java
@@ -1,13 +1,17 @@
 package com.ycl.platform.service;
 
+import com.ycl.platform.domain.entity.DynamicColumn;
+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.UY.MonitorQualifyResult;
 import com.ycl.platform.domain.result.UY.OneMachineFileResult;
 import com.ycl.platform.domain.result.UY.RecordMetaDSumResult;
+import com.ycl.platform.domain.vo.DynamicColumnVO;
 import com.ycl.system.Result;
 import jakarta.servlet.http.HttpServletResponse;
 
+import java.io.IOException;
 import java.util.List;
 
 /**
@@ -18,6 +22,12 @@
  */
 public interface DataCenterService {
 
+    void recordingAvailabilityExport(HttpServletResponse response,DataCenterQuery query) throws IOException;
+
+    void pointOnlineExport(HttpServletResponse response,DataCenterQuery query) throws IOException ;
+
+    Result updateDynamicValue(UpdateDynamicValueForm form);
+
     /**
      * 瑙嗛锛氱偣浣嶅湪绾跨巼
      *
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/DynamicColumnService.java b/ycl-server/src/main/java/com/ycl/platform/service/DynamicColumnService.java
index e42a08a..c4db5a8 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/DynamicColumnService.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/DynamicColumnService.java
@@ -23,11 +23,25 @@
     Result add(DynamicColumnForm form);
 
     /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    Result addByTableName(String table,DynamicColumnForm form);
+
+    /**
      * 淇敼
      *
      * @param columnList
      */
     Result update(List<DynamicColumnForm> columnList);
+    /**
+     * 淇敼
+     *
+     * @param columnList
+     */
+    Result updateByTableName(String tableName,List<DynamicColumnForm> columnList);
+
 
     /**
      * id鍒犻櫎
@@ -41,4 +55,6 @@
      * @return
      */
     Result all();
+
+    Result allByTableName(String tableName);
 }
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);
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/DynamicColumnServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/DynamicColumnServiceImpl.java
index b8bca5c..82e0c4d 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/impl/DynamicColumnServiceImpl.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/DynamicColumnServiceImpl.java
@@ -33,6 +33,8 @@
 
     private final static String TABLE_NAME = "t_yw_point";
 
+
+
     /**
      * 娣诲姞
      * @param form
@@ -55,6 +57,23 @@
         return Result.ok("娣诲姞鎴愬姛");
     }
 
+    @Override
+    public Result addByTableName(String tableName,DynamicColumnForm form) {
+        Long num = new LambdaQueryChainWrapper<>(baseMapper)
+                .eq(DynamicColumn::getLabelValue, form.getLabelValue())
+                .eq(DynamicColumn::getTableName, tableName)
+                .count();
+        if (num > 0) {
+            throw new RuntimeException("鍒楀悕绉颁笉鑳介噸澶�");
+        }
+        DynamicColumn entity = DynamicColumnForm.getEntityByForm(form, null);
+        entity.setPropName(IdUtils.randomNO(new Date()));
+        entity.setCreateTime(new Date());
+        entity.setTableName(tableName);
+        baseMapper.insert(entity);
+        return Result.ok("娣诲姞鎴愬姛");
+    }
+
     /**
      * 淇敼
      *
@@ -68,6 +87,28 @@
             } else {
                 Long num = new LambdaQueryChainWrapper<>(baseMapper)
                         .eq(DynamicColumn::getTableName, TABLE_NAME)
+                        .eq(DynamicColumn::getLabelValue, column.getLabelValue())
+                        .ne(DynamicColumn::getId, column.getId())
+                        .count();
+                if (num == 0) {
+                    new LambdaUpdateChainWrapper<>(baseMapper)
+                            .eq(DynamicColumn::getId, column.getId())
+                            .set(DynamicColumn::getLabelValue, column.getLabelValue())
+                            .update();
+                }
+            }
+        });
+        return Result.ok("淇濆瓨鎴愬姛");
+    }
+
+    @Override
+    public Result updateByTableName(String tableName, List<DynamicColumnForm> columnList) {
+        columnList.stream().filter(item -> StringUtils.hasText(item.getLabelValue())).forEach(column -> {
+            if (Objects.isNull(column.getId())) {
+                this.addByTableName(tableName,column);
+            } else {
+                Long num = new LambdaQueryChainWrapper<>(baseMapper)
+                        .eq(DynamicColumn::getTableName, tableName)
                         .eq(DynamicColumn::getLabelValue, column.getLabelValue())
                         .ne(DynamicColumn::getId, column.getId())
                         .count();
@@ -102,6 +143,20 @@
     public Result all() {
         List<DynamicColumn> entities = new LambdaQueryChainWrapper<>(baseMapper)
                 .orderByAsc(DynamicColumn::getCreateTime)
+                .eq(DynamicColumn::getTableName,"t_yw_point")
+                .list();
+        List<DynamicColumnVO> vos = entities.stream()
+                .map(entity -> DynamicColumnVO.getVoByEntity(entity, null))
+                .collect(Collectors.toList());
+        return Result.ok().data(vos);
+    }
+
+
+    @Override
+    public Result allByTableName(String tableName) {
+        List<DynamicColumn> entities = new LambdaQueryChainWrapper<>(baseMapper)
+                .eq(DynamicColumn::getTableName,tableName)
+                .orderByAsc(DynamicColumn::getCreateTime)
                 .list();
         List<DynamicColumnVO> vos = entities.stream()
                 .map(entity -> DynamicColumnVO.getVoByEntity(entity, null))
diff --git a/ycl-server/src/main/resources/mapper/zgyw/DynamicColumnMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/DynamicColumnMapper.xml
index 3a5bce8..2f1d912 100644
--- a/ycl-server/src/main/resources/mapper/zgyw/DynamicColumnMapper.xml
+++ b/ycl-server/src/main/resources/mapper/zgyw/DynamicColumnMapper.xml
@@ -60,9 +60,9 @@
     </select>
 
     <insert id="saveBatch">
-        insert into t_dynamic_column_value (dynamic_column_id,column_value,ref_id) values
+        insert into t_dynamic_column_value (dynamic_column_id,column_value,ref_id,ref_string_id) values
         <foreach collection="insertList" item="item" separator=",">
-            (#{item.dynamicColumnId},#{item.columnValue},#{item.refId})
+            (#{item.dynamicColumnId},#{item.columnValue},#{item.refId},#{item.refStringId})
         </foreach>
     </insert>
     <update id="updateBatch">
@@ -91,4 +91,30 @@
             #{id}
         </foreach>
     </select>
+
+    <resultMap id="dynamicColumnMap" type="com.ycl.platform.domain.vo.DynamicColumnVO">
+        <result column="prop_name" property="propName"/>
+        <result column="label_value" property="labelValue"/>
+        <result column="column_value" property="columnValue"/>
+        <result column="ref_string_id" property="refStringId"/>
+        <result column="value_id" property="valueId"/>
+    </resultMap>
+
+    <select id="getDynamicColumnByTable" resultMap="dynamicColumnMap">
+        SELECT
+        *,
+        dcv.id as value_id
+        FROM
+        t_dynamic_column dc
+        LEFT JOIN t_dynamic_column_value dcv ON dc.id = dcv.dynamic_column_id and dcv.ref_String_id = #{id} WHERE dc.table_name = #{tableName}
+
+    </select>
+
+    <select id="getDynamicColumnByTableName" resultMap="dynamicColumnMap">
+        select *,dcv.id as value_id
+        from  t_dynamic_column_value dcv
+        left join t_dynamic_column dc
+        on dc.id = dcv.dynamic_column_id
+        where dc.table_name =#{tableName}
+    </select>
 </mapper>

--
Gitblit v1.8.0