Commit 1ef86aa6 authored by suhuiguang's avatar suhuiguang

1.需求A071统计需求

parent 4f029726
package com.yeejoin.amos.boot.module.jg.api.bo;
import lombok.Data;
/**
* @author Administrator
*/
@Data
public class JgBizCountDataBO {
/**
* 接收机构公司编码
*/
private String receiveCompanyCode;
/**
* 业务类型
*/
private String bizType;
/**
* 流程状态
*/
private String status;
/**
* 数量
*/
private Long num;
/**
* 设备种类
*/
private String equList;
/**
* 设备类别
*/
private String equCategory;
/**
* 设备品种
*/
private String equDefine;
}
package com.yeejoin.amos.boot.module.jg.api.dto;
import lombok.Data;
import java.util.Objects;
/**
* @author Administrator
*/
@Data
public class JgBizCountDataDto {
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
JgBizCountDataDto that = (JgBizCountDataDto) o;
return receiveCompanyCode.equals(that.receiveCompanyCode) &&
bizType.equals(that.bizType) &&
equList.equals(that.equList) &&
equCategory.equals(that.equCategory) &&
Objects.equals(equDefine, that.equDefine);
}
@Override
public int hashCode() {
return Objects.hash(receiveCompanyCode, bizType, equList, equCategory, equDefine);
}
/**
* 接收机构公司编码
*/
private String receiveCompanyCode;
/**
* 业务类型
*/
private String bizType;
/**
* 设备种类
*/
private String equList;
/**
* 设备类别
*/
private String equCategory;
/**
* 设备品种
*/
private String equDefine;
}
package com.yeejoin.amos.boot.module.jg.api.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import org.springframework.format.annotation.DateTimeFormat;
import java.util.Date;
/**
* @author Administrator
*/
@Data
@ApiModel("检索条件")
public class ReportAnalysisSearchDTO {
@ApiModelProperty("开始日期")
@DateTimeFormat(pattern = "yyyy-MM-dd")
Date beginDate;
@ApiModelProperty("结束日期")
@DateTimeFormat(pattern = "yyyy-MM-dd")
Date endDate;
@ApiModelProperty("业务类型")
String bizType;
@ApiModelProperty("接收机构")
String receiveOrgCode;
@ApiModelProperty("设备种类code")
String equList;
@ApiModelProperty("设备类别code")
String equCategory;
@ApiModelProperty("设备品种code")
String equDefine;
@ApiModelProperty("排序逗号分开,逗号前字段,逗号后升序或者降序")
String sort;
public String getSortField(){
return StringUtils.isNotEmpty(sort) ? sort.contains(",") ? sort.split(",")[0] : "" : "";
}
public String getSortOrder(){
if(StringUtils.isNotEmpty(sort) && sort.contains(",") && "ascend".equals(sort.split(",")[1])){
return "asc";
}
return "desc";
}
}
......@@ -452,4 +452,11 @@ public class JgInstallationNotice extends BaseEntity {
*/
@TableField(value = "other_accessories")
private String otherAccessories;
/**
* 接收机构公司的org_code
*/
@TableField("receive_company_org_code")
private String receiveCompanyOrgCode;
}
......@@ -351,4 +351,10 @@ public class JgMaintainNotice extends BaseEntity {
*/
@TableField(value = "inform_number")
private String informNumber;
/**
* 接收机构公司的org_code
*/
@TableField("receive_company_org_code")
private String receiveCompanyOrgCode;
}
......@@ -296,4 +296,9 @@ public class JgMaintenanceContract extends BaseEntity {
@TableField(value = "other_accessories")
private String otherAccessories;
/**
* 接收机构公司的org_code
*/
@TableField("receive_company_org_code")
private String receiveCompanyOrgCode;
}
......@@ -358,4 +358,10 @@ public class JgReformNotice extends BaseEntity {
@TableField(value = "other_accessories", typeHandler = FastjsonTypeHandler.class)
private List<JSONObject> otherAccessories;
/**
* 接收机构公司的org_code
*/
@TableField("receive_company_org_code")
private String receiveCompanyOrgCode;
}
......@@ -338,4 +338,11 @@ public class JgTransferNotice extends BaseEntity {
*/
@TableField(value = "other_accessories")
private String otherAccessories;
/**
* 接收机构公司的org_code
*/
@TableField("receive_company_org_code")
private String receiveCompanyOrgCode;
}
......@@ -2,6 +2,9 @@ package com.yeejoin.amos.boot.module.jg.api.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yeejoin.amos.boot.biz.common.bo.CompanyBo;
import com.yeejoin.amos.boot.module.jg.api.bo.JgBizCountDataBO;
import com.yeejoin.amos.boot.module.jg.api.dto.ReportAnalysisSearchDTO;
import com.yeejoin.amos.boot.module.ymt.api.entity.EquipmentCategory;
import org.apache.ibatis.annotations.Param;
......@@ -61,5 +64,29 @@ public interface CommonMapper extends BaseMapper<EquipmentCategory> {
* @return 地市code
*/
String selectCityCompanyCode(@Param("receiveCompanyCode") String receiveCompanyCode, @Param("exclusionIds") String[] exclusionIds);
/**
* 告知业务统计
* @param reportAnalysisSearchDTO 条件
* @return 过程数据
*/
List<JgBizCountDataBO> queryForNoticeCountData(@Param("param") ReportAnalysisSearchDTO reportAnalysisSearchDTO);
List<CompanyBo> queryJGCompanyCodeName(String orgCode);
/**
* 维保备案统计数据查询
* @param reportAnalysisSearchDTO 检索条件
* @return List<JgBizCountDataBO>
*/
List<JgBizCountDataBO> queryForMaintenanceCountData(@Param("param") ReportAnalysisSearchDTO reportAnalysisSearchDTO);
/**
* 登记类统计数据查询
* @param reportAnalysisSearchDTO 检索条件
* @return List<JgBizCountDataBO>
*/
List<JgBizCountDataBO> queryForRegisterCountData(@Param("param") ReportAnalysisSearchDTO reportAnalysisSearchDTO);
}
package com.yeejoin.amos.boot.module.jg.api.service;
import com.yeejoin.amos.boot.biz.common.bo.CompanyBo;
import com.yeejoin.amos.boot.biz.common.bo.ReginParams;
import com.yeejoin.amos.boot.module.jg.api.dto.ReportAnalysisSearchDTO;
import com.yeejoin.amos.boot.module.jg.api.vo.JgBizCountBaseVo;
import com.yeejoin.amos.boot.module.jg.api.vo.JgBizEquipStateCountVo;
import java.util.Date;
import java.util.List;
import java.util.Map;
public interface IReportAnalysisService {
/**
* 告知类统计列表
* @param reportAnalysisSearchDTO 检索条件
* @return List<JgBizCountBaseVo>
*/
List<JgBizCountBaseVo> getNoticeCountList(ReportAnalysisSearchDTO reportAnalysisSearchDTO);
/**
* 登记类统计列表
* @param reportAnalysisSearchDTO 检索条件
* @return List<JgBizCountBaseVo>
*/
List<JgBizCountBaseVo> getRegisterCountList(ReportAnalysisSearchDTO reportAnalysisSearchDTO);
/**
* 维保备案业务办理设备情况统计表
* @param reportAnalysisSearchDTO 检索条件
* @return List<JgBizCountBaseVo>
*/
List<JgBizCountBaseVo> getMaintenanceCountList(ReportAnalysisSearchDTO reportAnalysisSearchDTO);
/**
* 设备状态情况统计表
* @param reportAnalysisSearchDTO 检索条件
* @return List<JgBizCountBaseVo>
*/
List<JgBizEquipStateCountVo> getEquipStatusCountList(ReportAnalysisSearchDTO reportAnalysisSearchDTO);
/**
* 查询当前登录人的管辖机构树,显示本级级所有下级
* @param selectedOrgInfo 登录人信息
* @return List<CompanyBo>
*/
List<CompanyBo> getReceiveCompanyTreeWithAuth(ReginParams selectedOrgInfo);
/**
* 业务类型枚举
* @param groupKey 分组
* @return List<Map<String, Object>>
*/
List<Map<String, Object>> getBizTypeList(String groupKey);
}
package com.yeejoin.amos.boot.module.jg.api.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import java.io.Serializable;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author shg
*/
@Data
@ApiModel("监管业务办理统计基础对象")
public class JgBizCountBaseVo implements Serializable {
public JgBizCountBaseVo() {
this.id = UUID.randomUUID().toString();
}
private String id;
@ApiModelProperty("业务大类")
private String bizGroup;
@ApiModelProperty("业务类型code")
private String bizType;
@ApiModelProperty("业务类型名称")
private String bizTypeName;
@ApiModelProperty("接收机构")
private String receiveCompanyName;
@ApiModelProperty("设备种类")
private String equListName;
@ApiModelProperty("设备类别")
private String equCategoryName;
@ApiModelProperty("设备品种")
private String equDefineName;
@ApiModelProperty("已发起数量")
private Long launchesNumber;
@ApiModelProperty("已完成数量")
private Long finishedNumber;
@AllArgsConstructor
@Getter
public enum BizType {
/**
* 业务类型枚举
*/
maintainNotice("维修告知", "notice"),
installNotice("安装告知", "notice"),
transferNotice("移转告知", "notice"),
reformNotice("改造告知", "notice"),
maintenanceContract("电梯维保备案", "maintenance"),
useRegistration("使用登记", "registrer"),
reformRegistration("改造变更登记", "registrer"),
transferRegistration("移转变更登记", "registrer"),
unitRegistration("单位变更登记", "registrer");
/**
* 描述
*/
private String name;
/**
* 组
*/
private String group;
/**
* 按照类型获取枚举
*
* @param group 分组
* @return List<Map < String, String>>
*/
public static List<Map<String, Object>> getBizTypeListByGroup(String group) {
return Arrays.stream(BizType.values()).filter(e -> e.group.equals(group)).map(e -> {
Map<String, Object> map = new HashMap<>();
map.put("key", e);
map.put("name", e.getName());
return map;
}).collect(Collectors.toList());
}
}
public String getBizTypeName() {
for (BizType c : BizType.values()) {
if (bizType != null && bizType.equals(c.name())) {
return c.getName();
}
}
return null;
}
public static void sortList(List<JgBizCountBaseVo> list, String sortByField, String sortOrder) {
Comparator<JgBizCountBaseVo> comparator;
switch (sortByField) {
case "launchesNumber":
comparator = Comparator.comparingLong(JgBizCountBaseVo::getLaunchesNumber);
break;
case "finishedNumber":
comparator = Comparator.comparingLong(JgBizCountBaseVo::getFinishedNumber);
break;
default:
// 默认按 launchesNumber 字段排序
comparator = Comparator.comparingLong(JgBizCountBaseVo::getLaunchesNumber);
break;
}
if ("desc".equalsIgnoreCase(sortOrder)) {
comparator = comparator.reversed();
}
list.sort(comparator);
}
}
package com.yeejoin.amos.boot.module.jg.api.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.Comparator;
import java.util.List;
import java.util.UUID;
/**
* @author shg
*/
@Data
@ApiModel("监管业务办理统计基础对象")
public class JgBizEquipStateCountVo implements Serializable {
public JgBizEquipStateCountVo() {
this.id = UUID.randomUUID().toString();
}
private String id;
@ApiModelProperty("地市管辖机构")
private String cityManagementUnitName;
@ApiModelProperty("区县管辖机构")
private String countyManagementUnitName;
@ApiModelProperty("直接管辖机构")
private String managementUnitName;
@ApiModelProperty("设备种类")
private String equListName;
@ApiModelProperty("设备类别")
private String equCategoryName;
@ApiModelProperty("设备品种")
private String equDefineName;
@ApiModelProperty("总数设备数量")
private Long totalNumber;
@ApiModelProperty("在用设备数量")
private Long inUseNumber;
@ApiModelProperty("停用设备数量")
private Long stopUseNumber;
@ApiModelProperty("报废注销数量")
private Long scrapCancel;
public static void sortList(List<JgBizEquipStateCountVo> list, String sortByField, String sortOrder) {
Comparator<JgBizEquipStateCountVo> comparator;
switch (sortByField) {
case "totalNumber":
comparator = Comparator.comparingLong(JgBizEquipStateCountVo::getTotalNumber);
break;
case "inUseNumber":
comparator = Comparator.comparingLong(JgBizEquipStateCountVo::getInUseNumber);
break;
case "scrapCancel":
comparator = Comparator.comparingLong(JgBizEquipStateCountVo::getScrapCancel);
break;
case "stopUseNumber":
comparator = Comparator.comparingLong(JgBizEquipStateCountVo::getStopUseNumber);
break;
default:
// 默认按 launchesNumber 字段排序
comparator = Comparator.comparingLong(JgBizEquipStateCountVo::getTotalNumber);
break;
}
if ("desc".equalsIgnoreCase(sortOrder)) {
comparator = comparator.reversed();
}
list.sort(comparator);
}
}
......@@ -354,4 +354,472 @@
</foreach>
limit 1
</select>
<sql id="notice-query-where">
<where>
n.sequence_nbr = ne.equip_transfer_id
and n.notice_status != '6610'
and n.notice_status != '6615'
<if test="param.beginDate != null">
and n.notice_date >= #{param.beginDate}
</if>
<if test="param.endDate != null">
and n.notice_date <![CDATA[ <= ]]> #{param.endDate}
</if>
<if test="param.receiveOrgCode != null">
and n.receive_company_org_code like concat(#{param.receiveOrgCode}, '%')
</if>
</where>
</sql>
<select id="queryForNoticeCountData" resultType="com.yeejoin.amos.boot.module.jg.api.bo.JgBizCountDataBO">
select
*
from
(select
'installNotice' as bizType,
count(1) as num,
u.status,
u."equList",
u."equCategory",
u."equDefine",
u."receiveCompanyCode"
from
(select
a.sequence_nbr,
a.status,
a.receiveCompanyCode,
r."EQU_LIST" as equList,
r."EQU_CATEGORY" as equCategory,
r."EQU_DEFINE" as equDefine
from
(SELECT
n.sequence_nbr,
n.notice_status as status,
ne.equ_id,
n.receive_org_credit_code as receiveCompanyCode,
n.receive_org_name as receiveCompanyName,
n.notice_date as commitDate
FROM
"tzs_jg_installation_notice" n,
"tzs_jg_installation_notice_eq" ne
<include refid="notice-query-where" />
) a,
idx_biz_jg_register_info r
where a.equ_id = r."RECORD") u
GROUP BY u.status,
u."equList",
u."equCategory",
u."equDefine",
u."receiveCompanyCode"
union
select
'maintainNotice' as bizType,
count(1) as num,
u.status,
u."equList",
u."equCategory",
u."equDefine",
u."receiveCompanyCode"
from
(select
a.sequence_nbr,
a.status,
a.receiveCompanyCode,
r."EQU_LIST" as equList,
r."EQU_CATEGORY" as equCategory,
r."EQU_DEFINE" as equDefine
from
(SELECT
n.sequence_nbr,
n.notice_status as status,
ne.equ_id,
n.receive_company_code as receiveCompanyCode,
n.receive_org_name as receiveCompanyName,
n.notice_date as commitDate
FROM
"tzs_jg_maintain_notice" n,
"tzs_jg_maintain_notice_eq" ne
<include refid="notice-query-where" />
) a,
idx_biz_jg_register_info r
where a.equ_id = r."RECORD") u
GROUP BY u.status,
u."equList",
u."equCategory",
u."equDefine",
u."receiveCompanyCode"
union
select
'reformNotice' as bizType,
count(1) as num,
u.status,
u."equList",
u."equCategory",
u."equDefine",
u."receiveCompanyCode"
from
(select
a.sequence_nbr,
a.status,
a.receiveCompanyCode,
r."EQU_LIST" as equList,
r."EQU_CATEGORY" as equCategory,
r."EQU_DEFINE" as equDefine
from
(SELECT
n.sequence_nbr,
n.notice_status as status,
ne.equ_id,
n.receive_company_code as receiveCompanyCode,
n.receive_org_name as receiveCompanyName,
n.notice_date as commitDate
FROM
"tzs_jg_reform_notice" n,
"tzs_jg_reform_notice_eq" ne
<include refid="notice-query-where" />
) a,
idx_biz_jg_register_info r
where a.equ_id = r."RECORD") u
GROUP BY u.status,
u."equList",
u."equCategory",
u."equDefine",
u."receiveCompanyCode"
union
select
'transferNotice' as bizType,
count(1) as num,
u.status,
u."equList",
u."equCategory",
u."equDefine",
u."receiveCompanyCode"
from
(select
a.sequence_nbr,
a.status,
a.receiveCompanyCode,
r."EQU_LIST" as equList,
r."EQU_CATEGORY" as equCategory,
r."EQU_DEFINE" as equDefine
from
(SELECT
n.sequence_nbr,
n.notice_status as status,
ne.equ_id,
n.receive_company_code as receiveCompanyCode,
n.receive_org_name as receiveCompanyName,
n.notice_date as commitDate
FROM
"tzs_jg_transfer_notice" n,
"tzs_jg_transfer_notice_eq" ne
<include refid="notice-query-where" />
) a,
idx_biz_jg_register_info r
where a.equ_id = r."RECORD") u
GROUP BY u.status,
u."equList",
u."equCategory",
u."equDefine",
u."receiveCompanyCode")
<where>
<if test="param.bizType != null and param.bizType !=''">
and bizType = #{param.bizType}
</if>
<if test="param.equList != null and param.equList !=''">
and equList = #{param.equList}
</if>
<if test="param.equCategory != null and param.equCategory !=''">
and equCategory = #{param.equCategory}
</if>
<if test="param.equDefine != null and param.equDefine !=''">
and equDefine = #{param.equDefine}
</if>
</where>
</select>
<select id="queryJGCompanyCodeName" resultType="com.yeejoin.amos.boot.biz.common.bo.CompanyBo">
SELECT
sequence_nbr,
company_name,
company_code,
org_code,
parent_id
FROM "privilege_company"
where
level != 'company'
and is_deleted = false
<if test="orgCode !=null and orgCode != ''">
and org_code Like concat(#{orgCode}, '%')
</if>
</select>
<sql id="equ-filter">
<if test="param.equList != null and param.equList !=''">
and r."EQU_LIST" = #{param.equList}
</if>
<if test="param.equCategory != null and param.equCategory !=''">
and r."EQU_CATEGORY" = #{param.equCategory}
</if>
<if test="param.equDefine != null and param.equDefine !=''">
and r."EQU_DEFINE" = #{param.equDefine}
</if>
</sql>
<select id="queryForMaintenanceCountData" resultType="com.yeejoin.amos.boot.module.jg.api.bo.JgBizCountDataBO">
select
'maintenanceContract' as bizType,
count(1) as num,
u.status,
u."equList",
u."equCategory",
u."equDefine",
u."receiveCompanyCode"
from
(select
a.sequence_nbr,
a.status,
a.receiveCompanyCode,
r."EQU_LIST" as equList,
r."EQU_CATEGORY" as equCategory,
r."EQU_DEFINE" as equDefine
from
(SELECT
n.sequence_nbr,
n.status,
ne.equ_id,
n.receive_org_code as receiveCompanyCode,
n.apply_date as commitDate
FROM
"tzs_jg_maintenance_contract" n,
"tzs_jg_maintenance_contract_eq" ne
where
n.sequence_nbr = ne.equip_transfer_id
and n.status != '使用单位待提交'
and n.status != '使用单位已撤回'
<if test="param.beginDate != null">
and date_ge(CAST(n.create_date as date), #{param.beginDate})
</if>
<if test="param.endDate != null">
and date_le(CAST(n.create_date as date), #{param.endDate})
</if>
<if test="param.receiveOrgCode != null">
and n.receive_company_org_code like concat(#{param.receiveOrgCode}, '%')
</if>
) a,
idx_biz_jg_register_info r
where
a.equ_id = r."RECORD"
<include refid="equ-filter"/>
) u
GROUP BY u.status,
u."equList",
u."equCategory",
u."equDefine",
u."receiveCompanyCode"
</select>
<select id="queryForRegisterCountData" resultType="com.yeejoin.amos.boot.module.jg.api.bo.JgBizCountDataBO">
select
*
from (
select
'useRegistration' as bizType,
count(1) as num,
u.status,
u."equList",
u."equCategory",
u."equDefine",
u."receiveCompanyCode"
from
(select
a.sequence_nbr,
a.status,
a.receiveCompanyCode,
r."EQU_LIST" as equList,
r."EQU_CATEGORY" as equCategory,
r."EQU_DEFINE" as equDefine
from
(SELECT
n.sequence_nbr,
n.status,
ne.equ_id,
n.receive_company_code as receiveCompanyCode,
n.receive_org_name as receiveCompanyName,
n.reg_date as commitDate
FROM
"tzs_jg_use_registration" n,
"tzs_jg_use_registration_eq" ne
where
n.sequence_nbr = ne.equip_transfer_id
and n.status != '使用单位待提交'
and n.status != '使用单位已撤回'
<if test="param.beginDate != null">
and date_ge(CAST(n.reg_date as date), #{param.beginDate})
</if>
<if test="param.endDate != null">
and date_le(CAST(n.reg_date as date), #{param.endDate})
</if>
<if test="param.receiveOrgCode != null">
and n.receive_company_org_code like concat(#{param.receiveOrgCode}, '%')
</if>) a,
idx_biz_jg_register_info r
where
a.equ_id = r."RECORD"
<include refid="equ-filter"/>) u
GROUP BY u.status,
u."equList",
u."equCategory",
u."equDefine",
u."receiveCompanyCode"
UNION
select
'reformRegistration' as bizType,
count(1) as num,
u.status,
u."equList",
u."equCategory",
u."equDefine",
u."receiveCompanyCode"
from
(select
a.sequence_nbr,
a.status,
a.receiveCompanyCode,
r."EQU_LIST" as equList,
r."EQU_CATEGORY" as equCategory,
r."EQU_DEFINE" as equDefine
from
(SELECT
n.sequence_nbr,
n.status,
ne.equ_id,
n.receive_company_code as receiveCompanyCode,
n.receive_org_name as receiveCompanyName,
n.reg_date as commitDate
FROM
"tzs_jg_change_registration_reform" n,
"tzs_jg_change_registration_reform_eq" ne
where
n.sequence_nbr = ne.equip_transfer_id
and n.audit_status != '使用单位待提交'
and n.audit_status != '使用单位已撤回'
<if test="param.beginDate != null">
and date_ge(CAST(n.reg_date as date), #{param.beginDate})
</if>
<if test="param.endDate != null">
and date_le(CAST(n.reg_date as date), #{param.endDate})
</if>
<if test="param.receiveOrgCode != null">
and n.receive_company_org_code like concat(#{param.receiveOrgCode}, '%')
</if>) a,
idx_biz_jg_register_info r
where a.equ_id = r."RECORD"
<include refid="equ-filter"/>) u
GROUP BY u.status,
u."equList",
u."equCategory",
u."equDefine",
u."receiveCompanyCode"
UNION
select
'transferRegistration' as bizType,
count(1) as num,
u.status,
u."equList",
u."equCategory",
u."equDefine",
u."receiveCompanyCode"
from
(select
a.sequence_nbr,
a.status,
a.receiveCompanyCode,
r."EQU_LIST" as equList,
r."EQU_CATEGORY" as equCategory,
r."EQU_DEFINE" as equDefine
from
(SELECT
n.sequence_nbr,
n.status,
ne.equ_id,
n.receive_org_code as receiveCompanyCode,
n.receive_org_name as receiveCompanyName,
n.reg_date as commitDate
FROM
"tzs_jg_change_registration_transfer" n,
"tzs_jg_change_registration_transfer_eq" ne
where
n.sequence_nbr = ne.equip_transfer_id
and n.audit_status != '使用单位待提交'
and n.audit_status != '使用单位已撤回'
<if test="param.beginDate != null">
and date_ge(CAST(n.reg_date as date), #{param.beginDate})
</if>
<if test="param.endDate != null">
and date_le(CAST(n.reg_date as date), #{param.endDate})
</if>
<if test="param.receiveOrgCode != null">
and n.receive_company_org_code like concat(#{param.receiveOrgCode}, '%')
</if>) a,
idx_biz_jg_register_info r
where
a.equ_id = r."RECORD"
<include refid="equ-filter"/>) u
GROUP BY u.status,
u."equList",
u."equCategory",
u."equDefine",
u."receiveCompanyCode"
UNION
select
'unitRegistration' as bizType,
count(1) as num,
u.status,
u."equList",
u."equCategory",
u."equDefine",
u."receiveCompanyCode"
from
(select
a.sequence_nbr,
a.status,
a.receiveCompanyCode,
r."EQU_LIST" as equList,
r."EQU_CATEGORY" as equCategory,
r."EQU_DEFINE" as equDefine
from
(SELECT
n.sequence_nbr,
n.status,
ne.equ_id,
n.receive_org_code as receiveCompanyCode,
n.receive_org_name as receiveCompanyName,
n.apply_date as commitDate
FROM
"tzs_jg_change_registration_unit" n,
"tzs_jg_change_registration_unit_eq" ne
where
n.sequence_nbr = ne.unit_change_registration_id
and n.status != '使用单位待提交'
and n.status != '使用单位已撤回'
<if test="param.beginDate != null">
and date_ge(CAST(n.apply_date as date), #{param.beginDate})
</if>
<if test="param.endDate != null">
and date_le(CAST(n.apply_date as date), #{param.endDate})
</if>
<if test="param.receiveOrgCode != null">
and n.receive_company_org_code like concat(#{param.receiveOrgCode}, '%')
</if>) a,
idx_biz_jg_register_info r
where a.equ_id = r."RECORD"
<include refid="equ-filter"/>) u
GROUP BY u.status,
u."equList",
u."equCategory",
u."equDefine",
u."receiveCompanyCode"
)
<where>
<if test="param.bizType != null and param.bizType !=''">
bizType = #{param.bizType}
</if>
</where>
</select>
</mapper>
package com.yeejoin.amos.boot.module.jg.biz.controller;
import com.yeejoin.amos.boot.biz.common.bo.CompanyBo;
import com.yeejoin.amos.boot.biz.common.controller.BaseController;
import com.yeejoin.amos.boot.module.jg.api.dto.ReportAnalysisSearchDTO;
import com.yeejoin.amos.boot.module.jg.api.service.IReportAnalysisService;
import com.yeejoin.amos.boot.module.jg.api.vo.JgBizCountBaseVo;
import com.yeejoin.amos.boot.module.jg.api.vo.JgBizEquipStateCountVo;
import com.yeejoin.amos.boot.module.ymt.api.common.StringUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.typroject.tyboot.core.foundation.enumeration.UserType;
import org.typroject.tyboot.core.restful.doc.TycloudOperation;
import org.typroject.tyboot.core.restful.utils.ResponseHelper;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import java.util.List;
import java.util.Map;
/**
* @author Administrator
*/
@RestController
@RequestMapping(value = "/report-analysis")
@Api(tags = "报表分析")
public class ReportAnalysisController extends BaseController {
private IReportAnalysisService reportAnalysisService;
public ReportAnalysisController(IReportAnalysisService reportAnalysisService) {
this.reportAnalysisService = reportAnalysisService;
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/notice/count/list")
@ApiOperation("告知类业务办理情况统计列表")
public ResponseModel<List<JgBizCountBaseVo>> getNoticeCountList(ReportAnalysisSearchDTO reportAnalysisSearchDTO) {
//设置默认数据权限过滤条件
this.setDefaultFilterParam(reportAnalysisSearchDTO);
List<JgBizCountBaseVo> result = reportAnalysisService.getNoticeCountList(reportAnalysisSearchDTO);
return ResponseHelper.buildResponse(result);
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/maintenance/count/list")
@ApiOperation("维保备案业务办理情况统计列表")
public ResponseModel<List<JgBizCountBaseVo>> getMaintenanceCountList(ReportAnalysisSearchDTO reportAnalysisSearchDTO) {
//设置默认数据权限过滤条件
this.setDefaultFilterParam(reportAnalysisSearchDTO);
List<JgBizCountBaseVo> result = reportAnalysisService.getMaintenanceCountList(reportAnalysisSearchDTO);
return ResponseHelper.buildResponse(result);
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/register/count/list")
@ApiOperation("登记类业务办理情况统计列表")
public ResponseModel<List<JgBizCountBaseVo>> getRegisterCountList(ReportAnalysisSearchDTO reportAnalysisSearchDTO) {
//设置默认数据权限过滤条件
this.setDefaultFilterParam(reportAnalysisSearchDTO);
List<JgBizCountBaseVo> result = reportAnalysisService.getRegisterCountList(reportAnalysisSearchDTO);
return ResponseHelper.buildResponse(result);
}
@TycloudOperation(ApiLevel = UserType.AGENCY, needAuth = false)
@GetMapping(value = "/equip-status/count/list")
@ApiOperation("设备状态情况统计列表")
public ResponseModel<List<JgBizEquipStateCountVo>> getEquipStatusCountList(ReportAnalysisSearchDTO reportAnalysisSearchDTO) {
//设置默认数据权限过滤条件
this.setDefaultFilterParam(reportAnalysisSearchDTO);
List<JgBizEquipStateCountVo> result = reportAnalysisService.getEquipStatusCountList(reportAnalysisSearchDTO);
return ResponseHelper.buildResponse(result);
}
private void setDefaultFilterParam(ReportAnalysisSearchDTO reportAnalysisSearchDTO){
if(StringUtils.isEmpty(reportAnalysisSearchDTO.getReceiveOrgCode())){
reportAnalysisSearchDTO.setReceiveOrgCode(getSelectedOrgInfo().getCompany().getOrgCode());
}
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/receive-company/tree")
@ApiOperation("查询当前登录人的管辖机构树,显示本级及所有下级")
public ResponseModel<List<CompanyBo>> getReceiveCompanyTreeWithAuth() {
List<CompanyBo> result = reportAnalysisService.getReceiveCompanyTreeWithAuth(getSelectedOrgInfo());
return ResponseHelper.buildResponse(result);
}
@TycloudOperation(ApiLevel = UserType.AGENCY)
@GetMapping(value = "/biz-type/list")
@ApiOperation("业务类型枚举")
public ResponseModel<List<Map<String,Object>>> getBizTypeList(@RequestParam String group) {
List<Map<String,Object>> result = reportAnalysisService.getBizTypeList(group);
return ResponseHelper.buildResponse(result);
}
}
......@@ -43,6 +43,8 @@ public class ApplicationRunnerImpl implements ApplicationRunner {
private JgChangeRegistrationNameServiceImpl changeRegistrationNameService;
private ReportAnalysisServiceImpl reportAnalysisService;
public ApplicationRunnerImpl(JgUseRegistrationServiceImpl useRegistrationService,
CommonServiceImpl commonService,
JgInstallationNoticeServiceImpl installationNoticeService,
......@@ -56,7 +58,8 @@ public class ApplicationRunnerImpl implements ApplicationRunner {
JgEnableDisableServiceImpl jgEnableDisableService,
JgMaintenanceContractServiceImpl maintenanceContractService,
JgScrapCancelServiceImpl scrapCancelService,
JgChangeRegistrationNameServiceImpl changeRegistrationNameService) {
JgChangeRegistrationNameServiceImpl changeRegistrationNameService,
ReportAnalysisServiceImpl reportAnalysisService) {
this.commonService = commonService;
this.useRegistrationService = useRegistrationService;
......@@ -84,6 +87,8 @@ public class ApplicationRunnerImpl implements ApplicationRunner {
this.scrapCancelService = scrapCancelService;
this.changeRegistrationNameService =changeRegistrationNameService;
this.reportAnalysisService = reportAnalysisService;
}
......@@ -167,5 +172,8 @@ public class ApplicationRunnerImpl implements ApplicationRunner {
jgChangeRegistrationNames.forEach(registrationName -> {
commonService.saveExecuteFlowData2Redis(registrationName.getInstanceId(), changeRegistrationNameService.buildInstanceRuntimeData(registrationName));
});
// 统计接收机构树 根节点缓存预热
reportAnalysisService.initRootOrgReceiveTree2Redis();
}
}
package com.yeejoin.amos.boot.module.jg.biz.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yeejoin.amos.boot.biz.common.bo.CompanyBo;
import com.yeejoin.amos.boot.biz.common.bo.ReginParams;
import com.yeejoin.amos.boot.biz.common.utils.RedisUtils;
import com.yeejoin.amos.boot.module.jg.api.bo.JgBizCountDataBO;
import com.yeejoin.amos.boot.module.jg.api.common.StringUtil;
import com.yeejoin.amos.boot.module.jg.api.dto.JgBizCountDataDto;
import com.yeejoin.amos.boot.module.jg.api.dto.ReportAnalysisSearchDTO;
import com.yeejoin.amos.boot.module.jg.api.mapper.CommonMapper;
import com.yeejoin.amos.boot.module.jg.api.service.IReportAnalysisService;
import com.yeejoin.amos.boot.module.jg.api.vo.JgBizCountBaseVo;
import com.yeejoin.amos.boot.module.jg.api.vo.JgBizEquipStateCountVo;
import com.yeejoin.amos.boot.module.ymt.api.entity.EquipmentCategory;
import com.yeejoin.amos.boot.module.ymt.api.enums.FlowStatusEnum;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.lucene.queryparser.classic.QueryParser;
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.script.Script;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.typroject.tyboot.core.foundation.utils.Bean;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import javax.annotation.PostConstruct;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author Administrator
*/
@Service
@Slf4j
public class ReportAnalysisServiceImpl implements IReportAnalysisService {
private CommonMapper commonMapper;
private RestHighLevelClient restHighLevelClient;
private Map<String, String> codeNameMap;
private Map<String, String> companyCodeNameMap;
private Map<String, String> orgCodeNameMap;
private RedisUtils redisUtils;
private String RECEIVE_COUNT_SEARCH_REDIS_KEY = "RECEIVE_COUNT_SEARCH_REDIS_KEY";
@Value("${sx.province.org.code:50}")
private String rootOrgCode;
/**
* 维保备案已发起统计数据范围
*/
private List<String> mainLaunchesStatusList = Arrays.asList("维保单位已撤回", "维保单位已驳回", "维保单位待受理", "监管单位已驳回", "监管单位待受理", "已完成");
/**
* 使用登记已发起统计数据范围
*/
private List<String> registerLaunchesStatusList = Arrays.asList("一级待受理", "一级受理已驳回", "一级受理已撤回", "二级待受理", "二级受理已驳回", "二级受理已撤回", "三级待受理", "三级受理已驳回", "已完成");
public ReportAnalysisServiceImpl(CommonMapper commonMapper, RestHighLevelClient restHighLevelClient, RedisUtils redisUtils) {
this.commonMapper = commonMapper;
this.restHighLevelClient = restHighLevelClient;
this.redisUtils = redisUtils;
}
@PostConstruct
private void init() {
// 缓存设备分类信息
initEquipCategoryCache();
// 缓存公司信息:待优化缓存 保障可以不需要重启
initCompanyCache();
}
/**
* 缓存根节点的数据的接收机构数据
*/
public void initRootOrgReceiveTree2Redis() {
getCompanyBos(rootOrgCode);
}
private void initEquipCategoryCache() {
LambdaQueryWrapper<EquipmentCategory> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.select(EquipmentCategory::getCode, EquipmentCategory::getName);
List<EquipmentCategory> equipmentCategoryList = commonMapper.selectList(queryWrapper);
codeNameMap = equipmentCategoryList.stream().collect(Collectors.toMap(EquipmentCategory::getCode, EquipmentCategory::getName));
}
private void initCompanyCache() {
List<CompanyBo> companyBos = commonMapper.queryJGCompanyCodeName(null);
companyCodeNameMap = companyBos.stream().collect(Collectors.toMap(CompanyBo::getCompanyCode, CompanyBo::getCompanyName, (k1, k2) -> k2));
orgCodeNameMap = companyBos.stream().collect(Collectors.toMap(CompanyBo::getOrgCode, CompanyBo::getCompanyName, (k1, k2) -> k2));
}
@Override
public List<JgBizCountBaseVo> getNoticeCountList(ReportAnalysisSearchDTO reportAnalysisSearchDTO) {
List<JgBizCountDataBO> countDataBOList = commonMapper.queryForNoticeCountData(reportAnalysisSearchDTO);
List<JgBizCountBaseVo> result = combineCountData(countDataBOList);
sortData(result, reportAnalysisSearchDTO);
filledCommonCountSummaryRow(result);
return result;
}
private void sortData(List<JgBizCountBaseVo> countBaseVoList, ReportAnalysisSearchDTO reportAnalysisSearchDTO) {
JgBizCountBaseVo.sortList(countBaseVoList, reportAnalysisSearchDTO.getSortField(), reportAnalysisSearchDTO.getSortOrder());
}
@Override
public List<JgBizCountBaseVo> getRegisterCountList(ReportAnalysisSearchDTO reportAnalysisSearchDTO) {
List<JgBizCountDataBO> countDataBOList = commonMapper.queryForRegisterCountData(reportAnalysisSearchDTO);
List<JgBizCountBaseVo> result = combineRegisterCountData(countDataBOList);
sortData(result, reportAnalysisSearchDTO);
filledCommonCountSummaryRow(result);
return result;
}
private List<JgBizCountBaseVo> combineCountData(List<JgBizCountDataBO> countDataBOList) {
// 去重
Set<JgBizCountDataDto> countVoSet = distinctJgBizCountDataDtos(countDataBOList);
// 已去重行数据为集合,填充每种流程状态下单据的数量及将code->name
return countVoSet.stream().map(c -> {
JgBizCountBaseVo vo = new JgBizCountBaseVo();
vo.setBizGroup("施工告知");
vo.setBizType(c.getBizType());
vo.setReceiveCompanyName(companyCodeNameMap.get(c.getReceiveCompanyCode()));
vo.setEquListName(getEquipCategoryNameByCode(c.getEquList()));
vo.setEquCategoryName(getEquipCategoryNameByCode(c.getEquCategory()));
vo.setEquDefineName(getEquipCategoryNameByCode(c.getEquDefine()));
vo.setFinishedNumber(this.countDocumentNum(countDataBOList, FlowStatusEnum.TO_BE_FINISHED.getCode(), c));
// 已发起: 已完成 + 待受理
vo.setLaunchesNumber(this.countDocumentNum(countDataBOList, FlowStatusEnum.TO_BE_PROCESSED.getCode(), c) + vo.getFinishedNumber());
return vo;
}).collect(Collectors.toList());
}
private Set<JgBizCountDataDto> distinctJgBizCountDataDtos(List<JgBizCountDataBO> countDataBOList) {
return countDataBOList.stream().map(c -> {
JgBizCountDataDto target = new JgBizCountDataDto();
Bean.copyExistPropertis(c, target);
return target;
}).collect(Collectors.toSet());
}
private Long countDocumentNum(List<JgBizCountDataBO> countDataBOList, int code, JgBizCountDataDto c) {
return countDataBOList.stream().filter(d -> Objects.equals(d.getReceiveCompanyCode(), c.getReceiveCompanyCode()) &&
Objects.equals(d.getEquList(), c.getEquList()) && Objects.equals(d.getEquCategory(), c.getEquCategory()) &&
Objects.equals(d.getEquCategory(), c.getEquCategory()) &&
Objects.equals(d.getBizType(), c.getBizType()) &&
d.getStatus().equals(String.valueOf(code))).mapToLong(JgBizCountDataBO::getNum).sum();
}
private Long countDocumentNum(List<JgBizCountDataBO> countDataBOList, List<String> statusList, JgBizCountDataDto c) {
return countDataBOList.stream().filter(d -> Objects.equals(d.getReceiveCompanyCode(), c.getReceiveCompanyCode()) &&
Objects.equals(d.getEquList(), c.getEquList()) && Objects.equals(d.getEquCategory(), c.getEquCategory()) &&
Objects.equals(d.getEquCategory(), c.getEquCategory()) &&
Objects.equals(d.getBizType(), c.getBizType()) &&
statusList.contains(d.getStatus())).mapToLong(JgBizCountDataBO::getNum).sum();
}
private String getEquipCategoryNameByCode(String code) {
return StringUtil.isNotEmpty(code) ? codeNameMap.get(code) : "";
}
@Override
public List<JgBizCountBaseVo> getMaintenanceCountList(ReportAnalysisSearchDTO reportAnalysisSearchDTO) {
List<JgBizCountDataBO> countDataBOList = commonMapper.queryForMaintenanceCountData(reportAnalysisSearchDTO);
List<JgBizCountBaseVo> result = combineMaintenanceCountData(countDataBOList);
sortData(result, reportAnalysisSearchDTO);
filledCommonCountSummaryRow(result);
return result;
}
private void filledCommonCountSummaryRow(List<JgBizCountBaseVo> result) {
if (result.size() > 0) {
JgBizCountBaseVo summaryRow = new JgBizCountBaseVo();
summaryRow.setFinishedNumber(result.stream().mapToLong(JgBizCountBaseVo::getFinishedNumber).sum());
summaryRow.setLaunchesNumber(result.stream().mapToLong(JgBizCountBaseVo::getLaunchesNumber).sum());
result.add(summaryRow);
}
}
private List<JgBizCountBaseVo> combineMaintenanceCountData(List<JgBizCountDataBO> countDataBOList) {
// 去重
Set<JgBizCountDataDto> countVoSet = distinctJgBizCountDataDtos(countDataBOList);
// 已去重行数据为集合,填充每种流程状态下单据的数量及将code->name
return countVoSet.stream().map(c -> {
JgBizCountBaseVo vo = new JgBizCountBaseVo();
vo.setBizGroup("维保备案");
return buildJgBizCountBaseVo(countDataBOList, c, vo, mainLaunchesStatusList);
}).collect(Collectors.toList());
}
private List<JgBizCountBaseVo> combineRegisterCountData(List<JgBizCountDataBO> countDataBOList) {
// 去重
Set<JgBizCountDataDto> countVoSet = distinctJgBizCountDataDtos(countDataBOList);
// 已去重行数据为集合,填充每种流程状态下单据的数量及将code->name
return countVoSet.stream().map(c -> {
JgBizCountBaseVo vo = new JgBizCountBaseVo();
vo.setBizGroup("使用登记");
return buildJgBizCountBaseVo(countDataBOList, c, vo, registerLaunchesStatusList);
}).collect(Collectors.toList());
}
private JgBizCountBaseVo buildJgBizCountBaseVo(List<JgBizCountDataBO> countDataBOList, JgBizCountDataDto c, JgBizCountBaseVo vo, List<String> registerLaunchesStatusList) {
vo.setBizType(c.getBizType());
vo.setReceiveCompanyName(companyCodeNameMap.get(c.getReceiveCompanyCode()));
vo.setEquListName(getEquipCategoryNameByCode(c.getEquList()));
vo.setEquCategoryName(getEquipCategoryNameByCode(c.getEquCategory()));
vo.setEquDefineName(getEquipCategoryNameByCode(c.getEquDefine()));
vo.setFinishedNumber(this.countDocumentNum(countDataBOList, Collections.singletonList(FlowStatusEnum.TO_BE_FINISHED.getName()), c));
vo.setLaunchesNumber(this.countDocumentNum(countDataBOList, registerLaunchesStatusList, c));
return vo;
}
@Override
public List<JgBizEquipStateCountVo> getEquipStatusCountList(ReportAnalysisSearchDTO reportAnalysisSearchDT) {
if (StringUtils.isEmpty(reportAnalysisSearchDT.getReceiveOrgCode())) {
throw new BadRequest("单位不能为空");
}
SearchRequest searchRequest = new SearchRequest("idx_biz_view_jg_all");
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
BoolQueryBuilder boolMust = QueryBuilders.boolQuery();
// 前端筛选条件过滤
this.buildRequestSearchParam(reportAnalysisSearchDT, boolMust);
// 数据权限过滤
this.buildPermissionLimit(reportAnalysisSearchDT, boolMust);
// 设备范围过滤
this.jgEquipFilterQueryBuild(boolMust);
sourceBuilder.query(boolMust);
sourceBuilder.size(0);
// 由于java api查询的数据为镶套,非便扁平化数据,故将 设备状态 + 监管机构 + 设备种类 + 设备类别+ 设备品种 ,作为分组条件中间用 | 分割,注意顺序 解析时按照此字段顺序解析
Script script = new Script(Script.DEFAULT_SCRIPT_TYPE, Script.DEFAULT_SCRIPT_LANG, "if(doc['EQU_DEFINE_CODE.keyword'].size() != 0){ return doc['EQU_STATE'].value + '|' + doc['ORG_BRANCH_CODE.keyword'].value + '|' + doc['EQU_LIST_CODE'].value + '|' + doc['EQU_CATEGORY_CODE'].value + '|' + doc['EQU_DEFINE_CODE.keyword'].value} else { return doc['EQU_STATE'].value + '|' + doc['ORG_BRANCH_CODE.keyword'].value + '|' + doc['EQU_LIST_CODE'].value + '|' + doc['EQU_CATEGORY_CODE'].value + '|'}", new HashMap<>());
TermsAggregationBuilder aggregation = AggregationBuilders.terms("result").script(script);
sourceBuilder.aggregation(aggregation);
searchRequest.source(sourceBuilder);
try {
SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
Terms terms = searchResponse.getAggregations().get("result");
List<JgBizCountDataBO> jgBizCountDataBOList = new ArrayList<>();
for (Terms.Bucket bucket : terms.getBuckets()) {
JgBizCountDataBO bizCountData = esItemToVo(bucket);
jgBizCountDataBOList.add(bizCountData);
}
List<JgBizEquipStateCountVo> result = combineEquipStatusCountData(jgBizCountDataBOList);
equipStateSortData(result, reportAnalysisSearchDT);
filledEquipStateSummaryRow(result);
return result;
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return new ArrayList<>();
}
private void equipStateSortData(List<JgBizEquipStateCountVo> result, ReportAnalysisSearchDTO reportAnalysisSearchDT) {
JgBizEquipStateCountVo.sortList(result, reportAnalysisSearchDT.getSortField(), reportAnalysisSearchDT.getSortOrder());
}
private void filledEquipStateSummaryRow(List<JgBizEquipStateCountVo> result) {
if (result.size() > 0) {
JgBizEquipStateCountVo summaryRow = new JgBizEquipStateCountVo();
summaryRow.setTotalNumber(result.stream().mapToLong(JgBizEquipStateCountVo::getTotalNumber).sum());
summaryRow.setInUseNumber(result.stream().mapToLong(JgBizEquipStateCountVo::getInUseNumber).sum());
summaryRow.setScrapCancel(result.stream().mapToLong(JgBizEquipStateCountVo::getScrapCancel).sum());
summaryRow.setStopUseNumber(result.stream().mapToLong(JgBizEquipStateCountVo::getStopUseNumber).sum());
result.add(summaryRow);
}
}
@Override
public List<CompanyBo> getReceiveCompanyTreeWithAuth(ReginParams selectedOrgInfo) {
return getCompanyBos(selectedOrgInfo.getCompany().getOrgCode());
}
@Override
public List<Map<String, Object>> getBizTypeList(String groupKey) {
return JgBizCountBaseVo.BizType.getBizTypeListByGroup(groupKey);
}
private List<CompanyBo> getCompanyBos(String orgCode) {
List<CompanyBo> companyBoList = commonMapper.queryJGCompanyCodeName(orgCode);
synchronized (this) {
String redisKey = this.buildRedisKey(orgCode);
if (redisUtils.hasKey(redisKey)) {
return JSONObject.parseArray(redisUtils.get(redisKey).toString(), CompanyBo.class);
} else {
if (redisUtils.hasKey(redisKey)) {
return JSONObject.parseArray(redisUtils.get(redisKey).toString(), CompanyBo.class);
} else {
return setComTree2Redis(redisKey, comList2ComTree(companyBoList, orgCode));
}
}
}
}
private List<CompanyBo> setComTree2Redis(String redisKey, List<CompanyBo> comList2ComTree) {
redisUtils.set(redisKey, JSONObject.toJSONString(comList2ComTree), 10 * 60 * 60);
return comList2ComTree;
}
private String buildRedisKey(String currentPersonOrgCode) {
return RECEIVE_COUNT_SEARCH_REDIS_KEY + ":" + currentPersonOrgCode;
}
private List<CompanyBo> comList2ComTree(List<CompanyBo> companyBoList, String currentPersonOrgCode) {
return companyBoList.stream().filter(c -> c.getOrgCode().equals(currentPersonOrgCode)).peek(c -> c.setChildren(this.getComChild(c.getSequenceNbr(), companyBoList))).collect(Collectors.toList());
}
private List<CompanyBo> getComChild(Long parentId, List<CompanyBo> companyBoList) {
return companyBoList.stream().filter(c -> c.getParentId().equals(parentId)).peek(c -> c.setChildren(this.getComChild(c.getSequenceNbr(), companyBoList))).collect(Collectors.toList());
}
private void buildRequestSearchParam(ReportAnalysisSearchDTO reportAnalysisSearchDT, BoolQueryBuilder boolMust) {
if (StringUtils.isNotEmpty(reportAnalysisSearchDT.getEquList())) {
boolMust.must(QueryBuilders.termQuery("EQU_LIST_CODE", QueryParser.escape(reportAnalysisSearchDT.getEquList().toLowerCase())));
}
if (StringUtils.isNotEmpty(reportAnalysisSearchDT.getEquCategory())) {
boolMust.must(QueryBuilders.termQuery("EQU_CATEGORY_CODE", QueryParser.escape(reportAnalysisSearchDT.getEquCategory().toLowerCase())));
}
if (StringUtils.isNotEmpty(reportAnalysisSearchDT.getEquDefine())) {
boolMust.must(QueryBuilders.termQuery("EQU_DEFINE_CODE.keyword", QueryParser.escape(reportAnalysisSearchDT.getEquDefine().toLowerCase())));
}
}
private List<JgBizEquipStateCountVo> combineEquipStatusCountData(List<JgBizCountDataBO> countDataBOList) {
// 去重
Set<JgBizCountDataDto> countVoSet = distinctJgBizCountDataDtos(countDataBOList);
// 已去重行数据为集合,填充每种流程状态下单据的数量及将code->name
return countVoSet.stream().map(c -> {
JgBizEquipStateCountVo vo = new JgBizEquipStateCountVo();
// 此处注意:由于es 存放的org_code 非company_code
vo.setManagementUnitName(orgCodeNameMap.get(c.getReceiveCompanyCode()));
filledParentCompanyName(c, vo);
vo.setEquListName(getEquipCategoryNameByCode(c.getEquList()));
vo.setEquCategoryName(getEquipCategoryNameByCode(c.getEquCategory()));
vo.setEquDefineName(getEquipCategoryNameByCode(c.getEquDefine()));
// 设备状态: 1在用 2停用 3报废 4注销
vo.setTotalNumber(this.countDocumentNum(countDataBOList, Arrays.asList("1", "2"), c));
vo.setInUseNumber(this.countDocumentNum(countDataBOList, Collections.singletonList("1"), c));
vo.setStopUseNumber(this.countDocumentNum(countDataBOList, Collections.singletonList("2"), c));
vo.setScrapCancel(this.countDocumentNum(countDataBOList, Arrays.asList("3", "4"), c));
return vo;
}).collect(Collectors.toList());
}
private void filledParentCompanyName(JgBizCountDataDto c, JgBizEquipStateCountVo vo) {
// 直接上级(区县)
String parentOrgCode = c.getReceiveCompanyCode().substring(0, c.getReceiveCompanyCode().lastIndexOf("*"));
vo.setCountyManagementUnitName(orgCodeNameMap.get(parentOrgCode));
// 上上级(地市)
String parent2OrgCode = parentOrgCode.substring(0, parentOrgCode.lastIndexOf("*"));
vo.setCityManagementUnitName(orgCodeNameMap.get(parent2OrgCode));
}
private JgBizCountDataBO esItemToVo(Terms.Bucket bucket) {
// 设备状态 + 监管机构 + 设备种类 + 设备类别+ 设备品种
String keys = bucket.getKeyAsString();
String[] bizColumnsData = keys.split("\\|");
JgBizCountDataBO countDataBO = new JgBizCountDataBO();
countDataBO.setBizType("equipCount");
countDataBO.setStatus(bizColumnsData[0]);
countDataBO.setReceiveCompanyCode(bizColumnsData[1]);
countDataBO.setEquList(bizColumnsData[2]);
countDataBO.setEquCategory(bizColumnsData[3]);
countDataBO.setEquDefine(bizColumnsData[4]);
countDataBO.setNum(bucket.getDocCount());
return countDataBO;
}
private void buildPermissionLimit(ReportAnalysisSearchDTO reportAnalysisSearchDT, BoolQueryBuilder boolMust) {
//右模糊查询,上级看本级级下级数据
boolMust.must(QueryBuilders.matchPhrasePrefixQuery("ORG_BRANCH_CODE", reportAnalysisSearchDT.getReceiveOrgCode()));
}
/**
* 过滤设备
*
* @param boolMust 必输条件
*/
private void jgEquipFilterQueryBuild(BoolQueryBuilder boolMust) {
// 监管类型数据
boolMust.must(QueryBuilders.termQuery("DATA_SOURCE", "jg"));
// 设备状态存在
boolMust.must(QueryBuilders.existsQuery("EQU_STATE"));
// 被监管状态: 1在用 2停用 3报废 4注销
boolMust.must(QueryBuilders.rangeQuery("EQU_STATE").gte(1));
}
}
\ 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