Przeglądaj źródła

修改同步操作日志

bihuisong 1 miesiąc temu
rodzic
commit
d0d9bfe1f7

+ 4 - 5
monitor_ui/src/views/dahuaLog/index.vue

@@ -466,17 +466,16 @@ export default {
         that.open = false
         return that.$modal.msgWarning('请选择您要同步的时间范围')
       }
+      if (that.operateTypeValue == null || that.operateTypeValue == '' || that.operateTypeValue == undefined) {
+        return that.$modal.msgWarning('请选择您要同步的操作类型')
+      }
       let params = {
         startTime: that.dateRange[0],
         endTime: that.dateRange[1],
         operateTypeValue: that.operateTypeValue
       }
       getAllDataLog(params).then(response => {
-        if (response.code == 200) {
-          that.$modal.msgSuccess('同步成功')
-        } else {
-          that.$modal.msgWarning('同步失败')
-        }
+        that.$modal.msgSuccess('同步成功')
         that.loading = false
         that.getList()
         that.getDeviceNameList()

+ 0 - 254
src/main/java/com/sooka/sponest/monitor/dahua/controller/DahuaOperateLogWhiteTask.java

@@ -1,254 +0,0 @@
-package com.sooka.sponest.monitor.dahua.controller;
-
-import com.alibaba.fastjson.JSONObject;
-import com.ruoyi.common.core.domain.R;
-import com.ruoyi.system.api.domain.SysDept;
-import com.sooka.sponest.monitor.dahua.domain.CenternonitorTDahuaOperateLog;
-import com.sooka.sponest.monitor.dahua.domain.CenternonitorTDahuaOperateLogUrl;
-import com.sooka.sponest.monitor.dahua.mapper.CenternonitorTDahuaOperateLogUrlMapper;
-import com.sooka.sponest.monitor.dahua.service.ICenternonitorTDahuaOperateLogService;
-import com.sooka.sponest.monitor.dahua.utils.HttpTestUtils;
-import com.sooka.sponest.monitor.remoteapi.service.center.system.RemoteService;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.commons.lang3.ObjectUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpResponse;
-import org.apache.http.client.HttpClient;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.conn.ssl.NoopHostnameVerifier;
-import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
-import org.apache.http.entity.ContentType;
-import org.apache.http.entity.StringEntity;
-import org.apache.http.impl.client.HttpClients;
-import org.apache.http.impl.client.LaxRedirectStrategy;
-import org.apache.http.ssl.SSLContextBuilder;
-import org.apache.http.util.EntityUtils;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.annotation.Resource;
-import javax.net.ssl.HostnameVerifier;
-import javax.net.ssl.SSLContext;
-import java.text.SimpleDateFormat;
-import java.util.*;
-
-import static org.springframework.web.bind.annotation.RequestMethod.POST;
-
-/**
- * 对接大华云台日志定时任务Controller
- *
- * "12": "视频",
- * "13": "云台控制",
- *
- * @author ruoyi
- * @date 2023-12-09
- */
-@Slf4j
-@Component
-@RestController
-@RequestMapping("/dahuaWhiteOperateLog")
-public class DahuaOperateLogWhiteTask {
-
-    @Resource
-    private ICenternonitorTDahuaOperateLogService centernonitorTDahuaOperateLogService;
-    @Resource
-    private CenternonitorTDahuaOperateLogUrlMapper centernonitorTDahuaOperateLogUrlMapper;
-    @Resource
-    private RemoteService remoteService;
-    private final List<String> operateTypeWhiteList = Arrays.asList("12", "13");
-
-
-    @Value("${sooka.dahua_interface_server.loginIp}")
-    private String loginIp;
-    @Value("${sooka.dahua_interface_server.loginPort}")
-    private String loginPort;
-    @Value("${sooka.dahua_interface_server.userName}")
-    private String userName;
-    @Value("${sooka.dahua_interface_server.userPwd}")
-    private String userPwd;
-    private final String url = "/SlsService/opreationlog/list";
-//    private String loginIp = "10.53.0.35";
-//    private String loginPort = "7901";
-//    private String userName = "system";
-//    private String userPwd = "Admin123";
-
-
-//    @Scheduled(cron = "0 0/1 * * * ?")
-//    @Log(title = "对接大华云台日志定时任务", businessType = BusinessType.OTHER)
-    @ApiOperation(value = "对接大华云台日志定时任务", notes = "对接大华云台日志定时任务")
-    @RequestMapping(value = "configureWhiteTasks", method = POST)
-    public void configureWhiteTasks() {
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'");
-        Calendar calendar = Calendar.getInstance();
-        Date now = new Date();
-        //设置入参开始时间
-        calendar.setTime(now);
-        // 获取当前时间前一天的日期
-        calendar.add(Calendar.DAY_OF_MONTH, -1);
-        // 设置时间为16:00:00
-        calendar.set(Calendar.HOUR_OF_DAY, 16);
-        calendar.set(Calendar.MINUTE, 0);
-        calendar.set(Calendar.SECOND, 0);
-        Date startTime = calendar.getTime();
-        //获取当前时间的15:59:59
-        calendar.setTime(now);
-        calendar.set(Calendar.HOUR_OF_DAY, 15);
-        calendar.set(Calendar.MINUTE, 59);
-        calendar.set(Calendar.SECOND, 59);
-        Date endTime = calendar.getTime();
-
-        try {
-            R<?> result = HttpTestUtils.getToken(loginIp, Integer.parseInt(loginPort), userName, userPwd);
-            if (result.getCode() != 200) {
-                log.error("调用获取token接口报错:{}", result);
-            }
-            String token = result.getData().toString();
-            extractedWhite(token, sdf.format(startTime), sdf.format(endTime), null);
-        } catch (Exception e) {
-            log.error("configureWhiteTasks background error:", e);
-        }
-    }
-
-    public void extractedWhite(String token, String startTime, String endTime, String operateTypeValue) throws Exception {
-        //取消证书认证
-        SSLContext sslContext = SSLContextBuilder.create()
-                .loadTrustMaterial(new TrustSelfSignedStrategy())
-                .build();
-        HostnameVerifier hostnameVerifier = NoopHostnameVerifier.INSTANCE;
-        HttpClient httpClient = HttpClients.custom()
-                .setSSLContext(sslContext)
-                .setSSLHostnameVerifier(hostnameVerifier)
-                .setRedirectStrategy(new LaxRedirectStrategy())
-                .build();
-        long startTimeDate = System.currentTimeMillis();
-        //3.调用操作日志查询接口
-        String proto = loginPort.equals("8320") ? "https://" : "http://";
-        HttpPost httpPost = new HttpPost(proto + loginIp + ":" + loginPort + url);
-        httpPost.setHeader("X-Subject-Token", token);
-        httpPost.setHeader("content-type", "application/json");
-        if (StringUtils.isNotEmpty(operateTypeValue)) {
-            extracted(startTime, endTime, operateTypeValue, httpPost, httpClient);
-        } else {
-            for (String str : operateTypeWhiteList) {
-                extracted(startTime, endTime, str, httpPost, httpClient);
-            }
-        }
-    }
-
-    private void extracted(String startTime, String endTime, String str, HttpPost httpPost, HttpClient httpClient) throws Exception {
-        //第三次请求入参入参
-        Integer pageNo = 1;
-        Integer nextPage = 1;
-        for (int i = 1; i <= pageNo; i++) {
-            if (nextPage > 0) {
-                //循环赋值第几页
-                String requestBody = "{\n" +
-                        "\t\"condition\": {\n" +
-                        "\t\t\"startTime\": \"" + startTime + "\",\n" +
-                        "\t\t\"endTime\": \"" + endTime + "\",\n" +
-                        "\t\t\"type\": 2,\n" +
-                        "\t\t\"operateNames\": [],\n" +
-                        "\t\t\"operateType\": \"" + str + "\",\n" +
-                        "\t\t\"deptCode\": \"\",\n" +
-                        "\t\t\"userName\": \"\",\n" +
-                        "\t\t\"address\": \"\",\n" +
-                        "\t\t\"eventDetail\": \"\"\n" +
-                        "\t},\n" +
-                        "\t\"order\": [\n" +
-                        "\t\t{\n" +
-                        "\t\t\t\"orderBy\": \"operateTime\",\n" +
-                        "\t\t\t\"order\": \"desc\"\n" +
-                        "\t\t}\n" +
-                        "\t],\n" +
-                        "\t\"page\": \"" + i + "\",\n" +
-                        "\t\"pageSize\": 512\n" +
-                        "}";
-                StringEntity requestEntity = new StringEntity(requestBody, ContentType.APPLICATION_JSON);
-                httpPost.setEntity(requestEntity);
-                HttpResponse response = httpClient.execute(httpPost);
-                HttpEntity responseEntity = response.getEntity();
-                if (responseEntity != null) {
-                    List<CenternonitorTDahuaOperateLogUrl> centernonitorTDahuaOperateLogUrlList = new ArrayList<>();
-                    String responseBody = EntityUtils.toString(responseEntity);
-                    JSONObject jsonObject = JSONObject.parseObject(responseBody);
-                    if (ObjectUtils.isNotEmpty(jsonObject.get("code")) && jsonObject.get("code").toString().equals("402")) {
-                        //如果token过期重新走业务逻辑
-                        getTokenWhite();
-                    } else {
-                        pageNo = (Integer) jsonObject.get("totalCount") / 512 + 1;
-                        nextPage = (Integer) jsonObject.get("nextPage");
-                        List<CenternonitorTDahuaOperateLog> list = JSONObject.parseArray(jsonObject.get("results").toString(), CenternonitorTDahuaOperateLog.class);
-                        if (CollectionUtils.isNotEmpty(list)) {
-                            for (CenternonitorTDahuaOperateLog item : list) {
-                                R<SysDept> result = remoteService.findDeptIdByUserName(item.getUserName());
-                                if (result.getCode() == 200 && result.getData() != null) {
-                                    item.setDeptId(result.getData().getDeptId());
-                                    item.setDeptName(result.getData().getDeptName());
-                                    item.setAncestors(result.getData().getAncestors());
-                                    item.setParentId(result.getData().getParentId());
-                                }
-                            }
-                            int count = centernonitorTDahuaOperateLogService.insertBatch(list);
-                            list.stream().forEach(item -> {
-                                if (CollectionUtils.isNotEmpty(item.getUrl())) {
-                                    item.getUrl().stream().forEach(var -> {
-                                        CenternonitorTDahuaOperateLogUrl centernonitorTDahuaOperateLogUrl = new CenternonitorTDahuaOperateLogUrl();
-                                        centernonitorTDahuaOperateLogUrl.setOperateId(item.getId());
-                                        centernonitorTDahuaOperateLogUrl.setUrl(var);
-                                        centernonitorTDahuaOperateLogUrlList.add(centernonitorTDahuaOperateLogUrl);
-                                    });
-                                }
-                            });
-                            if (CollectionUtils.isNotEmpty(centernonitorTDahuaOperateLogUrlList)) {
-                                centernonitorTDahuaOperateLogUrlMapper.insertBatch(centernonitorTDahuaOperateLogUrlList);
-                            }
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-
-    public R<?> getTokenWhite() {
-        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'");
-        Calendar calendar = Calendar.getInstance();
-        Date now = new Date();
-        //设置入参开始时间
-        calendar.setTime(now);
-        // 获取当前时间前一天的日期
-        calendar.add(Calendar.DAY_OF_MONTH, -1);
-        // 设置时间为16:00:00
-        calendar.set(Calendar.HOUR_OF_DAY, 16);
-        calendar.set(Calendar.MINUTE, 0);
-        calendar.set(Calendar.SECOND, 0);
-        Date startTime = calendar.getTime();
-        //获取当前时间的15:59:59
-        calendar.setTime(now);
-        calendar.set(Calendar.HOUR_OF_DAY, 15);
-        calendar.set(Calendar.MINUTE, 59);
-        calendar.set(Calendar.SECOND, 59);
-        Date endTime = calendar.getTime();
-
-        try {
-            R<?> result = HttpTestUtils.getToken(loginIp, Integer.parseInt(loginPort), userName, userPwd);
-            if (result.getCode() != 200) {
-                return R.fail(result.getMsg());
-            }
-            String token = result.getData().toString();
-            extractedWhite(token, sdf.format(startTime), sdf.format(endTime), null);
-            return R.ok();
-        } catch (Exception e) {
-            return R.fail("调用操作日志接口报错");
-        }
-    }
-
-
-}
-
-

+ 104 - 0
src/main/java/com/sooka/sponest/monitor/dahua/domain/DahuaSysDept.java

@@ -0,0 +1,104 @@
+package com.sooka.sponest.monitor.dahua.domain;
+
+import com.ruoyi.common.datascope.base.domain.BaseBusinessEntity;
+import lombok.Getter;
+import lombok.Setter;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.Size;
+
+/**
+ * 部门表 sys_dept
+ *
+ * @author ruoyi
+ */
+@Getter
+@Setter
+public class DahuaSysDept extends BaseBusinessEntity {
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 部门ID
+     */
+    private Long deptId;
+
+    /**
+     * 用户名称
+     */
+    private String userName;
+
+    /**
+     * 父部门ID
+     */
+    private Long parentId;
+
+    /**
+     * 祖级列表
+     */
+    private String ancestors;
+
+    /**
+     * 部门名称
+     */
+    private String deptName;
+
+
+    public Long getDeptId() {
+        return deptId;
+    }
+
+    public void setDeptId(Long deptId) {
+        this.deptId = deptId;
+    }
+
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public Long getParentId() {
+        return parentId;
+    }
+
+    public void setParentId(Long parentId) {
+        this.parentId = parentId;
+    }
+
+    public String getAncestors() {
+        return ancestors;
+    }
+
+    public void setAncestors(String ancestors) {
+        this.ancestors = ancestors;
+    }
+
+    @NotBlank(message = "部门名称不能为空")
+    @Size(min = 0, max = 30, message = "部门名称长度不能超过30个字符")
+    public String getDeptName() {
+        return deptName;
+    }
+
+    public void setDeptName(String deptName) {
+        this.deptName = deptName;
+    }
+
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+                .append("deptId", getDeptId())
+                .append("parentId", getParentId())
+                .append("ancestors", getAncestors())
+                .append("deptName", getDeptName())
+                .append("userName", getUserName())
+                .toString();
+    }
+
+
+}

+ 6 - 5
src/main/java/com/sooka/sponest/monitor/dahua/mapper/CenternonitorTDahuaOperateLogMapper.java

@@ -2,6 +2,7 @@ package com.sooka.sponest.monitor.dahua.mapper;
 
 import com.alibaba.fastjson.JSONObject;
 import com.sooka.sponest.monitor.dahua.domain.CenternonitorTDahuaOperateLog;
+import com.sooka.sponest.monitor.dahua.domain.DahuaSysDept;
 import com.sooka.sponest.monitor.dahua.vo.ChannelCodeVO;
 import org.apache.ibatis.annotations.Param;
 
@@ -75,14 +76,14 @@ public interface CenternonitorTDahuaOperateLogMapper {
      */
     List<ChannelCodeVO> selectDeviceNameList();
 
-    /**
-     * 根据时间和类型删除华云台日志
-     */
-    void deleteByDate(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("operateTypeValue") String operateTypeValue);
-
     int updateFourField(CenternonitorTDahuaOperateLog centernonitorTDahuaOperateLog);
 
     LinkedHashMap<String, Object> selectOperateLogCountByDeptId(JSONObject jsonObject);
 
     List<Long> selectOperLogLimit(@Param("year") String year);
+
+    /**
+     * 根据用户名查询dept_id, parent_id, ancestors, dept_name
+     */
+    DahuaSysDept findDeptIdByUserName(DahuaSysDept selectDo);
 }

+ 6 - 5
src/main/java/com/sooka/sponest/monitor/dahua/service/ICenternonitorTDahuaOperateLogService.java

@@ -3,6 +3,7 @@ package com.sooka.sponest.monitor.dahua.service;
 import com.alibaba.fastjson.JSONObject;
 import com.ruoyi.common.core.domain.R;
 import com.sooka.sponest.monitor.dahua.domain.CenternonitorTDahuaOperateLog;
+import com.sooka.sponest.monitor.dahua.domain.DahuaSysDept;
 import com.sooka.sponest.monitor.dahua.vo.ChannelCodeVO;
 
 import java.util.LinkedHashMap;
@@ -80,12 +81,12 @@ public interface ICenternonitorTDahuaOperateLogService
      */
     int insertBatch(List<CenternonitorTDahuaOperateLog> list);
 
-    /**
-     * 根据时间和类型删除华云台日志
-     */
-    void deleteByDate(String startTime, String endTime, String operateTypeValue);
-
     void updateFourField(String year);
 
     LinkedHashMap<String, Object> selectOperateLogCountByDeptId(JSONObject jsonObject);
+
+    /**
+     * 根据用户名查询dept_id, parent_id, ancestors, dept_name
+     */
+    DahuaSysDept findDeptIdByUserName(DahuaSysDept selectDo);
 }

+ 38 - 26
src/main/java/com/sooka/sponest/monitor/dahua/service/impl/CenternonitorTDahuaOperateLogServiceImpl.java

@@ -5,24 +5,27 @@ import com.alibaba.fastjson.JSONObject;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.utils.DateUtils;
 import com.sooka.sponest.monitor.base.service.impl.BaseService;
-import com.sooka.sponest.monitor.dahua.controller.DahuaOperateLogWhiteTask;
+import com.sooka.sponest.monitor.dahua.utils.DahuaOperateLogWhiteTask;
 import com.sooka.sponest.monitor.dahua.domain.CenternonitorTDahuaOperateLog;
-import com.sooka.sponest.monitor.dahua.enums.OperateTypeEnum;
+import com.sooka.sponest.monitor.dahua.domain.DahuaSysDept;
 import com.sooka.sponest.monitor.dahua.mapper.CenternonitorTDahuaOperateLogMapper;
 import com.sooka.sponest.monitor.dahua.service.ICenternonitorTDahuaOperateLogService;
 import com.sooka.sponest.monitor.dahua.utils.HttpTestUtils;
 import com.sooka.sponest.monitor.dahua.vo.ChannelCodeVO;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
 
 import java.text.DateFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 
 /**
  * 【请填写功能名称】Service业务层处理
@@ -126,8 +129,8 @@ public class CenternonitorTDahuaOperateLogServiceImpl extends BaseService implem
     /**
      * 同步大华操作日志
      */
+    @Async
     @Override
-    @Transactional(rollbackFor = Exception.class)
     public R<?> getAllLogData(String startTime, String endTime, String operateTypeValue) throws Exception {
         startTime = startTime + " 00:00:00";
         endTime = endTime + " 23:59:59";
@@ -136,9 +139,6 @@ public class CenternonitorTDahuaOperateLogServiceImpl extends BaseService implem
         if (result.getCode() != 200) {
             return R.fail(result.getMsg());
         }
-        //同步之前删除已经入库的记录
-        centernonitorTDahuaOperateLogMapper.deleteByDate(startTime, endTime, operateTypeValue);
-
         String token = result.getData().toString();
         log.info("获取token返回:{}", token);
         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'");
@@ -150,7 +150,32 @@ public class CenternonitorTDahuaOperateLogServiceImpl extends BaseService implem
         } catch (ParseException e) {
             return R.fail("时间转换错误");
         }
-        dahuaOperateLogTask.extractedWhite(token, startTime, endTime, operateTypeValue);
+        List<CenternonitorTDahuaOperateLog> list = DahuaOperateLogWhiteTask.extractedWhite(loginIp, loginPort, token, startTime, endTime, operateTypeValue);
+        System.out.println("本次查出数据条数: " + list.size());
+        int batchSize = 200;
+        if (CollectionUtils.isNotEmpty(list)) {
+            DahuaSysDept selectDo = new DahuaSysDept();
+            for (CenternonitorTDahuaOperateLog item : list) {
+                selectDo.setUserName(item.getUserName());
+                DahuaSysDept dept = findDeptIdByUserName(selectDo);
+                if (ObjectUtils.isNotEmpty(dept)) {
+                    item.setDeptId(dept.getDeptId());
+                    item.setDeptName(dept.getDeptName());
+                    item.setAncestors(dept.getAncestors());
+                    item.setParentId(dept.getParentId());
+                }
+            }
+            Map<Integer, List<CenternonitorTDahuaOperateLog>> batches = IntStream.range(0, list.size())
+                    .boxed()
+                    .collect(Collectors.groupingBy(
+                            index -> index / batchSize,
+                            Collectors.mapping(list::get, Collectors.toList())
+                    ));
+            // 遍历每个批次并处理
+            batches.values().forEach(batch -> {
+                centernonitorTDahuaOperateLogMapper.insertBatch(list);// 插入数据库
+            });
+        }
         return R.ok();
     }
 
@@ -170,14 +195,6 @@ public class CenternonitorTDahuaOperateLogServiceImpl extends BaseService implem
         return centernonitorTDahuaOperateLogMapper.insertBatch(list);
     }
 
-    /**
-     * 根据时间和类型删除华云台日志
-     */
-    @Override
-    public void deleteByDate(String startTime, String endTime, String operateTypeValue) {
-        extracted(startTime, endTime, operateTypeValue);
-    }
-
     @Override
     public void updateFourField(String year) {
         log.info("开始清洗摄像头操作日志数据");
@@ -203,15 +220,10 @@ public class CenternonitorTDahuaOperateLogServiceImpl extends BaseService implem
         return centernonitorTDahuaOperateLogMapper.selectOperateLogCountByDeptId(jsonObject);
     }
 
-
-    private void extracted(String startTime, String endTime, String operateTypeValue) {
-        if (StringUtils.isNotEmpty(operateTypeValue)) {
-            centernonitorTDahuaOperateLogMapper.deleteByDate(startTime, endTime, OperateTypeEnum.getValueByCode(operateTypeValue));
-        } else {
-            for (String var : operateTypeWhiteList) {
-                centernonitorTDahuaOperateLogMapper.deleteByDate(startTime, endTime, var);
-            }
-        }
+    @Override
+    public DahuaSysDept findDeptIdByUserName(DahuaSysDept selectDo) {
+        setSookaDataBase(selectDo);
+        return centernonitorTDahuaOperateLogMapper.findDeptIdByUserName(selectDo);
     }
 
 }

+ 136 - 0
src/main/java/com/sooka/sponest/monitor/dahua/utils/DahuaOperateLogWhiteTask.java

@@ -0,0 +1,136 @@
+package com.sooka.sponest.monitor.dahua.utils;
+
+import com.alibaba.fastjson.JSONObject;
+import com.sooka.sponest.monitor.dahua.domain.CenternonitorTDahuaOperateLog;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.conn.ssl.NoopHostnameVerifier;
+import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
+import org.apache.http.entity.ContentType;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.impl.client.LaxRedirectStrategy;
+import org.apache.http.ssl.SSLContextBuilder;
+import org.apache.http.util.EntityUtils;
+
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.SSLContext;
+import java.time.ZoneOffset;
+import java.time.ZonedDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 对接大华云台日志定时任务Controller
+ * <p>
+ * "12": "视频",
+ * "13": "云台控制",
+ *
+ * @author ruoyi
+ * @date 2023-12-09
+ */
+@Slf4j
+public class DahuaOperateLogWhiteTask {
+
+    private final static String url = "/SlsService/opreationlog/list";
+//    private String loginIp = "10.53.0.35";
+//    private String loginPort = "7901";
+//    private String userName = "system";
+//    private String userPwd = "Admin123";
+
+
+    public static List<CenternonitorTDahuaOperateLog> extractedWhite(String loginIp, String loginPort, String token, String startTime, String endTime, String operateTypeValue) throws Exception {
+        //取消证书认证
+        SSLContext sslContext = SSLContextBuilder.create()
+                .loadTrustMaterial(new TrustSelfSignedStrategy())
+                .build();
+        HostnameVerifier hostnameVerifier = NoopHostnameVerifier.INSTANCE;
+        HttpClient httpClient = HttpClients.custom()
+                .setSSLContext(sslContext)
+                .setSSLHostnameVerifier(hostnameVerifier)
+                .setRedirectStrategy(new LaxRedirectStrategy())
+                .build();
+        //3.调用操作日志查询接口
+        String proto = loginPort.equals("8320") ? "https://" : "http://";
+        HttpPost httpPost = new HttpPost(proto + loginIp + ":" + loginPort + url);
+        httpPost.setHeader("X-Subject-Token", token);
+        httpPost.setHeader("content-type", "application/json");
+        return extracted(startTime, endTime, operateTypeValue, httpPost, httpClient);
+    }
+
+    private static List<CenternonitorTDahuaOperateLog>  extracted(String startTime, String endTime, String str, HttpPost httpPost, HttpClient httpClient) throws Exception {
+        //第三次请求入参入参
+        Integer pageNo = 1;
+        Integer nextPage = 1;
+        List<CenternonitorTDahuaOperateLog> returnList = new ArrayList<>();
+        for (int i = 1; i <= pageNo; i++) {
+            if (nextPage > 0) {
+                //循环赋值第几页
+                String requestBody = "{\n" +
+                        "\t\"condition\": {\n" +
+                        "\t\t\"startTime\": \"" + startTime + "\",\n" +
+                        "\t\t\"endTime\": \"" + endTime + "\",\n" +
+                        "\t\t\"type\": 2,\n" +
+                        "\t\t\"operateNames\": [],\n" +
+                        "\t\t\"operateType\": \"" + str + "\",\n" +
+                        "\t\t\"deptCode\": \"\",\n" +
+                        "\t\t\"userName\": \"\",\n" +
+                        "\t\t\"address\": \"\",\n" +
+                        "\t\t\"eventDetail\": \"\"\n" +
+                        "\t},\n" +
+                        "\t\"order\": [\n" +
+                        "\t\t{\n" +
+                        "\t\t\t\"orderBy\": \"operateTime\",\n" +
+                        "\t\t\t\"order\": \"desc\"\n" +
+                        "\t\t}\n" +
+                        "\t],\n" +
+                        "\t\"page\": \"" + i + "\",\n" +
+                        "\t\"pageSize\": 512\n" +
+                        "}";
+                StringEntity requestEntity = new StringEntity(requestBody, ContentType.APPLICATION_JSON);
+                httpPost.setEntity(requestEntity);
+                HttpResponse response = httpClient.execute(httpPost);
+                HttpEntity responseEntity = response.getEntity();
+                if (responseEntity != null) {
+                    String responseBody = EntityUtils.toString(responseEntity);
+                    JSONObject jsonObject = JSONObject.parseObject(responseBody);
+                    pageNo = (Integer) jsonObject.get("totalCount") / 512 + 1;
+                    nextPage = (Integer) jsonObject.get("nextPage");
+                    List<CenternonitorTDahuaOperateLog> list = JSONObject.parseArray(jsonObject.get("results").toString(), CenternonitorTDahuaOperateLog.class);
+                    if (CollectionUtils.isNotEmpty(list)) {
+                        returnList.addAll(list);
+                    }
+                }
+            }
+        }
+        return returnList;
+    }
+
+
+    public static void main(String[] args) {
+        // 定义格式化器
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd'T'HHmmss'Z'");
+        // 获取当前UTC时间
+        ZonedDateTime now = ZonedDateTime.now(ZoneOffset.UTC);
+        // 减去9小时
+        ZonedDateTime minus9Hours = now.minusHours(9);
+        String minus9HoursFormatted = minus9Hours.format(formatter);
+        // 减去8小时
+        ZonedDateTime minus8Hours = now.minusHours(8);
+        String minus8HoursFormatted = minus8Hours.format(formatter);
+
+        System.out.println("当前时间UTC: " + now.format(formatter));
+        System.out.println("减去9小时: " + minus9HoursFormatted);
+        System.out.println("减去8小时: " + minus8HoursFormatted);
+    }
+
+
+
+}
+
+

+ 0 - 8
src/main/java/com/sooka/sponest/monitor/remoteapi/fallback/center/system/RemoteSystemBaseServiceFallbackFactory.java

@@ -78,14 +78,6 @@ public class RemoteSystemBaseServiceFallbackFactory implements FallbackFactory<R
             }
 
             /**
-             * 根据用户名查询dept_id, parent_id, ancestors, dept_name
-             */
-            @Override
-            public R<SysDept> findDeptIdByUserName(String userName) {
-                return null;
-            }
-
-            /**
              * 根据DEPT_ID查询下级的乡镇或区县部门列表,如果传入市级部门则查询区县,如果传入区县部门则查询乡镇街道(不带数据权限)
              *
              * @param dept 部门id

+ 0 - 6
src/main/java/com/sooka/sponest/monitor/remoteapi/service/center/system/RemoteService.java

@@ -52,12 +52,6 @@ public interface RemoteService {
     R<SysUser> selectById(@PathVariable("userId") Long userId);
 
     /**
-     * 根据用户名查询dept_id, parent_id, ancestors, dept_name
-     */
-    @GetMapping(value = "/dept/findDeptIdByUserName/{userName}")
-    R<SysDept> findDeptIdByUserName(@PathVariable("userName") String userName);
-
-    /**
      * 根据DEPT_ID查询下级的乡镇或区县部门列表,如果传入市级部门则查询区县,如果传入区县部门则查询乡镇街道(不带数据权限)
      *
      * @param deptId 部门id

+ 25 - 3
src/main/resources/mapper/monitor/dahua/CenternonitorTDahuaOperateLogMapper.xml

@@ -30,6 +30,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="deptName" column="dept_name"/>
     </resultMap>
 
+    <resultMap type="DahuaSysDept" id="SysDeptResult">
+        <id property="deptId" column="dept_id"/>
+        <result property="parentId" column="parent_id"/>
+        <result property="ancestors" column="ancestors"/>
+        <result property="deptName" column="dept_name"/>
+    </resultMap>
+
     <sql id="selectCenternonitorTDahuaOperateLogVo">
         select id, record_id, user_name, terminal_ip, mac_addr, channel_name, device_name, operate_name, operate_type,
                operate_result, service_code, service_name, response_time, detail, behavior, operate_time, channel_code, device_ip, create_time,
@@ -209,9 +216,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         GROUP BY
             ctc.camera_name
     </select>
-    <delete id="deleteByDate">
-        delete from centernonitor_t_dahua_operate_log where operate_time between #{startTime} and #{endTime} and operate_type = #{operateTypeValue}
-    </delete>
+
     <update id="updateFourField" parameterType="int">
         UPDATE centernonitor_t_dahua_operate_log_${year} AS log
         LEFT JOIN ${database_system}.sys_user AS su ON log.user_name = su.user_name
@@ -266,4 +271,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         order by RAND()
         LIMIT 1000
     </select>
+    <select id="findDeptIdByUserName" parameterType="DahuaSysDept" resultMap="SysDeptResult">
+        SELECT
+            dept.dept_id,
+            dept.parent_id,
+            dept.ancestors,
+            dept.dept_name,
+            su.user_name
+        FROM
+            ${database_system}.sys_user su
+                LEFT JOIN ${database_system}.sys_user_dept ud ON ud.user_id = su.user_id
+                LEFT JOIN ${database_system}.sys_dept dept ON ud.dept_id = dept.dept_id
+        WHERE
+            su.del_flag = 0
+          AND dept.del_flag = 0
+          AND su.user_name = #{userName}
+            LIMIT 1
+    </select>
 </mapper>