446 lines
19 KiB
Java
446 lines
19 KiB
Java
package com.zhgd.xmgl.async;
|
||
|
||
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.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.Date;
|
||
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);
|
||
}
|
||
}
|
||
|
||
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(), StringUtils.substring(msg, 0, msg.length() - 1), title, type);
|
||
}
|
||
} catch (Exception e) {
|
||
log.error("海康:", e);
|
||
}
|
||
}
|
||
}
|