Commit 511e15ba authored by chenhao's avatar chenhao

提交微型消防站和重点部位的优化项代码

parent 9e1cf2b1
package com.yeejoin.amos.boot.module.common.api.dto; package com.yeejoin.amos.boot.module.common.api.dto;
import java.util.Date;
import com.alibaba.excel.annotation.ExcelIgnore; import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.yeejoin.amos.boot.biz.common.dto.BaseDto; import com.yeejoin.amos.boot.biz.common.dto.BaseDto;
import com.yeejoin.amos.boot.module.common.api.excel.ExplicitConstraint;
import com.yeejoin.amos.boot.module.common.api.excel.CommonExplicitConstraint; import com.yeejoin.amos.boot.module.common.api.excel.CommonExplicitConstraint;
import com.yeejoin.amos.boot.module.common.api.excel.ExplicitConstraint;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import java.util.Date;
/** /**
* 微型消防站 * 微型消防站
* *
...@@ -38,6 +39,9 @@ public class FireStationDto extends BaseDto { ...@@ -38,6 +39,9 @@ public class FireStationDto extends BaseDto {
@ExcelProperty(value = "所在建筑", index = 1) @ExcelProperty(value = "所在建筑", index = 1)
@ApiModelProperty(value = "所在建筑物名称") @ApiModelProperty(value = "所在建筑物名称")
private String whereBuilding; private String whereBuilding;
@ExcelIgnore
private String parentBuildingId;
@ExcelProperty(value = "地址", index = 2) @ExcelProperty(value = "地址", index = 2)
@ApiModelProperty(value = "地址") @ApiModelProperty(value = "地址")
......
...@@ -37,6 +37,9 @@ public class KeySiteDto extends BaseDto implements Serializable{ ...@@ -37,6 +37,9 @@ public class KeySiteDto extends BaseDto implements Serializable{
@ApiModelProperty(value = "所属建筑id") @ApiModelProperty(value = "所属建筑id")
private Long buildingId; private Long buildingId;
@ApiModelProperty("当前所在建筑物id的所有父节点id")
private String parentBuildingId;
@ApiModelProperty(value = "所属建筑名称") @ApiModelProperty(value = "所属建筑名称")
private String buildingName; private String buildingName;
......
...@@ -37,6 +37,9 @@ public class FireStation extends BaseEntity { ...@@ -37,6 +37,9 @@ public class FireStation extends BaseEntity {
@ApiModelProperty(value = "所在建筑物名称") @ApiModelProperty(value = "所在建筑物名称")
private String whereBuilding; private String whereBuilding;
@ApiModelProperty("当前所在建筑物id的所有父节点id")
private String parentBuildingId;
@ApiModelProperty(value = "装备简要情况") @ApiModelProperty(value = "装备简要情况")
private String equipmentBrief; private String equipmentBrief;
......
...@@ -33,7 +33,7 @@ public class KeySite extends BaseEntity { ...@@ -33,7 +33,7 @@ public class KeySite extends BaseEntity {
*/ */
@TableField("belong_id") @TableField("belong_id")
private Long belongId; private Long belongId;
/** /**
* 所属单位/部门名称 * 所属单位/部门名称
...@@ -46,6 +46,12 @@ public class KeySite extends BaseEntity { ...@@ -46,6 +46,12 @@ public class KeySite extends BaseEntity {
@TableField("building_id") @TableField("building_id")
private Long buildingId; private Long buildingId;
/**
* 所属父节点的建筑id集合
*/
@TableField("parent_building_id")
private String parentBuildingId;
@TableField("building_name") @TableField("building_name")
private String buildingName; private String buildingName;
......
...@@ -4,8 +4,8 @@ import java.util.LinkedHashMap; ...@@ -4,8 +4,8 @@ import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import com.yeejoin.amos.boot.biz.common.bo.ReginParams;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
...@@ -14,6 +14,7 @@ import org.springframework.web.bind.annotation.RequestParam; ...@@ -14,6 +14,7 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.typroject.tyboot.core.restful.utils.ResponseModel; import org.typroject.tyboot.core.restful.utils.ResponseModel;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yeejoin.amos.boot.biz.common.bo.ReginParams;
import com.yeejoin.amos.boot.biz.common.feign.MultipartSupportConfig; import com.yeejoin.amos.boot.biz.common.feign.MultipartSupportConfig;
import com.yeejoin.amos.boot.module.common.api.dto.EquipmentIndexDto; import com.yeejoin.amos.boot.module.common.api.dto.EquipmentIndexDto;
import com.yeejoin.amos.boot.module.common.api.dto.PerfQuotaIotDTO; import com.yeejoin.amos.boot.module.common.api.dto.PerfQuotaIotDTO;
...@@ -367,4 +368,10 @@ public interface EquipFeignClient { ...@@ -367,4 +368,10 @@ public interface EquipFeignClient {
//获取消防装备权限 //获取消防装备权限
@RequestMapping(value = "/equipment-detail/permissions/export", method = RequestMethod.GET) @RequestMapping(value = "/equipment-detail/permissions/export", method = RequestMethod.GET)
ResponseModel<ReginParams> getPermissions() ; ResponseModel<ReginParams> getPermissions() ;
@RequestMapping(value = "/building/getBuildingList", method = RequestMethod.GET)
ResponseModel<List<Map<String, Object>>> getBuildingTreeList();
@RequestMapping(value = "/building/companyBuildingTree", method = RequestMethod.GET)
public ResponseModel<Object> getCompanyBuildingTree();
} }
...@@ -58,4 +58,6 @@ public interface FireStationMapper extends BaseMapper<FireStation> { ...@@ -58,4 +58,6 @@ public interface FireStationMapper extends BaseMapper<FireStation> {
Integer getStationListCount(@Param("par")RequestData par); Integer getStationListCount(@Param("par")RequestData par);
FireStationDto getFireStationDetails(Long id); FireStationDto getFireStationDetails(Long id);
List<Map<String, Object>> getfireStatioCount(String bizOrgCode);
} }
package com.yeejoin.amos.boot.module.common.api.mapper; package com.yeejoin.amos.boot.module.common.api.mapper;
import java.util.List;
import java.util.Map;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
...@@ -7,9 +10,6 @@ import com.yeejoin.amos.boot.module.common.api.dto.KeySiteDateDto; ...@@ -7,9 +10,6 @@ import com.yeejoin.amos.boot.module.common.api.dto.KeySiteDateDto;
import com.yeejoin.amos.boot.module.common.api.dto.KeySiteDto; import com.yeejoin.amos.boot.module.common.api.dto.KeySiteDto;
import com.yeejoin.amos.boot.module.common.api.entity.KeySite; import com.yeejoin.amos.boot.module.common.api.entity.KeySite;
import java.util.List;
import java.util.Map;
/** /**
* 重点部位 Mapper 接口 * 重点部位 Mapper 接口
* *
...@@ -40,4 +40,11 @@ public KeySiteDto getSequenceNbr(Long sequenceNbr); ...@@ -40,4 +40,11 @@ public KeySiteDto getSequenceNbr(Long sequenceNbr);
public List<KeySiteDateDto> getKeySiteDate(Long id); public List<KeySiteDateDto> getKeySiteDate(Long id);
public List<String> getAddress(); public List<String> getAddress();
/**
* 查询该单位下对应建筑的重点部位数量
* @param belong_id
* @return
*/
public List<Map<String, Object>> getKeySiteCount(String bizOrgCode);
} }
package com.yeejoin.amos.boot.module.common.api.service; package com.yeejoin.amos.boot.module.common.api.service;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yeejoin.amos.boot.biz.common.bo.ReginParams; import com.yeejoin.amos.boot.biz.common.bo.ReginParams;
import com.yeejoin.amos.boot.biz.common.utils.MenuFrom;
import com.yeejoin.amos.boot.module.common.api.dto.KeySiteDateDto; import com.yeejoin.amos.boot.module.common.api.dto.KeySiteDateDto;
import com.yeejoin.amos.boot.module.common.api.dto.KeySiteDto; import com.yeejoin.amos.boot.module.common.api.dto.KeySiteDto;
import com.yeejoin.amos.boot.module.common.api.dto.KeySiteExcleDto; import com.yeejoin.amos.boot.module.common.api.dto.KeySiteExcleDto;
...@@ -9,6 +12,7 @@ import com.yeejoin.amos.boot.module.common.api.entity.KeySite; ...@@ -9,6 +12,7 @@ import com.yeejoin.amos.boot.module.common.api.entity.KeySite;
import com.yeejoin.amos.feign.privilege.model.AgencyUserModel; import com.yeejoin.amos.feign.privilege.model.AgencyUserModel;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* 重点部位接口类 * 重点部位接口类
...@@ -75,4 +79,8 @@ public List<KeySiteDateDto> getKeySiteDate(Long id); ...@@ -75,4 +79,8 @@ public List<KeySiteDateDto> getKeySiteDate(Long id);
public List<KeySite> getKeySiteDateByNameLike(Long companyId); public List<KeySite> getKeySiteDateByNameLike(Long companyId);
public List<Map<String, Object>> keySiteCountAndBuildingTree(String bizOrgCode);
public Map<String, String> getNodeAllParentIds(List<String> ids) ;
} }
<?xml version="1.0" encoding="UTF-8"?> <?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"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yeejoin.amos.boot.module.common.api.mapper.FireStationMapper"> <mapper
namespace="com.yeejoin.amos.boot.module.common.api.mapper.FireStationMapper">
<select id="getStationList" resultType="com.yeejoin.amos.boot.module.common.api.dto.FireStationzhDto"> <select id="getStationList"
resultType="com.yeejoin.amos.boot.module.common.api.dto.FireStationzhDto">
SELECT SELECT
a.sequence_nbr sequenceNbr, a.sequence_nbr sequenceNbr,
a.person_charge_name personChargeName, a.person_charge_name personChargeName,
a.longitude, a.longitude,
a.name, a.name,
a.latitude, a.latitude,
a.person_charge_telephone personChargeTelephone, a.person_charge_telephone personChargeTelephone,
(SELECT count(i.instance_id) (SELECT count(i.instance_id)
from from
cb_dynamic_form_instance i cb_dynamic_form_instance i
where where
i.field_value = a.sequence_nbr ) As userNum, i.field_value = a.sequence_nbr ) As userNum,
(SELECT COUNT(*)FROM jc_firestation_jacket WHERE firefighters_id = a.sequence_nbr and is_delete =0) AS eqNum, (SELECT COUNT(*)FROM jc_firestation_jacket WHERE firefighters_id =
Round(st_distance(point(a.longitude,a.latitude),point(#{par.longitude},#{par.latitude}))*111195,1) AS distance a.sequence_nbr and is_delete =0) AS eqNum,
FROM cb_fire_station a Round(st_distance(point(a.longitude,a.latitude),point(#{par.longitude},#{par.latitude}))*111195,1)
where a.is_delete=0 and a.longitude is not null and a.latitude is not null AS distance
<if test='par.distance!=null'> FROM cb_fire_station a
Round(st_distance(point(a.longitude,a.latitude),point(#{par.longitude},#{par.latitude}))*111195,1) &lt;= #{par.distance} where a.is_delete=0 and a.longitude is not null and a.latitude is not null
</if> <if test='par.distance!=null'>
ORDER BY distance limit #{pageNum},#{pageSize} Round(st_distance(point(a.longitude,a.latitude),point(#{par.longitude},#{par.latitude}))*111195,1)
</select> &lt;= #{par.distance}
</if>
ORDER BY distance limit #{pageNum},#{pageSize}
</select>
<select id="getStationListCount" resultType="Integer"> <select id="getStationListCount" resultType="Integer">
SELECT SELECT
COUNT(a.sequence_nbr) num COUNT(a.sequence_nbr) num
FROM cb_fire_station a FROM cb_fire_station a
where a.is_delete=0 and a.longitude is not null and a.latitude is not null where a.is_delete=0 and a.longitude is not null and a.latitude is not null
<if test='par.distance!=null'> <if test='par.distance!=null'>
Round(st_distance(point(a.longitude,a.latitude),point(#{par.longitude},#{par.latitude}))*111195,1) &lt;= #{par.distance} Round(st_distance(point(a.longitude,a.latitude),point(#{par.longitude},#{par.latitude}))*111195,1)
</if> &lt;= #{par.distance}
</select> </if>
</select>
<select id="getFireStationDetails" resultType="com.yeejoin.amos.boot.module.common.api.dto.FireStationDto"> <select id="getFireStationDetails"
SELECT resultType="com.yeejoin.amos.boot.module.common.api.dto.FireStationDto">
a.*, SELECT
(SELECT a.*,
count(i.instance_id) (SELECT
from count(i.instance_id)
cb_dynamic_form_instance i from
where cb_dynamic_form_instance i
i.field_value = #{id}) As userNum where
FROM cb_fire_station a i.field_value = #{id}) As userNum
where FROM cb_fire_station a
a.sequence_nbr = #{id} where
</select> a.sequence_nbr = #{id}
</select>
<select id="getfireStatioCount" resultType="map">
SELECT
parent_building_id,
count(1) as count
FROM
cb_fire_station
WHERE is_delete= false
<if test="bizOrgCode != null and bizOrgCode != ''">
AND biz_org_code = #{bizOrgCode}
</if>
GROUP BY
where_building_id
</select>
</mapper> </mapper>
...@@ -3,22 +3,27 @@ ...@@ -3,22 +3,27 @@
<mapper <mapper
namespace="com.yeejoin.amos.boot.module.common.api.mapper.KeySiteMapper"> namespace="com.yeejoin.amos.boot.module.common.api.mapper.KeySiteMapper">
<select id="getPageList" resultType="com.yeejoin.amos.boot.module.common.api.dto.KeySiteDto"> <select id="getPageList"
resultType="com.yeejoin.amos.boot.module.common.api.dto.KeySiteDto">
SELECT SELECT
c.`name` as name, c.`name` as name,
c.belong_id as belongId, c.belong_id as belongId,
c.biz_org_name as belongName, c.biz_org_name as
belongName,
c.building_id as buildingId, c.building_id as buildingId,
c.building_name as buildingName, c.building_name as
buildingName,
c.address_desc as addressDesc, c.address_desc as addressDesc,
c.building_area as buildingArea, c.building_area as
buildingArea,
c.building_height as buildingHeight, c.building_height as buildingHeight,
c.fire_endurance_rate as fireEnduranceRate, c.fire_endurance_rate as fireEnduranceRate,
c.use_nature as useNature, c.use_nature as useNature,
c.charge_person AS chargePerson, c.charge_person AS chargePerson,
c.sequence_nbr AS sequenceNbr, c.sequence_nbr AS sequenceNbr,
c.charge_person_id AS chargePersonId, c.charge_person_id AS chargePersonId,
c.key_prevention_reason AS keyPreventionReason, c.key_prevention_reason AS
keyPreventionReason,
c.fire_facilities_info AS fireFacilitiesInfo, c.fire_facilities_info AS fireFacilitiesInfo,
c.fire_prevention_flag AS firePreventionFlag, c.fire_prevention_flag AS firePreventionFlag,
c.hazard AS hazard, c.hazard AS hazard,
...@@ -27,9 +32,11 @@ ...@@ -27,9 +32,11 @@
c.remark AS remark, c.remark AS remark,
c.is_delete AS isDelete, c.is_delete AS isDelete,
c.rec_user_id AS recUserId, c.rec_user_id AS recUserId,
c.rec_user_name AS recUserName, c.rec_user_name AS
recUserName,
c.rec_date AS recDate, c.rec_date AS recDate,
c.fire_endurance_rate_name as fireEnduranceRateName, c.fire_endurance_rate_name as
fireEnduranceRateName,
c.use_nature_name as useNatureName c.use_nature_name as useNatureName
FROM FROM
cb_key_site c cb_key_site c
...@@ -54,69 +61,72 @@ ...@@ -54,69 +61,72 @@
</if> </if>
order by c.rec_date desc order by c.rec_date desc
</select> </select>
<select id="getSequenceNbr" resultType="com.yeejoin.amos.boot.module.common.api.dto.KeySiteDto"> <select id="getSequenceNbr"
SELECT c.`name` as name, resultType="com.yeejoin.amos.boot.module.common.api.dto.KeySiteDto">
c.belong_id as belongId, SELECT c.`name` as name,
cou.biz_org_name as belongName, c.belong_id as belongId,
c.building_id as buildingId, cou.biz_org_name as belongName,
c.building_name as buildingName, c.building_id as buildingId,
c.address_desc as addressDesc, c.building_name as buildingName,
c.building_area as buildingArea, c.address_desc as addressDesc,
c.building_height as buildingHeight, c.building_area as buildingArea,
c.fire_endurance_rate as fireEnduranceRate, c.building_height as buildingHeight,
c.use_nature as useNature, c.fire_endurance_rate as fireEnduranceRate,
c.charge_person AS chargePerson, c.use_nature as useNature,
c.sequence_nbr AS sequenceNbr, c.charge_person AS chargePerson,
c.charge_person_id AS chargePersonId, c.sequence_nbr AS sequenceNbr,
c.key_prevention_reason AS keyPreventionReason, c.charge_person_id AS chargePersonId,
c.fire_facilities_info AS fireFacilitiesInfo, c.key_prevention_reason AS keyPreventionReason,
c.fire_prevention_flag AS firePreventionFlag, c.fire_facilities_info AS fireFacilitiesInfo,
c.hazard AS hazard, c.fire_prevention_flag AS firePreventionFlag,
c.safety_management_measures AS safetyManagementMeasures, c.hazard AS hazard,
c.preventive_measures AS preventiveMeasures, c.safety_management_measures AS safetyManagementMeasures,
c.remark AS remark, c.preventive_measures AS preventiveMeasures,
c.is_delete AS isDelete, c.remark AS remark,
c.rec_user_id AS recUserId, c.is_delete AS isDelete,
c.rec_user_name AS recUserName, c.rec_user_id AS recUserId,
c.rec_date AS recDate, c.rec_user_name AS recUserName,
c.fire_endurance_rate_name as fireEnduranceRateName, c.rec_date AS recDate,
c.use_nature_name as useNatureName, c.fire_endurance_rate_name as fireEnduranceRateName,
c.biz_org_name as bizOrgName, c.use_nature_name as useNatureName,
c.biz_org_code as bizOrgCode c.biz_org_name as bizOrgName,
c.biz_org_code as bizOrgCode
FROM cb_key_site c FROM cb_key_site c
left join cb_org_usr cou on c.belong_id = cou.sequence_nbr left join cb_org_usr cou on c.belong_id = cou.sequence_nbr
where c.sequence_nbr = #{sequenceNbr} where
and c.is_delete = FALSE; c.sequence_nbr = #{sequenceNbr}
and c.is_delete = FALSE;
</select> </select>
<select id="getKeySiteList" resultType="com.yeejoin.amos.boot.module.common.api.dto.KeySiteDto"> <select id="getKeySiteList"
SELECT c.`name` as name, resultType="com.yeejoin.amos.boot.module.common.api.dto.KeySiteDto">
c.belong_id as belongId, SELECT c.`name` as name,
c.biz_org_name as belongName, c.belong_id as belongId,
c.building_id as buildingId, c.biz_org_name as belongName,
c.building_name as buildingName, c.building_id as buildingId,
c.address_desc as addressDesc, c.building_name as buildingName,
c.building_area as buildingArea, c.address_desc as addressDesc,
c.building_height as buildingHeight, c.building_area as buildingArea,
c.fire_endurance_rate as fireEnduranceRate, c.building_height as buildingHeight,
c.use_nature as useNature, c.fire_endurance_rate as fireEnduranceRate,
c.charge_person AS chargePerson, c.use_nature as useNature,
c.sequence_nbr AS sequenceNbr, c.charge_person AS chargePerson,
c.charge_person_id AS chargePersonId, c.sequence_nbr AS sequenceNbr,
c.key_prevention_reason AS keyPreventionReason, c.charge_person_id AS chargePersonId,
c.fire_facilities_info AS fireFacilitiesInfo, c.key_prevention_reason AS keyPreventionReason,
c.fire_prevention_flag AS firePreventionFlag, c.fire_facilities_info AS fireFacilitiesInfo,
c.hazard AS hazard, c.fire_prevention_flag AS firePreventionFlag,
c.safety_management_measures AS safetyManagementMeasures, c.hazard AS hazard,
c.preventive_measures AS preventiveMeasures, c.safety_management_measures AS safetyManagementMeasures,
c.remark AS remark, c.preventive_measures AS preventiveMeasures,
c.is_delete AS isDelete, c.remark AS remark,
c.rec_user_id AS recUserId, c.is_delete AS isDelete,
c.rec_user_name AS recUserName, c.rec_user_id AS recUserId,
c.rec_date AS recDate, c.rec_user_name AS recUserName,
c.fire_endurance_rate_name as fireEnduranceRateName, c.rec_date AS recDate,
c.use_nature_name as useNatureName c.fire_endurance_rate_name as fireEnduranceRateName,
c.use_nature_name as useNatureName
FROM cb_key_site c FROM cb_key_site c
where c.is_delete = FALSE where c.is_delete = FALSE
<if test="name != null and name != ''"> <if test="name != null and name != ''">
...@@ -139,18 +149,22 @@ ...@@ -139,18 +149,22 @@
</if> </if>
</select> </select>
<select id="getKeySiteDate" resultType="com.yeejoin.amos.boot.module.common.api.dto.KeySiteDateDto"> <select id="getKeySiteDate"
resultType="com.yeejoin.amos.boot.module.common.api.dto.KeySiteDateDto">
SELECT SELECT
c.sequence_nbr AS `key`, c.sequence_nbr AS `key`,
c.sequence_nbr AS `value`, c.sequence_nbr AS `value`,
c.`name` as label, c.`name` as
c.address_desc as fireLocation, label,
c.longitude as floorLongitude, c.address_desc as fireLocation,
c.latitude AS floorLatitude, c.longitude as floorLongitude,
cou.biz_org_name as belongName, c.latitude AS floorLatitude,
c.belong_id as belongId cou.biz_org_name as belongName,
FROM cb_key_site c LEFT JOIN cb_org_usr cou on cou.sequence_nbr = c.belong_id c.belong_id as belongId
where c.is_delete=FALSE FROM cb_key_site c LEFT JOIN
cb_org_usr cou on cou.sequence_nbr = c.belong_id
where
c.is_delete=FALSE
<if test="id != null and id != -1"> <if test="id != null and id != -1">
AND c.`belong_id`= #{id} AND c.`belong_id`= #{id}
</if> </if>
...@@ -158,14 +172,29 @@ ...@@ -158,14 +172,29 @@
<select id="getAddress" resultType="string"> <select id="getAddress" resultType="string">
SELECT SELECT
cb_key_site.address_desc cb_key_site.address_desc
FROM FROM
cb_key_site cb_key_site
WHERE WHERE
cb_key_site.is_delete = FALSE AND cb_key_site.is_delete = FALSE AND
cb_key_site.address_desc IS NOT NULL AND cb_key_site.address_desc IS NOT NULL AND
cb_key_site.address_desc != '' cb_key_site.address_desc != ''
GROUP BY
cb_key_site.address_desc
</select>
<select id="getKeySiteCount" resultType="map">
SELECT
parent_building_id,
count(1) as count
FROM
cb_key_site
WHERE
is_delete=false
<if test="bizOrgCode != null and bizOrgCode != ''">
and biz_org_code = #{bizOrgCode}
</if>
GROUP BY GROUP BY
cb_key_site.address_desc building_id
</select> </select>
</mapper> </mapper>
...@@ -32,6 +32,7 @@ import org.typroject.tyboot.core.restful.utils.ResponseModel; ...@@ -32,6 +32,7 @@ import org.typroject.tyboot.core.restful.utils.ResponseModel;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
...@@ -190,4 +191,12 @@ public class FireStationController extends BaseController { ...@@ -190,4 +191,12 @@ public class FireStationController extends BaseController {
PermissionInterceptorContext.setDataAuthRule(authKey); PermissionInterceptorContext.setDataAuthRule(authKey);
return ResponseHelper.buildResponse(iOrgUsrService.companyTreeByUserAndType(reginParams, OrgPersonEnum.公司.getKey())); return ResponseHelper.buildResponse(iOrgUsrService.companyTreeByUserAndType(reginParams, OrgPersonEnum.公司.getKey()));
} }
@PersonIdentify
@TycloudOperation(ApiLevel = UserType.AGENCY)
@RequestMapping(value = "/fireStationCountAndBuildingTree", method = RequestMethod.GET)
@ApiOperation(httpMethod = "GET", value = "根据登录人角色获取当前单位下的所在建筑的微型消防站统计值", notes = "根据登录人角色获取当前单位下的所在建筑的微型消防站统计值")
public ResponseModel<List<Map<String, Object>>> fireStationCountAndBuildingTree(
@RequestParam(required = false) String bizOrgCode) {
return ResponseHelper.buildResponse(fireStationServiceImpl.fireStationCountAndBuildingTree(bizOrgCode));
}
} }
package com.yeejoin.amos.boot.module.common.biz.service.impl; package com.yeejoin.amos.boot.module.common.biz.service.impl;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.yeejoin.amos.boot.biz.common.constants.BizConstant; import com.yeejoin.amos.boot.biz.common.constants.BizConstant;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.typroject.tyboot.core.foundation.utils.Bean; import org.typroject.tyboot.core.foundation.utils.Bean;
...@@ -12,6 +15,7 @@ import org.typroject.tyboot.core.foundation.utils.ValidationUtil; ...@@ -12,6 +15,7 @@ import org.typroject.tyboot.core.foundation.utils.ValidationUtil;
import org.typroject.tyboot.core.rdbms.annotation.Condition; import org.typroject.tyboot.core.rdbms.annotation.Condition;
import org.typroject.tyboot.core.rdbms.annotation.Operator; import org.typroject.tyboot.core.rdbms.annotation.Operator;
import org.typroject.tyboot.core.rdbms.service.BaseService; import org.typroject.tyboot.core.rdbms.service.BaseService;
import org.typroject.tyboot.core.restful.utils.ResponseModel;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
...@@ -24,6 +28,7 @@ import com.yeejoin.amos.boot.module.common.api.dto.FireStationzhDto; ...@@ -24,6 +28,7 @@ import com.yeejoin.amos.boot.module.common.api.dto.FireStationzhDto;
import com.yeejoin.amos.boot.module.common.api.dto.RequestData; import com.yeejoin.amos.boot.module.common.api.dto.RequestData;
import com.yeejoin.amos.boot.module.common.api.entity.FireStation; import com.yeejoin.amos.boot.module.common.api.entity.FireStation;
import com.yeejoin.amos.boot.module.common.api.entity.OrgUsr; import com.yeejoin.amos.boot.module.common.api.entity.OrgUsr;
import com.yeejoin.amos.boot.module.common.api.feign.EquipFeignClient;
import com.yeejoin.amos.boot.module.common.api.mapper.FireStationMapper; import com.yeejoin.amos.boot.module.common.api.mapper.FireStationMapper;
import com.yeejoin.amos.boot.module.common.api.mapper.OrgUsrMapper; import com.yeejoin.amos.boot.module.common.api.mapper.OrgUsrMapper;
import com.yeejoin.amos.boot.module.common.api.service.IFireStationService; import com.yeejoin.amos.boot.module.common.api.service.IFireStationService;
...@@ -43,8 +48,12 @@ public class FireStationServiceImpl extends BaseService<FireStationDto, FireStat ...@@ -43,8 +48,12 @@ public class FireStationServiceImpl extends BaseService<FireStationDto, FireStat
FireStationMapper fireStationMapper; FireStationMapper fireStationMapper;
@Autowired @Autowired
OrgUsrMapper orgUsrMapper; OrgUsrMapper orgUsrMapper;
@Autowired @Autowired
OrgUsrServiceImpl orgUsrService; OrgUsrServiceImpl orgUsrService;
@Autowired
EquipFeignClient equipFeignClient;
/** /**
* 分页查询 * 分页查询
*/ */
...@@ -200,4 +209,86 @@ public class FireStationServiceImpl extends BaseService<FireStationDto, FireStat ...@@ -200,4 +209,86 @@ public class FireStationServiceImpl extends BaseService<FireStationDto, FireStat
root.setChildren(menuList); root.setChildren(menuList);
return Lists.newArrayList(root); return Lists.newArrayList(root);
} }
@SuppressWarnings("unchecked")
public List<Map<String, Object>> fireStationCountAndBuildingTree(String bizOrgCode) {
Map<String, Integer> FireStationCountMap = parseFireStationCount(bizOrgCode);
ResponseModel<Object> response = equipFeignClient.getBuildingTree();
List<Map<String, Object>> buildingMapList = (List<Map<String, Object>>) response.getResult();
if(buildingMapList==null || buildingMapList.size()<1) {
return null;
}
return parseTree((List<Map<String, Object>>)buildingMapList.get(0).get("children"),FireStationCountMap);
}
@SuppressWarnings("unchecked")
private List<Map<String, Object>> parseTree(List<Map<String, Object>> children,
Map<String, Integer> keySiteCountMap) {
if (!ValidationUtil.isEmpty(children)) {
for (Map<String, Object> child : children) {
if (child.get("id") != null) {
if (keySiteCountMap.containsKey(child.get("id").toString())) {
child.put("count",keySiteCountMap.get(child.get("id").toString()));
}else {
child.put("count",0);
}
}else {
child.put("count",0);
}
if (!ValidationUtil.isEmpty(child.get("children"))) {
parseTree((List<Map<String, Object>>) child.get("children"), keySiteCountMap);
}
}
}
return children;
}
private Map<String, Integer> parseFireStationCount(String bizOrgCode) {
Map<String, Integer> map = new HashMap<String, Integer>();
List<Map<String, Object>> list = fireStationMapper.getfireStatioCount(bizOrgCode);
for (Map<String, Object> map2 : list) {
Object parentBuilingIdString = map2.get("parent_building_id");
if (ObjectUtils.isEmpty(parentBuilingIdString)) {
continue;
}
String[] parentBuilingIdArray = parentBuilingIdString.toString().split(",");
for (int i = 0; i < parentBuilingIdArray.length; i++) {
if (map.containsKey(parentBuilingIdArray[i])) {
int num = map.get(parentBuilingIdArray[i]).intValue();
num = num + Integer.parseInt(map2.get("count").toString());
map.put(parentBuilingIdArray[i], num);
} else {
map.put(parentBuilingIdArray[i], Integer.parseInt(map2.get("count").toString()));
}
}
}
return map;
}
public Map<String, String> getNodeAllParentIds(List<String> ids) {
Map<String, String> map =new HashMap<String, String>();
ResponseModel<List<Map<String, Object>>> response= equipFeignClient.getBuildingTreeList();
List<Map<String, Object>> responseList =response.getResult();
if(response.getStatus()!=200 && response.getResult().size()<1) {
return null;
}
ids.stream().forEach(i->{
String tegartString = getNodeAllParentIds( responseList,i,i);
map.put(i, tegartString);
});
return map;
}
private String getNodeAllParentIds(List<Map<String, Object>> list , String id,String tegartString){
for (Map<String, Object> map : list) {
if(map.get("id").toString().equals(id) && map.get("parentId")!=null ) {
tegartString=tegartString+","+map.get("parentId").toString();
return getNodeAllParentIds(list,map.get("parentId").toString(),tegartString);
}
}
return tegartString;
}
} }
...@@ -103,7 +103,12 @@ public class BuildingController extends AbstractBaseController { ...@@ -103,7 +103,12 @@ public class BuildingController extends AbstractBaseController {
public List<BuildingTreeVo> getBuildingTree() { public List<BuildingTreeVo> getBuildingTree() {
return buildService.getBuildingTree(); return buildService.getBuildingTree();
} }
@TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation("消防建筑树列表信息")
@GetMapping(value = "/getBuildingList")
public List<Map<String, Object>> getBuildingTreeList() {
return buildService.getBuildingDetaiList();
}
@TycloudOperation(ApiLevel = UserType.AGENCY) @TycloudOperation(ApiLevel = UserType.AGENCY)
@ApiOperation("消防建筑层级树") @ApiOperation("消防建筑层级树")
@GetMapping(value = "/tierTree") @GetMapping(value = "/tierTree")
......
...@@ -36,8 +36,8 @@ public interface JcsFeign { ...@@ -36,8 +36,8 @@ public interface JcsFeign {
@RequestHeader("appKey") String appKey, @RequestHeader("appKey") String appKey,
@RequestHeader("product") String product, @RequestHeader("product") String product,
@RequestHeader("token") String token, @RequestHeader("token") String token,
@RequestParam(value = "current") int current, @RequestParam(value = "pageNum") int pageNum,
@RequestParam(value = "size") int size, @RequestParam(value = "pageSize") int pageSize,
@RequestParam(value = "name") String name, @RequestParam(value = "name") String name,
@RequestParam(value = "belongBuildingId") List<Long> belongBuildingId, @RequestParam(value = "belongBuildingId") List<Long> belongBuildingId,
@RequestParam(value = "belongFightingSystemId") Long belongFightingSystemId, @RequestParam(value = "belongFightingSystemId") Long belongFightingSystemId,
......
...@@ -309,4 +309,6 @@ public interface IBuilldService extends IService<Building> { ...@@ -309,4 +309,6 @@ public interface IBuilldService extends IService<Building> {
List<BuildingTreeVo> getCompanyBuildingTree(String authKey); List<BuildingTreeVo> getCompanyBuildingTree(String authKey);
List<BuildingTreeVo> getBuildingVideoTreeNew(); List<BuildingTreeVo> getBuildingVideoTreeNew();
List<Map<String, Object>> getBuildingDetaiList();
} }
package com.yeejoin.equipmanage.service.impl; package com.yeejoin.equipmanage.service.impl;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Stack;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.typroject.tyboot.core.foundation.exception.BaseException;
import org.typroject.tyboot.core.foundation.utils.Bean;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
...@@ -13,10 +37,21 @@ import com.yeejoin.amos.feign.morphic.model.ResourceDTO; ...@@ -13,10 +37,21 @@ import com.yeejoin.amos.feign.morphic.model.ResourceDTO;
import com.yeejoin.amos.feign.systemctl.Systemctl; import com.yeejoin.amos.feign.systemctl.Systemctl;
import com.yeejoin.amos.feign.systemctl.model.DictionarieValueModel; import com.yeejoin.amos.feign.systemctl.model.DictionarieValueModel;
import com.yeejoin.equipmanage.common.dto.OrgUsrDto; import com.yeejoin.equipmanage.common.dto.OrgUsrDto;
import com.yeejoin.equipmanage.common.entity.*; import com.yeejoin.equipmanage.common.entity.Building;
import com.yeejoin.equipmanage.common.entity.EquipmentSpecificRelation;
import com.yeejoin.equipmanage.common.entity.FireFightingSystemEntity;
import com.yeejoin.equipmanage.common.entity.FormGroup;
import com.yeejoin.equipmanage.common.entity.FormInstance;
import com.yeejoin.equipmanage.common.entity.SourceFile;
import com.yeejoin.equipmanage.common.entity.SourceScene;
import com.yeejoin.equipmanage.common.entity.StockDetail;
import com.yeejoin.equipmanage.common.entity.dto.BuildIsRiskDTO; import com.yeejoin.equipmanage.common.entity.dto.BuildIsRiskDTO;
import com.yeejoin.equipmanage.common.entity.dto.BuildSearchDTO; import com.yeejoin.equipmanage.common.entity.dto.BuildSearchDTO;
import com.yeejoin.equipmanage.common.entity.vo.*; import com.yeejoin.equipmanage.common.entity.vo.BuildingListVO;
import com.yeejoin.equipmanage.common.entity.vo.BuildingVideoListVO;
import com.yeejoin.equipmanage.common.entity.vo.BuildingVideoVO;
import com.yeejoin.equipmanage.common.entity.vo.EquiplistSpecificBySystemVO;
import com.yeejoin.equipmanage.common.entity.vo.PointTreeVo;
import com.yeejoin.equipmanage.common.enums.GroupCodeEnum; import com.yeejoin.equipmanage.common.enums.GroupCodeEnum;
import com.yeejoin.equipmanage.common.enums.GroupTypeEnum; import com.yeejoin.equipmanage.common.enums.GroupTypeEnum;
import com.yeejoin.equipmanage.common.enums.IndustryEnum; import com.yeejoin.equipmanage.common.enums.IndustryEnum;
...@@ -28,30 +63,29 @@ import com.yeejoin.equipmanage.common.vo.BuildingTreeAndEquipVO; ...@@ -28,30 +63,29 @@ import com.yeejoin.equipmanage.common.vo.BuildingTreeAndEquipVO;
import com.yeejoin.equipmanage.common.vo.BuildingTreeVo; import com.yeejoin.equipmanage.common.vo.BuildingTreeVo;
import com.yeejoin.equipmanage.context.SpringContextHolder; import com.yeejoin.equipmanage.context.SpringContextHolder;
import com.yeejoin.equipmanage.event.SyncRiskEvent; import com.yeejoin.equipmanage.event.SyncRiskEvent;
import com.yeejoin.equipmanage.mapper.*; import com.yeejoin.equipmanage.mapper.BuildingMapper;
import com.yeejoin.equipmanage.mapper.EquipmentSpecificRelationMapper;
import com.yeejoin.equipmanage.mapper.FireFightingSystemMapper;
import com.yeejoin.equipmanage.mapper.FormInstanceMapper;
import com.yeejoin.equipmanage.mapper.SourceSceneMapper;
import com.yeejoin.equipmanage.mapper.StockDetailMapper;
import com.yeejoin.equipmanage.mapper.VideoMapper;
import com.yeejoin.equipmanage.operation.GroupTypeOperator; import com.yeejoin.equipmanage.operation.GroupTypeOperator;
import com.yeejoin.equipmanage.operation.PageOperation; import com.yeejoin.equipmanage.operation.PageOperation;
import com.yeejoin.equipmanage.operation.SyncRiskOperator; import com.yeejoin.equipmanage.operation.SyncRiskOperator;
import com.yeejoin.equipmanage.operation.factory.PageOperatorFactory; import com.yeejoin.equipmanage.operation.factory.PageOperatorFactory;
import com.yeejoin.equipmanage.remote.RemoteSecurityService; import com.yeejoin.equipmanage.remote.RemoteSecurityService;
import com.yeejoin.equipmanage.service.*; import com.yeejoin.equipmanage.service.IBuilldService;
import lombok.extern.slf4j.Slf4j; import com.yeejoin.equipmanage.service.IEqSourceFileService;
import org.apache.commons.lang3.StringUtils; import com.yeejoin.equipmanage.service.IFormGroupService;
import org.springframework.beans.factory.annotation.Autowired; import com.yeejoin.equipmanage.service.IFormInstanceService;
import org.springframework.beans.factory.annotation.Value; import com.yeejoin.equipmanage.service.ISourceSceneService;
import org.springframework.context.annotation.Lazy; import com.yeejoin.equipmanage.service.ISyncDataService;
import org.springframework.stereotype.Service; import com.yeejoin.equipmanage.service.ISystemDicService;
import org.springframework.transaction.annotation.Transactional; import com.yeejoin.equipmanage.service.IVideoService;
import org.springframework.util.CollectionUtils; import com.yeejoin.equipmanage.service.IWarehouseStructureService;
import org.typroject.tyboot.core.foundation.exception.BaseException;
import org.typroject.tyboot.core.foundation.utils.Bean;
import org.typroject.tyboot.core.restful.exception.instance.BadRequest;
import java.math.BigDecimal; import lombok.extern.slf4j.Slf4j;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.atomic.AtomicReference;
import java.util.stream.Collectors;
/** /**
* @author ZeHua Li * @author ZeHua Li
...@@ -402,7 +436,9 @@ public class BuildingServiceImpl extends ServiceImpl<BuildingMapper, Building> i ...@@ -402,7 +436,9 @@ public class BuildingServiceImpl extends ServiceImpl<BuildingMapper, Building> i
return t; return t;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
} }
public List<Map<String, Object>> getBuildingDetaiList() {
return iFormInstanceService.getSpecialChildrenList(null);
}
private List<BuildingTreeVo> getBuildingTreeVos() { private List<BuildingTreeVo> getBuildingTreeVos() {
FormGroup formGroup = iFormGroupService.getByUniqueKey(GroupCodeEnum.ALL_BUILDING.getGroupCode()); FormGroup formGroup = iFormGroupService.getByUniqueKey(GroupCodeEnum.ALL_BUILDING.getGroupCode());
List<Map<String, Object>> allList = iFormInstanceService.getSpecialChildrenList(null); List<Map<String, Object>> allList = iFormInstanceService.getSpecialChildrenList(null);
......
...@@ -83,6 +83,7 @@ import com.yeejoin.amos.boot.module.common.api.entity.FirefightersContacts; ...@@ -83,6 +83,7 @@ import com.yeejoin.amos.boot.module.common.api.entity.FirefightersContacts;
import com.yeejoin.amos.boot.module.common.api.entity.FirefightersEducation; import com.yeejoin.amos.boot.module.common.api.entity.FirefightersEducation;
import com.yeejoin.amos.boot.module.common.api.entity.FirefightersPost; import com.yeejoin.amos.boot.module.common.api.entity.FirefightersPost;
import com.yeejoin.amos.boot.module.common.api.entity.FirefightersWorkexperience; import com.yeejoin.amos.boot.module.common.api.entity.FirefightersWorkexperience;
import com.yeejoin.amos.boot.module.common.api.entity.KeySite;
import com.yeejoin.amos.boot.module.common.api.entity.MaintenanceCompany; import com.yeejoin.amos.boot.module.common.api.entity.MaintenanceCompany;
import com.yeejoin.amos.boot.module.common.api.entity.OrgUsr; import com.yeejoin.amos.boot.module.common.api.entity.OrgUsr;
import com.yeejoin.amos.boot.module.common.api.entity.RescueEquipment; import com.yeejoin.amos.boot.module.common.api.entity.RescueEquipment;
...@@ -786,7 +787,9 @@ public class ExcelServiceImpl { ...@@ -786,7 +787,9 @@ public class ExcelServiceImpl {
} }
private void excelImportFireStation(MultipartFile multipartFile) throws Exception { private void excelImportFireStation(MultipartFile multipartFile) throws Exception {
List<FireStationDto> excelDtoList = ExcelUtil.readFirstSheetExcel(multipartFile, FireStationDto.class, 1); List<FireStationDto> excelDtoList = ExcelUtil.readFirstSheetExcel(multipartFile, FireStationDto.class, 1);
Map<String, String> maps = getAllBuildingIdForParentBuilingIds(excelDtoList);
List<FireStation> excelEntityList = new ArrayList<>(); List<FireStation> excelEntityList = new ArrayList<>();
excelDtoList.forEach(item -> { excelDtoList.forEach(item -> {
FireStation fireStation = new FireStation(); FireStation fireStation = new FireStation();
...@@ -796,6 +799,9 @@ public class ExcelServiceImpl { ...@@ -796,6 +799,9 @@ public class ExcelServiceImpl {
String[] whereBuilding = fireStation.getWhereBuilding().split("@"); String[] whereBuilding = fireStation.getWhereBuilding().split("@");
fireStation.setWhereBuilding(whereBuilding[0]); fireStation.setWhereBuilding(whereBuilding[0]);
fireStation.setWhereBuildingId(whereBuilding[1]); fireStation.setWhereBuildingId(whereBuilding[1]);
if(maps.containsKey(whereBuilding[1])){
fireStation.setParentBuildingId(maps.get(whereBuilding[1]));
}
} }
if (fireStation.getBizCompany() != null) { if (fireStation.getBizCompany() != null) {
String[] bizCompany = fireStation.getBizCompany().split("@"); String[] bizCompany = fireStation.getBizCompany().split("@");
...@@ -817,7 +823,17 @@ public class ExcelServiceImpl { ...@@ -817,7 +823,17 @@ public class ExcelServiceImpl {
}); });
fireStationService.saveBatch(excelEntityList); fireStationService.saveBatch(excelEntityList);
} }
public Map<String, String> getAllBuildingIdForParentBuilingIds(List<FireStationDto> excelDtoList) {
List<String> list = new ArrayList<String>();
for (FireStationDto fireStation : excelDtoList) {
if (org.apache.commons.lang3.StringUtils.isNotBlank(fireStation.getWhereBuilding())) {
String[] whereBuilding = fireStation.getWhereBuilding().split("@");
fireStation.setWhereBuildingId(whereBuilding[1]);
list.add(whereBuilding[1]);
}
}
return keySiteService.getNodeAllParentIds(list);
}
private void excelImportFireTeam(MultipartFile multipartFile) throws Exception { private void excelImportFireTeam(MultipartFile multipartFile) throws Exception {
List<FireTeamDto> excelDtoList = ExcelUtil.readFirstSheetExcel(multipartFile, FireTeamDto.class, 1); List<FireTeamDto> excelDtoList = ExcelUtil.readFirstSheetExcel(multipartFile, FireTeamDto.class, 1);
List<FireTeam> excelEntityList = new ArrayList<>(); List<FireTeam> excelEntityList = new ArrayList<>();
......
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