Commit 219582d9 authored by 史余彬's avatar 史余彬

根据传感器进行推送

parent 52efe794
......@@ -14,7 +14,7 @@
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="jdk" jdkName="1.8" jdkType="JavaSDK" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-amqp:2.3.2.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.3.2.RELEASE" level="project" />
......
......@@ -32,4 +32,7 @@ public interface DeviceStaticDataInfoDao {
@Select("SELECT id AS equipno, name AS equipname FROM tab_sensor WHERE mark = '坝体内部水平位移' or mark = '坝体内部沉降'")
List<NeibuweiyiDeviceInfoModel> findNeibuweiyiDeviceInfo();
@Select("SELECT tailingno, tailingname, unifcreditcode, address, unitname, unitaddress, industrycharacterno, unitperson, unitpersontel, securityofficer, securityofficertel, ondutytel, longitude, latitude, usedate, useyear, operatingstatus, industrytypeno, mineralspecies, top, onlinemonitoringsys, geologicalstructure, topotraphicgradient, standardizationlevel, standardforensicsdate, safetypermitno, safetypermitdate, safetypermitunit, storetypeno, designlevel, grade, designheight, stackheight, plancapability, nowvolume, damstocktypeno, floodequipment, floodmethod, floodfacilitydischarge, waterarea, area, floodcontrolstandard, damtype, initialdamtype, designinitialdamheight, currentinitialdamheight, initialdamlongness, initialdamsloperatio, accumulationdamratio, designsubdamheighta, designsubdamtopwidth, accumulateddamsnumber, earthquake, tailingsstoragemethod, minelaytypeno, upstreamtailings, drystorage, drystoragewaterratio, tailingsparticlesize, tailingsaveparticlesize, depositiondrybeachslope, personnum, buildingnum, emergencyplanfiled, primarysafetyunit, primarysafetylevel, designunit, designunitlevel, constructionunit, constructionlevel, supervisoryunit, supervisorylevel, safetycheckunit, safetychecklevel, safetyacceptancetime, safetyevaluationunit, safetyevaluationlevel, filingperson, filingdate, fillerphone, note, in_use, is_sync, id"+
" FROM tab_wkk_info")
List<WkkBasicInfoModel> findWkkBasicInfo();
}
package com.amqp.shanxi.dao;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List;
@Mapper
public interface SensorDataDao {
@Select("select b.mark from (" +
" select mark from tab_sensor where kind not like '%干滩%' and kind not like '%内部位移%'" +
" union all"+
" select '干滩' as mark from tab_sensor where kind like '%干滩%'"+
" union all"+
" select '内部位移' as mark from tab_sensor where kind like '%内部位移%'" +
" ) b group by b.mark")
List<String> findAllSensorData();
}
......@@ -6,5 +6,29 @@ import lombok.Data;
public class TabSensorModel {
private Long id;
private String kind;
private String state;
private String mark;
private String name;
private Integer zkbh;
private Integer address1;
private String address2;
private Integer addressb;
private String bzuobiao;
private Double czuobiao;
private Double angle;
private String alarmvalue;
private String values1;
private String notalarmvalue;
private String jiazhichushi;
private Integer programid;
private Double maxy;
private Double miny;
private Double damheight;
private Double scale;
private Double scalenum;
private String imgurl;
private String jdwd;
}
package com.amqp.shanxi.model;
import lombok.Data;
@Data
public class WkkBasicInfoModel {
private Long id;
private String tailingno;
private String tailingname;
private String unifcreditcode;
private String address;
private String unitname;
private String unitaddress;
private String industrycharacterno;
private String unitperson;
private String unitpersontel;
private String securityofficer;
private String securityofficertel;
private String ondutytel;
private Double longitude;
private Double latitude;
private String usedate;
private Double useyear;
private String operatingstatus;
private String industrytypeno;
private String mineralspecies;
private String top;
private String onlinemonitoringsys;
private String geologicalstructure;
private Double topotraphicgradient;
private String standardizationlevel;
private String standardforensicsdate;
private String safetypermitno;
private String safetypermitdate;
private String safetypermitunit;
private String storetypeno;
private String designlevel;
private String grade;
private Double designheight;
private Double stackheight;
private Double plancapability;
private Double nowvolume;
private String damstocktypeno;
private String floodequipment;
private String floodmethod;
private String floodfacilitydischarge;
private Double waterarea;
private Double area;
private Double floodcontrolstandard;
private String damtype;
private String initialdamtype;
private Double designinitialdamheight;
private Double currentinitialdamheight;
private Double initialdamlongness;
private String initialdamsloperatio;
private String accumulationdamratio;
private Double designsubdamheighta;
private Double designsubdamtopwidth;
private Double accumulateddamsnumber;
private Double earthquake;
private String tailingsstoragemethod;
private String minelaytypeno;
private String upstreamtailings;
private String drystorage;
private Double drystoragewaterratio;
private Double tailingsparticlesize;
private Double tailingsaveparticlesize;
private Double depositiondrybeachslope;
private Double personnum;
private Double buildingnum;
private String emergencyplanfiled;
private String primarysafetyunit;
private String primarysafetylevel;
private String designunit;
private String designunitlevel;
private String constructionunit;
private String constructionlevel;
private String supervisoryunit;
private String supervisorylevel;
private String safetycheckunit;
private String safetychecklevel;
private String safetyacceptancetime;
private String safetyevaluationunit;
private String safetyevaluationlevel;
private String filingperson;
private String filingdate;
private String fillerphone;
private String note;
private String in_use;
private String is_sync;
}
......@@ -6,24 +6,39 @@ import com.rabbitmq.client.Connection;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class AlarmDataAMQPService {
@Autowired
private AlarmDataService alarmDataService;
@Autowired
private SensorDataService sensorDataService;
/**
* 实时数据推送入口
*/
public void run(Connection connection) {
publishAlarm("gt", connection);
publishAlarm("ksw", connection);
publishAlarm("bmwy", connection);
publishAlarm("nbwy", connection);
publishAlarm("jrx", connection);
publishAlarm("jyl", connection);
List<String> sensorKind = sensorDataService.findSensorKind();
publishAlarm("device", connection);
publishAlarm("wkk", connection);
for (String kind : sensorKind) {
if ("干滩".equals(kind)) {
publishAlarm("gt", connection);
} else if("库水位".equals(kind)) {
publishAlarm("ksw", connection);
}else if("坝体表面位移".equals(kind)) {
publishAlarm("bmwy", connection);
}else if("浸润线".equals(kind)) {
publishAlarm("jrx", connection);
}else if("雨量计".equals(kind)){
publishAlarm("jyl", connection);
}else if("内部位移".equals(kind)) {
publishAlarm("nbwy", connection);
}
}
}
public void publishAlarm(String type, Connection connection) {
......
......@@ -11,26 +11,40 @@ import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class DeviceStaticDataAMQPService {
@Autowired
private RabbitTemplate amqpTemplate;
private DeviceStaticDataInfoService deviceStaticDataInfoService;
@Autowired
private DeviceStaticDataInfoService deviceStaticDataInfoService;
private SensorDataService sensorDataService;
public void run(Connection connection) {
try{
List<String> sensorKind = sensorDataService.findSensorKind();
// 设备信息
this.publish("gt", connection);
this.publish("ksw",connection);
this.publish("bmwy", connection);
this.publish("jrx", connection);
this.publish("jyl", connection);
this.publish("nbwy", connection);
this.publish("basic", connection);
for (String kind: sensorKind) {
if ("干滩".equals(kind)) {
this.publish("gt", connection);
} else if("库水位".equals(kind)) {
this.publish("ksw",connection);
}else if("坝体表面位移".equals(kind)) {
this.publish("bmwy", connection);
}else if("浸润线".equals(kind)) {
this.publish("jrx", connection);
}else if("雨量计".equals(kind)) {
this.publish("jyl", connection);
}else if("内部位移".equals(kind)) {
this.publish("nbwy", connection);
}
}
}catch(Exception e) {
e.printStackTrace();
}
......@@ -39,7 +53,22 @@ public class DeviceStaticDataAMQPService {
public void publish(String type, Connection connection) {
try {
if ("gt".equals(type)) {
if ("basic".equals(type)) {
Channel channel = connection.createChannel();
// channel.exchangeDeclare(AMQPTopicStaticDataConfig.TOPIC_EXCHANGE, "topic", false, true, null);
channel.basicPublish(AMQPTopicStaticDataConfig.TOPIC_EXCHANGE
, AMQPTopicStaticDataConfig.TOPIC_ROUTINGKEY_BAISC
, null
, JSONUtil.toJsonStr(deviceStaticDataInfoService.wkkBasicDataInfo()).getBytes());
//消息确认
channel.confirmSelect();
if (channel.waitForConfirms()) {
System.out.println("尾矿库基础信息发送成功!");
} else {
System.out.println("尾矿库基础信息发送失败!");
}
channel.close();
} else if ("gt".equals(type)) {
Channel channel = connection.createChannel();
// channel.exchangeDeclare(AMQPTopicStaticDataConfig.TOPIC_EXCHANGE, "topic", false, true, null);
channel.basicPublish(AMQPTopicStaticDataConfig.TOPIC_EXCHANGE
......@@ -54,7 +83,6 @@ public class DeviceStaticDataAMQPService {
System.out.println("干滩设备信息发送失败!");
}
channel.close();
} else if ("ksw".equals(type)) {
Channel channel = connection.createChannel();
channel.basicPublish(AMQPTopicStaticDataConfig.TOPIC_EXCHANGE
......
......@@ -18,4 +18,6 @@ public interface DeviceStaticDataInfoService {
StaticDataInfoModel jiangyuliangDeviceInfo();
StaticDataInfoModel neibuweiyiDeviceInfo();
StaticDataInfoModel wkkBasicDataInfo();
}
......@@ -7,26 +7,41 @@ import com.rabbitmq.client.Connection;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class RealTimeDataAMQPService {
@Autowired
private RealTimeInfoService realTimeInfoService;
@Autowired
private SensorDataService sensorDataService;
/**
* 实时数据推送入口
*/
public void run(Connection connection) {
publishRealTime("gt", connection);
publishRealTime("ksw", connection);
publishRealTime("bmwy", connection);
publishRealTime("nbwy", connection);
publishRealTime("jrx", connection);
publishRealTime("jyl", connection);
List<String> sensorKind = sensorDataService.findSensorKind();
publishRealTime("device", connection);
publishRealTime("wkk", connection);
publishRealTime("offline", connection);
for (String kind : sensorKind) {
if ("干滩".equals(kind)) {
publishRealTime("gt", connection);
} else if("库水位".equals(kind)) {
publishRealTime("ksw", connection);
}else if("坝体表面位移".equals(kind)) {
publishRealTime("bmwy", connection);
}else if("浸润线".equals(kind)) {
publishRealTime("jrx", connection);
}else if("雨量计".equals(kind)) {
publishRealTime("jyl", connection);
}else if("内部位移".equals(kind)) {
publishRealTime("nbwy", connection);
}
}
}
public void publishRealTime(String type, Connection connection) {
......
package com.amqp.shanxi.service;
import com.amqp.shanxi.model.TabSensorModel;
import java.util.List;
public interface SensorDataService {
List<TabSensorModel> findSensorKind();
List<String> findSensorKind();
}
......@@ -40,7 +40,7 @@ public class ThreadService extends Thread{
while(true) {
realTimeDataAMQPService.run(connection);
System.out.println("实时数据发送完成======================================================================================");
Thread.sleep(60000 * 2);
Thread.sleep(60000 * 5);
}
}else if("alarmData".equals(type)){
while(true) {
......
......@@ -201,5 +201,24 @@ public class DeviceStaticDataInfoServiceImpl implements DeviceStaticDataInfoServ
}
}
@Override
public StaticDataInfoModel wkkBasicDataInfo() {
try {
StaticDataInfoModel staticDataInfoModel = new StaticDataInfoModel();
List<WkkBasicInfoModel> wkkBasicInfo = deviceStaticDataInfoDao.findWkkBasicInfo();
staticDataInfoModel.setTailingNo(StaticParamUtils.WKKNO);
staticDataInfoModel.setDepartmentId("123456789");
staticDataInfoModel.setProvinceId(StaticParamUtils.PROVINCENO);
staticDataInfoModel.setType(StaticParamUtils.BASICINFO);
staticDataInfoModel.setSendTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
staticDataInfoModel.setDatas(AESUtil.encrypt(JSONUtil.toJsonStr(wkkBasicInfo), "BRlp%IYyTYFntG!g7oPo$N==", "wP!n$!ZD%0k2g6Gahpdk6l=="));
System.out.println("尾矿库基础信息===========" + JSONUtil.toJsonStr(staticDataInfoModel));
return staticDataInfoModel;
}catch (Exception e){
e.printStackTrace();
return null;
}
}
}
......@@ -288,7 +288,7 @@ public class RealTimeInfoServiceImpl implements RealTimeInfoService {
neibuChenjiangRealTimeData.get(i).setCollectdate(neibuChenjiangRealTimeData.get(i).getCollectdate().substring(0, neibuChenjiangRealTimeData.get(i).getCollectdate().indexOf(".")));
}
}
System.out.println("内部沉降实时数据=======================" + JSONUtil.toJsonStr(neibuChenjiangRealTimeData));
System.out.println("nbcj内部沉降实时数据=======================" + JSONUtil.toJsonStr(neibuChenjiangRealTimeData));
nbcjRealTimeData.setTailingNo(StaticParamUtils.WKKNO);
nbcjRealTimeData.setDepartmentId("123456789");
......@@ -316,7 +316,7 @@ public class RealTimeInfoServiceImpl implements RealTimeInfoService {
neibuShuipingRealTimeData.get(i).setCollectdate(neibuShuipingRealTimeData.get(i).getCollectdate().substring(0, neibuShuipingRealTimeData.get(i).getCollectdate().indexOf(".")));
}
}
System.out.println("内部水平实时数据=======================" + JSONUtil.toJsonStr(neibuShuipingRealTimeData));
System.out.println("nbsp内部水平实时数据=======================" + JSONUtil.toJsonStr(neibuShuipingRealTimeData));
nbcjRealTimeData.setTailingNo(StaticParamUtils.WKKNO);
nbcjRealTimeData.setDepartmentId("123456789");
......
package com.amqp.shanxi.service.impl;
import com.amqp.shanxi.dao.SensorDataDao;
import com.amqp.shanxi.model.TabSensorModel;
import com.amqp.shanxi.service.SensorDataService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class SensorDataServiceImpl implements SensorDataService {
@Autowired
private SensorDataDao sensorDataDao;
@Override
public List<String> findSensorKind() {
return sensorDataDao.findAllSensorData();
}
}
......@@ -3,7 +3,7 @@ server:
spring:
datasource:
driver-class-name: org.postgresql.Driver
url: jdbc:postgresql://118.190.98.56:5432/MineTRS_fengshan
url: jdbc:postgresql://192.168.100.220:5432/MineTRS_hongyun1
username: postgres
password: red___
rabbitmq:
......@@ -32,6 +32,7 @@ basic: # 基础信息
provinceno: '14'
wkkno: '1409240052'
datatype:
basicinfo: '0001'
gantandevice: '0101'
......@@ -60,3 +61,5 @@ datatype:
devicealarm: '2003'
wkkalarm: '2103'
deviceoffline: '2202'
......@@ -3,7 +3,7 @@ server:
spring:
datasource:
driver-class-name: org.postgresql.Driver
url: jdbc:postgresql://118.190.98.56:5432/MineTRS_fengshan
url: jdbc:postgresql://192.168.100.220:5432/MineTRS_hongyun1
username: postgres
password: red___
rabbitmq:
......@@ -32,6 +32,7 @@ basic: # 基础信息
provinceno: '14'
wkkno: '1409240052'
datatype:
basicinfo: '0001'
gantandevice: '0101'
......@@ -60,3 +61,5 @@ datatype:
devicealarm: '2003'
wkkalarm: '2103'
deviceoffline: '2202'
artifactId=shanxi
groupId=com.amqp
version=0.0.1-SNAPSHOT
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/model/WkkRealTimeInfoModel.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/model/DeviceRealTimeInfoModel.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/service/AlarmDataAMQPService.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/model/GantanRealTimeInfoModel.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/model/BiaomianweiyiAlarmInfoModel.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/model/BiaomianweiyiRealTimeInfoModel.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/model/KushuiweiAlarmInfoModel.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/model/DeviceAlarmInfoModel.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/service/ThreadService.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/util/Sender.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/model/TabSensorModel.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/util/AMQPTopicStaticDataConfig.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/model/NeibuweiyiRealTimeInfoModel.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/service/impl/DeviceStaticDataInfoServiceImpl.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/model/JiangyuliangRealTimeInfoModel.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/service/SensorDataService.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/model/JiangyuliangDeviceInfoModel.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/model/JinrunxianRealTimeInfoModel.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/dao/DeviceStaticDataInfoDao.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/dao/AlarmInfoDao.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/service/impl/AlarmDataServiceImpl.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/model/WkkAlarmTimeInfoModel.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/model/JinrunxianAlarmInfoModel.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/model/GantanAlarmInfoModel.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/Sender.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/service/DeviceStaticDataAMQPService.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/service/RealTimeDataAMQPService.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/model/DeviceOffLineInfoModel.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/model/JiangyuliangAlarmInfoModel.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/model/NeibuweiyiDeviceInfoModel.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/model/KushuiweiRealTimeInfoModel.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/util/Constants.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/util/AESUtil.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/util/StaticParamUtils.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/model/JinrunxianDeviceInfoModel.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/model/StaticDataInfoModel.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/model/KushuiweiDeviceInfoModel.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/model/BiaomianweiyiDeviceInfoModel.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/model/NeibuweiyiAlarmInfoModel.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/service/DeviceStaticDataInfoService.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/service/AlarmDataService.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/service/RealTimeInfoService.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/model/DBDeviceInfo.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/ShanxiApplication.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/model/GantanDeviceInfoModel.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/service/impl/RealTimeInfoServiceImpl.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/main/java/com/amqp/shanxi/dao/RealTimeInfoDao.java
/home/xiaoshi/gemhoProject/山西数据推送/shanxi/src/test/java/com/amqp/shanxi/ShanxiApplicationTests.java
-------------------------------------------------------------------------------
Test set: com.amqp.shanxi.ShanxiApplicationTests
-------------------------------------------------------------------------------
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.465 s - in com.amqp.shanxi.ShanxiApplicationTests
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