From 62a107d1df0030f59997c2951f131657da8953c1 Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Sun, 28 Apr 2024 01:03:35 +0800 Subject: [PATCH] =?UTF-8?q?bug=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../interceptor/ThreadLocalInterceptor.java | 3 - .../com/zhgd/xmgl/call/HikvisionCall.java | 116 ++++++++++--- .../HiddenDangerInspectRecordServiceImpl.java | 2 +- ...AnalyseHardWareAlarmRecordServiceImpl.java | 2 +- .../controller/XzHikvisionSyncController.java | 37 +++-- .../modules/xz/entity/XzHikvisionSync.java | 33 ++-- .../xz/mapper/XzHikvisionSyncMapper.java | 4 + .../xz/mapper/xml/XzHikvisionSyncMapper.xml | 7 + .../xz/service/IXzHikvisionSyncService.java | 5 + .../impl/XzHikvisionSyncServiceImpl.java | 154 ++++++++++++++++-- 10 files changed, 297 insertions(+), 66 deletions(-) diff --git a/src/main/java/com/zhgd/interceptor/ThreadLocalInterceptor.java b/src/main/java/com/zhgd/interceptor/ThreadLocalInterceptor.java index b93f7ab3d..e82f21735 100644 --- a/src/main/java/com/zhgd/interceptor/ThreadLocalInterceptor.java +++ b/src/main/java/com/zhgd/interceptor/ThreadLocalInterceptor.java @@ -8,9 +8,6 @@ import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -/** - * 日志拦截器 - */ @Slf4j public class ThreadLocalInterceptor implements HandlerInterceptor { diff --git a/src/main/java/com/zhgd/xmgl/call/HikvisionCall.java b/src/main/java/com/zhgd/xmgl/call/HikvisionCall.java index 5c4e6dae3..2280728fb 100644 --- a/src/main/java/com/zhgd/xmgl/call/HikvisionCall.java +++ b/src/main/java/com/zhgd/xmgl/call/HikvisionCall.java @@ -9,6 +9,7 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.zhgd.jeecg.common.api.vo.Result; import com.zhgd.jeecg.common.execption.OpenAlertException; import com.zhgd.redis.lock.RedisRepository; @@ -40,11 +41,14 @@ import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; +import net.javacrumbs.shedlock.core.SchedulerLock; import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Lazy; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.web.bind.annotation.*; import springfox.documentation.annotations.ApiIgnore; @@ -283,6 +287,7 @@ public class HikvisionCall { @ApiImplicitParam(name = "endTime", value = "结束时间", paramType = "body", required = true, dataType = "String"), }) @PostMapping(value = "/getDoorEvents") + @Async public Result getDoorEvents(@ApiIgnore @RequestBody HashMap paramMap) { String startTime = MapUtils.getString(paramMap, "startTime"); String endTime = MapUtils.getString(paramMap, "endTime"); @@ -296,9 +301,6 @@ public class HikvisionCall { .eq(Project::getSyncHikvision, 1); if (StringUtils.isNotBlank(projectSn)) { queryWrapper.eq(Project::getProjectSn, projectSn); - if (!redisRepository.setNx("getDoorEvents:projectSn" + projectSn, 1000 * 30L)) { - return Result.ok("正在同步中请耐心等待通知!"); - } } List projects = projectMapper.selectList(queryWrapper); if (CollUtil.isEmpty(projects)) { @@ -411,6 +413,7 @@ public class HikvisionCall { @ApiImplicitParam(name = "endTime", value = "结束时间", paramType = "body", required = true, dataType = "String"), }) @PostMapping(value = "/getCrossRecords") + @Async public Result getCrossRecords(@ApiIgnore @RequestBody HashMap paramMap) { String startTime = MapUtils.getString(paramMap, "startTime"); String endTime = MapUtils.getString(paramMap, "endTime"); @@ -424,9 +427,6 @@ public class HikvisionCall { .eq(Project::getSyncHikvision, 1); if (StringUtils.isNotBlank(projectSn)) { queryWrapper.eq(Project::getProjectSn, projectSn); - if (!redisRepository.setNx("getCrossRecords:projectSn" + projectSn, 1000 * 30L)) { - return Result.ok("正在同步中请耐心等待通知!"); - } } List projects = projectMapper.selectList(queryWrapper); if (CollUtil.isEmpty(projects)) { @@ -540,6 +540,28 @@ public class HikvisionCall { return Result.ok("已在后台同步车辆通行数据,请耐心等待!"); } + /** + * 定时一分钟获取海康数据 + */ + @SchedulerLock(name = "getRecordForHikvision", lockAtMostFor = 1000 * 60 * 60, lockAtLeastFor = 1000 * 60 * 5) + @Scheduled(cron = "0 0/1 * * * ?") + @RequestMapping("getRecordForHikvision") + public void getRecordForHikvision() { + String startTime = DateUtil.formatDateTime(DateUtil.offsetMinute(new Date(), -2)); + String endTime = DateUtil.formatDateTime(new Date()); + List projects = projectMapper.selectList(new LambdaQueryWrapper() + .eq(Project::getSyncHikvision, 1)); + for (Project project : projects) { + log.info("定时获取海康记录,{}", project.getProjectName()); + HashMap map = new HashMap<>(); + map.put("projectSn", project.getProjectSn()); + map.put("startTime", startTime); + map.put("endTime", endTime); + getDoorEvents(map); + getCrossRecords(map); + } + } + /** * 测试查询组织 * @@ -724,13 +746,18 @@ public class HikvisionCall { addWorkerFace(workerInfo, project); } - private void addWorkerFromHttp(WorkerInfo workerInfo, Project project) throws Exception { + public void addWorkerFromHttp(WorkerInfo workerInfo, Project project) throws Exception { + String rs = doAddWorkerFromHttp(workerInfo, project); + sendNoticeForWorker("添加人员到海康isc", rs, workerInfo, 1, 1); + } + + public String doAddWorkerFromHttp(WorkerInfo workerInfo, Project project) throws Exception { final String ARTEMIS_PATH = "/artemis"; final String path = ARTEMIS_PATH + "/api/resource/v2/person/single/add"; String host = "https://" + project.getArtemisConfigHost(); String body = getWorkerJson(workerInfo); String rs = HikvisionUtil.doPost(host, path, body, null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret()); - sendNoticeForWorker("添加人员到海康isc", rs, workerInfo, 1, 1); + return rs; } @@ -783,13 +810,18 @@ public class HikvisionCall { } } - private void editWorkerFromHttp(WorkerInfo workerInfo, Project project) throws Exception { + public void editWorkerFromHttp(WorkerInfo workerInfo, Project project) throws Exception { + String rs = doEditWorkerFromHttp(workerInfo, project); + sendNoticeForWorker("更新人员到海康isc", rs, workerInfo, 1, 2); + } + + public String doEditWorkerFromHttp(WorkerInfo workerInfo, Project project) throws Exception { final String ARTEMIS_PATH = "/artemis"; final String path = ARTEMIS_PATH + "/api/resource/v1/person/single/update"; String host = "https://" + project.getArtemisConfigHost(); String body = getWorkerJson(workerInfo); String rs = HikvisionUtil.doPost(host, path, body, null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret()); - sendNoticeForWorker("更新人员到海康isc", rs, workerInfo, 1, 2); + return rs; } /** @@ -798,20 +830,25 @@ public class HikvisionCall { * @param workerInfo * @param project */ - private void addWorkerFace(WorkerInfo workerInfo, Project project) throws Exception { + public void addWorkerFace(WorkerInfo workerInfo, Project project) throws Exception { String fieldAcquisitionUrl = workerInfo.getFieldAcquisitionUrl(); if (StringUtils.isNotBlank(fieldAcquisitionUrl)) { - final String ARTEMIS_PATH = "/artemis"; - final String path = ARTEMIS_PATH + "/api/resource/v1/face/single/add"; - String host = "https://" + project.getArtemisConfigHost(); - JSONObject jo = new JSONObject(); - jo.put("personId", String.valueOf(workerInfo.getId())); - jo.put("faceData", Base64Util.convertFileToBase64(PathUtil.reviseSlash(basePath + "/" + fieldAcquisitionUrl))); - String rs = HikvisionUtil.doPost(host, path, jo.toJSONString(), null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret()); + String rs = doAddWorkerFace(workerInfo, project); sendNoticeForWorker("添加人员照片到海康isc", rs, workerInfo, 2, 1); } } + public String doAddWorkerFace(WorkerInfo workerInfo, Project project) throws Exception { + final String ARTEMIS_PATH = "/artemis"; + final String path = ARTEMIS_PATH + "/api/resource/v1/face/single/add"; + String host = "https://" + project.getArtemisConfigHost(); + JSONObject jo = new JSONObject(); + jo.put("personId", String.valueOf(workerInfo.getId())); + jo.put("faceData", Base64Util.convertFileToBase64(PathUtil.reviseSlash(basePath + "/" + workerInfo.getFieldAcquisitionUrl()))); + String rs = HikvisionUtil.doPost(host, path, jo.toJSONString(), null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret()); + return rs; + } + private void sendNoticeForCarInfo(String title, String rs, CarInfo carInfo) { if (StringUtils.isBlank(rs)) { return; @@ -909,6 +946,37 @@ public class HikvisionCall { } xzHikvisionSync.setIsSuccess(1); xzHikvisionSyncMapper.updateById(xzHikvisionSync); + + Integer fail = xzHikvisionSyncMapper.selectCount(new LambdaQueryWrapper() + .eq(XzHikvisionSync::getProjectSn, projectSn) + .eq(XzHikvisionSync::getWhoId, whoId) + .eq(XzHikvisionSync::getCreateDate, now) + .eq(XzHikvisionSync::getIsSuccess, 0) + ); + if (fail == 0) { + workerInfoMapper.update(null, new LambdaUpdateWrapper() + .eq(WorkerInfo::getId, whoId) + .set(WorkerInfo::getSendSuccessStatus, 1) + ); + } else { + Integer sc = xzHikvisionSyncMapper.selectCount(new LambdaQueryWrapper() + .eq(XzHikvisionSync::getProjectSn, projectSn) + .eq(XzHikvisionSync::getWhoId, whoId) + .eq(XzHikvisionSync::getCreateDate, now) + .eq(XzHikvisionSync::getIsSuccess, 1) + ); + if (sc == 0) { + workerInfoMapper.update(null, new LambdaUpdateWrapper() + .eq(WorkerInfo::getId, whoId) + .set(WorkerInfo::getSendSuccessStatus, 2) + ); + } else { + workerInfoMapper.update(null, new LambdaUpdateWrapper() + .eq(WorkerInfo::getId, whoId) + .set(WorkerInfo::getSendSuccessStatus, 3) + ); + } + } } /** @@ -949,7 +1017,12 @@ public class HikvisionCall { deleteWorkerFromHttp(workerInfo, project); } - private void deleteWorkerFromHttp(WorkerInfo workerInfo, Project project) throws Exception { + public void deleteWorkerFromHttp(WorkerInfo workerInfo, Project project) throws Exception { + String rs = doDeleteWorkerFromHttp(workerInfo, project); + sendNoticeForWorker("删除人员到海康isc", rs, workerInfo, 1, 3); + } + + public String doDeleteWorkerFromHttp(WorkerInfo workerInfo, Project project) throws Exception { final String ARTEMIS_PATH = "/artemis"; final String path = ARTEMIS_PATH + "/api/resource/v1/person/batch/delete"; String host = "https://" + project.getArtemisConfigHost(); @@ -957,7 +1030,7 @@ public class HikvisionCall { jsonBody.put("personIds", Arrays.asList(workerInfo.getId())); String body = jsonBody.toJSONString(); String rs = HikvisionUtil.doPost(host, path, body, null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret()); - sendNoticeForWorker("删除人员到海康isc", rs, workerInfo, 1, 3); + return rs; } private void deleteWorkerFace(WorkerInfo workerInfo, Project project) throws Exception { @@ -1024,9 +1097,6 @@ public class HikvisionCall { jo.put("paramName", "personId"); jo.put("paramValue", Arrays.asList(String.valueOf(workerInfo.getId()))); String rs = HikvisionUtil.doPost(host, path, jo.toJSONString(), null, project.getArtemisConfigAppKey(), project.getArtemisConfigAppSecret()); - if (rs == null) { - throw new OpenAlertException("海康查询人员网络异常,名称:" + workerInfo.getWorkerName()); - } JSONObject joData = HikvisionUtil.getJSONObjectData(rs); if (joData != null) { Integer total = joData.getInteger("total"); diff --git a/src/main/java/com/zhgd/xmgl/modules/dangerous/service/impl/HiddenDangerInspectRecordServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/dangerous/service/impl/HiddenDangerInspectRecordServiceImpl.java index 4c9d00a64..4fef439a9 100644 --- a/src/main/java/com/zhgd/xmgl/modules/dangerous/service/impl/HiddenDangerInspectRecordServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/dangerous/service/impl/HiddenDangerInspectRecordServiceImpl.java @@ -198,7 +198,7 @@ public class HiddenDangerInspectRecordServiceImpl extends ServiceImpl map = new HashMap<>(); diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/controller/XzHikvisionSyncController.java b/src/main/java/com/zhgd/xmgl/modules/xz/controller/XzHikvisionSyncController.java index 6b29236e8..570c9e975 100644 --- a/src/main/java/com/zhgd/xmgl/modules/xz/controller/XzHikvisionSyncController.java +++ b/src/main/java/com/zhgd/xmgl/modules/xz/controller/XzHikvisionSyncController.java @@ -1,27 +1,23 @@ package com.zhgd.xmgl.modules.xz.controller; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.zhgd.jeecg.common.api.vo.Result; import com.zhgd.xmgl.modules.xz.entity.XzHikvisionSync; import com.zhgd.xmgl.modules.xz.service.IXzHikvisionSyncService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; -import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiImplicitParams; - -import java.util.HashMap; - -import springfox.documentation.annotations.ApiIgnore; - -import java.util.List; - -import com.zhgd.jeecg.common.api.vo.Result; -import org.apache.commons.collections.MapUtils; - -import org.simpleframework.xml.core.Validate; -import com.baomidou.mybatisplus.core.metadata.IPage; +import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; - +import org.apache.commons.collections.MapUtils; +import org.simpleframework.xml.core.Validate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import springfox.documentation.annotations.ApiIgnore; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** @@ -65,6 +61,12 @@ public class XzHikvisionSyncController { return Result.success(xzHikvisionSyncService.queryList(paramMap)); } + @ApiOperation(value = "查询最新一波星纵-海康同步数据信息", notes = "查询最新一波星纵-海康同步数据信息", httpMethod = "POST") + @PostMapping(value = "/getNewestList") + public Result> getNewestList(@ApiIgnore @RequestBody HashMap paramMap) { + return Result.success(xzHikvisionSyncService.getNewestList(paramMap)); + } + /** * 添加 * @@ -125,4 +127,11 @@ public class XzHikvisionSyncController { return result; } + @ApiOperation(value = "重试", notes = "重试", httpMethod = "POST") + @ApiImplicitParam(name = "id", value = "星纵-海康同步数据ID", paramType = "query", required = true, dataType = "Long") + @PostMapping(value = "/retry") + public Result retry(@ApiIgnore @RequestBody Map paramMap) throws Exception { + xzHikvisionSyncService.retry(paramMap); + return Result.ok(); + } } diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/entity/XzHikvisionSync.java b/src/main/java/com/zhgd/xmgl/modules/xz/entity/XzHikvisionSync.java index 925c30a59..c07cba484 100644 --- a/src/main/java/com/zhgd/xmgl/modules/xz/entity/XzHikvisionSync.java +++ b/src/main/java/com/zhgd/xmgl/modules/xz/entity/XzHikvisionSync.java @@ -1,18 +1,18 @@ package com.zhgd.xmgl.modules.xz.entity; -import java.io.Serializable; -import java.util.Date; - import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; -import lombok.Data; import com.fasterxml.jackson.annotation.JsonFormat; -import lombok.experimental.Accessors; -import org.springframework.format.annotation.DateTimeFormat; -import org.jeecgframework.poi.excel.annotation.Excel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.experimental.Accessors; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; /** * @Description: 星纵-海康同步数据 @@ -72,17 +72,24 @@ public class XzHikvisionSync implements Serializable { /** * 创建时间 */ - @Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") - @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss.SSS") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss.SSS") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS") @ApiModelProperty(value = "创建时间") private java.util.Date createDate; /** * 更新时间 */ - @Excel(name = "更新时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") - @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @Excel(name = "更新时间", width = 20, format = "yyyy-MM-dd HH:mm:ss.SSS") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss.SSS") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS") @ApiModelProperty(value = "更新时间") private java.util.Date updateDate; + + @TableField(exist = false) + @ApiModelProperty(value = "详情") + private java.lang.String detail; + @TableField(exist = false) + @ApiModelProperty(value = "设备名称") + private java.lang.String devName; } diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/mapper/XzHikvisionSyncMapper.java b/src/main/java/com/zhgd/xmgl/modules/xz/mapper/XzHikvisionSyncMapper.java index 245798b22..576bed06e 100644 --- a/src/main/java/com/zhgd/xmgl/modules/xz/mapper/XzHikvisionSyncMapper.java +++ b/src/main/java/com/zhgd/xmgl/modules/xz/mapper/XzHikvisionSyncMapper.java @@ -4,6 +4,9 @@ import org.apache.ibatis.annotations.Mapper; import com.zhgd.xmgl.modules.xz.entity.XzHikvisionSync; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import java.util.HashMap; +import java.util.List; + /** * @Description: 星纵-海康同步数据 * @author: pds @@ -13,4 +16,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; @Mapper public interface XzHikvisionSyncMapper extends BaseMapper { + List getNewestList(HashMap paramMap); } diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/mapper/xml/XzHikvisionSyncMapper.xml b/src/main/java/com/zhgd/xmgl/modules/xz/mapper/xml/XzHikvisionSyncMapper.xml index b6198ce16..d5b8b8015 100644 --- a/src/main/java/com/zhgd/xmgl/modules/xz/mapper/xml/XzHikvisionSyncMapper.xml +++ b/src/main/java/com/zhgd/xmgl/modules/xz/mapper/xml/XzHikvisionSyncMapper.xml @@ -1,4 +1,11 @@ + diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/service/IXzHikvisionSyncService.java b/src/main/java/com/zhgd/xmgl/modules/xz/service/IXzHikvisionSyncService.java index a0e346b43..83b9edc67 100644 --- a/src/main/java/com/zhgd/xmgl/modules/xz/service/IXzHikvisionSyncService.java +++ b/src/main/java/com/zhgd/xmgl/modules/xz/service/IXzHikvisionSyncService.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import java.util.HashMap; import java.util.List; +import java.util.Map; /** * @Description: 星纵-海康同步数据 @@ -24,4 +25,8 @@ public interface IXzHikvisionSyncService extends IService { void edit(XzHikvisionSync xzHikvisionSync); void delete(String id); + + List getNewestList(HashMap paramMap); + + void retry(Map paramMap) throws Exception; } diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/service/impl/XzHikvisionSyncServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/xz/service/impl/XzHikvisionSyncServiceImpl.java index 1776cc6e9..804dae353 100644 --- a/src/main/java/com/zhgd/xmgl/modules/xz/service/impl/XzHikvisionSyncServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/xz/service/impl/XzHikvisionSyncServiceImpl.java @@ -1,23 +1,34 @@ package com.zhgd.xmgl.modules.xz.service.impl; -import com.zhgd.jeecg.common.execption.OpenAlertException; -import com.zhgd.xmgl.modules.xz.entity.XzHikvisionSync; -import com.zhgd.xmgl.modules.xz.mapper.XzHikvisionSyncMapper; -import com.zhgd.xmgl.modules.xz.service.IXzHikvisionSyncService; -import org.springframework.stereotype.Service; +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.zhgd.jeecg.common.system.query.QueryGenerator; -import com.zhgd.xmgl.util.PageUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.zhgd.jeecg.common.execption.OpenAlertException; +import com.zhgd.jeecg.common.system.query.QueryGenerator; +import com.zhgd.xmgl.call.HikvisionCall; +import com.zhgd.xmgl.modules.project.entity.Project; +import com.zhgd.xmgl.modules.project.mapper.ProjectMapper; +import com.zhgd.xmgl.modules.worker.entity.WorkerInfo; +import com.zhgd.xmgl.modules.worker.mapper.WorkerInfoMapper; +import com.zhgd.xmgl.modules.xz.entity.XzHikvisionSync; +import com.zhgd.xmgl.modules.xz.mapper.XzHikvisionSyncMapper; +import com.zhgd.xmgl.modules.xz.service.IXzHikvisionSyncService; +import com.zhgd.xmgl.util.PageUtil; +import com.zhgd.xmgl.util.RefUtil; +import com.zhgd.xmgl.util.ThreadLocalUtil; +import org.apache.commons.collections.MapUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import java.util.Date; import java.util.HashMap; import java.util.List; - -import com.zhgd.xmgl.util.RefUtil; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.beans.factory.annotation.Autowired; +import java.util.Map; /** * @Description: 星纵-海康同步数据 @@ -28,8 +39,14 @@ import org.springframework.beans.factory.annotation.Autowired; @Service @Transactional(rollbackFor = Exception.class) public class XzHikvisionSyncServiceImpl extends ServiceImpl implements IXzHikvisionSyncService { + @Autowired + private HikvisionCall hikvisionCall; @Autowired private XzHikvisionSyncMapper xzHikvisionSyncMapper; + @Autowired + private WorkerInfoMapper workerInfoMapper; + @Autowired + private ProjectMapper projectMapper; @Override public IPage queryPageList(HashMap paramMap) { @@ -81,5 +98,120 @@ public class XzHikvisionSyncServiceImpl extends ServiceImpl getNewestList(HashMap paramMap) { + List newestList = baseMapper.getNewestList(paramMap); + for (XzHikvisionSync xzHikvisionSync : newestList) { + Integer operate = xzHikvisionSync.getOperate(); + Integer type = xzHikvisionSync.getType(); + Integer isSuccess = xzHikvisionSync.getIsSuccess(); + String devName = xzHikvisionSync.getDevName(); + String deviceSn = xzHikvisionSync.getDeviceSn(); + if (StrUtil.isBlank(deviceSn)) { + xzHikvisionSync.setDetail(StrUtil.format("{}{}到ISC{}", getOperateName(operate), getTypeName(type), getIsSuccessName(isSuccess))); + } else { + xzHikvisionSync.setDetail(StrUtil.format("{}{}到{}{}", getOperateNameForDev(operate), getTypeName(type), devName, getIsSuccessName(isSuccess))); + } + } + return newestList; + } + + private String getIsSuccessName(Integer isSuccess) { + return isSuccess == 1 ? "成功" : "失败"; + } + + private String getTypeName(Integer type) { + switch (type) { + case 1: + return "人员"; + case 2: + return "人员照片"; + case 3: + return "人员权限"; + } + return null; + } + + private String getOperateNameForDev(Integer operate) { + switch (operate) { + case 1: + return "下发"; + case 3: + return "取消下发"; + } + return null; + } + + private String getOperateName(Integer operate) { + switch (operate) { + case 1: + return "新增"; + case 2: + return "修改"; + case 3: + return "删除"; + } + return null; + } + + @Override + @Transactional(propagation = Propagation.NOT_SUPPORTED) + public void retry(Map paramMap) throws Exception { + Long id = MapUtils.getLong(paramMap, "id"); + XzHikvisionSync xzHikvisionSync = baseMapper.selectById(id); + if (xzHikvisionSync == null) { + throw new OpenAlertException("未找到对应实体"); + } + Long whoId = xzHikvisionSync.getWhoId(); + WorkerInfo workerInfo = workerInfoMapper.selectById(whoId); + Project p = projectMapper.selectOne(new LambdaQueryWrapper() + .eq(Project::getProjectSn, workerInfo.getProjectSn()) + .eq(Project::getSyncHikvision, 1) + ); + if (workerInfo == null) { + return; + } + if (p == null) { + return; + } + if (xzHikvisionSync.getType() == 1) { + if (xzHikvisionSync.getOperate() == 1) { + hikvisionCall.addWorkerFromHttp(workerInfo, p); + } else if (xzHikvisionSync.getOperate() == 2) { + hikvisionCall.editWorkerFromHttp(workerInfo, p); + } else if (xzHikvisionSync.getOperate() == 3) { + hikvisionCall.deleteWorkerFromHttp(workerInfo, p); + } + } else if (xzHikvisionSync.getType() == 2) { + if (xzHikvisionSync.getOperate() == 1) { + hikvisionCall.addWorkerFace(workerInfo, p); + } else if (xzHikvisionSync.getOperate() == 2) { + hikvisionCall.editWorkerFromHttp(workerInfo, p); + } else if (xzHikvisionSync.getOperate() == 3) { + hikvisionCall.deleteWorkerFromHttp(workerInfo, p); + } + } else if (xzHikvisionSync.getType() == 3) { + StringBuilder sucSb = new StringBuilder(); + StringBuilder failSb = new StringBuilder(); + if (xzHikvisionSync.getOperate() == 1) { + hikvisionCall.updatePersonAuth(workerInfo, xzHikvisionSync.getDeviceSn(), sucSb, failSb, 0); + } else if (xzHikvisionSync.getOperate() == 3) { + hikvisionCall.updatePersonAuth(workerInfo, xzHikvisionSync.getDeviceSn(), sucSb, failSb, 2); + } + } + + XzHikvisionSync xzHikvisionSync1 = baseMapper.selectById(id); + if (xzHikvisionSync1.getIsSuccess() == 0) { + throw new OpenAlertException("重试失败"); + } + + } + + public static void main(String[] args) { + Date val = new Date(); + ThreadLocalUtil.addInKey("now", val); + Date now = ThreadLocalUtil.getNotNull().getDate("now"); + System.out.println(val == now); + } }