Compare commits

...

5 Commits

  1. 9
      hzims-service-api/inspect-api/src/main/java/com/hnac/hzinfo/inspect/ai/vo/ClockInResponseDTO.java
  2. 2
      hzims-service-api/inspect-api/src/main/java/com/hnac/hzinfo/inspect/obj/entity/ObjectEntity.java
  3. 11
      hzims-service-api/inspect-api/src/main/java/com/hnac/hzinfo/inspect/task/entity/ClockInEntity.java
  4. 3
      hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/obj/services/impl/ObjectServiceImpl.java
  5. 2
      hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/task/job/service/impl/ConcurrentTaskServcie.java
  6. 3
      hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/task/mapper/ClockInMapper.java
  7. 30
      hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/task/mapper/ClockInMapper.xml
  8. 29
      hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/task/service/impl/ClockInServiceImpl.java
  9. 2
      hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/task/service/impl/TaskServiceImpl.java
  10. 108
      hzims-service/inspect/src/main/resources/application-dev.yml
  11. 38
      hzims-service/inspect/src/main/resources/application-prod.yml
  12. 92
      hzims-service/inspect/src/main/resources/application-test.yml
  13. 131
      hzims-service/inspect/src/main/resources/template/template.yml

9
hzims-service-api/inspect-api/src/main/java/com/hnac/hzinfo/inspect/ai/vo/ClockInResponseDTO.java

@ -2,6 +2,7 @@ package com.hnac.hzinfo.inspect.ai.vo;
import com.hnac.hzinfo.inspect.task.entity.ClockInEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@ -16,4 +17,12 @@ public class ClockInResponseDTO extends ClockInEntity {
private static final long serialVersionUID = 8445346022067680992L;
@ApiModelProperty(value = "打卡人名称")
private String clockPersonName;
@ApiModelProperty(value = "巡检任务名称")
private String taskName;
@ApiModelProperty(value = "巡检对象名称")
private String objectName;
}

2
hzims-service-api/inspect-api/src/main/java/com/hnac/hzinfo/inspect/obj/entity/ObjectEntity.java

@ -83,7 +83,7 @@ public class ObjectEntity extends TenantEntity {
/**
* 支持的巡检类型 0普通巡检1视频自动巡检2机器人巡检
*/
@ApiModelProperty(value = "inspectType 支持的巡检类型 0普通巡检,1视频自动巡检,2机器人巡检")
@ApiModelProperty(value = "inspectType 支持的巡检类型 0普通巡检,1视频自动巡检,2机器人巡检,3 打卡巡检")
@QueryField(condition = SqlCondition.EQUAL)
private String supportAutoVideo;

11
hzims-service-api/inspect-api/src/main/java/com/hnac/hzinfo/inspect/task/entity/ClockInEntity.java

@ -27,9 +27,11 @@ public class ClockInEntity extends TenantEntity {
@ApiModelProperty(value = "巡检任务ID")
private Long taskId;
@ApiModelProperty(value = "巡检对象Id")
private Long objectId;
@ApiModelProperty(value = "计划打卡开始时间")
@DateTimeFormat(
pattern = "yyyy-MM-dd HH:mm:ss"
@ -39,6 +41,8 @@ public class ClockInEntity extends TenantEntity {
)
private LocalDateTime planStartTime;
@ApiModelProperty(value = "计划打卡结束时间")
@DateTimeFormat(
pattern = "yyyy-MM-dd HH:mm:ss"
@ -48,9 +52,13 @@ public class ClockInEntity extends TenantEntity {
)
private LocalDateTime planEndTime;
@ApiModelProperty(value = "打卡人")
private Long clockPerson;
@ApiModelProperty(value = "打卡时间")
@DateTimeFormat(
pattern = "yyyy-MM-dd HH:mm:ss"
@ -59,4 +67,7 @@ public class ClockInEntity extends TenantEntity {
pattern = "yyyy-MM-dd HH:mm:ss"
)
private LocalDateTime clockTime;
}

3
hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/obj/services/impl/ObjectServiceImpl.java

@ -144,7 +144,8 @@ public class ObjectServiceImpl extends ServiceImpl<InspectObjectMapper, ObjectEn
throw new ServiceException("巡检点象描述不能为空!");
}
if (StringUtil.isNotBlank(entity.getSupportAutoVideo())) {
if ("0".equals(entity.getSupportAutoVideo()) || "1".equals(entity.getSupportAutoVideo()) || "2".equals(entity.getSupportAutoVideo())) {
if ("0".equals(entity.getSupportAutoVideo()) || "1".equals(entity.getSupportAutoVideo())
|| "2".equals(entity.getSupportAutoVideo()) || "3".equals(entity.getSupportAutoVideo())) {
} else {
throw new ServiceException("巡检点类型只支持数字: 0普通巡检,1,视频自动巡检,2机器人巡检");
}

2
hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/task/job/service/impl/ConcurrentTaskServcie.java

@ -145,7 +145,7 @@ public class ConcurrentTaskServcie extends TaskJobService implements ITaskJobSer
clock.setUpdateUser(object.getCreateUser());
clock.setTenantId(object.getTenantId());
clock.setTaskId(task.getId());
clock.setObjectId(object.getId());
clock.setObjectId(object.getObjectId());
clock.setPlanStartTime(task.getPlanStartTime());
clock.setPlanEndTime(task.getPlanEndTime());
clock.setClockPerson(userId);

3
hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/task/mapper/ClockInMapper.java

@ -16,5 +16,8 @@ import org.apache.ibatis.annotations.Param;
@Mapper
public interface ClockInMapper extends BaseMapper<ClockInEntity> {
IPage<ClockInResponseDTO> pageCondition(@Param("param") ClockInRequestDTO param, IPage<Object> page);
IPage<ClockInStatisticsResponseDTO> statistics(@Param("param") ClockInRequestDTO param, IPage<ClockInResponseDTO> page);
}

30
hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/task/mapper/ClockInMapper.xml

@ -2,20 +2,44 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.hnac.hzinfo.inspect.task.mapper.ClockInMapper">
<select id="pageCondition" resultType="com.hnac.hzinfo.inspect.ai.vo.ClockInResponseDTO">
SELECT CLOCK.*,TASK.PLAN_NAME AS taskName,OBJECT.`NAME` AS objectName FROM HZ_ST_EX_CLOCK_IN CLOCK
LEFT JOIN HZ_ST_EX_TASK TASK ON CLOCK.TASK_ID = TASK.ID
LEFT JOIN HZ_ST_RE_OBJECT OBJECT ON CLOCK.OBJECT_ID = OBJECT.ID
<where>
CLOCK.IS_DELETED = 0
<if test="param.clockPerson != null">
AND CLOCK.CLOCK_PERSON = #{param.clockPerson}
</if>
<if test="param.startTime != null and param.startTime != ''">
AND CLOCK.PLAN_START_TIME &gt;= #{param.startTime}
</if>
<if test="param.endTime != null and param.endTime != ''">
AND CLOCK.PLAN_END_TIME &lt;= #{param.endTime}
</if>
<if test="param.status != null">
AND CLOCK.STATUS = #{param.status}
</if>
</where>
ORDER BY CLOCK.CREATE_TIME,CLOCK.TASK_ID DESC
</select>
<select id="statistics" resultType="com.hnac.hzinfo.inspect.ai.vo.ClockInStatisticsResponseDTO">
SELECT CLOCK_PERSON,
SUM(CASE WHEN status = 0 THEN 1 ELSE 0 END) AS incomplete,
SUM(CASE WHEN status = 1 THEN 1 ELSE 0 END) AS complete
SUM(CASE WHEN status = 1 THEN 1 ELSE
0 END) AS complete
FROM HZ_ST_EX_CLOCK_IN
<where>
IS_DELETED = 0
<if test="param.clockPerson != null">
AND CLOCK_PERSON = #{param.clockPerson}
</if>
<if test="param.startTime != null">
<if test="param.startTime != null and param.startTime != ''">
AND PLAN_START_TIME &gt;= #{param.startTime}
</if>
<if test="param.endTime != null">
<if test="param.endTime != null and param.endTime != ''">
AND PLAN_END_TIME &lt;= #{param.endTime}
</if>
<if test="param.status != null">

29
hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/task/service/impl/ClockInServiceImpl.java

@ -1,10 +1,8 @@
package com.hnac.hzinfo.inspect.task.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.hnac.hzims.common.logs.utils.StringUtils;
import com.hnac.hzinfo.inspect.ai.vo.ClockInRequestDTO;
import com.hnac.hzinfo.inspect.ai.vo.ClockInResponseDTO;
import com.hnac.hzinfo.inspect.ai.vo.ClockInStatisticsResponseDTO;
@ -13,7 +11,6 @@ import com.hnac.hzinfo.inspect.task.entity.TaskObjectEntity;
import com.hnac.hzinfo.inspect.task.mapper.ClockInMapper;
import com.hnac.hzinfo.inspect.task.service.IClockInService;
import com.hnac.hzinfo.inspect.task.service.ITaskObjectService;
import com.hnac.hzinfo.inspect.task.wrapper.ClockInWrapper;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.mp.support.Condition;
@ -46,23 +43,17 @@ public class ClockInServiceImpl extends ServiceImpl<ClockInMapper, ClockInEntity
*/
@Override
public IPage<ClockInResponseDTO> pageCondition(ClockInRequestDTO param, Query query) {
QueryWrapper<ClockInEntity> queryWrapper = new QueryWrapper<ClockInEntity>() {{
if(ObjectUtil.isNotEmpty(param.getClockPerson())){
eq("CLOCK_PERSON",param.getClockPerson());
}
if(ObjectUtil.isNotEmpty(param.getStatus())){
eq("STATUS",param.getStatus());
}
if(StringUtils.isNotEmpty(param.getStartTime())){
ge("PLAN_START_TIME",param.getStartTime());
}
if(StringUtils.isNotEmpty(param.getEndTime())){
le("PLAN_END_TIME",param.getEndTime());
IPage<ClockInResponseDTO> page = this.baseMapper.pageCondition(param,Condition.getPage(query));
if(CollectionUtil.isEmpty(page.getRecords())){
return page;
}
page.setRecords(page.getRecords().stream().peek(record->{
User user = UserCache.getUser(record.getClockPerson());
if(ObjectUtil.isNotEmpty(user)){
record.setClockPersonName(user.getRealName());
}
}};
IPage pages = super.page(Condition.getPage(query), queryWrapper);
List list = ClockInWrapper.build().listVO(pages.getRecords());
return pages.setRecords(list);
}).collect(Collectors.toList()));
return page;
}
/**

2
hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/task/service/impl/TaskServiceImpl.java

@ -295,7 +295,7 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, TaskEntity> impleme
clock.setUpdateUser(object.getCreateUser());
clock.setTenantId(object.getTenantId());
clock.setTaskId(task.getId());
clock.setObjectId(object.getId());
clock.setObjectId(object.getObjectId());
clock.setPlanStartTime(task.getPlanStartTime());
clock.setPlanEndTime(task.getEndTime());
clock.setClockPerson(userId);

108
hzims-service/inspect/src/main/resources/application-dev.yml

@ -1,108 +0,0 @@
#服务器端口
server:
port: 8131
#数据源配置
spring:
datasource:
url: jdbc:mysql://175.6.40.67:5816/hzims_inspect?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&tinyInt1isBit=false&allowMultiQueries=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
# url: jdbc:mysql://192.168.65.86:3306/hzims_inspect?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&tinyInt1isBit=false&allowMultiQueries=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
username: root
password: 123
swagger:
base-packages:
- org.springbalde
- com.hnac
xxl:
job:
accessToken: ''
admin:
addresses: http://192.168.65.152:7009/xxl-job-admin
executor:
appname: hzims-inspect
ip: 192.168.65.172
logpath: /data/applogs/xxl-job/jobhandler
logretentiondays: -1
port: 8121
#oss配置
oss:
enabled: true
name: minio
tenant-mode: false
endpoint: http://175.6.40.67:19000
bucket-name: hzims-inspect
access-key: CHI7BJS991FEZZCB3U0R
secret-key: fjcR2RoQxZ4eTmOaB54rkITZjn/YVJhJZlckHxy/
hzinfo:
task:
pdf:
# pdf模板路径 ,请配置绝对路径
# module-path: /data/inspect/pdf/templet/inspectObj.html # linux
module-path: D:\data\hzinfo\templet\inspectObj.html # windows
# pdf文件存储路径,请配置绝对路径
# file-path: /data/inspect/pdf/file # linux
file-path: D:/data/hzinfo/file # windows
hzims:
redis:
key:
taskEndRemind: 200000:hzims:inspect:task:end:remind
tasks:
flag: 1
inspect:
ai:
# 文件外网访问路径
replace-url: http://175.6.40.67:19000
rabbit-mq-send-topic: inspect_task_send_ia_task
face:
# 人脸识别服务地址
url: http://192.168.65.249:9876
# 越小精度越高
ratio: 0.6
video:
# 文件内网访问路径
minio-url: http://192.168.65.246:8585
task:
#短信模块code
templateCode:
#巡检任务开始前发送短信信息阿里云模板
taskBegin: aliyun-task-begin
#巡检任务结束前发送短信信息阿里云模板
taskEnd: aliyun-task-end
#巡检消息推送模板 - 极光
jgPushCode: hzinfo-inspect
offline:
temp:
dowload: /data/hzims/temp/offline/download
sync: /data/hzims/temp/offline/sync
maxSize: 1048576000
blade:
mqtt:
enabled: true
userName: hzinfo
password: hz123456
urls: tcp://121.4.245.170:18883
clientId: hzinfo_inspect
topicNames: topic_ai_events
#sms:
# aliyun:
# connectTimeout: 10000
# readTimeout: 10000
# proxyDomain: 175.6.40.67:37880
# accessKeyId: 7262257e6dd16e85ddfee09d3e8eedaa
# accessKeySecret: 7dba15f64eba724521d0ecd4c02a8a3e49f3ffa95ff75d63a3c4a88a1679282b173e5c13ddbba3eb2699a65a1be1b32b
# profilePoint: cn-changsha
# endPoint: cn-changsha
# signName: 华自科技

38
hzims-service/inspect/src/main/resources/application-prod.yml

@ -1,38 +0,0 @@
#服务器端口
server:
port: 8120
#数据源配置
spring:
datasource:
url: ${blade.datasource.inspect.prod.url}
username: ${blade.datasource.inspect.prod.username}
password: ${blade.datasource.inspect.prod.password}
swagger:
base-packages:
- org.springbalde
- com.hnac
#oss配置
oss:
enabled: true
name: minio
tenant-mode: false
endpoint: http://175.6.40.67:19000
bucket-name: hzims-inspect
access-key: CHI7BJS991FEZZCB3U0R
secret-key: fjcR2RoQxZ4eTmOaB54rkITZjn/YVJhJZlckHxy/
hzims:
redis:
key:
taskEndRemind: hzims:inspect:task:end:remind
tasks:
flag: 1
inspect:
face:
# 人脸识别服务地址
url: http://192.168.65.249:9876
# 越小精度越高
ratio: 0.6

92
hzims-service/inspect/src/main/resources/application-test.yml

@ -1,92 +0,0 @@
#服务器端口
server:
port: 8131
#数据源配置
spring:
datasource:
url: jdbc:mysql://175.6.40.67:10017/hzims_inspect?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&tinyInt1isBit=false&allowMultiQueries=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
# url: jdbc:mysql://192.168.65.86:3306/hzims_inspect?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&tinyInt1isBit=false&allowMultiQueries=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true
username: root
password: 123
swagger:
base-packages:
- org.springbalde
- com.hnac
xxl:
job:
accessToken: ''
admin:
addresses: http://192.168.65.152:7009/xxl-job-admin
executor:
appname: hzims-inspect
ip: 192.168.65.172
logpath: /data/applogs/xxl-job/jobhandler
logretentiondays: -1
port: 8121
#oss配置
oss:
enabled: true
name: minio
tenant-mode: false
endpoint: http://175.6.40.67:19000
bucket-name: hzims-inspect
access-key: CHI7BJS991FEZZCB3U0R
secret-key: fjcR2RoQxZ4eTmOaB54rkITZjn/YVJhJZlckHxy/
hzinfo:
task:
pdf:
# pdf模板路径 ,请配置绝对路径
# module-path: /data/inspect/pdf/templet/inspectObj.html # linux
module-path: D:\data\hzinfo\templet\inspectObj.html # windows
# pdf文件存储路径,请配置绝对路径
# file-path: /data/inspect/pdf/file # linux
file-path: D:/data/hzinfo/file # windows
hzims:
tasks:
flag: 1
inspect:
ai:
# 文件外网访问路径
replace-url: http://175.6.40.67:19000
face:
# 人脸识别服务地址
url: http://192.168.65.249:9876
# 越小精度越高
ratio: 0.6
video:
# 文件内网访问路径
minio-url: http://192.168.65.246:8585
task:
#短信模块code
templateCode:
#巡检任务开始前发送短信信息阿里云模板
taskBegin: aliyun-task-begin
#巡检任务结束前发送短信信息阿里云模板
taskEnd: aliyun-task-end
#巡检消息推送模板 - 极光
jgPushCode: hzinfo-inspect
#sms:
# aliyun:
# connectTimeout: 10000
# readTimeout: 10000
# proxyDomain: 175.6.40.67:37880
# accessKeyId: 7262257e6dd16e85ddfee09d3e8eedaa
# accessKeySecret: 7dba15f64eba724521d0ecd4c02a8a3e49f3ffa95ff75d63a3c4a88a1679282b173e5c13ddbba3eb2699a65a1be1b32b
# profilePoint: cn-changsha
# endPoint: cn-changsha
# signName: 华自科技

131
hzims-service/inspect/src/main/resources/template/template.yml

@ -1,131 +0,0 @@
#服务器端口
server:
port: 8132
##oss配置
oss:
enabled: true
name: minio
tenant-mode: false
bucket-name: prd200000
endpoint: ${hzinfo.oss.endpoint}
access-key: ${hzinfo.oss.access-key}
secret-key: ${hzinfo.oss.secret-key}
#数据源配置
spring:
#排除DruidDataSourceAutoConfigure
autoconfigure:
exclude: com.baomidou.dynamic.datasource.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
datasource:
url: jdbc:mysql://${hzinfo.db.busines.ip}:${hzinfo.db.busines.port}/hzims-inspect?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&tinyInt1isBit=false&allowMultiQueries=true&serverTimezone=GMT%2B8&allowPublicKeyRetrieval=true
username: ${hzinfo.db.busines.username}
password: ${hzinfo.db.busines.password}
#mybatis-plus配置
mybatis-plus:
mapper-locations: classpath:com/hnac/hzims/**/mapper/*Mapper.xml
#实体扫描,多个package用逗号或者分号分隔
typeAliasesPackage: com.hnac.hzims.**.entity
#swagger扫描路径配置
swagger:
base-packages: com.hnac.hzims.inspect, - org.springbalde
xxl:
job:
auto:
registry: 1
accessToken: 'hzinfo88238888!'
admin:
addresses: http://${hzims.xxljob.ip}:${hzims.xxljob.port}/xxl-job-admin
executor:
appname: hzinfo-inspect
ip: ${hzims.server.ip}
logpath: /data/applogs/xxl-job/jobhandler
logretentiondays: 7
port: 28132
hzinfo:
redis:
key:
taskEndRemind: hzims:inspect:task:end:remind
task:
pdf:
# pdf模板路径 ,请配置绝对路径
module-path: /data/inspect/pdf/templet/inspectObj.html
# pdf文件存储路径,请配置绝对路径
file-path: /data/inspect/pdf/file
hzims:
tasks:
flag: 1
inspect:
ai:
# 文件外网访问路径
replace-url: http://175.6.40.67:19000
rabbit-mq-send-topic: inspect_task_send_ia_task
face:
# 人脸识别服务地址
url: http://192.168.65.249:9876
# 越小精度越高
ratio: 0.6
video:
# 文件内网访问路径
minio-url: http://192.168.1.26:9000
task:
#短信模块code
templateCode:
#巡检任务开始前发送短信信息阿里云模板
taskBegin: aliyun-task-begin
taskBeginV2: inspect-task-remind
#巡检任务结束前发送短信信息阿里云模板
taskEnd: aliyun-task-end
#巡检消息推送模板 - 极光
jgPushCode: hzinfo-inspect
offline:
download:
path: /data/inspect/offline/download
table: HZ_ST_EX_TASK_USER,HZ_ST_EX_TASK,HZ_ST_RE_PLAN,HZ_ST_EX_EVENT,HZ_ST_EVENT_ATTACHMENT,HZ_ST_EX_EVENT_RECORD,HZ_ST_EX_OBJECT,HZ_ST_EX_OBJECT_PROJECT,HZ_ST_EX_OBJECT_PROJECT_CONTENT,HZ_ST_RE_OBJECT,HZ_ST_RE_PROJECT,HZ_ST_RE_CONTENT,HZ_ST_RE_OBJECT_DANGER,HZ_OFFLINE_TASK
upload:
path: /data/inspect/offline/upload
offline:
temp:
download: /data/hzims/temp/offline/download
sync: /data/hzims/temp/offline/sync
max-size: 1073741824
logging:
level:
com.hnac.hzinfo.inspect: DEBUG
feign:
client:
config:
# feign全局日志级别
default:
loggerLevel: FULL
blade:
data-scope:
enabled: false
mqtt:
enabled: true
userName: ${hzinfo.mq.username}
password: ${hzinfo.mq.password}
urls: tcp://${hzinfo.mq.ip}:${hzinfo.mq.port}
clientId: hzinfo_inspect
topicNames: topic_ai_events
data:
sdk:
enabled: true
url: http://${hzims.sdk.ip}/api/hzinfo-data-config
ctrlUrl: http://${hzims.sdk.ip}/api/hzinfo-data-handler
appId: ${hzims.sdk.appId}
appSecret: ${hzims.sdk.appSecret}
redisIp: ${hzims.sdk.redisIp}
redisPort: ${hzims.sdk.redisPort}
password: ${hzims.sdk.password}
maxKeys: 1000
Loading…
Cancel
Save