海康下发修改

This commit is contained in:
GUO 2024-06-16 11:51:58 +08:00
parent 5c4ea16ad9
commit e003e303e1
6 changed files with 90 additions and 85 deletions

View File

@ -2,20 +2,21 @@ package com.zhgd.netty.tcp.listener;
import io.netty.util.concurrent.Future;
import io.netty.util.concurrent.GenericFutureListener;
import lombok.extern.slf4j.Slf4j;
/**
* @author chenws
* @date 2020/03/17 15:58:10
*/
@Slf4j
public class BindListener implements GenericFutureListener<Future<? super Void>> {
@Override
public void operationComplete(Future future) throws Exception {
if (future.isSuccess()) {
System.out.println("绑定成功");
} else {
//打印错误信息也可自定义处理
future.cause().printStackTrace();
log.error("", future.cause());
}
}
}

View File

@ -37,8 +37,6 @@ 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 org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.concurrent.Future;
@ -689,7 +687,6 @@ public class AsyncHikvision {
* @param addAuthWorkerIds
* @param sendNotice
*/
@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
public void handlerBatchWorkersResult(Map<String, WorkerInfo> workerIdMap, Map<String, UfaceDev> devSnMap, JSONArray qaiList, int i, String devSn, String projectSn, List<String> addAuthWorkerIds, boolean sendNotice) {
JSONObject jo = qaiList.getJSONObject(i);
String personId = jo.getString("personId");

View File

@ -1166,11 +1166,11 @@ public class HikvisionCall {
*/
public void updateAllFailStatusIfNullForAuth(String projectSn, List<WorkerInfo> workerList, Integer bigType, Integer operate) {
for (WorkerInfo workerInfo : workerList) {
updateAllFailStatusIfNullForAuth(projectSn, workerInfo.getId(), bigType, operate);
hikvisionCall.updateAllFailStatusIfNullForAuth(projectSn, workerInfo.getId(), bigType, operate);
}
}
@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
@Transactional(rollbackFor = Exception.class)
public void updateAllFailStatusIfNullForAuth(String projectSn, Long whoId, Integer bigType, Integer operate) {
xzHikvisionSyncMapper.update(null, new LambdaUpdateWrapper<XzHikvisionSync>()
.set(XzHikvisionSync::getIsSuccess, 0)
@ -1180,7 +1180,7 @@ public class HikvisionCall {
.eq(XzHikvisionSync::getProjectSn, projectSn)
.eq(XzHikvisionSync::getWhoId, whoId)
);
updateTotalStatus(projectSn, whoId, bigType);
this.updateTotalStatus(projectSn, whoId, bigType);
}
@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
@ -1212,7 +1212,7 @@ public class HikvisionCall {
updateStatus(projectSn, whoId, type, operate, deviceSn, true);
}
@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
@Transactional(rollbackFor = Exception.class)
public void updateStatus(String projectSn, Long whoId, Integer type, Integer operate, String deviceSn, Boolean isSuccess) {
LambdaQueryWrapper<XzHikvisionSync> queryWrapper = new LambdaQueryWrapper<XzHikvisionSync>()
.eq(XzHikvisionSync::getProjectSn, projectSn)

View File

@ -24,8 +24,8 @@ import org.apache.commons.collections.MapUtils;
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.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.text.SimpleDateFormat;
import java.util.Date;
@ -40,13 +40,15 @@ import java.util.Map;
*/
@Service
public class NoticeServiceImpl extends ServiceImpl<NoticeMapper, Notice> implements INoticeService {
@Lazy
@Autowired
NoticeServiceImpl noticeService;
@Autowired
private NoticeMapper noticeMapper;
@Autowired
private IMqttSender mqttPushClient;
@Autowired
private SystemUserMapper systemUserMapper;
@Value("${mqtt-scope}")
private String scope;
@Lazy
@ -73,7 +75,7 @@ public class NoticeServiceImpl extends ServiceImpl<NoticeMapper, Notice> impleme
public void addNotice(Notice notice, boolean isSendMqtt) {
noticeMapper.insert(notice);
if (isSendMqtt) {
sendMqttMessage(notice);
noticeService.sendMqttMessage(notice);
}
}
@ -95,7 +97,7 @@ public class NoticeServiceImpl extends ServiceImpl<NoticeMapper, Notice> impleme
notice.setType(type);
notice.setPayload(payload);
noticeMapper.insert(notice);
sendMqttMessage(notice);
noticeService.sendMqttMessage(notice);
}
@Override
@ -153,6 +155,7 @@ public class NoticeServiceImpl extends ServiceImpl<NoticeMapper, Notice> impleme
}
@Override
@Async("sendBatchExecutor")
public void sendMqttMessage(Notice notice) {
sendMqttMessage(notice, "");
}

View File

@ -33,6 +33,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
@ -63,6 +64,9 @@ public class ProjectUfaceConfigServiceImpl extends ServiceImpl<ProjectUfaceConfi
IUfaceDevService ufaceDevService;
@Lazy
@Autowired
ProjectUfaceConfigServiceImpl projectUfaceConfigService;
@Lazy
@Autowired
private WorkerInfoServiceImpl workerInfoService;
@Autowired
private ProjectUfaceConfigMapper projectUfaceConfigMapper;
@ -485,7 +489,13 @@ public class ProjectUfaceConfigServiceImpl extends ServiceImpl<ProjectUfaceConfi
* @param devSns
*/
@Override
@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
public void addHkSyncRecordsAndUpdateWorkerStatus(WorkerInfo workerInfo, String devSns) {
//清除以前的记录
xzHikvisionSyncMapper.delete(new LambdaQueryWrapper<XzHikvisionSync>()
.eq(XzHikvisionSync::getBigType, 1)
.eq(XzHikvisionSync::getWhoId, workerInfo.getId())
);
for (String ds : StrUtil.split(devSns, ",")) {
xzHikvisionSyncMapper.insert(new XzHikvisionSync().setProjectSn(workerInfo.getProjectSn()).setType(3).setOperate(1).setWhoId(workerInfo.getId()).setDeviceSn(ds).setBigType(1).setCreateDate(getSyncTimeWithInitAndDeleteSyncIfAbsent(1, workerInfo.getId())));
}
@ -501,6 +511,7 @@ public class ProjectUfaceConfigServiceImpl extends ServiceImpl<ProjectUfaceConfi
* @param userId
*/
@Override
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public void buildAndSendBatchWorkerForHk(ProjectUfaceConfig projectUfaceConfig, List<UfaceDev> allDevList, List<WorkerInfo> workerList, Long userId) {
//构建workerAndDevSnList
List<JSONObject> workerAndDevSnList = new ArrayList<>();
@ -513,12 +524,7 @@ public class ProjectUfaceConfigServiceImpl extends ServiceImpl<ProjectUfaceConfi
Pair<String, String> devSnsAndDevIdsPair = this.getBatchDevSnsAndDevIds(workerInfo, allDevList);
if (devSnsAndDevIdsPair.getRight() != null) {
String devSns = devSnsAndDevIdsPair.getLeft();
//清除以前的记录
xzHikvisionSyncMapper.delete(new LambdaQueryWrapper<XzHikvisionSync>()
.eq(XzHikvisionSync::getBigType, 1)
.eq(XzHikvisionSync::getWhoId, workerInfo.getId())
);
this.addHkSyncRecordsAndUpdateWorkerStatus(workerInfo, devSns);
projectUfaceConfigService.addHkSyncRecordsAndUpdateWorkerStatus(workerInfo, devSns);
List<String> devSnList = StrUtil.split(devSns, ",");
for (String devSn : devSnList) {
JSONObject jo = new JSONObject();

View File

@ -70,6 +70,7 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Lazy;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
@ -106,6 +107,8 @@ public class WorkerInfoServiceImpl extends ServiceImpl<WorkerInfoMapper, WorkerI
@Autowired
IWorkerSafeEducationWorkerService workerSafeEducationWorkerService;
@Autowired
WorkerInfoServiceImpl workerInfoService;
@Autowired
private IDictionaryItemService dictionaryItemService;
@Autowired
private InspectTaskRecordMapper inspectTaskRecordMapper;
@ -918,7 +921,6 @@ public class WorkerInfoServiceImpl extends ServiceImpl<WorkerInfoMapper, WorkerI
return data;
}
@Override
public ProjectWorkerStatisticsVo selectProjectWorkerStatistics(Map<String, Object> map) {
Map<String, Object> data = new HashMap<>();
@ -1350,7 +1352,6 @@ public class WorkerInfoServiceImpl extends ServiceImpl<WorkerInfoMapper, WorkerI
return workerInfoMapper.getWorkerInfoList(map);
}
/**
* 查询劳务人员和管理人员列表
*
@ -1425,7 +1426,6 @@ public class WorkerInfoServiceImpl extends ServiceImpl<WorkerInfoMapper, WorkerI
}
public void addOrEditWork(Map<String, Object> work, Map<String, Object> info, Integer type) {
WorkerInfo workerInfo = new WorkerInfo();
workerInfo.setWorkerName(MapUtils.getString(work, "name"));
@ -1602,7 +1602,6 @@ public class WorkerInfoServiceImpl extends ServiceImpl<WorkerInfoMapper, WorkerI
}
}
@Override
public void exporExcelWorkerTemplate(HttpServletResponse response, String projectSn) {
List<EntityMap> teamList = teamInfoMapper.selectTeamInfoBySnList(projectSn);
@ -1632,6 +1631,7 @@ public class WorkerInfoServiceImpl extends ServiceImpl<WorkerInfoMapper, WorkerI
}
@Override
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public Result uploadExcelWorkerInfo(MultipartFile excelFile, String projectSn) {
Result<String> result = new Result<String>();
StringBuilder existName = new StringBuilder("");
@ -1765,17 +1765,15 @@ public class WorkerInfoServiceImpl extends ServiceImpl<WorkerInfoMapper, WorkerI
continue;
}
workerInfo.setId(oldWorkerInfo.getId());
workerInfoMapper.updateById(workerInfo);
//同步海康
this.editWorkerForHikvision(workerInfo);
workerInfoService.editWorkerInfo(workerInfo);
} else {
String uuid = UUID.randomUUID().toString().replace("-", "").toUpperCase();
workerInfo.setPersonSn(uuid);
workerInfo.setAddTime(new Date());
workerInfo.setAttendanceNumber(workerInfo.getIdCard());
workerInfoMapper.insert(workerInfo);
//同步海康
this.addWorkerForHikvision(workerInfo);
workerInfoService.saveWorkerInfo(workerInfo);
}
asyncJiLianDa.saveWorkerInfo(workerInfo);
}
@ -2056,38 +2054,6 @@ public class WorkerInfoServiceImpl extends ServiceImpl<WorkerInfoMapper, WorkerI
return vo;
}
/**
* 只需要实现全量更新设备这边是全量更新的人员删除后直接从白名单中删除就行现在不是通过del这个标志判断的这个标志应该是后面加的设备最早不是按这个标志判断的
* 比如之前有3个人后面xxx人员退场了白名单就返回剩下的两个人就行因为默认都是全量的增量更新需要专门开启实现了全量就可以了
*/
@Override
public String getWorkerInfoByDev(GetWorkerInfoByDevDto dto) {
String deviceId = dto.getDeviceId();
UfaceDev dev = ufaceDevMapper.selectOne(new LambdaQueryWrapper<UfaceDev>()
.eq(UfaceDev::getDevSn, deviceId));
if (dev == null) {
throw new OpenAlertException("设备编号不存在");
}
String projectSn = dev.getProjectSn();
List<WorkerInfo> workerInfos = workerInfoMapper.selectList(new LambdaQueryWrapper<WorkerInfo>()
.eq(WorkerInfo::getProjectSn, projectSn)
.eq(WorkerInfo::getInserviceType, 1)
);
//添加人员
ArrayList<GetWorkerInfoByDevVo.Worker> datas = new ArrayList<>();
addDatas(workerInfos, "0", datas);
GetWorkerInfoByDevVo getWorkerInfoByDevVo = new GetWorkerInfoByDevVo();
getWorkerInfoByDevVo.setSuccess(true);
getWorkerInfoByDevVo.setCode(0);
getWorkerInfoByDevVo.setMessage("success");
getWorkerInfoByDevVo.setTime(System.currentTimeMillis() / 1000);
getWorkerInfoByDevVo.setData(datas);
getWorkerInfoByDevVo.setEvent("workers");
return JSON.toJSONString(getWorkerInfoByDevVo);
}
///*
//全量和增量更新
// */
@ -2137,12 +2103,45 @@ public class WorkerInfoServiceImpl extends ServiceImpl<WorkerInfoMapper, WorkerI
// return JSON.toJSONString(getWorkerInfoByDevVo);
//}
/**
* 只需要实现全量更新设备这边是全量更新的人员删除后直接从白名单中删除就行现在不是通过del这个标志判断的这个标志应该是后面加的设备最早不是按这个标志判断的
* 比如之前有3个人后面xxx人员退场了白名单就返回剩下的两个人就行因为默认都是全量的增量更新需要专门开启实现了全量就可以了
*/
@Override
public String getWorkerInfoByDev(GetWorkerInfoByDevDto dto) {
String deviceId = dto.getDeviceId();
UfaceDev dev = ufaceDevMapper.selectOne(new LambdaQueryWrapper<UfaceDev>()
.eq(UfaceDev::getDevSn, deviceId));
if (dev == null) {
throw new OpenAlertException("设备编号不存在");
}
String projectSn = dev.getProjectSn();
List<WorkerInfo> workerInfos = workerInfoMapper.selectList(new LambdaQueryWrapper<WorkerInfo>()
.eq(WorkerInfo::getProjectSn, projectSn)
.eq(WorkerInfo::getInserviceType, 1)
);
//添加人员
ArrayList<GetWorkerInfoByDevVo.Worker> datas = new ArrayList<>();
addDatas(workerInfos, "0", datas);
GetWorkerInfoByDevVo getWorkerInfoByDevVo = new GetWorkerInfoByDevVo();
getWorkerInfoByDevVo.setSuccess(true);
getWorkerInfoByDevVo.setCode(0);
getWorkerInfoByDevVo.setMessage("success");
getWorkerInfoByDevVo.setTime(System.currentTimeMillis() / 1000);
getWorkerInfoByDevVo.setData(datas);
getWorkerInfoByDevVo.setEvent("workers");
return JSON.toJSONString(getWorkerInfoByDevVo);
}
@Override
public CountEntryAndExitNumVo countEntryAndExitNum(Map<String, Object> map) {
return baseMapper.countEntryAndExitNum(map);
}
@Override
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public void uploadWorkerInfoImgs(MultipartFile file, String projectSn) throws IOException {
String folder = basePath + "/" + IdUtil.simpleUUID();
File folderFile = new File(folder);
@ -2158,9 +2157,14 @@ public class WorkerInfoServiceImpl extends ServiceImpl<WorkerInfoMapper, WorkerI
StringBuilder formatSb = new StringBuilder();
StringBuilder failSb = new StringBuilder();
StringBuilder sucSb = new StringBuilder();
List<WorkerInfo> allEditWorkerInfos = new ArrayList<>();
for (int i = 0; i < files.length; i++) {
File f = files[i];
traverseFile(f.getAbsolutePath(), formatSb, failSb, sucSb);
List<WorkerInfo> editWorkerInfos = getEditWorkerInfos(f.getAbsolutePath(), formatSb, sucSb, projectSn);
allEditWorkerInfos.addAll(editWorkerInfos);
}
for (WorkerInfo workerInfo : allEditWorkerInfos) {
workerInfoService.editWorkerInfo(workerInfo);
}
//通知
if (SecurityUtils.getUser() != null && SecurityUtils.getUser().getUserId() != null) {
@ -2291,12 +2295,12 @@ public class WorkerInfoServiceImpl extends ServiceImpl<WorkerInfoMapper, WorkerI
}
/**
* 真正递归的方法
*
* @param path 根目录的抽象路径
* @param sucSb
* @param projectSn
*/
public void traverseFile(String path, StringBuilder formatSb, StringBuilder failSb, StringBuilder sucSb) {
public List<WorkerInfo> getEditWorkerInfos(String path, StringBuilder formatSb, StringBuilder sucSb, String projectSn) {
List<WorkerInfo> rtList = new ArrayList<>();
File file = new File(path);
if (file.exists()) {
if (file.isDirectory()) {
@ -2304,7 +2308,7 @@ public class WorkerInfoServiceImpl extends ServiceImpl<WorkerInfoMapper, WorkerI
for (File f : fileArray) {
System.out.println("【文件夹】-----" + f.getAbsolutePath());
// -----递归的方法体
traverseFile(f.getAbsolutePath(), formatSb, failSb, sucSb);
rtList.addAll(getEditWorkerInfos(f.getAbsolutePath(), formatSb, sucSb, projectSn));
}
} else {
System.out.println("【文件】-----" + file.getAbsolutePath());
@ -2314,29 +2318,23 @@ public class WorkerInfoServiceImpl extends ServiceImpl<WorkerInfoMapper, WorkerI
boolean isMatch = ReUtil.isMatch(".+_.+[.].+", name);
if (!isMatch) {
formatSb.append(name + ",");
return;
}
} else {
String idCard = name.split("_")[1].split("\\.")[0];
String workerName = name.split("_")[0];
String suffix = name.split("\\.")[1];
String saveName = IdUtil.randomUUID() + "." + suffix;
FileUtil.move(file, new File(basePath + "/" + saveName), true);
List<WorkerInfo> workerInfos = workerInfoMapper.selectList(new LambdaQueryWrapper<WorkerInfo>()
.eq(WorkerInfo::getIdCard, idCard));
try {
for (WorkerInfo workerInfo : workerInfos) {
workerInfo.setFieldAcquisitionUrl(saveName);
this.editWorkerInfo(workerInfo);
WorkerInfo workerInfo = workerInfoMapper.selectOne(new LambdaQueryWrapper<WorkerInfo>()
.eq(WorkerInfo::getIdCard, idCard)
.eq(WorkerInfo::getProjectSn, projectSn)
);
sucSb.append(workerName + ",");
}
} catch (Exception e) {
log.error("error", e);
failSb.append(workerName + ":错误原因" + e.getMessage() + ",");
workerInfo.setFieldAcquisitionUrl(saveName);
rtList.add(workerInfo);
}
}
} else {
System.out.println("文件不存在!");
}
return rtList;
}
private void addDatas(List<WorkerInfo> infos, String del, ArrayList<GetWorkerInfoByDevVo.Worker> datas) {