云联万物中间库

This commit is contained in:
GUO 2023-03-21 08:22:30 +08:00
parent ee8bbf58f6
commit f9616330f5
6 changed files with 229 additions and 116 deletions

View File

@ -3,7 +3,7 @@
<mapper namespace="com.zhgd.xmgl.modules.basicdata.mapper.BaseModuleMapper">
<select id="getCompanyModuleList" resultType="com.zhgd.xmgl.modules.basicdata.entity.BaseModule">
SELECT a.*
SELECT DISTINCT a.*
from base_module a INNER JOIN base_module_project b ON (a.module_id=b.module_id and b.type=1)
WHERE b.type=1 AND b.sn=#{headquartersSn} and a.style_type=#{styleType}
<if test="projectSelectType == '1'.toString()">

View File

@ -7,6 +7,7 @@ import com.zhgd.xmgl.modules.project.entity.Project;
import com.zhgd.xmgl.modules.project.entity.vo.GroupByProjectProgressVo;
import com.zhgd.xmgl.modules.project.entity.vo.GroupByProjectTypeVo;
import com.zhgd.xmgl.modules.project.entity.vo.ProjectDurationVO;
import com.zhgd.xmgl.modules.yunlianwanwu.middle.entity.bo.ProjectBo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@ -83,4 +84,6 @@ public interface ProjectMapper extends BaseMapper<Project> {
List<GroupByProjectTypeVo> groupByProjectType(Map<String, Object> map);
List<GroupByProjectProgressVo> groupByProjectProgress();
List<ProjectBo> queryAllProjectAndVideoInfo();
}

View File

@ -665,4 +665,14 @@
HAVING
p.project_progress is NOT null
</select>
<select id="queryAllProjectAndVideoInfo"
resultType="com.zhgd.xmgl.modules.yunlianwanwu.middle.entity.bo.ProjectBo">
SELECT p.*,
IF(count(vi.item_id) > 0, 1, 0) sxtazzt,
min(vi.create_time) sxtazrq
FROM project p
LEFT JOIN project_video_config pvc ON pvc.project_sn = p.project_sn
LEFT JOIN video_item vi ON vi.video_id = pvc.id
GROUP BY p.project_sn
</select>
</mapper>

View File

@ -1,35 +1,35 @@
package com.zhgd.xmgl.modules.yunlianwanwu.middle;
import cn.hutool.core.date.DateUtil;
import cn.hutool.http.HttpUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.gexin.fastjson.JSON;
import com.zhgd.xmgl.modules.project.entity.Project;
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.entity.VideoItem;
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.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 云联万物的中间库的controller只限自己调用
* 云联万物的中间库的controller
*/
@RestController
@RequestMapping("middle")
@Slf4j
public class MiddleController {
private String ip = "http://localhost:8081";
private String ipPort = "http://localhost:22333";
@Autowired
private ProjectMapper projectMapper;
@ -38,98 +38,170 @@ public class MiddleController {
@GetMapping("/add/project")
public void addProject() {
List<Project> projects = projectMapper.selectList(new QueryWrapper<>());
log.info("projects:{}", JSON.toJSONString(projects));
if (CollectionUtils.isNotEmpty(projects)) {
for (Project project : projects) {
MiddleGcxx middleGcxx = new MiddleGcxx();
middleGcxx.setId(project.getProjectSn());//id存的是projectSn
middleGcxx.setGcmc(project.getProjectName());
middleGcxx.setSgxkzh(project.getConstructionPermit());
//middleGcxx.setSgzbhh();
//middleGcxx.setSgdjyjh();
middleGcxx.setGcjsdd(project.getProjectAddress());
middleGcxx.setGcssjd("暂无");
middleGcxx.setGcssjdbm("暂无");
middleGcxx.setGcgm1(new BigDecimal(project.getProjectAcreage()));
//middleGcxx.setGcgm2();
//middleGcxx.setHtjg();
//middleGcxx.setHtbh();
//middleGcxx.setHtgq();
//middleGcxx.setHtkgrq();
//middleGcxx.setHtjgrq();
//middleGcxx.setGhxkzh();
//middleGcxx.setTdpzwh();
//middleGcxx.setTdpzspdw();
//middleGcxx.setRfmj();
//middleGcxx.setGctzxz();
//middleGcxx.setLxpzwh();
//middleGcxx.setFwts();
//middleGcxx.setZxlb();
middleGcxx.setGclb(getGclb(project.getProjectType()));
//middleGcxx.setGcxz();
//middleGcxx.setGcxxjd();
//middleGcxx.setZljdzt();
//middleGcxx.setAqjdzt();
//middleGcxx.setSxtazzt();
//middleGcxx.setSxtazrq();
//middleGcxx.setSxtccrq();
middleGcxx.setQxbm("暂无");
middleGcxx.setXzb(project.getLongitude());
middleGcxx.setYzb(project.getLatitude());
middleGcxx.setYszb(project.getLongitude() + "," + project.getLatitude());
//middleGcxx.setYszblx();
middleGcxx.setCreateDateTime(DateUtil.parseDateTime(project.getCreateTime()));
middleGcxx.setUpdateDateTime(new Date());
middleGcxx.setDatasource(String.valueOf(project.getSourceType()));
//middleGcxx.setCjsj();
//middleGcxx.setXgsj();
String url = ip + "/middle/middleGcxx/add";
String body = JSON.toJSONString(middleGcxx);
log.info("url{}body:{}", url, body);
String post = HttpUtil.post(url, body);
log.info("rt{}", post);
//从中间库接口获取所有项目
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);
}
}
}
}
}
}
}
@GetMapping("/middleGcjkd/add")
public void addMiddleGcjkd() {
List<VideoItemConfigBo> bos = videoItemMapper.selectDeviceDetailAndProjectSnList();
log.info("bos:{}", JSON.toJSONString(bos));
if (CollectionUtils.isNotEmpty(bos)) {
for (VideoItemConfigBo bo : bos) {
MiddleGcjkd middleGcjkd = new MiddleGcjkd();
middleGcjkd.setId(String.valueOf(bo.getItemId()));
middleGcjkd.setGcid(bo.getProjectSn());
//middleGcjkd.setSgxkzh();
//middleGcjkd.setSgzbh();
//middleGcjkd.setSgdjyjh();
middleGcjkd.setJkdbh(bo.getSerialNumber());
middleGcjkd.setJkdmc(bo.getVideoName());
middleGcjkd.setJkdzt(getStatus(bo.getDeviceState()));
//middleGcjkd.setXzb();
//middleGcjkd.setYzb();
//middleGcjkd.setYszb();
//middleGcjkd.setYszblx();
middleGcjkd.setDeleted(0);
middleGcjkd.setCreateDateTime(bo.getCreateTime());
middleGcjkd.setUpdateDateTime(new Date());
middleGcjkd.setDatasource("暂无");
//middleGcjkd.setCjsj();
//middleGcjkd.setXgsj();
//middleGcjkd.setSpbfdz();
middleGcjkd.setJkdlx(getDeviceType(bo.getDeviceType()));
middleGcjkd.setJkdwz("暂无");
String url = ip + "/middle/middleGcjkd/add";
String body = JSON.toJSONString(middleGcjkd);
log.info("url{}body:{}", url, body);
String post = HttpUtil.post(url, body);
log.info("rt{}", post);
//从中间库接口获取所有监控点位
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);
}
}
}
}
}
}
}
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 枪机
@ -141,22 +213,28 @@ public class MiddleController {
//设备状态1在线2离线
switch (deviceType) {
case 1:
return "2";
return "JKDLX002";
case 2:
return "3";
return "JKDLX003";
case 3:
return "3";
return "JKDLX003";
case 4:
return "3";
return "JKDLX003";
case 5:
return "3";
return "JKDLX003";
case 6:
return "3";
return "JKDLX003";
}
}
return null;
}
/**
* 获取中间库的监控点的视频在线状态
*
* @param status
* @return
*/
public Integer getStatus(Integer status) {
if (status != null) {
//设备状态1在线2离线
@ -190,55 +268,55 @@ public class MiddleController {
//10 HB_QT 其他
//工程类别1房建2市政3安装4装饰5公路6冶炼7矿山8化工石油9水利水电10电力11农林12港口与航道13航天航空14通信15其他
Integer s = null;
String s = null;
switch (projectType) {
case 1:
s = 1;
s = "FWJSGC";
break;
case 2:
s = 2;
s = "SZ";
break;
case 3:
s = 3;
s = "ZX";
break;
case 4:
s = 3;
s = "ZX";
break;
case 5:
s = 6;
s = "HB_JTGD";
break;
case 6:
s = 10;
s = "HB_QT";
break;
case 7:
s = 10;
s = "HB_QT";
break;
case 8:
s = 10;
s = "HB_QT";
break;
case 9:
s = 4;
s = "HB_SWGD";
break;
case 10:
s = 5;
s = "HB_YLGD";
break;
case 11:
s = 10;
s = "HB_QT";
break;
case 12:
s = 10;
s = "HB_QT";
break;
case 13:
s = 10;
s = "HB_QT";
break;
case 14:
s = 10;
s = "HB_QT";
break;
case 15:
s = 10;
s = "HB_QT";
break;
}
return s != null ? String.valueOf(s) : null;
return s;
}
}

View File

@ -200,12 +200,10 @@ public class MiddleGcxx implements Serializable {
* 1已安装摄像头
* 2已拆除
*/
private Integer sxtazzt;
/**
* 摄像头安装日期
*/
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern = "yyyy-MM-dd")
@ApiModelProperty(value = "摄像头安装日期")

View File

@ -0,0 +1,24 @@
package com.zhgd.xmgl.modules.yunlianwanwu.middle.entity.bo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.zhgd.xmgl.modules.project.entity.Project;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
@Data
public class ProjectBo extends Project {
/**
* 摄像头安装状态0:未安装摄像头
* 1已安装摄像头
* 2已拆除
*/
private Integer sxtazzt;
/**
* 摄像头安装日期
*/
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern = "yyyy-MM-dd")
@ApiModelProperty(value = "摄像头安装日期")
private java.util.Date sxtazrq;
}