Commit 8240aff8 authored by tianyiming's avatar tianyiming

综合统计分析列表查询接口部分功能实现

parent a7d251ad
......@@ -6,9 +6,6 @@ import com.yeejoin.amos.boot.biz.common.annotation.TechnicalParameter;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.HashMap;
import java.util.Map;
@AllArgsConstructor
@Getter
public enum ConditionEnum {
......
package com.yeejoin.amos.boot.module.statistics.api.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
@AllArgsConstructor
@Getter
public enum StatisticalAnalysisEnum {
/**
* 综合统计分析列表查询设备、企业、人员ES索引
*/
company("企业", "company", "idx_biz_enterprise_info"),
person("人员", "person", "idx_biz_user_info"),
equip("设备", "equip", "idx_biz_equipment_info");
private String name;
private String code;
private String key;
}
......@@ -28,7 +28,7 @@ import java.util.Map;
public class ComprehensiveStatisticalAnalysisController extends BaseController {
@Autowired
private ComprehensiveStatisticalAnalysisServiceImpl comprehensiveStatisticalAnalysisServiceImpl;
private ComprehensiveStatisticalAnalysisServiceImpl statisticalAnalysisService;
/**
* 查询设备分类
......@@ -41,8 +41,9 @@ public class ComprehensiveStatisticalAnalysisController extends BaseController {
@ApiOperation(httpMethod = "POST", value = "查询设备分类", notes = "查询设备分类")
public ResponseModel<List<Map<String, Object>>> queryEquipmentCategory(@RequestBody JSONObject category) {
String key = category.getString("key") == null ? null : category.getString("key");
return ResponseHelper.buildResponse(comprehensiveStatisticalAnalysisServiceImpl.queryEquipmentCategory(key));
return ResponseHelper.buildResponse(statisticalAnalysisService.queryEquipmentCategory(key));
}
/**
* @param jsonObject
* @return
......@@ -50,10 +51,10 @@ public class ComprehensiveStatisticalAnalysisController extends BaseController {
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PostMapping(value = "/select/queryEquipmentSearchData")
@ApiOperation(httpMethod = "POST", value = "查询设备查询条件", notes = "查询设备查询条件")
public ResponseModel<JSONObject> queryEquipmentSearchData(@RequestBody JSONObject jsonObject){
return ResponseHelper.buildResponse(comprehensiveStatisticalAnalysisServiceImpl.queryEquipmentSearchData(jsonObject.getString("value")));
public ResponseModel<JSONObject> queryEquipmentSearchData(@RequestBody JSONObject jsonObject) {
return ResponseHelper.buildResponse(statisticalAnalysisService.queryEquipmentSearchData(jsonObject.getString("value")));
}
/**
* @param
* @return
......@@ -61,7 +62,23 @@ public class ComprehensiveStatisticalAnalysisController extends BaseController {
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/select/queryAdvancedSearch")
@ApiOperation(httpMethod = "GET", value = "查询高级筛选", notes = "查询高级筛选")
public ResponseModel<JSONArray> query(){
return ResponseHelper.buildResponse(comprehensiveStatisticalAnalysisServiceImpl.queryAdvancedSearch());
public ResponseModel<JSONArray> query() {
return ResponseHelper.buildResponse(statisticalAnalysisService.queryAdvancedSearch());
}
/**
* 综合统计分析接口分页查询
*
* @param map
* @return
*/
@TycloudOperation(ApiLevel = UserType.AGENCY)
@PostMapping(value = "/page")
@ApiOperation(httpMethod = "POST", value = "综合统计分析接口分页查询", notes = "综合统计分析接口分页查询")
public ResponseModel<JSONObject> queryForPage(@RequestBody Map<String, Object> map) {
JSONObject jsonObject = new JSONObject(map);
return ResponseHelper.buildResponse(statisticalAnalysisService.queryForPage(jsonObject));
}
}
......@@ -2,6 +2,7 @@ package com.yeejoin.amos.boot.module.statistcs.biz.service.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.biz.common.annotation.TechnicalParameter;
import com.yeejoin.amos.boot.biz.common.entity.DataDictionary;
import com.yeejoin.amos.boot.biz.common.service.impl.DataDictionaryServiceImpl;
......@@ -10,21 +11,32 @@ import com.yeejoin.amos.boot.module.common.biz.utils.TechParamUtil;
import com.yeejoin.amos.boot.module.statistcs.biz.utils.JsonUtils;
import com.yeejoin.amos.boot.module.statistics.api.enums.AdvanceSearchEnum;
import com.yeejoin.amos.boot.module.statistics.api.enums.ConditionEnum;
import com.yeejoin.amos.boot.module.statistics.api.enums.StatisticalAnalysisEnum;
import com.yeejoin.amos.boot.module.statistics.api.mapper.TzsCustomFilterMapper;
import com.yeejoin.amos.boot.module.ymt.api.enums.EquipmentClassifityEnum;
import com.yeejoin.amos.component.feign.utils.FeignUtil;
import com.yeejoin.amos.feign.systemctl.Systemctl;
import com.yeejoin.amos.feign.systemctl.model.DictionarieModel;
import com.yeejoin.amos.feign.systemctl.model.DictionarieValueModel;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.TermsQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.SortOrder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.Resource;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.io.IOException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;
/**
* 综合统计分析服务实现类
......@@ -33,8 +45,12 @@ import java.util.Map;
* @date 2025-06-24
*/
@Service
@Slf4j
@RequiredArgsConstructor
public class ComprehensiveStatisticalAnalysisServiceImpl {
final static String EQU_LIST = "EQU_LIST";
@Value("classpath:/json/equipCategory.json")
private Resource equipCategory;
......@@ -43,6 +59,10 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
@Autowired
private DataDictionaryServiceImpl dataDictionaryService;
private final RestHighLevelClient restHighLevelClient;
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
public List<Map<String, Object>> queryEquipmentCategory(String key) {
List<Map<String, Object>> list;
Map<String, List<Map<String, Object>>> resourceJson = JsonUtils.getResourceJson(equipCategory);
......@@ -58,30 +78,30 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
public JSONObject queryEquipmentSearchData(String value) {
List<TechParamItem> paramMetaList = TechParamUtil.getParamMetaList(value);
ArrayList<JSONObject> list = new ArrayList<>();
for(int i= 0;i< paramMetaList.size();i++){
for (int i = 0; i < paramMetaList.size(); i++) {
JSONObject object = new JSONObject();
object.put("key",paramMetaList.get(i).getParamKey());
object.put("value",paramMetaList.get(i).getParamKey());
object.put("label",paramMetaList.get(i).getParamLabel());
object.put("unit",paramMetaList.get(i).getUnit());
object.put("key", paramMetaList.get(i).getParamKey());
object.put("value", paramMetaList.get(i).getParamKey());
object.put("label", paramMetaList.get(i).getParamLabel());
object.put("unit", paramMetaList.get(i).getUnit());
JSONObject skillConfig = new JSONObject();
skillConfig.put("conditions",getConditionList(paramMetaList.get(i).getParamType(),paramMetaList.get(i).getDictCode()));
if(!ValidationUtil.isEmpty(paramMetaList.get(i).getDictCode())){
skillConfig.put("type","select");
skillConfig.put("data",getData(paramMetaList.get(i).getDictCode()));
}else if(TechnicalParameter.ParamType.BIG_DECIMAL.equals(paramMetaList.get(i).getParamType())){
skillConfig.put("type","inputNumber");
}else if(TechnicalParameter.ParamType.STRING.equals(paramMetaList.get(i).getParamType())){
skillConfig.put("type","input");
}else if(TechnicalParameter.ParamType.DATE.equals(paramMetaList.get(i).getParamType())){
skillConfig.put("type","date");
skillConfig.put("conditions", getConditionList(paramMetaList.get(i).getParamType(), paramMetaList.get(i).getDictCode()));
if (!ValidationUtil.isEmpty(paramMetaList.get(i).getDictCode())) {
skillConfig.put("type", "select");
skillConfig.put("data", getData(paramMetaList.get(i).getDictCode()));
} else if (TechnicalParameter.ParamType.BIG_DECIMAL.equals(paramMetaList.get(i).getParamType())) {
skillConfig.put("type", "inputNumber");
} else if (TechnicalParameter.ParamType.STRING.equals(paramMetaList.get(i).getParamType())) {
skillConfig.put("type", "input");
} else if (TechnicalParameter.ParamType.DATE.equals(paramMetaList.get(i).getParamType())) {
skillConfig.put("type", "date");
}
skillConfig.put("isMulti",false);
object.put("skillConfig",skillConfig);
skillConfig.put("isMulti", false);
object.put("skillConfig", skillConfig);
list.add(object);
}
JSONObject result = new JSONObject();
result.put("techParam",list);
result.put("techParam", list);
return result;
}
......@@ -94,15 +114,283 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
object.put("label", dictionary.getName());
object.put("value", dictionary.getCode());
jsonArray.add(object);
}
}
return jsonArray;
}
private JSONArray getConditionList(TechnicalParameter.ParamType value,String dictCode) {
private JSONArray getConditionList(TechnicalParameter.ParamType value, String dictCode) {
return ConditionEnum.getByCode(ValidationUtil.isEmpty(dictCode) ? value : null);
}
public JSONArray queryAdvancedSearch() {
JSONArray all = AdvanceSearchEnum.getAll();
return all;
}
public JSONObject queryForPage(JSONObject filter) {
JSONObject result = new JSONObject();
Integer current = ObjectUtils.isEmpty(filter.getInteger("current")) ? 1 : filter.getInteger("current");
Integer size = ObjectUtils.isEmpty(filter.getInteger("pageSize")) ? 20 : filter.getInteger("pageSize");
Page<JSONObject> page = new Page<>(current, size);
String businessType = filter.getString("businessType");
if (ObjectUtils.isEmpty(businessType)) {
JSONObject statics = new JSONObject();
statics.put("totalCount", null);
result.put("statics", statics);
page.setRecords(new ArrayList<>());
page.setTotal(0);
result.put("pageData", page);
return result;
}
if (StatisticalAnalysisEnum.equip.getCode().equals(businessType)) {
result = queryEquipmentPage(filter, page, current, size);
} else if (StatisticalAnalysisEnum.company.getCode().equals(businessType)) {
result = queryCompanyPage(filter, page, current, size);
} else {
result = queryPersonPage(filter, page, current, size);
}
return result;
}
private JSONObject queryPersonPage(JSONObject filter, Page<JSONObject> page, Integer current, Integer size) {
JSONObject result = new JSONObject();
SearchRequest request = new SearchRequest();
request.indices(StatisticalAnalysisEnum.person.getKey());
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.trackTotalHits(true);
BoolQueryBuilder boolMust = QueryBuilders.boolQuery();
// 排序
if (!ObjectUtils.isEmpty(filter.get("sort"))) {
JSONObject sort = JSONObject.parseObject(JSONObject.toJSONString(filter.get("sort")));
builder.sort(sort.getString("field"), sort.getString("order").equals("desc") ? SortOrder.DESC : SortOrder.ASC);
}
builder.query(boolMust);
builder.from((current - 1) * size);
builder.size(size);
request.source(builder);
List<JSONObject> list = new LinkedList<>();
long totle = 0;
try {
SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
for (SearchHit hit : response.getHits().getHits()) {
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(hit);
JSONObject dto = jsonObject.getJSONObject("sourceAsMap");
list.add(dto);
}
totle = Objects.requireNonNull(response.getInternalResponse().hits().getTotalHits()).value;
page.setRecords(list);
page.setTotal(totle);
result.put("pageData", page);
} catch (IOException e) {
throw new RuntimeException(e);
}
List<Map<String, Object>> statics = new ArrayList<>();
Map<String, Object> sum = new HashMap<>();
sum.put("name", "人员总数(人)");
sum.put("value", totle);
statics.add(sum);
result.put("statics", statics);
return result;
}
private JSONObject queryCompanyPage(JSONObject filter, Page<JSONObject> page, Integer current, Integer size) {
JSONObject result = new JSONObject();
SearchRequest request = new SearchRequest();
request.indices(StatisticalAnalysisEnum.company.getKey());
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.trackTotalHits(true);
BoolQueryBuilder boolMust = QueryBuilders.boolQuery();
// 排序
if (!ObjectUtils.isEmpty(filter.get("sort"))) {
JSONObject sort = JSONObject.parseObject(JSONObject.toJSONString(filter.get("sort")));
builder.sort(sort.getString("field"), sort.getString("order").equals("desc") ? SortOrder.DESC : SortOrder.ASC);
}
builder.query(boolMust);
builder.from((current - 1) * size);
builder.size(size);
request.source(builder);
List<JSONObject> list = new LinkedList<>();
long totle = 0;
try {
SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
for (SearchHit hit : response.getHits().getHits()) {
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(hit);
JSONObject dto = jsonObject.getJSONObject("sourceAsMap");
list.add(dto);
}
totle = Objects.requireNonNull(response.getInternalResponse().hits().getTotalHits()).value;
page.setRecords(list);
page.setTotal(totle);
result.put("pageData", page);
} catch (IOException e) {
throw new RuntimeException(e);
}
List<Map<String, Object>> statics = new ArrayList<>();
Map<String, Object> sum = new HashMap<>();
sum.put("name", "企业总数(个)");
sum.put("value", totle);
statics.add(sum);
result.put("statics", statics);
return result;
}
private JSONObject queryEquipmentPage(JSONObject filter, Page<JSONObject> page, Integer current, Integer size) {
JSONObject result = new JSONObject();
SearchRequest request = new SearchRequest();
request.indices(StatisticalAnalysisEnum.equip.getKey());
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.trackTotalHits(true);
BoolQueryBuilder boolMust = QueryBuilders.boolQuery();
// 筛选
if (!ObjectUtils.isEmpty(filter.get("filterParams"))) {
JSONObject filterParams = JSONObject.parseObject(JSONObject.toJSONString(filter.get("filterParams")));
String filterType = filter.getString("filterType");
if (filterType.equals("advanced")) {
filterParams.forEach((k, v) -> {
if (k.equals("techParam")) {
} else {
if (v instanceof JSONArray) {
if (!((JSONArray) v).contains("all")) {
String field = k;
// todo 所属单位筛选争议,需确认后完成
if (k.equals("NEXT_INSPECT_DATE")) {
String finalField = field;
((JSONArray) v).forEach(item -> {
boolMust.must(QueryBuilders.existsQuery(finalField));
if (item.equals("overdue")) {
// 超期:小于当前日期
boolMust.must(QueryBuilders.rangeQuery(finalField).lt(LocalDate.now().format(formatter)));
} else if (item.equals("near")) {
// 临期:小于等于当前日期加上30天
boolMust.must(QueryBuilders.rangeQuery(finalField).lte(LocalDate.now().plusDays(30).format(formatter)));
} else {
// 正常:大于当前日期加上30天
boolMust.must(QueryBuilders.rangeQuery(finalField).gt(LocalDate.now().plusDays(30).format(formatter)));
}
});
} else if (k.equals("USC_DATE")) {
String finalField = field;
((JSONArray) v).forEach(item -> {
boolMust.must(QueryBuilders.existsQuery(finalField));
if (item.equals("15")) {
// 15年以上:大于当前日期减去15年
boolMust.must(QueryBuilders.rangeQuery(finalField).gt(LocalDate.now().minusYears(15).format(formatter)));
} else if (item.equals("10-15")) {
// 10-15年:小于当前日期减去15年,大于等于当前日期减去10年
boolMust.must(QueryBuilders.rangeQuery(finalField).lt(LocalDate.now().minusYears(15).format(formatter)));
boolMust.must(QueryBuilders.rangeQuery(finalField).gte(LocalDate.now().minusYears(10).format(formatter)));
} else if (item.equals("5-10")) {
// 5-10年:小于当前日期减去10年,大于等于当前日期减去5年
boolMust.must(QueryBuilders.rangeQuery(finalField).lt(LocalDate.now().minusYears(10).format(formatter)));
boolMust.must(QueryBuilders.rangeQuery(finalField).gte(LocalDate.now().minusYears(5).format(formatter)));
} else if (item.equals("0-5")) {
// 0-5年:小于当前日期减去5年
boolMust.must(QueryBuilders.rangeQuery(finalField).lt(LocalDate.now().minusYears(5).format(formatter)));
}
});
} else if (k.equals("EQU_LIST") || k.equals("EQU_CATEGORY") || k.equals("EQU_DEFINE") || k.equals("EQU_STATE") || k.equals("DATA_QUALITY_SCORE") || k.equals("DATA_SOURCE")) {
if (k.equals("EQU_LIST")) {
field = "EQU_LIST_CODE";
} else if (k.equals("EQU_CATEGORY")) {
field = "EQU_CATEGORY_CODE";
} else if (k.equals("EQU_DEFINE")) {
field = "EQU_DEFINE_CODE";
}
boolMust.must(QueryBuilders.existsQuery(field));
TermsQueryBuilder termsQuery = QueryBuilders.termsQuery(field, (JSONArray) v);
boolMust.must(termsQuery);
}
}
}
}
});
} else {
}
JSONArray equList = JSONObject.parseArray(JSONObject.toJSONString(filterParams.get(EQU_LIST)));
if (!ObjectUtils.isEmpty(equList)) {
if (equList.contains("8000")) {
// 压力管道长度
Map<String, Object> pipeLong = new HashMap<>();
pipeLong.put("name", "压力管道(千米)");
// todo 调用大屏总览接口获取压力管道长度
pipeLong.put("value", 1000000);
}
if (equList.contains("2000")) {
// 气瓶数量
Map<String, Object> gasTank = new HashMap<>();
gasTank.put("name", "气瓶(个)");
// todo 调用大屏总览接口获取气瓶数量
gasTank.put("value", 1000000);
}
}
}
// 排序
if (!ObjectUtils.isEmpty(filter.get("sort"))) {
JSONObject sort = JSONObject.parseObject(JSONObject.toJSONString(filter.get("sort")));
builder.sort(sort.getString("field"), sort.getString("order").equals("desc") ? SortOrder.DESC : SortOrder.ASC);
}
builder.query(boolMust);
// builder.sort("REC_DATE", SortOrder.DESC);
builder.from((current - 1) * size);
builder.size(size);
request.source(builder);
List<JSONObject> list = new LinkedList<>();
long totle = 0;
try {
SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
for (SearchHit hit : response.getHits().getHits()) {
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(hit);
JSONObject dto = jsonObject.getJSONObject("sourceAsMap");
dto.put("record", dto.get("SEQUENCE_NBR"));
dto.put("equipAddress", dto.get("USE_PLACE") + "/" + dto.get("ADDRESS"));
list.add(dto);
}
totle = Objects.requireNonNull(response.getInternalResponse().hits().getTotalHits()).value;
page.setRecords(list);
page.setTotal(totle);
result.put("pageData", page);
} catch (IOException e) {
throw new RuntimeException(e);
}
List<Map<String, Object>> statics = new ArrayList<>();
Map<String, Object> sum = new HashMap<>();
sum.put("name", "设备总数(台套)");
sum.put("value", totle);
statics.add(sum);
result.put("statics", statics);
return result;
}
}
\ 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