package com.zhgd.xmgl.async; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.zhgd.jeecg.common.execption.OpenPromptException; import com.zhgd.jeecg.common.util.pass.HttpUtils; import com.zhgd.xmgl.call.HikvisionCall; import com.zhgd.xmgl.modules.basicdata.service.INoticeService; import com.zhgd.xmgl.modules.car.entity.CarInfo; import com.zhgd.xmgl.modules.project.entity.Project; import com.zhgd.xmgl.modules.project.entity.ProjectVideoConfig; import com.zhgd.xmgl.modules.video.entity.ProjectVideoHkVqd; import com.zhgd.xmgl.modules.video.entity.VideoItem; import com.zhgd.xmgl.modules.video.mapper.ProjectVideoHkVqdMapper; import com.zhgd.xmgl.modules.video.mapper.VideoItemMapper; import com.zhgd.xmgl.modules.worker.entity.DepartmentInfo; import com.zhgd.xmgl.modules.worker.entity.EnterpriseInfo; import com.zhgd.xmgl.modules.worker.entity.TeamInfo; import com.zhgd.xmgl.modules.worker.entity.WorkerInfo; import com.zhgd.xmgl.modules.worker.mapper.EnterpriseInfoMapper; import com.zhgd.xmgl.modules.xz.entity.XzHikvisionSync; import com.zhgd.xmgl.modules.xz.mapper.XzHikvisionSyncMapper; import com.zhgd.xmgl.security.util.SecurityUtils; import com.zhgd.xmgl.util.ThreadLocalUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Objects; /** * 海康 */ @Slf4j @Component public class AsyncHikvision { @Autowired @Lazy HikvisionCall hikvisionCall; @Lazy @Autowired VideoItemMapper videoItemMapper; @Lazy @Autowired ProjectVideoHkVqdMapper projectVideoHkVqdMapper; @Lazy @Autowired EnterpriseInfoMapper enterpriseInfoMapper; @Lazy @Autowired private INoticeService noticeService; @Lazy @Autowired private AsyncHikvision asyncHikvision; @Lazy @Autowired private XzHikvisionSyncMapper xzHikvisionSyncMapper; /** * 添加劳务人员-海康 * * @param workerInfo * @param now */ @Async("hikvisionExecutor") public void addWorkerForHikvisionAsync(WorkerInfo workerInfo, Date now) { try { ThreadLocalUtil.addInKey("now", now); hikvisionCall.addWorkerForHikvision(workerInfo); } catch (Exception e) { log.error("海康:", e); sendNoticeForWorker(workerInfo, e, "添加"); } } public void addWorkerForHikvision(WorkerInfo workerInfo) { Date now = ThreadLocalUtil.getNotNull().getDate("now"); xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(workerInfo.getProjectSn()).setType(1).setOperate(1).setWhoId(workerInfo.getId()).setCreateDate(now)); xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(workerInfo.getProjectSn()).setType(2).setOperate(1).setWhoId(workerInfo.getId()).setCreateDate(now)); asyncHikvision.addWorkerForHikvisionAsync(workerInfo, now); } @Async("hikvisionExecutor") public void editWorkerForHikvisionAsync(WorkerInfo workerInfo, Date now) { try { ThreadLocalUtil.addInKey("now", now); hikvisionCall.editWorkerForHikvision(workerInfo); } catch (Exception e) { log.error("海康:", e); sendNoticeForWorker(workerInfo, e, "更新"); } } public void editWorkerForHikvision(WorkerInfo workerInfo) { Date now = ThreadLocalUtil.getNotNull().getDate("now"); xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(workerInfo.getProjectSn()).setType(1).setOperate(2).setWhoId(workerInfo.getId()).setCreateDate(now)); xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(workerInfo.getProjectSn()).setType(2).setOperate(2).setWhoId(workerInfo.getId()).setCreateDate(now)); asyncHikvision.editWorkerForHikvisionAsync(workerInfo, now); } private void sendNoticeForWorker(WorkerInfo workerInfo, Exception e, String action) { String title = action + "人员到海康isc失败"; String type = "23"; String msg; if (HttpUtils.isTimeOut(e)) { msg = "同步失败,人员名称:" + workerInfo.getWorkerName() + ",身份证号:" + workerInfo.getIdCard() + "。失败原因:平台连接isc网络异常"; } else if (e instanceof OpenPromptException) { msg = "同步失败,人员名称:" + workerInfo.getWorkerName() + ",身份证号:" + workerInfo.getIdCard() + "。失败原因:" + e.getMessage(); } else { msg = "同步失败,人员名称:" + workerInfo.getWorkerName() + ",身份证号:" + workerInfo.getIdCard() + "。失败原因:下发异常"; } if (SecurityUtils.getUser() != null && SecurityUtils.getUser().getUserId() != null) { noticeService.addUserNotice(SecurityUtils.getUser().getUserId(), msg, title, type); } } @Async("hikvisionExecutor") public void deleteWorkerForHikvisionAsync(WorkerInfo workerInfo, Date now) { try { ThreadLocalUtil.addInKey("now", now); hikvisionCall.deleteWorkerForHikvision(workerInfo); } catch (Exception e) { log.error("海康:", e); sendNoticeForWorker(workerInfo, e, "删除"); } } public void deleteWorkerForHikvision(WorkerInfo workerInfo) { Date now = ThreadLocalUtil.getNotNull().getDate("now"); xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(workerInfo.getProjectSn()).setType(1).setOperate(3).setWhoId(workerInfo.getId()).setCreateDate(now)); xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(workerInfo.getProjectSn()).setType(2).setOperate(3).setWhoId(workerInfo.getId()).setCreateDate(now)); asyncHikvision.deleteWorkerForHikvisionAsync(workerInfo, now); } public void addCarInfoForHikvision(CarInfo carInfo) { Date now = new Date(); if (Objects.equals(carInfo.getCarModuleType(), 1)) { xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(carInfo.getProjectSn()).setType(4).setOperate(1).setWhoId(carInfo.getId()).setCreateDate(now)); xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(carInfo.getProjectSn()).setType(5).setOperate(1).setWhoId(carInfo.getId()).setCreateDate(now)); } else if (Objects.equals(carInfo.getCarModuleType(), 2) || Objects.equals(carInfo.getCarModuleType(), 3)) { xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(carInfo.getProjectSn()).setType(6).setOperate(1).setWhoId(carInfo.getId()).setCreateDate(now)); } asyncHikvision.addCarInfoForHikvisionAsyc(carInfo, now); } @Async("carInfoExecutor") public void addCarInfoForHikvisionAsyc(CarInfo carInfo, Date now) { try { ThreadLocalUtil.addInKey("now", now); hikvisionCall.saveCarInfoFromHikvision(carInfo); } catch (Exception e) { log.error("海康:", e); sendNoticeForCar(carInfo, e, "添加"); } } private void sendNoticeForCar(CarInfo carInfo, Exception e, String action) { String title = action + "车辆到海康isc失败"; String type = "24"; String msg = null; if (HttpUtils.isTimeOut(e)) { msg = "同步失败,车牌号:" + carInfo.getCarNumber() + "。失败原因:平台连接isc网络异常"; } else if (e instanceof OpenPromptException) { msg = "同步失败,车牌号:" + carInfo.getCarNumber() + "。失败原因:" + e.getMessage(); } else { msg = "同步失败,车牌号:" + carInfo.getCarNumber() + "。失败原因:下发异常"; } if (SecurityUtils.getUser() != null && SecurityUtils.getUser().getUserId() != null) { noticeService.addUserNotice(SecurityUtils.getUser().getUserId(), msg, title, type); } } public void editCarInfoForHikvision(CarInfo carInfo, CarInfo old) { Date now = new Date(); if (Objects.equals(carInfo.getCarModuleType(), 1)) { xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(carInfo.getProjectSn()).setType(4).setOperate(2).setWhoId(carInfo.getId()).setCreateDate(now)); xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(carInfo.getProjectSn()).setType(5).setOperate(1).setWhoId(carInfo.getId()).setCreateDate(now)); } else if (Objects.equals(carInfo.getCarModuleType(), 2) || Objects.equals(carInfo.getCarModuleType(), 3)) { xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(carInfo.getProjectSn()).setType(6).setOperate(1).setWhoId(carInfo.getId()).setCreateDate(now)); } asyncHikvision.editCarInfoForHikvisionAsync(carInfo, old, now); } @Async("carInfoExecutor") public void editCarInfoForHikvisionAsync(CarInfo carInfo, CarInfo old, Date now) { try { ThreadLocalUtil.addInKey("now", now); hikvisionCall.editCarInfoForHikvision(carInfo, old); } catch (Exception e) { log.error("海康:", e); sendNoticeForCar(carInfo, e, "编辑"); } } public void deleteCarInfoForHikvision(CarInfo carInfo) { Date now = new Date(); xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(carInfo.getProjectSn()).setType(4).setOperate(3).setWhoId(carInfo.getId()).setCreateDate(now)); xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(carInfo.getProjectSn()).setType(5).setOperate(3).setWhoId(carInfo.getId()).setCreateDate(now)); xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(carInfo.getProjectSn()).setType(6).setOperate(3).setWhoId(carInfo.getId()).setCreateDate(now)); asyncHikvision.deleteCarInfoForHikvisionAsync(carInfo, now); } @Async("carInfoExecutor") public void deleteCarInfoForHikvisionAsync(CarInfo carInfo, Date now) { try { ThreadLocalUtil.addInKey("now", now); hikvisionCall.deleteCarInfoForHikvision(carInfo); } catch (Exception e) { log.error("海康:", e); sendNoticeForCar(carInfo, e, "删除"); } } @Async("carInfoExecutor") public void addEnterpriseInfoForHikvision(EnterpriseInfo enterpriseInfo) { try { hikvisionCall.addEnterpriseInfoForHikvision(enterpriseInfo); } catch (Exception e) { log.error("海康:", e); sendNoticeForOrg(enterpriseInfo.getEnterpriseName(), e, "新增"); } } private void sendNoticeForOrg(String name, Exception e, String action) { String title = action + "组织到海康isc失败"; String type = "23"; String msg; if (HttpUtils.isTimeOut(e)) { msg = "同步失败,组织名称:" + name + "。失败原因:平台连接isc网络异常"; } else if (e instanceof OpenPromptException) { msg = "同步失败,组织名称:" + name + "。失败原因:" + e.getMessage(); } else { msg = "同步失败,组织名称:" + name + "。失败原因:下发异常"; } if (SecurityUtils.getUser() != null && SecurityUtils.getUser().getUserId() != null) { noticeService.addUserNotice(SecurityUtils.getUser().getUserId(), msg, title, type); } } @Async("carInfoExecutor") public void editEnterpriseInfoForHikvision(EnterpriseInfo enterpriseInfo) { try { hikvisionCall.editEnterpriseInfoForHikvision(enterpriseInfo); } catch (Exception e) { log.error("海康:", e); sendNoticeForOrg(enterpriseInfo.getEnterpriseName(), e, "编辑"); } } @Async("carInfoExecutor") public void deleteEnterpriseInfoForHikvision(String enterpriseId, String projectSn) { try { hikvisionCall.deleteEnterpriseInfoForHikvision(enterpriseId, projectSn); } catch (Exception e) { log.error("海康:", e); EnterpriseInfo enterpriseInfo = enterpriseInfoMapper.selectById(enterpriseId); if (enterpriseInfo != null) { sendNoticeForOrg(enterpriseInfo.getEnterpriseName(), e, "删除"); } } } @Async("carInfoExecutor") public void editTeamInfoForHikvision(TeamInfo teamInfo) { try { hikvisionCall.editTeamInfoForHikvision(teamInfo); } catch (Exception e) { log.error("海康:", e); sendNoticeForOrg(teamInfo.getTeamName(), e, "编辑"); } } @Async("carInfoExecutor") public void deleteTeamInfoForHikvision(TeamInfo teamInfo) { try { hikvisionCall.deleteTeamInfoForHikvision(teamInfo); } catch (Exception e) { log.error("海康:", e); sendNoticeForOrg(teamInfo.getTeamName(), e, "删除"); } } @Async("carInfoExecutor") public void addTeamInfoForHikvision(TeamInfo teamInfo) { try { hikvisionCall.addTeamInfoForHikvision(teamInfo); } catch (Exception e) { log.error("海康:", e); sendNoticeForOrg(teamInfo.getTeamName(), e, "新增"); } } @Async("carInfoExecutor") public void editDepartmentInfoForHikvision(DepartmentInfo teamInfo) { try { hikvisionCall.editDepartmentInfoForHikvision(teamInfo); } catch (Exception e) { log.error("海康:", e); sendNoticeForOrg(teamInfo.getDepartmentName(), e, "编辑"); } } @Async("carInfoExecutor") public void addDepartmentInfoForHikvision(DepartmentInfo teamInfo) { try { hikvisionCall.addDepartmentInfoForHikvision(teamInfo); } catch (Exception e) { log.error("海康:", e); sendNoticeForOrg(teamInfo.getDepartmentName(), e, "新增"); } } @Async("carInfoExecutor") public void deleteDepartmentInfoForHikvision(DepartmentInfo teamInfo) { try { hikvisionCall.deleteDepartmentInfoForHikvision(teamInfo); } catch (Exception e) { log.error("海康:", e); sendNoticeForOrg(teamInfo.getDepartmentName(), e, "删除"); } } @Async("carInfoExecutor") public void editProjectForHikvision(Project project) { try { hikvisionCall.editProjectForHikvision(project); } catch (Exception e) { log.error("海康:", e); sendNoticeForOrg(project.getProjectName(), e, "编辑"); } } public void addPersonAuth(WorkerInfo workerInfo, String devSn) { if (StringUtils.isBlank(devSn)) { return; } Date now = ThreadLocalUtil.getNotNull().getDate("now"); String[] devSnArr = StringUtils.split(devSn, ","); for (String ds : devSnArr) { xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(workerInfo.getProjectSn()).setType(3).setOperate(1).setWhoId(workerInfo.getId()).setDeviceSn(ds).setCreateDate(now)); } asyncHikvision.addPersonAuthAsync(workerInfo, devSn, now); } @Async("hikvisionExecutor") public void addPersonAuthAsync(WorkerInfo workerInfo, String devSn, Date now) { try { ThreadLocalUtil.addInKey("now", now); StringBuilder sucSb = new StringBuilder(); StringBuilder failSb = new StringBuilder(); String[] devSnArr = StringUtils.split(devSn, ","); try { for (String ds : devSnArr) { hikvisionCall.updatePersonAuth(workerInfo, ds, sucSb, failSb, 0); } } catch (Exception e) { if (HttpUtils.isTimeOut(e)) { noticeService.addUserNotice(SecurityUtils.getUser().getUserId(), "失败原因:平台连接isc网络异常", "人员下发设备提醒", "1"); } else { noticeService.addUserNotice(SecurityUtils.getUser().getUserId(), e.getMessage(), "人员下发设备提醒", "1"); } return; } String title = "人员下发设备提醒"; String type = "1"; String msg = ""; String sucSbStr = sucSb.toString(); if (StringUtils.isNotBlank(sucSbStr)) { sucSbStr = "下发权限成功:" + sucSbStr; msg += sucSbStr; } String failSbStr = failSb.toString(); if (StringUtils.isNotBlank(failSbStr)) { failSbStr = "下发权限失败:" + failSbStr; msg += failSbStr; } if (SecurityUtils.getUser() != null && SecurityUtils.getUser().getUserId() != null) { noticeService.addUserNotice(SecurityUtils.getUser().getUserId(), StringUtils.substring(msg, 0, msg.length() - 1), title, type); } } catch (Exception e) { log.error("海康:", e); } } /** * 删除 * * @param workerInfo * @param devSns */ public void deletePersonAuth(WorkerInfo workerInfo, String devSns) { if (StringUtils.isBlank(devSns)) { return; } Date now = ThreadLocalUtil.getNotNull().getDate("now"); String[] devSnArr = StringUtils.split(devSns, ","); for (String ds : devSnArr) { xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(workerInfo.getProjectSn()).setType(3).setOperate(3).setWhoId(workerInfo.getId()).setDeviceSn(ds).setCreateDate(now)); } asyncHikvision.deletePersonAuthAsync(workerInfo, devSns, now); } @Async("hikvisionExecutor") public void deletePersonAuthAsync(WorkerInfo workerInfo, String devSn, Date now) { try { if (StringUtils.isBlank(devSn)) { return; } ThreadLocalUtil.addInKey("now", now); StringBuilder sucSb = new StringBuilder(); StringBuilder failSb = new StringBuilder(); String[] devSnArr = StringUtils.split(devSn, ","); try { for (String ds : devSnArr) { hikvisionCall.updatePersonAuth(workerInfo, ds, sucSb, failSb, 2); } } catch (Exception e) { if (HttpUtils.isTimeOut(e)) { noticeService.addUserNotice(SecurityUtils.getUser().getUserId(), "网络异常", "人员下发设备提醒", "1"); } else { noticeService.addUserNotice(SecurityUtils.getUser().getUserId(), e.getMessage(), "人员下发设备提醒", "1"); } return; } String title = "人员下发设备提醒"; String type = "1"; String msg = ""; String sucSbStr = sucSb.toString(); if (StringUtils.isNotBlank(sucSbStr)) { sucSbStr = "移除权限成功:" + sucSbStr; msg += sucSbStr + ","; } String failSbStr = failSb.toString(); if (StringUtils.isNotBlank(failSbStr)) { failSbStr = "移除权限失败:" + failSbStr; msg += failSbStr + ","; } if (SecurityUtils.getUser() != null && SecurityUtils.getUser().getUserId() != null) { noticeService.addUserNotice(SecurityUtils.getUser().getUserId(), msg, title, type); } } catch (Exception e) { log.error("海康:", e); } } }