Commit 79f8a3db by chentian

时空通用工具

parent d08da175
package com.founder.asj.qgxzMapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.founder.commonutils.asjEntity.TbStAsj;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.Map;
/**
* <p>
* 案事件基本信息 Mapper 接口
* </p>
*
* @author yangyang
* @since 2021-06-25
*/
@Mapper
@Component
public interface TbStAsjqgMapper extends BaseMapper<TbStAsj> {
List<Map<String,Object>> getqgAsjxxByZjhm(@Param(value = "zjhm")String zjhm,@Param(value = "ssdw")String ssdw);
}
<?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="com.founder.asj.qgxzMapper.TbStAsjqgMapper">
<select id="getqgAsjxxByZjhm" parameterType="java.lang.String" resultType="map">
SELECT
T.asjbh AS asjbh,
TO_CHAR(XYR.ZHRQ,'YYYY-MM-DD HH24:mi:ss') AS zhrq,
(select name from SYS_DICTITEM where groupid='CODE_AJLB' AND code = T.ajlbdm) AS ajlbdmMc,
TO_CHAR(T.asjfssj_Asjfskssj,'YYYY-MM-DD HH24:mi:ss') AS asjfssjAsjfskssj,
TO_CHAR(T.larq,'YYYY-MM-DD HH24:mi:ss') AS larq
FROM TB_ST_ASJ T,TB_XW_ZBFZXYR XYR
where
T.ASJBH = XYR.ASJBH
AND
T.XXSC_PDBZ = 0
AND
XYR.XXSC_PDBZ = 0
<if test="ssdw != null and ssdw != ''">
AND T.ASJBH NOT LIKE '%A' || #{ssdw, jdbcType=VARCHAR } || '%'
</if>
<if test="zjhm != null and zjhm != ''">
AND XYR.zhfzxyr_Cyzj_Zjhm = #{zjhm}
</if>
</select>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>service</artifactId>
<groupId>com.founder</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>es</artifactId>
<build>
<finalName>es</finalName>
</build>
</project>
\ No newline at end of file
package com.founder.eszy;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
@ComponentScan(basePackages = {"com.founder"})
public class EsApplication {
public static void main(String[] args) {
System.setProperty("es.set.netty.runtime.available.processors", "false");
SpringApplication.run(EsApplication.class, args);
}
}
package com.founder.eszy.controller;
import com.founder.commonutils.publicEntity.MapRestResult;
import com.founder.eszy.esExtract.EsTbZyCameraTranslation;
import com.founder.eszy.esExtract.EsTbZyJzxxTranslation;
import com.founder.eszy.esExtract.EsTbZyKkxxTranslation;
import com.founder.eszy.esSearch.EsSearch;
import com.founder.servicebase.logs.OperLog;
import com.founder.servicebase.logs.OperationType;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class EsExtractController {
@Autowired
private EsTbZyJzxxTranslation esTbZyJzxxTranslation;
@Autowired
private EsTbZyKkxxTranslation esTbZyKkxxTranslation;
@Autowired
private EsTbZyCameraTranslation esTbZyCameraTranslation;
@Autowired
private EsSearch esSearch;
@Value("${jz_index}")
private String jz_index;
@Value("${kk_index}")
private String kk_index;
@Value("${camera_index}")
private String camera_index;
//基站
@OperLog(message = "基站es全量抽取",operation = OperationType.QUERY)
@ApiOperation(value = "基站es全量抽取")
@GetMapping("/jzxx")
public MapRestResult jzxx() {
System.out.println("jzxxES开始=========================");
try {
esTbZyJzxxTranslation.jzxxEsSave();
} catch (Exception e) {
e.printStackTrace();
}
int count = (int) esSearch.EScount(jz_index);
return MapRestResult.build(200,"基站数据抽取完成", count);
}
//卡口
@OperLog(message = "卡口es全量抽取",operation = OperationType.QUERY)
@ApiOperation(value = "卡口es全量抽取")
@GetMapping("/kkxx")
public MapRestResult kkxx() {
System.out.println("kkxxES开始=========================");
try {
esTbZyKkxxTranslation.kkxxEsSave();
} catch (Exception e) {
e.printStackTrace();
}
int count = (int) esSearch.EScount(kk_index);
return MapRestResult.build(200,"卡口数据抽取完成",count);
}
//人脸
@ApiOperation(value = "人脸es全量抽取")
@GetMapping("/camera")
public MapRestResult camera() {
System.out.println("cameraES开始=========================");
try {
esTbZyCameraTranslation.cameraEsSave();
} catch (Exception e) {
e.printStackTrace();
}
int count = (int) esSearch.EScount(camera_index);
return MapRestResult.build(200,"人脸数据抽取完成",count);
}
}
package com.founder.eszy.controller;
import com.founder.commonutils.publicEntity.GeographicInfo;
import com.founder.commonutils.publicEntity.MapRestResult;
import com.founder.commonutils.publicEntity.RequestBean;
import com.founder.eszy.esSearch.EsTbZyCameraTranslationQuery;
import com.founder.eszy.esSearch.EsTbZyJzxxTranslationQuery;
import com.founder.eszy.esSearch.EsTbZyKkxxTranslationQuery;
import com.founder.servicebase.logs.OperLog;
import com.founder.servicebase.logs.OperationType;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@RestController
public class EsQueryController {
@Autowired
private EsTbZyJzxxTranslationQuery esTbZyJzxxTranslationQuery;
@Autowired
private EsTbZyKkxxTranslationQuery esTbZyKkxxTranslationQuery;
@Autowired
private EsTbZyCameraTranslationQuery esTbZyCameraTranslationQuery;
//基站搜索
@OperLog(message = "基站查询",operation = OperationType.QUERY)
@ApiOperation(value = "基站查询")
@RequestMapping(value = "/getTbZyJzxxList",method = RequestMethod.POST)
public MapRestResult getTbZyJzxxList(@RequestBody RequestBean bean) throws Exception {
List<Map<String,Object>> result= new ArrayList<>();
//按区域范围查询es数据
if(bean.getGeographicInfo()!=null&&!StringUtils.isEmpty(bean.getGeographicInfo())){
GeographicInfo geographicInfo =bean.getGeographicInfo();
String distance=geographicInfo.getDistance();
//判断是否是圆
if(distance!=null&&distance!=""){
org.elasticsearch.common.geo.GeoPoint point=geographicInfo.getPoint();
if (distance == null || point == null){
return null;
}
try {
result = esTbZyJzxxTranslationQuery.searchGeoDistance(bean.getIndex(),bean.getType(),geographicInfo.getField(),distance,point);
}catch (Exception e){
e.printStackTrace();
}
return MapRestResult.build(200,"成功查询基站数据",result.size()+"",result);
}else{
try {
result = esTbZyJzxxTranslationQuery.searchGeoPolygon(bean.getIndex(),bean.getType(),geographicInfo.getField(),geographicInfo.getPoints());
}catch (Exception e){
e.printStackTrace();
}
return MapRestResult.build(200,"成功查询基站数据",result.size()+"",result);
}
}
//不带区域信息查询es数据
else{
result = esTbZyJzxxTranslationQuery.searchQuery(bean.getIndex(),bean.getType(),null,null);
return MapRestResult.build(200,"成功查询基站数据",result.size()+"",result);
}
}
//基站搜索
@OperLog(message = "卡口查询",operation = OperationType.QUERY)
@ApiOperation(value = "卡口查询")
@RequestMapping(value = "/getTbZyKkxxList",method = RequestMethod.POST)
public MapRestResult getTbZyKkxxList(@RequestBody RequestBean bean) throws Exception {
List<Map<String,Object>> result= new ArrayList<>();
//按区域范围查询es数据
if(bean.getGeographicInfo()!=null&&!StringUtils.isEmpty(bean.getGeographicInfo())){
GeographicInfo geographicInfo =bean.getGeographicInfo();
String distance=geographicInfo.getDistance();
//判断是否是圆
if(distance!=null&&distance!=""){
org.elasticsearch.common.geo.GeoPoint point=geographicInfo.getPoint();
if (distance == null || point == null){
return null;
}
try {
result = esTbZyKkxxTranslationQuery.searchGeoDistance(bean.getIndex(),bean.getType(),geographicInfo.getField(),distance,point);
}catch (Exception e){
e.printStackTrace();
}
return MapRestResult.build(200,"成功查询卡口数据",result.size()+"",result);
}else{
try {
result = esTbZyKkxxTranslationQuery.searchGeoPolygon(bean.getIndex(),bean.getType(),geographicInfo.getField(),geographicInfo.getPoints());
}catch (Exception e){
e.printStackTrace();
}
return MapRestResult.build(200,"成功查询卡口数据",result.size()+"",result);
}
}
//不带区域信息查询es数据
else{
result = esTbZyKkxxTranslationQuery.searchQuery(bean.getIndex(),bean.getType(),null,null);
return MapRestResult.build(200,"成功查询卡口数据",result.size()+"",result);
}
}
//人脸搜索
@ApiOperation(value = "人脸查询")
@RequestMapping(value = "/getTbZyCameraList",method = RequestMethod.POST)
public MapRestResult getTbZyCameraList(@RequestBody RequestBean bean) throws Exception {
List<Map<String,Object>> result= new ArrayList<>();
//按区域范围查询es数据
if(bean.getGeographicInfo()!=null&&!StringUtils.isEmpty(bean.getGeographicInfo())){
GeographicInfo geographicInfo =bean.getGeographicInfo();
String distance=geographicInfo.getDistance();
//判断是否是圆
if(distance!=null&&distance!=""){
org.elasticsearch.common.geo.GeoPoint point=geographicInfo.getPoint();
if (distance == null || point == null){
return null;
}
try {
result = esTbZyCameraTranslationQuery.searchGeoDistance(bean.getIndex(),bean.getType(),geographicInfo.getField(),distance,point);
}catch (Exception e){
e.printStackTrace();
}
return MapRestResult.build(200,"成功查询人脸数据",result.size()+"",result);
}else{
try {
result = esTbZyCameraTranslationQuery.searchGeoPolygon(bean.getIndex(),bean.getType(),geographicInfo.getField(),geographicInfo.getPoints());
}catch (Exception e){
e.printStackTrace();
}
return MapRestResult.build(200,"成功查询人脸数据",result.size()+"",result);
}
}
//不带区域信息查询es数据
else{
result = esTbZyCameraTranslationQuery.searchQuery(bean.getIndex(),bean.getType(),null,null);
return MapRestResult.build(200,"成功查询人脸数据",result.size()+"",result);
}
}
}
package com.founder.eszy.esExtract;
import com.founder.commonutils.esEntity.TbZyCamera;
import com.founder.commonutils.publicEntity.MapRestResult;
import com.founder.commonutils.publicEntity.Receiving;
import com.founder.eszy.mapper.TbZyCameraMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* Created by chent 20210309 人脸
*/
@Service
public class EsTbZyCameraTranslation {
@Autowired
private TbZyCameraMapper tbZyCameraMapper;
@Autowired
private TbZyCameraEs es;
@Value("${camera_count}")
private int camera_count;
@Value("${camera_limit}")
private int camera_limit;
@Value("${camera_begin}")
private int camera_begin;
@Value("${camera_index}")
private String camera_index;
//批量导入es--------------------------------------------------------------------
public MapRestResult cameraEsSave() throws Exception {
long start = System.currentTimeMillis();
ExecutorService executorService = Executors.newCachedThreadPool();//按需分配线程池
Receiving receiving = new Receiving();
//receiving.setValue("'A01D67B67AA513CFE0530E07920A9B35','A01D67BAC6D613DBE0530E07920A6998'");
//分院
int size =camera_count;
int limit=camera_limit;
//特殊处理
if(limit==0){
limit=1;
}
long threadNum = size / limit;
int startnum = 0;
int endnum = 0;
ExecutorService executorService1 = Executors.newCachedThreadPool();//按需分配线程池
for (int i = camera_begin; i < threadNum + 1; i++) {
startnum = i * limit+1;
endnum = ((i + 1) * limit);
if (startnum > size) {
break;
}
if (endnum >size) {
endnum = size;
}
if (startnum == endnum) {
break;
}
receiving.setBegin(startnum+"");
receiving.setEnd(endnum+"");
//System.out.println("批量分流===========开始"+startnum+"===结束==="+endnum);
List<TbZyCamera> list = tbZyCameraMapper.selectTbZyCameraList(receiving);
System.out.println("批量分流===========开始"+startnum+"===结束==="+endnum+"====总数"+list.size());
// HandleThread thread = new HandleThread(list,camera_index);
//executorService1.execute(thread);
}
return null;
}
class HandleThread extends Thread {
private List<TbZyCamera> data;
private String index;
public HandleThread(List<TbZyCamera> data,String index) {
this.data = data;
this.index=index;
}
public void run() {
es.bulkCommit(data,index);
}
}
}
package com.founder.eszy.esExtract;
import com.founder.commonutils.esEntity.TbZyJz;
import com.founder.commonutils.publicEntity.MapRestResult;
import com.founder.commonutils.publicEntity.Receiving;
import com.founder.eszy.mapper.TbZyJzxxMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* Created by chent 20210309
*/
@Service
public class EsTbZyJzxxTranslation {
@Autowired
private TbZyJzxxMapper tbZyJzxxMapper;
@Autowired
private TbZyJzxxEs es;
@Value("${jz_count}")
private int jz_count;
@Value("${jz_limit}")
private int jz_limit;
@Value("${jz_begin}")
private int jz_begin;
@Value("${jz_index}")
private String jz_index;
//批量导入es--------------------------------------------------------------------
public MapRestResult jzxxEsSave() throws Exception {
long start = System.currentTimeMillis();
ExecutorService executorService = Executors.newCachedThreadPool();//按需分配线程池
Receiving receiving = new Receiving();
//receiving.setValue("'A01D67B67AA513CFE0530E07920A9B35','A01D67BAC6D613DBE0530E07920A6998'");
//分院
int size =jz_count;
int limit=jz_limit;
//特殊处理
if(limit==0){
limit=1;
}
long threadNum = size / limit;
int startnum = 0;
int endnum = 0;
ExecutorService executorService1 = Executors.newCachedThreadPool();//按需分配线程池
for (int i = jz_begin; i < threadNum + 1; i++) {
startnum = i * limit+1;
endnum = ((i + 1) * limit);
if (startnum > size) {
break;
}
if (endnum >size) {
endnum = size;
}
if (startnum == endnum) {
break;
}
receiving.setBegin(startnum+"");
receiving.setEnd(endnum+"");
//System.out.println("批量分流===========开始"+startnum+"===结束==="+endnum);
List<TbZyJz> list = tbZyJzxxMapper.selectTbZyJzxxList(receiving);
System.out.println("批量分流===========开始"+startnum+"===结束==="+endnum+"====总数"+list.size());
HandleThread thread = new HandleThread(list,jz_index);
executorService1.execute(thread);
}
return null;
}
class HandleThread extends Thread {
private List<TbZyJz> data;
private String index;
public HandleThread(List<TbZyJz> data, String index) {
this.data = data;
this.index=index;
}
public void run() {
es.bulkCommit(data,index);
}
}
}
package com.founder.eszy.esExtract;
import com.founder.commonutils.esEntity.TbZyKk;
import com.founder.commonutils.publicEntity.MapRestResult;
import com.founder.commonutils.publicEntity.Receiving;
import com.founder.eszy.mapper.TbZyKkxxMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* Created by chent 20210309
*/
@Service
public class EsTbZyKkxxTranslation {
@Autowired
private TbZyKkxxMapper tbZyKkxxMapper;
@Autowired
private TbZyKkxxEs es;
@Value("${kk_count}")
private int kk_count;
@Value("${kk_limit}")
private int kk_limit;
@Value("${kk_begin}")
private int kk_begin;
@Value("${kk_index}")
private String kk_index;
//批量导入es--------------------------------------------------------------------
public MapRestResult kkxxEsSave() throws Exception {
long start = System.currentTimeMillis();
ExecutorService executorService = Executors.newCachedThreadPool();//按需分配线程池
Receiving receiving = new Receiving();
//receiving.setValue("'A01D67B67AA513CFE0530E07920A9B35','A01D67BAC6D613DBE0530E07920A6998'");
//分院
int size =kk_count;
int limit=kk_limit;
//特殊处理
if(limit==0){
limit=1;
}
long threadNum = size / limit;
int startnum = 0;
int endnum = 0;
ExecutorService executorService1 = Executors.newCachedThreadPool();//按需分配线程池
for (int i = kk_begin; i < threadNum + 1; i++) {
startnum = i * limit+1;
endnum = ((i + 1) * limit);
if (startnum > size) {
break;
}
if (endnum >size) {
endnum = size;
}
if (startnum == endnum) {
break;
}
receiving.setBegin(startnum+"");
receiving.setEnd(endnum+"");
//System.out.println("批量分流===========开始"+startnum+"===结束==="+endnum);
List<TbZyKk> list = tbZyKkxxMapper.selectTbZyKkxxList(receiving);
System.out.println("批量分流===========开始"+startnum+"===结束==="+endnum+"====总数"+list.size());
HandleThread thread = new HandleThread(list,kk_index);
executorService1.execute(thread);
}
return null;
}
class HandleThread extends Thread {
private List<TbZyKk> data;
private String index;
public HandleThread(List<TbZyKk> data, String index) {
this.data = data;
this.index=index;
}
public void run() {
es.bulkCommit(data,index);
}
}
}
package com.founder.eszy.esExtract;
import com.founder.commonutils.esEntity.TbZyCamera;
import org.elasticsearch.action.admin.indices.create.CreateIndexRequestBuilder;
import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsRequest;
import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsResponse;
import org.elasticsearch.action.bulk.BulkRequestBuilder;
import org.elasticsearch.client.Client;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Created by chentian on 2021-3-9
*/
@Service
public class TbZyCameraEs {
/**
* 一 创建索引方法 批量提交时 调这个方法
*/
// model 索引前缀名 比如 user
// reportTime 当前入库日期 比如20200514
// 组合起来就是 user-20200514
// 查询的时候如果想查所有user 索引名称可以是:user-*
//createESIndex(model + "-" + reportTime);
@Autowired
private Client esClient;
public void createESIndex(String indexName) {
IndicesExistsResponse response = esClient.admin().indices()
.exists(new IndicesExistsRequest().indices(new String[] { indexName })).actionGet();
if (response.isExists()) {
return;
}
Map<String, Object> setting = new HashMap<String, Object>();
setting.put("number_of_shards", 3);//这个自己设个数吧。我也没搞清应该设置成多少合适。你设置成3-5比较合适。
setting.put("max_result_window", 10000000);
setting.put("number_of_replicas", 2); //根据需求配置。尽量不要设置为0。可以设置成es集群机器数量
//setting.put("refresh_interval", "120s"); //你这儿不需要配置
CreateIndexRequestBuilder cib = esClient.admin().indices().prepareCreate(indexName).setSettings(setting);
// 这些都是字段名
XContentBuilder mapping = null;
try {
mapping = XContentFactory.jsonBuilder().startObject().startObject("pointdata")//这是type
.startObject("properties")// <br>//不动
/**
* 底下这些是字段 ctrl+shift+u
* .field("index", false) 不建立索引,凡是查询条件,建议加上索引,提升查询速度
*/
.startObject("id").field("type", "keyword").endObject().field("index", false).endObject()
.startObject("created").field("type", "keyword").endObject().field("index", false).endObject()
.startObject("updated").field("type", "keyword").endObject().field("index", false).endObject()
.startObject("geoString").field("type", "keyword").endObject()
.startObject("geometry").field("type", "keyword").endObject()
.startObject("addr").field("type", "keyword").endObject()
.startObject("capability").field("type", "keyword").endObject()
.startObject("city").field("type", "keyword").endObject()
.startObject("county").field("type", "keyword").endObject()
.startObject("cover").field("type", "keyword").endObject()
.startObject("name").field("type", "keyword").endObject()
.startObject("password").field("type", "keyword").endObject()
.startObject("port").field("type", "keyword").endObject()
.startObject("rtspuri").field("type", "keyword").endObject()
.startObject("stationId").field("type", "keyword").endObject()
.startObject("status").field("type", "keyword").endObject()
.startObject("type").field("type", "keyword").endObject()
.startObject("uri").field("type", "keyword").endObject()
.startObject("username").field("type", "keyword").endObject()
.startObject("shortName").field("type", "keyword").endObject()
.startObject("inStation").field("type", "keyword").endObject()
.startObject("liveurl").field("type", "keyword").endObject()
.startObject("parameter").field("type", "keyword").endObject()
.startObject("code").field("type", "keyword").endObject()
.startObject("cType").field("type", "keyword").endObject()
.startObject("districtId").field("type", "keyword").endObject()
.startObject("nodeId").field("type", "keyword").endObject()
.startObject("defAlg").field("type", "keyword").endObject()
.startObject("onlines").field("type", "keyword").endObject()
.startObject("snap").field("type", "keyword").endObject()
.startObject("appType").field("type", "keyword").endObject()
.startObject("appValue").field("type", "keyword").endObject()
.startObject("cameraCode").field("type", "keyword").endObject()
.startObject("placeTypeId").field("type", "keyword").endObject()
.startObject("deviceTypeId").field("type", "keyword").endObject()
.startObject("captureBankId").field("type", "keyword").endObject()
.startObject("snaplevel2").field("type", "keyword").endObject()
.startObject("remarks").field("type", "keyword").endObject()
.startObject("projectType").field("type", "keyword").endObject()
.startObject("snapThreshold").field("type", "keyword").endObject()
.startObject("otherInfo").field("type", "keyword").endObject()
.startObject("polenum").field("type", "keyword").endObject()
.startObject("snCode").field("type", "keyword").endObject()
.startObject("macAddress").field("type", "keyword").endObject()
.startObject("ifboxCameraId").field("type", "keyword").endObject()
.startObject("ifboxRstspuri").field("type", "keyword").endObject()
.startObject("ifboxCapbility").field("type", "keyword").endObject()
.startObject("ifboxHeight").field("type", "keyword").endObject()
.startObject("ifboxWidth").field("type", "keyword").endObject()
.startObject("x").field("type", "keyword").field("index", false).endObject()
.startObject("y").field("type", "keyword").field("index", false).endObject()
.startObject("xy").field("type", "geo_point").endObject()//经纬度特殊处理
//更新时间
// .startObject("updatedtime").field("type", "keyword").endObject()//修改时间
.endObject().endObject().endObject();
cib.addMapping("pointdata", mapping);
cib.execute().actionGet();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 二 插入数据
*/
//查询oracle
// 如果有id,可以根据where条件 每次查一万条数据(10000>id>=1,20000>id>=10000。写个计算方法) 放到list里。
//起个多线程。每个线程去执行这一万条数据
/* for(int i=0;i<1000;i++){
String sql = "";
//调查询
List<E> result = ;//查询结果
//调用批量bulk提交方法
bulkCommit(result);
}
}*/
/**
* 批量提交方法
* @param result
*/
public String bulkCommit(List<TbZyCamera> result, String indexName) {
for (TbZyCamera e : result) {
try {
createESIndex(indexName);
BulkRequestBuilder bulkRequest = esClient.prepareBulk();
Map<String, Object> map = new HashMap<String, Object>();
//对应es字段
map.put("id",e.getId());//主键
map.put("created",e.getCreated());
map.put("updated",e.getUpdated());
map.put("geoString",e.getGeoString());
map.put("geometry",e.getGeometry());
map.put("addr",e.getAddr());
map.put("capability",e.getCapability());
map.put("city",e.getCity());
map.put("county",e.getCounty());
map.put("cover",e.getCover());
map.put("name",e.getName());
map.put("password",e.getPassword());
map.put("port",e.getPort());
map.put("rtspuri",e.getRtspuri());
map.put("stationId",e.getStationId());
map.put("status",e.getStatus());
map.put("type",e.getType());
map.put("uri",e.getUri());
map.put("username",e.getUsername());
map.put("shortName",e.getShortName());
map.put("inStation",e.getInStation());
map.put("liveurl",e.getLiveurl());
map.put("parameter",e.getParameter());
map.put("code",e.getCode());
map.put("cType",e.getCType());
map.put("districtId",e.getDistrictId());
map.put("nodeId",e.getNodeId());
map.put("defAlg",e.getDefAlg());
map.put("onlines",e.getOnlines());
map.put("snap",e.getSnap());
map.put("appType",e.getAppType());
map.put("appValue",e.getAppValue());
map.put("cameraCode",e.getCameraCode());
map.put("placeTypeId",e.getPlaceTypeId());
map.put("deviceTypeId",e.getDeviceTypeId());
map.put("captureBankId",e.getCaptureBankId());
map.put("snaplevel2",e.getSnaplevel2());
map.put("remarks",e.getRemarks());
map.put("projectType",e.getProjectType());
map.put("snapThreshold",e.getSnapThreshold());
map.put("otherInfo",e.getOtherInfo());
map.put("polenum",e.getPolenum());
map.put("snCode",e.getSnCode());
map.put("macAddress",e.getMacAddress());
map.put("ifboxCameraId",e.getIfboxCameraId());
map.put("ifboxRstspuri",e.getIfboxRstspuri());
map.put("ifboxCapbility",e.getIfboxCapbility());
map.put("ifboxHeight",e.getIfboxHeight());
map.put("ifboxWidth",e.getIfboxWidth());
map.put("x",e.getX());
map.put("y",e.getY());
//es 特需
map.put("xy",e.getY()+","+e.getX());
bulkRequest.add(esClient.prepareIndex(indexName, "pointdata", String.valueOf(e.getId())).setSource(map));//type(pointdata)
bulkRequest.execute().actionGet();
} catch (Exception e1 ) {
e1.printStackTrace();
}
}
return "true";
}
}
\ No newline at end of file
package com.founder.eszy.esExtract;
import com.founder.commonutils.esEntity.TbZyJz;
import org.elasticsearch.action.admin.indices.create.CreateIndexRequestBuilder;
import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsRequest;
import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsResponse;
import org.elasticsearch.action.bulk.BulkRequestBuilder;
import org.elasticsearch.client.Client;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Created by chentian on 2021-3-9
*/
@Service
public class TbZyJzxxEs {
/**
* 一 创建索引方法 批量提交时 调这个方法
*/
// model 索引前缀名 比如 user
// reportTime 当前入库日期 比如20200514
// 组合起来就是 user-20200514
// 查询的时候如果想查所有user 索引名称可以是:user-*
//createESIndex(model + "-" + reportTime);
@Autowired
private Client esClient;
public void createESIndex(String indexName) {
IndicesExistsResponse response = esClient.admin().indices()
.exists(new IndicesExistsRequest().indices(new String[] { indexName })).actionGet();
if (response.isExists()) {
return;
}
Map<String, Object> setting = new HashMap<String, Object>();
setting.put("number_of_shards", 3);//这个自己设个数吧。我也没搞清应该设置成多少合适。你设置成3-5比较合适。
setting.put("max_result_window", 10000000);
setting.put("number_of_replicas", 2); //根据需求配置。尽量不要设置为0。可以设置成es集群机器数量
//setting.put("refresh_interval", "120s"); //你这儿不需要配置
CreateIndexRequestBuilder cib = esClient.admin().indices().prepareCreate(indexName).setSettings(setting);
// 这些都是字段名
XContentBuilder mapping = null;
try {
mapping = XContentFactory.jsonBuilder().startObject().startObject("pointdata")//这是type
.startObject("properties")// <br>//不动
/**
* 底下这些是字段 ctrl+shift+u
* .field("index", false) 不建立索引,凡是查询条件,建议加上索引,提升查询速度
*/
.startObject("lac").field("type", "keyword").endObject()//小区号
.startObject("cid").field("type", "keyword").endObject()//基站编码
.startObject("x").field("type", "keyword").field("index", false).endObject()
.startObject("y").field("type", "keyword").field("index", false).endObject()
.startObject("xy").field("type", "geo_point").endObject()//经纬度特殊处理
.startObject("lonLat").field("type", "keyword").field("index", false).endObject()
.startObject("mark").field("type", "keyword").field("index", false).endObject()
.startObject("xzqh").field("type", "keyword").endObject()
//搜索查询
.startObject("xzqhDz").field("type", "keyword").endObject()
.startObject("province").field("type", "keyword").endObject()
.startObject("city").field("type", "keyword").endObject()
.startObject("district").field("type", "keyword").endObject()
//更新时间
// .startObject("updatedtime").field("type", "keyword").endObject()//修改时间
.endObject().endObject().endObject();
cib.addMapping("pointdata", mapping);
cib.execute().actionGet();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 二 插入数据
*/
//查询oracle
// 如果有id,可以根据where条件 每次查一万条数据(10000>id>=1,20000>id>=10000。写个计算方法) 放到list里。
//起个多线程。每个线程去执行这一万条数据
/* for(int i=0;i<1000;i++){
String sql = "";
//调查询
List<E> result = ;//查询结果
//调用批量bulk提交方法
bulkCommit(result);
}
}*/
/**
* 批量提交方法
* @param result
*/
public String bulkCommit(List<TbZyJz> result, String indexName) {
for (TbZyJz e : result) {
try {
createESIndex(indexName);
BulkRequestBuilder bulkRequest = esClient.prepareBulk();
Map<String, Object> map = new HashMap<String, Object>();
//对应es字段
map.put("cid", e.getCid());//基站编码
map.put("lac",e.getLac());
map.put("x",e.getX());
map.put("y",e.getY());
map.put("lonLat",e.getLonLat());
map.put("mark",e.getMark());
map.put("xzqh",e.getXzqh());
map.put("xzqhDz",e.getXzqhDz());
map.put("province",e.getProvince());
map.put("city",e.getCity());
map.put("district",e.getDistrict());
//es 特需
map.put("xy",e.getY()+","+e.getX());
bulkRequest.add(esClient.prepareIndex(indexName, "pointdata",e.getCid()).setSource(map));//type(pointdata)
bulkRequest.execute().actionGet();
} catch (Exception e1 ) {
e1.printStackTrace();
}
}
return "true";
}
}
\ No newline at end of file
package com.founder.eszy.esExtract;
import com.founder.commonutils.esEntity.TbZyKk;
import org.elasticsearch.action.admin.indices.create.CreateIndexRequestBuilder;
import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsRequest;
import org.elasticsearch.action.admin.indices.exists.indices.IndicesExistsResponse;
import org.elasticsearch.action.bulk.BulkRequestBuilder;
import org.elasticsearch.client.Client;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Created by chentian on 2021-3-9
*/
@Service
public class TbZyKkxxEs {
/**
* 一 创建索引方法 批量提交时 调这个方法
*/
// model 索引前缀名 比如 user
// reportTime 当前入库日期 比如20200514
// 组合起来就是 user-20200514
// 查询的时候如果想查所有user 索引名称可以是:user-*
//createESIndex(model + "-" + reportTime);
@Autowired
private Client esClient;
public void createESIndex(String indexName) {
IndicesExistsResponse response = esClient.admin().indices()
.exists(new IndicesExistsRequest().indices(new String[] { indexName })).actionGet();
if (response.isExists()) {
return;
}
Map<String, Object> setting = new HashMap<String, Object>();
setting.put("number_of_shards", 3);//这个自己设个数吧。我也没搞清应该设置成多少合适。你设置成3-5比较合适。
setting.put("max_result_window", 10000000);
setting.put("number_of_replicas", 2); //根据需求配置。尽量不要设置为0。可以设置成es集群机器数量
//setting.put("refresh_interval", "120s"); //你这儿不需要配置
CreateIndexRequestBuilder cib = esClient.admin().indices().prepareCreate(indexName).setSettings(setting);
// 这些都是字段名
XContentBuilder mapping = null;
try {
mapping = XContentFactory.jsonBuilder().startObject().startObject("pointdata")//这是type
.startObject("properties")// <br>//不动
/**
* 底下这些是字段 ctrl+shift+u
* .field("index", false) 不建立索引,凡是查询条件,建议加上索引,提升查询速度
*/
.startObject("myIdHash").field("type", "keyword").endObject().field("index", false).endObject()
.startObject("myValueMd5").field("type", "keyword").endObject().field("index", false).endObject()
.startObject("myCreateDate").field("type", "keyword").endObject().field("index", false).endObject()
.startObject("id").field("type", "keyword").endObject()//主键,卡口id
.startObject("code").field("type", "keyword").endObject()//卡口编码
.startObject("name").field("type", "keyword").endObject()
.startObject("type").field("type", "keyword").endObject()
.startObject("ext").field("type", "keyword").endObject()
.startObject("orgunitid").field("type", "keyword").endObject()
.startObject("x").field("type", "keyword").field("index", false).endObject()
.startObject("y").field("type", "keyword").field("index", false).endObject()
.startObject("xy").field("type", "geo_point").endObject()//经纬度特殊处理
.startObject("orderno").field("type", "keyword").field("index", false).endObject()
.startObject("mappingid").field("type", "keyword").field("index", false).endObject()
.startObject("sjgxsj").field("type", "keyword").field("index", false).endObject().endObject()
.startObject("preFormatSjgxsj").field("type", "keyword").endObject().field("index", false).endObject()
.startObject("etlTimeTar").field("type", "keyword").endObject().field("index", false).endObject()
.startObject("preFormatEtlTimeTar").field("type", "keyword").endObject().field("index", false).endObject()
//更新时间
// .startObject("updatedtime").field("type", "keyword").endObject()//修改时间
.endObject().endObject().endObject();
cib.addMapping("pointdata", mapping);
cib.execute().actionGet();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 二 插入数据
*/
//查询oracle
// 如果有id,可以根据where条件 每次查一万条数据(10000>id>=1,20000>id>=10000。写个计算方法) 放到list里。
//起个多线程。每个线程去执行这一万条数据
/* for(int i=0;i<1000;i++){
String sql = "";
//调查询
List<E> result = ;//查询结果
//调用批量bulk提交方法
bulkCommit(result);
}
}*/
/**
* 批量提交方法
* @param result
*/
public String bulkCommit(List<TbZyKk> result, String indexName) {
for (TbZyKk e : result) {
try {
createESIndex(indexName);
BulkRequestBuilder bulkRequest = esClient.prepareBulk();
Map<String, Object> map = new HashMap<String, Object>();
//对应es字段
map.put("myIdHash", e.getMyIdHash());
map.put("myValueMd5",e.getMyValueMd5());
map.put("myCreateDate",e.getMyCreateDate());
map.put("id",e.getId());//主键
map.put("code",e.getCode());
map.put("name",e.getName());
map.put("type",e.getType());
map.put("ext",e.getExt());
map.put("orgunitid",e.getOrgunitid());
map.put("x",e.getX());
map.put("y",e.getY());
map.put("orderno",e.getOrderno());
map.put("mappingid",e.getMappingid());
map.put("sjgxsj",e.getSjgxsj());
map.put("preFormatSjgxsj",e.getPreFormatSjgxsj());
map.put("etlTimeTar",e.getEtlTimeTar());
map.put("preFormatEtlTimeTar",e.getPreFormatEtlTimeTar());
//es 特需
map.put("xy",e.getY()+","+e.getX());
bulkRequest.add(esClient.prepareIndex(indexName, "pointdata",e.getId()).setSource(map));//type(pointdata)
bulkRequest.execute().actionGet();
} catch (Exception e1 ) {
e1.printStackTrace();
}
}
return "true";
}
}
\ No newline at end of file
package com.founder.eszy.esSearch;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHits;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* Created by admin on 2020/5/14.
*/
@Service
public class EsSearch {
/**
* 一 创建索引方法 批量提交时 调这个方法
*/
// model 索引前缀名 比如 user
// reportTime 当前入库日期 比如20200514
// 组合起来就是 user-20200514
// 查询的时候如果想查所有user 索引名称可以是:user-*
//createESIndex(model + "-" + reportTime);
@Autowired
private Client esClient;
public long EScount(String index) {
//添加查询条件
SearchRequestBuilder searchRequestBuilder = esClient.prepareSearch(index)
.setTypes("pointdata")
.setQuery(QueryBuilders.matchAllQuery())
.setSize(10000);
SearchResponse response= searchRequestBuilder.get();
SearchHits hits=response.getHits();
long total=hits.getTotalHits();
return total;
}
}
\ No newline at end of file
package com.founder.eszy.esSearch;
import org.springframework.stereotype.Service;
/**
* Created by chent on 2021-3-9
*/
@Service
public class EsTbZyCameraTranslationQuery extends EsTranslationQuery{
}
package com.founder.eszy.esSearch;
import org.springframework.stereotype.Service;
/**
* Created by chent on 2021-3-9
*/
@Service
public class EsTbZyJzxxTranslationQuery extends EsTranslationQuery{
}
package com.founder.eszy.esSearch;
import org.springframework.stereotype.Service;
/**
* Created by chent on 2021-3-9
*/
@Service
public class EsTbZyKkxxTranslationQuery extends EsTranslationQuery{
}
package com.founder.eszy.esSearch;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.common.geo.GeoPoint;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.GeoPolygonQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.sort.GeoDistanceSortBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* Created by chent on 2021-3-9
*/
@Service
public class EsTranslationQuery {
@Autowired
private QueryFactory factory;
@Autowired
private Client client;
private static Logger logger = LoggerFactory.getLogger(EsTranslationQuery.class);
/**
* 查找位于多边形中的位置
* @param index 索引
* @param type 类型
* @param field 索引字段
* @param points 构成多边形的点
*/
public List<Map<String, Object>> searchGeoPolygon(String index, String type, String field, List<GeoPoint> points) throws Exception {
GeoPolygonQueryBuilder qb = factory.builtPolygonQuery(field, points);
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.filter(qb);
return searchQuery(index, type, boolQueryBuilder,null);
}
/**
* 查询距离中心点指定的范围内的位置
* @param index index
* @param type type
* @param field 索引字段
* @param distance 距离
* @param point 中心点
* @return
* @throws Exception
*/
public List<Map<String, Object>> searchGeoDistance(String index, String type, String field, String distance, GeoPoint point) throws Exception {
Map<String, Object> map = factory.builtDistanceQuery(field, distance, point);
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
QueryBuilder qb = (QueryBuilder) map.get("qb");
//按距离排序
GeoDistanceSortBuilder sort = (GeoDistanceSortBuilder) map.get("sort");
boolQueryBuilder.filter(qb);
return searchQuery(index, type, boolQueryBuilder,sort);
}
/**
* 基础查询
* @param index 索引
* @param type type
* @return List<Map>
*/
public List<Map<String, Object>> searchQuery(String index, String type, BoolQueryBuilder boolQueryBuilder, GeoDistanceSortBuilder sort) {
//基础查询不带空间检索
if(boolQueryBuilder==null&& StringUtils.isEmpty(boolQueryBuilder)) {
BoolQueryBuilder bq = QueryBuilders.boolQuery();
return search(index, type, bq, sort);
}else{
//基础查询带空间检索
return search(index, type, boolQueryBuilder, sort);
}
}
/**
* 执行查询
* @param index 索引
* @param type type
* @param builder 查询语句
* @return List<Map>
*/
private List<Map<String, Object>> search(String index, String type, BoolQueryBuilder builder, GeoDistanceSortBuilder sort) {
try {
List<Map<String, Object>> list = new ArrayList<>();
SearchRequestBuilder srb = client.prepareSearch(index).setSize(900000);
if (type != null && type.length() != 0){
srb.setTypes(type);
}
String falg="";
if (sort != null && !StringUtils.isEmpty(sort)) {
srb.addSort(sort);
//用于区分 要距离排序还要时间
falg="1";
}
srb.setQuery(builder);
SearchResponse searchResponse = srb.execute().actionGet();
SearchHits hits = searchResponse.getHits();
for (SearchHit hit : hits) {
Map<String, Object> map = hit.getSourceAsMap();
if (falg.equals("1")){
BigDecimal geoDis = new BigDecimal((Double) hit.getSortValues()[0]);
map.put("距离",geoDis.setScale(4, BigDecimal.ROUND_HALF_DOWN)+"km");
}
list.add(map);
logger.info("hits:" + map);
}
return list;
} catch (Exception e) {
logger.error("error!", e);
}
return null;
}
}
package com.founder.eszy.esSearch;
import org.elasticsearch.common.geo.GeoPoint;
import org.elasticsearch.common.unit.DistanceUnit;
import org.elasticsearch.index.query.GeoBoundingBoxQueryBuilder;
import org.elasticsearch.index.query.GeoPolygonQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.sort.GeoDistanceSortBuilder;
import org.elasticsearch.search.sort.SortBuilders;
import org.elasticsearch.search.sort.SortOrder;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Created by admin on 2020/5/18.
*/
@Service
public class QueryFactory {
/**
* 针对geo_point类型的查找,查询符合多边形内的数据
* @param field
* @param points
* @return
* @throws Exception
*/
public GeoPolygonQueryBuilder builtPolygonQuery(String field, List<GeoPoint> points) throws Exception {
if (points == null || points.size() <= 0) {
throw new Exception("bad args of geo points");
}
GeoPolygonQueryBuilder qb = QueryBuilders.geoPolygonQuery(field, points);
return qb;
}
/**
* 针对geo_point类型
* 获取在指定矩形框内的数据
* @param field 字段
* @param point1 矩形左上边界
* @param point2 矩形右下边界
* @return
* @throws Exception
*/
public GeoBoundingBoxQueryBuilder builtBoundingBoxQuery(String field, GeoPoint point1, GeoPoint point2) throws Exception {
if (point1 == null || point2 == null) {
throw new Exception("bad args of geo points");
}
GeoBoundingBoxQueryBuilder qb = QueryBuilders.geoBoundingBoxQuery(field)
.setCorners(point2,point1);
return qb;
}
/**
* 针对geo_point类型
* 查找在给定的中心点确定范围内的数据
* @param field
* @param distance
* @param point
* @return
* @throws Exception
*/
public Map<String,Object> builtDistanceQuery(String field, String distance, GeoPoint point) throws Exception {
if (point == null) {
throw new Exception("bad args of geo points");
}
QueryBuilder qb = QueryBuilders.geoDistanceQuery(field)
.point(point)
.distance(distance, DistanceUnit.KILOMETERS);
GeoDistanceSortBuilder sort = SortBuilders.geoDistanceSort(field,point)
.order(SortOrder.ASC)
.unit(DistanceUnit.KILOMETERS);
Map<String,Object> map=new HashMap<>();
map.put("qb",qb);
map.put("sort",sort);
return map;
}
}
package com.founder.eszy.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.founder.commonutils.esEntity.TbZyCamera;
import com.founder.commonutils.publicEntity.Receiving;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* Created by chent 2021-3-9
*/
@Mapper
public interface TbZyCameraMapper extends BaseMapper<TbZyCamera> {
List<TbZyCamera> selectTbZyCameraList(Receiving receiving);
}
package com.founder.eszy.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.founder.commonutils.esEntity.TbZyJz;
import com.founder.commonutils.publicEntity.Receiving;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* Created by chent 2021-3-9
*/
@Mapper
public interface TbZyJzxxMapper extends BaseMapper<TbZyJz> {
List<TbZyJz> selectTbZyJzxxList(Receiving receiving);
}
package com.founder.eszy.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.founder.commonutils.esEntity.TbZyKk;
import com.founder.commonutils.publicEntity.Receiving;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* <p>
* Mapper 接口
* </p>
*
* @author chent
* @since 2021-03-10
*/
@Mapper
public interface TbZyKkxxMapper extends BaseMapper<TbZyKk> {
List<TbZyKk> selectTbZyKkxxList(Receiving receiving);
}
<?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="com.founder.eszy.mapper.TbZyCameraMapper">
<select id="selectTbZyCameraList" parameterType="com.founder.commonutils.publicEntity.Receiving" resultType="com.founder.commonutils.esEntity.TbZyCamera">
select t2.* from(
select t1.*,rownum as rn from
(
SELECT *
FROM tb_zy_camera WHERE
x is not null and y is not null
) t1
<where>
rownum<![CDATA[ <= ]]> #{ end , jdbcType=VARCHAR }
</where>
)t2
<where>
rn<![CDATA[ >= ]]> #{ begin, jdbcType=VARCHAR }
</where>
</select>
</mapper>
\ No newline at end of file
<?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="com.founder.eszy.mapper.TbZyJzxxMapper">
<select id="selectTbZyJzxxList" parameterType="com.founder.commonutils.publicEntity.Receiving" resultType="com.founder.commonutils.esEntity.TbZyJz">
select t2.* from(
select t1.*,rownum as rn from
(
SELECT *
FROM tb_zy_jz WHERE
x is not null and y is not null
) t1
<where>
rownum<![CDATA[ <= ]]> #{ end , jdbcType=VARCHAR }
</where>
)t2
<where>
rn<![CDATA[ >= ]]> #{ begin, jdbcType=VARCHAR }
</where>
</select>
</mapper>
\ No newline at end of file
<?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="com.founder.eszy.mapper.TbZyKkxxMapper">
<select id="selectTbZyKkxxList" parameterType="com.founder.commonutils.publicEntity.Receiving" resultType="com.founder.commonutils.esEntity.TbZyKk">
select t2.* from(
select t1.*,rownum as rn from
(
SELECT *
FROM tb_zy_kk WHERE
x is not null and y is not null
) t1
<where>
rownum<![CDATA[ <= ]]> #{ end , jdbcType=VARCHAR }
</where>
)t2
<where>
rn<![CDATA[ >= ]]> #{ begin, jdbcType=VARCHAR }
</where>
</select>
</mapper>
\ No newline at end of file
package com.founder.eszy.service;
import com.founder.commonutils.esEntity.TbZyCamera;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 服务类
* </p>
*
* @author chent
* @since 2021-04-09
*/
public interface TbZyCameraService extends IService<TbZyCamera> {
}
package com.founder.eszy.service.impl;
import com.founder.commonutils.esEntity.TbZyCamera;
import com.founder.eszy.mapper.TbZyCameraMapper;
import com.founder.eszy.service.TbZyCameraService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 服务实现类
* </p>
*
* @author chent
* @since 2021-04-09
*/
@Service
public class TbZyCameraServiceImpl extends ServiceImpl<TbZyCameraMapper, TbZyCamera> implements TbZyCameraService {
}
#配置中心地址
spring.cloud.nacos.config.server-addr=47.92.48.137:8848
spring.cloud.nacos.discovery.server-addr=47.92.48.137:8848
#spring.cloud.nacos.config.server-addr=26.3.13.184:8848
#spring.cloud.nacos.discovery.server-addr=26.3.13.184:8848
spring.profiles.active=dev
# 该配置影响统一配置中心中的dataId
spring.application.name=es
spring.cloud.nacos.config.namespace=dev
#spring.cloud.nacos.config.ext-config[0].data-id=image.properties
# 开启动态刷新配置,否则配置文件修改,工程无法感知
#spring.cloud.nacos.config.ext-config[0].refresh=true
spring.cloud.nacos.config.shared-dataids=espz.properties
spring.cloud.nacos.config.refreshable-dataids=espz.properties
management.health.elasticsearch.enabled: false
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>service</artifactId>
<groupId>com.founder</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>image</artifactId>
</project>
\ No newline at end of file
package com.founder.image;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)//排除自动配置
@ComponentScan(basePackages = {"com.founder"})
@EnableDiscoveryClient
@EnableFeignClients
public class ImageApplication {
@Autowired
private RestTemplateBuilder restTemplateBuilder;
public static void main(String[] args) {
SpringApplication.run(ImageApplication.class, args);
}
@Bean
public RestTemplate restTemplate(){return restTemplateBuilder.build();}
}
package com.founder.image.controller;
import com.founder.commonutils.peopleEntity.CameraFaceTask;
import com.founder.commonutils.peopleEntity.FaceSearchParam;
import com.founder.commonutils.publicEntity.MapRestResult;
import com.founder.image.service.ImageService;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
/**
* Created by Founder on 2021/4/14.
*/
@Api(description = "第三方图像接口管理-云天励飞")
@RestController
@RequestMapping("/")
@Component
public class ImageController {
@Autowired
private ImageService imageService;
// 人脸动态检索接口接口
@PostMapping(value = "/getFaceImageByUploadImage")
public MapRestResult getFaceIdsByUploadImage(@RequestPart(value = "files",required = true) MultipartFile[] files, FaceSearchParam faceSearchParam) {
MapRestResult result=imageService.getFaceImageByUploadImage(files,faceSearchParam);
return result;
}
// 人像回溯接口
@PostMapping(value = "/sendTask")
public MapRestResult sendTask(@RequestBody CameraFaceTask cameraFaceTask) {
MapRestResult result=imageService.sendTask(cameraFaceTask);
return result;
}
}
package com.founder.image.service;
import com.founder.commonutils.peopleEntity.CameraFaceTask;
import com.founder.commonutils.peopleEntity.FaceSearchParam;
import com.founder.commonutils.publicEntity.MapRestResult;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.multipart.MultipartFile;
/**
* Created by Founder on 2021/4/14.
*/
@FeignClient("imageapi")
public interface ImageService {
//人脸动态检索接口
@PostMapping(value = "/image/getFaceImageByUploadImage")
public MapRestResult getFaceImageByUploadImage(@RequestPart(value = "files",required = true) MultipartFile[] files, @RequestParam(value = "faceSearchParam") FaceSearchParam faceSearchParam);
//人像回溯接口
@PostMapping(value = "/image/sendTask")
public MapRestResult sendTask(@RequestBody CameraFaceTask cameraFaceTask) ;
}
#配置中心地址
spring.cloud.nacos.config.server-addr=47.92.48.137:8848
spring.cloud.nacos.discovery.server-addr=47.92.48.137:8848
spring.profiles.active=dev
# 该配置影响统一配置中心中的dataId
spring.application.name=image
#dev
spring.cloud.nacos.config.namespace=dev
#prod
#spring.cloud.nacos.config.namespace=1ffd9d32-3f03-4eb8-bf12-98b1ce397390
#spring.cloud.nacos.config.ext-config[0].data-id=image.properties
# 开启动态刷新配置,否则配置文件修改,工程无法感知
#spring.cloud.nacos.config.ext-config[0].refresh=true
......@@ -10,10 +10,7 @@
<modelVersion>4.0.0</modelVersion>
<packaging>pom</packaging>
<modules>
<module>asj</module>
<module>publicapi</module>
<module>es</module>
<module>image</module>
<module>view</module>
<module>zuul</module>
</modules>
<artifactId>service</artifactId>
......
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>service</artifactId>
<groupId>com.founder</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>publicapi</artifactId>
<build>
<finalName>publicapi</finalName>
</build>
</project>
\ No newline at end of file
package com.founder.publicapi;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
@ComponentScan(basePackages = {"com.founder"})
public class PublicapiApplication {
public static void main(String[] args) {
SpringApplication.run(PublicapiApplication.class, args);
}
}
package com.founder.publicapi.config;
import com.baomidou.mybatisplus.core.injector.ISqlInjector;
import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@MapperScan("com.founder.publicapi.mapper")
public class EduConfig {
/**
* 逻辑删除插件
*/
@Bean
public ISqlInjector sqlInjector() {
return new LogicSqlInjector();
}
/**
* 分页插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
package com.founder.publicapi.controller;
import com.founder.commonutils.carEntity.CarReceiving;
import com.founder.commonutils.carEntity.CarRy;
import com.founder.commonutils.carEntity.QgjdcModel;
import com.founder.commonutils.peopleEntity.TbStRy;
import com.founder.commonutils.publicEntity.MapRestResult;
import com.founder.commonutils.publicEntity.RyReceiving;
import com.founder.commonutils.util.HttpUtil;
import com.founder.publicapi.service.SysDictitemService;
import com.founder.servicebase.logs.OperLog;
import com.founder.servicebase.logs.OperationType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.List;
/**
* 全国人员常口接口
*
*/
@Api(description = "全国人员常口接口")
@RestController
@RequestMapping(value="/ryRedis")
public class RyController {
@Autowired
private SysDictitemService sysDictitemService ;
@ApiOperation(value = "获取全国常住人口信息")
@OperLog(message = "获取全国常住人口信息",operation = OperationType.QUERY)
@PostMapping("/ryxxQg")
public MapRestResult getQgckAllxxXml(@RequestBody RyReceiving receiving){
TbStRy ryxx=new TbStRy();
String esbServiceReturn="";
//String url="http://10.100.17.115:8080/NmgEsbQueryService/QueryLocalPersonForOther?conditions=sfzh="+"'"+zjhm+"'";
String url=getConn()+"'"+receiving.getSfzh()+"'";
HttpUtil hu=new HttpUtil();
try {
esbServiceReturn=hu.doGet(url);
} catch (Exception e) {
// TODO: handle exception
}
ryxx=getryJbxxxmls(esbServiceReturn);
return MapRestResult.build(200,"成功获取全国常口人员信息",ryxx);
}
public TbStRy getryJbxxxmls(String esb_result){
TbStRy resulryxx=new TbStRy();
/* esb_result = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"+
"<RBSPMessage>"+
"<Version/>"+
"<ServiceID>S10-00000298</ServiceID>"+
"<TimeStamp/>"+
"<Validity/>"+
"<Security>"+
"<Signature Algorithm=\"\"/>"+
"<CheckCode Algorithm=\"\"/>"+
"<Encrypt/>"+
"</Security>"+
"<Method>"+
"<Name>Query</Name>"+
"<Items>"+
"<Item>"+
"<Value Type=\"arrayOfArrayOf_string\">"+
"<Row>"+
"<Data>000</Data>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"</Row>"+
"<Row>"+
"<Data>CYM</Data>"+
"<Data>JGSSX</Data>"+
"<Data>WHCD</Data>"+
"<Data>XP</Data>"+
"<Data>HYZK</Data>"+
"<Data>BYQK</Data>"+
"<Data>SFZH</Data>"+
"<Data>XM</Data>"+
"<Data>MZ</Data>"+
"<Data>XB</Data>"+
"<Data>HKSZD</Data>"+
"<Data>CSDXZ</Data>"+
"<Data>FWCS</Data>"+
"<Data>CSRQ</Data>"+
"<Data>ZZXZ</Data>"+
"<Data>SG</Data>"+
"</Row>"+
"<Row>"+
"<Data/>"+
"<Data>150929</Data>"+
"<Data/>"+
"<Data>/9j/4AAQSkZJRgABAQEBXgFeAAD/2</Data>"+
"<Data/>"+
"<Data/>"+
"<Data>152634199205290614</Data>"+
"<Data>测试</Data>"+
"<Data>01</Data>"+
"<Data>1</Data>"+
"<Data>150929</Data>"+
"<Data>哈彦忽洞自然村</Data>"+
"<Data/>"+
"<Data>19920529</Data>"+
"<Data>内蒙古乌兰察布市四子王旗东八号乡哈彦忽洞自然村</Data>"+
"<Data/>"+
"</Row>"+
"</Value>"+
"</Item>"+
"</Items>"+
"</Method>"+
"</RBSPMessage>";*/
Document document = null;
HashMap<String,String> codeMap = new HashMap<String,String>();
String zp64bite="";
try {
document = DocumentHelper.parseText(esb_result);
Element root = document.getRootElement();
Element rmethedType = root.element("Method");
Element itemsType = rmethedType.element("Items");
Element itemType = itemsType.element("Item");
Element data = itemType.element("Value");
if(data!=null){
List<Element> dataElement = data.elements();
if(dataElement.size() > 2){
List<Element> element =dataElement.get(2).elements();//得到人员对应值
String JGSSX=element.get(1).getTextTrim();
String XP=element.get(3).getTextTrim();
String SFZH=element.get(6).getTextTrim();
String XM=element.get(7).getTextTrim();
String MZ=element.get(8).getTextTrim();
String XB=element.get(9).getTextTrim();
String HKSZD=element.get(10).getTextTrim();
String CSDXZ=element.get(11).getTextTrim();
String csrq=element.get(13).getTextTrim();
String ZZXZ=element.get(14).getTextTrim();
for(int i=0;i<element.size();i++){
zp64bite=element.get(3).getTextTrim();
}
resulryxx.setImg(zp64bite);// 人员照片
resulryxx.setXm(XM); // 姓名
// 名族转为汉字
codeMap.put("groupid", "CODE_MZ");
codeMap.put("code", MZ);
String mz = sysDictitemService.getNameByCode(codeMap);
resulryxx.setMz(mz);// 民族
// 性别转为汉字
codeMap.put("groupid", "CODE_XB");
codeMap.put("code",XB);
String xb = sysDictitemService.getNameByCode(codeMap);
resulryxx.setXb(xb);
// 户籍地转为汉字
codeMap.put("groupid", "CODE_XZQH");
codeMap.put("code",HKSZD);
String hjdmc = sysDictitemService.getNameByCode(codeMap);
resulryxx.setHjdqhdz(hjdmc);// 户籍地名称
resulryxx.setSfzhm(SFZH);// 证件号码
resulryxx.setCsdzmc(CSDXZ);// 出生地址名称
resulryxx.setXzzdzmc(ZZXZ);// 现住址名称
if(null!=csrq&&!csrq.trim().isEmpty()) {
resulryxx.setCsrq(csrq);// 出生日期
}else{
resulryxx.setCsrq(null);// 出生日期
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return resulryxx;
}
private String getConn(){
String url="http://26.3.16.58:8080/NmgEsbQueryService/QueryLocalPersonForOther?conditions=sfzh=";
return url;
}
@ApiOperation(value = "查询车辆基本信息-公安部机动车数据查询服务返回")
@OperLog(message = "查询车辆基本信息-公安部机动车数据查询服务返回",operation = OperationType.QUERY)
//查询车辆基本信息-公安部机动车数据查询服务返回
@PostMapping("/getCarxx")
public MapRestResult getVehicleTrackCarxx(@RequestBody CarReceiving carReceiving){
String carNum = carReceiving.getObjectValue();//车牌号
HashMap<String,String> codeMap = new HashMap<String,String>();
try{
// 全国机动车信息
QgjdcModel qgjdc = new QgjdcModel();
// 全国人员常口
TbStRy ry = new TbStRy();
CarRy carRy = new CarRy();
// 调用全国机动车信息根据号牌号码查询所有人身份证号
qgjdc=getQgclAllxxXml(carNum);
// 调用全国常口接口 根据zjhm查询人员的基本信息
ry=getQgckAllxxXml(qgjdc.getSfzh());
carRy.setXm(ry.getXm());// 人员姓名
// 名族转为汉字
codeMap.put("groupid", "CODE_MZ");
codeMap.put("code", ry.getMz());
String mz = sysDictitemService.getNameByCode(codeMap);
carRy.setMz(mz);// 民族
// 性别转为汉字
codeMap.put("groupid", "CODE_XB");
codeMap.put("code", ry.getXb());
String xb = sysDictitemService.getNameByCode(codeMap);
carRy.setXb(xb);// 性别
carRy.setSfzhm(qgjdc.getSfzh());//证件号码set
carRy.setCsdzmc(ry.getCsdzmc());//出生地址名称
carRy.setXzzdzmc(ry.getXzzdzmc());//现住址地址名称
carRy.setImg(ry.getImg());// 人员照片
carRy.setPhone(qgjdc.getLxfs()); // 联系电话
carRy.setObjValue(qgjdc.getHphm());// 值为车牌号
carRy.setCarType(qgjdc.getClpp1());// 车辆_品牌型号
carRy.setHjdqhdz(ry.getHjdqhdz());// 户籍地地址
carRy.setCsrq(ry.getCsrq());// 出生日期
return MapRestResult.build(200,"成功获取全国车辆人员信息",carRy);
}catch (Exception e){
return MapRestResult.error();
}
}
/**
* 根据ajhm查询人员的基本信息
* @param zjhm
* @return
*/
public TbStRy getQgckAllxxXml(String zjhm){
TbStRy ryxx=new TbStRy();
String esbServiceReturn="";
//String url="http://10.100.17.115:8080/NmgEsbQueryService/QueryLocalPersonForOther?conditions=sfzh='"+zjhm+"'";
String url=getConn()+"'"+zjhm+"'";
HttpUtil hu=new HttpUtil();
try {
esbServiceReturn=hu.doGet(url);
} catch (Exception e) {
// TODO: handle exception
}
ryxx=getryJbxxxml(esbServiceReturn);
return ryxx;
}
public TbStRy getryJbxxxml(String esb_result){
TbStRy resulryxx=new TbStRy();
/* esb_result = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"+
"<RBSPMessage>"+
"<Version/>"+
"<ServiceID>S10-00000298</ServiceID>"+
"<TimeStamp/>"+
"<Validity/>"+
"<Security>"+
"<Signature Algorithm=\"\"/>"+
"<CheckCode Algorithm=\"\"/>"+
"<Encrypt/>"+
"</Security>"+
"<Method>"+
"<Name>Query</Name>"+
"<Items>"+
"<Item>"+
"<Value Type=\"arrayOfArrayOf_string\">"+
"<Row>"+
"<Data>000</Data>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"</Row>"+
"<Row>"+
"<Data>CYM</Data>"+
"<Data>JGSSX</Data>"+
"<Data>WHCD</Data>"+
"<Data>XP</Data>"+
"<Data>HYZK</Data>"+
"<Data>BYQK</Data>"+
"<Data>SFZH</Data>"+
"<Data>XM</Data>"+
"<Data>MZ</Data>"+
"<Data>XB</Data>"+
"<Data>HKSZD</Data>"+
"<Data>CSDXZ</Data>"+
"<Data>FWCS</Data>"+
"<Data>CSRQ</Data>"+
"<Data>ZZXZ</Data>"+
"<Data>SG</Data>"+
"</Row>"+
"<Row>"+
"<Data/>"+
"<Data>150929</Data>"+
"<Data/>"+
"<Data>/9j/4AAQSkZJRgABAQEBXgFeAAD/2</Data>"+
"<Data/>"+
"<Data/>"+
"<Data>152634199205290614</Data>"+
"<Data>测试</Data>"+
"<Data>01</Data>"+
"<Data>1</Data>"+
"<Data>150929</Data>"+
"<Data>哈彦忽洞自然村</Data>"+
"<Data/>"+
"<Data>19920529</Data>"+
"<Data>内蒙古乌兰察布市四子王旗东八号乡哈彦忽洞自然村</Data>"+
"<Data/>"+
"</Row>"+
"</Value>"+
"</Item>"+
"</Items>"+
"</Method>"+
"</RBSPMessage>";*/
Document document = null;
HashMap<String,String> codeMap = new HashMap<String,String>();
String zp64bite="";
try {
document = DocumentHelper.parseText(esb_result);
Element root = document.getRootElement();
Element rmethedType = root.element("Method");
Element itemsType = rmethedType.element("Items");
Element itemType = itemsType.element("Item");
Element data = itemType.element("Value");
if(data!=null){
List<Element> dataElement = data.elements();
//for(int i=1;i<dataElement.size();i++){
if(dataElement.size() > 2){
List<Element> element =dataElement.get(2).elements();//得到人员对应值
String JGSSX=element.get(1).getTextTrim();
String XP=element.get(3).getTextTrim();
String SFZH=element.get(6).getTextTrim();
String XM=element.get(7).getTextTrim();
String MZ=element.get(8).getTextTrim();
String XB=element.get(9).getTextTrim();
String HKSZD=element.get(10).getTextTrim();
String CSDXZ=element.get(11).getTextTrim();
String csrq=element.get(13).getTextTrim();
String ZZXZ=element.get(14).getTextTrim();
for(int i=0;i<element.size();i++){
zp64bite=element.get(3).getTextTrim();
}
resulryxx.setImg(zp64bite);// 人员照片
resulryxx.setXm(XM); // 姓名
resulryxx.setXb(XB);// 性别
resulryxx.setMz(MZ);// 民族
resulryxx.setCsdzmc(CSDXZ);// 出生地名称
resulryxx.setSfzhm(SFZH);// 身份证号
resulryxx.setXzzdzmc(ZZXZ);// 现住址地址名称
// 户籍地转为汉字
codeMap.put("groupid", "CODE_XZQH");
codeMap.put("code",HKSZD);
String hjdmc = sysDictitemService.getNameByCode(codeMap);
resulryxx.setHjdqhdz(hjdmc);// 户籍地名称
if(null!=csrq&&!csrq.trim().isEmpty()) {
resulryxx.setCsrq(csrq);// 出生日期
}else{
resulryxx.setCsrq(null);// 出生日期
}
}
//}
}
//JSONArray ja = JSONArray.fromObject(esbMap);
} catch (Exception e) {
e.printStackTrace();
}
return resulryxx;
}
/**
* 根据车牌号码或者身份证号查询全国机动车信息的基本信息
* @param hphm
* @return
*/
public QgjdcModel getQgclAllxxXml(String hphm){
QgjdcModel qgjdc=new QgjdcModel();
String esbServiceReturn="";
String url=getConnCar()+hphm;
HttpUtil hu=new HttpUtil();
try {
esbServiceReturn=hu.doPost(url);
} catch (Exception e) {
// TODO: handle exception
}
qgjdc=getclJbxxxml(esbServiceReturn);
return qgjdc;
}
public static QgjdcModel getclJbxxxml(String esb_result){
QgjdcModel qgjdc=new QgjdcModel();
/*esb_result ="<?xml version=\"1.0\" encoding=\"UTF-8\"?>"+
"<RBSPMessage>"+
"<Version/>"+
"<ServiceID>S10-00000931</ServiceID>"+
"<TimeStamp/>"+
"<Validity/>"+
"<Security>"+
"<Signature Algorithm=\"\"/>"+
"<CheckCode Algorithm=\"\"/>"+
"<Encrypt/>"+
"</Security>"+
"<Method>"+
"<Name>Query</Name>"+
"<Items>"+
"<Item>"+
"<Value Type=\"arrayOfArrayOf_string\">"+
"<Row>"+
"<Data>000</Data>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"</Row>"+
"<Row>"+
"<Data>CCDJRQ</Data>"+
"<Data>CCRQ</Data>"+
"<Data>CLLX</Data>"+
"<Data>CLPP1</Data>"+
"<Data>CLPP2</Data>"+
"<Data>CLSBDH</Data>"+
"<Data>CLXH</Data>"+
"<Data>CSYS</Data>"+
"<Data>DJZSBH</Data>"+
"<Data>DJZZXZ</Data>"+
"<Data>FDJH</Data>"+
"<Data>FDJXH</Data>"+
"<Data>FPJG</Data>"+
"<Data>GCJK</Data>"+
"<Data>GL</Data>"+
"<Data>HDZK</Data>"+
"<Data>HDZZL</Data>"+
"<Data>HPHM</Data>"+
"<Data>HPZL</Data>"+
"<Data>JDCSYR</Data>"+
"<Data>JDCZT</Data>"+
"<Data>LXFS</Data>"+
"<Data>PL</Data>"+
"<Data>RLZL</Data>"+
"<Data>SFZH</Data>"+
"<Data>SFZJZL</Data>"+
"<Data>ZQYZL</Data>"+
"<Data>ZRRQ</Data>"+
"<Data>ZZAMC</Data>"+
"<Data>ZZDZQH</Data>"+
"<Data>ZZDZXZ</Data>"+
"<Data>ZZG</Data>"+
"<Data>ZZL</Data>"+
"<Data>ZZQH</Data>"+
"<Data>ZZZJLZH</Data>"+
"</Row>"+
"<Row>"+
"<Data>20110414</Data>"+
"<Data>20110111</Data>"+
"<Data>K33/轿车</Data>"+
"<Data>三菱牌</Data>"+
"<Data/>"+
"<Data>334643</Data>"+
"<Data/>"+
"<Data>E/红</Data>"+
"<Data/>"+
"<Data/>"+
"<Data>D007154</Data>"+
"<Data>DA4G18</Data>"+
"<Data/>"+
"<Data/>"+
"<Data>73</Data>"+
"<Data>5</Data>"+
"<Data/>"+
"<Data>蒙AAC478</Data>"+
"<Data>02/小型汽车号牌</Data>"+
"<Data>测试/Data>"+
"<Data>A/正常</Data>"+
"<Data>3962798</Data>"+
"<Data>1584</Data>"+
"<Data>A</Data>"+
"<Data>152624198410061899</Data>"+
"<Data>A</Data>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data/>"+
"<Data>内蒙古自治区</Data>"+
"<Data/>"+
"<Data>1545</Data>"+
"<Data/>"+
"<Data/>"+
"</Row>"+
"</Value>"+
"</Item>"+
"</Items>"+
"</Method>"+
"</RBSPMessage>";*/
Document document = null;
try {
document = DocumentHelper.parseText(esb_result);
Element root = document.getRootElement();
Element rmethedType = root.element("Method");
Element itemsType = rmethedType.element("Items");
Element itemType = itemsType.element("Item");
Element data = itemType.element("Value");
if(data!=null){
List<Element> dataElement = data.elements();
if(dataElement.size() > 2){
List<Element> element =dataElement.get(2).elements();//得到车辆信息对应值
String CLPP1=element.get(3).getTextTrim();// 车辆品牌1
String HPHM=element.get(17).getTextTrim();// 号牌号码
String JDCSYR=element.get(19).getTextTrim();// 机动车所有人
String LXFS=element.get(21).getTextTrim();// 联系方式
String SFZH=element.get(24).getTextTrim();// 身份证号
String ZZDZXZ=element.get(31).getTextTrim();// 暂住地址详址
qgjdc.setClpp1(CLPP1);// 车辆品牌1
qgjdc.setHphm(HPHM);// 号牌号码
qgjdc.setJdcsyr(JDCSYR);// 机动车所有人
qgjdc.setLxfs(LXFS);// 联系方式
qgjdc.setSfzh(SFZH);// 身份证号
qgjdc.setZzdzxz(ZZDZXZ);// 暂住地址详址
}
}
} catch (Exception e) {
e.printStackTrace();
}
return qgjdc;
}
private String getConnCar(){
String url="http://26.3.16.58:8080/QueryCar/QueryCar?hphm=";
return url;
}
}
\ No newline at end of file
package com.founder.publicapi.controller;
import com.alibaba.fastjson.JSONObject;
import com.founder.commonutils.publicEntity.MapRestResult;
import com.founder.commonutils.publicEntity.SysUsers;
import com.founder.commonutils.util.Base64Util;
import com.founder.commonutils.util.JwtUser;
import com.founder.publicapi.service.SysUsersService;
import com.founder.servicebase.logs.OperLog;
import com.founder.servicebase.logs.OperationType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import static com.founder.commonutils.util.AesEncryptUtil.desEncrypt;
@Api(description = "全国人员常口接口")
@RestController
@RequestMapping(value = "/users")
public class SysUsersController {
@Autowired
private SysUsersService sysUsersService;
//-----------新版jwt login登录
@ApiOperation(value = "登录")
// @OperLog(message = "登录",operation = OperationType.LOGIN)
@PostMapping("/login")
public MapRestResult login(@RequestBody SysUsers sysUsers, HttpServletRequest request, HttpServletResponse response) throws Exception {
//使用AES-128-CBC加密模式,key需要为16位,key和iv可以相同!
String KEY = "maplogin20200416";
String IV = "map_vues20200416";
String Password = "";
String Username = "";
if (!sysUsers.getPassword().equals("") || !sysUsers.getUsername().equals("")) {
Password = desEncrypt(sysUsers.getPassword(), KEY, IV).trim();
Username = desEncrypt(sysUsers.getUsername(), KEY, IV).trim();
//获取到密码之后,base64 加密去库里进行查询,
sysUsers.setPassword(Base64Util.encode(Password));
sysUsers.setUsername(Username);
MapRestResult mapRestResult = sysUsersService.getUsersByNamePassword(sysUsers, request);
if (mapRestResult.getStatus().equals(200) && mapRestResult.getData() != null) {
List<SysUsers> sysUsersList = (List<SysUsers>) mapRestResult.getData();
if (sysUsersList.size() > 0) {
JSONObject jsonObject1 = (JSONObject) JSONObject.toJSON(sysUsersList.get(0));
JwtUser util = new JwtUser();
//用户JWT生成token
String token = util.createJWT(jsonObject1.toString());
// return MapRestResult.build(200,"登陆成功",token);
mapRestResult.setMsg(token);
return mapRestResult;
} else {
mapRestResult.setMsg("用户不存在");
return mapRestResult;
}
}
} else {
return MapRestResult.build(500,"传入参数为空",null);
}
return MapRestResult.build(500,"登录失败",null);
}
}
package com.founder.publicapi.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.founder.commonutils.asjEntity.TbStAsj;
import com.founder.commonutils.carEntity.reslutFl;
import com.founder.commonutils.publicEntity.*;
import com.founder.commonutils.util.DataUtil;
import com.founder.commonutils.util.HttpUtil;
import com.founder.commonutils.util.IKAnalyzerUtil;
import com.founder.commonutils.util.StringUtil;
import com.founder.publicapi.service.SysDictitemService;
import com.founder.publicapi.service.TbStAsjAndXyrService;
import com.founder.publicapi.service.ZhfzxyrQgckService;
import com.founder.publicapi.service.ZhfzxyrService;
import com.founder.servicebase.logs.OperLog;
import com.founder.servicebase.logs.OperationType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.commons.lang3.StringUtils;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.stream.Collectors;
/**
* 全国人员常口接口
*
*/
@Api(description = "跑嫌疑人常口信息入库接口")
@RestController
@RequestMapping(value="/xyrRedis",method = RequestMethod.GET)
@CrossOrigin
public class XyrController {
@Autowired
private SysDictitemService sysDictitemService ;
@Autowired
private ZhfzxyrService zhfzxyrService ;
@Autowired
private ZhfzxyrQgckService zhfzxyrQgckService ;
@Autowired
private TbStAsjAndXyrService tbStAsjAndXyrService ;
@OperLog(message = "获取所有案件嫌疑人(带分页)",operation = OperationType.QUERY)
@ApiOperation(value = "获取所有案件嫌疑人(带分页)")
@PostMapping("/getPageAsjXyr")
public MapRestResult getPageAsj(@ApiParam(name = "current",value = "current当前页",required = true)
@RequestParam String current,
@ApiParam(name = "limit",value = "limit每页显示几条",required = true)
@RequestParam String limit,
@ApiParam(name = "zhfzxyrXm",value = "姓名")
@RequestParam(required = false)String zhfzxyrXm,
@ApiParam(name = "zhfzxyrZjhm",value = "证件号码")
@RequestParam(required = false)String zhfzxyrZjhm,
@ApiParam(name = "sjaq",value = "涉军案情")
@RequestParam(required = false)String sjaq,
@ApiParam(name = "asjbh",value = "案件编号")
@RequestParam(required = false)String asjbh,
@ApiParam(name = "ajlb",value = "案件类别")
@RequestParam(required = false)String ajlb,
@ApiParam(name = "zhfzxyrXb",value = "嫌疑人性别")
@RequestParam(required = false)String zhfzxyrXb,
@ApiParam(name = "sjbq",value = "标签")
@RequestParam(required = false)String sjbq) {
TbAsjAndZbFzXyrAndQgCkXx tbAsjAndZbFzXyrAndQgCkXx = new TbAsjAndZbFzXyrAndQgCkXx();
tbAsjAndZbFzXyrAndQgCkXx.setPage(Integer.valueOf(current));
tbAsjAndZbFzXyrAndQgCkXx.setPagePara(Integer.valueOf(limit));
int begin = tbAsjAndZbFzXyrAndQgCkXx.getBegin();// 开始
int end = tbAsjAndZbFzXyrAndQgCkXx.getEnd();// 结束
// 分页
List<TbAsjAndZbFzXyrAndQgCkXx> list = tbStAsjAndXyrService.listAsjAndXyr(String.valueOf(begin),String.valueOf(end),zhfzxyrXm,zhfzxyrZjhm,sjaq,asjbh,ajlb,zhfzxyrXb,sjbq);
// 总数
Integer count = tbStAsjAndXyrService.listAsjAndXyrCounts(zhfzxyrXm,zhfzxyrZjhm,sjaq,asjbh,ajlb,zhfzxyrXb,sjbq);
//List<TbAsjAndZbFzXyrAndQgCkXx> jyaqList = tbStAsjAndXyrService.listAsjAndXyrCount(zhfzxyrXm,zhfzxyrZjhm,sjaq,asjbh,ajlb);
List<TbAsjAndZbFzXyrAndQgCkXx> listResult = new ArrayList<>();
List<TbAsjAndZbFzXyrAndQgCkXx> jyaqListResult = new ArrayList<>();
Map mapFz = new HashMap();
Map<String,List<TbAsjAndZbFzXyrAndQgCkXx>> map = new HashMap<>();
// 分词高亮军队
// 军人
// 部队
// 军事
// 武器
// 俘虏
// 营区
for(TbAsjAndZbFzXyrAndQgCkXx xx:list){
try {
Integer flag = 0;// 高亮判断
String listJyaq = "";
List<String> listFc = IKAnalyzerUtil.cut(xx.getJyaq());
for(String fc:listFc){
if(Arrays.asList("军队").contains(fc)){
listJyaq += "<span style='background:red;'>"+fc+"</span>";
}
else if(Arrays.asList("军人").contains(fc)){
listJyaq += "<span style='background:red;'>"+fc+"</span>";
}
else if(Arrays.asList("部队").contains(fc)){
listJyaq += "<span style='background:red;'>"+fc+"</span>";
}
else if(Arrays.asList("军事").contains(fc)){
listJyaq += "<span style='background:red;'>"+fc+"</span>";
}
else if(Arrays.asList("武器").contains(fc)){
listJyaq += "<span style='background:red;'>"+fc+"</span>";
}
else if(Arrays.asList("俘虏").contains(fc)){
listJyaq += "<span style='background:red;'>"+fc+"</span>";
}
else if(Arrays.asList("营区").contains(fc)){
listJyaq += "<span style='background:red;'>"+fc+"</span>";
}else{
listJyaq += fc;
}
if(listJyaq.indexOf("span")>0){
flag = 1;
}
}
// flag = 1 有高亮
if(flag == 1){
xx.setJyaq(listJyaq);
listResult.add(xx);
}
} catch (IOException e) {
e.printStackTrace();
return MapRestResult.build(202,"接口异常","1",e.getMessage());
}
}
/* for(TbAsjAndZbFzXyrAndQgCkXx xx:jyaqList){
try {
Integer flag = 0;// 高亮判断
List<String> listFc = IKAnalyzerUtil.cut(xx.getJyaq());
for(String fc:listFc){
if(Arrays.asList("军队","军人","部队","军事","武器","俘虏","营区").contains(fc)){
flag = 1;
}
}
// flag = 1 有高亮
if(flag == 1){
jyaqListResult.add(xx);
}
} catch (IOException e) {
e.printStackTrace();
return MapRestResult.build(202,"接口异常","1",e.getMessage());
}
}*/
// 分类
List ajlbList=tbStAsjAndXyrService.getAjlb(String.valueOf(begin),String.valueOf(end),zhfzxyrXm,zhfzxyrZjhm,sjaq,asjbh,ajlb,zhfzxyrXb,sjbq);
List xbbList=tbStAsjAndXyrService.getxb(String.valueOf(begin),String.valueOf(end),zhfzxyrXm,zhfzxyrZjhm,sjaq,asjbh,ajlb,zhfzxyrXb,sjbq);
List sjbqbList=tbStAsjAndXyrService.getSjbq(String.valueOf(begin),String.valueOf(end),zhfzxyrXm,zhfzxyrZjhm,sjaq,asjbh,ajlb,zhfzxyrXb,sjbq);
mapFz.put("ajlbList",ajlbList);
mapFz.put("xbbList",xbbList);
mapFz.put("sjbqbList",sjbqbList);
mapFz.put("rows",list);
return MapRestResult.build(202,"成功获取案件嫌疑人信息",count,mapFz);
}
@ApiOperation(value = "跑嫌疑人常口信息入库接口")
@OperLog(message = "跑嫌疑人常口信息入库接口",operation = OperationType.QUERY)
@GetMapping("/xyrckxx/{flag}")
public MapRestResult getQgckAllxxXml(@PathVariable Integer flag){
QueryWrapper<TbXwZbFzXyr> wrapper = new QueryWrapper<>();
List<TbXwZbFzXyr> xyrList = new ArrayList<>();
float number=xyrList.size()/100+1;
int flnum= (int) Math.ceil(number);
long start = System.currentTimeMillis();
//数据批量分流
List<List<TbXwZbFzXyr>> pllist= null;
try {
pllist = DataUtil.pldata(xyrList,flnum);
ExecutorService executorService = Executors.newCachedThreadPool();//按需分配线程池
//翻译成功list
List<TbXwZbFzXyr> sucesslist = new ArrayList<>();
// 全流式处理转换成CompletableFuture[]
CompletableFuture[] cfs = pllist.stream()
.map(xyr -> CompletableFuture.supplyAsync(() -> getCkAndSave(xyr),executorService)
.handle((t, throwable) ->{
if(throwable!=null){
System.out.println("翻译数据失败=============="+throwable);
return t;
}else{
System.out.println("翻译数据成功=============="+t.toString());
sucesslist.addAll(t);
return t;
}
} )
).toArray(CompletableFuture[]::new);
CompletableFuture.allOf(cfs).join();
System.out.println("翻译入库成功===================="+sucesslist.size());
System.out.println("耗时="+(System.currentTimeMillis()-start));
} catch (Exception e) {
e.printStackTrace();
return MapRestResult.build(200,"嫌疑人常口信息入库失败","success");
}
return MapRestResult.build(200,"嫌疑人常口信息成功入库","success");
}
/**
* 调用全国常口接口并入库
* @param listXyr
* @return
*/
public List<TbXwZbFzXyr> getCkAndSave(List<TbXwZbFzXyr> listXyr){
List<TbXwZbFzXyr> sucesslist = new ArrayList<>();
try {
Thread.sleep(10000);
listXyr.forEach(p ->{
try{
// 身份证号码不为空
if(StringUtils.isNotEmpty(p.getZhfzxyrCyzjZjhm())){
// 调用全国常口接口
TbXwZbFzXyrQgCkXx tbXwZbFzXyrQgCkXx = getQgckAllxxXmlXyr(p.getZhfzxyrCyzjZjhm());
// 入库
zhfzxyrQgckService.insert(tbXwZbFzXyrQgCkXx);
}
sucesslist.add(p);
}catch (Exception e){
e.printStackTrace();
System.out.println("请求失败===================="+p);
}
});
} catch (InterruptedException e) {
e.printStackTrace();
}
return sucesslist;
}
public TbXwZbFzXyrQgCkXx getQgckAllxxXmlXyr(String zjhm){
TbXwZbFzXyrQgCkXx ryxx=new TbXwZbFzXyrQgCkXx();
String esbServiceReturn="";
String url=getConn()+"'"+zjhm+"'";
HttpUtil hu=new HttpUtil();
try {
esbServiceReturn=hu.doGet(url);
} catch (Exception e) {
// TODO: handle exception
}
ryxx=getryJbxxxmls(esbServiceReturn,zjhm);
return ryxx;
}
private String getConn(){
String url="http://26.3.16.58:8080/NmgEsbQueryService/QueryLocalPersonForOther?conditions=sfzh=";
return url;
}
public TbXwZbFzXyrQgCkXx getryJbxxxmls(String esb_result,String zjhm){
TbXwZbFzXyrQgCkXx resulryxx=new TbXwZbFzXyrQgCkXx();
Document document = null;
HashMap<String,String> codeMap = new HashMap<String,String>();
String zp64bite="";
try {
document = DocumentHelper.parseText(esb_result);
Element root = document.getRootElement();
Element rmethedType = root.element("Method");
Element itemsType = rmethedType.element("Items");
Element itemType = itemsType.element("Item");
Element data = itemType.element("Value");
if(data!=null){
List<Element> dataElement = data.elements();
if(dataElement.size() > 2){
List<Element> element =dataElement.get(2).elements();//得到人员对应值
String SFZH=element.get(6).getTextTrim();
String XM=element.get(7).getTextTrim();
String MZ=element.get(8).getTextTrim();
String XB=element.get(9).getTextTrim();
String HKSZD=element.get(10).getTextTrim();
String CSDXZ=element.get(11).getTextTrim();
String csrq=element.get(13).getTextTrim();
String ZZXZ=element.get(14).getTextTrim();
for(int i=0;i<element.size();i++){
zp64bite=element.get(3).getTextTrim();
}
resulryxx.setZhfzxyrImg(zp64bite);// 人员照片
resulryxx.setZhfzxyrXm(XM); // 姓名
// 名族转为汉字
codeMap.put("groupid", "CODE_MZ");
codeMap.put("code", MZ);
String mz = sysDictitemService.getNameByCode(codeMap);
resulryxx.setZhfzxyrMz(mz);// 民族
// 性别转为汉字
codeMap.put("groupid", "CODE_XB");
codeMap.put("code",XB);
String xb = sysDictitemService.getNameByCode(codeMap);
resulryxx.setZhfzxyrXb(xb);
// 户籍地转为汉字
codeMap.put("groupid", "CODE_XZQH");
codeMap.put("code",HKSZD);
String hjdmc = sysDictitemService.getNameByCode(codeMap);
resulryxx.setZhfzxyrHjdqhdz(hjdmc);// 户籍地名称
resulryxx.setZhfzxyrCyzjZjhm(zjhm);// 证件号码
resulryxx.setZhfzxyrCsdzmc(CSDXZ);// 出生地址名称
resulryxx.setZhfzxyrXzzdzmc(ZZXZ);// 现住址名称
if(null!=csrq&&!csrq.trim().isEmpty()) {
resulryxx.setZhfzxyrCsrq(csrq);// 出生日期
}else{
resulryxx.setZhfzxyrCsrq(null);// 出生日期
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return resulryxx;
}
@ApiOperation(value = "跑标签信息入库接口")
@OperLog(message = "跑标签信息入库接口",operation = OperationType.QUERY)
@GetMapping("/xyrSjbq")
public MapRestResult getxyrSjbq(){
// 总数
Integer count = tbStAsjAndXyrService.listAsjAndXyrCounts(null,null,"",null,null,null,null);
// 分页
int size = count;
int limit=10;
long threadNum = size / limit;
int startnum = 0;
int endnum = 0;
ExecutorService executorService = Executors.newCachedThreadPool();//按需分配线程池
for (int i = 0; i < threadNum + 1; i++) {
startnum = i * limit + 1;
endnum = ((i + 1) * limit);
if (startnum > size) {
break;
}
if (endnum > size) {
endnum = size;
}
if (startnum == endnum) {
break;
}
// 分页
List<TbAsjAndZbFzXyrAndQgCkXx> list = tbStAsjAndXyrService.listAsjAndXyr(String.valueOf(startnum), String.valueOf(endnum), null, null, null, null, null,null,null);
HandleThread thread = new HandleThread(list);
executorService.execute(thread);
}
return MapRestResult.build(200, "分组信息成功入库", "success");
}
class HandleThread extends Thread {
private List<TbAsjAndZbFzXyrAndQgCkXx> data;
public HandleThread(List<TbAsjAndZbFzXyrAndQgCkXx> data) {
this.data = data;
}
public void run() {
for(TbAsjAndZbFzXyrAndQgCkXx all:data){
// 标签list
List<String> listSjbq = new ArrayList<>();
List<String> listFc = null;
try {
listFc = IKAnalyzerUtil.cut(all.getJyaq());
for (String fc : listFc) {
if (Arrays.asList("军队").contains(fc)) {
listSjbq.add("军队");
}
if (Arrays.asList("军人").contains(fc)) {
listSjbq.add("军人");
}
if (Arrays.asList("部队").contains(fc)) {
listSjbq.add("部队");
}
if (Arrays.asList("军事").contains(fc)) {
listSjbq.add("军事");
}
if (Arrays.asList("武器").contains(fc)) {
listSjbq.add("武器");
}
if (Arrays.asList("俘虏").contains(fc)) {
listSjbq.add("俘虏");
}
if (Arrays.asList("营区").contains(fc)) {
listSjbq.add("营区");
}
}
// 先进行去重
List<String> allResult = listSjbq.stream().distinct().collect(Collectors.toList());
// 多个标签逗号分割
String sjbq = "";
if(allResult.size()>1){
for(String a:allResult){
sjbq += a;
}
}else if(allResult.size() == 1){
sjbq = allResult.get(0);
}
all.setSjbq(sjbq);
// 更新标签
boolean updateSjbq = tbStAsjAndXyrService.updateSjbqByAsjbh(all);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
\ No newline at end of file
package com.founder.publicapi.mapper;
import com.founder.commonutils.publicEntity.TbAsjAndZbFzXyrAndQgCkXx;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
* <p>
* 案事件基本信息 Mapper 接口
* </p>
*
* @author yangyang
* @since 2021-03-30
*/
@Mapper
public interface AsjXyrMapper {
List<TbAsjAndZbFzXyrAndQgCkXx> listAsjAndXyr(@Param("begin") String begin, @Param("end") String end, @Param("zhfzxyrXm") String zhfzxyrXm, @Param("zhfzxyrZjhm") String zhfzxyrZjhm, @Param("sjaq") String sjaq, @Param("asjbh") String asjbh, @Param("ajlb") String ajlb, @Param("zhfzxyrXb") String zhfzxyrXb, @Param("sjbq") String sjbq);
List<TbAsjAndZbFzXyrAndQgCkXx> listAsjAndXyrAll(@Param("zhfzxyrXm") String zhfzxyrXm, @Param("zhfzxyrZjhm") String zhfzxyrZjhm, @Param("sjaq") String sjaq, @Param("asjbh") String asjbh, @Param("ajlb") String ajlb, @Param("zhfzxyrXb") String zhfzxyrXb, @Param("sjbq") String sjbq);
List<TbAsjAndZbFzXyrAndQgCkXx> listAsjAndXyrCount(@Param("zhfzxyrXm") String zhfzxyrXm, @Param("zhfzxyrZjhm") String zhfzxyrZjhm, @Param("sjaq") String sjaq, @Param("asjbh") String asjbh, @Param("ajlb") String ajlb, @Param("zhfzxyrXb") String zhfzxyrXb, @Param("sjbq") String sjbq);
Integer listAsjAndXyrCounts(@Param("zhfzxyrXm") String zhfzxyrXm, @Param("zhfzxyrZjhm") String zhfzxyrZjhm, @Param("sjaq") String sjaq, @Param("asjbh") String asjbh, @Param("ajlb") String ajlb, @Param("zhfzxyrXb") String zhfzxyrXb, @Param("sjbq") String sjbq);
List<Map> getAjlb(@Param("begin") String begin, @Param("end") String end, @Param("zhfzxyrXm") String zhfzxyrXm, @Param("zhfzxyrZjhm") String zhfzxyrZjhm, @Param("sjaq") String sjaq, @Param("asjbh") String asjbh, @Param("ajlb") String ajlb, @Param("zhfzxyrXb") String zhfzxyrXb, @Param("sjbq") String sjbq);
List<Map> getxb(@Param("begin") String begin, @Param("end") String end, @Param("zhfzxyrXm") String zhfzxyrXm, @Param("zhfzxyrZjhm") String zhfzxyrZjhm, @Param("sjaq") String sjaq, @Param("asjbh") String asjbh, @Param("ajlb") String ajlb, @Param("zhfzxyrXb") String zhfzxyrXb, @Param("sjbq") String sjbq);
List<Map> getSjbq(@Param("begin") String begin, @Param("end") String end, @Param("zhfzxyrXm") String zhfzxyrXm, @Param("zhfzxyrZjhm") String zhfzxyrZjhm, @Param("sjaq") String sjaq, @Param("asjbh") String asjbh, @Param("ajlb") String ajlb, @Param("zhfzxyrXb") String zhfzxyrXb, @Param("sjbq") String sjbq);
boolean updateSjbqByAsjbh(TbAsjAndZbFzXyrAndQgCkXx tbAsjAndZbFzXyrAndQgCkXx);
}
package com.founder.publicapi.mapper;
import org.apache.ibatis.annotations.Mapper;
import java.util.Map;
@Mapper
public interface SysDictitemMapper {
String getNameByCode(Map<String, String> map);
}
package com.founder.publicapi.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.founder.commonutils.publicEntity.SysUsers;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* <p>
* 用户登录 Mapper 接口
* </p>
*
* @author Guojunfeng
* @since 2021-03-11
*/
@Mapper
public interface SysUsersMapper extends BaseMapper<SysUsers> {
List<SysUsers> getUsersByNamePassword(@Param("username") String username, @Param("password") String password);
}
package com.founder.publicapi.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.founder.commonutils.publicEntity.TbXwZbFzXyr;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* <p>
* 案事件基本信息 Mapper 接口
* </p>
*
* @author yangyang
* @since 2021-03-30
*/
@Mapper
public interface ZhfzxyrMapper extends BaseMapper<TbXwZbFzXyr> {
List<TbXwZbFzXyr> listXyr();
}
package com.founder.publicapi.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.founder.commonutils.publicEntity.TbXwZbFzXyr;
import com.founder.commonutils.publicEntity.TbXwZbFzXyrQgCkXx;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
/**
* <p>
* 案事件基本信息 Mapper 接口
* </p>
*
* @author yangyang
* @since 2021-03-30
*/
@Mapper
public interface ZhfzxyrQgckMapper extends BaseMapper<TbXwZbFzXyrQgCkXx> {
}
<?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="com.founder.publicapi.mapper.AsjXyrMapper">
<sql id="asjSql-where">
<if test="zhfzxyrXm!=null and zhfzxyrXm!=''">and c.zhfzxyr_Xm LIKE '%' || #{zhfzxyrXm , jdbcType=VARCHAR } || '%'</if>
<if test="zhfzxyrZjhm!=null and zhfzxyrZjhm!=''">and b.zhfzxyr_Cyzj_Zjhm = #{zhfzxyrZjhm}</if>
<if test="asjbh!=null and asjbh!=''">and a.asjbh LIKE '%' || #{asjbh , jdbcType=VARCHAR } || '%'</if>
<if test="ajlb!= null and ajlb!=''">
AND a.AJLBDM= #{ ajlb , jdbcType=VARCHAR }
</if>
<if test="sjaq!= null and sjaq!=''">
AND a.JYAQ LIKE '%' || #{sjaq , jdbcType=VARCHAR } || '%'
</if>
<if test="zhfzxyrXb!= null and zhfzxyrXb!=''">
AND c.ZHFZXYR_XB = #{zhfzxyrXb , jdbcType=VARCHAR }
</if>
<if test="zhfzxyrXb == '空'.toString()">
AND c.ZHFZXYR_XB = #{zhfzxyrXb , jdbcType=VARCHAR }
</if>
<if test="sjbq!= null and sjbq!=''">
AND a.sjbq = #{sjbq , jdbcType=VARCHAR }
</if>
AND ( a.JYAQ LIKE '%军队%'
OR a.JYAQ LIKE '%军人%'
OR a.JYAQ LIKE '%部队%'
OR a.JYAQ LIKE '%军事%'
OR a.JYAQ LIKE '%武器%'
OR a.JYAQ LIKE '%俘虏%'
OR a.JYAQ LIKE '%营区%')
</sql>
<select id="listAsjAndXyr" parameterType="java.lang.String" resultType="com.founder.commonutils.publicEntity.TbAsjAndZbFzXyrAndQgCkXx">
select * from(
select t.*,rownum rn from(
select a.asjbh,a.jyaq as jyaq,
a.ajlbdm as ajlbdm,
(select name from sys_dictitem where groupid = 'CODE_AJLB' and code = a.ajlbdm) as ajlbdmMc,
a.ladw_Gajgjgdm as ladwGajgjgdm,
(select name from sys_dictitem where groupid = 'CODE_QGUNIT' and code = a.ladw_Gajgjgdm) as ladwGajgjgdmMc,
TO_CHAR(a.larq,'YYYY-MM-DD hh24:mi:ss') as larq,
TO_CHAR(a.fxasjsj,'YYYY-MM-DD hh24:mi:ss') as fxasjsj,
a.fxasjdd_Xzqhdm as fxasjddXzqhdm,
(select name from sys_dictitem where groupid = 'CODE_XZQH' and code = a.fxasjdd_Xzqhdm) as fxasjddXzqhdmMc,
a.zbr_Xm as zbrXm,
a.zbr_Lxdh as zbrLxdh,
TO_CHAR(a.gxsj,'YYYY-MM-DD hh24:mi:ss') as gxsj,
a.zatz_Jyqk as zatzJyqk,
(select name from sys_dictitem where groupid = 'CODE_ZATZ' and code = a.zatz_Jyqk) as zatzJyqkMc,
TO_CHAR(a.zczj_Zxsj01,'YYYY-MM-DD hh24:mi:ss') as zczjZxsj01,
TO_CHAR(a.asjfssj_Asjfskssj,'YYYY-MM-DD hh24:mi:ss') as asjfssjAsjfskssj,
TO_CHAR(a.asjfssj_Asjfsjssj,'YYYY-MM-DD hh24:mi:ss') as asjfssjAsjfsjssj,
a.asjfsdd_Xzqhdm as asjfsddXzqhdm,
(select name from sys_dictitem where groupid = 'CODE_XZQH' and code = a.asjfsdd_Xzqhdm) as asjfsddXzqhdmMc,
a.zcjddm as zcjddm,
(select name from sys_dictitem where groupid = 'CODE_ZCJDDM' and code = a.zcjddm) as zcjddmMc,
a.ladw_gajgMc as ladwgajgMc,
b.zhfzxyr_Cyzj_Zjhm as zhfzxyrCyzjZjhm,
TO_CHAR(b.zhrq,'YYYY-MM-DD hh24:mi:ss') as zhrq,
b.zhdw_Gajgjgdm as zhdwGajgjgdm,
(select name from sys_dictitem where groupid = 'CODE_QGUNIT' and code = b.zhdw_Gajgjgdm) as zhdwGajgjgdmMc,
b.zhfzxyr_Szzwbh as zhfzxyrSzzwbh,
b.zhfzxyr_Rydnabh as zhfzxyrRydnabh,
c.zhfzxyr_Xm as zhfzxyrXm,
to_char(TO_Date(c.zhfzxyr_Csrq,'YYYY-MM-DD hh24:mi:ss'),'yyyy-mm-dd') as zhfzxyrCsrq,
c.zhfzxyr_Img as zhfzxyrImg,
c.zhfzxyr_Mz as zhfzxyrMz,
c.zhfzxyr_Xb as zhfzxyrXb,
c.zhfzxyr_Hjdqhdz as zhfzxyrHjdqhdz,
c.zhfzxyr_Csdzmc as zhfzxyrCsdzmc
from tb_st_asj a,tb_xw_zbfzxyr b,TB_XW_ZBFZXYRQGCKXX c
where a.asjbh = b.asjbh
and b.zhfzxyr_Cyzj_Zjhm = c.zhfzxyr_Cyzj_Zjhm
<include refid="asjSql-where"/>
)t
where rownum <![CDATA[<=]]> #{end}
)where rn > #{begin}
</select>
<select id="listAsjAndXyrCount" parameterType="java.lang.String" resultType="com.founder.commonutils.publicEntity.TbAsjAndZbFzXyrAndQgCkXx">
select a.jyaq as jyaq
from tb_st_asj a,tb_xw_zbfzxyr b,TB_XW_ZBFZXYRQGCKXX c
where a.asjbh = b.asjbh
and b.zhfzxyr_Cyzj_Zjhm = c.zhfzxyr_Cyzj_Zjhm
<include refid="asjSql-where"/>
</select>
<select id="listAsjAndXyrCounts" parameterType="java.lang.String" resultType="java.lang.Integer">
select count(*)
from tb_st_asj a,tb_xw_zbfzxyr b,TB_XW_ZBFZXYRQGCKXX c
where a.asjbh = b.asjbh
and b.zhfzxyr_Cyzj_Zjhm = c.zhfzxyr_Cyzj_Zjhm
<include refid="asjSql-where"/>
</select>
<select id="listAsjAndXyrAll" parameterType="java.lang.String" resultType="com.founder.commonutils.publicEntity.TbAsjAndZbFzXyrAndQgCkXx">
select a.asjbh,to_char(a.jyaq) as jyaq,
a.ajlbdm as ajlbdm,
(select name from sys_dictitem where groupid = 'CODE_AJLB' and code = a.ajlbdm) as ajlbdmMc,
a.ladw_Gajgjgdm as ladwGajgjgdm,
(select name from sys_dictitem where groupid = 'CODE_QGUNIT' and code = a.ladw_Gajgjgdm) as ladwGajgjgdmMc,
TO_CHAR(a.larq,'YYYY-MM-DD hh24:mi:ss') as larq,
TO_CHAR(a.fxasjsj,'YYYY-MM-DD hh24:mi:ss') as fxasjsj,
a.fxasjdd_Xzqhdm as fxasjddXzqhdm,
(select name from sys_dictitem where groupid = 'CODE_XZQH' and code = a.fxasjdd_Xzqhdm) as fxasjddXzqhdmMc,
a.zbr_Xm as zbrXm,
a.zbr_Lxdh as zbrLxdh,
TO_CHAR(a.gxsj,'YYYY-MM-DD hh24:mi:ss') as gxsj,
a.zatz_Jyqk as zatzJyqk,
(select name from sys_dictitem where groupid = 'CODE_ZATZ' and code = a.zatz_Jyqk) as zatzJyqkMc,
TO_CHAR(a.zczj_Zxsj01,'YYYY-MM-DD hh24:mi:ss') as zczjZxsj01,
TO_CHAR(a.asjfssj_Asjfskssj,'YYYY-MM-DD hh24:mi:ss') as asjfssjAsjfskssj,
TO_CHAR(a.asjfssj_Asjfsjssj,'YYYY-MM-DD hh24:mi:ss') as asjfssjAsjfsjssj,
a.asjfsdd_Xzqhdm as asjfsddXzqhdm,
(select name from sys_dictitem where groupid = 'CODE_XZQH' and code = a.asjfsdd_Xzqhdm) as asjfsddXzqhdmMc,
a.zcjddm as zcjddm,
(select name from sys_dictitem where groupid = 'CODE_ZCJDDM' and code = a.zcjddm) as zcjddmMc,
a.ladw_gajgMc as ladwgajgMc,
b.zhfzxyr_Cyzj_Zjhm as zhfzxyrCyzjZjhm,
TO_CHAR(b.zhrq,'YYYY-MM-DD hh24:mi:ss') as zhrq,
b.zhdw_Gajgjgdm as zhdwGajgjgdm,
(select name from sys_dictitem where groupid = 'CODE_QGUNIT' and code = b.zhdw_Gajgjgdm) as zhdwGajgjgdmMc,
b.zhfzxyr_Szzwbh as zhfzxyrSzzwbh,
b.zhfzxyr_Rydnabh as zhfzxyrRydnabh,
c.zhfzxyr_Xm as zhfzxyrXm,
to_char(TO_Date(c.zhfzxyr_Csrq,'YYYY-MM-DD hh24:mi:ss'),'yyyy-mm-dd') as zhfzxyrCsrq,
c.zhfzxyr_Img as zhfzxyrImg,
c.zhfzxyr_Mz as zhfzxyrMz,
c.zhfzxyr_Xb as zhfzxyrXb,
c.zhfzxyr_Hjdqhdz as zhfzxyrHjdqhdz,
c.zhfzxyr_Csdzmc as zhfzxyrCsdzmc
from tb_st_asj a,tb_xw_zbfzxyr b,TB_XW_ZBFZXYRQGCKXX c
where a.asjbh = b.asjbh
and b.zhfzxyr_Cyzj_Zjhm = c.zhfzxyr_Cyzj_Zjhm
<include refid="asjSql-where"/>
</select>
<update id="updateSjbqByAsjbh" parameterType="com.founder.commonutils.publicEntity.TbAsjAndZbFzXyrAndQgCkXx">
update tb_st_asj a
set
<if test="sjbq!= null">
a.sjbq= #{ sjbq , jdbcType=VARCHAR }
</if>
where 1 = 1
<if test="asjbh!= null">
AND a.asjbh= #{ asjbh , jdbcType=VARCHAR }
</if>
</update>
<select id="getAjlb" parameterType="java.lang.String" resultType="java.util.Map">
select (case when d.ajlbdmMc is null then '空' else d.ajlbdmMc end) as ajlbdmMc,d.ajlbdm, count(*) as countAjlb from (SELECT
(SELECT name
FROM sys_dictitem
WHERE code = a.ajlbdm) as ajlbdmMc,a.ajlbdm as ajlbdm
FROM tb_st_asj a, tb_xw_zbfzxyr b, TB_XW_ZBFZXYRQGCKXX c
WHERE a.asjbh = b.asjbh AND b.zhfzxyr_Cyzj_Zjhm = c.zhfzxyr_Cyzj_Zjhm
and a.ajlbdm is not null
<include refid="asjSql-where"/>
)d
group by (case when d.ajlbdmMc is null then '空' else d.ajlbdmMc end),d.ajlbdm
</select>
<select id="getxb" parameterType="java.lang.String" resultType="java.util.Map">
select (case when c.ZHFZXYR_XB is null then '空' else c.ZHFZXYR_XB end) as xb ,count(*) as countXb from
tb_st_asj a, tb_xw_zbfzxyr b, TB_XW_ZBFZXYRQGCKXX c
WHERE a.asjbh = b.asjbh AND b.zhfzxyr_Cyzj_Zjhm = c.zhfzxyr_Cyzj_Zjhm
<include refid="asjSql-where"/>
group by (case when c.ZHFZXYR_XB is null then '空' else c.ZHFZXYR_XB end)
</select>
<select id="getSjbq" parameterType="java.lang.String" resultType="java.util.Map">
select a.sjbq ,count(*) as countXb from
tb_st_asj a, tb_xw_zbfzxyr b, TB_XW_ZBFZXYRQGCKXX c
WHERE a.asjbh = b.asjbh AND b.zhfzxyr_Cyzj_Zjhm = c.zhfzxyr_Cyzj_Zjhm
and a.sjbq is not null
<include refid="asjSql-where"/>
group by a.sjbq
</select>
</mapper>
\ No newline at end of file
<?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="com.founder.publicapi.mapper.SysDictitemMapper">
<!-- 根据code和groupid查询name值-->
<select id="getNameByCode" parameterType="java.util.Map" resultType="java.lang.String">
select name from SYS_DICTITEM where scbz='0'
<if test="groupid!=null and groupid!=''">and groupid = #{groupid}</if>
<if test="code!=null and code!=''">and code = #{code}</if>
</select>
</mapper>
\ No newline at end of file
<?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="com.founder.publicapi.mapper.SysUsersMapper">
<select id="getUsersByNamePassword" resultType="com.founder.commonutils.publicEntity.SysUsers">
select * from sys_users
where 1=1 and xxsc_pdbz = '0'
<if test="username!=null and username!=''">
and username = #{username}
</if>
<if test="password!=null and password!=''">
and password = #{password}
</if>
</select>
</mapper>
<?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="com.founder.publicapi.mapper.ZhfzxyrMapper">
<select id="listXyr" resultType="com.founder.commonutils.publicEntity.TbXwZbFzXyr">
select distinct(zhfzxyr_cyzj_zjhm) from tb_xw_zbfzxyr where zhfzxyr_cyzj_zjhm not in(select distinct(zhfzxyr_cyzj_zjhm) from TB_XW_ZBFZXYRQGCKXX)
</select>
</mapper>
<?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="com.founder.publicapi.mapper.ZhfzxyrQgckMapper">
</mapper>
package com.founder.publicapi.service;
import java.util.Map;
/**
* @author caoyin
*/
public interface SysDictitemService {
String getNameByCode(Map<String, String> map);
}
package com.founder.publicapi.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.founder.commonutils.publicEntity.MapRestResult;
import com.founder.commonutils.publicEntity.SysUsers;
import javax.servlet.http.HttpServletRequest;
public interface SysUsersService extends IService<SysUsers> {
public MapRestResult getUsersByNamePassword(SysUsers sysUsers, HttpServletRequest request);
}
package com.founder.publicapi.service;
import com.founder.commonutils.publicEntity.TbAsjAndZbFzXyrAndQgCkXx;
import java.util.List;
/**
* <p>
* 案事件基本信息 服务类
* </p>
*
* @author yangyang
* @since 2021-03-31
*/
public interface TbStAsjAndXyrService {
List<TbAsjAndZbFzXyrAndQgCkXx> listAsjAndXyr(String begin, String end, String zhfzxyrXm, String zhfzxyrZjhm, String sjaq, String asjbh, String ajlb, String zhfzxyrXb, String sjbq);
List<TbAsjAndZbFzXyrAndQgCkXx> listAsjAndXyrAll(String zhfzxyrXm, String zhfzxyrZjhm, String sjaq, String asjbh, String ajlb, String zhfzxyrXb, String sjbq);
List<TbAsjAndZbFzXyrAndQgCkXx> listAsjAndXyrCount(String zhfzxyrXm, String zhfzxyrZjhm, String sjaq, String asjbh, String ajlb, String zhfzxyrXb, String sjbq);
Integer listAsjAndXyrCounts(String zhfzxyrXm, String zhfzxyrZjhm, String sjaq, String asjbh, String ajlb, String zhfzxyrXb, String sjbq);
List getAjlb(String begin, String end, String zhfzxyrXm, String zhfzxyrZjhm, String sjaq, String asjbh, String ajlb, String zhfzxyrXb, String sjbq);
List getxb(String begin, String end, String zhfzxyrXm, String zhfzxyrZjhm, String sjaq, String asjbh, String ajlb, String zhfzxyrXb, String sjbq);
List getSjbq(String begin, String end, String zhfzxyrXm, String zhfzxyrZjhm, String sjaq, String asjbh, String ajlb, String zhfzxyrXb, String sjbq);
boolean updateSjbqByAsjbh(TbAsjAndZbFzXyrAndQgCkXx tbAsjAndZbFzXyrAndQgCkXx);
}
package com.founder.publicapi.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.founder.commonutils.publicEntity.TbXwZbFzXyr;
import com.founder.commonutils.publicEntity.TbXwZbFzXyrQgCkXx;
/**
* <p>
* 案事件基本信息 服务类
* </p>
*
* @author yangyang
* @since 2021-03-30
*/
public interface ZhfzxyrQgckService extends IService<TbXwZbFzXyrQgCkXx> {
void insert(TbXwZbFzXyrQgCkXx tbXwZbFzXyrQgCkXx);
}
package com.founder.publicapi.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.founder.commonutils.asjEntity.CbxszAndXlaj;
import com.founder.commonutils.asjEntity.TbStAsj;
import com.founder.commonutils.publicEntity.MapRestResult;
import com.founder.commonutils.publicEntity.Receiving;
import com.founder.commonutils.publicEntity.TbXwZbFzXyr;
import java.util.List;
import java.util.Map;
/**
* <p>
* 案事件基本信息 服务类
* </p>
*
* @author yangyang
* @since 2021-03-30
*/
public interface ZhfzxyrService extends IService<TbXwZbFzXyr> {
List<TbXwZbFzXyr> listXyr();
}
package com.founder.publicapi.service.serviceimpl;
import com.founder.publicapi.mapper.SysDictitemMapper;
import com.founder.publicapi.service.SysDictitemService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Map;
@Service
public class SysDictitemServiceImpl implements SysDictitemService {
private static final Logger logger = LoggerFactory.getLogger(SysDictitemServiceImpl.class);
@Resource
private SysDictitemMapper sysDictitemMapper;
/**
* 根据code和groupid查询name值
* @param map
* @return
* @throws Exception
*/
@Override
public String getNameByCode(Map<String,String> map){
return sysDictitemMapper.getNameByCode(map);
}
}
package com.founder.publicapi.service.serviceimpl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.founder.commonutils.publicEntity.MapRestResult;
import com.founder.commonutils.publicEntity.SysUsers;
import com.founder.publicapi.mapper.SysUsersMapper;
import com.founder.publicapi.service.SysUsersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
@Service
public class SysUsersServiceImpl extends ServiceImpl<SysUsersMapper, SysUsers> implements SysUsersService {
@Autowired
private SysUsersMapper sysUsersMapper;
@Override
public MapRestResult getUsersByNamePassword(SysUsers sysUsers, HttpServletRequest request) {
List<SysUsers> list = sysUsersMapper.getUsersByNamePassword(sysUsers.getUsername(),sysUsers.getPassword());
//获取当前用户的多个角色,然后获取这些角色的权限,合并这些权限去重复返回。begin
//1.根据username获取角色
/* SysUsersRoles sysUsersRoles=new SysUsersRoles();
sysUsersRoles.setUser_id(sysUsers.getUsername());
List<SysUsersRoles> sysUsersRolesList=sysUsersRolesRepository.selectUserRoleList(sysUsersRoles);
String roleIdStrs="";
List<String> permissionList=new ArrayList<>();
for(int i=0;i<sysUsersRolesList.size();i++){
SysUsersRoles sysUsersRoles1=sysUsersRolesList.get(i);
//2.根据角色获取权限,
String[] roleIds=sysUsersRoles1.getRole_id().split(",");
for(int j=0;j<roleIds.length;j++){
SysRolesPermissions sysRolesPermissions=new SysRolesPermissions();
sysRolesPermissions.setRole_id(roleIds[j]);
List<SysRolesPermissions> sysRolesPermissionsList=sysRolesPermissionsRepository.selectRolePermissionList(sysRolesPermissions);
for(int k=0;k<sysRolesPermissionsList.size();k++){
SysRolesPermissions sysRolesPermissions1=sysRolesPermissionsList.get(k);
if("".equals(roleIdStrs)){
roleIdStrs=sysRolesPermissions1.getPermission_id();
}else{
roleIdStrs=roleIdStrs+","+sysRolesPermissions1.getPermission_id();
}
}
}
}
List<String> split= Arrays.asList(roleIdStrs.split(","));//逗号分隔的字符串转list
List lists = split.stream().distinct().collect(Collectors.toList());//list去重复
Iterator<SysUsers> resultIterator = list.iterator();
while (resultIterator.hasNext()){//循环修改newlist里的值
SysUsers obj = resultIterator.next();
obj.setPermission_id(lists);
}*/
//获取当前用户的多个角色,然后获取这些角色的权限,合并这些权限去重复返回。end
return MapRestResult.build(200,"根据用户名密码查询用户信息",list);
}
}
package com.founder.publicapi.service.serviceimpl;
import com.founder.commonutils.publicEntity.TbAsjAndZbFzXyrAndQgCkXx;
import com.founder.publicapi.mapper.AsjXyrMapper;
import com.founder.publicapi.service.TbStAsjAndXyrService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* <p>
* 案事件基本信息 服务实现类
* </p>
*
* @author yangyang
* @since 2021-03-30
*/
@Service
public class TbStAsjAndXyrServiceImpl implements TbStAsjAndXyrService {
@Autowired
private AsjXyrMapper asjXyrMapper;
@Override
public List<TbAsjAndZbFzXyrAndQgCkXx> listAsjAndXyr(String begin, String end, String zhfzxyrXm, String zhfzxyrZjhm, String sjaq, String asjbh, String ajlb,String zhfzxyrXb,String sjbq) {
return asjXyrMapper.listAsjAndXyr(begin,end,zhfzxyrXm,zhfzxyrZjhm,sjaq,asjbh,ajlb,zhfzxyrXb,sjbq);
}
@Override
public List<TbAsjAndZbFzXyrAndQgCkXx> listAsjAndXyrAll(String zhfzxyrXm, String zhfzxyrZjhm, String sjaq, String asjbh, String ajlb,String zhfzxyrXb,String sjbq) {
return asjXyrMapper.listAsjAndXyrAll(zhfzxyrXm,zhfzxyrZjhm,sjaq,asjbh,ajlb,zhfzxyrXb,sjbq);
}
@Override
public List<TbAsjAndZbFzXyrAndQgCkXx> listAsjAndXyrCount(String zhfzxyrXm, String zhfzxyrZjhm, String sjaq, String asjbh, String ajlb,String zhfzxyrXb,String sjbq) {
return asjXyrMapper.listAsjAndXyrCount(zhfzxyrXm,zhfzxyrZjhm,sjaq,asjbh,ajlb,zhfzxyrXb,sjbq);
}
@Override
public Integer listAsjAndXyrCounts(String zhfzxyrXm, String zhfzxyrZjhm, String sjaq, String asjbh, String ajlb,String zhfzxyrXb,String sjbq) {
return asjXyrMapper.listAsjAndXyrCounts(zhfzxyrXm,zhfzxyrZjhm,sjaq,asjbh,ajlb,zhfzxyrXb,sjbq);
}
@Override
public boolean updateSjbqByAsjbh(TbAsjAndZbFzXyrAndQgCkXx tbAsjAndZbFzXyrAndQgCkXx) {
return asjXyrMapper.updateSjbqByAsjbh(tbAsjAndZbFzXyrAndQgCkXx);
}
@Override
public List getAjlb(String begin, String end, String zhfzxyrXm, String zhfzxyrZjhm, String sjaq, String asjbh, String ajlb,String zhfzxyrXb,String sjbq){
return asjXyrMapper.getAjlb(begin,end,zhfzxyrXm,zhfzxyrZjhm,sjaq,asjbh,ajlb,zhfzxyrXb,sjbq);
}
@Override
public List getxb(String begin, String end, String zhfzxyrXm, String zhfzxyrZjhm, String sjaq, String asjbh, String ajlb,String zhfzxyrXb,String sjbq){
return asjXyrMapper.getxb(begin,end,zhfzxyrXm,zhfzxyrZjhm,sjaq,asjbh,ajlb,zhfzxyrXb,sjbq);
}
@Override
public List getSjbq(String begin, String end, String zhfzxyrXm, String zhfzxyrZjhm, String sjaq, String asjbh, String ajlb,String zhfzxyrXb,String sjbq){
return asjXyrMapper.getSjbq(begin,end,zhfzxyrXm,zhfzxyrZjhm,sjaq,asjbh,ajlb,zhfzxyrXb,sjbq);
}
}
package com.founder.publicapi.service.serviceimpl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.founder.commonutils.publicEntity.TbXwZbFzXyr;
import com.founder.commonutils.publicEntity.TbXwZbFzXyrQgCkXx;
import com.founder.publicapi.mapper.ZhfzxyrMapper;
import com.founder.publicapi.mapper.ZhfzxyrQgckMapper;
import com.founder.publicapi.service.ZhfzxyrQgckService;
import com.founder.publicapi.service.ZhfzxyrService;
import org.springframework.stereotype.Service;
/**
* <p>
* 案事件基本信息 服务实现类
* </p>
*
* @author yangyang
* @since 2021-03-30
*/
@Service
public class ZhfzxyrQgckServiceImpl extends ServiceImpl<ZhfzxyrQgckMapper, TbXwZbFzXyrQgCkXx> implements ZhfzxyrQgckService {
@Override
public void insert(TbXwZbFzXyrQgCkXx tbXwZbFzXyrQgCkXx) {
baseMapper.insert(tbXwZbFzXyrQgCkXx);
}
}
package com.founder.publicapi.service.serviceimpl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.founder.commonutils.publicEntity.TbXwZbFzXyr;
import com.founder.publicapi.mapper.ZhfzxyrMapper;
import com.founder.publicapi.service.ZhfzxyrService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* <p>
* 案事件基本信息 服务实现类
* </p>
*
* @author yangyang
* @since 2021-03-30
*/
@Service
public class ZhfzxyrServiceImpl extends ServiceImpl<ZhfzxyrMapper, TbXwZbFzXyr> implements ZhfzxyrService {
@Autowired
private ZhfzxyrMapper zhfzxyrMapper;
@Override
public List<TbXwZbFzXyr> listXyr() {
return zhfzxyrMapper.listXyr();
}
}
#配置中心地址
spring.cloud.nacos.config.server-addr=47.92.48.137:8848
spring.cloud.nacos.discovery.server-addr=47.92.48.137:8848
#spring.cloud.nacos.config.server-addr=26.3.13.184:8848
#spring.cloud.nacos.discovery.server-addr=26.3.13.184:8848
spring.profiles.active=dev
# 该配置影响统一配置中心中的dataId
spring.application.name=publicapi
spring.cloud.nacos.config.namespace=dev
#spring.cloud.nacos.config.ext-config[0].data-id=image.properties
# 开启动态刷新配置,否则配置文件修改,工程无法感知
#spring.cloud.nacos.config.ext-config[0].refresh=true
spring.cloud.nacos.config.shared-dataids=publicapipz.properties
spring.cloud.nacos.config.refreshable-dataids=publicapipz.properties
\ No newline at end of file
......@@ -9,9 +9,9 @@
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>asj</artifactId>
<artifactId>view</artifactId>
<build>
<finalName>asj</finalName>
<finalName>view</finalName>
</build>
</project>
\ No newline at end of file
#配置中心地址
spring.cloud.nacos.config.server-addr=47.92.48.137:8848
spring.cloud.nacos.discovery.server-addr=47.92.48.137:8848
spring.cloud.nacos.config.server-addr=47.92.48.137:9949
spring.cloud.nacos.discovery.server-addr=47.92.48.137:9949
#spring.cloud.nacos.config.server-addr=26.3.13.184:8848
#spring.cloud.nacos.discovery.server-addr=26.3.13.184:8848
spring.profiles.active=dev
spring.profiles.active=prod
# 该配置影响统一配置中心中的dataId
spring.application.name=asj
spring.cloud.nacos.config.namespace=dev
spring.cloud.nacos.config.namespace=prod
#spring.cloud.nacos.config.ext-config[0].data-id=image.properties
# 开启动态刷新配置,否则配置文件修改,工程无法感知
......
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>serviceapi</artifactId>
<groupId>com.founder</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>carapi</artifactId>
<build>
<finalName>carapi</finalName>
</build>
</project>
\ No newline at end of file
package com.founder.carapi;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
@ComponentScan(basePackages = {"com.founder"})
@EnableDiscoveryClient
public class CarApiApplication {
@Autowired
private RestTemplateBuilder restTemplateBuilder;
public static void main(String[] args) {
SpringApplication.run(CarApiApplication.class, args);
}
@Bean
public RestTemplate restTemplate(){return restTemplateBuilder.build();}
}
package com.founder.carapi.controller;
import com.founder.carapi.service.CarService;
import com.founder.commonutils.carEntity.*;
import com.founder.commonutils.publicEntity.MapRestResult;
import com.founder.servicebase.logs.OperLog;
import com.founder.servicebase.logs.OperationType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.*;
/**
* <p>
* 技侦接口管理 前端控制器
* </p>
*
* @author yangyang
* @since 2021-04-09
*/
@Api(description = "接口管理")
@RestController
@RequestMapping("/car")
public class CarController {
@Autowired
private CarService carService;
// 车辆轨迹接口(科信)
//@OperLog(message = "车辆轨迹接口",operation = OperationType.QUERY)
@ApiOperation(value = "车辆轨迹接口")
@PostMapping(value = "/CarTranslate")
public MapRestResult getCarTranslate(@RequestBody CarTranslateParams carTranslateParams) {
long startTime=new Date().getTime();
MapRestResult result=carService.getCarTranslate(carTranslateParams);
long endTime=new Date().getTime();
long timeDiffer=endTime-startTime;
System.out.println("车辆轨迹**请求时长**********"+timeDiffer+"毫秒");
return result;
}
//@OperLog(message = "范围内卡口点位数据接口",operation = OperationType.QUERY)
@ApiOperation(value = "范围内卡口点位数据接口")
@PostMapping(value = "/selectKkXx")
public MapRestResult selectKkXx(@RequestBody CarKkXxParams carKkXxParams) {
return carService.selectKkXx(carKkXxParams.getQsjd(),carKkXxParams.getQswd(),carKkXxParams.getJsjd(),carKkXxParams.getJswd());
}
// 车辆回溯接口(科信)
//@OperLog(message = "车辆回溯接口",operation = OperationType.QUERY)
@ApiOperation(value = "车辆回溯接口")
@PostMapping(value = "/carOneAreaIAnalysis")
public MapRestResult carOneAreaIAnalysis(@RequestBody CarOneAreaIAnalysisSearchParam carOneAreaIAnalysisSearchParam) {
long sTime=new Date().getTime();
MapRestResult result=carService.carOneAreaIAnalysis(carOneAreaIAnalysisSearchParam);
long eTime=new Date().getTime();
long timeDiffer=eTime-sTime;
System.out.println("车辆轨迹**请求时长**********"+timeDiffer+"毫秒");
return result;
}
//区域徘徊 -结果展示(徘徊次数3次以上)
//@OperLog(message = "车辆徘徊接口",operation = OperationType.QUERY)
@ApiOperation(value = "车辆徘徊接口")
@PostMapping("/carOneAreaInfoTrampResultThread")
public MapRestResult carOneAreaInfoTrampResultThread (@RequestBody AreaInfo areaInfo) throws Exception {
MapRestResult xzxtRestResult=carService.OneAreaInfoTrampResultThread(areaInfo);
return xzxtRestResult;
}
//轨迹疑似停留点
@ApiOperation(value = "轨迹疑似停留点")
@PostMapping("/getTrackYstld")
public MapRestResult getTrackYstld(@RequestBody TrackYsModelCondition track){
return carService.getTrackYstld(track);
}
//轨迹疑似落脚点
@ApiOperation(value = "轨迹疑似落脚点")
@PostMapping("/getTrackYsljd")
public MapRestResult getTrackYsljd(@RequestBody TrackYsModelCondition track){
return carService.getTrackYsljd(track);
}
//轨迹疑似活动区域
@ApiOperation(value = "轨迹疑似活动区域")
@PostMapping("/getTrackYshdqy")
public MapRestResult getTrackYshdqy(@RequestBody TrackYsModelCondition track){
return carService.getTrackYshdqy(track);
}
@ApiOperation(value = "车碰撞结果获取")
@PostMapping("/getRegionalsResult")
public MapRestResult getRegionalsResult(@RequestBody TbStRegionalstaskresult tbStRegionalstaskresult) throws Exception {
tbStRegionalstaskresult.setPagePara(Integer.valueOf(tbStRegionalstaskresult.getLimit()));
return carService.getRegionalsResult(tbStRegionalstaskresult);
}
@ApiOperation(value = "车碰撞结果分类获取")
@PostMapping("/getRegionalsResultFl")
public MapRestResult getRegionalsResultFl(@RequestBody TbStRegionalstaskresult tbStRegionalstaskresult) throws Exception {
return carService.getRegionalsResultFl(tbStRegionalstaskresult);
}
}
package com.founder.carapi.controller;
import com.alibaba.fastjson.JSONObject;
import com.founder.carapi.service.CarService;
import com.founder.carapi.service.RegTaskService;
import com.founder.commonutils.carEntity.*;
import com.founder.commonutils.publicEntity.MapRestResult;
import com.founder.commonutils.util.KeyUtil;
import com.founder.servicebase.logs.OperLog;
import com.founder.servicebase.logs.OperationType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.stream.IntStream;
/**
* <p>
* 任务 接口管理 前端控制器
* </p>
*
* @author yangyang
* @since 2021-04-09
*/
@Api(description = "任务接口管理")
@RestController
@RequestMapping("/car")
public class RegionalsTaskController {
@Autowired
private CarService carService;
@Autowired
private RegTaskService regTaskService;
// 任务信息
// @OperLog(message = "生成车车伴随任务接口",operation = OperationType.QUERY)
@ApiOperation(value = "生成车车伴随任务接口")
@PostMapping("/sendCarCarRegionalsTask")
public MapRestResult sendRegionalsTask(@RequestBody CarCarAndTaskSearchParam params) {
CarCarAnalysisSearchParam carCarAnalysisSearchParam = params.getCarCarAnalysisSearchParam();
RegionalsTask regionalsTask = params.getRegionalsTask();
// 获取区域,开始时间 ,确认时间,保存任务信息,区域
// 生成任务编号
regionalsTask.setTaskId(KeyUtil.getUUIDKey("RW"));
// 状态置为 1 进度置为 任务开始
regionalsTask.setState("1");
regionalsTask.setProgress("BEGIN");
regionalsTask.setTaskType("ccbs");
regionalsTask.setTaskObject("01");// 任务对象01 车 02 人 03 人像
regTaskService.saveRegTask(regionalsTask);
// 保存区域 集合
List<Regionals> regionalsList=regionalsTask.getRegionals();
if(regionalsList!=null){
IntStream.range(0, regionalsList.size()).forEach(i -> {
Regionals regionals=regionalsList.get(i);
regionals.setRegionalId(KeyUtil.getUUIDKey("QY"));
regionals.setTaskId(regionalsTask.getTaskId());
regTaskService.saveRegional(regionals);
});
}
carCarAnalysisSearchParam.setTaskId(regionalsTask.getTaskId());
// 线程异步调用
ExecutorService executorService = Executors.newCachedThreadPool();
executorService.submit(()->{
try {
Thread.sleep(1000);
MapRestResult result = carService.carCarAnalysis(carCarAnalysisSearchParam);
} catch (Exception e) {
e.printStackTrace();
}
});
return MapRestResult.build(200,"发送任务成功","1",regionalsTask.getTaskId());
}
// 任务查询接口
@ApiOperation(value = "获取所有任务接口")
@PostMapping("/selecteRegionalsTasks")
public MapRestResult selecteRegionalsTasks(@RequestBody SelectRegionalsTasksParams selectRegionalsTasksParams) {
return MapRestResult.build(200,"获取任务全部数据成功", regTaskService.selecteRegionalsTasks(selectRegionalsTasksParams).size(), regTaskService.selecteRegionalsTasks(selectRegionalsTasksParams));
}
// 任务结果查询接口
@ApiOperation(value = "获取车车伴随任务结果数据成功")
@PostMapping("/selecteRegionalsTasksResults")
public MapRestResult selecteRegionalsTasksResults(@ApiParam(name = "taskId",value = "任务id",required = true)
@RequestBody String taskId) {
// 解析传过来的json拿到案事件编号
JSONObject jsonObject = JSONObject.parseObject(taskId);
String taskIds = (String) jsonObject.get("taskId");
List<RegionalsCarCarResult> listResult = regTaskService.selecteRegionalsTasksResults(taskIds);
listResult.stream().forEach(p->{
p.setImgStr(new String(String.valueOf(p.getImg())));
});
return MapRestResult.build(200,"获取任务结果数据成功", listResult.size(),listResult);
}
// 任务信息
// @OperLog(message = "生成车区域碰撞任务接口",operation = OperationType.QUERY)
@ApiOperation(value = "生成车区域碰撞任务接口")
@PostMapping("/sendRegionalsTask")
public MapRestResult sendRegionalsTask(@RequestBody RegionalsTask regionalsTask) {
// 获取区域,开始时间 ,确认时间,保存任务信息,区域
// 生成任务编号
regionalsTask.setTaskId(KeyUtil.getUUIDKey("RW"));
// 状态置为 1 进度置为 任务开始
regionalsTask.setState("1");
regionalsTask.setProgress("BEGIN");
regionalsTask.setTaskType("qypz");// 区域碰撞
regionalsTask.setTaskObject("01");// 任务对象01 车 02 人 03 人像
regTaskService.saveRegTask(regionalsTask);
// 保存区域 集合
List<Regionals> regionalsList=regionalsTask.getRegionals();
if(regionalsList!=null){
IntStream.range(0, regionalsList.size()).forEach(i -> {
Regionals regionals=regionalsList.get(i);
regionals.setRegionalId(KeyUtil.getUUIDKey("QY"));
regionals.setTaskId(regionalsTask.getTaskId());
regTaskService.saveRegional(regionals);
});
}
return MapRestResult.build(200,"发送任务成功","1",regionalsTask.getTaskId());
}
@ApiOperation(value = "车区域碰撞接口")
@PostMapping("/carRegionalCollied")
public MapRestResult sendCarQyPzRegionalsTask(@RequestBody List<AreaInfo> areaInfos) {
try {
MapRestResult result = carService.MoreAreaInfoThread(areaInfos);
} catch (Exception e) {
return MapRestResult.build(201,"车区域碰撞接口失败","1","error");
}
return MapRestResult.build(200,"车区域碰撞接口","1","success");
}
// 任务区域查询接口
@ApiOperation(value = "任务区域查询接口")
@PostMapping("/selecteRegionals")
public MapRestResult selecteRegionals(@ApiParam(name = "taskId",value = "任务id",required = true)
@RequestBody String taskId) {
// 解析传过来的json拿到案事件编号
JSONObject jsonObject = JSONObject.parseObject(taskId);
String taskIds = (String) jsonObject.get("taskId");
List<Regionals> listResult = regTaskService.selecteRegionals(taskIds);
return MapRestResult.build(200,"获取任务区域数据成功", listResult.size(),listResult);
}
// 任务区域查询接口
@ApiOperation(value = "根据任务类型更新任务区域接口和更新任务接口")
@PostMapping("/updateRegionalsTask")
public MapRestResult updateRegionalsTask(@RequestBody RegionalsTask regionalsTask) {
List<Regionals> regionalsList=regionalsTask.getRegionals();
// 先根据任务编号判断 区域集合是否有数据
List<Regionals> listResult = regTaskService.selecteRegionals(regionalsTask.getTaskId());
// 如果存在数据则删除 删除后在执行插入操作 不存在直接执行插入操作
if(listResult.size()>0){
boolean deleteRegionals = regTaskService.deleteRegionals(regionalsTask.getTaskId());
if (deleteRegionals){
if(regionalsList!=null){
IntStream.range(0, regionalsList.size()).forEach(i -> {
Regionals regionals=regionalsList.get(i);
regionals.setRegionalId(KeyUtil.getUUIDKey("QY"));
regionals.setTaskId(regionalsTask.getTaskId());// 前端传回的任务编号
regTaskService.saveRegional(regionals);
});
}
}else{
return MapRestResult.build(200,"更新任务区域接口和更新任务接口失败", "1",regionalsTask.getTaskId());
}
}else{
if(regionalsList!=null){
IntStream.range(0, regionalsList.size()).forEach(i -> {
Regionals regionals=regionalsList.get(i);
regionals.setRegionalId(KeyUtil.getUUIDKey("QY"));
regionals.setTaskId(regionalsTask.getTaskId());// 前端传回的任务编号
regTaskService.saveRegional(regionals);
});
}
}
// 并对任务表进行更新
boolean updateRegionals = regTaskService.updateRegionals(regionalsTask.getTaskId(),regionalsTask.getTaskName());
if(!updateRegionals){
return MapRestResult.build(200,"更新任务区域接口和更新任务接口失败", "1",regionalsTask.getTaskId());
}
return MapRestResult.build(200,"更新任务区域接口和更新任务接口成功", "1",regionalsTask.getTaskId());
}
}
package com.founder.carapi.mapper;
import com.founder.commonutils.carEntity.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
@Mapper
public interface CarInfoMapper {
List<KkXxResult> getKkInfoByQsJwd(@Param(value = "qsjd") String qsjd,
@Param(value = "qswd") String qswd,
@Param(value = "jsjd") String jsjd,
@Param(value = "jswd") String jswd);
List<TbStRegionalstaskresult> getAllResult(TbStRegionalstaskresult tbStRegionalstaskresult);
List<TbStRegionalstaskresult> getAllResultall(TbStRegionalstaskresult tbStRegionalstaskresult);
Integer getAllResultcount(TbStRegionalstaskresult tbStRegionalstaskresult);
List<RegionalsDetail> getAllRegionalsDetail(@Param("reultId") String reultId);
RegionalsPerson getAllRegionalsPerson(@Param("sfzhm") String sfzhm);
List<reslutFl> getAllResultFlHs(@Param("taskId") String taskId);
List<reslutFl> getAllResultFl(@Param("taskId") String taskId);
}
package com.founder.carapi.mapper;
import com.founder.commonutils.carEntity.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
@Mapper
public interface RegInfoMapper {
void saveRegTask(RegionalsTask regionalsTask);
void saveRegional(Regionals regionals);
boolean saveResult(RegionalsResult regionalsResult);
boolean saveResultPz(CarKkInfo carKkInfo);
Integer selecteRegionalsPerson(@Param("sfzhm") String sfzhm);
void saveRegionalsDetail(RegionalsDetail regionalsDetail);
void saveRegionalsPerson(RegionalsPerson regionalsPerson);
void updateRegionalsResult(RegionalsResult regionalsResult);
void updateRegionalsTask(RegionalsTask regionalsTask);
List<RegionalsTask> selecteRegionalsTasks(SelectRegionalsTasksParams selectRegionalsTasksParams);
List<RegionalsCarCarResult> selecteRegionalsTasksResults(@Param("taskId") String taskId);
List<Regionals> selecteRegionals(@Param("taskId") String taskId);
boolean deleteRegionals(@Param("taskId") String taskId);
boolean updateRegionals(@Param("taskId") String taskId,@Param("taskName") String taskName);
}
<?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="com.founder.carapi.mapper.CarInfoMapper">
<resultMap id="RegionalsDetail" type="com.founder.commonutils.carEntity.RegionalsDetail">
<result column="xxzjbh" property="xxzjbh" jdbcType="VARCHAR"/>
<result column="sfzhm" property="sfzhm" jdbcType="VARCHAR"/>
<result column="sf_Check" property="sfCheck" jdbcType="VARCHAR"/>
<result column="result_Id" property="resultId" jdbcType="VARCHAR"/>
<result column="object_Type" property="objectType" jdbcType="VARCHAR"/>
<result column="object_Type_Name" property="objectTypeName" jdbcType="VARCHAR"/>
<result column="object_Value" property="objectValue" jdbcType="VARCHAR"/>
</resultMap>
<!--根据起始经纬度获取卡口点位数据-->
<select id="getKkInfoByQsJwd" parameterType="java.lang.String" resultType="com.founder.commonutils.carEntity.KkXxResult">
select
NAME as deviceMc,
CODE as deviceCode,
(select name from sys_dictitem where groupid = 'CODE_XZQH' and code = substr(t.CODE,0,6))||NAME as deviceAddress,
x as x,
y as y
from tb_zy_kk t where 1=1
<if test="qsjd!=null and qsjd!='' and qsjd!=null and qsjd!='' and qswd!=null and qswd!='' and jswd!=null and jswd!=''">
AND x<![CDATA[>=]]>#{qsjd,jdbcType=VARCHAR} AND x<![CDATA[<=]]>#{jsjd,jdbcType=VARCHAR}
AND y<![CDATA[>=]]>#{qswd,jdbcType=VARCHAR} AND y<![CDATA[<=]]>#{jswd,jdbcType=VARCHAR}
</if>
</select>
<!--任务 查询结果表-->
<select id="getAllResult" parameterType="com.founder.commonutils.carEntity.TbStRegionalstaskresult" resultType="com.founder.commonutils.carEntity.TbStRegionalstaskresult">
select t2.* from(
select t1.*,rownum as rn from
(
SELECT
xxzjbh,
task_id,
object_type,
object_type_name,
object_value,
region,
regionList,
apetype,
apetypeMc,
kkUrlPic,
x,
y,
to_char(time,'YYYY-MM-DD HH24:mi:ss') as timeGet
FROM TB_ST_REGIONALS_RESULT
where 1=1
<if test="task_id != null and task_id != ''">and task_id = #{ task_id , jdbcType=VARCHAR }</if>
<if test="sabz!= null and sabz != ''">and sabz = #{ sabz , jdbcType=VARCHAR }</if>
<if test="object_value != null and object_value != ''">
<if test="object_value == 'gz'.toString()">
and object_value LIKE '蒙%'
</if>
<if test="object_value != 'gz'.toString()">
and object_value LIKE #{ object_value , jdbcType=VARCHAR }||'%'
</if>
</if>
<if test="apetype != null and apetype != ''">and apetype = #{ apetype , jdbcType=VARCHAR }</if>
<if test="region != null and region != ''">and region = #{ region , jdbcType=VARCHAR }</if>
) t1
<where>
rownum<![CDATA[ <= ]]> #{ end , jdbcType=VARCHAR }
</where>
)t2
<where>
rn<![CDATA[ >= ]]> #{ begin, jdbcType=VARCHAR }
</where>
</select>
<!--任务 查询结果表-->
<select id="getAllResultall" parameterType="com.founder.commonutils.carEntity.TbStRegionalstaskresult" resultType="com.founder.commonutils.carEntity.TbStRegionalstaskresult">
SELECT
xxzjbh,
task_id,
object_type,
object_type_name,
object_value,
region,
regionList,
apetype,
apetypeMc,
kkUrlPic,
x,
y,
to_char(time,'YYYY-MM-DD HH24:mi:ss') as timeGet
FROM TB_ST_REGIONALS_RESULT
where 1=1
<if test="task_id != null and task_id != ''">and task_id = #{ task_id , jdbcType=VARCHAR }</if>
</select>
<select id="getAllResultcount" parameterType="com.founder.commonutils.carEntity.TbStRegionalstaskresult" resultType="java.lang.Integer">
SELECT
count(*)
FROM TB_ST_REGIONALS_RESULT
where 1=1
<if test="task_id != null and task_id != ''">and task_id = #{ task_id , jdbcType=VARCHAR }</if>
<if test="sabz!= null and sabz != ''">and sabz = #{ sabz , jdbcType=VARCHAR }</if>
<if test="object_value != null and object_value != ''">
<if test="object_value == 'gz'.toString()">
and object_value LIKE '蒙%'
</if>
<if test="object_value != 'gz'.toString()">
and object_value LIKE #{ object_value , jdbcType=VARCHAR }||'%'
</if>
</if>
<if test="apetype != null and apetype != ''">and apetype = #{ apetype , jdbcType=VARCHAR }</if>
<if test="region != null and region != ''">and region = #{ region , jdbcType=VARCHAR }</if>
</select>
<!--任务 查询详情表-->
<select id="getAllRegionalsDetail" parameterType="String" resultMap="RegionalsDetail">
SELECT
*
FROM TB_ST_REGIONALS_DETAIL
where 1=1
<if test="reultId != null and reultId != ''">and result_id = #{ reultId , jdbcType=VARCHAR }</if>
</select>
<!--任务 查询人员表-->
<select id="getAllRegionalsPerson" parameterType="String" resultType="com.founder.commonutils.carEntity.RegionalsPerson">
select * from TB_ST_REGIONALS_PERSON
where 1=1
<if test="sfzhm != null and sfzhm != ''">
and SFZHM = #{ sfzhm , jdbcType=VARCHAR }
</if>
</select>
<select id="getAllResultFlHs" parameterType="String" resultType="com.founder.commonutils.carEntity.reslutFl">
select
region flbz,count(*) flcount,'1' levels,'' pid from TB_ST_REGIONALS_RESULT
where 1=1
<if test="taskId != null and taskId != ''">and task_id = #{ taskId , jdbcType=VARCHAR }</if>
group by region
union all
select
case when substr(object_value,0,1)='蒙' then '蒙'
when substr(object_value,0,1) in ('京','津','沪','渝','宁','新','藏','挂','蒙','辽','吉','黑','冀','晋','苏','浙','皖','闵','赣','鲁','豫','鄂','湘','琼','川','贵','云','陕','甘','青','粤')
then '外省'
else
'未知'
end
flbz ,
count(*) flcount,'1' levels,'' pid from TB_ST_REGIONALS_RESULT t
where 1=1
<if test="taskId != null and taskId != ''">and task_id = #{ taskId , jdbcType=VARCHAR }</if>
group by
case when substr(object_value,0,1)='蒙' then '蒙'
when substr(object_value,0,1) in ('京','津','沪','渝','宁','新','藏','挂','蒙','辽','吉','黑','冀','晋','苏','浙','皖','闵','赣','鲁','豫','鄂','湘','琼','川','贵','云','陕','甘','青','粤')
then '外省'
else
'未知'
end
union all
select
substr(object_value,0,1) flbz,
count(*) flcount ,'2' levels ,'外省' pid from TB_ST_REGIONALS_RESULT t
where 1=1
<if test="taskId != null and taskId != ''">and task_id = #{ taskId , jdbcType=VARCHAR }</if>
and substr(object_value,0,1) not like '蒙%'
and substr(object_value,0,1) in ('粤','京','津','沪','渝','宁','新','藏','挂','蒙','辽','吉','黑','冀','晋','苏','浙','皖','闵','赣','鲁','豫','鄂','湘','琼','川','贵','云','陕','甘','青')
group by substr(object_value,0,1)
union all
select
substr(object_value,0,1) flbz,
count(*) flcount ,'2' levels ,'未知' pid from TB_ST_REGIONALS_RESULT t
where 1=1
<if test="taskId != null and taskId != ''">and task_id = #{ taskId , jdbcType=VARCHAR }</if>
and substr(object_value,0,1) not like '蒙%'
and substr(object_value,0,1) not in ('粤','京','津','沪','渝','宁','新','藏','挂','蒙','辽','吉','黑','冀','晋','苏','浙','皖','闵','赣','鲁','豫','鄂','湘','琼','川','贵','云','陕','甘','青')
group by substr(object_value,0,1)
union all
select
object_value flbz,count(*) flcount,'1' levels,'徘徊' pid from TB_ST_REGIONALS_RESULT
where 1=1
<if test="taskId != null and taskId != ''">and task_id = #{ taskId , jdbcType=VARCHAR }</if>
group by object_value
</select>
<select id="getAllResultFl" parameterType="String" resultType="com.founder.commonutils.carEntity.reslutFl">
select
region flbz,count(*) flcount,'1' levels,'' pid from TB_ST_REGIONALS_RESULT
where 1=1
<if test="taskId != null and taskId != ''">and task_id = #{ taskId , jdbcType=VARCHAR }</if>
group by region
union all
select
case when substr(object_value,0,1)='蒙' then '蒙'
when substr(object_value,0,1) in ('粤','京','津','沪','渝','宁','新','藏','挂','蒙','辽','吉','黑','冀','晋','苏','浙','皖','闵','赣','鲁','豫','鄂','湘','琼','川','贵','云','陕','甘','青')
then '外省'
else
'未知'
end
flbz ,
count(*) flcount,'1' levels,'' pid from TB_ST_REGIONALS_RESULT t
where 1=1
<if test="taskId != null and taskId != ''">and task_id = #{ taskId , jdbcType=VARCHAR }</if>
group by
case when substr(object_value,0,1)='蒙' then '蒙'
when substr(object_value,0,1) in ('粤','京','津','沪','渝','宁','新','藏','挂','蒙','辽','吉','黑','冀','晋','苏','浙','皖','闵','赣','鲁','豫','鄂','湘','琼','川','贵','云','陕','甘','青')
then '外省'
else
'未知'
end
union all
select
substr(object_value,0,1) flbz,
count(*) flcount ,'2' levels ,'外省' pid from TB_ST_REGIONALS_RESULT t
where 1=1
<if test="taskId != null and taskId != ''">and task_id = #{ taskId , jdbcType=VARCHAR }</if>
and substr(object_value,0,1) not like '蒙%'
and substr(object_value,0,1) in ('粤','京','津','沪','渝','宁','新','藏','挂','蒙','辽','吉','黑','冀','晋','苏','浙','皖','闵','赣','鲁','豫','鄂','湘','琼','川','贵','云','陕','甘','青')
group by substr(object_value,0,1)
union all
select
substr(object_value,0,1) flbz,
count(*) flcount ,'2' levels ,'未知' pid from TB_ST_REGIONALS_RESULT t
where 1=1
<if test="taskId != null and taskId != ''">and task_id = #{ taskId , jdbcType=VARCHAR }</if>
and substr(object_value,0,1) not like '蒙%'
and substr(object_value,0,1) not in ('粤','京','津','沪','渝','宁','新','藏','挂','蒙','辽','吉','黑','冀','晋','苏','浙','皖','闵','赣','鲁','豫','鄂','湘','琼','川','贵','云','陕','甘','青')
group by substr(object_value,0,1)
</select>
</mapper>
<?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="com.founder.carapi.mapper.RegInfoMapper">
<!--发送任务 保存-->
<insert id="saveRegTask" parameterType="com.founder.commonutils.carEntity.RegionalsTask">
INSERT INTO TB_ST_REGIONALS_TASK (
task_id,
task_name,
progress,
state,
task_case_id,
djsj,
fsr_jh,
fsr_identity,
task_type,
task_object,
fsr_xm,
carNum
)
VALUES(
#{taskId, jdbcType=VARCHAR}
,#{taskName, jdbcType=VARCHAR}
,#{progress, jdbcType=VARCHAR}
,#{state, jdbcType=VARCHAR}
,#{taskCaseId, jdbcType=VARCHAR}
,sysdate
,#{fsrJh, jdbcType=VARCHAR}
,#{fsrIdentity, jdbcType=VARCHAR}
,#{taskType, jdbcType=VARCHAR}
,#{taskObject, jdbcType=VARCHAR}
,#{fsrXm, jdbcType=VARCHAR}
,#{carNum, jdbcType=VARCHAR}
)
</insert>
<!--任务发送 区域保存-->
<insert id="saveRegional" parameterType="com.founder.commonutils.carEntity.Regionals">
INSERT INTO TB_ST_REGIONALS (
task_id,
regional_id,
start_time,
end_time,
geometry,
name,
source,
djsj,
type,
radius
)
VALUES(
#{taskId, jdbcType=VARCHAR}
,#{regionalId, jdbcType=VARCHAR}
,#{startTime , jdbcType=TIMESTAMP }
,#{endTime , jdbcType=TIMESTAMP }
,#{geometry, jdbcType=VARCHAR}
,#{name, jdbcType=VARCHAR}
,#{source, jdbcType=VARCHAR}
,sysdate
,#{type, jdbcType=VARCHAR}
,#{radius, jdbcType=VARCHAR}
)
</insert>
<!-- 结果数据保存-->
<insert id="saveResult" parameterType="com.founder.commonutils.carEntity.RegionalsResult">
INSERT INTO TB_ST_REGIONALS_RESULT (
XXZJBH,
TASK_ID,
OBJECT_TYPE,
OBJECT_TYPE_NAME,
OBJECT_VALUE,
REGION,
REGIONLIST,
SF_CHECK,
count,
DJSJ,
kkUrlPic,
time,
X,
Y,
deviceId,
deviceName
)
VALUES(
#{ xxzjbh , jdbcType=VARCHAR }
,#{ taskId , jdbcType=VARCHAR }
,#{ objectType , jdbcType=VARCHAR }
,#{ objectTypeName , jdbcType=VARCHAR }
,#{ objectValue , jdbcType=VARCHAR }
,#{ region , jdbcType=VARCHAR }
,#{ regionList , jdbcType=VARCHAR }
,#{ sfCheck , jdbcType=VARCHAR }
,#{ count , jdbcType=VARCHAR }
,sysdate
,#{ kkUrlPic , jdbcType=VARCHAR }
,#{ time , jdbcType=TIMESTAMP }
,#{ x , jdbcType=VARCHAR }
,#{ y , jdbcType=VARCHAR }
,#{ deviceId , jdbcType=VARCHAR }
,#{ deviceName , jdbcType=VARCHAR }
)
</insert>
<!--任务 查询人员表-->
<select id="selecteRegionalsPerson" parameterType="String" resultType="java.lang.Integer">
SELECT
count(*)
FROM TB_ST_REGIONALS_PERSON
where 1=1
<if test="sfzhm != null and sfzhm != ''">and sfzhm = #{ sfzhm , jdbcType=VARCHAR }</if>
</select>
<!--任务 详情保存-->
<insert id="saveRegionalsDetail" parameterType="com.founder.commonutils.carEntity.RegionalsDetail">
INSERT INTO TB_ST_REGIONALS_DETAIL (
XXZJBH
,RESULT_ID
,OBJECT_TYPE
,OBJECT_TYPE_NAME
,OBJECT_VALUE
,SFZHM
,DJSJ
)
VALUES(
#{ xxzjbh , jdbcType=VARCHAR }
,#{ resultId , jdbcType=VARCHAR }
,#{ objectType , jdbcType=VARCHAR }
,#{ objectTypeName , jdbcType=VARCHAR }
,#{ objectValue , jdbcType=VARCHAR }
,#{ sfzhm , jdbcType=VARCHAR }
,sysdate
)
</insert>
<!--任务人员保存-->
<insert id="saveRegionalsPerson" parameterType="com.founder.commonutils.carEntity.RegionalsPerson">
INSERT INTO TB_ST_REGIONALS_PERSON (
XXZJBH
,MZ
,XM
,IMG
,XB
,SFZHM
,CSDZMC
,XZZDZMC
,PHONE
,SF_FZXYR
,SF_CHECK
,HJDQHDZ
,CSRQ
)
VALUES(
#{ xxzjbh }
,#{ mz , jdbcType=VARCHAR }
,#{ xm , jdbcType=VARCHAR }
,#{ img , jdbcType=BLOB }
,#{ xb , jdbcType=VARCHAR }
,#{ sfzhm , jdbcType=VARCHAR }
,#{ csdzmc , jdbcType=VARCHAR }
,#{ xzzdzmc , jdbcType=VARCHAR }
,#{ phone , jdbcType=VARCHAR }
,#{ sfFzxyr , jdbcType=VARCHAR }
,#{ sfCheck , jdbcType=VARCHAR }
,#{ hjdqhdz , jdbcType=VARCHAR }
,#{ csrq , jdbcType=VARCHAR }
)
</insert>
<!--任务 修改任务表-->
<update id="updateRegionalsResult" parameterType="com.founder.commonutils.carEntity.RegionalsResult">
UPDATE TB_ST_REGIONALS_RESULT
<!--使用trim可以删掉最后字段的逗号,set已被包含在trim中,所以不用重复写了-->
<trim prefix="set" suffixOverrides=",">
<if test="sfCheck != null and sfCheck != ''">SF_CHECK = #{ sfCheck , jdbcType=VARCHAR },</if>
<if test="sabz != null and sabz != ''">SABZ = #{ sabz , jdbcType=VARCHAR },</if>
</trim>
where 1=1
<if test="xxzjbh != null and xxzjbh != ''">and XXZJBH = #{ xxzjbh , jdbcType=VARCHAR }</if>
</update>
<!--chent 任务 修改任务表-->
<update id="updateRegionalsTask" parameterType="com.founder.commonutils.carEntity.RegionalsTask">
UPDATE TB_ST_REGIONALS_TASK
<!--使用trim可以删掉最后字段的逗号,set已被包含在trim中,所以不用重复写了-->
<trim prefix="set" suffixOverrides=",">
<if test="progress != null and progress != ''">PROGRESS = #{ progress , jdbcType=VARCHAR },</if>
<if test="state != null and state != ''">STATE = #{ state , jdbcType=VARCHAR },</if>
</trim>
where 1=1
<if test="taskId != null and taskId != ''">and TASK_ID = #{ taskId , jdbcType=VARCHAR }</if>
</update>
<!--获取所有任务-->
<select id="selecteRegionalsTasks" parameterType="com.founder.commonutils.carEntity.SelectRegionalsTasksParams" resultType="com.founder.commonutils.carEntity.RegionalsTask">
SELECT task_Id AS taskId,
task_Name AS taskName,
(CASE WHEN progress = 'BEGIN' THEN '任务开始'
WHEN progress = 'RUN' THEN '任务执行'
WHEN progress = 'END' THEN '任务完成'
else '任务失败' end)
as progress,
state as state,
fsr_Jh as fsrJh,
fsr_Identity as fsrIdentity,
task_Type as taskType,
task_Object as taskObject,
to_char(djsj,'yyyy-mm-dd hh24:mi:ss') as djsj,
fsr_Xm as fsrXm,
carNum as carNum,
(select count(*) from tb_st_regionals_result r where t.task_id = r.task_id) as counts
FROM tb_st_regionals_task t
where 1=1
<if test="startTime != null and startTime != ''">and DJSJ <![CDATA[>=]]> TO_DATE(#{ startTime , jdbcType=VARCHAR },'yyyy-MM-dd')</if>
<if test="endTime != null and endTime != ''">and DJSJ <![CDATA[<]]> (TO_DATE(#{ endTime , jdbcType=VARCHAR },'yyyy-MM-dd')+1)</if>
<if test="taskObject != null and taskObject != ''">and task_Object = #{ taskObject , jdbcType=VARCHAR }</if>
<if test="fsrIdentity != null and fsrIdentity != ''">and fsr_Identity = #{ fsrIdentity , jdbcType=VARCHAR }</if>
<if test="carNum != null and carNum != ''">and carNum = #{ carNum , jdbcType=VARCHAR }</if>
<if test="taskType != null and taskType != ''">and task_Type = #{ taskType , jdbcType=VARCHAR }</if>
<if test="taskName != null and taskName != ''">and task_Name = #{ task_Name , jdbcType=VARCHAR }</if>
</select>
<!--获取任务结果-->
<select id="selecteRegionalsTasksResults" parameterType="String" resultType="com.founder.commonutils.carEntity.RegionalsCarCarResult">
SELECT
r.xxzjbh as xxzjbh,
r.task_id as taskId,
r.object_value as objectValue,
to_char(r.djsj,'yyyy-mm-dd hh24:mi:ss') as djsj,
r.X AS X,
r.Y AS Y,
r.KKURLPIC as kkUrlPic,
to_char(r.time,'yyyy-mm-dd hh24:mi:ss') as time,
r.deviceid as deviceId,
r.devicename as deviceName,
p.XM as xm,
p.MZ as mz,
p.img as img,
p.xb as xb,
p.sfzhm as sfzhm,
p.xzzdzmc as xzzdzmc,
p.phone as phone,
p.HJDQHDZ as hjdqhdz,
p.csrq as csrq
FROM TB_ST_REGIONALS_RESULT r,TB_ST_REGIONALS_detail d,TB_ST_REGIONALS_PERSON p
where r.XXZJBH = d.RESULT_ID(+)
and d.SFZHM = P.SFZHM(+)
<if test="taskId != null and taskId != ''">and r.task_Id = #{ taskId , jdbcType=VARCHAR }</if>
</select>
<!--获取任务结果-->
<select id="selecteRegionals" parameterType="String" resultType="com.founder.commonutils.carEntity.Regionals">
SELECT
task_id as taskId,
regional_id as regionalId,
start_time as startTime,
end_time as endTime,
geometry,
name,
source,
djsj,
type,
radius
FROM TB_ST_REGIONALS
where 1=1
<if test="taskId != null and taskId != ''">and task_Id = #{ taskId , jdbcType=VARCHAR }</if>
</select>
<!--车辆碰撞结果数据保存-->
<insert id="saveResultPz" parameterType="com.founder.commonutils.carEntity.CarKkInfo">
INSERT INTO TB_ST_REGIONALS_RESULT (
XXZJBH,
TASK_ID,
OBJECT_VALUE,
REGION,
count,
DJSJ,
apeType,
apeTypeMc,
kkUrlPic,
time,
X,
Y
)
VALUES(
#{ xxzjbh , jdbcType=VARCHAR }
,#{ taskId , jdbcType=VARCHAR }
,#{ objectValue , jdbcType=VARCHAR }
,#{ region , jdbcType=VARCHAR }
,#{ count , jdbcType=VARCHAR }
,sysdate
,#{ apeType , jdbcType=VARCHAR }
,#{ apeTypeMc , jdbcType=VARCHAR }
,#{ kkUrlPic , jdbcType=VARCHAR }
,TO_DATE(#{ time , jdbcType=VARCHAR },'yyyy-MM-dd hh24:mi:ss')
,#{ x , jdbcType=VARCHAR }
,#{ y , jdbcType=VARCHAR }
)
</insert>
<!--删除任务区域结果-->
<delete id="deleteRegionals" parameterType="String">
delete
TB_ST_REGIONALS
where 1=1
<if test="taskId != null and taskId != ''">and task_Id = #{ taskId , jdbcType=VARCHAR }</if>
</delete>
<!--删除任务结果-->
<delete id="updateRegionals" parameterType="String">
update
TB_ST_REGIONALS_TASK
set
<if test="taskName != null and taskName != ''">task_Name = #{ taskName , jdbcType=VARCHAR },</if>
djsj = SYSDATE
where 1=1
<if test="taskId != null and taskId != ''">and task_Id = #{ taskId , jdbcType=VARCHAR }</if>
</delete>
</mapper>
package com.founder.carapi.service;
import com.founder.commonutils.carEntity.*;
import com.founder.commonutils.publicEntity.MapRestResult;
import java.util.List;
/**
* <p>
* 技侦接口 服务类
* </p>
*
* @author yangyang
* @since 2021-04-09
*/
public interface CarService {
MapRestResult selectKkXx(String qsjd, String qswd, String jsjd, String jswd);
MapRestResult getCarTranslate(CarTranslateParams carTranslateParams);
MapRestResult carOneAreaIAnalysis(CarOneAreaIAnalysisSearchParam carOneAreaIAnalysisSearchParam);
MapRestResult carCarAnalysis(CarCarAnalysisSearchParam carCarAnalysisSearchParam) throws Exception;
MapRestResult MoreAreaInfoThread(List<AreaInfo> areaInfos) throws Exception;
MapRestResult getTrackYstld(TrackYsModelCondition track);
MapRestResult getTrackYsljd(TrackYsModelCondition track);
MapRestResult getRegionalsResult(TbStRegionalstaskresult tbStRegionalstaskresult) throws Exception;
MapRestResult getRegionalsResultFl(TbStRegionalstaskresult tbStRegionalstaskresult) throws Exception;
MapRestResult getTrackYshdqy(TrackYsModelCondition track);
MapRestResult OneAreaInfoTrampResultThread(AreaInfo areaInfo) throws Exception;
}
package com.founder.carapi.service;
import com.founder.commonutils.carEntity.Regionals;
import com.founder.commonutils.carEntity.RegionalsCarCarResult;
import com.founder.commonutils.carEntity.RegionalsTask;
import com.founder.commonutils.carEntity.SelectRegionalsTasksParams;
import com.founder.commonutils.publicEntity.MapRestResult;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author yangyang
* @since 2021-04-10
*/
public interface RegTaskService {
MapRestResult saveRegTask(RegionalsTask regionalsTask);
MapRestResult saveRegional(Regionals regionals);
List<RegionalsTask> selecteRegionalsTasks(SelectRegionalsTasksParams selectRegionalsTasksParams);
List<RegionalsCarCarResult> selecteRegionalsTasksResults(@Param("taskId") String taskId);
List<Regionals> selecteRegionals(@Param("taskId") String taskId);
boolean deleteRegionals(String taskId);
boolean updateRegionals(String taskId,String taskName);
}
This source diff could not be displayed because it is too large. You can view the blob instead.
package com.founder.carapi.service.impl;
import com.founder.carapi.mapper.RegInfoMapper;
import com.founder.carapi.service.RegTaskService;
import com.founder.commonutils.carEntity.*;
import com.founder.commonutils.publicEntity.MapRestResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/*
*
* <p>
* 服务实现类
* </p>
*
* @author yangyang
* @since 2021-04-10
*/
@Service
public class RegTaskServiceImpl implements RegTaskService {
@Autowired
private RegInfoMapper regInfoMapper;
@Override
public MapRestResult saveRegTask(RegionalsTask regionalsTask) {
regInfoMapper.saveRegTask(regionalsTask);
return MapRestResult.build(200,"任务保存成功","");
}
@Override
public MapRestResult saveRegional(Regionals regionals) {
regInfoMapper.saveRegional(regionals);
return MapRestResult.build(200,"区域保存成功","");
}
@Override
public List<RegionalsTask> selecteRegionalsTasks(SelectRegionalsTasksParams selectRegionalsTasksParams) {
return regInfoMapper.selecteRegionalsTasks(selectRegionalsTasksParams);
}
@Override
public List<RegionalsCarCarResult> selecteRegionalsTasksResults(String taskId) {
return regInfoMapper.selecteRegionalsTasksResults(taskId);
}
@Override
public List<Regionals> selecteRegionals(String taskId) {
return regInfoMapper.selecteRegionals(taskId);
}
@Override
public boolean deleteRegionals(String taskId) {
return regInfoMapper.deleteRegionals(taskId);
}
@Override
public boolean updateRegionals(String taskId,String taskName) {
return regInfoMapper.updateRegionals(taskId,taskName);
}
}
#配置中心地址
#spring.cloud.nacos.config.server-addr=47.92.48.137:8848
#spring.cloud.nacos.discovery.server-addr=47.92.48.137:8848
spring.cloud.nacos.config.server-addr=26.3.13.184:8848
spring.cloud.nacos.discovery.server-addr=26.3.13.184:8848
spring.profiles.active=prod
# 该配置影响统一配置中心中的dataId
spring.application.name=carapi
spring.cloud.nacos.config.namespace=prod
#spring.cloud.nacos.config.ext-config[0].data-id=image.properties
# 开启动态刷新配置,否则配置文件修改,工程无法感知
#spring.cloud.nacos.config.ext-config[0].refresh=true
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>serviceapi</artifactId>
<groupId>com.founder</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>imageapi</artifactId>
<build>
<finalName>imageapi</finalName>
</build>
</project>
\ No newline at end of file
package com.founder.imageapi;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
@ComponentScan(basePackages = {"com.founder"})
@EnableDiscoveryClient
public class ImageApiApplication {
@Autowired
private RestTemplateBuilder restTemplateBuilder;
public static void main(String[] args) {
SpringApplication.run(ImageApiApplication.class, args);
}
@Bean
public RestTemplate restTemplate(){return restTemplateBuilder.build();}
}
package com.founder.imageapi.controller;
import com.founder.commonutils.carEntity.CarKkXxParams;
import com.founder.commonutils.peopleEntity.CameraFaceTask;
import com.founder.commonutils.peopleEntity.FaceJtSearchParam;
import com.founder.commonutils.peopleEntity.FaceSearchParam;
import com.founder.commonutils.publicEntity.MapRestResult;
import com.founder.commonutils.util.TokenUtils;
import com.founder.servicebase.logs.OperLog;
import com.founder.servicebase.logs.OperationType;
import com.founder.imageapi.service.ImageService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.Date;
/**
* <p>
* 第三方图像接口管理 前端控制器
* </p>
*
* @author yangyang
* @since 2021-03-18
*/
@Api(description = "第三方图像接口管理-云天励飞")
@RestController
@RequestMapping("/image")
@Component
public class ImageController {
@Autowired
private ImageService imageService;
//获取token
@OperLog(message = "token获取",operation = OperationType.QUERY)
@ApiOperation(value = "token获取")
@PostMapping("/token")
public MapRestResult getToken() {
//获取token
String accessToken = TokenUtils.getYtgsToken();
return MapRestResult.build(202,"成功获取token信息",accessToken);
}
// 人脸动态检索接口接口
//@OperLog(message = "人脸动态检索接口",operation = OperationType.QUERY)
@ApiOperation(value = "人脸动态检索接口")
@PostMapping(value = "/getFaceImageByUploadImage")
public MapRestResult getFaceIdsByUploadImage(@RequestPart(value = "files",required = true) MultipartFile[] files, FaceSearchParam faceSearchParam) {
long startTime=new Date().getTime();
MapRestResult result=imageService.getFaceImageByUploadImage(files,faceSearchParam);
long endTime=new Date().getTime();
long timeDiffer=endTime-startTime;
System.out.println("人脸检索**请求时长**********"+timeDiffer+"毫秒");
return result;
}
// 人像回溯接口
//@OperLog(message = "人像回溯接口",operation = OperationType.QUERY)
@ApiOperation(value = "人像回溯接口")
@PostMapping(value = "/sendTask")
public MapRestResult sendTask(@RequestBody CameraFaceTask cameraFaceTask) {
return imageService.sendTask(cameraFaceTask);
}
// 范围内人像点位数据接口
//@OperLog(message = "范围内人像点位数据接口",operation = OperationType.QUERY)
@ApiOperation(value = "范围内人像点位数据接口")
@PostMapping(value = "/selectRxXx")
public MapRestResult selectRxXx(@RequestBody CarKkXxParams carKkXxParams) {
return imageService.selectRxXx(carKkXxParams.getQsjd(),carKkXxParams.getQswd(),carKkXxParams.getJsjd(),carKkXxParams.getJswd());
}
// 人像比对接口(暂使用云天励飞静态检索接口)
//@OperLog(message = "人像比对接口",operation = OperationType.QUERY)
@ApiOperation(value = "人像比对接口")
@PostMapping(value = "/getFaceImageByUploadImageJt",consumes = "multipart/*",headers = "content-type=multipart/form-data")
public MapRestResult getFaceIdsByUploadImage(@RequestParam(value = "files",required = true) MultipartFile files, FaceJtSearchParam faceSearchParam) {
long startTime=new Date().getTime();
MapRestResult result=imageService.getFaceImageByUploadImageJt(files,faceSearchParam);
long endTime=new Date().getTime();
long timeDiffer=endTime-startTime;
System.out.println("人像比对检索**请求时长**********"+timeDiffer+"毫秒");
return result;
}
}
package com.founder.imageapi.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.founder.commonutils.peopleEntity.Camera;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper
public interface CameraInfoMapper extends BaseMapper<Camera> {
List<Camera> getCameraInfoByIds(@Param(value = "cameraIds") String cameraIds);
List<Camera> getCameraInfoByQsJwd(@Param(value = "qsjd")String qsjd,
@Param(value = "qswd")String qswd,
@Param(value = "jsjd")String jsjd,
@Param(value = "jswd")String jswd);
}
<?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="com.founder.imageapi.mapper.CameraInfoMapper">
<!--根据起始经纬度获取人像点位数据-->
<select id="getCameraInfoByIds" parameterType="java.lang.String" resultType="com.founder.commonutils.peopleEntity.Camera">
select
t.ID as cameraId,
t.NAME as cameraName,
(select name from sys_dictitem where groupid = 'CODE_UNIT' and code = substr(t.camera_code,0,6)||'000000') as districtCodeName,
substr(t.camera_code,0,6)|| '000000' as districtCode,
(select name from sys_dictitem where groupid = 'CODE_XZQH' and code = substr(t.camera_code,0,6)) as areaCodeName,
substr(t.camera_code,0,6) as areaCode,
t.CITY as areaName,
x as x,
y as y,
NAME as cameraType
from tb_zy_camera t where 1=1
<if test="cameraIds!=null and cameraIds!=''">and id in ${cameraIds}</if>
</select>
<!--根据起始经纬度获取人像点位数据-->
<select id="getCameraInfoByQsJwd" parameterType="java.lang.String" resultType="com.founder.commonutils.peopleEntity.Camera">
select
ID as cameraId,
NAME as cameraName,
CITY as areaName,
(select name from sys_dictitem where groupid = 'CODE_UNIT' and code = substr(t.camera_code,0,6)||'000000') as districtCodeName,
substr(t.camera_code,0,6)|| '000000' as districtCode,
(select name from sys_dictitem where groupid = 'CODE_XZQH' and code = substr(t.camera_code,0,6)) as areaCodeName,
substr(t.camera_code,0,6) as areaCode,
x as x,
y as y,
NAME as cameraType
from tb_zy_camera t where 1=1
<if test="qsjd!=null and qsjd!='' and qsjd!=null and qsjd!='' and qswd!=null and qswd!='' and jswd!=null and jswd!=''">
AND x<![CDATA[>=]]>#{qsjd,jdbcType=VARCHAR} AND x<![CDATA[<=]]>#{jsjd,jdbcType=VARCHAR}
AND y<![CDATA[>=]]>#{qswd,jdbcType=VARCHAR} AND y<![CDATA[<=]]>#{jswd,jdbcType=VARCHAR}
</if>
</select>
</mapper>
package com.founder.imageapi.service;
import com.founder.commonutils.peopleEntity.CameraFaceTask;
import com.founder.commonutils.peopleEntity.FaceJtSearchParam;
import com.founder.commonutils.peopleEntity.FaceSearchParam;
import com.founder.commonutils.publicEntity.MapRestResult;
import org.springframework.web.multipart.MultipartFile;
/**
* <p>
* 云天接口 服务类
* </p>
*
* @author yangyang
* @since 2021-03-19
*/
public interface ImageService {
MapRestResult getFaceImageByUploadImage(MultipartFile[] files, FaceSearchParam faceSearchParam);
/* MapRestResult getImageById(Long id);*/
/* MapRestResult getFaceById(Long id);*/
/* MapRestResult getImageByFaceId(Long faceId);*/
/* MapRestResult w(Long faceId);*/
/* MapRestResult getImageByBigImageId(Long bigImageId);*/
MapRestResult sendTask(CameraFaceTask cameraFaceTask);
MapRestResult selectRxXx(String qsjd,String qswd,String jsjd,String jswd);
MapRestResult getFaceImageByUploadImageJt(MultipartFile files, FaceJtSearchParam faceSearchParam);
}
package com.founder.imageapi.service.impl;
import com.founder.commonutils.peopleEntity.Camera;
import com.founder.commonutils.util.DataUtil;
import com.founder.imageapi.mapper.CameraInfoMapper;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.*;
/**
* @Author yy
* @Date 2021/03/21
*/
@Component
public class CommonService {
@Autowired
private CameraInfoMapper cameraInfoDao;
public Map<String, Object> getCameraInfoByIds(String cameraId) {
Map<String, Object> map = new HashMap<>();
List<Camera> cameras = cameraInfoDao.getCameraInfoByIds(cameraId);
if (cameras != null&&cameras.size()>0) {
for(Camera camera:cameras){
String address = camera.getAreaCodeName() + camera.getCameraName();
String x = camera.getX(),y = camera.getY();// 经纬度
String cameraType=camera.getCameraType();
String areaCode=camera.getAreaCode();// 地区代码
String areaCodeName=camera.getAreaCodeName();// 地区名称 某市某城区
String districtCode=camera.getDistrictCode();// 分局代码
String districtCodeName=camera.getDistrictCodeName();// 分局名称
map.put("address", address);//某分局 某派出所 某摄像头
map.put("x", x);
map.put("y", y);
map.put("cameraName", camera.getCameraName());// 摄像头名称
map.put("cameraType",cameraType);
map.put("districtCodeName",districtCodeName);// 分局名称
map.put("districtCode",districtCode);// 分局代码
map.put("areaCode",areaCode);// 地区代码
map.put("areaCodeName",areaCodeName);// 地区名称
}
}
return map;
}
/**
* 配饰代码转汉字
*
* @return
*/
public Map<String, Object> accessoriesToValue(String genderStr, String raceStr, String accessoriesStr, String ageStr) {
Map<String, Object> resultMap = new HashMap<>();
Object genderValue=null;
/*gender
性别(byte0: bit0~bit3)
0表示不确定
1表示男性
2表示女性*/
if (StringUtils.isNotEmpty(genderStr)) {
int gender = Integer.parseInt(genderStr);
String genderBinary = DataUtil.decimalToBinary(gender);
Map<Integer, Object> list = DataUtil.binaryToValue(genderBinary, 4);
if (null != list && list.size() > 0) {
genderValue = list.get(0);
if (null != genderValue) {
if ("0".equals(genderValue.toString())) {
genderValue = "不确定";
} else if ("1".equals(genderValue.toString())) {
genderValue = "男性";
} else if ("2".equals(genderValue.toString())) {
genderValue = "女性";
}
}
}
}
resultMap.put("gender", genderValue);
/*Race
•民族(byte0: bit0~bit3)
0表示汉族
1表示外籍
•口罩(byte1: bit0~bit3)
0表示不确定是否戴口罩
1表示不戴口罩
2表示戴口罩*/
Object raceBinaryValue=null;
Object maskBinaryValue=null;
if (StringUtils.isNotEmpty(raceStr)) {
int race = Integer.parseInt(raceStr);
String raceBinary = DataUtil.decimalToBinary(race);
Map<Integer, Object> list = DataUtil.binaryToValue(raceBinary, 4);
if (null != list && list.size() > 0) {
raceBinaryValue = list.get(0);
if (null != raceBinaryValue) {
if ("0".equals(raceBinaryValue.toString())) {
raceBinaryValue = "汉族";
} else if ("1".equals(raceBinaryValue.toString())) {
raceBinaryValue = "外籍";
}
}
maskBinaryValue = list.get(1);
if (null != maskBinaryValue) {
if ("0".equals(maskBinaryValue.toString())) {
maskBinaryValue = "不确定";
} else if ("1".equals(maskBinaryValue.toString())) {
maskBinaryValue = "不戴口罩";
} else if ("2".equals(maskBinaryValue.toString())) {
maskBinaryValue = "戴口罩";
}
}
}
}
resultMap.put("race", raceBinaryValue);
resultMap.put("mask", maskBinaryValue);
/*Accessories
•眼镜(byte0: bit0~bit:3)
0表示不确定是否戴眼镜
1表示不戴眼镜
2表示戴(普通)眼镜
3表示戴太阳镜
•帽子(byte1: bit0~bit3)
0表示不确定是否戴帽子
1表示不戴帽子
2表示戴帽子
•发型(byte2: bit0~bit3)
0表示不确定头发长短
1表示短发
2表示长发*/
Object glassBinaryValue = null;
Object hatBinaryValue = null;
Object hairBinaryValue = null;
if (StringUtils.isNotEmpty(accessoriesStr)) {
int accessories = Integer.parseInt(accessoriesStr);
String accessoriesBinary = DataUtil.decimalToBinary(accessories);
Map<Integer, Object> list = DataUtil.binaryToValue(accessoriesBinary, 4);
if (null != list && list.size() > 0) {
glassBinaryValue = list.get(0);
hatBinaryValue = list.get(1);
hairBinaryValue = list.get(2);
if (null != glassBinaryValue) {
if ("0".equals(glassBinaryValue.toString())) {
glassBinaryValue = "不确定";
} else if ("1".equals(glassBinaryValue.toString())) {
glassBinaryValue = "不戴眼镜";
}else if ("2".equals(glassBinaryValue.toString())) {
glassBinaryValue = "戴(普通)眼镜";
}else if ("3".equals(glassBinaryValue.toString())) {
glassBinaryValue = "戴太阳镜";
}
}
if (null != hatBinaryValue) {
if ("0".equals(hatBinaryValue.toString())) {
hatBinaryValue = "不确定";
} else if ("1".equals(hatBinaryValue.toString())) {
hatBinaryValue = "不戴帽子";
}else if ("2".equals(hatBinaryValue.toString())) {
hatBinaryValue = "戴帽子";
}
}
if (null != hairBinaryValue) {
if ("0".equals(hairBinaryValue.toString())) {
hairBinaryValue = "不确定";
} else if ("1".equals(hairBinaryValue.toString())) {
hairBinaryValue = "短发";
}else if ("2".equals(hairBinaryValue.toString())) {
hairBinaryValue = "长发";
}
}
}
}
resultMap.put("glass", glassBinaryValue);
resultMap.put("hat", hatBinaryValue);
resultMap.put("hair", hairBinaryValue);
/*Age
年龄段(byte0: bit0~bit7),按照年龄段划分
实际年龄(byte1: bit0~bit7)表示实际年龄数,实际年龄并没有置信度,也没有新旧版本标志*/
Object ageBinaryValue=null;
if (StringUtils.isNotEmpty(ageStr)) {
int age = Integer.parseInt(ageStr);
String ageBinary = DataUtil.decimalToBinary(age);
Map<Integer, Object> list = DataUtil.binaryToValue(ageBinary, 7);
if (null != list && list.size() > 0) {
// Object ageGroupBinaryValue = list.get(0);//年龄段
ageBinaryValue = list.get(1);//年龄
// resultMap.put("ageGroup", ageGroupBinaryValue);
}
}
resultMap.put("age", ageBinaryValue);
return resultMap;
}
}
package com.founder.imageapi.service.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.founder.commonutils.peopleEntity.*;
import com.founder.commonutils.publicEntity.MapRestResult;
import com.founder.commonutils.util.DataUtil;
import com.founder.commonutils.util.HttpClient;
import com.founder.commonutils.util.TokenUtils;
import com.founder.imageapi.mapper.CameraInfoMapper;
import com.founder.imageapi.service.ImageService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Service;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.multipart.MultipartFile;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/*
*
* <p>
* 云天接口 服务实现类
* </p>
*
* @author yangyang
* @since 2021-03-03
*/
@Service
public class ImageServiceImpl implements ImageService {
@Value("${imageUrl}")
private String imageUrl;
@Value("${ImageIdsByUploadImageUrl}")
private String ImageIdsByUploadImageUrl;
@Value("${FaceIdByIdUrl}")
private String FaceIdByIdUrl;
@Value("${FaceBigByIdUrl}")
private String FaceBigByIdUrl;
@Value("${FaceCidUrl}")
private String FaceCidUrl;
@Autowired
private RestTemplate restTemplate;
@Autowired
private CommonService commonService;
@Autowired
private CameraInfoMapper cameraInfoDao;
/**
* 获取照片上所有人像的id以及人像图片
* @param files
* @return
*/
/**
* 根据上传的图片获取人脸检索的结果,总共分为如下四步
* 1、根据上传的图片获取图片id,云天励飞称该id为imageId,每张照片对应一个imageId
* 2、根据图片id(imageId)获取人像id(faceId),人像id可能为多个
* 3、通过人像id获取检索的照片结果
* 4、通过摄像头id获取摄像头经纬度
* 5、通过人脸id获取照片大图信息
* @return
*/
@Override
public MapRestResult getFaceImageByUploadImage(MultipartFile[] files, FaceSearchParam faceSearchParam){
MapRestResult result = null;
Map returnMap=new HashMap();
//前台传送的参数不为空,上传的照片不为空
try {
if (null != faceSearchParam && null != files && files.length > 0) {
List<Map<String,String>> faceIdList=new ArrayList<>();
for (MultipartFile file : files) {//轮询检索照片
//判断文件格式
String fileName=file.getOriginalFilename();
if(fileName.indexOf(".")!=-1){
String gs=fileName.substring(fileName.indexOf("."),fileName.length());
if(!gs.equalsIgnoreCase(".jpg")&&!gs.equalsIgnoreCase(".jpeg")&&!gs.equalsIgnoreCase(".png")&&!gs.equalsIgnoreCase(".bmp")){
result = MapRestResult.build(1001,"支持jpg,jpeg,png,bmp格式的照片",null,null);
return result;
}
}
// 调用file文件二进制上传方式接口
String imageId = getImageIdsByUploadImage(file);
// 根据人像id获取人脸id
List<Map<String,String>> faceIds = getFaceIdsByImageId(imageId);
faceIdList.addAll(faceIds);//获取到每张照片的人像id,放入集合中
}
if (null != faceIdList && faceIdList.size() > 1) {//当有多个人像id时
List<String> faceIds=new ArrayList<>();
for(Map map:faceIdList){
faceIds.add(map.get("id").toString());
}
//将list中的元素拼接为以逗号分隔的字符串,末尾不带逗号
String faceIdStr = StringUtils.join(faceIds, ",");
//faceId的个数需要与dataType的个数一一对应,所以这里也需要拼接
List<String> dataType = new ArrayList<>();
for (int i = 0; i < faceIds.size(); i++) {
dataType.add(faceSearchParam.getDataType());//图片来源类型 默认为100
}
String dataTypeStr = StringUtils.join(dataType, ",");
faceSearchParam.setIds(faceIdStr);
faceSearchParam.setDataType(dataTypeStr);
} else if (null != faceIdList && faceIdList.size() == 1) {//当图片上有只有一个人脸时
faceSearchParam.setFaceId(faceIdList.get(0).get("id"));
}
if (null != faceIdList&faceIdList.size()>0) {//获取数据并翻译
//将实体类对象转换为json字符串
List<FaceSearchResult> faceSearchResultList = getFaceSearchResultByFaceId(JSONObject.toJSONString(faceSearchParam));
//获取摄像头经纬度等信息
float number=faceSearchResultList.size()/100+1;
int flnum= (int) Math.ceil(number);
long startTime=new Date().getTime();
List<FaceSearchResult> resultList=handelCameraInfo(faceSearchResultList,flnum);
long endTime=new Date().getTime();
long timeDiffer=endTime-startTime;
System.out.println("人脸结果***翻译***时长**********"+timeDiffer+"毫秒");
returnMap.put("data",resultList);
int total=0;
if(null!=resultList&&resultList.size()>0){
total=resultList.size();
}
returnMap.put("total",total);
result = MapRestResult.build(200,"成功获取人像检索信息",null,returnMap);
}else{
result = MapRestResult.build(1001,"未检索到人像信息",null,null);
}
}else{
result = MapRestResult.build(1001,"请上传照片",null,null);
}
}catch (Exception e){
result = MapRestResult.build(500,"获取人像检索信息失败",null,null);
e.printStackTrace();
}
return result;
}
/**
* 1、根据上传的图片获取图片id
* @return
*/
public String getImageIdsByUploadImage(MultipartFile file){
String imageId=null;
try {
String token= TokenUtils.getYtgsToken();
HttpHeaders headers = new HttpHeaders();
MediaType type = MediaType.parseMediaType("multipart/form-data");
headers.set("Authorization", "Bearer "+token);
// 设置请求的格式类型
headers.setContentType(type);
MultiValueMap<String, Object> form = new LinkedMultiValueMap<>();
form.add("file",file.getResource());
HttpEntity<MultiValueMap<String, Object>> files = new HttpEntity<>(form, headers);
String resultString = restTemplate.postForEntity(imageUrl+ImageIdsByUploadImageUrl, files, String.class).getBody();
if (StringUtils.isNotEmpty(resultString)) {//如果返回结果不为空
JSONObject result = JSONObject.parseObject(resultString);
if (result.containsKey("data")) {
JSONObject dataObject = result.getJSONObject("data");//获取返回的数据结果
imageId = dataObject.getString("id");
}
}
}catch (Exception e){
e.printStackTrace();
}
return imageId;
}
/**
* 2、根据图片id(imageId)获取人像id(faceId) 4.2.5
* @param imageId
* @return
*/
public List<Map<String,String>> getFaceIdsByImageId(String imageId){
List<Map<String,String>> faceIds=new ArrayList<>();
String token= TokenUtils.getYtgsToken();
Map herders=new HashMap();
//设置请求的header参数
herders.put("Authorization","Bearer "+token);
String url=imageUrl+FaceIdByIdUrl+imageId;
String resultString=HttpClient.doGet(url,herders,null);
if(StringUtils.isNotEmpty(resultString)){//如果返回结果不为空
JSONObject result=JSONObject.parseObject(resultString);
if(result.containsKey("data")){
JSONArray jsonArray=result.getJSONArray("data");
if(null!=jsonArray&&jsonArray.size()>0){
for(Object obj:jsonArray){
JSONObject resultObject=(JSONObject)obj;
String id=resultObject.getString("id");
String faceUrl=resultObject.getString("imageData");
//如果图片不是以 http 开头的情况才会加上
if(!faceUrl.startsWith("http")){
faceUrl="http://26.3.12.56"+faceUrl;
System.out.println("image 的值是:"+faceUrl);
}
String json=resultObject.getString("json");
Map map=new HashMap();
map.put("id",id);// 小图的id
map.put("faceUrl",faceUrl);//小图url 图片地址
map.put("json",json);// 人脸库位置
faceIds.add(map);
}
}
}
}
return faceIds;
}
/**
*3、通过人像id获取检索的照片结果(动态检索)
*/
public List<FaceSearchResult> getFaceSearchResultByFaceId(String jsonObjectStr){
List<FaceSearchResult> faceSearchResults=new ArrayList<>();
String token=TokenUtils.getYtgsToken();
Map herders=new HashMap();
//设置请求的header参数
herders.put("Authorization","Bearer "+token);
herders.put("Content-Type","application/json");
//循环请求
Boolean flag=true;
int page=1;
int pageSize=5000;
int currentPageTotal=0;//当前页返回的结果总数
try {
while (flag) {
String url = "http://26.3.12.56:8083/api/intellif/share/face/search/face/page/" + page + "/pagesize/" + pageSize;
String resultString = HttpClient.doPostJson(url, herders, jsonObjectStr);
if (null != resultString) {//如果返回结果不为空
JSONObject result = JSONObject.parseObject(resultString);
if (result.containsKey("data")) {
JSONArray jsonArray = result.getJSONArray("data");//当前页返回的结果总数
if(null!=jsonArray&&jsonArray.size()>0) {
currentPageTotal = jsonArray.size();
for (Object object : jsonArray) {
FaceSearchResult faceSearchResult = new FaceSearchResult();
JSONObject jsonObject1 = (JSONObject) object;
String camera = jsonObject1.getString("camera");//摄像头id
String file = jsonObject1.getString("file");// 图片地址
String id = jsonObject1.getString("id");//人脸id(faceId)
long time = jsonObject1.getLong("time");//时间戳格式
String score = jsonObject1.getString("score");//相似度
String gender = jsonObject1.getString("gender");//性别
String race = jsonObject1.getString("race");//种族
String accessories = jsonObject1.getString("accessories");//配饰
String age = jsonObject1.getString("age");//年龄
Map<String,Object> map=commonService.accessoriesToValue(gender, race, accessories, age);
faceSearchResult.setId(id);
faceSearchResult.setCameraId(camera);
faceSearchResult.setFile(file);
faceSearchResult.setTime(DataUtil.getDateString(time));
faceSearchResult.setScore(score);
faceSearchResult.setGender(map.get("gender")+"");
faceSearchResult.setRace(map.get("race")+"");
faceSearchResult.setAge(map.get("age")+"");
faceSearchResult.setHat(map.get("hat")+"");
faceSearchResult.setGlass(map.get("glass")+"");
faceSearchResult.setMask(map.get("mask")+"");
faceSearchResult.setHair(map.get("hair")+"");
faceSearchResults.add(faceSearchResult);
}
}
}
}
if (currentPageTotal < pageSize || currentPageTotal > pageSize) {//每页的总数大于当前页返回的总数,退出循环,d当期页的总数大于分页数,说明其接口无分页
flag = false;
} else if (currentPageTotal == pageSize) {//当前页等于总页数,则循环请求
++page;
}
}
}catch (Exception e){
e.printStackTrace();
}
return faceSearchResults;
}
public List<FaceSearchResult> handelCameraInfo(List<FaceSearchResult> list, int limit) throws Exception{
long start = System.currentTimeMillis();
//数据批量分流
List<List<FaceSearchResult>> pllist= DataUtil.pldata(list,limit);
ExecutorService executorService = Executors.newCachedThreadPool();//按需分配线程池
//翻译成功list
List<FaceSearchResult> sucesslist = new ArrayList<>();
//由于数据为空
final int[] errors = {0};
// 全流式处理转换成CompletableFuture[]
CompletableFuture[] cfs = pllist.stream()
.map(carKkInfos -> CompletableFuture.supplyAsync(() -> getCamerainfoAndImageuri(carKkInfos),executorService)
.handle((t, throwable) ->{
if(throwable!=null){
System.out.println("翻译数据失败=============="+throwable);
return t;
}else{
System.out.println("翻译数据成功=============="+t.toString());
sucesslist.addAll(t);
return t;
}
} )
).toArray(CompletableFuture[]::new);
CompletableFuture.allOf(cfs).join();
// System.out.println("翻译入库成功===================="+sucesslist.size());
System.out.println("耗时="+(System.currentTimeMillis()-start));
//排除为空的数据,数据翻译完有为空的数据,待核查 // TODO: 2020/7/14
if(null!=sucesslist&&sucesslist.size()>0){
Iterator<FaceSearchResult> it = sucesslist.iterator();
while(it.hasNext()){
FaceSearchResult faceSearchResult = it.next();
if (null == faceSearchResult || (null != faceSearchResult && org.springframework.util.StringUtils.isEmpty(faceSearchResult.getId()))) {
it.remove();
}
}
}
return sucesslist;
}
/**
* 得到转换以图搜图结果的摄像头信息和大图id
* @param faceSearchResults
* @return
*/
public List<FaceSearchResult> getCamerainfoAndImageuri(List<FaceSearchResult> faceSearchResults){
//翻译入库成功list
List<FaceSearchResult> sucesslist = new ArrayList<>();
faceSearchResults.forEach(p ->{
try{
String imageUri= getImageByFaceId(p.getId());
Map<String,Object> map= commonService.getCameraInfoByIds(p.getCameraId());
p.setImageUrl(imageUri);// 大图url
p.setAddress((String) map.get("address"));
p.setX((String)map.get("x"));
p.setY((String)map.get("y"));
p.setCameraName((String)map.get("cameraName"));
p.setCameraType((String)map.get("cameraType"));
p.setDistrictCode((String)map.get("districtCode"));
p.setDistrictCodeName((String)map.get("districtCodeName"));
p.setAreaCode((String)map.get("areaCode"));
p.setAreaCodeName((String)map.get("areaCodeName"));
sucesslist.add(p);
}catch (Exception e){
e.printStackTrace();
System.out.println("请求失败===================="+p);
}
});
return sucesslist;
}
// 4.2.4 根据小图获取大图,返回人脸小图在大图中的位置
public String getImageByFaceId(String faceId) {
String uri=null;
String token = TokenUtils.getYtgsToken();
Map herders = new HashMap();
//设置请求的header参数
herders.put("Authorization", "Bearer " + token);
String url = imageUrl+FaceBigByIdUrl + faceId;
String resultString = HttpClient.doGet(url, herders, null);
if (StringUtils.isNotEmpty(resultString)) {
JSONObject result = JSONObject.parseObject(resultString);
if (result.containsKey("data")) {
JSONObject dataObject = result.getJSONObject("data");//获取返回的数据结果
if(null!=dataObject){
uri=dataObject.getString("uri");
}
}
}
return uri;
}
/**
* 发送时空回溯任务
* @param cameraFaceTask
* @return
*/
public MapRestResult sendTask(CameraFaceTask cameraFaceTask){
MapRestResult mapRestResult=null;
try {
//获取时空回溯结果
List<String> sourceIds= cameraFaceTask.getSourceIds();
if(null!=sourceIds&&sourceIds.size()>0){
mapRestResult = sendTaskAndGetResult(cameraFaceTask);
if(200==mapRestResult.getStatus()){
List<CameraFaceResult> cameraFaceResults=(List<CameraFaceResult>)mapRestResult.getData();//翻译人员属性
if(null!=cameraFaceResults&&cameraFaceResults.size()>0){
mapRestResult.setData(mapRestResult.getData());
}
}
}else{
mapRestResult=MapRestResult.build(1001,"请选择至少一个摄像头",null,null);
}
}catch (Exception e){
e.printStackTrace();
mapRestResult=MapRestResult.build(500,"获取人像信息失败",null,null);
}
return mapRestResult;
}
/**
*发送时空回溯任务并获取结果
* @param cameraFaceTask
* @return
* @throws Exception
*/
public MapRestResult sendTaskAndGetResult(CameraFaceTask cameraFaceTask) throws Exception{
MapRestResult mapRestResult=null;
List<CameraFaceResult> cameraFaceResults=new ArrayList<>();
String token= TokenUtils.getYtgsToken();
Map herders=new HashMap();
//设置请求的header参数
herders.put("Authorization","Bearer "+token);
herders.put("Content-Type","application/json");
//循环请求
Boolean flag=true;
int page=1;
int pageSize=1000;
int currentPageTotal=0;//当前页返回数据的总行数
try {
while (flag) {
String url = "http://26.3.12.56:8083/api/intellif/share/face/param/cameras/page/"+page+"/pagesize/"+pageSize;
String jsonObjectStr=JSONObject.toJSONString(cameraFaceTask);
String resultString = HttpClient.doPostJson(url, herders, jsonObjectStr);
if (null != resultString) {//如果返回结果不为空
JSONObject result = JSONObject.parseObject(resultString);
String errCode=result.getString("errCode");
if("0".equals(errCode)&&result.containsKey("data")){
JSONArray jsonArray=result.getJSONArray("data");
if(null!=jsonArray&&jsonArray.size()>0){
currentPageTotal=jsonArray.size();//当前页返回数据的总行数
for(Object o:jsonArray){
CameraFaceResult cameraFaceResult=new CameraFaceResult();
JSONObject jsonObject=(JSONObject) o;
String faceId=jsonObject.getString("id");
//String imageUri= getImageByFaceId(faceId);// 大图
String cameraId=jsonObject.getString("sourceId");
long time=jsonObject.getLong("time");
String faceUrl=jsonObject.getString("imageData");
String race=jsonObject.getString("race");
String imageId=jsonObject.getString("fromImageId");
String json=jsonObject.getString("json");
String quality=jsonObject.getString("quality");
String score= jsonObject.getString("score");
String type=jsonObject.getString("type");
cameraFaceResult.setFaceId(faceId);
//cameraFaceResult.setImageUrl(imageUri);// 大图
cameraFaceResult.setCameraId(cameraId);
cameraFaceResult.setTime(DataUtil.getDateString(time));
cameraFaceResult.setFaceUrl(faceUrl);
cameraFaceResult.setRace(race);
cameraFaceResult.setImageId(imageId);
cameraFaceResult.setJson(json);
cameraFaceResult.setQuality(quality);
cameraFaceResult.setScore(score);
cameraFaceResult.setType(type);
Map<String,Object> cameraInfo= commonService.getCameraInfoByIds(cameraId);
// 去库中查询摄像头信息 cameraId
cameraFaceResult.setAddress((String) cameraInfo.get("address"));
cameraFaceResult.setX((String) cameraInfo.get("x"));
cameraFaceResult.setY((String) cameraInfo.get("y"));
cameraFaceResult.setCameraName((String) cameraInfo.get("cameraName"));
cameraFaceResults.add(cameraFaceResult);
}
}
}else{
mapRestResult=MapRestResult.build(1001,result.getString("data"),null,null);
return mapRestResult;
}
}
if(null!=cameraFaceResults&&cameraFaceResults.size()>=10000){
break;
}
if (currentPageTotal < pageSize || currentPageTotal > pageSize) {//每页的总数大于当前页返回的总数,退出循环,d当期页的总数大于分页数,说明其接口无分页
flag = false;
} else if (currentPageTotal == pageSize) {//当前页等于总页数,则循环请求
++page;
}
}
mapRestResult=MapRestResult.build(200,"时空回溯结果返回成功",null,cameraFaceResults);
}catch (Exception e){
e.printStackTrace();
mapRestResult=MapRestResult.build(500,"时空回溯结果返回失败",null,null);
}
return mapRestResult;
}
@Override
public MapRestResult selectRxXx(String qsjd, String qswd, String jsjd, String jswd) {
List<Camera> cameras = cameraInfoDao.getCameraInfoByQsJwd(qsjd,qswd,jsjd,jswd);
return MapRestResult.build(200,"获取人像信息",null,cameras);
}
/**
* 人像比对暂使用静态检索接口
* @param files
* @return
*/
/**
* 根据上传的图片获取人脸检索的结果,总共分为如下四步
* 1、根据上传的图片获取图片id,云天称该id为imageId,每张照片对应一个imageId
* 2、根据图片id(imageId)获取人像id(faceId),人像id可能为多个
* 6、通过人像id获取检索的照片结果(静态检索)
* 4、通过摄像头id获取摄像头经纬度以及基本信息
* 5、通过人脸id获取照片大图信息
* @return
*/
@Override
public MapRestResult getFaceImageByUploadImageJt(MultipartFile files, FaceJtSearchParam faceSearchParam){
MapRestResult result = null;
Map returnMap=new HashMap();
//前台传送的参数不为空,上传的照片不为空
try {
if (null != faceSearchParam && null != files) {
List<Map<String,String>> faceIdList=new ArrayList<>();
//判断文件格式
String fileName=files.getOriginalFilename();
if(fileName.indexOf(".")!=-1){
String gs=fileName.substring(fileName.indexOf("."),fileName.length());
if(!gs.equalsIgnoreCase(".jpg")&&!gs.equalsIgnoreCase(".jpeg")&&!gs.equalsIgnoreCase(".png")&&!gs.equalsIgnoreCase(".bmp")){
result = MapRestResult.build(1001,"支持jpg,jpeg,png,bmp格式的照片",null,null);
return result;
}
}
// 调用file文件二进制上传方式接口
String imageId = getImageIdsByUploadImage(files);
// 根据人像id获取人脸id
List<Map<String,String>> faceIds = getFaceIdsByImageId(imageId);
faceIdList.addAll(faceIds);//获取到每张照片的人像id,放入集合中
if (null != faceIdList && faceIdList.size() > 1) {//当有多个人像id时
List<String> faceIdss=new ArrayList<>();
for(Map map:faceIdList){
faceIdss.add(map.get("id").toString());
}
//将list中的元素拼接为以逗号分隔的字符串,末尾不带逗号
String faceIdStr = StringUtils.join(faceIds, ",");
//faceId的个数需要与dataType的个数一一对应,所以这里也需要拼接
List<String> dataType = new ArrayList<>();
for (int i = 0; i < faceIds.size(); i++) {
dataType.add(faceSearchParam.getDataType());//图片来源类型 默认为100
}
String dataTypeStr = StringUtils.join(dataType, ",");
faceSearchParam.setIds(faceIdStr);
faceSearchParam.setDataType(dataTypeStr);
} else if (null != faceIdList && faceIdList.size() == 1) {//当图片上有只有一个人脸时
faceSearchParam.setFaceId(faceIdList.get(0).get("id"));
}
if (null != faceIdList&faceIdList.size()>0) {//获取数据并翻译
//将实体类对象转换为json字符串
List<FaceJtSearchResult> resultList = getFaceSearchResultByFaceIdJt(JSONObject.toJSONString(faceSearchParam));
returnMap.put("data",resultList);
int total=0;
if(null!=resultList&&resultList.size()>0){
total=resultList.size();
}
returnMap.put("total",total);
result = MapRestResult.build(200,"成功获取人像比对检索信息",null,returnMap);
}else{
result = MapRestResult.build(1001,"未检索到人像比对信息",null,null);
}
}else{
result = MapRestResult.build(1001,"请上传照片",null,null);
}
}catch (Exception e){
result = MapRestResult.build(500,"获取人像比对检索信息失败",null,null);
e.printStackTrace();
}
return result;
}
/**
*6、通过人像id获取检索的照片结果(静态检索)人像比对暂使用这个接口
*/
public List<FaceJtSearchResult> getFaceSearchResultByFaceIdJt(String jsonObjectStr){
List<FaceJtSearchResult> faceSearchResults=new ArrayList<>();
String token=TokenUtils.getYtgsToken();
Map herders=new HashMap();
//设置请求的header参数
herders.put("Authorization","Bearer "+token);
herders.put("Content-Type","application/json");
//循环请求
Boolean flag=true;
int page=1;
int pageSize=5000;
int currentPageTotal=0;//当前页返回的结果总数
try {
while (flag) {
String url = "http://26.3.12.56:8083/api/intellif/share/face/search/face/page/" + page + "/pagesize/" + pageSize;
String resultString = HttpClient.doPostJson(url, herders, jsonObjectStr);
if (null != resultString) {//如果返回结果不为空
JSONObject result = JSONObject.parseObject(resultString);
if (result.containsKey("data")) {
JSONArray jsonArray = result.getJSONArray("data");//当前页返回的结果总数
if(null!=jsonArray&&jsonArray.size()>0) {
currentPageTotal = jsonArray.size();
for (Object object : jsonArray) {
FaceJtSearchResult faceSearchResult = new FaceJtSearchResult();
JSONObject jsonObject1 = (JSONObject) object;
String camera = jsonObject1.getString("camera");//摄像头id
String file = jsonObject1.getString("file");// 图片地址
//如果图片不是以 http 开头的情况才会加上
if(!file.startsWith("http")){
file="http://26.3.12.73"+file;
}
String id = jsonObject1.getString("id");//人脸id(faceId)
String infoId = jsonObject1.getString("infoId");// 在去调用拿身份证接口
String xm = jsonObject1.getString("xm");//人脸姓名
long time = jsonObject1.getLong("time");//时间戳格式
String score = jsonObject1.getString("score");//相似度
String gender = jsonObject1.getString("gender");//性别
String race = jsonObject1.getString("race");//种族
String accessories = jsonObject1.getString("accessories");//配饰
String age = jsonObject1.getString("age");//年龄
Map<String,Object> map=commonService.accessoriesToValue(gender, race, accessories, age);
faceSearchResult.setId(id);
faceSearchResult.setXm(xm);
faceSearchResult.setInfoId(infoId);
faceSearchResult.setCid(getCidByInfoId(infoId));
faceSearchResult.setCameraId(camera);
faceSearchResult.setFile(file);
faceSearchResult.setTime(DataUtil.getDateString(time));
faceSearchResult.setScore(score);
faceSearchResult.setGender(map.get("gender")+"");
faceSearchResult.setRace(map.get("race")+"");
faceSearchResult.setAge(map.get("age")+"");
faceSearchResult.setHat(map.get("hat")+"");
faceSearchResult.setGlass(map.get("glass")+"");
faceSearchResult.setMask(map.get("mask")+"");
faceSearchResult.setHair(map.get("hair")+"");
faceSearchResults.add(faceSearchResult);
}
}
}
}
if (currentPageTotal < pageSize || currentPageTotal > pageSize) {//每页的总数大于当前页返回的总数,退出循环,d当期页的总数大于分页数,说明其接口无分页
flag = false;
} else if (currentPageTotal == pageSize) {//当前页等于总页数,则循环请求
++page;
}
}
}catch (Exception e){
e.printStackTrace();
}
return faceSearchResults;
}
/**
* 通过云天静态检索接口返回的infoid 获取人像身份证信息
* @param infoId
* @return
*/
public String getCidByInfoId(String infoId){
String cid = "";
String token = TokenUtils.getYtgsToken();
Map herders = new HashMap();
//设置请求的header参数
herders.put("Authorization", "Bearer " + token);
String url=FaceCidUrl+infoId;
String resultStr=HttpClient.doGet(url,herders,null);
if(StringUtils.isNotEmpty(resultStr)){
JSONObject jsonObject=JSONObject.parseObject(resultStr);
if(jsonObject.containsKey("data")){
JSONObject dataObject=jsonObject.getJSONObject("data");
cid=dataObject.getString("gmsfhm");
}
}
return cid;
}
}
#配置中心地址
spring.cloud.nacos.config.server-addr=47.92.48.137:8848
spring.cloud.nacos.discovery.server-addr=47.92.48.137:8848
#spring.cloud.nacos.config.server-addr=26.3.13.184:8848
#spring.cloud.nacos.discovery.server-addr=26.3.13.184:8848
spring.profiles.active=dev
# 该配置影响统一配置中心中的dataId
spring.application.name=imageapi
spring.cloud.nacos.config.namespace=dev
#spring.cloud.nacos.config.ext-config[0].data-id=image.properties
# 开启动态刷新配置,否则配置文件修改,工程无法感知
#spring.cloud.nacos.config.ext-config[0].refresh=true
spring.cloud.nacos.config.shared-dataids=imageapipz.properties
spring.cloud.nacos.config.refreshable-dataids=imageapipz.properties
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>serviceapi</artifactId>
<groupId>com.founder</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>peopleapi</artifactId>
<build>
<finalName>peopleapi</finalName>
</build>
</project>
\ No newline at end of file
package com.founder.peopleapi;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication//排除自动配置
@ComponentScan(basePackages = {"com.founder"})
@MapperScan(basePackages={"com.founder.peopleapi.mapper"})
@EnableDiscoveryClient
public class PeopleApiApplication {
@Autowired
private RestTemplateBuilder restTemplateBuilder;
public static void main(String[] args) {
SpringApplication.run(PeopleApiApplication.class, args);
}
@Bean
public RestTemplate restTemplate(){return restTemplateBuilder.build();}
}
package com.founder.peopleapi.controller;
import com.founder.commonutils.publicEntity.MapRestResult;
import com.founder.peopleapi.service.PeopleService;
import com.founder.servicebase.logs.OperLog;
import com.founder.servicebase.logs.OperationType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 技侦接口管理 前端控制器
* </p>
*
* @author liuyaxin
* @since 2021-04-21
*/
@Api(description = "接口管理")
@RestController
@RequestMapping("/people")
public class PeopleContoller {
@Autowired
private PeopleService peopleService;
@ApiOperation(value = "虚实身份信息")
@OperLog(message = "虚实身份信息", operation = OperationType.QUERY)
@PostMapping("/getXsSfXx")
public MapRestResult getXsSfXx(@ApiParam(name = "objectValue", value = "标识号值", required = true)
@RequestParam String objectValue,
@ApiParam(name = "objectType", value = "标识号类型", required = true)
@RequestParam String objectType) {
return peopleService.getXsSfXx(objectType, objectValue);
}
}
package com.founder.peopleapi.controller;
import com.founder.commonutils.peopleEntity.TbStRegionalstaskresult;
import com.founder.commonutils.publicEntity.MapRestResult;
import com.founder.peopleapi.service.PhoneService;
import com.founder.servicebase.logs.OperLog;
import com.founder.servicebase.logs.OperationType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* <p>
* 技侦接口管理 前端控制器
* </p>
*
* @author liuyaxin
* @since 2021-04-21
*/
@Api(description = "接口管理")
@RestController
@RequestMapping("/phone")
public class PhoneController {
@Autowired
private PhoneService phoneService;
@ApiOperation(value = "手机轨迹")
@OperLog(message = "手机轨迹", operation = OperationType.QUERY)
@PostMapping("/getSjGjInfo")
public MapRestResult getSjGjInfo(@ApiParam(name = "objectValue", value = "标识号值", required = true)
@RequestParam String objectValue,
@ApiParam(name = "objectType", value = "标识号类型", required = false)
@RequestParam String objectType,
@ApiParam(name = "kssj", value = "开始时间", required = true)
@RequestParam String kssj,
@ApiParam(name = "jssj", value = "结束时间", required = true)
@RequestParam String jssj) {
return phoneService.getSjGjInfo(objectType, objectValue, kssj, jssj);
}
@ApiOperation(value = "标识号碰撞结果获取")
@PostMapping("/getRegionalsResult")
public MapRestResult getRegionalsResult(@RequestBody TbStRegionalstaskresult tbStRegionalstaskresult) throws Exception {
tbStRegionalstaskresult.setPagePara(Integer.valueOf(tbStRegionalstaskresult.getLimit()));
return phoneService.getRegionalsResult(tbStRegionalstaskresult);
}
@OperLog(message = "范围内基站点位数据接口",operation = OperationType.QUERY)
@ApiOperation(value = "范围内基站点位数据接口")
@PostMapping("/selectJzXx")
public MapRestResult selectJzXx(@ApiParam(name = "qsjd",value = "起始经度")
@RequestParam String qsjd,
@ApiParam(name = "qswd",value = "起始纬度")
@RequestParam String qswd,
@ApiParam(name = "jsjd",value = "结束经度")
@RequestParam String jsjd,
@ApiParam(name = "jswd",value = "结束纬度")
@RequestParam String jswd) {
return phoneService.selectJzXx(qsjd,qswd,jsjd,jswd);
}
}
\ No newline at end of file
package com.founder.peopleapi.controller;
import com.founder.commonutils.peopleEntity.AreaInfo;
import com.founder.commonutils.peopleEntity.Regionals;
import com.founder.commonutils.peopleEntity.RegionalsTask;
import com.founder.commonutils.publicEntity.MapRestResult;
import com.founder.commonutils.util.KeyUtil;
import com.founder.peopleapi.service.PhoneService;
import com.founder.peopleapi.service.RegTaskService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.stream.IntStream;
/**
* <p>
* 技侦接口管理 前端控制器
* </p>
*
* @author liuyaxin
* @since 2021-04-21
*/
@Api(description = "接口管理")
@RestController
@RequestMapping("/phoneRT")
public class RegionalsTaskContoller {
@Autowired
private PhoneService phoneService;
@Autowired
private RegTaskService regTaskService;
@ApiOperation(value = "生成标识号区域碰撞任务接口")
@PostMapping("/sendRegionalsTask")
public MapRestResult sendRegionalsTask(@RequestBody RegionalsTask regionalsTask) {
System.out.println("1");
// 获取区域,开始时间 ,确认时间,保存任务信息,区域
// 生成任务编号
regionalsTask.setTaskId(KeyUtil.getUUIDKey("RW"));
// 状态置为 1 进度置为 任务开始
regionalsTask.setState("1");
regionalsTask.setProgress("BEGIN");
regionalsTask.setTaskType("qypz");// 区域碰撞
//TODO:gai
regionalsTask.setTaskObject("02");// 任务对象01 车 02 人 03 人像 06车车伴随
regTaskService.saveRegTask(regionalsTask);
// 保存区域 集合
List<Regionals> regionalsList=regionalsTask.getRegionals();
if(regionalsList!=null){
IntStream.range(0, regionalsList.size()).forEach(i -> {
Regionals regionals=regionalsList.get(i);
regionals.setRegionalId(KeyUtil.getUUIDKey("QY"));
regionals.setTaskId(regionalsTask.getTaskId());
regTaskService.saveRegional(regionals);
});
}
return MapRestResult.build(200,"发送任务成功","1",regionalsTask.getTaskId());
}
@ApiOperation(value = "标识号区域碰撞接口")
@PostMapping("/phoneRegionalCollied")
public MapRestResult sendPhoneQyPzRegionalsTask(@RequestBody List<AreaInfo> areaInfos) {
try {
MapRestResult result = phoneService.MoreAreaInfoThread(areaInfos);
} catch (Exception e) {
return MapRestResult.build(201,"标识号区域碰撞接口失败","1","error");
}
return MapRestResult.build(200,"标识号碰撞接口","1","success");
}
}
package com.founder.peopleapi.mapper;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Component;
@Mapper
@Component
public interface PeopleInfoMapper {
}
package com.founder.peopleapi.mapper;
import com.founder.commonutils.peopleEntity.JzXxResult;
import com.founder.commonutils.peopleEntity.RegionalsDetail;
import com.founder.commonutils.peopleEntity.RegionalsPerson;
import com.founder.commonutils.peopleEntity.TbStRegionalstaskresult;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;
import java.util.List;
@Mapper
@Component
public interface PhoneInfoMapper {
List<TbStRegionalstaskresult> getAllResult(TbStRegionalstaskresult tbStRegionalstaskresult);
List<TbStRegionalstaskresult> getAllResultall(TbStRegionalstaskresult tbStRegionalstaskresult);
Integer getAllResultcount(TbStRegionalstaskresult tbStRegionalstaskresult);
List<RegionalsDetail> getAllRegionalsDetail(@Param("reultId") String reultId);
RegionalsPerson getAllRegionalsPerson(@Param("sfzhm") String sfzhm);
List<JzXxResult> getJzInfoByQsJwd(@Param("qsjd")String qsjd,@Param("qswd") String qswd,@Param("jsjd") String jsjd,@Param("jswd") String jswd);
}
package com.founder.peopleapi.mapper;
import com.founder.commonutils.peopleEntity.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;
import java.util.List;
@Mapper
@Component
public interface RegInfoMapper {
void saveRegTask(RegionalsTask regionalsTask);
void saveRegional(Regionals regionals);
boolean saveResultPz(SjGjInfo carKkInfo);
Integer selecteRegionalsPerson(@Param("sfzhm") String sfzhm);
void saveRegionalsDetail(RegionalsDetail regionalsDetail);
void saveRegionalsPerson(RegionalsPerson regionalsPerson);
void updateRegionalsResult(RegionalsResult regionalsResult);
void updateRegionalsTask(RegionalsTask regionalsTask);
}
<?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="com.founder.peopleapi.mapper.PeopleInfoMapper">
</mapper>
<?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="com.founder.peopleapi.mapper.PhoneInfoMapper">
<resultMap id="RegionalsDetail" type="com.founder.commonutils.peopleEntity.RegionalsDetail">
<result column="xxzjbh" property="xxzjbh" jdbcType="VARCHAR"/>
<result column="sfzhm" property="sfzhm" jdbcType="VARCHAR"/>
<result column="sf_Check" property="sfCheck" jdbcType="VARCHAR"/>
<result column="result_Id" property="resultId" jdbcType="VARCHAR"/>
<result column="object_Type" property="objectType" jdbcType="VARCHAR"/>
<result column="object_Type_Name" property="objectTypeName" jdbcType="VARCHAR"/>
<result column="object_Value" property="objectValue" jdbcType="VARCHAR"/>
</resultMap>
<!--任务 查询结果表-->
<select id="getAllResult" parameterType="com.founder.commonutils.peopleEntity.TbStRegionalstaskresult"
resultType="com.founder.commonutils.peopleEntity.TbStRegionalstaskresult">
select t2.* from(
select t1.*,rownum as rn from
(
SELECT
xxzjbh,
task_id,
object_type,
object_type_name,
object_value,
region,
regionList,
apetype,
apetypeMc,
kkUrlPic,
x,
y,
to_char(time,'YYYY-MM-DD HH24:mi:ss') as timeGet
FROM TB_ST_REGIONALS_RESULT
where 1=1
<if test="task_id != null and task_id != ''">and task_id = #{ task_id , jdbcType=VARCHAR }</if>
<if test="sabz!= null and sabz != ''">and sabz = #{ sabz , jdbcType=VARCHAR }</if>
<if test="object_value != null and object_value != ''">
and object_value = #{ object_value , jdbcType=VARCHAR }
</if>
<if test="apetype != null and apetype != ''">
and apetype = #{ apetype , jdbcType=VARCHAR }
</if>
<if test="region != null and region != ''">
and region = #{ region , jdbcType=VARCHAR }
</if>
) t1
<where>
rownum<![CDATA[ <= ]]> #{ end , jdbcType=VARCHAR }
</where>
)t2
<where>
rn<![CDATA[ >= ]]> #{ begin, jdbcType=VARCHAR }
</where>
</select>
<!--任务 查询结果表-->
<select id="getAllResultall" parameterType="com.founder.commonutils.peopleEntity.TbStRegionalstaskresult"
resultType="com.founder.commonutils.peopleEntity.TbStRegionalstaskresult">
SELECT
xxzjbh,
task_id,
object_type,
object_type_name,
object_value,
region,
regionList,
apetype,
apetypeMc,
kkUrlPic,
x,
y,
to_char(time,'YYYY-MM-DD HH24:mi:ss') as timeGet
FROM TB_ST_REGIONALS_RESULT
where 1=1
<if test="task_id != null and task_id != ''">and task_id = #{ task_id , jdbcType=VARCHAR }</if>
</select>
<select id="getAllResultcount" parameterType="com.founder.commonutils.peopleEntity.TbStRegionalstaskresult"
resultType="java.lang.Integer">
SELECT
count(*)
FROM TB_ST_REGIONALS_RESULT
where 1=1
<if test="task_id != null and task_id != ''">and task_id = #{ task_id , jdbcType=VARCHAR }</if>
<if test="sabz!= null and sabz != ''">and sabz = #{ sabz , jdbcType=VARCHAR }</if>
<if test="object_value != null and object_value != ''">
and object_value = #{ object_value , jdbcType=VARCHAR }
</if>
<if test="apetype != null and apetype != ''">and apetype = #{ apetype , jdbcType=VARCHAR }</if>
<if test="region != null and region != ''">and region = #{ region , jdbcType=VARCHAR }</if>
</select>
<!--任务 查询详情表-->
<select id="getAllRegionalsDetail" parameterType="String"
resultMap="RegionalsDetail">
SELECT
*
FROM TB_ST_REGIONALS_DETAIL
where 1=1
<if test="reultId != null and reultId != ''">and result_id = #{ reultId , jdbcType=VARCHAR }</if>
</select>
<!--任务 查询人员表-->
<select id="getAllRegionalsPerson" parameterType="String"
resultType="com.founder.commonutils.peopleEntity.RegionalsPerson">
select * from TB_ST_REGIONALS_PERSON
where 1=1
<if test="sfzhm != null and sfzhm != ''">
and SFZHM = #{ sfzhm , jdbcType=VARCHAR }
</if>
</select>
<!--根据起始经纬度获取人像点位数据-->
<select id="getJzInfoByQsJwd" parameterType="java.lang.String" resultType="com.founder.commonutils.peopleEntity.JzXxResult">
select
BSID as deviceCode,
XZQH_DZ as deviceAddress,
XCOORD as x,
YCOORD as y
from tb_my_jzxx t where 1=1
<if test="qsjd!=null and qsjd!='' and qsjd!=null and qsjd!='' and qswd!=null and qswd!='' and jswd!=null and jswd!=''">
AND XCOORD<![CDATA[>=]]>#{qsjd,jdbcType=VARCHAR} AND XCOORD<![CDATA[<=]]>#{jsjd,jdbcType=VARCHAR}
AND YCOORD<![CDATA[>=]]>#{qswd,jdbcType=VARCHAR} AND YCOORD<![CDATA[<=]]>#{jswd,jdbcType=VARCHAR}
</if>
</select>
</mapper>
\ No newline at end of file
<?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="com.founder.peopleapi.mapper.RegInfoMapper">
<!--发送任务 保存-->
<insert id="saveRegTask" parameterType="com.founder.commonutils.peopleEntity.RegionalsTask">
INSERT INTO TB_ST_REGIONALS_TASK (
task_id,
task_name,
progress,
state,
task_case_id,
djsj,
fsr_jh,
fsr_identity,
task_type,
task_object,
fsr_xm
)
VALUES(
#{taskId, jdbcType=VARCHAR}
,#{taskName, jdbcType=VARCHAR}
,#{progress, jdbcType=VARCHAR}
,#{state, jdbcType=VARCHAR}
,#{taskCaseId, jdbcType=VARCHAR}
,sysdate
,#{fsrJh, jdbcType=VARCHAR}
,#{fsrIdentity, jdbcType=VARCHAR}
,#{taskType, jdbcType=VARCHAR}
,#{taskObject, jdbcType=VARCHAR}
,#{fsrXm, jdbcType=VARCHAR}
)
</insert>
<!--任务发送 区域保存-->
<insert id="saveRegional" parameterType="com.founder.commonutils.peopleEntity.Regionals">
INSERT INTO TB_ST_REGIONALS (
task_id,
regional_id,
start_time,
end_time,
geometry,
name,
source,
djsj,
type,
radius
)
VALUES(
#{taskId, jdbcType=VARCHAR}
,#{regionalId, jdbcType=VARCHAR}
,#{startTime , jdbcType=TIMESTAMP }
,#{endTime , jdbcType=TIMESTAMP }
,#{geometry, jdbcType=VARCHAR}
,#{name, jdbcType=VARCHAR}
,#{source, jdbcType=VARCHAR}
,sysdate
,#{type, jdbcType=VARCHAR}
,#{radius, jdbcType=VARCHAR}
)
</insert>
<!--任务 查询人员表-->
<select id="selecteRegionalsPerson" parameterType="String" resultType="java.lang.Integer">
SELECT
count(*)
FROM TB_ST_REGIONALS_PERSON
where 1=1
<if test="sfzhm != null and sfzhm != ''">and sfzhm = #{ sfzhm , jdbcType=VARCHAR }</if>
</select>
<!--任务 详情保存-->
<insert id="saveRegionalsDetail" parameterType="com.founder.commonutils.peopleEntity.RegionalsDetail">
INSERT INTO TB_ST_REGIONALS_DETAIL (
XXZJBH
,RESULT_ID
,OBJECT_TYPE
,OBJECT_TYPE_NAME
,OBJECT_VALUE
,SFZHM
,DJSJ
)
VALUES(
#{ xxzjbh , jdbcType=VARCHAR }
,#{ resultId , jdbcType=VARCHAR }
,#{ objectType , jdbcType=VARCHAR }
,#{ objectTypeName , jdbcType=VARCHAR }
,#{ objectValue , jdbcType=VARCHAR }
,#{ sfzhm , jdbcType=VARCHAR }
,sysdate
)
</insert>
<!--任务人员保存-->
<insert id="saveRegionalsPerson" parameterType="com.founder.commonutils.peopleEntity.RegionalsPerson">
INSERT INTO TB_ST_REGIONALS_PERSON (
XXZJBH
,MZ
,XM
,IMG
,XB
,SFZHM
,CSDZMC
,XZZDZMC
,PHONE
,SF_FZXYR
,SF_CHECK
,HJDQHDZ
,CSRQ
)
VALUES(
#{ xxzjbh }
,#{ mz , jdbcType=VARCHAR }
,#{ xm , jdbcType=VARCHAR }
,#{ img , jdbcType=BLOB }
,#{ xb , jdbcType=VARCHAR }
,#{ sfzhm , jdbcType=VARCHAR }
,#{ csdzmc , jdbcType=VARCHAR }
,#{ xzzdzmc , jdbcType=VARCHAR }
,#{ phone , jdbcType=VARCHAR }
,#{ sfFzxyr , jdbcType=VARCHAR }
,#{ sfCheck , jdbcType=VARCHAR }
,#{ hjdqhdz , jdbcType=VARCHAR }
,#{ csrq , jdbcType=VARCHAR }
)
</insert>
<!--任务 修改任务表-->
<update id="updateRegionalsResult" parameterType="com.founder.commonutils.peopleEntity.RegionalsResult">
UPDATE TB_ST_REGIONALS_RESULT
<!--使用trim可以删掉最后字段的逗号,set已被包含在trim中,所以不用重复写了-->
<trim prefix="set" suffixOverrides=",">
<if test="sfCheck != null and sfCheck != ''">SF_CHECK = #{ sfCheck , jdbcType=VARCHAR },</if>
<if test="sabz != null and sabz != ''">SABZ = #{ sabz , jdbcType=VARCHAR },</if>
</trim>
where 1=1
<if test="xxzjbh != null and xxzjbh != ''">and XXZJBH = #{ xxzjbh , jdbcType=VARCHAR }</if>
</update>
<!--chent 任务 修改任务表-->
<update id="updateRegionalsTask" parameterType="com.founder.commonutils.peopleEntity.RegionalsTask">
UPDATE TB_ST_REGIONALS_TASK
<!--使用trim可以删掉最后字段的逗号,set已被包含在trim中,所以不用重复写了-->
<trim prefix="set" suffixOverrides=",">
<if test="progress != null and progress != ''">PROGRESS = #{ progress , jdbcType=VARCHAR },</if>
<if test="state != null and state != ''">STATE = #{ state , jdbcType=VARCHAR },</if>
</trim>
where 1=1
<if test="taskId != null and taskId != ''">and TASK_ID = #{ taskId , jdbcType=VARCHAR }</if>
</update>
<!--标识号碰撞结果数据保存-->
<insert id="saveResultPz" parameterType="com.founder.commonutils.peopleEntity.SjGjInfo">
INSERT INTO TB_ST_REGIONALS_RESULT (
XXZJBH,
TASK_ID,
OBJECT_TYPE,
OBJECT_TYPE_NAME,
OBJECT_VALUE,
REGION,
count,
DJSJ,
time,
X,
Y
)
VALUES(
#{ xxzjbh , jdbcType=VARCHAR }
,#{ taskId , jdbcType=VARCHAR }
,#{ objectType , jdbcType=VARCHAR }
,#{ objectTypeName , jdbcType=VARCHAR }
,#{ objectValue , jdbcType=VARCHAR }
,#{ region , jdbcType=VARCHAR }
,#{ count , jdbcType=VARCHAR }
,sysdate
,TO_DATE(#{ time , jdbcType=VARCHAR },'yyyy-MM-dd hh24:mi:ss')
,#{ x , jdbcType=VARCHAR }
,#{ y , jdbcType=VARCHAR }
)
</insert>
</mapper>
package com.founder.peopleapi.service;
import com.founder.commonutils.peopleEntity.PeopleInfo;
import com.founder.commonutils.publicEntity.MapRestResult;
import java.util.List;
public interface PeopleService {
MapRestResult getXsSfXx(String objectType,String objectValue);
PeopleInfo xsxxByZjhm(String objectType, String objectValue);
List getCarInfo(String objectType, String objectValue);
List getSjSmInfo(String objectType, String objectValue);
List getXnXxInfo(String objectType, String objectValue);
}
package com.founder.peopleapi.service;
import com.founder.commonutils.peopleEntity.AreaInfo;
import com.founder.commonutils.publicEntity.MapRestResult;
import java.util.List;
public interface PhoneService {
MapRestResult getSjGjInfo(String objectType, String objectValue, String kssj, String jssj);
MapRestResult MoreAreaInfoThread(List<AreaInfo> areaInfos) throws Exception;
MapRestResult getRegionalsResult(com.founder.commonutils.peopleEntity.TbStRegionalstaskresult tbStRegionalstaskresult) throws Exception;
MapRestResult selectJzXx(String qsjd,String qswd,String jsjd,String jswd);
}
package com.founder.peopleapi.service;
import com.founder.commonutils.peopleEntity.Regionals;
import com.founder.commonutils.peopleEntity.RegionalsCarCarResult;
import com.founder.commonutils.peopleEntity.RegionalsTask;
import com.founder.commonutils.publicEntity.MapRestResult;
import org.apache.ibatis.annotations.Param;
import org.springframework.context.annotation.Bean;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author liuyaxin
* @since 2021-04-10
*/
public interface RegTaskService {
MapRestResult saveRegTask(RegionalsTask regionalsTask);
MapRestResult saveRegional(Regionals regionals);
}
package com.founder.peopleapi.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.founder.commonutils.peopleEntity.PeopleInfo;
import com.founder.commonutils.publicEntity.MapRestResult;
import com.founder.peopleapi.service.PeopleService;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
@Service
public class PeopleServiceImpl implements PeopleService {
@Autowired
private RestTemplate restTemplate;
/*objectType 01:车牌号 03:证件号 04:手机号 05:IMSI 06:QQ 07:微信 08:IMEI*/
@Override
public MapRestResult getXsSfXx(String objectType, String objectValue) {
List resultList = new ArrayList();
if ("01".equals(objectType)) {
List<PeopleInfo> czList = getCarInfo(objectType, objectValue);
for (PeopleInfo peopleInfo : czList) {
if ("03".equals(peopleInfo.getObjectType())) {
PeopleInfo peopleInfo1 = xsxxByZjhm(peopleInfo.getObjectType(), peopleInfo.getObjectValue());
resultList.add(peopleInfo1);
}
}
} else if ("03".equals(objectType)) {
PeopleInfo peopleInfo = xsxxByZjhm(objectType, objectValue);
resultList.add(peopleInfo);
} else if ("04".equals(objectType)) {
List<PeopleInfo> czList = getSjSmInfo(objectType, objectValue);
for (PeopleInfo peopleInfo : czList) {
if ("03".equals(peopleInfo.getObjectType())) {
PeopleInfo peopleInfo1 = xsxxByZjhm(peopleInfo.getObjectType(), peopleInfo.getObjectValue());
resultList.add(peopleInfo1);
}
}
} else {
return MapRestResult.error("无法查询此标识号类型");
}
return MapRestResult.build(200,"成功获取虚实身份信息!",resultList);
}
/*通过证件号获取各类信息*/
@Override
public PeopleInfo xsxxByZjhm(String objectType, String objectValue) {
PeopleInfo peopleInfo = new PeopleInfo();
peopleInfo.setObjectType(objectType);
peopleInfo.setObjectValue(objectValue);
List<PeopleInfo> carInfo = getCarInfo(objectType, objectValue);
List xssfxxList = new ArrayList();
List<PeopleInfo> jzInfo = getSjSmInfo(objectType, objectValue);
for (PeopleInfo peopleInfo1 : jzInfo) {
if ("04".equals(peopleInfo1.getObjectType())) {
List list = getXnXxInfo(peopleInfo1.getObjectType(), peopleInfo1.getObjectValue());
peopleInfo1.setChildren(list);
xssfxxList.add(peopleInfo1);
}
}
List childrenList = new ArrayList();
childrenList.addAll(jzInfo);
childrenList.addAll(carInfo);
peopleInfo.setChildren(childrenList);
return peopleInfo;
}
/*标识号类型bshlx:01车辆;02身份证号;03手机号;04IMEI;05IMSI;06QQ;07微信*/
/*获取车主信息*/
@Override
public List getCarInfo(String objectType, String objectValue) {
List childrenList = new ArrayList();
HttpEntity<JSONObject> jsonObject = restTemplate.getForEntity("http://26.3.13.120:8501/common/getQgCarXxByHm?hphm=" + objectValue, JSONObject.class);
if (StringUtils.isNotEmpty(String.valueOf(jsonObject.getBody()))) {
if (jsonObject.getBody().containsKey("data")) {
LinkedHashMap resultJson = (LinkedHashMap) jsonObject.getBody().get("data");//获取返回的数据结果
System.out.println(resultJson.toString());
List<LinkedHashMap> array = (List<LinkedHashMap>) resultJson.get("rows");
for (int i = 0; i < array.size(); i++) {
LinkedHashMap object = array.get(i);
String zjhm = (String) object.get("sfzh");
String cphm = (String) object.get("hphm");
PeopleInfo peopleInfo = new PeopleInfo();
if ("01".equals(objectType)) {
peopleInfo.setObjectType("03");
peopleInfo.setObjectValue(zjhm);
childrenList.add(peopleInfo);
} else if ("03".equals(objectType)) {
peopleInfo.setObjectType("01");
peopleInfo.setObjectValue(cphm);
childrenList.add(peopleInfo);
}
}
}
}
return childrenList;
}
/*手机实名*/
@Override
public List getSjSmInfo(String objectType, String objectValue) {
List childrenList = new ArrayList();
String url = null;
if ("03".equals(objectType)) {
url = "http://26.3.13.120:8501/nmsj/getMySfSjGl?zjhm=" + objectValue;
} else if ("04".equals(objectType)) {
url = "http://26.3.13.120:8501/nmsj/getMySfSjGl?sjhm=" + objectValue;
}
HttpEntity<JSONObject> jsonObject = restTemplate.getForEntity(url, JSONObject.class);
if (StringUtils.isNotEmpty(String.valueOf(jsonObject.getBody()))) {
if (jsonObject.getBody().containsKey("data")) {
LinkedHashMap resultJson = (LinkedHashMap) jsonObject.getBody().get("data");//获取返回的数据结果
List<LinkedHashMap> array = (List<LinkedHashMap>) resultJson.get("rows");
System.out.println(array.toString());
for (int i = 0; i < array.size(); i++) {
LinkedHashMap object = array.get(i);
String zjhm = (String) object.get("zjhm");
String bshxx = (String) object.get("bshxx");
String bshlx = (String) object.get("bshlx");
PeopleInfo peopleInfo = new PeopleInfo();
if ("03".equals(objectType)) {/*该03为证件号码*/
if ("03".equals(bshlx)) {/*此03为手机号码*/
peopleInfo.setObjectType("04");
peopleInfo.setObjectValue(bshxx);
childrenList.add(peopleInfo);
}
} else if ("04".equals(objectType)) {/*此04为手机号码*/
peopleInfo.setObjectType("03");
peopleInfo.setObjectValue(zjhm);
childrenList.add(peopleInfo);
}
}
}
}
return childrenList;
}
/*手机虚拟信息*/
@Override
public List getXnXxInfo(String objectType, String objectValue) {
/*手机信息目录*/
List childrenList = new ArrayList();
HttpEntity<JSONObject> jsonObject = restTemplate.getForEntity("http://26.3.13.120:8501/nmsj/getMyWxQqZcXxFw?xnhm=" + objectValue, JSONObject.class);
if (StringUtils.isNotEmpty(String.valueOf(jsonObject.getBody()))) {
if (jsonObject.getBody().containsKey("data")) {
LinkedHashMap resultJson = (LinkedHashMap) jsonObject.getBody().get("data");//获取返回的数据结果
List<LinkedHashMap> array = (List<LinkedHashMap>) resultJson.get("rows");
for (int i = 0; i < array.size(); i++) {
LinkedHashMap object = array.get(i);
String bshxx = (String) object.get("bshxx");
String bshlx = (String) object.get("bshlx");
PeopleInfo peopleInfo1 = new PeopleInfo();
if ("06".equals(bshlx)) {
peopleInfo1.setObjectType("06");
peopleInfo1.setObjectValue(bshxx);
childrenList.add(peopleInfo1);
} else if ("07".equals(bshlx)) {
peopleInfo1.setObjectType("07");
peopleInfo1.setObjectValue(bshxx);
childrenList.add(peopleInfo1);
}
}
}
}
HttpEntity<JSONObject> jsonObject2 = restTemplate.getForEntity("http://26.3.13.120:8501/nmsj/getMySjSmBsh?sjhm=" + objectValue, JSONObject.class);
if (StringUtils.isNotEmpty(String.valueOf(jsonObject2.getBody()))) {
if (jsonObject2.getBody().containsKey("data")) {
LinkedHashMap resultJson = (LinkedHashMap) jsonObject2.getBody().get("data");//获取返回的数据结果
List<LinkedHashMap> array = (List<LinkedHashMap>) resultJson.get("rows");
System.out.println(array);
for (int i = 0; i < array.size(); i++) {
LinkedHashMap object = array.get(i);
String bshxx = (String) object.get("bshxx");
String bshlx = (String) object.get("bshlx");
PeopleInfo peopleInfo1 = new PeopleInfo();
if ("04".equals(bshlx)) {
peopleInfo1.setObjectType("08");
peopleInfo1.setObjectValue(bshxx);
childrenList.add(peopleInfo1);
} else if ("05".equals(bshlx)) {
peopleInfo1.setObjectType("05");
peopleInfo1.setObjectValue(bshxx);
childrenList.add(peopleInfo1);
}
}
}
}
return childrenList;
}
}
package com.founder.peopleapi.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.founder.commonutils.peopleEntity.*;
import com.founder.commonutils.publicEntity.MapRestResult;
import com.founder.commonutils.util.DataUtil;
import com.founder.commonutils.util.KeyUtil;
import com.founder.peopleapi.mapper.PhoneInfoMapper;
import com.founder.peopleapi.mapper.RegInfoMapper;
import com.founder.peopleapi.service.PhoneService;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import sun.misc.BASE64Encoder;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.concurrent.*;
import java.util.stream.Collectors;
@Service
public class PhoneServiceImpl implements PhoneService {
@Autowired
private RestTemplate restTemplate;
@Autowired
private RegInfoMapper regInfoMapper;
@Autowired
private PhoneInfoMapper phoneInfoMapper;
@Override
public MapRestResult getSjGjInfo(String objectType, String objectValue, String kssj, String jssj) {
int total = 0;
String[] array = objectValue.split(",");
List dataList = new ArrayList();
if (array != null && array.length > 0) {
//翻译并封装成实体返回---使用200并发
ExecutorService executorService = Executors.newCachedThreadPool();
//信号量,此处用于控制并发的线程数
final Semaphore semaphore = new Semaphore(50);
//闭锁,可实现计数器递减
final CountDownLatch countDownLatch = new CountDownLatch(array.length);
for (int i = 0; i < array.length; i++) {
String val = array[i];
executorService.execute(() -> {
try {
//执行此方法用于获取执行许可,当总计未释放的许可数不超过200时,
//允许通行,否则线程阻塞等待,直到获取到许可。
semaphore.acquire();
Map resMap = getSjgjXx(objectType, val, kssj, jssj);
List childrenList = (List) resMap.get("rows");
Map resulMap = new HashMap();
resulMap.put("phone", val);
resulMap.put("dataList", childrenList);
resulMap.put("count", childrenList.size());
dataList.add(resulMap);
//释放许可
semaphore.release();
} catch (Exception e) {
e.printStackTrace();
}
//闭锁减一
countDownLatch.countDown();
});
}
try {
countDownLatch.await();//线程阻塞,直到闭锁值为0时,阻塞才释放,继续往下执行
executorService.shutdown();
} catch (Exception e) {
e.printStackTrace();
}
}
Map dataMap = new HashMap();
dataMap.put("data", dataList);
return MapRestResult.build(200, "成功获取手机轨迹信息!", dataMap);
}
public Map getSjgjXx(String objectType, String objectValue, String kssj, String jssj) {
Map resultMap = new HashMap();
List childrenList = new ArrayList();
String cxsj = kssj + " - " + jssj;
String url = "http://26.3.13.120:8501/nmsj/getMySjGjXx?sjhm=" + objectValue + "&cxSj=" + cxsj + "&page=1&limit=999999";
HttpEntity<JSONObject> jsonObject = restTemplate.getForEntity(url, JSONObject.class);
if (StringUtils.isNotEmpty(String.valueOf(jsonObject.getBody()))) {
if (jsonObject.getBody().containsKey("data")) {
LinkedHashMap resultJson = (LinkedHashMap) jsonObject.getBody().get("data");//获取返回的数据结果
List<LinkedHashMap> array = (List<LinkedHashMap>) resultJson.get("rows");
int total = (int) resultJson.get("total");
resultMap.put("total", total);
System.out.println(array.toString());
for (int i = 0; i < array.size(); i++) {
LinkedHashMap object = array.get(i);
SjGjInfo sjGjInfo = new SjGjInfo();
String jzmc = (String) object.get("jzmc");
String jzbh = (String) object.get("jzbh");
String jd = (String) object.get("jd");
String wd = (String) object.get("wd");
String fxsj = (String) object.get("fxsj");
String sjhm = (String) object.get("sjhm");
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime lacDt = LocalDateTime.parse(fxsj, dtf);
long l = LocalDateTime.from(lacDt).atZone(ZoneId.systemDefault()).toInstant().getEpochSecond();
sjGjInfo.setObjectValue(sjhm);
sjGjInfo.setAddress(jzmc);
sjGjInfo.setStationName(jzmc);
sjGjInfo.setBase(jzbh);
sjGjInfo.setX(jd);
sjGjInfo.setY(wd);
sjGjInfo.setOldX(jd);
sjGjInfo.setOldY(wd);
sjGjInfo.setTimestamp(String.valueOf(l));
childrenList.add(sjGjInfo);
}
}
}
resultMap.put("rows", childrenList);
return resultMap;
}
@Override
//(2)标识号区域碰撞---------------------------------------------------------------------
public MapRestResult MoreAreaInfoThread(List<AreaInfo> areaInfos) throws Exception {
long start = System.currentTimeMillis();
//更新任务状态为RUN
RegionalsTask regionalsTask = new RegionalsTask();
final String[] taskid = {""};
areaInfos.stream().forEach(p -> {
taskid[0] = p.getTaskId();
});
regionalsTask.setState("2");
regionalsTask.setProgress("RUN");
regionalsTask.setTaskId(taskid[0]);
regInfoMapper.updateRegionalsTask(regionalsTask);
//卡口编号处理 START------------------------------------------------------------------------------
//code分割
//数据填充
List<PhoneReceiving> phoneReceivinglist = new ArrayList<>();
//取出每一个基站号生成各个PhoneReceiving
areaInfos.stream().forEach(p -> {
String[] code = new String[0];
if (p.getCodes().contains(",")) {
code = p.getCodes().split(",");
} else {
code[0] = p.getCodes();
}
Arrays.stream(code).forEach(t -> {
PhoneReceiving phoneReceiving = new PhoneReceiving();
phoneReceiving.setKssj(p.getStartTime());
phoneReceiving.setJssj(p.getEndTime());
//todo:gai成基站标号
phoneReceiving.setObjectValue(t);//基站编号
phoneReceiving.setObjectType("03");//02 代表卡口编号 03基站
phoneReceiving.setTaskId(p.getTaskId());
phoneReceiving.setRegion(p.getRegion());
phoneReceivinglist.add(phoneReceiving);
});
});
//基站编号处理 END------------------------------------------------------------------------------
//全局参数 START------------------------------------------------------------------------------
//所有数据去重集
List<SjGjInfo> allRegionsucesslist = new ArrayList<>();
//根据ObjectValue去重
List<SjGjInfo> alllist = new ArrayList<>();
//map(区域名称,卡口数据)
Map<String, List<SjGjInfo>> regionResult = new LinkedHashMap<>();
//全局参数 END------------------------------------------------------------------------------
//区域+卡口数据 START------------------------------------------------------------------------------
//数据分类统计(按区域进行分组)
Map<String, List<PhoneReceiving>> collect = phoneReceivinglist.stream().collect(Collectors.groupingBy(PhoneReceiving::getRegion));
collect.entrySet().forEach(t -> {
System.out.println("==区域名称==" + t.getKey() + "==数据==" + t.getValue().toString());
//数据获取
try {
//map(区域名称,卡口数据)
//1、各个区域的卡口数据去重处理
//各区域数据集
List<SjGjInfo> sucesslistnotnull = new ArrayList<>();
// 2.1 拿回回溯结果
sucesslistnotnull.addAll(resultAnalysis(t.getValue()));
regionResult.put(t.getKey(), sucesslistnotnull);
} catch (Exception e) {
e.printStackTrace();
}
});
System.out.println("分组数据总量==========" + regionResult.size());
//区域+卡口数据 START------------------------------------------------------------------------------
//所有区域数据合并去重 START------------------------------------------------------------------------------
//所有区域数据去重
regionResult.entrySet().forEach(p -> {
allRegionsucesslist.addAll(p.getValue());
});
//根据ObjectValue去重
alllist = allRegionsucesslist.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(()
-> new TreeSet<>(Comparator.comparing(SjGjInfo::getObjectValue))), ArrayList::new)
);
System.out.println("数据总量==========" + alllist.size());
//所有区域数据合并去重 START------------------------------------------------------------------------------
//全数据---到各区域数据匹配(打区域标签) START------------------------------------------------------------------------------
List<String> region = new ArrayList<>();
//数据总量
alllist.stream().forEach(p -> {
//map 匹配
//区域集
regionResult.entrySet().forEach(n -> {
boolean boole = n.getValue().stream().anyMatch(m -> m.getObjectValue().equals(p.getObjectValue()));
if (boole) {
region.add(n.getKey());
}
});
p.setRegion(region.toString());
region.clear();
});
List<SjGjInfo> alllistnew = new ArrayList<>();
alllist.stream().forEach(k -> {
boolean boole = k.getRegion().contains(",");
if (boole) {
alllistnew.add(k);
}
});
System.out.println("最终数据==========" + alllistnew.size());
//全数据---到各区域数据匹配(打区域标签) END------------------------------------------------------------------------------
// 2.2数据翻译+更新任务状态START------------------------------------------------------------------------------
MapRestResult mapRestResult = oneAreaInfoThread(alllistnew);
//更新任务状态为END
regionalsTask.setState("3");
regionalsTask.setProgress("END");
regionalsTask.setTaskId(taskid[0]);
regInfoMapper.updateRegionalsTask(regionalsTask);
//数据翻译+更新任务状态END------------------------------------------------------------------------------
return mapRestResult;
}
//2.1通过多个卡口编号获取结果------------去重去空 区域碰撞调用的--------------------------------------------------------
public List<SjGjInfo> resultAnalysis(List<PhoneReceiving> phoneReceivinglist) throws Exception {
long start = System.currentTimeMillis();
ExecutorService executorService = Executors.newCachedThreadPool();//按需分配线程池
//全局公共参数 START-------------------------------------------------------------------------------------
//获取所有卡口的全量数据
List<SjGjInfo> sucesslistall = new ArrayList<>();
//根据ObjectValue去重后的数据
List<SjGjInfo> sucesslist = new ArrayList<>();
//根据ObjectValue去空后的数据
List<SjGjInfo> sucesslistnotnull = new ArrayList<>();
//全局公共参数 END-------------------------------------------------------------------------------------
//-------------------------------获取卡口数据-----------------------
List<List<PhoneReceiving>> cpllist = new ArrayList<>();
float number = phoneReceivinglist.size() / 3 + 1;
int flnum = (int) Math.ceil(number);
System.out.println("数据批量值为=========================" + flnum);
cpllist = DataUtil.pldata(phoneReceivinglist, flnum);
System.out.println("批量分流=======================================");
CompletableFuture[] cfs3 = cpllist.stream()
.map(sjgjInfo -> CompletableFuture.supplyAsync(() ->
//2.2 获取卡口全量数据
phoneInfoResults(sjgjInfo), executorService)
//----------1、结果----------------------
.handle((t, throwable) -> {
if (throwable != null) {//翻译处理
System.out.println("获取全量数据失败==============" + throwable);
return t;
}
if (t.size() > 0) {
System.out.println("====获取全量数据结果成功==============" + t.size());
sucesslistall.addAll(t);
}
return t;
})
).toArray(CompletableFuture[]::new);
CompletableFuture.allOf(cfs3).join();
System.out.println("====时间==============" + (System.currentTimeMillis() - start));
System.out.println("===所有数据量==============" + sucesslistall.size());
//-------------------------------获取卡口数据-----------------------
//如果获取数据为0
if (sucesslistall.size() > 0) {
//根据ObjectValue去重为空的
sucesslistall.stream().forEach(p -> {
if (p.getObjectValue() != "" && p.getObjectValue() != null) {
sucesslistnotnull.add(p);
}
});
if (sucesslistnotnull != null && !sucesslistnotnull.isEmpty()) {
//根据ObjectValue去重
sucesslist = sucesslistnotnull.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(()
-> new TreeSet<>(Comparator.comparing(SjGjInfo::getObjectValue))), ArrayList::new
)
);
}
}
return sucesslist;
}
//2.2 通过单个卡口编号获取结果---------时空和回溯直接批量调用的--------------
public List<SjGjInfo> phoneInfoResults(List<PhoneReceiving> phoneReceivings) {
List<SjGjInfo> sjjZInfolist = new ArrayList<>();
List<SjGjInfo> sjjZInfolists = new ArrayList<>();
for (PhoneReceiving phoneReceiving : phoneReceivings) {
try {
Thread.sleep(100);
sjjZInfolist = phoneall(phoneReceiving);
System.out.println(phoneReceiving.getObjectValue() + "单个卡口编号获取结果===============" + sjjZInfolist.size());
sjjZInfolists.addAll(sjjZInfolist);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return sjjZInfolists;
}
/**
* 号辆回溯(时空碰撞调用)
*
* @return
*/
public List<SjGjInfo> phoneall(PhoneReceiving phoneReceiving) {
List<SjGjInfo> listResult = new ArrayList<>();
Map resultMap = new HashMap();
String cxsj = phoneReceiving.getKssj() + " - " + phoneReceiving.getJssj();
String url = "http://26.3.13.120:8501/nmsj/getMyJzFwXx?jzbh=" + phoneReceiving.getObjectValue() + "&cxSj=" + cxsj + "&page=1&limit=999999";
HttpEntity<JSONObject> jsonObject = restTemplate.getForEntity(url, JSONObject.class);
if (StringUtils.isNotEmpty(String.valueOf(jsonObject.getBody()))) {
if (jsonObject.getBody().containsKey("data")) {
LinkedHashMap resultJson = (LinkedHashMap) jsonObject.getBody().get("data");//获取返回的数据结果
List<LinkedHashMap> array = (List<LinkedHashMap>) resultJson.get("rows");
int total = (int) resultJson.get("total");
resultMap.put("total", total);
System.out.println(array.toString());
for (int i = 0; i < array.size(); i++) {
LinkedHashMap object = array.get(i);
SjGjInfo sjGjInfo = new SjGjInfo();
String jzmc = (String) object.get("jzmc");
String jzbh = (String) object.get("jzbh");
String jd = (String) object.get("jd");
String wd = (String) object.get("wd");
String fxsj = (String) object.get("fxsj");
String sjhm = (String) object.get("sjhm");
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime lacDt = LocalDateTime.parse(fxsj, dtf);
long l = LocalDateTime.from(lacDt).atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
sjGjInfo.setObjectValue(sjhm);
//todo:修改objecttype
sjGjInfo.setObjectType("phone");
sjGjInfo.setObjectTypeName("手机号码");
sjGjInfo.setAddress(jzmc);
sjGjInfo.setStationName(jzmc);
sjGjInfo.setBase(jzbh);
sjGjInfo.setX(jd);
sjGjInfo.setY(wd);
sjGjInfo.setOldX(jd);
sjGjInfo.setOldY(wd);
sjGjInfo.setTimestamp(String.valueOf(l));
sjGjInfo.setTime(fxsj);
sjGjInfo.setTaskId(phoneReceiving.getTaskId());
listResult.add(sjGjInfo);
}
}
}
return listResult;
}
//4.结果数入库+号主信息翻译+涉案信息翻译---------------------------------------------------------------------
public MapRestResult oneAreaInfoThread(List<SjGjInfo> sucesslistAll) throws Exception {
long start = System.currentTimeMillis();
ExecutorService executorService = Executors.newCachedThreadPool();//按需分配线程池
//全局公共参数 START-------------------------------------------------------------------------------------
//数据保存批量list
List<List<SjGjInfo>> pllist = new ArrayList<>();
//卡口数据保存成功list
List<SjGjInfo> savelist = new ArrayList<>();
//全局公共参数 END-------------------------------------------------------------------------------------
//2、数据批量分流 START--------------- 对获取的不为空和不重复的结果数据进行批量----------------------------------------------------------------------------------------------------------
if (sucesslistAll != null && !sucesslistAll.isEmpty()) {
float number = sucesslistAll.size() / 100 + 1;
int flnum = (int) Math.ceil(number);
System.out.println("数据批量值为=========================" + flnum);
pllist = DataUtil.pldata(sucesslistAll, flnum);
System.out.println("批量分流=======================================");
//2.1保存所有卡口的全量数据----------------------------------
CompletableFuture[] cfs1 = pllist.stream()
.map(phonejzInfos -> CompletableFuture.supplyAsync(() ->
//1.进行保存
phoneInfoSaveResultPz(phonejzInfos), executorService)
//----------1、结果----------------------
.handle((m, throwable) -> {
if (throwable != null) {//保存处理
System.out.println("有" + m.get("errorlist").size() + "条数据保存失败==============" + throwable);
return m;
}
System.out.println("有" + m.get("sucesslist").size() + "条数据保存成功==============");
savelist.addAll(m.get("sucesslist"));
return m;
})
).toArray(CompletableFuture[]::new);
CompletableFuture.allOf(cfs1).join();
//2、数据批量分流 END-----------------------对获取的不为空和不重复的结果数据进行批量-----------------------------------------------------------------------------------------------------
//3、数据批量分流 START--------------- 对保存入库在结果表进行批量关联关系----------------------------------------------------------------------------------------------------------
if (savelist != null && !savelist.isEmpty()) {
float number1 = savelist.size() / 100 + 1;
int flnum1 = (int) Math.ceil(number1);
System.out.println("数据批量值为=========================" + flnum1);
pllist = DataUtil.pldata(savelist, flnum1);
System.out.println("批量分流=======================================");
}
//4、数据批量分流 END-----------------------对有身份证号的详情数据进行批量-----------------------------------------------------------------------------------------------------
CompletableFuture[] cfs2 = pllist.stream()
.map(sjGjInfos -> CompletableFuture.supplyAsync(() ->
//2 获取号主信息入人员表
getCarRelationInfoPz(sjGjInfos), executorService)
//----------2、结果----------------------
//计数器
.handle((n, throwable) -> {
if (n != null && !n.isEmpty()) {
if (throwable != null) {//翻译处理
n.entrySet().forEach(t -> {
System.out.println("号主信息获取失败==============" + throwable);
});
return n;
}
}
return n;
})
).toArray(CompletableFuture[]::new);
CompletableFuture.allOf(cfs2).join();
System.out.println("==============================结果表==========================================");
System.out.println("");
System.out.println("获取的所有卡口数据总量==============" + sucesslistAll.size());
System.out.println("卡口结果数据保存(结果表)==============" + savelist.size() + "条");
System.out.println("");
System.out.println("==============================结果表==========================================");
System.out.println("耗时=" + (System.currentTimeMillis() - start));
}
return MapRestResult.build(200, "翻译时间:" + (System.currentTimeMillis() - start), sucesslistAll.size());
}
//4.1 保存结果表(通过单个卡口编号获取结果)(当前时间段被卡口抓拍到的号牌号)-----------------------
public Map<String, List<SjGjInfo>> phoneInfoSaveResultPz(List<SjGjInfo> sjgjInfos) {
Map<String, List<SjGjInfo>> map = new HashMap<>();
//保存数据
//保存成功list
List<SjGjInfo> sucesslist = new ArrayList<>();
//保存失败list
List<SjGjInfo> errorlist = new ArrayList<>();
sjgjInfos.forEach(p -> {
try {
//保存结果表
p.setXxzjbh(KeyUtil.getUniqueKey("C"));// 信息主键编号
boolean flag = regInfoMapper.saveResultPz(p);
if (flag == true) {
System.out.println("数据保存成功====================" + p.toString());
sucesslist.add(p);
} else {
System.out.println("数据保存失败====================" + p.toString());
errorlist.add(p);
}
} catch (Exception e) {
System.out.println("数据保存请求失败原因====================" + e);
System.out.println("数据保存请求失败数据====================" + p);
errorlist.add(p);
}
});
map.put("sucesslist", sucesslist);
map.put("errorlist", errorlist);
return map;
}
// 号主信息接口,存人员信息(碰撞使用)
public Map<List<SjGjInfo>, List<PhoneRy>> getCarRelationInfoPz(List<SjGjInfo> sjgjInfos) {
// 返回实体 采用LinkedHashMap 顺序插入,顺序输出
Map<List<SjGjInfo>, List<PhoneRy>> maplist = new LinkedHashMap<>();
List<PhoneRy> phoneRyInfosucess = new ArrayList<>();
List<SjGjInfo> phoneRyInfonull = new ArrayList<>();
List<SjGjInfo> phoneRyInfoerro = new ArrayList<>();
for (SjGjInfo p : sjgjInfos) {
// 机主信息
PhoneRy phoneRy = new PhoneRy();
HttpEntity<JSONObject> jsonObject = restTemplate.getForEntity("http://26.3.13.120:8501/nmsj/getMySfSjGl?sjhm=" + p.getObjectValue(), JSONObject.class);
if (StringUtils.isNotEmpty(String.valueOf(jsonObject.getBody()))) {
if (jsonObject.getBody().containsKey("data")) {
LinkedHashMap resultJson = (LinkedHashMap) jsonObject.getBody().get("data");//获取返回的数据结果
List<LinkedHashMap> array = (List<LinkedHashMap>) resultJson.get("rows");
System.out.println(array.toString());
if (array != null && array.size() != 0) {
LinkedHashMap object = array.get(0);
String bshxx = p.getObjectValue();
String xm = (String) object.get("xm");
String zjhm = (String) object.get("zjhm");
phoneRy.setXm(xm);
phoneRy.setSfzhm(zjhm);
phoneRy.setPhone(bshxx);
}
}
}
try {
if (null != phoneRy) {
// 人员表去重
String sfzhm = phoneRy.getSfzhm();
// 人员表无数据
Integer e = regInfoMapper.selecteRegionalsPerson(sfzhm);
if (e == 0) {
//号主入库
phoneRyInfosucess.add(phoneRy);
//循环保存关联list数据
//TODO:为什么循环
phoneRyInfosucess.stream().forEach(t -> {
RegionalsPerson regionalsPerson = new RegionalsPerson();
regionalsPerson.setXxzjbh(KeyUtil.getUniqueKey("RY"));// 信息主键编号
regionalsPerson.setPhone(t.getPhone());
regionalsPerson.setMz(t.getMz());
regionalsPerson.setCsdzmc(t.getCsdzmc());
regionalsPerson.setSfzhm(t.getSfzhm());
regionalsPerson.setXb(t.getXb());
regionalsPerson.setXzzdzmc(t.getXzzdzmc());
regionalsPerson.setXm(t.getXm());
regionalsPerson.setHjdqhdz(t.getHjdqhdz());
regionalsPerson.setCsrq(t.getCsrq());
// 保存详情(作为关联号主信息)
RegionalsDetail regionalsDetail = new RegionalsDetail();
// 结果数据id保存
regionalsDetail.setXxzjbh(KeyUtil.getUniqueKey("DE"));// 信息主键编号
regionalsDetail.setResultId(p.getXxzjbh());
regionalsDetail.setObjectTypeName("新录入号主信息");
regionalsDetail.setObjectValue(t.getObjValue());
regionalsDetail.setObjectType("hzxx");
regionalsDetail.setSfzhm(t.getSfzhm());
// 保存详情表
regInfoMapper.saveRegionalsDetail(regionalsDetail);
// 保存人员
regInfoMapper.saveRegionalsPerson(regionalsPerson);
// 保存验证信息
RegionalsResult regionalsResult = new RegionalsResult();
regionalsResult.setXxzjbh(p.getId());
regionalsResult.setSfCheck("1");//翻译成功
regInfoMapper.updateRegionalsResult(regionalsResult);
System.out.println("有号主信息翻译====================" + phoneRyInfosucess.toString());
});
} else {
// 号主入库
// 保存详情(作为关联号主信息)
RegionalsDetail regionalsDetail = new RegionalsDetail();
regionalsDetail.setXxzjbh(KeyUtil.getUniqueKey("DE"));// 信息主键编号
// 结果数据id保存
regionalsDetail.setObjectValue(p.getObjectValue());
regionalsDetail.setResultId(p.getXxzjbh());
regionalsDetail.setObjectTypeName("人员表已有该号主信息");
regionalsDetail.setObjectType("hzxx");
regionalsDetail.setSfzhm(sfzhm);
// 保存详情表
regInfoMapper.saveRegionalsDetail(regionalsDetail);
// 保存验证信息
RegionalsResult regionalsResult = new RegionalsResult();
regionalsResult.setXxzjbh(p.getXxzjbh());
regionalsResult.setSfCheck("1");//翻译成功
regInfoMapper.updateRegionalsResult(regionalsResult);
phoneRyInfosucess.add(phoneRy);
System.out.println("之前有号主信息翻译信息====================" + p.getObjectValue());
}
} else {// 未关联到数据
phoneRyInfonull.add(p);
// 保存详情(作为关联号主信息)
RegionalsDetail regionalsDetail = new RegionalsDetail();
regionalsDetail.setXxzjbh(KeyUtil.getUniqueKey("DE"));// 信息主键编号
// 结果数据id保存
regionalsDetail.setResultId(p.getXxzjbh());
regionalsDetail.setObjectTypeName("无号主信息");
regionalsDetail.setObjectType("hzxx");
// 保存详情表
regInfoMapper.saveRegionalsDetail(regionalsDetail);
// 保存验证信息
RegionalsResult regionalsResult = new RegionalsResult();
regionalsResult.setXxzjbh(p.getXxzjbh());
regionalsResult.setSfCheck("1");//翻译成功
regInfoMapper.updateRegionalsResult(regionalsResult);
System.out.println("无号主信息翻译====================" + p.getObjectValue());
}
} catch (Exception e) {
// 保存验证信息
RegionalsResult regionalsResult = new RegionalsResult();
regionalsResult.setXxzjbh(p.getXxzjbh());
regionalsResult.setSfCheck("hz");//翻译失败
regInfoMapper.updateRegionalsResult(regionalsResult);
System.out.println("号主信息翻译失败原因=======" + e + "翻译失败的号码=========" + p.getObjectValue());
phoneRyInfoerro.add(p);
}
}
// 返回没有翻译出号主信息和翻译出号主信息
maplist.put(phoneRyInfonull, phoneRyInfosucess);
// 返回号主信息请求失败的数据
maplist.put(phoneRyInfoerro, phoneRyInfosucess);
return maplist;
}
// 标识号碰撞结果查询
public MapRestResult getRegionalsResult(TbStRegionalstaskresult tbStRegionalstaskresult) throws Exception {
List<Map<String, Map<String, String>>> list = new ArrayList<>();
List<Map<Object, Object>> listPh = new ArrayList<>();
List<List<Map<String, Map<String, String>>>> pllist = new ArrayList<>();
// 时空徘徊
if (null != tbStRegionalstaskresult.getFlag() && !"".equals(tbStRegionalstaskresult.getFlag())) {
//结果表
List<TbStRegionalstaskresult> resluts = phoneInfoMapper.getAllResult(tbStRegionalstaskresult);
TbStRegionalstaskresult tbStRegionalstaskresultALL = new TbStRegionalstaskresult();
tbStRegionalstaskresultALL.setTask_id(tbStRegionalstaskresult.getTask_id());
List<TbStRegionalstaskresult> reslutsall = phoneInfoMapper.getAllResultall(tbStRegionalstaskresultALL);
HashSet<Object> setObjctValue = new HashSet<>();
for (TbStRegionalstaskresult res : resluts) {
// hashset去重号牌号
setObjctValue.add(res.getObject_value());
}
List<TbStRegionalstaskresult> listO = new ArrayList<>();
setObjctValue.stream().forEach(p -> {
reslutsall.stream().forEach(t -> {
if (t.getObject_value().equals(p)) {
listO.add(t);
}
});
Map<Object, Object> h = new HashMap<>();
h.put(p, listO);
listPh.add(h);
});
//总数
int count = phoneInfoMapper.getAllResultcount(tbStRegionalstaskresult);
return MapRestResult.build(200, listO.size() + "", listPh);
} else {
//结果表
List<TbStRegionalstaskresult> resluts = phoneInfoMapper.getAllResult(tbStRegionalstaskresult);
//总数
int count = phoneInfoMapper.getAllResultcount(tbStRegionalstaskresult);
System.out.println("结果数据总量================" + resluts.size());
if (resluts.size() > 0) {
resluts.stream().forEach(p -> {
Map<String, Map<String, String>> reslutMap = new LinkedHashMap<>();
Map<String, TbStRegionalstaskresult> result = new LinkedHashMap<>();
Map<String, List<RegionalsDetail>> resultxq = new LinkedHashMap<>();
List<RegionalsDetail> regionalsDetailsSfzh = new ArrayList<>();
//获取详情数据
List<RegionalsDetail> regionalsDetails = phoneInfoMapper.getAllRegionalsDetail(p.getXxzjbh());
result.put("jg", p);
resultxq.put("xq", regionalsDetails);
//有详情 数据
if (regionalsDetails.size() > 0) {
//划分身份证号
regionalsDetails.stream().forEach(m -> {
if (m.getSfzhm() != null && !m.getSfzhm().isEmpty()) {
regionalsDetailsSfzh.add(m);
} else {
//无身份证
System.out.println("==有翻译结果+无身份证========" + p.toString());
reslutMap.put(JSON.toJSON(p).toString(), null);
}
});
//有翻译结果+有身份证信息的数据
if (regionalsDetailsSfzh.size() > 0) {
//数据分类统计(按身份证号)
Map<String, List<RegionalsDetail>> collect = regionalsDetailsSfzh.stream().collect(Collectors.groupingBy(RegionalsDetail::getSfzhm));
collect.entrySet().forEach(t -> {
System.out.println("==身份证号==" + t.getKey() + "==详情==" + t.getValue().toString());
//人员数据获取
if (t.getKey() != "" && t.getKey() != null) {
RegionalsPerson regionalsPerson = phoneInfoMapper.getAllRegionalsPerson(t.getKey());
if (regionalsPerson != null && !StringUtils.isEmpty(regionalsPerson.toString())) {
BASE64Encoder encoder = new BASE64Encoder();
System.out.print("1111111111111111111======" + regionalsPerson.getImg());
if (regionalsPerson.getImg() != null) {
String img = new String(regionalsPerson.getImg());
regionalsPerson.setImgstr(img);
}
regionalsPerson.setImg(null);
System.out.println("==人员数据==" + regionalsPerson.toString());
Map<String, String> personMap = new LinkedHashMap<>();
personMap.put(JSON.toJSON(resultxq.get("xq")).toString(), JSON.toJSON(regionalsPerson).toString());
reslutMap.put(JSON.toJSON(result.get("jg")).toString(), personMap);
}
//有身份证号却无人员数据
else {
System.out.println("==有翻译结果+有身份证但是人员信息========" + p.toString());
//暂时号辆不走详情(详情里保存着号辆有无号主的信息)
Map<String, String> personMap = new LinkedHashMap<>();
personMap.put(JSON.toJSON(resultxq.get("xq")).toString(), null);
reslutMap.put(JSON.toJSON(result.get("jg")).toString(), personMap);
}
}
});
}
} else {
System.out.println("==无翻译结果========" + p.toString());
reslutMap.put(JSON.toJSON(result.get("jg")).toString(), null);
}
list.add(reslutMap);
});
System.out.println("结果数据总量================" + list.size());
return MapRestResult.build(200, count + "", list);
} else {
return MapRestResult.build(200, "无该任务", 0);
}
}
}
@Override
public MapRestResult selectJzXx(String qsjd, String qswd, String jsjd, String jswd) {
List<JzXxResult> kkList = phoneInfoMapper.getJzInfoByQsJwd(qsjd, qswd, jsjd, jswd);
return MapRestResult.build(200, "获取基站信息", kkList.size(), kkList);
}
}
package com.founder.peopleapi.service.impl;
import com.founder.commonutils.peopleEntity.Regionals;
import com.founder.commonutils.peopleEntity.RegionalsCarCarResult;
import com.founder.commonutils.peopleEntity.RegionalsTask;
import com.founder.commonutils.publicEntity.MapRestResult;
import com.founder.peopleapi.mapper.RegInfoMapper;
import com.founder.peopleapi.service.RegTaskService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
/*
*
* <p>
* 服务实现类
* </p>
*
* @author liuyaxin
* @since 2021-04-10
*/
@Service
public class RegTaskServiceImpl implements RegTaskService {
@Autowired
private RegInfoMapper regInfoMapper;
@Override
public MapRestResult saveRegTask(RegionalsTask regionalsTask) {
regInfoMapper.saveRegTask(regionalsTask);
return MapRestResult.build(200,"任务保存成功","");
}
@Override
public MapRestResult saveRegional(Regionals regionals) {
regInfoMapper.saveRegional(regionals);
return MapRestResult.build(200,"区域保存成功","");
}
}
#配置中心地址
spring.cloud.nacos.config.server-addr=47.92.48.137:8848
spring.cloud.nacos.discovery.server-addr=47.92.48.137:8848
#spring.cloud.nacos.config.server-addr=26.3.13.184:8848
#spring.cloud.nacos.discovery.server-addr=26.3.13.184:8848
spring.profiles.active=dev
# 该配置影响统一配置中心中的dataId
spring.application.name=peopleapi
spring.cloud.nacos.config.namespace=dev
#spring.cloud.nacos.config.ext-config[0].data-id=image.properties
# 开启动态刷新配置,否则配置文件修改,工程无法感知
#spring.cloud.nacos.config.ext-config[0].refresh=true
#spring.cloud.nacos.config.shared-dataids=imageapipz.properties
#spring.cloud.nacos.config.refreshable-dataids=imageapipz.properties
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>map-parent</artifactId>
<groupId>com.founder</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>pom</packaging>
<modules>
<module>imageapi</module>
<module>carapi</module>
<module>peopleapi</module>
</modules>
<artifactId>serviceapi</artifactId>
<dependencies>
<dependency>
<groupId>com.founder</groupId>
<artifactId>service_base</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<!--hystrix依赖,主要是用 @HystrixCommand -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--服务注册-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 服务调用 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.0.0</version>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--ojdbc-->
<!-- <dependency>
<groupId>org.oracle</groupId>
<artifactId>ojdbc6-10</artifactId>
<version>10</version>
<scope>system</scope>
<systemPath>${project.basedir}/../lib/ojdbc6-10.jar</systemPath>
</dependency>-->
<dependency>
<groupId>org.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>10</version>
</dependency>
<!-- velocity 模板引擎, Mybatis Plus 代码生成器需要 -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
</dependency>
<!-- 引入spring-data-elasticsearch-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<!--spring切面aop依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!--swagger-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
</dependency>
<!--lombok用来简化实体类:需要安装lombok插件-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--xls-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
</dependency>
<!--httpclient-->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
<!--commons-io-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
</dependency>
<!--gson-->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.35</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
</dependencies>
</project>
\ No newline at end of file
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