云联万物中间库代码

This commit is contained in:
Administrator 2023-03-22 18:27:11 +08:00
parent df90b4f1e6
commit 57a10e0978
4 changed files with 382 additions and 296 deletions

View File

@ -179,6 +179,12 @@ public class VideoItem implements Serializable {
@ApiModelProperty(value = "云联万物-监控点位置JKDWZ001作业面JKDWZ002料场JKDWZ003车辆出入口JKDWZ004人员出入口JKDWZ005洗轮机JKDWZ006围墙JKDWZ007塔吊JKDWZ008其他")
private java.lang.String monitoringPointLocation;
@ApiModelProperty(value = "云联万物-经纬坐标")
private java.lang.String latAndLng;
/**
* 纬度
*/
private String latitude;
/**
*经度
*/
private String longitude;
}

View File

@ -1,27 +1,12 @@
package com.zhgd.xmgl.modules.yunlianwanwu.middle;
import cn.hutool.http.HttpUtil;
import com.gexin.fastjson.JSON;
import com.gexin.fastjson.TypeReference;
import com.zhgd.jeecg.common.api.vo.Result;
import com.zhgd.xmgl.modules.project.mapper.ProjectMapper;
import com.zhgd.xmgl.modules.video.mapper.VideoItemMapper;
import com.zhgd.xmgl.modules.yunlianwanwu.middle.entity.MiddleGcjkd;
import com.zhgd.xmgl.modules.yunlianwanwu.middle.entity.MiddleGcxx;
import com.zhgd.xmgl.modules.yunlianwanwu.middle.entity.VideoItemConfigBo;
import com.zhgd.xmgl.modules.yunlianwanwu.middle.entity.bo.ProjectBo;
import com.zhgd.xmgl.modules.yunlianwanwu.middle.service.MiddleService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 云联万物的中间库的controller
*/
@ -29,294 +14,19 @@ import java.util.stream.Collectors;
@RequestMapping("middle")
@Slf4j
public class MiddleController {
private String ipPort = "http://localhost:22333";
@Autowired
private ProjectMapper projectMapper;
@Autowired
private VideoItemMapper videoItemMapper;
private MiddleService middleService;
@GetMapping("/add/project")
public void addProject() {
//从中间库接口获取所有项目
String url = ipPort + "/middle/middleGcxx/list";
log.info("getMiddleProject{}", url);
String getMiddleProject = HttpUtil.get(url);
log.info("getMiddleProjectRs{}", getMiddleProject);
if (StringUtils.isNotBlank(getMiddleProject)) {
Result result = JSON.parseObject(getMiddleProject, Result.class);
if (result.isSuccess()) {
Object rs = result.getResult();
if (rs != null) {
List<MiddleGcxx> middleGcxxes = JSON.parseObject(rs.toString(), new TypeReference<List<MiddleGcxx>>() {
});
Map<String, MiddleGcxx> idAndMiddleGcxxMap = middleGcxxes.stream().collect(Collectors.toMap(MiddleGcxx::getId, middleGcxx -> middleGcxx));
//从数据库获取所有项目
List<ProjectBo> projects = projectMapper.queryAllProjectAndVideoInfo();
//比较出新增和修改的项目调用接口更新中间库
log.info("projects:{}", JSON.toJSONString(projects));
if (CollectionUtils.isNotEmpty(projects)) {
for (ProjectBo bo : projects) {
if (idAndMiddleGcxxMap.get(bo.getProjectSn()) == null) {
//新增
httpAddMiddleGcxx(bo);
} else {
//修改
httpUpdateMiddleGcxx(bo);
}
}
}
}
}
}
middleService.syncProject();
}
@GetMapping("/middleGcjkd/add")
public void addMiddleGcjkd() {
//从中间库接口获取所有监控点位
String url = ipPort + "/middle/middleGcjkd/list";
log.info("getMiddleProject{}", url);
String getMiddleGcjkd = HttpUtil.get(url);
log.info("getMiddleGcjkdRs{}", getMiddleGcjkd);
if (StringUtils.isNotBlank(getMiddleGcjkd)) {
Result result = JSON.parseObject(getMiddleGcjkd, Result.class);
if (result.isSuccess()) {
Object rs = result.getResult();
if (rs != null) {
List<MiddleGcjkd> middleGcjkds = JSON.parseObject(rs.toString(), new TypeReference<List<MiddleGcjkd>>() {
});
Map<Long, MiddleGcjkd> idAndMiddleGcjkdMap = middleGcjkds.stream().collect(Collectors.toMap(middleGcjkd -> Long.valueOf(middleGcjkd.getId()), m -> m));
//从数据库获取所有监控点位
List<VideoItemConfigBo> videoItemBos = videoItemMapper.selectDeviceDetailAndProjectSnList();
if (CollectionUtils.isNotEmpty(videoItemBos)) {
for (VideoItemConfigBo bo : videoItemBos) {
//比较出新增和修改的监控点位调用接口更新中间库
if (idAndMiddleGcjkdMap.get(bo.getItemId()) == null) {
//新增
httpAddMiddleGcjkd(bo);
} else {
//修改
httpUpdateMiddleGcjkd(bo);
}
}
}
}
middleService.syncMiddleGcjkd();
}
}
}
private void httpAddMiddleGcjkd(VideoItemConfigBo bo) {
MiddleGcjkd middleGcjkd = getMiddleGcjkdByVideoItem(bo);
String url = ipPort + "/middle/middleGcjkd/add";
String body = JSON.toJSONString(middleGcjkd);
log.info("add_url{}body:{}", url, body);
String post = HttpUtil.post(url, body);
log.info("rt{}", post);
}
private void httpUpdateMiddleGcjkd(VideoItemConfigBo bo) {
MiddleGcjkd middleGcjkd = getMiddleGcjkdByVideoItem(bo);
String url = ipPort + "/middle/middleGcjkd/edit";
String body = JSON.toJSONString(middleGcjkd);
log.info("update_url{}body:{}", url, body);
String post = HttpUtil.post(url, body);
log.info("rt{}", post);
}
private MiddleGcjkd getMiddleGcjkdByVideoItem(VideoItemConfigBo bo) {
MiddleGcjkd middleGcjkd = new MiddleGcjkd();
middleGcjkd.setId(String.valueOf(bo.getItemId()));
middleGcjkd.setGcid(bo.getProjectSn());
middleGcjkd.setJkdbh(bo.getMonitoringPointCode());
middleGcjkd.setJkdmc(bo.getVideoName());
middleGcjkd.setJkdzt(getStatus(bo.getDeviceState()));
middleGcjkd.setJkdlx(getDeviceType(bo.getDeviceType()));
middleGcjkd.setJkdwz(bo.getMonitoringPointLocation());
String latAndLng = bo.getLatAndLng();
if (StringUtils.isNotBlank(latAndLng)) {
String[] split = latAndLng.split(",");
if (split.length == 2) {
middleGcjkd.setXzb(split[1]);
middleGcjkd.setYzb(split[0]);
middleGcjkd.setYszb(latAndLng);
}
}
middleGcjkd.setYszblx("WGS-84");
middleGcjkd.setDeleted(0);
middleGcjkd.setCreateDateTime(bo.getCreateTime());
middleGcjkd.setDatasource(String.valueOf(15));
return middleGcjkd;
}
private void httpAddMiddleGcxx(ProjectBo project) {
MiddleGcxx middleGcxx = getMiddleGcxxByProject(project);
String url = ipPort + "/middle/middleGcxx/add";
String body = JSON.toJSONString(middleGcxx);
log.info("url{}body:{}", url, body);
String post = HttpUtil.post(url, body);
log.info("rt{}", post);
}
private void httpUpdateMiddleGcxx(ProjectBo project) {
MiddleGcxx middleGcxx = getMiddleGcxxByProject(project);
String url = ipPort + "/middle/middleGcxx/edit";
String body = JSON.toJSONString(middleGcxx);
log.info("url{}body:{}", url, body);
String post = HttpUtil.post(url, body);
log.info("rt{}", post);
}
/**
* 获取中间库
*
* @param bo
* @return
*/
private MiddleGcxx getMiddleGcxxByProject(ProjectBo bo) {
MiddleGcxx middleGcxx = new MiddleGcxx();
middleGcxx.setId(bo.getProjectSn());//id存的是projectSn
middleGcxx.setGcmc(bo.getProjectName());
middleGcxx.setGcjsdd(bo.getProjectName());
middleGcxx.setSgxkzh(bo.getConstructionPermit());
middleGcxx.setGcssjd(bo.getStreetTownshipTown());
middleGcxx.setGcssjdbm(bo.getStreetTownshipTownCode());
middleGcxx.setGclb(getGclb(bo.getProjectType()));
middleGcxx.setSxtazzt(bo.getSxtazzt());
middleGcxx.setSxtazrq(bo.getSxtazrq());
middleGcxx.setQxbm(bo.getDistrictOrganizationCode());
middleGcxx.setXzb(bo.getLatitude());
middleGcxx.setYzb(bo.getLongitude());
middleGcxx.setYszb(bo.getLongitude() + "," + bo.getLatitude());
middleGcxx.setYszblx("WGS-84");
middleGcxx.setDatasource(String.valueOf(15));
return middleGcxx;
}
/**
* 获取设备类型
*
* @param deviceType
* @return
*/
public String getDeviceType(Integer deviceType) {
//1 JKDLX001 微卡口
//2 JKDLX002 枪机
//3 JKDLX003 球机
//4 JKDLX004 人脸识别
//设备类型1 枪机2球机3热成像4单兵5全景6无人机
if (deviceType != null) {
//设备状态1在线2离线
switch (deviceType) {
case 1:
return "JKDLX002";
case 2:
return "JKDLX003";
case 3:
return "JKDLX003";
case 4:
return "JKDLX003";
case 5:
return "JKDLX003";
case 6:
return "JKDLX003";
}
}
return null;
}
/**
* 获取中间库的监控点的视频在线状态
*
* @param status
* @return
*/
public Integer getStatus(Integer status) {
if (status != null) {
//设备状态1在线2离线
switch (status) {
case 1:
return 0;
case 2:
return 1;
}
}
return null;
}
/**
* 获取工程类别
*
* @param projectType
* @return
*/
public String getGclb(Integer projectType) {
//1 FWJSGC 房屋建设工程
//2 SZ 市政
//3 ZX 装修
//其他委办局工地
//4 HB_SWGD 水务
//5 HB_YLGD 园林
//6 HB_JTGD 交通
//7 HB_FJ 房建
//8 HB_HNTGD 混凝土搅拌站
//9 HB_JZLJXNC 建筑垃圾消纳场
//10 HB_QT 其他
//工程类别1房建2市政3安装4装饰5公路6冶炼7矿山8化工石油9水利水电10电力11农林12港口与航道13航天航空14通信15其他
String s = null;
switch (projectType) {
case 1:
s = "FWJSGC";
break;
case 2:
s = "SZ";
break;
case 3:
s = "ZX";
break;
case 4:
s = "ZX";
break;
case 5:
s = "HB_JTGD";
break;
case 6:
s = "HB_QT";
break;
case 7:
s = "HB_QT";
break;
case 8:
s = "HB_QT";
break;
case 9:
s = "HB_SWGD";
break;
case 10:
s = "HB_YLGD";
break;
case 11:
s = "HB_QT";
break;
case 12:
s = "HB_QT";
break;
case 13:
s = "HB_QT";
break;
case 14:
s = "HB_QT";
break;
case 15:
s = "HB_QT";
break;
}
return s;
}
}

View File

@ -0,0 +1,335 @@
package com.zhgd.xmgl.modules.yunlianwanwu.middle.service;
import cn.hutool.http.HttpUtil;
import com.gexin.fastjson.JSON;
import com.gexin.fastjson.TypeReference;
import com.zhgd.jeecg.common.api.vo.Result;
import com.zhgd.xmgl.modules.project.mapper.ProjectMapper;
import com.zhgd.xmgl.modules.video.mapper.VideoItemMapper;
import com.zhgd.xmgl.modules.yunlianwanwu.middle.entity.MiddleGcjkd;
import com.zhgd.xmgl.modules.yunlianwanwu.middle.entity.MiddleGcxx;
import com.zhgd.xmgl.modules.yunlianwanwu.middle.entity.VideoItemConfigBo;
import com.zhgd.xmgl.modules.yunlianwanwu.middle.entity.bo.ProjectBo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Service
@Slf4j
public class MiddleService {
private String ipPort = "http://localhost:22333";
@Autowired
private ProjectMapper projectMapper;
@Autowired
private VideoItemMapper videoItemMapper;
/**
* 同步项目结构化数据到北京市政局
*/
public void syncProject() {
//从中间库接口获取所有项目
String url = ipPort + "/middle/middleGcxx/list";
log.info("getMiddleProject{}", url);
String getMiddleProject = HttpUtil.get(url);
log.info("getMiddleProjectRs{}", getMiddleProject);
if (StringUtils.isNotBlank(getMiddleProject)) {
Result result = JSON.parseObject(getMiddleProject, Result.class);
if (result.isSuccess()) {
Object rs = result.getResult();
if (rs != null) {
List<MiddleGcxx> middleGcxxes = JSON.parseObject(rs.toString(), new TypeReference<List<MiddleGcxx>>() {
});
Map<String, MiddleGcxx> idAndMiddleGcxxMap = middleGcxxes.stream().collect(Collectors.toMap(MiddleGcxx::getId, middleGcxx -> middleGcxx));
//从数据库获取所有项目
List<ProjectBo> projects = projectMapper.queryAllProjectAndVideoInfo();
//比较出新增和修改的项目调用接口更新中间库
log.info("projects:{}", JSON.toJSONString(projects));
if (CollectionUtils.isNotEmpty(projects)) {
for (ProjectBo bo : projects) {
if (idAndMiddleGcxxMap.get(bo.getProjectSn()) == null) {
//新增
httpAddMiddleGcxx(bo);
} else {
//修改
httpUpdateMiddleGcxx(bo);
}
}
}
}
} else {
log.error("获取远程结构化数据失败syncProject");
}
}
}
/**
* 同步视频点位结构化数据到北京市政局
*/
public void syncMiddleGcjkd() {
//从中间库接口获取所有监控点位
String url = ipPort + "/middle/middleGcjkd/list";
log.info("getMiddleProject{}", url);
String getMiddleGcjkd = HttpUtil.get(url);
log.info("getMiddleGcjkdRs{}", getMiddleGcjkd);
if (StringUtils.isNotBlank(getMiddleGcjkd)) {
Result result = JSON.parseObject(getMiddleGcjkd, Result.class);
if (result.isSuccess()) {
Object rs = result.getResult();
if (rs != null) {
List<MiddleGcjkd> middleGcjkds = JSON.parseObject(rs.toString(), new TypeReference<List<MiddleGcjkd>>() {
});
Map<Long, MiddleGcjkd> idAndMiddleGcjkdMap = middleGcjkds.stream().collect(Collectors.toMap(middleGcjkd -> Long.valueOf(middleGcjkd.getId()), m -> m));
//从数据库获取所有监控点位
List<VideoItemConfigBo> videoItemBos = videoItemMapper.selectDeviceDetailAndProjectSnList();
if (CollectionUtils.isNotEmpty(videoItemBos)) {
for (VideoItemConfigBo bo : videoItemBos) {
//比较出新增和修改的监控点位调用接口更新中间库
Long itemId = bo.getItemId();
if (idAndMiddleGcjkdMap.get(itemId) == null) {
//新增
httpAddMiddleGcjkd(bo);
} else {
//修改
httpUpdateMiddleGcjkd(bo);
}
//修改完删除
idAndMiddleGcjkdMap.remove(itemId);
}
}
//设置中间库中多余的摄像头为deleted状态
if (idAndMiddleGcjkdMap.size() != 0) {
for (Map.Entry<Long, MiddleGcjkd> entry : idAndMiddleGcjkdMap.entrySet()) {
MiddleGcjkd value = entry.getValue();
value.setDeleted(1);
doHttpUpdateMiddleGcjkd(value);
}
}
}
} else {
log.error("获取远程结构化数据失败syncMiddleGcjkd");
}
}
}
private void httpAddMiddleGcjkd(VideoItemConfigBo bo) {
MiddleGcjkd middleGcjkd = getMiddleGcjkdByVideoItem(bo);
String url = ipPort + "/middle/middleGcjkd/add";
String body = JSON.toJSONString(middleGcjkd);
log.info("add_url{}body:{}", url, body);
String post = HttpUtil.post(url, body);
log.info("rt{}", post);
}
private void httpUpdateMiddleGcjkd(VideoItemConfigBo bo) {
MiddleGcjkd middleGcjkd = getMiddleGcjkdByVideoItem(bo);
doHttpUpdateMiddleGcjkd(middleGcjkd);
}
private void doHttpUpdateMiddleGcjkd(MiddleGcjkd middleGcjkd) {
String url = ipPort + "/middle/middleGcjkd/edit";
String body = JSON.toJSONString(middleGcjkd);
log.info("update_url{}body:{}", url, body);
String post = HttpUtil.post(url, body);
log.info("rt{}", post);
}
private MiddleGcjkd getMiddleGcjkdByVideoItem(VideoItemConfigBo bo) {
MiddleGcjkd middleGcjkd = new MiddleGcjkd();
middleGcjkd.setId(String.valueOf(bo.getItemId()));
middleGcjkd.setGcid(bo.getProjectSn());
middleGcjkd.setJkdbh(bo.getMonitoringPointCode());
middleGcjkd.setJkdmc(bo.getVideoName());
middleGcjkd.setJkdzt(getStatus(bo.getDeviceState()));
middleGcjkd.setJkdlx(getDeviceType(bo.getDeviceType()));
middleGcjkd.setJkdwz(bo.getMonitoringPointLocation());
String latitude = bo.getLatitude();
String longitude = bo.getLongitude();
middleGcjkd.setXzb(latitude);
middleGcjkd.setYzb(longitude);
middleGcjkd.setYszb(longitude + "," + latitude);
middleGcjkd.setYszblx("WGS-84");
middleGcjkd.setDeleted(0);
middleGcjkd.setCreateDateTime(bo.getCreateTime());
middleGcjkd.setDatasource(String.valueOf(15));
return middleGcjkd;
}
private void httpAddMiddleGcxx(ProjectBo project) {
MiddleGcxx middleGcxx = getMiddleGcxxByProject(project);
String url = ipPort + "/middle/middleGcxx/add";
String body = JSON.toJSONString(middleGcxx);
log.info("url{}body:{}", url, body);
String post = HttpUtil.post(url, body);
log.info("rt{}", post);
}
private void httpUpdateMiddleGcxx(ProjectBo project) {
MiddleGcxx middleGcxx = getMiddleGcxxByProject(project);
String url = ipPort + "/middle/middleGcxx/edit";
String body = JSON.toJSONString(middleGcxx);
log.info("url{}body:{}", url, body);
String post = HttpUtil.post(url, body);
log.info("rt{}", post);
}
/**
* 获取中间库
*
* @param bo
* @return
*/
private MiddleGcxx getMiddleGcxxByProject(ProjectBo bo) {
MiddleGcxx middleGcxx = new MiddleGcxx();
middleGcxx.setId(bo.getProjectSn());//id存的是projectSn
middleGcxx.setGcmc(bo.getProjectName());
middleGcxx.setGcjsdd(bo.getProjectName());
middleGcxx.setSgxkzh(bo.getConstructionPermit());
middleGcxx.setGcssjd(bo.getStreetTownshipTown());
middleGcxx.setGcssjdbm(bo.getStreetTownshipTownCode());
middleGcxx.setGclb(getGclb(bo.getProjectType()));
middleGcxx.setSxtazzt(bo.getSxtazzt());
middleGcxx.setSxtazrq(bo.getSxtazrq());
middleGcxx.setQxbm(bo.getAreaCode());
middleGcxx.setXzb(bo.getLatitude());
middleGcxx.setYzb(bo.getLongitude());
middleGcxx.setYszb(bo.getLongitude() + "," + bo.getLatitude());
middleGcxx.setYszblx("WGS-84");
middleGcxx.setDatasource(String.valueOf(15));
return middleGcxx;
}
/**
* 获取设备类型
*
* @param deviceType
* @return
*/
public String getDeviceType(Integer deviceType) {
//1 JKDLX001 微卡口
//2 JKDLX002 枪机
//3 JKDLX003 球机
//4 JKDLX004 人脸识别
//设备类型1 枪机2球机3热成像4单兵5全景6无人机
if (deviceType != null) {
//设备状态1在线2离线
switch (deviceType) {
case 1:
return "JKDLX002";
case 2:
return "JKDLX003";
case 3:
return "JKDLX003";
case 4:
return "JKDLX003";
case 5:
return "JKDLX003";
case 6:
return "JKDLX003";
}
}
return null;
}
/**
* 获取中间库的监控点的视频在线状态
*
* @param status
* @return
*/
public Integer getStatus(Integer status) {
if (status != null) {
//设备状态1在线2离线
switch (status) {
case 1:
return 0;
case 2:
return 1;
}
}
return null;
}
/**
* 获取工程类别
*
* @param projectType
* @return
*/
public String getGclb(Integer projectType) {
//1 FWJSGC 房屋建设工程
//2 SZ 市政
//3 ZX 装修
//其他委办局工地
//4 HB_SWGD 水务
//5 HB_YLGD 园林
//6 HB_JTGD 交通
//7 HB_FJ 房建
//8 HB_HNTGD 混凝土搅拌站
//9 HB_JZLJXNC 建筑垃圾消纳场
//10 HB_QT 其他
//工程类别1房建2市政3安装4装饰5公路6冶炼7矿山8化工石油9水利水电10电力11农林12港口与航道13航天航空14通信15其他
String s = null;
switch (projectType) {
case 1:
s = "FWJSGC";
break;
case 2:
s = "SZ";
break;
case 3:
s = "ZX";
break;
case 4:
s = "ZX";
break;
case 5:
s = "HB_JTGD";
break;
case 6:
s = "HB_QT";
break;
case 7:
s = "HB_QT";
break;
case 8:
s = "HB_QT";
break;
case 9:
s = "HB_SWGD";
break;
case 10:
s = "HB_YLGD";
break;
case 11:
s = "HB_QT";
break;
case 12:
s = "HB_QT";
break;
case 13:
s = "HB_QT";
break;
case 14:
s = "HB_QT";
break;
case 15:
s = "HB_QT";
break;
}
return s;
}
}

View File

@ -0,0 +1,35 @@
package com.zhgd.xmgl.modules.yunlianwanwu.middle.task;
import com.zhgd.xmgl.modules.yunlianwanwu.middle.service.MiddleService;
import lombok.extern.slf4j.Slf4j;
import net.javacrumbs.shedlock.core.SchedulerLock;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
/**
* 云联万物同步结构化数据任务
*/
@Component
@Slf4j
public class MiddleTask {
@Value("${spring.profiles.active}")
private String activeProfile;
@Autowired
private MiddleService middleService;
/**
* 云联万物同步结构化数据任务每天同步一次
*/
@SchedulerLock(name = "aysnMiddle", lockAtMostFor = 1000 * 60 * 60, lockAtLeastFor = 1000 * 60 * 5)
@Scheduled(cron = "0 0 2 * * ?")
public void aysnMiddle() {
//判断是云联万物
if (activeProfile.equals("ylww")) {
middleService.syncProject();
middleService.syncMiddleGcjkd();
}
}
}