Browse Source

项目数据数据推送

master
曲树通 4 years ago
parent
commit
8b016dd237
  1. 11
      epdc-cloud-analysis-pc/src/main/java/com/elink/esua/epdc/modules/screen/controller/ScreenBaseReportController.java
  2. 5
      epdc-cloud-analysis-pc/src/main/java/com/elink/esua/epdc/modules/screen/dao/ScreenBaseReportDao.java
  3. 5
      epdc-cloud-analysis-pc/src/main/java/com/elink/esua/epdc/modules/screen/service/ScreenBaseReportService.java
  4. 76
      epdc-cloud-analysis-pc/src/main/java/com/elink/esua/epdc/modules/screen/service/impl/ScreenBaseReportServiceImpl.java
  5. 55
      epdc-cloud-analysis-pc/src/main/resources/mapper/screen/ScreenBaseReportDao.xml

11
epdc-cloud-analysis-pc/src/main/java/com/elink/esua/epdc/modules/screen/controller/ScreenBaseReportController.java

@ -1,10 +1,13 @@
package com.elink.esua.epdc.modules.screen.controller; package com.elink.esua.epdc.modules.screen.controller;
import com.elink.esua.epdc.commons.tools.utils.Result; import com.elink.esua.epdc.commons.tools.utils.Result;
import com.elink.esua.epdc.dto.analysis.pc.screen.form.ItemCountParamDTO;
import com.elink.esua.epdc.dto.analysis.pc.screen.form.ScreenJobFormDTO;
import com.elink.esua.epdc.modules.screen.service.ScreenBaseReportService; import com.elink.esua.epdc.modules.screen.service.ScreenBaseReportService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
@ -166,9 +169,9 @@ public class ScreenBaseReportController {
* @Param [customId] * @Param [customId]
**/ **/
@PostMapping("gridproject") @PostMapping("gridproject")
Result selectGridProjectList() { Result selectGridProjectList(@RequestBody ItemCountParamDTO itemCountParamDTO) {
log.info("<gridproject|网格项目数据>定时任务执行"); log.info("<gridproject|网格项目数据>定时任务执行");
return screenBaseReportService.selectGridProjectList(); return screenBaseReportService.selectGridProjectList(itemCountParamDTO);
} }
/** /**
@ -178,9 +181,9 @@ public class ScreenBaseReportController {
* @Param [customId] * @Param [customId]
**/ **/
@PostMapping("agencyproject") @PostMapping("agencyproject")
Result selectCommunityProjectList() { Result selectCommunityProjectList(@RequestBody ItemCountParamDTO formDto) {
log.info("<agencyproject|组织项目数据>定时任务执行"); log.info("<agencyproject|组织项目数据>定时任务执行");
return screenBaseReportService.selectCommunityProjectList(); return screenBaseReportService.selectCommunityProjectList(formDto);
} }
/** /**

5
epdc-cloud-analysis-pc/src/main/java/com/elink/esua/epdc/modules/screen/dao/ScreenBaseReportDao.java

@ -1,6 +1,7 @@
package com.elink.esua.epdc.modules.screen.dao; package com.elink.esua.epdc.modules.screen.dao;
import com.elink.esua.epdc.commons.mybatis.dao.BaseDao; import com.elink.esua.epdc.commons.mybatis.dao.BaseDao;
import com.elink.esua.epdc.dto.analysis.pc.screen.form.ItemCountParamDTO;
import com.elink.esua.epdc.dto.analysis.pc.screen.result.*; import com.elink.esua.epdc.dto.analysis.pc.screen.result.*;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
@ -140,7 +141,7 @@ public interface ScreenBaseReportDao extends BaseDao<ScreenBaseReportResultDTO>
* @Date 2021/6/25 * @Date 2021/6/25
* @Param [customId] * @Param [customId]
**/ **/
List<GridGridProjectResultDTO> selectGridProjectList(@Param("customId") String customId); List<GridGridProjectResultDTO> selectGridProjectList(ItemCountParamDTO paramDto);
/** /**
* @return java.util.List<com.elink.esua.epdc.dto.analysis.pc.screen.result.CommunityProjectResultDTO> * @return java.util.List<com.elink.esua.epdc.dto.analysis.pc.screen.result.CommunityProjectResultDTO>
@ -149,7 +150,7 @@ public interface ScreenBaseReportDao extends BaseDao<ScreenBaseReportResultDTO>
* @Date 2021/6/25 * @Date 2021/6/25
* @Param [customId] * @Param [customId]
**/ **/
List<CommunityProjectResultDTO> selectCommunityProjectList(@Param("customId") String customId); List<CommunityProjectResultDTO> selectCommunityProjectList(ItemCountParamDTO paramDto);
/** /**
* @return java.util.List<com.elink.esua.epdc.dto.analysis.pc.screen.result.GridGroupTotalResultDTO> * @return java.util.List<com.elink.esua.epdc.dto.analysis.pc.screen.result.GridGroupTotalResultDTO>

5
epdc-cloud-analysis-pc/src/main/java/com/elink/esua/epdc/modules/screen/service/ScreenBaseReportService.java

@ -1,6 +1,7 @@
package com.elink.esua.epdc.modules.screen.service; package com.elink.esua.epdc.modules.screen.service;
import com.elink.esua.epdc.commons.tools.utils.Result; import com.elink.esua.epdc.commons.tools.utils.Result;
import com.elink.esua.epdc.dto.analysis.pc.screen.form.ItemCountParamDTO;
/** /**
* 大屏数据采集接口共 (17) * 大屏数据采集接口共 (17)
@ -112,7 +113,7 @@ public interface ScreenBaseReportService {
* @Date 2021/6/25 * @Date 2021/6/25
* @Param [customId] * @Param [customId]
**/ **/
Result selectGridProjectList(); Result selectGridProjectList(ItemCountParamDTO itemCountParamDTO);
/** /**
* @Description 组织项目数据 * @Description 组织项目数据
@ -120,7 +121,7 @@ public interface ScreenBaseReportService {
* @Date 2021/6/25 * @Date 2021/6/25
* @Param [customId] * @Param [customId]
**/ **/
Result selectCommunityProjectList(); Result selectCommunityProjectList(ItemCountParamDTO formDto);
/** /**

76
epdc-cloud-analysis-pc/src/main/java/com/elink/esua/epdc/modules/screen/service/impl/ScreenBaseReportServiceImpl.java

@ -4,15 +4,21 @@ import com.alibaba.fastjson.JSONObject;
import com.elink.esua.epdc.commons.mybatis.service.impl.BaseServiceImpl; import com.elink.esua.epdc.commons.mybatis.service.impl.BaseServiceImpl;
import com.elink.esua.epdc.commons.tools.constant.EpmetConstant; import com.elink.esua.epdc.commons.tools.constant.EpmetConstant;
import com.elink.esua.epdc.commons.tools.utils.Result; import com.elink.esua.epdc.commons.tools.utils.Result;
import com.elink.esua.epdc.dto.analysis.pc.screen.form.ItemCountParamDTO;
import com.elink.esua.epdc.dto.analysis.pc.screen.result.*; import com.elink.esua.epdc.dto.analysis.pc.screen.result.*;
import com.elink.esua.epdc.modules.screen.dao.ScreenBaseReportDao; import com.elink.esua.epdc.modules.screen.dao.ScreenBaseReportDao;
import com.elink.esua.epdc.modules.screen.service.ScreenBaseReportService; import com.elink.esua.epdc.modules.screen.service.ScreenBaseReportService;
import com.elink.esua.epdc.utils.EpmetUtils; import com.elink.esua.epdc.utils.EpmetUtils;
import com.elink.esua.epdc.utils.ScreenDataUtils; import com.elink.esua.epdc.utils.ScreenDataUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
@ -166,20 +172,80 @@ public class ScreenBaseReportServiceImpl extends BaseServiceImpl<ScreenBaseRepor
} }
@Override @Override
public Result selectGridProjectList() { public Result selectGridProjectList(ItemCountParamDTO paramDto) {
List<GridGridProjectResultDTO> gridGridProjectResultDTOS = baseDao.selectGridProjectList(EPMET_CONFIG_CUSTOMER_ID); paramDto.setCustomId(EPMET_CONFIG_CUSTOMER_ID);
if (StringUtils.isBlank(paramDto.getEndTime())) {
List<GridGridProjectResultDTO> gridGridProjectResultDTOS = baseDao.selectGridProjectList(paramDto);
String dataJson = ScreenDataUtils.getScreenDateJson(gridGridProjectResultDTOS, true);
// 数据上报
String s = epmetUtils.httpPost(EpmetConstant.EPMET_SCREEN_BASE_REPORT_GRID_PROJECT, dataJson);
System.out.print("结果返回"+s);
} else {
// 推送所有日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar ca = Calendar.getInstance();
Date curDate = null;
Date endDate = null;
try {
curDate = sdf.parse(paramDto.getStartTime());
endDate = sdf.parse(paramDto.getEndTime());
} catch (ParseException e) {
e.printStackTrace();
}
int i =curDate.compareTo(endDate);
while (curDate.compareTo(endDate) <= 0) {
ca.setTime(curDate);
paramDto.setEndTime(sdf.format(curDate));
ca.add(Calendar.DAY_OF_MONTH, 1);
curDate = ca.getTime();
// 推送逻辑
List<GridGridProjectResultDTO> gridGridProjectResultDTOS = baseDao.selectGridProjectList(paramDto);
String dataJson = ScreenDataUtils.getScreenDateJson(gridGridProjectResultDTOS, true); String dataJson = ScreenDataUtils.getScreenDateJson(gridGridProjectResultDTOS, true);
// 数据上报 // 数据上报
epmetUtils.httpPost(EpmetConstant.EPMET_SCREEN_BASE_REPORT_GRID_PROJECT, dataJson); epmetUtils.httpPost(EpmetConstant.EPMET_SCREEN_BASE_REPORT_GRID_PROJECT, dataJson);
System.out.print("所有数据" + dataJson);
}
}
return new Result(); return new Result();
} }
@Override @Override
public Result selectCommunityProjectList() { public Result selectCommunityProjectList(ItemCountParamDTO paramDto) {
List<CommunityProjectResultDTO> communityProjectResultDTOS = baseDao.selectCommunityProjectList(EPMET_CONFIG_CUSTOMER_ID); paramDto.setCustomId(EPMET_CONFIG_CUSTOMER_ID);
if (StringUtils.isBlank(paramDto.getEndTime())) {
List<CommunityProjectResultDTO> communityProjectResultDTOS = baseDao.selectCommunityProjectList(paramDto);
String dataJson = ScreenDataUtils.getScreenDateJson(communityProjectResultDTOS, true); String dataJson = ScreenDataUtils.getScreenDateJson(communityProjectResultDTOS, true);
// 数据上报 // 数据上报
epmetUtils.httpPost(EpmetConstant.EPMET_SCREEN_BASE_REPORT_AGENCY_PROJECT, dataJson); String s = epmetUtils.httpPost(EpmetConstant.EPMET_SCREEN_BASE_REPORT_AGENCY_PROJECT, dataJson);
System.out.print("结果返回"+s);
} else {
// 推送所有日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar ca = Calendar.getInstance();
Date curDate = null;
Date endDate = null;
try {
curDate = sdf.parse(paramDto.getStartTime());
endDate = sdf.parse(paramDto.getEndTime());
} catch (ParseException e) {
e.printStackTrace();
}
int i =curDate.compareTo(endDate);
while (curDate.compareTo(endDate) <= 0) {
ca.setTime(curDate);
paramDto.setEndTime(sdf.format(curDate));
ca.add(Calendar.DAY_OF_MONTH, 1);
curDate = ca.getTime();
// 推送逻辑
List<CommunityProjectResultDTO> communityProjectResultDTOS = baseDao.selectCommunityProjectList(paramDto);
String dataJson = ScreenDataUtils.getScreenDateJson(communityProjectResultDTOS, true);
// 数据上报
String s = epmetUtils.httpPost(EpmetConstant.EPMET_SCREEN_BASE_REPORT_AGENCY_PROJECT, dataJson);
System.out.print("所有数据" + dataJson);
}
}
return new Result(); return new Result();
} }

55
epdc-cloud-analysis-pc/src/main/resources/mapper/screen/ScreenBaseReportDao.xml

@ -1450,6 +1450,21 @@
grid.id as gridId, grid.id as gridId,
grid.pid as agencyId, grid.pid as agencyId,
'${customId}' as customerId, '${customId}' as customerId,
<choose>
<when test="endTime != null and endTime != ''">
DATE_FORMAT(date_add(#{endTime}, interval -1 day), '%Y%m%d') as dateId,
CONCAT(DATE_FORMAT(STR_TO_DATE(DATE_FORMAT(date_add(#{endTime}, interval -1 day), '%Y-%m-%d'), '%Y'), '%Y'),
'W',
WEEK(STR_TO_DATE(DATE_FORMAT(date_add(#{endTime}, interval -1 day), '%Y-%m-%d'), '%Y-%m-%d'))) weekId,
DATE_FORMAT(STR_TO_DATE(DATE_FORMAT(date_add(#{endTime}, interval -1 day), '%Y-%m-%d'), '%Y'), '%Y') AS yearId,
CONCAT(DATE_FORMAT(STR_TO_DATE(DATE_FORMAT(date_add(#{endTime}, interval -1 day), '%Y-%m-%d'), '%Y'), '%Y'),
'Q',
QUARTER(STR_TO_DATE(DATE_FORMAT(date_add(#{endTime}, interval -1 day), '%Y-%m-%d'),
'%Y-%m-%d'))) quarterId,
DATE_FORMAT(STR_TO_DATE(DATE_FORMAT(date_add(#{endTime}, interval -1 day), '%Y-%m-%d'), '%Y-%m'), '%Y%m') AS monthId,
</when>
<otherwise>
DATE_FORMAT(date_add(now(), interval -1 day), '%Y%m%d') as dateId, DATE_FORMAT(date_add(now(), interval -1 day), '%Y%m%d') as dateId,
CONCAT(DATE_FORMAT(STR_TO_DATE(DATE_FORMAT(date_add(now(), interval -1 day), '%Y-%m-%d'), '%Y'), '%Y'), CONCAT(DATE_FORMAT(STR_TO_DATE(DATE_FORMAT(date_add(now(), interval -1 day), '%Y-%m-%d'), '%Y'), '%Y'),
'W', 'W',
@ -1460,6 +1475,8 @@
QUARTER(STR_TO_DATE(DATE_FORMAT(date_add(now(), interval -1 day), '%Y-%m-%d'), QUARTER(STR_TO_DATE(DATE_FORMAT(date_add(now(), interval -1 day), '%Y-%m-%d'),
'%Y-%m-%d'))) quarterId, '%Y-%m-%d'))) quarterId,
DATE_FORMAT(STR_TO_DATE(DATE_FORMAT(date_add(now(), interval -1 day), '%Y-%m-%d'), '%Y-%m'), '%Y%m') AS monthId, DATE_FORMAT(STR_TO_DATE(DATE_FORMAT(date_add(now(), interval -1 day), '%Y-%m-%d'), '%Y-%m'), '%Y%m') AS monthId,
</otherwise>
</choose>
ifnull(count(ei.ID),0) as projectTotal, ifnull(count(ei.ID),0) as projectTotal,
ifnull(count(ei.ITEM_STATE = '0' or null),0) as pendingTotal, ifnull(count(ei.ITEM_STATE = '0' or null),0) as pendingTotal,
ifnull(round(ifnull(count(ei.ITEM_STATE = '0' or null),0) / ifnull(count(ei.ID),0) * 100),0) as pendingRatio, ifnull(round(ifnull(count(ei.ITEM_STATE = '0' or null),0) / ifnull(count(ei.ID),0) * 100),0) as pendingRatio,
@ -1486,17 +1503,36 @@
where grid.del_flag = '0' where grid.del_flag = '0'
and grid.type_key = 'grid_party' and grid.type_key = 'grid_party'
and grid.id not in (SELECT t.DEPT_ID FROM `esua_epdc_admin`.`sys_dept_config` t WHERE t.DEL_FLAG = '0') and grid.id not in (SELECT t.DEPT_ID FROM `esua_epdc_admin`.`sys_dept_config` t WHERE t.DEL_FLAG = '0')
<choose>
<when test="endTime != null and endTime != ''">
and DATE_FORMAT(ei.CREATED_TIME, '%Y-%m-%d') &lt;= DATE_FORMAT(date_add(#{endTime}, interval -1 day), '%Y-%m-%d')
</when>
<otherwise>
and DATE_FORMAT(ei.CREATED_TIME, '%Y-%m-%d') &lt;= DATE_FORMAT(date_add(now(), interval -1 day), '%Y-%m-%d') and DATE_FORMAT(ei.CREATED_TIME, '%Y-%m-%d') &lt;= DATE_FORMAT(date_add(now(), interval -1 day), '%Y-%m-%d')
</otherwise>
</choose>
group by grid.id group by grid.id
</select> </select>
<select id="selectCommunityProjectList" <select id="selectCommunityProjectList"
resultType="com.elink.esua.epdc.dto.analysis.pc.screen.result.CommunityProjectResultDTO"> resultType="com.elink.esua.epdc.dto.analysis.pc.screen.result.CommunityProjectResultDTO">
select select
sd.id as agencyId, sd.id as agencyId,
sd.pid as parentId, sd.pid as parentId,
'${customId}' as customerId, '${customId}' as customerId,
<choose>
<when test="endTime != null and endTime != ''">
DATE_FORMAT(date_add(#{endTime}, interval -1 day), '%Y%m%d') as dateId,
CONCAT(DATE_FORMAT(STR_TO_DATE(DATE_FORMAT(date_add(#{endTime}, interval -1 day), '%Y-%m-%d'), '%Y'), '%Y'),
'W',
WEEK(STR_TO_DATE(DATE_FORMAT(date_add(#{endTime}, interval -1 day), '%Y-%m-%d'), '%Y-%m-%d'))) weekId,
DATE_FORMAT(STR_TO_DATE(DATE_FORMAT(date_add(#{endTime}, interval -1 day), '%Y-%m-%d'), '%Y'), '%Y') AS yearId,
CONCAT(DATE_FORMAT(STR_TO_DATE(DATE_FORMAT(date_add(#{endTime}, interval -1 day), '%Y-%m-%d'), '%Y'), '%Y'),
'Q',
QUARTER(STR_TO_DATE(DATE_FORMAT(date_add(#{endTime}, interval -1 day), '%Y-%m-%d'),
'%Y-%m-%d'))) quarterId,
DATE_FORMAT(STR_TO_DATE(DATE_FORMAT(date_add(#{endTime}, interval -1 day), '%Y-%m-%d'), '%Y-%m'), '%Y%m') AS monthId,
</when>
<otherwise>
DATE_FORMAT(date_add(now(), interval -1 day), '%Y%m%d') as dateId, DATE_FORMAT(date_add(now(), interval -1 day), '%Y%m%d') as dateId,
CONCAT(DATE_FORMAT(STR_TO_DATE(DATE_FORMAT(date_add(now(), interval -1 day), '%Y-%m-%d'), '%Y'), '%Y'), CONCAT(DATE_FORMAT(STR_TO_DATE(DATE_FORMAT(date_add(now(), interval -1 day), '%Y-%m-%d'), '%Y'), '%Y'),
'W', 'W',
@ -1507,6 +1543,8 @@
QUARTER(STR_TO_DATE(DATE_FORMAT(date_add(now(), interval -1 day), '%Y-%m-%d'), QUARTER(STR_TO_DATE(DATE_FORMAT(date_add(now(), interval -1 day), '%Y-%m-%d'),
'%Y-%m-%d'))) quarterId, '%Y-%m-%d'))) quarterId,
DATE_FORMAT(STR_TO_DATE(DATE_FORMAT(date_add(now(), interval -1 day), '%Y-%m-%d'), '%Y-%m'), '%Y%m') AS monthId, DATE_FORMAT(STR_TO_DATE(DATE_FORMAT(date_add(now(), interval -1 day), '%Y-%m-%d'), '%Y-%m'), '%Y%m') AS monthId,
</otherwise>
</choose>
ifnull(count(ei.ID),0) as projectTotal, ifnull(count(ei.ID),0) as projectTotal,
ifnull(count(ei.ITEM_STATE = '0' or null),0) as pendingTotal, ifnull(count(ei.ITEM_STATE = '0' or null),0) as pendingTotal,
ifnull(round(ifnull(count(ei.ITEM_STATE = '0' or null),0) / ifnull(count(ei.ID),0) * 100),0) as pendingRatio, ifnull(round(ifnull(count(ei.ITEM_STATE = '0' or null),0) / ifnull(count(ei.ID),0) * 100),0) as pendingRatio,
@ -1528,12 +1566,19 @@
ifnull(count(ei.ITEM_STATE = '0' and DATE_FORMAT(ei.CREATED_TIME, '%Y-%m-%d') = DATE_FORMAT(date_add(now(), interval -1 day), '%Y-%m-%d') or null),0) as pendingIncr, ifnull(count(ei.ITEM_STATE = '0' and DATE_FORMAT(ei.CREATED_TIME, '%Y-%m-%d') = DATE_FORMAT(date_add(now(), interval -1 day), '%Y-%m-%d') or null),0) as pendingIncr,
ifnull(count((ei.ITEM_STATE = '10' or ei.ITEM_STATE = '5') and DATE_FORMAT(ei.CREATED_TIME, '%Y-%m-%d') = DATE_FORMAT(date_add(now(), interval -1 day), '%Y-%m-%d') or null),0) as closedIncr ifnull(count((ei.ITEM_STATE = '10' or ei.ITEM_STATE = '5') and DATE_FORMAT(ei.CREATED_TIME, '%Y-%m-%d') = DATE_FORMAT(date_add(now(), interval -1 day), '%Y-%m-%d') or null),0) as closedIncr
from esua_epdc_admin.sys_dept sd from yushan_esua_epdc_admin.sys_dept sd
left join esua_epdc_events.epdc_item ei on find_in_set(sd.id,ei.ALL_DEPT_IDS) and ei.DEL_FLAG ='0' left join yushan_esua_epdc_events.epdc_item ei on find_in_set(sd.id,ei.ALL_DEPT_IDS) and ei.DEL_FLAG ='0'
where sd.del_flag = '0' where sd.del_flag = '0'
and sd.type_key in('community_party', 'street_party') and sd.type_key in('community_party', 'street_party')
and sd.id not in (SELECT t.DEPT_ID FROM `esua_epdc_admin`.`sys_dept_config` t WHERE t.DEL_FLAG = '0') and sd.id not in (SELECT t.DEPT_ID FROM `yushan_esua_epdc_admin`.`sys_dept_config` t WHERE t.DEL_FLAG = '0')
<choose>
<when test="endTime != null and endTime != ''">
and DATE_FORMAT(ei.CREATED_TIME, '%Y-%m-%d') &lt;= DATE_FORMAT(#{endTime}, '%Y-%m-%d')
</when>
<otherwise>
and DATE_FORMAT(ei.CREATED_TIME, '%Y-%m-%d') &lt;= DATE_FORMAT(date_add(now(), interval -1 day), '%Y-%m-%d') and DATE_FORMAT(ei.CREATED_TIME, '%Y-%m-%d') &lt;= DATE_FORMAT(date_add(now(), interval -1 day), '%Y-%m-%d')
</otherwise>
</choose>
group by sd.id; group by sd.id;
</select> </select>
<select id="selectGridGroupTotalList" <select id="selectGridGroupTotalList"

Loading…
Cancel
Save