执法记录仪修改
This commit is contained in:
parent
fa9533a3ad
commit
a3d7391c63
@ -47,8 +47,8 @@ public class RedisConfig {
|
||||
//.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new RedisObjectSerializer()));
|
||||
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(redisTemplate.getValueSerializer()))
|
||||
//.entryTtl(Duration.ofMinutes(30L))
|
||||
.entryTtl(Duration.ofHours(1))
|
||||
.disableCachingNullValues();
|
||||
.entryTtl(Duration.ofHours(1));
|
||||
// .disableCachingNullValues();
|
||||
// 初始化RedisCacheManager
|
||||
RedisCacheManager redisCacheManager = new RedisCacheManager(redisCacheWriter, redisCacheConfiguration);
|
||||
return redisCacheManager;
|
||||
|
||||
@ -6,8 +6,10 @@ import cn.hutool.core.util.StrUtil;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.zhgd.jeecg.common.execption.OpenAlertException;
|
||||
import com.zhgd.jeecg.common.util.pass.HttpUtils;
|
||||
import com.zhgd.redis.lock.RedisRepository;
|
||||
import com.zhgd.xmgl.call.api.PoliceCameraManufacturer;
|
||||
import com.zhgd.xmgl.call.util.Mcs8Util;
|
||||
import com.zhgd.xmgl.modules.policecamera.entity.PoliceCameraItem;
|
||||
@ -22,6 +24,7 @@ import com.zhgd.xmgl.modules.policecamera.service.IPoliceCameraItemService;
|
||||
import com.zhgd.xmgl.modules.policecamera.service.IWorkTicketHistoryService;
|
||||
import com.zhgd.xmgl.util.PathUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
|
||||
@ -53,6 +56,9 @@ public class Mcs8Call implements PoliceCameraManufacturer {
|
||||
private IWorkTicketHistoryService workTicketHistoryService;
|
||||
@Value("${mcs8.download.http.type:pubUrl}")
|
||||
private String downloadType;
|
||||
@Lazy
|
||||
@Autowired
|
||||
private RedisRepository redisRepository;
|
||||
|
||||
public void setConfig(ProjectPoliceCameraConfig config) {
|
||||
this.config = config;
|
||||
@ -92,7 +98,6 @@ public class Mcs8Call implements PoliceCameraManufacturer {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void pullFile(Date begin, Date end) {
|
||||
Map<String, PoliceCameraItem> cameraItemMap = policeCameraItemService.list(null).stream().collect(Collectors.toMap(PoliceCameraItem::getDevSn, Function.identity(), (o1, o2) -> o1));
|
||||
@ -103,7 +108,7 @@ public class Mcs8Call implements PoliceCameraManufacturer {
|
||||
JSONObject jsonObject = Mcs8Util.getRecordFileList(config, page, pageSize, begin, end, true);
|
||||
bos = BeanUtil.copyToList(jsonObject.getJSONArray("data"), Mcs8FileBo.class);
|
||||
for (Mcs8FileBo bo : bos) {
|
||||
if (!Objects.equals(bo.getFType(),3)) {
|
||||
if (!Objects.equals(bo.getFType(), 3)) {
|
||||
downloadFileAndSave(bo, cameraItemMap);
|
||||
}
|
||||
}
|
||||
@ -165,34 +170,103 @@ public class Mcs8Call implements PoliceCameraManufacturer {
|
||||
return pubUrl;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void updateStatus() {
|
||||
public void updateStatus(Long cacheSeconds) {
|
||||
if (configIsBlank()) {
|
||||
return;
|
||||
}
|
||||
List<PoliceCameraItem> itemList = policeCameraItemService.list(new LambdaQueryWrapper<PoliceCameraItem>()
|
||||
.eq(PoliceCameraItem::getProjectSn, config.getProjectSn()));
|
||||
List<PoliceCameraItem> itemList = policeCameraItemService.getListByProjectSn(config.getProjectSn());
|
||||
Integer page = 1;
|
||||
int pageSize = 1000;
|
||||
JSONArray devList = new JSONArray();
|
||||
JSONArray tempList = new JSONArray();
|
||||
|
||||
// 生成缓存key
|
||||
String cacheKey = null;
|
||||
if (cacheSeconds != null && cacheSeconds > 0) {
|
||||
cacheKey = "mcs8:devList:full:" + Mcs8Util.getHost(config) + ":" + config.getPort() + ":" + config.getAccount() + ":" + config.getPassword();
|
||||
|
||||
// 尝试从缓存获取完整设备列表
|
||||
try {
|
||||
String cachedData = (String) redisRepository.get(cacheKey);
|
||||
if (StringUtils.isNotBlank(cachedData)) {
|
||||
devList = JSONArray.parseArray(cachedData);
|
||||
log.debug("从缓存获取完整设备列表,数量: {}", devList.size());
|
||||
|
||||
// 直接使用缓存数据更新设备状态
|
||||
updateDeviceStatus(itemList, devList);
|
||||
return;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.warn("从缓存获取设备列表失败,继续从接口获取", e);
|
||||
}
|
||||
}
|
||||
|
||||
// 缓存不存在或禁用缓存,从接口获取数据
|
||||
do {
|
||||
tempList = Mcs8Util.getDevList(config, page, pageSize, true);
|
||||
devList.addAll(tempList);
|
||||
page++;
|
||||
} while (CollUtil.isNotEmpty(tempList) && tempList.size() == pageSize);
|
||||
Map<String, JSONObject> devSnMap = devList.stream().collect(Collectors.toMap(o -> ((JSONObject) o).getString("deviceId"), o -> (JSONObject) o, (o1, o2) -> o1));
|
||||
for (PoliceCameraItem item : itemList) {
|
||||
JSONObject jsonObject = devSnMap.get(item.getDevSn());
|
||||
if (jsonObject != null) {
|
||||
item.setDeviceState(jsonObject.getInteger("status") == 1 ? 1 : 2);
|
||||
} else {
|
||||
item.setDeviceState(2);
|
||||
|
||||
// 如果启用缓存,将完整设备列表存入缓存
|
||||
if (cacheSeconds != null && cacheSeconds > 0 && cacheKey != null && CollUtil.isNotEmpty(devList)) {
|
||||
try {
|
||||
redisRepository.setExpire(cacheKey, devList.toJSONString(), cacheSeconds);
|
||||
log.debug("设备列表已缓存,数量: {}, 缓存时间: {}s", devList.size(), cacheSeconds);
|
||||
} catch (Exception e) {
|
||||
log.warn("设备列表缓存失败", e);
|
||||
}
|
||||
policeCameraItemService.updateById(item);
|
||||
}
|
||||
|
||||
// 更新设备状态
|
||||
updateDeviceStatus(itemList, devList);
|
||||
}
|
||||
|
||||
/**
|
||||
* 从接口数据更新设备状态
|
||||
*/
|
||||
private void updateDeviceStatus(List<PoliceCameraItem> itemList, JSONArray devList) {
|
||||
Map<String, JSONObject> devSnMap = devList.stream()
|
||||
.collect(Collectors.toMap(
|
||||
o -> ((JSONObject) o).getString("deviceId"),
|
||||
o -> (JSONObject) o,
|
||||
(o1, o2) -> o1
|
||||
));
|
||||
|
||||
// 分组处理:在线设备和离线设备
|
||||
List<Long> onlineIds = new ArrayList<>();
|
||||
List<Long> offlineIds = new ArrayList<>();
|
||||
|
||||
for (PoliceCameraItem item : itemList) {
|
||||
JSONObject jsonObject = devSnMap.get(item.getDevSn());
|
||||
Integer newState = (jsonObject != null && jsonObject.getInteger("status") == 1) ? 1 : 2;
|
||||
Integer oldState = item.getDeviceState();
|
||||
|
||||
if (oldState == null || !oldState.equals(newState)) {
|
||||
if (newState == 1) {
|
||||
onlineIds.add(item.getItemId());
|
||||
} else {
|
||||
offlineIds.add(item.getItemId());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 批量更新在线设备
|
||||
if (CollUtil.isNotEmpty(onlineIds)) {
|
||||
policeCameraItemService.update(new LambdaUpdateWrapper<PoliceCameraItem>()
|
||||
.set(PoliceCameraItem::getDeviceState, 1)
|
||||
.in(PoliceCameraItem::getItemId, onlineIds)
|
||||
);
|
||||
}
|
||||
|
||||
// 批量更新离线设备
|
||||
if (CollUtil.isNotEmpty(offlineIds)) {
|
||||
policeCameraItemService.update(new LambdaUpdateWrapper<PoliceCameraItem>()
|
||||
.set(PoliceCameraItem::getDeviceState, 2)
|
||||
.in(PoliceCameraItem::getItemId, offlineIds)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean configIsBlank() {
|
||||
|
||||
@ -35,6 +35,7 @@ public interface PoliceCameraManufacturer {
|
||||
|
||||
/**
|
||||
* 更新状态
|
||||
* @param cacheSeconds 缓存第三方设备在线接口时间s
|
||||
*/
|
||||
void updateStatus();
|
||||
void updateStatus(Long cacheSeconds);
|
||||
}
|
||||
|
||||
@ -125,5 +125,9 @@ public class WorkTicket implements Serializable {
|
||||
*/
|
||||
@ApiModelProperty(value = "施工地点")
|
||||
private java.lang.String constructionAddr;
|
||||
|
||||
/**
|
||||
* 班组ids
|
||||
*/
|
||||
@ApiModelProperty(value = "班组ids")
|
||||
private java.lang.String teamIds;
|
||||
}
|
||||
|
||||
@ -32,4 +32,9 @@ public class WorkTicketVo extends WorkTicket {
|
||||
*/
|
||||
@ApiModelProperty(value = "项目sn")
|
||||
private java.lang.String typeName;
|
||||
/**
|
||||
* 班组名称s
|
||||
*/
|
||||
@ApiModelProperty(value = "班组名称s")
|
||||
private java.lang.String teamNames;
|
||||
}
|
||||
|
||||
@ -100,4 +100,6 @@ public interface IPoliceCameraItemService extends IService<PoliceCameraItem> {
|
||||
Map<Long, PoliceCameraItem> getItemMapByProjectSn(String projectSn);
|
||||
|
||||
VideoItemInfoVo getVideoItemInfo(Map<String, Object> map);
|
||||
|
||||
List<PoliceCameraItem> getListByProjectSn(String projectSn);
|
||||
}
|
||||
|
||||
@ -42,6 +42,8 @@ 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.cache.annotation.CacheEvict;
|
||||
import org.springframework.cache.annotation.Cacheable;
|
||||
import org.springframework.context.annotation.Lazy;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
@ -130,6 +132,7 @@ public class PoliceCameraItemServiceImpl extends ServiceImpl<PoliceCameraItemMap
|
||||
}
|
||||
|
||||
@Override
|
||||
@CacheEvict(value = "policeCameraItem", key = "'listByProjectSn:' + #policeCameraItem.projectSn")
|
||||
public void savePoliceCameraItem(PoliceCameraItem policeCameraItem) {
|
||||
ProjectPoliceCameraConfig projectPoliceCameraConfig = projectPoliceCameraConfigMapper.selectById(policeCameraItem.getConfigId());
|
||||
if (projectPoliceCameraConfig == null || projectPoliceCameraConfig.getIsEnable() == null || projectPoliceCameraConfig.getIsEnable() == 0) {
|
||||
@ -164,6 +167,7 @@ public class PoliceCameraItemServiceImpl extends ServiceImpl<PoliceCameraItemMap
|
||||
}
|
||||
|
||||
@Override
|
||||
@CacheEvict(value = "policeCameraItem", key = "'listByProjectSn:' + #policeCameraItem.projectSn")
|
||||
public void updatePoliceCameraItem(PoliceCameraItem policeCameraItem) {
|
||||
ProjectPoliceCameraConfig projectPoliceCameraConfig = projectPoliceCameraConfigMapper.selectById(policeCameraItem.getConfigId());
|
||||
if (Objects.equals(projectPoliceCameraConfig.getFactoryType(), ProjectPoliceCameraConfigVideoTypeEnum.ISC.getValue())) {
|
||||
@ -197,6 +201,7 @@ public class PoliceCameraItemServiceImpl extends ServiceImpl<PoliceCameraItemMap
|
||||
}
|
||||
|
||||
@Override
|
||||
@CacheEvict(value = "policeCameraItem", allEntries = true)
|
||||
public void deletePoliceCameraItem(String itemId) {
|
||||
PoliceCameraItem policeCameraItem = policeCameraItemMapper.selectById(itemId);
|
||||
if (policeCameraItem == null) {
|
||||
@ -338,5 +343,11 @@ public class PoliceCameraItemServiceImpl extends ServiceImpl<PoliceCameraItemMap
|
||||
return vo;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Cacheable(value = "policeCameraItem", key = "'listByProjectSn:' + #projectSn")
|
||||
public List<PoliceCameraItem> getListByProjectSn(String projectSn) {
|
||||
return this.list(new LambdaQueryWrapper<PoliceCameraItem>()
|
||||
.eq(PoliceCameraItem::getProjectSn, projectSn));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -9,6 +9,8 @@ import com.zhgd.xmgl.modules.policecamera.mapper.ProjectPoliceCameraConfigMapper
|
||||
import com.zhgd.xmgl.modules.policecamera.service.IProjectPoliceCameraConfigService;
|
||||
import org.apache.commons.collections.MapUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.cache.annotation.CacheEvict;
|
||||
import org.springframework.cache.annotation.Cacheable;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@ -31,6 +33,7 @@ public class ProjectPoliceCameraConfigServiceImpl extends ServiceImpl<ProjectPol
|
||||
|
||||
|
||||
@Override
|
||||
@Cacheable(value = "policeCamera", key = "'useConfig:' + #map['projectSn']")
|
||||
public ProjectPoliceCameraConfig getUseProjectPoliceCameraConfig(Map<String, Object> map) {
|
||||
QueryWrapper<ProjectPoliceCameraConfig> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.lambda().eq(ProjectPoliceCameraConfig::getProjectSn, MapUtils.getString(map, "projectSn"))
|
||||
@ -54,6 +57,7 @@ public class ProjectPoliceCameraConfigServiceImpl extends ServiceImpl<ProjectPol
|
||||
}
|
||||
|
||||
@Override
|
||||
@CacheEvict(value = {"policeCamera"}, key = "'useConfig:' + #map['projectSn']")
|
||||
public void updateVideoConfigEnable(Map<String, Object> map) {
|
||||
ProjectPoliceCameraConfig projectPoliceCameraConfig = new ProjectPoliceCameraConfig();
|
||||
projectPoliceCameraConfig.setProjectSn(MapUtils.getString(map, "projectSn"));
|
||||
@ -79,6 +83,7 @@ public class ProjectPoliceCameraConfigServiceImpl extends ServiceImpl<ProjectPol
|
||||
}
|
||||
|
||||
@Override
|
||||
@CacheEvict(value = {"policeCamera"}, key = "'useConfig:' + #projectPoliceCameraConfig.projectSn")
|
||||
public void editProjectPoliceCameraConfig(ProjectPoliceCameraConfig projectPoliceCameraConfig) {
|
||||
QueryWrapper<ProjectPoliceCameraConfig> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.lambda().eq(ProjectPoliceCameraConfig::getProjectSn, projectPoliceCameraConfig.getProjectSn())
|
||||
@ -93,6 +98,7 @@ public class ProjectPoliceCameraConfigServiceImpl extends ServiceImpl<ProjectPol
|
||||
}
|
||||
|
||||
@Override
|
||||
@CacheEvict(value = {"policeCamera"}, key = "'useConfig:' + #projectSn")
|
||||
public void deleteProjectVideo(String projectSn) {
|
||||
QueryWrapper<ProjectPoliceCameraConfig> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.lambda().eq(ProjectPoliceCameraConfig::getProjectSn, projectSn);
|
||||
|
||||
@ -25,6 +25,8 @@ import com.zhgd.xmgl.modules.project.service.IProjectConfigService;
|
||||
import com.zhgd.xmgl.modules.quality.entity.QualityRegion;
|
||||
import com.zhgd.xmgl.modules.quality.service.IQualityRegionService;
|
||||
import com.zhgd.xmgl.modules.worker.entity.EnterpriseInfo;
|
||||
import com.zhgd.xmgl.modules.worker.entity.TeamInfo;
|
||||
import com.zhgd.xmgl.modules.worker.service.ITeamInfoService;
|
||||
import com.zhgd.xmgl.modules.worker.service.impl.EnterpriseInfoServiceImpl;
|
||||
import com.zhgd.xmgl.modules.worker.service.impl.WorkerInfoServiceImpl;
|
||||
import com.zhgd.xmgl.util.*;
|
||||
@ -36,6 +38,7 @@ import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@ -88,6 +91,9 @@ public class WorkTicketServiceImpl extends ServiceImpl<WorkTicketMapper, WorkTic
|
||||
@Autowired
|
||||
@Qualifier("doubleCarbonExecutor")
|
||||
private ThreadPoolTaskExecutor threadPoolTaskExecutor;
|
||||
@Lazy
|
||||
@Autowired
|
||||
private ITeamInfoService teamInfoService;
|
||||
|
||||
@Override
|
||||
public IPage<WorkTicketVo> queryPageList(HashMap<String, Object> param) {
|
||||
@ -128,6 +134,8 @@ public class WorkTicketServiceImpl extends ServiceImpl<WorkTicketMapper, WorkTic
|
||||
CollUtils.filteringNull()
|
||||
)
|
||||
));
|
||||
Map<Long, TeamInfo> teamInfoMap = teamInfoService.list(new LambdaQueryWrapper<TeamInfo>()
|
||||
.eq(TeamInfo::getProjectSn, projectSn)).stream().collect(Collectors.toMap(TeamInfo::getId, Function.identity(), (o1, o2) -> o1));
|
||||
for (WorkTicketVo ticketVo : list) {
|
||||
// 设置申请人名称
|
||||
ticketVo.setApplicantNames(EntityUtils.convertIdsToNames(
|
||||
@ -142,6 +150,13 @@ public class WorkTicketServiceImpl extends ServiceImpl<WorkTicketMapper, WorkTic
|
||||
QualityRegion::getRegionName
|
||||
));
|
||||
ticketVo.setItemList(ticketMap.get(ticketVo.getId()));
|
||||
// 设置班组名称
|
||||
ticketVo.setTeamNames(EntityUtils.convertIdsToNames(
|
||||
ticketVo.getTeamIds(),
|
||||
teamInfoMap,
|
||||
TeamInfo::getTeamName
|
||||
));
|
||||
ticketVo.setItemList(ticketMap.get(ticketVo.getId()));
|
||||
}
|
||||
}
|
||||
return list;
|
||||
|
||||
@ -64,7 +64,7 @@ public class Mcs8Task {
|
||||
/**
|
||||
* 定时更新执法仪设备状态
|
||||
*/
|
||||
@Scheduled(cron = "*/10 * * * * ?")
|
||||
@Scheduled(cron = "*/5 * * * * ?")
|
||||
@RequestMapping("updateStatus")
|
||||
public void updateStatus() {
|
||||
List<Project> projects = projectService.list();
|
||||
@ -72,7 +72,7 @@ public class Mcs8Task {
|
||||
try {
|
||||
PoliceCameraManufacturer manufacturer = policeCameraManufacturerFactory.getPoliceCameraManufacturer(project.getProjectSn());
|
||||
if (manufacturer != null) {
|
||||
manufacturer.updateStatus();
|
||||
manufacturer.updateStatus(3L);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("定时更新执法仪设备状态err,{}", project.getProjectName(), e);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user