Commit dc67c27d authored by tianyiming's avatar tianyiming

feat: 添加检验状态映射并优化资质状态处理

parent b6b854d4
......@@ -22,7 +22,7 @@ public enum EquipStateEnum {
TY("停用", "2"),
ZX("注销", "4"),
BF("报废", "3"),
WZT("无状态", "99"),
WZT("无", "99"),
;
private String name;
......
......@@ -133,7 +133,8 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
private static final Map<String, String> permitStatusMap = new HashMap<>(4);
private static final Map<String, String> licensesStatusMap = new HashMap<>(6);
private static final Map<String, String> inspectionStatusMap = new HashMap<>(4);
private static final String overdue = "overdue";
private static final String near = "near";
private static final String normal = "normal";
......@@ -148,6 +149,11 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
permitStatusMap.put(normal, "许可正常");
permitStatusMap.put(none, "无有效期");
inspectionStatusMap.put(overdue, "检验超期");
inspectionStatusMap.put(near, "检验临期");
inspectionStatusMap.put(normal, "检验正常");
inspectionStatusMap.put(none, "无下次检验日期");
licensesStatusMap.put(overdue, "资质超期");
licensesStatusMap.put(near, "资质临期");
licensesStatusMap.put(normal, "资质正常");
......@@ -288,11 +294,22 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
boolMust.must(QueryBuilders.prefixQuery("superviseOrgCode", orgCode));
JSONObject filterParams = null;
String licensesStatusStr = "";
if (!ObjectUtils.isEmpty(filter.get("filterParams"))) {
filterParams = JSONObject.parseObject(JSONObject.toJSONString(filter.get("filterParams")));
String filterType = "advanced";
// 组装人员过滤条件
this.getPersonBoolQueryBuilder(filterParams, boolMust, filterType);
// 资质判断
if (filterParams.containsKey("expiryDate")) {
Object permitStatus = filterParams.get("expiryDate");
if (permitStatus instanceof JSONArray) {
JSONArray jsonArray = (JSONArray) permitStatus;
if (!ObjectUtils.isEmpty(jsonArray) && !jsonArray.contains("all") && jsonArray.size() == 1) {
licensesStatusStr = jsonArray.get(0).toString();
}
}
}
}
// 组装人员排序条件
this.getPersonBoolQuerySort(filter, builder);
......@@ -326,57 +343,62 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
String licensesStatus = null;
if (dto.containsKey("licenses")) {
// 以下人员类型有资质要求
// 人员类型(newPost):检验人员:66151、检测人员:66152、作业人员:6552、检查人员:6763
// 人员类型(newPost):检验人员:66151、检测人员:66152
// 人员子类型(subPost): 持证人员:6713、持证人员(P):6764、持证人员(R2):6765
String newPost = ObjectUtils.isEmpty(dto.getString("newPost")) ? "" : dto.getString("newPost");
String subPost = ObjectUtils.isEmpty(dto.getString("subPost")) ? "" : dto.getString("subPost");
if (newPost.contains("66151") || newPost.contains("66152") || newPost.contains("6763") || newPost.contains("6552") || subPost.contains("6713") || subPost.contains("6764") || subPost.contains("6765")) {
if (newPost.contains("66151") || newPost.contains("66152") || subPost.contains("6713") || subPost.contains("6764") || subPost.contains("6765")) {
JSONArray licenses = dto.getJSONArray("licenses");
String overdueStr = licensesStatusMap.get(overdue);
String nearStr = licensesStatusMap.get(near);
String normalStr = licensesStatusMap.get(normal);
String noneStr = licensesStatusMap.get(none);
if (!ObjectUtils.isEmpty(licenses)) {
List<String> permissionStatusList = new ArrayList<>();
for (Object object : licenses) {
JSONObject json = JSONObject.parseObject(JSONObject.toJSONString(object));
if (!json.containsKey("expiryDate")) {
permissionStatusList.add("无有效期");
continue;
}
String expiryDate = json.getString("expiryDate");
if (!ObjectUtils.isEmpty(expiryDate)) {
long daysBetween = ChronoUnit.DAYS.between(LocalDate.now(), LocalDate.parse(expiryDate, formatter));
if (daysBetween <= 0) {
permissionStatusList.add("超期");
} else if (daysBetween <= 30) {
permissionStatusList.add("临期");
} else {
permissionStatusList.add("正常");
if (!"".equals(licensesStatusStr)) {
licensesStatus = licensesStatusMap.get(licensesStatusStr);
} else {
List<String> permissionStatusList = new ArrayList<>();
for (Object object : licenses) {
JSONObject json = JSONObject.parseObject(JSONObject.toJSONString(object));
if (!json.containsKey("expiryDate")) {
permissionStatusList.add(noneStr);
continue;
}
String expiryDate = json.getString("expiryDate");
if (!ObjectUtils.isEmpty(expiryDate)) {
long daysBetween = ChronoUnit.DAYS.between(LocalDate.now(), LocalDate.parse(expiryDate, formatter));
if (daysBetween <= 0) {
permissionStatusList.add(overdueStr);
} else if (daysBetween <= 30) {
permissionStatusList.add(nearStr);
} else {
permissionStatusList.add(normalStr);
}
}
}
}
long cq = permissionStatusList.stream().filter(e -> e.equals("超期")).count();
long lq = permissionStatusList.stream().filter(e -> e.equals("临期")).count();
long no = permissionStatusList.stream().filter(e -> e.equals("无有效期")).count();
long zc = permissionStatusList.stream().filter(e -> e.equals("正常")).count();
// 需按照许可严重顺序进行判断,先判断超期,再判断临期,再判断无有效期,最后判断正常
if (cq > 0) {
licensesStatus = "资质超期";
} else if (lq > 0) {
licensesStatus = "资质临期";
} else if (no > 0) {
licensesStatus = "无有效期";
} else if (zc > 0) {
licensesStatus = "资质正常";
long cq = permissionStatusList.stream().filter(e -> e.equals(overdueStr)).count();
long lq = permissionStatusList.stream().filter(e -> e.equals(nearStr)).count();
long no = permissionStatusList.stream().filter(e -> e.equals(noneStr)).count();
long zc = permissionStatusList.stream().filter(e -> e.equals(normalStr)).count();
// 需按照资质严重顺序进行判断,先判断超期,再判断临期,再判断无有效期,最后判断正常
if (cq > 0) {
licensesStatus = overdueStr;
} else if (lq > 0) {
licensesStatus = nearStr;
} else if (no > 0) {
licensesStatus = noneStr;
} else if (zc > 0) {
licensesStatus = normalStr;
}
}
} else {
licensesStatus = "无资质";
licensesStatus = licensesStatusMap.get(noLicense);
}
} else {
licensesStatus = "无资质要求";
licensesStatus = licensesStatusMap.get(noLicenseReq);
}
}
String licensesStatusStr = licensesStatus.toString();
licensesStatusStr = licensesStatusStr.startsWith("/") ? licensesStatusStr.substring(1) : licensesStatusStr;
licensesStatusStr = licensesStatusStr.endsWith("/") ? licensesStatusStr.substring(0, licensesStatusStr.length() - 1) : licensesStatusStr;
dto.put("licensesStatus", licensesStatusStr);
dto.put("licensesStatus", licensesStatus);
list.add(dto);
}
totle = Objects.requireNonNull(response.getInternalResponse().hits().getTotalHits()).value;
......@@ -396,7 +418,26 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
// 获取许可状态统计
List<Map<String, Object>> staticMap = new ArrayList<>();
getCompanyOrPersonPermitStatusStatic(boolMust, staticMap, StatisticalAnalysisEnum.person.getKey());
if (!"".equals(licensesStatusStr)) {
Map<String, Object> normalMap = new HashMap<>();
normalMap.put("name", licensesStatusMap.get(normal));
Map<String, Object> nearMap = new HashMap<>();
nearMap.put("name", licensesStatusMap.get(near));
if (licensesStatusStr.equals(normal)) {
normalMap.put("value", totle);
nearMap.put("value", 0);
} else if (licensesStatusStr.equals(near)) {
nearMap.put("value", 0);
nearMap.put("value", totle);
} else {
nearMap.put("value", 0);
nearMap.put("value", 0);
}
staticMap.add(normalMap);
staticMap.add(nearMap);
} else {
getCompanyOrPersonPermitStatusStatic(boolMust, staticMap, StatisticalAnalysisEnum.person.getKey());
}
result.put("keyIndicator", staticMap);
return result;
}
......@@ -635,7 +676,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
String noneStr = permitStatusMap.get(none);
if (dto.containsKey("licenses")) {
if (!"".equals(permitStatusStr)) {
permissionStatus = permitStatusMap.get(permissionStatus);
permissionStatus = permitStatusMap.get(permitStatusStr);
} else {
List<String> permissionStatusList = new ArrayList<>();
JSONArray licenses = dto.getJSONArray("licenses");
......@@ -679,10 +720,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
dto.get("unitType").toString().contains("安装改造维修单位"))) {
permissionStatus = noneStr;
}
String permissionStatusStr = permissionStatus.toString();
permissionStatusStr = permissionStatusStr.startsWith("/") ? permissionStatusStr.substring(1) : permissionStatusStr;
permissionStatusStr = permissionStatusStr.endsWith("/") ? permissionStatusStr.substring(0, permissionStatusStr.length() - 1) : permissionStatusStr;
dto.put("permissionStatus", permissionStatusStr);
dto.put("permissionStatus", permissionStatus);
list.add(dto);
}
totle = Objects.requireNonNull(response.getInternalResponse().hits().getTotalHits()).value;
......@@ -703,12 +741,37 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
// 获取许可状态统计
List<Map<String, Object>> staticMap = new ArrayList<>();
getCompanyOrPersonPermitStatusStatic(boolMust, staticMap, StatisticalAnalysisEnum.company.getKey());
if (!"".equals(permitStatusStr)) {
getFilterCompanyOrPersonPermitStatusStatic(staticMap, StatisticalAnalysisEnum.company.getKey(), permitStatusStr, totle);
} else {
getCompanyOrPersonPermitStatusStatic(boolMust, staticMap, StatisticalAnalysisEnum.person.getKey());
}
result.put("keyIndicator", staticMap);
return result;
}
private void getFilterCompanyOrPersonPermitStatusStatic(List<Map<String, Object>> staticMap, String index, String statusStr, long totle) {
Map<String, Object> normalMap = new HashMap<>();
String normalName = index.equals(StatisticalAnalysisEnum.company.getKey()) ? permitStatusMap.get(normal) : licensesStatusMap.get(normal);
String nearName = index.equals(StatisticalAnalysisEnum.company.getKey()) ? permitStatusMap.get(near) : licensesStatusMap.get(near);
normalMap.put("name", normalName);
Map<String, Object> nearMap = new HashMap<>();
nearMap.put("name", nearName);
if (statusStr.equals(normal)) {
normalMap.put("value", totle);
nearMap.put("value", 0);
} else if (statusStr.equals(near)) {
nearMap.put("value", 0);
nearMap.put("value", totle);
} else {
nearMap.put("value", 0);
nearMap.put("value", 0);
}
staticMap.add(normalMap);
staticMap.add(nearMap);
}
/**
* 构造企业查询条件
*
......@@ -836,7 +899,8 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
BoolQueryBuilder boolMust = QueryBuilders.boolQuery();
String orgCode = filter.getString("orgCode");
boolMust.must(QueryBuilders.prefixQuery("ORG_BRANCH_CODE", orgCode));
handleOrgCode(boolMust, orgCode);
boolMust.mustNot(QueryBuilders.termsQuery("STATUS", Arrays.asList("草稿", "已拒领", "待认领")));
JSONObject filterParams = new JSONObject();
// 筛选
if (!ObjectUtils.isEmpty(filter.get("filterParams"))) {
......@@ -885,22 +949,22 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
dto.put("WHETHER_VEHICLE_CYLINDER", ObjectUtils.isEmpty(dto.get("WHETHER_VEHICLE_CYLINDER")) ? "" : "1".equals(dto.get("WHETHER_VEHICLE_CYLINDER")) ? "是" : "否");
dto.put("WHETHER_SKID_MOUNTED_PRESSURE_VESSEL", ObjectUtils.isEmpty(dto.get("WHETHER_SKID_MOUNTED_PRESSURE_VESSEL")) ? "" : "1".equals(dto.get("WHETHER_SKID_MOUNTED_PRESSURE_VESSEL")) ? "是" : "否");
dto.put("whetherSphericalTank", ObjectUtils.isEmpty(dto.get("whetherSphericalTank")) ? "" : "1".equals(dto.get("whetherSphericalTank")) ? "是" : "否");
dto.put("EQU_STATE", ObjectUtils.isEmpty(dto.get("EQU_STATE")) ? "无状态" : EquipStateEnum.getNameByCode(dto.get("EQU_STATE").toString()));
String inspectStatus = "无下次检验日期";
dto.put("EQU_STATE", ObjectUtils.isEmpty(dto.get("EQU_STATE")) ? "无" : EquipStateEnum.getNameByCode(dto.get("EQU_STATE").toString()));
String inspectStatus = inspectionStatusMap.get(none);
if (dto.containsKey("NEXT_INSPECT_DATE")) {
String nextInspectDate = dto.getString("NEXT_INSPECT_DATE");
long daysBetween = ChronoUnit.DAYS.between(LocalDate.now(), LocalDate.parse(nextInspectDate, formatter));
if (daysBetween <= 0) {
inspectStatus = "超期";
} else if (daysBetween <= 30) {
inspectStatus = "临期";
} else {
inspectStatus = "正常";
if(!ObjectUtils.isEmpty(nextInspectDate) && !"".equals(nextInspectDate)){
long daysBetween = ChronoUnit.DAYS.between(LocalDate.now(), LocalDate.parse(nextInspectDate, formatter));
if (daysBetween <= 0) {
inspectStatus = inspectionStatusMap.get(overdue);
} else if (daysBetween <= 30) {
inspectStatus = inspectionStatusMap.get(near);
} else {
inspectStatus = inspectionStatusMap.get(normal);
}
}
dto.put("inspectStatus", inspectStatus);
} else {
dto.put("inspectStatus", inspectStatus);
}
dto.put("inspectStatus", inspectStatus);
list.add(dto);
}
totle = Objects.requireNonNull(response.getInternalResponse().hits().getTotalHits()).value;
......@@ -934,7 +998,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
BigDecimal pipeLength = getPipeLength(boolMust, builder);
Map<String, Object> pipeMap = new HashMap<>();
pipeMap.put("name", "压力管道(千米)");
pipeMap.put("value", pipeLength.divide(new BigDecimal(1000), 4, BigDecimal.ROUND_HALF_UP));
pipeMap.put("value", pipeLength.divide(new BigDecimal(1000), 2, BigDecimal.ROUND_HALF_UP));
statics.add(pipeMap);
}
......@@ -960,6 +1024,18 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
return result;
}
private void handleOrgCode(BoolQueryBuilder boolMust, String orgCode) {
if (orgCode.equals("50")) {
DynamicQueryBuilder dynamicQueryBuilder = new DynamicQueryBuilder();
dynamicQueryBuilder.or(QueryBuilders.prefixQuery("ORG_BRANCH_CODE", orgCode));
dynamicQueryBuilder.or(QueryBuilders.boolQuery().must(QueryBuilders.termQuery("ORG_BRANCH_CODE", "")));
dynamicQueryBuilder.or(QueryBuilders.boolQuery().mustNot(QueryBuilders.existsQuery("ORG_BRANCH_CODE")));
boolMust.must(dynamicQueryBuilder.build());
} else {
boolMust.must(QueryBuilders.prefixQuery("ORG_BRANCH_CODE", orgCode));
}
}
private void getEquipmentBoolQueryBuilder(BoolQueryBuilder boolMust, JSONObject filterParams, String filterType) {
//快捷筛选和自定义筛选解析筛选规则不一致
if (filterType.equals("advanced")) {
......@@ -2706,15 +2782,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
List<Map<String, Object>> data = new ArrayList<>();
if (StatisticalAnalysisEnum.equip.getCode().equals(businessType)) {
if (orgCode.equals("50")) {
DynamicQueryBuilder dynamicQueryBuilder = new DynamicQueryBuilder();
dynamicQueryBuilder.or(QueryBuilders.prefixQuery("ORG_BRANCH_CODE", orgCode));
dynamicQueryBuilder.or(QueryBuilders.boolQuery().must(QueryBuilders.termQuery("ORG_BRANCH_CODE", "")));
dynamicQueryBuilder.or(QueryBuilders.boolQuery().mustNot(QueryBuilders.existsQuery("ORG_BRANCH_CODE")));
boolMust.must(dynamicQueryBuilder.build());
} else {
boolMust.must(QueryBuilders.prefixQuery("ORG_BRANCH_CODE", orgCode));
}
handleOrgCode(boolMust, orgCode);
data = queryDpEquipStatistics(filter, request, builder, boolMust, tabTotalMap);
} else if (StatisticalAnalysisEnum.company.getCode().equals(businessType)) {
boolMust.must(QueryBuilders.prefixQuery("superviseOrgCode.keyword", orgCode));
......@@ -2733,15 +2801,7 @@ public class ComprehensiveStatisticalAnalysisServiceImpl {
private void getTypeCount(String businessType, Map<String, Object> tabTotalMap, String orgCode, List<Map<String, Object>> data) {
BoolQueryBuilder equipBoolMust = QueryBuilders.boolQuery();
if (orgCode.equals("50")) {
DynamicQueryBuilder dynamicQueryBuilder = new DynamicQueryBuilder();
dynamicQueryBuilder.or(QueryBuilders.prefixQuery("ORG_BRANCH_CODE", orgCode));
dynamicQueryBuilder.or(QueryBuilders.boolQuery().must(QueryBuilders.termQuery("ORG_BRANCH_CODE", "")));
dynamicQueryBuilder.or(QueryBuilders.boolQuery().mustNot(QueryBuilders.existsQuery("ORG_BRANCH_CODE")));
equipBoolMust.must(dynamicQueryBuilder.build());
} else {
equipBoolMust.must(QueryBuilders.prefixQuery("ORG_BRANCH_CODE", orgCode));
}
handleOrgCode(equipBoolMust, orgCode);
equipBoolMust.mustNot(QueryBuilders.termsQuery("STATUS", Arrays.asList("草稿", "已拒领", "待认领")));
BoolQueryBuilder companyBoolMust = QueryBuilders.boolQuery();
companyBoolMust.must(QueryBuilders.prefixQuery("superviseOrgCode.keyword", orgCode));
......
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