Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
黄嘉阳
/
iot-platform-server
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
6e52ca55
authored
Sep 18, 2023
by
朱淼
Browse files
Options
_('Browse Files')
Download
Plain Diff
Merge branch 'dev' of
http://git.xmmakeit.com/huangjiay/iot-platform-server
into dev
parents
d3b80419
be1e8c77
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
45 additions
and
23 deletions
saas-module/src/main/java/com/makeit/controller/analysis/SaasDiseaseEvaluateReportController.java
server-common/src/main/java/com/makeit/module/iot/service/IotProductDeviceService.java
server-service/src/main/java/com/makeit/dto/saas/analysis/SaasDiseaseEvaluateReportDTO.java
server-service/src/main/java/com/makeit/entity/platform/alarm/PlatDayDurationRecord.java
server-service/src/main/java/com/makeit/service/platform/alarm/alarmStrategy/BehaviorAlarm.java
server-service/src/main/java/com/makeit/service/saas/SaasDiseaseEvaluateReportService.java
server-service/src/main/java/com/makeit/service/saas/impl/SaasDiseaseEvaluateReportServiceImpl.java
server-service/src/main/java/com/makeit/service/saas/impl/SaasUserServiceImpl.java
server-service/src/main/resources/mappers/SaasOperationLogMapper.xml
saas-module/src/main/java/com/makeit/controller/analysis/SaasDiseaseEvaluateReportController.java
View file @
6e52ca55
...
@@ -4,6 +4,7 @@ package com.makeit.controller.analysis;
...
@@ -4,6 +4,7 @@ package com.makeit.controller.analysis;
import
com.makeit.common.dto.BaseIdDTO
;
import
com.makeit.common.dto.BaseIdDTO
;
import
com.makeit.common.response.ApiResponseEntity
;
import
com.makeit.common.response.ApiResponseEntity
;
import
com.makeit.common.response.ApiResponseUtils
;
import
com.makeit.common.response.ApiResponseUtils
;
import
com.makeit.dto.saas.analysis.SaasDiseaseEvaluateReportDTO
;
import
com.makeit.dto.saas.analysis.SaasSleepEvaluateReportDTO
;
import
com.makeit.dto.saas.analysis.SaasSleepEvaluateReportDTO
;
import
com.makeit.entity.saas.analysis.SaasDiseaseEvaluateReport
;
import
com.makeit.entity.saas.analysis.SaasDiseaseEvaluateReport
;
import
com.makeit.entity.saas.analysis.SaasSleepEvaluateReport
;
import
com.makeit.entity.saas.analysis.SaasSleepEvaluateReport
;
...
@@ -47,7 +48,7 @@ public class SaasDiseaseEvaluateReportController {
...
@@ -47,7 +48,7 @@ public class SaasDiseaseEvaluateReportController {
@Action
(
module
=
"报告管理-呼吸心率慢性病模型评估结果"
,
name
=
"新增"
,
code
=
"saas:diseaseEvaluateReport:add"
)
@Action
(
module
=
"报告管理-呼吸心率慢性病模型评估结果"
,
name
=
"新增"
,
code
=
"saas:diseaseEvaluateReport:add"
)
@ApiOperation
(
"新增"
)
@ApiOperation
(
"新增"
)
@PostMapping
(
"add"
)
@PostMapping
(
"add"
)
public
ApiResponseEntity
<
Void
>
add
(
@Validated
@RequestBody
Saas
Sleep
EvaluateReportDTO
dto
)
{
public
ApiResponseEntity
<
Void
>
add
(
@Validated
@RequestBody
Saas
Disease
EvaluateReportDTO
dto
)
{
saasDiseaseEvaluateReportService
.
add
(
dto
);
saasDiseaseEvaluateReportService
.
add
(
dto
);
return
ApiResponseUtils
.
success
();
return
ApiResponseUtils
.
success
();
}
}
...
@@ -55,7 +56,7 @@ public class SaasDiseaseEvaluateReportController {
...
@@ -55,7 +56,7 @@ public class SaasDiseaseEvaluateReportController {
@Action
(
module
=
"报告管理-呼吸心率慢性病模型评估结果"
,
name
=
"编辑"
,
code
=
"saas:diseaseEvaluateReport:edit"
)
@Action
(
module
=
"报告管理-呼吸心率慢性病模型评估结果"
,
name
=
"编辑"
,
code
=
"saas:diseaseEvaluateReport:edit"
)
@ApiOperation
(
"编辑"
)
@ApiOperation
(
"编辑"
)
@PostMapping
(
"edit"
)
@PostMapping
(
"edit"
)
public
ApiResponseEntity
<
Void
>
edit
(
@Validated
@RequestBody
Saas
Sleep
EvaluateReportDTO
dto
)
{
public
ApiResponseEntity
<
Void
>
edit
(
@Validated
@RequestBody
Saas
Disease
EvaluateReportDTO
dto
)
{
saasDiseaseEvaluateReportService
.
edit
(
dto
);
saasDiseaseEvaluateReportService
.
edit
(
dto
);
return
ApiResponseUtils
.
success
();
return
ApiResponseUtils
.
success
();
}
}
...
...
server-common/src/main/java/com/makeit/module/iot/service/IotProductDeviceService.java
View file @
6e52ca55
...
@@ -128,7 +128,7 @@ public class IotProductDeviceService extends IotCommonService {
...
@@ -128,7 +128,7 @@ public class IotProductDeviceService extends IotCommonService {
public
List
<
DeviceInfoContentBreathe
>
getDeviceLogByTimeRangeBreathe
(
String
deviceId
,
int
pageSize
,
LocalDateTime
startTime
,
LocalDateTime
endTime
)
{
public
List
<
DeviceInfoContentBreathe
>
getDeviceLogByTimeRangeBreathe
(
String
deviceId
,
int
pageSize
,
LocalDateTime
startTime
,
LocalDateTime
endTime
)
{
DateTimeFormatter
dateTimeFormatter
=
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd HH:mm:ss"
);
DateTimeFormatter
dateTimeFormatter
=
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd HH:mm:ss"
);
List
<
DeviceOperationLogEntity
>
deviceOperationLogEntityList
=
getDeviceLogByTimeRange
(
deviceId
,
"
event
"
,
pageSize
,
dateTimeFormatter
.
format
(
startTime
),
dateTimeFormatter
.
format
(
endTime
));
List
<
DeviceOperationLogEntity
>
deviceOperationLogEntityList
=
getDeviceLogByTimeRange
(
deviceId
,
"
reportProperty
"
,
pageSize
,
dateTimeFormatter
.
format
(
startTime
),
dateTimeFormatter
.
format
(
endTime
));
List
<
DeviceInfoContentBreathe
>
deviceInfoContentBreatheList
=
StreamUtil
.
map
(
deviceOperationLogEntityList
,
e
->
JsonUtil
.
toObj
((
String
)
e
.
getContent
(),
DeviceInfoContentBreathe
.
class
));
List
<
DeviceInfoContentBreathe
>
deviceInfoContentBreatheList
=
StreamUtil
.
map
(
deviceOperationLogEntityList
,
e
->
JsonUtil
.
toObj
((
String
)
e
.
getContent
(),
DeviceInfoContentBreathe
.
class
));
...
@@ -138,7 +138,7 @@ public class IotProductDeviceService extends IotCommonService {
...
@@ -138,7 +138,7 @@ public class IotProductDeviceService extends IotCommonService {
public
List
<
DeviceInfoContentSpace
>
getDeviceLogByTimeRangeSpace
(
String
deviceId
,
int
pageSize
,
LocalDateTime
startTime
,
LocalDateTime
endTime
)
{
public
List
<
DeviceInfoContentSpace
>
getDeviceLogByTimeRangeSpace
(
String
deviceId
,
int
pageSize
,
LocalDateTime
startTime
,
LocalDateTime
endTime
)
{
DateTimeFormatter
dateTimeFormatter
=
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd HH:mm:ss"
);
DateTimeFormatter
dateTimeFormatter
=
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd HH:mm:ss"
);
List
<
DeviceOperationLogEntity
>
deviceOperationLogEntityList
=
getDeviceLogByTimeRange
(
deviceId
,
"
event
"
,
pageSize
,
dateTimeFormatter
.
format
(
startTime
),
dateTimeFormatter
.
format
(
endTime
));
List
<
DeviceOperationLogEntity
>
deviceOperationLogEntityList
=
getDeviceLogByTimeRange
(
deviceId
,
"
reportProperty
"
,
pageSize
,
dateTimeFormatter
.
format
(
startTime
),
dateTimeFormatter
.
format
(
endTime
));
List
<
DeviceInfoContentSpace
>
deviceInfoContentSpaceList
=
StreamUtil
.
map
(
deviceOperationLogEntityList
,
e
->
JsonUtil
.
toObj
((
String
)
e
.
getContent
(),
DeviceInfoContentSpace
.
class
));
List
<
DeviceInfoContentSpace
>
deviceInfoContentSpaceList
=
StreamUtil
.
map
(
deviceOperationLogEntityList
,
e
->
JsonUtil
.
toObj
((
String
)
e
.
getContent
(),
DeviceInfoContentSpace
.
class
));
...
@@ -148,7 +148,7 @@ public class IotProductDeviceService extends IotCommonService {
...
@@ -148,7 +148,7 @@ public class IotProductDeviceService extends IotCommonService {
public
List
<
DeviceInfoContentFall
>
getDeviceLogByTimeRangeFall
(
String
deviceId
,
int
pageSize
,
LocalDateTime
startTime
,
LocalDateTime
endTime
)
{
public
List
<
DeviceInfoContentFall
>
getDeviceLogByTimeRangeFall
(
String
deviceId
,
int
pageSize
,
LocalDateTime
startTime
,
LocalDateTime
endTime
)
{
DateTimeFormatter
dateTimeFormatter
=
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd HH:mm:ss"
);
DateTimeFormatter
dateTimeFormatter
=
DateTimeFormatter
.
ofPattern
(
"yyyy-MM-dd HH:mm:ss"
);
List
<
DeviceOperationLogEntity
>
deviceOperationLogEntityList
=
getDeviceLogByTimeRange
(
deviceId
,
"
event
"
,
pageSize
,
dateTimeFormatter
.
format
(
startTime
),
dateTimeFormatter
.
format
(
endTime
));
List
<
DeviceOperationLogEntity
>
deviceOperationLogEntityList
=
getDeviceLogByTimeRange
(
deviceId
,
"
reportProperty
"
,
pageSize
,
dateTimeFormatter
.
format
(
startTime
),
dateTimeFormatter
.
format
(
endTime
));
List
<
DeviceInfoContentFall
>
deviceInfoContentSpaceList
=
StreamUtil
.
map
(
deviceOperationLogEntityList
,
e
->
JsonUtil
.
toObj
((
String
)
e
.
getContent
(),
DeviceInfoContentFall
.
class
));
List
<
DeviceInfoContentFall
>
deviceInfoContentSpaceList
=
StreamUtil
.
map
(
deviceOperationLogEntityList
,
e
->
JsonUtil
.
toObj
((
String
)
e
.
getContent
(),
DeviceInfoContentFall
.
class
));
...
@@ -261,8 +261,7 @@ public class IotProductDeviceService extends IotCommonService {
...
@@ -261,8 +261,7 @@ public class IotProductDeviceService extends IotCommonService {
if
(
responseMessage
.
getStatus
()
==
200
)
{
if
(
responseMessage
.
getStatus
()
==
200
)
{
IotPagerResult
pagerResult
=
JSON
.
parseObject
(
responseMessage
.
getResult
().
toString
(),
IotPagerResult
.
class
);
IotPagerResult
pagerResult
=
JSON
.
parseObject
(
responseMessage
.
getResult
().
toString
(),
IotPagerResult
.
class
);
List
<
DeviceOperationLogEntity
>
deviceOperationLogEntities
=
JSONArray
.
parseArray
(
pagerResult
.
getData
().
toString
()).
toJavaList
(
DeviceOperationLogEntity
.
class
);
List
<
DeviceOperationLogEntity
>
deviceOperationLogEntities
=
JSONArray
.
parseArray
(
pagerResult
.
getData
().
toString
()).
toJavaList
(
DeviceOperationLogEntity
.
class
);
return
deviceOperationLogEntities
.
stream
().
filter
(
deviceOperationLogEntity
->
deviceOperationLogEntity
.
getType
().
contains
(
"reportProperty"
))
return
deviceOperationLogEntities
;
.
collect
(
Collectors
.
toList
());
//Map maps = (Map) JSON.parse(datum.getContent().toString());
//Map maps = (Map) JSON.parse(datum.getContent().toString());
}
}
log
.
error
(
"获取设备接口失败:{}"
,
responseMessage
.
getMessage
());
log
.
error
(
"获取设备接口失败:{}"
,
responseMessage
.
getMessage
());
...
...
server-service/src/main/java/com/makeit/dto/saas/analysis/SaasDiseaseEvaluateReportDTO.java
0 → 100644
View file @
6e52ca55
package
com
.
makeit
.
dto
.
saas
.
analysis
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
/**
* <p>
* 呼吸心率慢性病模型评估结果
* </p>
*
* @author eugene young
* @since 2023-09-05
*/
@Data
@ApiModel
(
value
=
"SaasDiseaseEvaluateReport对象"
,
description
=
"呼吸心率慢性病模型评估结果"
)
public
class
SaasDiseaseEvaluateReportDTO
{
private
String
id
;
@ApiModelProperty
(
value
=
"评估内容 json字符串 {\"number:\"1\",condition:\"{}\",\"score\":\"\",evaluate:\"\"\"}"
)
private
String
resultContent
;
}
server-service/src/main/java/com/makeit/entity/platform/alarm/PlatDayDurationRecord.java
View file @
6e52ca55
package
com
.
makeit
.
entity
.
platform
.
alarm
;
package
com
.
makeit
.
entity
.
platform
.
alarm
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
com.makeit.common.entity.BaseBusEntity
;
import
com.makeit.common.entity.BaseBusEntity
;
import
io.swagger.annotations.ApiModelProperty
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
lombok.Data
;
...
@@ -30,9 +31,10 @@ public class PlatDayDurationRecord extends BaseBusEntity {
...
@@ -30,9 +31,10 @@ public class PlatDayDurationRecord extends BaseBusEntity {
private
String
oriDeviceId
;
private
String
oriDeviceId
;
/**
/**
* 日期
yyyyMMdd
* 日期
*/
*/
private
String
day
;
@JsonFormat
(
pattern
=
"yyyy-MM-dd"
)
private
Date
day
;
/**
/**
* 本次进入时间
* 本次进入时间
...
...
server-service/src/main/java/com/makeit/service/platform/alarm/alarmStrategy/BehaviorAlarm.java
View file @
6e52ca55
...
@@ -29,8 +29,6 @@ import org.springframework.beans.factory.annotation.Autowired;
...
@@ -29,8 +29,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import
org.springframework.stereotype.Component
;
import
org.springframework.stereotype.Component
;
import
java.time.LocalDateTime
;
import
java.time.LocalDateTime
;
import
java.time.ZoneOffset
;
import
java.time.format.DateTimeFormatter
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.Arrays
;
import
java.util.Date
;
import
java.util.Date
;
...
@@ -141,7 +139,6 @@ public class BehaviorAlarm implements IAlarm {
...
@@ -141,7 +139,6 @@ public class BehaviorAlarm implements IAlarm {
PlatRegionSetting
platRegionSetting
=
platAlarmCheckDTO
.
getPlatRegionSetting
();
PlatRegionSetting
platRegionSetting
=
platAlarmCheckDTO
.
getPlatRegionSetting
();
Date
now
=
new
Date
();
Date
now
=
new
Date
();
long
endLong
=
now
.
getTime
();
long
endLong
=
now
.
getTime
();
Long
startLong
=
alarmRedisDTO
.
getStartLong
();
long
count
=
endLong
-
alarmRedisDTO
.
getStartLong
();
long
count
=
endLong
-
alarmRedisDTO
.
getStartLong
();
//save db
//save db
platAlarmRecordService
.
getElderListByDeviceId
(
platAlarmCheckDTO
);
platAlarmRecordService
.
getElderListByDeviceId
(
platAlarmCheckDTO
);
...
@@ -156,8 +153,7 @@ public class BehaviorAlarm implements IAlarm {
...
@@ -156,8 +153,7 @@ public class BehaviorAlarm implements IAlarm {
durationRecord
.
setElderIds
(
platElderList
.
stream
().
map
(
BaseEntity:
:
getId
).
collect
(
Collectors
.
joining
(
","
)));
durationRecord
.
setElderIds
(
platElderList
.
stream
().
map
(
BaseEntity:
:
getId
).
collect
(
Collectors
.
joining
(
","
)));
durationRecord
.
setDuration
(
count
);
durationRecord
.
setDuration
(
count
);
durationRecord
.
setOriDeviceId
(
platDevice
.
getOriDeviceId
());
durationRecord
.
setOriDeviceId
(
platDevice
.
getOriDeviceId
());
DateTimeFormatter
dateTimeFormatter
=
DateTimeFormatter
.
ofPattern
(
"yyyyMMdd"
);
durationRecord
.
setDay
(
alarmRedisDTO
.
getStart
());
durationRecord
.
setDay
(
dateTimeFormatter
.
format
(
LocalDateTime
.
ofEpochSecond
(
startLong
/
1000
,
0
,
ZoneOffset
.
ofHours
(
8
))));
durationRecord
.
setStartDate
(
alarmRedisDTO
.
getStart
());
durationRecord
.
setStartDate
(
alarmRedisDTO
.
getStart
());
durationRecord
.
setEndDate
(
now
);
durationRecord
.
setEndDate
(
now
);
durationRecord
.
setTenantId
(
config
.
getTenantId
());
durationRecord
.
setTenantId
(
config
.
getTenantId
());
...
...
server-service/src/main/java/com/makeit/service/saas/SaasDiseaseEvaluateReportService.java
View file @
6e52ca55
package
com
.
makeit
.
service
.
saas
;
package
com
.
makeit
.
service
.
saas
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.makeit.dto.saas.analysis.Saas
Sleep
EvaluateReportDTO
;
import
com.makeit.dto.saas.analysis.Saas
Disease
EvaluateReportDTO
;
import
com.makeit.entity.saas.analysis.SaasDiseaseEvaluateReport
;
import
com.makeit.entity.saas.analysis.SaasDiseaseEvaluateReport
;
/**
/**
...
@@ -16,7 +16,7 @@ public interface SaasDiseaseEvaluateReportService extends IService<SaasDiseaseEv
...
@@ -16,7 +16,7 @@ public interface SaasDiseaseEvaluateReportService extends IService<SaasDiseaseEv
SaasDiseaseEvaluateReport
view
(
String
id
);
SaasDiseaseEvaluateReport
view
(
String
id
);
void
add
(
Saas
Sleep
EvaluateReportDTO
dto
);
void
add
(
Saas
Disease
EvaluateReportDTO
dto
);
void
edit
(
Saas
Sleep
EvaluateReportDTO
dto
);
void
edit
(
Saas
Disease
EvaluateReportDTO
dto
);
}
}
server-service/src/main/java/com/makeit/service/saas/impl/SaasDiseaseEvaluateReportServiceImpl.java
View file @
6e52ca55
package
com
.
makeit
.
service
.
saas
.
impl
;
package
com
.
makeit
.
service
.
saas
.
impl
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.makeit.dto.saas.analysis.Saas
Sleep
EvaluateReportDTO
;
import
com.makeit.dto.saas.analysis.Saas
Disease
EvaluateReportDTO
;
import
com.makeit.entity.saas.analysis.SaasDiseaseEvaluateReport
;
import
com.makeit.entity.saas.analysis.SaasDiseaseEvaluateReport
;
import
com.makeit.mapper.saas.analysis.SaasDiseaseEvaluateReportMapper
;
import
com.makeit.mapper.saas.analysis.SaasDiseaseEvaluateReportMapper
;
import
com.makeit.service.saas.SaasDiseaseEvaluateReportService
;
import
com.makeit.service.saas.SaasDiseaseEvaluateReportService
;
...
@@ -26,14 +26,14 @@ public class SaasDiseaseEvaluateReportServiceImpl extends ServiceImpl<SaasDiseas
...
@@ -26,14 +26,14 @@ public class SaasDiseaseEvaluateReportServiceImpl extends ServiceImpl<SaasDiseas
}
}
@Override
@Override
public
void
add
(
Saas
Sleep
EvaluateReportDTO
dto
)
{
public
void
add
(
Saas
Disease
EvaluateReportDTO
dto
)
{
SaasDiseaseEvaluateReport
entity
=
new
SaasDiseaseEvaluateReport
();
SaasDiseaseEvaluateReport
entity
=
new
SaasDiseaseEvaluateReport
();
BeanUtils
.
copyProperties
(
dto
,
entity
);
BeanUtils
.
copyProperties
(
dto
,
entity
);
save
(
entity
);
save
(
entity
);
}
}
@Override
@Override
public
void
edit
(
Saas
Sleep
EvaluateReportDTO
dto
)
{
public
void
edit
(
Saas
Disease
EvaluateReportDTO
dto
)
{
SaasDiseaseEvaluateReport
entity
=
getById
(
dto
.
getId
());
SaasDiseaseEvaluateReport
entity
=
getById
(
dto
.
getId
());
BeanUtils
.
copyProperties
(
dto
,
entity
);
BeanUtils
.
copyProperties
(
dto
,
entity
);
saveOrUpdate
(
entity
);
saveOrUpdate
(
entity
);
...
...
server-service/src/main/java/com/makeit/service/saas/impl/SaasUserServiceImpl.java
View file @
6e52ca55
...
@@ -249,7 +249,6 @@ implements SaasUserService{
...
@@ -249,7 +249,6 @@ implements SaasUserService{
@Transactional
@Transactional
@Override
@Override
public
void
edit
(
SaasUserDTOVO
dto
)
{
public
void
edit
(
SaasUserDTOVO
dto
)
{
dto
.
setAccount
(
null
);
superCantEdit
(
dto
);
superCantEdit
(
dto
);
check
(
dto
);
check
(
dto
);
...
...
server-service/src/main/resources/mappers/SaasOperationLogMapper.xml
View file @
6e52ca55
...
@@ -5,11 +5,11 @@
...
@@ -5,11 +5,11 @@
<select
id=
"selectByCondition"
resultType=
"com.makeit.dto.saas.SaasOperationLogDTO"
>
<select
id=
"selectByCondition"
resultType=
"com.makeit.dto.saas.SaasOperationLogDTO"
>
select
select
ol.id as id,
ol.id as id,
ol.saas_user_id as
plat
UserId,
ol.saas_user_id as
saas
UserId,
ol.tenant_id as tenantId,
ol.tenant_id as tenantId,
ol.content as content,
ol.content as content,
ol.create_date as createDate,
ol.create_date as createDate,
pu.username as
plat
UserName,
pu.username as
saas
UserName,
t.name as tenantName
t.name as tenantName
from saas_operation_log ol
from saas_operation_log ol
left join saas_user pu on ol.saas_user_id = pu.id and pu.del_flag = 0
left join saas_user pu on ol.saas_user_id = pu.id and pu.del_flag = 0
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment