Commit 1fe7874d authored by hanbing's avatar hanbing

静态信息接口-方案数据-方案信息

parent f111ce96
package net.wanji.utc.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.http.converter.StringHttpMessageConverter;
import org.springframework.web.client.RestTemplate;
import java.nio.charset.StandardCharsets;
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate(ClientHttpRequestFactory factory) {
RestTemplate restTemplate = new RestTemplate(factory);
restTemplate.getMessageConverters().set(1,new StringHttpMessageConverter(StandardCharsets.UTF_8));
return restTemplate;
}
@Bean
public ClientHttpRequestFactory simpleClientHttpRequestFactory() {
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
factory.setConnectTimeout(30000);
factory.setReadTimeout(30000);
return factory;
}
}
\ No newline at end of file
......@@ -7,6 +7,7 @@ import net.wanji.utc.vo.CrossInfoInVO;
import net.wanji.utc.common.genericentity.OutVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import net.wanji.utc.vo.SchemePhaseLightsInVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
......@@ -39,4 +40,12 @@ public class StaticInfoController {
return ResponseEntity.ok("success");
}
@PostMapping("/schemePhaseLights")
@ApiOperation(value = "方案数据-方案信息、相位信息、灯组信息", notes = "方案数据-方案信息、相位信息、灯组信息")
public ResponseEntity schemePhaseLights(HttpServletRequest request,
@RequestBody SchemePhaseLightsInVO schemePhaseLightsInVO) throws Exception {
staticInfoService.schemePhaseLights(schemePhaseLightsInVO);
return ResponseEntity.ok("success");
}
}
package net.wanji.utc.mapper;
import net.wanji.utc.po.CrossSchemePO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author Kent HAN
* @date 2022/11/16 17:28
*/
public interface CrossSchemeMapper {
void insertBatch(@Param("entities") List<CrossSchemePO> crossSchemePOList);
}
package net.wanji.utc.po;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* @author Kent HAN
* @date 2022/11/16 16:09
*/
@Data
public class CrossSchemePO {
/** 方案ID */
@ApiModelProperty(name = "方案ID",notes = "")
private Integer id ;
/** 方案号 */
@ApiModelProperty(name = "方案号",notes = "")
private String no ;
/** 方案名称 */
@ApiModelProperty(name = "方案名称",notes = "")
private String name ;
/** 路口ID */
@ApiModelProperty(name = "路口ID",notes = "")
private String crossId ;
/** 周期 */
@ApiModelProperty(name = "周期",notes = "")
private Integer cycle ;
/** 协调相位ID */
@ApiModelProperty(name = "协调相位ID",notes = "")
private Integer coordPhase ;
/** 相位差 */
@ApiModelProperty(name = "相位差",notes = "")
private Integer offset ;
/** 数据来源:1信号机;2平台 */
@ApiModelProperty(name = "数据来源:1信号机;2平台",notes = "")
private Integer source ;
/** 删除标识:1删除;0未删除 */
@ApiModelProperty(name = "删除标识:1删除;0未删除",notes = "")
private Integer isDeleted ;
/** 创建时间 */
@ApiModelProperty(name = "创建时间",notes = "")
private Date gmtCreate ;
/** 修改时间 */
@ApiModelProperty(name = "修改时间",notes = "")
private Date gmtModified ;
}
......@@ -8,6 +8,6 @@ import java.util.List;
* @author Kent HAN
* @date 2022/11/15 13:18
*/
public interface HkService {
public interface HkStaticInfoService {
List<CrossInfoPO> crossBasicInfo();
}
package net.wanji.utc.service;
import net.wanji.utc.common.genericentity.ManufacturerRes;
import net.wanji.utc.vo.DetailCrossInfoVO;
/**
* @author Kent HAN
* @date 2022/11/16 11:03
*/
public interface OthersStaticInfoService {
ManufacturerRes<DetailCrossInfoVO> crossBasicInfo(String manufacturerAbbr);
}
package net.wanji.utc.service.SchemePhaseLights;
/**
* @author Kent HAN
* @date 2022/11/16 15:20
*/
public interface HkCrossSchemeService {
void hkCrossSchemeInfo(String crossCode) throws Exception;
}
package net.wanji.utc.service.SchemePhaseLights.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.hikvision.artemis.sdk.ArtemisHttpUtil;
import com.hikvision.artemis.sdk.config.ArtemisConfig;
import net.wanji.utc.common.commonentity.HttpRequest;
import net.wanji.utc.common.constant.Constants;
import net.wanji.utc.common.typeenum.BasicEnum;
import net.wanji.utc.mapper.CrossSchemeMapper;
import net.wanji.utc.po.CrossSchemePO;
import net.wanji.utc.service.SchemePhaseLights.HkCrossSchemeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 方案数据-方案信息
*
* @author Kent HAN
* @date 2022/11/16 15:27
*/
@Service
public class HkCrossSchemeServiceImpl implements HkCrossSchemeService {
@Value("${signal.manufacturer.hk.artemisPath}")
private String artemisPath;
@Autowired
private ArtemisConfig artemisConfig;
@Autowired
CrossSchemeMapper crossSchemeMapper;
@Override
public void hkCrossSchemeInfo(String crossCode) throws Exception {
List<CrossSchemePO> crossSchemePOList = new ArrayList<>();
// 请求3.1.3接口
Map<String, String> path = getPathMapByApiCode("uploadPatternCodeList");
Map<String, String> queryMap = new HashMap<>();
queryMap.put("crossCode", crossCode);
String phasePlanResult = ArtemisHttpUtil.doPostStringArtemis(artemisConfig, path, null, queryMap,
null, "application/json", null);
JSONObject object = JSON.parseObject(phasePlanResult);
if(Constants.HK_SUCCESS_CODE.equals(object.getInteger(Constants.HK_CODE_KEY))) {
JSONArray data = object.getJSONArray("data");
for (int i = 0; i < data.size(); i++) {
JSONObject obj = data.getJSONObject(i);
String patternNo = obj.getString("patternNo");
String patternName = obj.getString("patternName");
// 请求3.1.4接口
Map<String, String> path2 = getPathMapByApiCode("getCrossPlanDetail");
Map<String, String> queryMap2 = new HashMap<>();
queryMap2.put("crossCode", crossCode);
queryMap2.put("patternNo", patternNo);
String phaseDetailResult = ArtemisHttpUtil.doPostStringArtemis(artemisConfig, path2, null, queryMap2,
null, "application/json", null);
JSONObject object2 = JSON.parseObject(phaseDetailResult);
if(Constants.HK_SUCCESS_CODE.equals(object2.getInteger(Constants.HK_CODE_KEY))) {
JSONArray data2 = object2.getJSONArray("data");
for (int j = 0; j < data2.size(); j++) {
JSONObject obj2 = data2.getJSONObject(j);
Integer cycle = obj2.getInteger("cycle");
Integer coordPhase = obj2.getInteger("coordPhase");
Integer offset = obj2.getInteger("offset");
// 构造数据库记录
CrossSchemePO crossSchemePO = new CrossSchemePO();
crossSchemePO.setNo(patternNo);
crossSchemePO.setName(patternName);
crossSchemePO.setCrossId(crossCode);
crossSchemePO.setCycle(cycle);
crossSchemePO.setCoordPhase(coordPhase);
crossSchemePO.setOffset(offset);
crossSchemePO.setSource(2);
crossSchemePO.setIsDeleted(0);
crossSchemePOList.add(crossSchemePO);
}
}
}
}
// 写入数据库
crossSchemeMapper.insertBatch(crossSchemePOList);
}
private Map<String, String> getPathMapByApiCode(String apiCode) {
Map<String, String> res = new HashMap<>();
HttpRequest httpRequest = new HttpRequest(BasicEnum.ManufacturerEnum.HK.getAbbr(), apiCode);
res.put("http://", artemisPath + httpRequest.getUrl());
return res;
}
}
......@@ -4,8 +4,11 @@ import net.wanji.utc.common.baseentity.BaseCrossInfo;
import net.wanji.utc.common.genericentity.ManufacturerRes;
import net.wanji.utc.common.genericentity.OutVO;
import net.wanji.utc.vo.DetailCrossInfoVO;
import net.wanji.utc.vo.SchemePhaseLightsInVO;
public interface StaticInfoService {
ManufacturerRes<DetailCrossInfoVO> crossBasicInfo(OutVO<BaseCrossInfo> outVO);
void schemePhaseLights(SchemePhaseLightsInVO schemePhaseLightsInVO) throws Exception;
}
......@@ -13,7 +13,7 @@ import net.wanji.utc.mapper.CrossInfoMapper;
import net.wanji.utc.mapper.ManufacturerInfoMapper;
import net.wanji.utc.po.CrossInfoPO;
import net.wanji.utc.po.ManufacturerInfoPO;
import net.wanji.utc.service.HkService;
import net.wanji.utc.service.HkStaticInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
......@@ -28,7 +28,7 @@ import java.util.Map;
*/
@Slf4j
@Service
public class HkServiceImpl implements HkService {
public class HkStaticInfoServiceImpl implements HkStaticInfoService {
@Value("${signal.manufacturer.hk.artemisPath}")
private String artemisPath;
@Autowired
......
package net.wanji.utc.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;
import net.wanji.utc.common.commonentity.HttpRequest;
import net.wanji.utc.common.genericentity.ManufacturerRes;
import net.wanji.utc.service.OthersStaticInfoService;
import net.wanji.utc.util.HttpRestUtil;
import net.wanji.utc.util.StringUtils;
import net.wanji.utc.vo.DetailCrossInfoVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpMethod;
import org.springframework.stereotype.Service;
/**
* @author Kent HAN
* @date 2022/11/16 11:03
*/
@Service
public class OthersStaticInfoServiceImpl implements OthersStaticInfoService {
@Autowired
private HttpRestUtil httpRestUtil;
@Override
public ManufacturerRes<DetailCrossInfoVO> crossBasicInfo(String manufacturerAbbr) {
HttpRequest httpRequest = new HttpRequest(manufacturerAbbr, "queryCrossing");
String result = httpRestUtil.doExecute(httpRequest.getUrl(), httpRequest.getHeaders(), HttpMethod.POST, null);
if (StringUtils.isEmpty(result)) {
return null;
}
return JSON.parseObject(result, new TypeReference<ManufacturerRes<DetailCrossInfoVO>>() {});
}
}
......@@ -3,12 +3,18 @@ package net.wanji.utc.service.impl;
import net.wanji.utc.common.genericentity.ManufacturerRes;
import net.wanji.utc.common.typeenum.BasicEnum;
import net.wanji.utc.mapper.CrossInfoMapper;
import net.wanji.utc.mapper.ManufacturerInfoMapper;
import net.wanji.utc.po.CrossInfoPO;
import net.wanji.utc.service.HkService;
import net.wanji.utc.po.ManufacturerInfoPO;
import net.wanji.utc.service.HkStaticInfoService;
import net.wanji.utc.service.OthersStaticInfoService;
import net.wanji.utc.service.SchemePhaseLights.HkCrossSchemeService;
import net.wanji.utc.service.StaticInfoService;
import net.wanji.utc.common.baseentity.BaseCrossInfo;
import net.wanji.utc.common.genericentity.OutVO;
import net.wanji.utc.util.ListUtil;
import net.wanji.utc.vo.DetailCrossInfoVO;
import net.wanji.utc.vo.SchemePhaseLightsInVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -23,18 +29,59 @@ import java.util.Objects;
@Service
public class StaticInfoServiceImpl implements StaticInfoService {
@Autowired
HkService hkService;
HkStaticInfoService hkStaticInfoService;
@Autowired
CrossInfoMapper crossInfoMapper;
@Autowired
OthersStaticInfoService othersStaticInfoService;
@Autowired
ManufacturerInfoMapper manufacturerInfoMapper;
@Autowired
HkCrossSchemeService hkCrossSchemeService;
@Override
public ManufacturerRes<DetailCrossInfoVO> crossBasicInfo(OutVO<BaseCrossInfo> outVO) {
List<CrossInfoPO> crossInfoPOList = new ArrayList<>();
ManufacturerRes<DetailCrossInfoVO> res = new ManufacturerRes<>();
if (Objects.equals(BasicEnum.ManufacturerEnum.HK.getAbbr(), outVO.getManufacturerAbbr())) {
crossInfoPOList = hkService.crossBasicInfo();
crossInfoPOList = hkStaticInfoService.crossBasicInfo();
} else {
// todo 其他厂商
// 其他厂商
res = othersStaticInfoService.crossBasicInfo(outVO.getManufacturerAbbr());
if (null == res) {
return null;
}
List<DetailCrossInfoVO> dataContent = res.getDatalist();
if (ListUtil.isEmpty(dataContent)) {
return null;
}
for (DetailCrossInfoVO vo : dataContent) {
String id = vo.getTelesemeId();
CrossInfoPO crossInfoPO = crossInfoMapper.selectByPrimaryKey(id);
if (null != crossInfoPO) {
continue;
}
crossInfoPO = new CrossInfoPO();
// 用信号机ID作为路口ID
crossInfoPO.setId(id);
crossInfoPO.setName(vo.getCrossName());
crossInfoPO.setCode(id);
ManufacturerInfoPO manufacturerInfoPO = manufacturerInfoMapper.selectByAbbr(vo.getManufacturerAbbr());
if (manufacturerInfoPO != null) {
crossInfoPO.setManufacturerId(manufacturerInfoPO.getId());
}
crossInfoPO.setIp(vo.getIp());
crossInfoPO.setPort(vo.getPort());
// 经纬度
Double longitude = vo.getLon();
Double latitude = vo.getLat();
crossInfoPO.setLocation(longitude + "," + latitude);
crossInfoPO.setVersion(vo.getVersion());
crossInfoPO.setModel(vo.getModel());
crossInfoPO.setInstallTime(vo.getInstallTime());
crossInfoPOList.add(crossInfoPO);
}
}
//存储信号机信息
if (crossInfoPOList.size() == 0) {
......@@ -43,4 +90,20 @@ public class StaticInfoServiceImpl implements StaticInfoService {
crossInfoMapper.insertBatch(crossInfoPOList);
return res;
}
@Override
public void schemePhaseLights(SchemePhaseLightsInVO schemePhaseLightsInVO) throws Exception {
String manufacturerAbbr = schemePhaseLightsInVO.getManufacturerAbbr();
if (Objects.equals(BasicEnum.ManufacturerEnum.HK.getAbbr(), manufacturerAbbr)) {
// 海康
// 方案信息
String crossCode = schemePhaseLightsInVO.getCrossCode();
hkCrossSchemeService.hkCrossSchemeInfo(crossCode);
// 相位信息
// 灯组信息
} else {
// todo 其他厂商
}
}
}
......@@ -5,6 +5,7 @@ import net.wanji.utc.common.commonentity.Direction;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
import java.util.List;
@EqualsAndHashCode(callSuper = true)
......@@ -15,6 +16,14 @@ public class DetailCrossInfoVO extends BaseCrossInfo {
private String crossName;
//路口类型,2行人过街 3 丁字口 4 十字口 5 五岔口 6 六岔口
private String crossType;
private String ip;
private Integer port;
// 版本号
private String version;
// 型号
private String model ;
// 安装时间
private Date installTime;
//经度
private Double lon;
//纬度
......
package net.wanji.utc.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author Kent HAN
* @date 2022/11/16 13:23
*/
@Data
@ApiModel(value = "CrossInfoInVO", description = "查询方案数据-方案信息、相位信息、灯组信息输入参数")
public class SchemePhaseLightsInVO {
@ApiModelProperty(value = "厂商缩写 HK-海康")
String manufacturerAbbr;
@ApiModelProperty(value = "信号机唯一标识")
private String crossCode;
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="net.wanji.utc.mapper.CrossSchemeMapper">
<resultMap type="net.wanji.utc.po.CrossSchemePO" id="BaseResultMap">
<result property="id" column="id"/>
<result property="no" column="no"/>
<result property="name" column="name"/>
<result property="crossId" column="cross_id"/>
<result property="cycle" column="cycle"/>
<result property="coordPhase" column="coord_phase"/>
<result property="offset" column="offset"/>
<result property="source" column="source"/>
<result property="isDeleted" column="is_deleted"/>
<result property="gmtCreate" column="gmt_create"/>
<result property="gmtModified" column="gmt_modified"/>
</resultMap>
<!-- 批量新增数据 -->
<insert id="insertBatch" keyProperty="id" useGeneratedKeys="true">
insert into t_cross_scheme(no,name,cross_id,cycle,coord_phase,offset,source,is_deleted)
values
<foreach collection="entities" item="entity" separator=",">
(#{entity.no},#{entity.name},#{entity.crossId},#{entity.cycle},#{entity.coordPhase},#{entity.offset},#{entity.source},#{entity.isDeleted})
</foreach>
</insert>
</mapper>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment