Browse Source

宣传能力--NEI提交

dev_shibei_match
jiangyuying 5 years ago
parent
commit
4c47e291ba
  1. 20
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/publicity/dto/result/FactPublishedAgencyDTO.java
  2. 86
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/publicity/dto/result/FactPublishedAgencyDailyDTO.java
  3. 2
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/publicity/dto/result/FactPublishedDepartmentDTO.java
  4. 2
      epmet-module/data-report/data-report-client/src/main/java/com/epmet/publicity/dto/result/FactPublishedGridDTO.java
  5. 44
      epmet-module/data-report/data-report-server/src/main/java/com/epmet/controller/publicity/PublicityController.java
  6. 64
      epmet-module/data-report/data-report-server/src/main/java/com/epmet/dao/publicity/PublicityDao.java
  7. 26
      epmet-module/data-report/data-report-server/src/main/java/com/epmet/service/publicity/PublicityService.java
  8. 105
      epmet-module/data-report/data-report-server/src/main/java/com/epmet/service/publicity/impl/PublicityServiceImpl.java
  9. 165
      epmet-module/data-report/data-report-server/src/main/resources/mapper/publicity/PublicityDao.xml

20
epmet-module/data-report/data-report-client/src/main/java/com/epmet/publicity/dto/result/FactPublishedAgencyDTO.java

@ -33,21 +33,29 @@ public class FactPublishedAgencyDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 机关名称
*/
private String name;
/**
* 发文数量
*/
private Integer value;
/**
* 累计发文总数
* 固定值文章数量
*/
private Integer publishedTotal;
private String type="文章数量";
/**
* 发布中的文章总数
* 机关Id
*/
private Integer publishingTotal;
private String agencyId;
/**
* 数据截止日期
* 上级机关Id
*/
private String dateName;
private String pid;
}

86
epmet-module/data-report/data-report-client/src/main/java/com/epmet/publicity/dto/result/FactPublishedAgencyDailyDTO.java

@ -17,13 +17,13 @@
package com.epmet.publicity.dto.result;
import java.io.Serializable;
import java.util.Date;
import lombok.Data;
import java.io.Serializable;
/**
* 文章发布数量机关日统计表
* 文章发表数量下级机关统计
*
* @author generator generator@elink-cn.com
* @since v1.0.0 2020-06-19
@ -33,89 +33,21 @@ public class FactPublishedAgencyDailyDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* ID ID
*/
private String id;
/**
* 客户ID 客户ID
*/
private String customerId;
/**
* 上级机关ID 上级机关ID
*/
private String pid;
/**
* 机关ID
*/
private String agencyId;
/**
* 文章累计发文数量 文章数量
*/
private Integer articleTotalCount;
/**
* 当前发文数量 当前未下线的文章数量
* 累计发文总数
*/
private Integer articlePublishedCount;
private Integer publishedTotal;
/**
* 日期ID 日期ID
* 发布中的文章总数
*/
private String dateId;
private Integer publishingTotal;
/**
* 周ID 周ID eg2020W01 = 2020年第一周
* 数据截止日期
*/
private String weekId;
private String dateName;
/**
* 月份ID 月份ID eg202006 = 2020年6月2020-07 = 2020年7月
*/
private String monthId;
/**
* 季度ID 季度ID eg2020Q1 = 2020年第一季度2020Q2 = 2020年第二季度2020Q3 = 2020年第三季度2020Q4 = 2020年第四季度
*/
private String quarterId;
/**
* 年度ID 年度ID eg2020 = 2020年2021 = 2021年
*/
private String yearId;
/**
* 删除状态
*/
private Integer delFlag;
/**
* 乐观锁
*/
private Integer revision;
/**
* 创建人
*/
private String createdBy;
/**
* 创建时间
*/
private Date createdTime;
/**
* 更新人
*/
private String updatedBy;
/**
* 更新时间
*/
private Date updatedTime;
}

2
epmet-module/data-report/data-report-client/src/main/java/com/epmet/publicity/dto/result/FactPublishedDepartmentDTO.java

@ -34,7 +34,7 @@ public class FactPublishedDepartmentDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 机关名称
* 部门名称
*/
private String name;

2
epmet-module/data-report/data-report-client/src/main/java/com/epmet/publicity/dto/result/FactPublishedGridDTO.java

@ -34,7 +34,7 @@ public class FactPublishedGridDTO implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 机关名称
* 网格名称
*/
private String name;

44
epmet-module/data-report/data-report-server/src/main/java/com/epmet/controller/publicity/PublicityController.java

@ -23,11 +23,13 @@ import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.Result;
import com.epmet.commons.tools.validator.ValidatorUtils;
import com.epmet.publicity.dto.form.TagFormDTO;
import com.epmet.publicity.dto.result.FactPublishedAgencyDailyDTO;
import com.epmet.publicity.dto.result.FactTagAgencyDTO;
import com.epmet.publicity.dto.result.*;
import com.epmet.service.publicity.PublicityService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
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.RestController;
import java.util.List;
@ -91,4 +93,40 @@ public class PublicityController {
return new Result<List<FactTagAgencyDTO>>().ok(publicityService.tagused(tokenDto, pageSize, type));
}
/**
* @param tokenDto 登录者token
* @Description 获取下级机关发文数
* @author jyy
*/
@PostMapping("subagency/publishedarticle")
public Result<List<FactPublishedAgencyDTO>> subagencyPublishedarticle(@LoginUser TokenDto tokenDto, @RequestBody TagFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, TagFormDTO.GroupJava.class);
String type = formDTO.getType();
return new Result<List<FactPublishedAgencyDTO>>().ok(publicityService.subagencyPublishedarticle(tokenDto, type));
}
/**
* @param tokenDto 登录者token
* @Description 获取直属部门发文数
* @author jyy
*/
@PostMapping("department/publishedarticle")
public Result<List<FactPublishedDepartmentDTO>> departmentPublishedarticle(@LoginUser TokenDto tokenDto, @RequestBody TagFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, TagFormDTO.GroupJava.class);
String type = formDTO.getType();
return new Result<List<FactPublishedDepartmentDTO>>().ok(publicityService.departmentPublishedarticle(tokenDto, type));
}
/**
* @param tokenDto 登录者token
* @Description 获取指数网格发文数
* @author jyy
*/
@PostMapping("subgrid/publishedarticle")
public Result<List<FactPublishedGridDTO>> subgridPublishedarticle(@LoginUser TokenDto tokenDto, @RequestBody TagFormDTO formDTO) {
ValidatorUtils.validateEntity(formDTO, TagFormDTO.GroupJava.class);
String type = formDTO.getType();
return new Result<List<FactPublishedGridDTO>>().ok(publicityService.subgridPublishedarticle(tokenDto, type));
}
}

64
epmet-module/data-report/data-report-server/src/main/java/com/epmet/dao/publicity/PublicityDao.java

@ -17,8 +17,7 @@
package com.epmet.dao.publicity;
import com.epmet.publicity.dto.result.FactPublishedAgencyDailyDTO;
import com.epmet.publicity.dto.result.FactTagAgencyDTO;
import com.epmet.publicity.dto.result.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@ -81,5 +80,66 @@ public interface PublicityDao {
* @author zxc
*/
List<FactTagAgencyDTO> getUsedYearlyCountByTag(@Param("agencyId") String agencyId, @Param("yearId") String yearId, @Param("pageSize") Integer pageSize);
/**
* @Description 当月下级机发文数
* @param agencyId,monthId 机关id
* @author zxc
*/
List<FactPublishedAgencyDTO> getSubAgencyPublishedMonth(@Param("agencyId") String agencyId, @Param("monthId") String monthId);
/**
* @Description 当季下级机发文数
* @param agencyId,quarterId 机关id季度
* @author zxc
*/
List<FactPublishedAgencyDTO> getSubAgencyPublishedQuarter(@Param("agencyId") String agencyId, @Param("quarterId") String quarterId);
/**
* @Description 当年下级机发文数
* @param agencyId,yearId 机关id
* @author zxc
*/
List<FactPublishedAgencyDTO> getSubAgencyPublishedYear(@Param("agencyId") String agencyId, @Param("yearId") String yearId);
/**
* @Description 当月下级部门文数
* @param agencyId,monthId 机关id
* @author zxc
*/
List<FactPublishedDepartmentDTO> getSubDepartPublishedMonth(@Param("agencyId") String agencyId, @Param("monthId") String monthId);
/**
* @Description 当季下级部门文数
* @param agencyId,quarterId 机关id季度
* @author zxc
*/
List<FactPublishedDepartmentDTO> getSubDepartPublishedQuarter(@Param("agencyId") String agencyId, @Param("quarterId") String quarterId);
/**
* @Description 当年下级部门文数
* @param agencyId,yearId 机关id
* @author zxc
*/
List<FactPublishedDepartmentDTO> getSubDepartPublishedYear(@Param("agencyId") String agencyId, @Param("yearId") String yearId);
/**
* @Description 当月下级网格文数
* @param agencyId,monthId 机关id
* @author zxc
*/
List<FactPublishedGridDTO> getSubGridPublishedMonth(@Param("agencyId") String agencyId, @Param("monthId") String monthId);
/**
* @Description 当季下级网格文数
* @param agencyId,quarterId 机关id季度
* @author zxc
*/
List<FactPublishedGridDTO> getSubGridPublishedQuarter(@Param("agencyId") String agencyId, @Param("quarterId") String quarterId);
/**
* @Description 当年下级网格文数
* @param agencyId,yearId 机关id
* @author zxc
*/
List<FactPublishedGridDTO> getSubGridPublishedYear(@Param("agencyId") String agencyId, @Param("yearId") String yearId);
}

26
epmet-module/data-report/data-report-server/src/main/java/com/epmet/service/publicity/PublicityService.java

@ -18,9 +18,12 @@
package com.epmet.service.publicity;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.publicity.dto.result.FactPublishedAgencyDailyDTO;
import com.epmet.publicity.dto.result.FactTagAgencyDTO;
import com.epmet.commons.tools.utils.DateUtils;
import com.epmet.commons.tools.utils.Result;
import com.epmet.publicity.dto.result.*;
import org.apache.commons.lang3.StringUtils;
import java.util.Date;
import java.util.List;
/**
@ -52,5 +55,24 @@ public interface PublicityService {
*/
public List<FactTagAgencyDTO> tagused(TokenDto tokenDto, Integer pageSize, String type) ;
/**
* @param tokenDto type
* @Description 获取下级机关发文数
* @author jyy
*/
public List<FactPublishedAgencyDTO> subagencyPublishedarticle(TokenDto tokenDto, String type) ;
/**
* @param tokenDto type
* @Description 获取直属部门发文数
* @author jyy
*/
public List<FactPublishedDepartmentDTO> departmentPublishedarticle(TokenDto tokenDto, String type);
/**
* @param tokenDto type
* @Description 获取指数网格发文数
* @author jyy
*/
public List<FactPublishedGridDTO> subgridPublishedarticle(TokenDto tokenDto, String type);
}

105
epmet-module/data-report/data-report-server/src/main/java/com/epmet/service/publicity/impl/PublicityServiceImpl.java

@ -19,15 +19,11 @@ package com.epmet.service.publicity.impl;
import com.epmet.commons.tools.security.dto.TokenDto;
import com.epmet.commons.tools.utils.DateUtils;
import com.epmet.dao.publicity.PublicityDao;
import com.epmet.dto.form.LoginUserDetailsFormDTO;
import com.epmet.dto.result.LoginUserDetailsResultDTO;
import com.epmet.feign.EpmetUserOpenFeignClient;
import com.epmet.dao.publicity.PublicityDao;
import com.epmet.publicity.dto.result.FactPublishedAgencyDailyDTO;
import com.epmet.publicity.dto.result.FactTagAgencyDTO;
import com.epmet.publicity.dto.result.*;
import com.epmet.service.publicity.PublicityService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
@ -65,7 +61,7 @@ public class PublicityServiceImpl implements PublicityService {
/**
* @param tokenDto,formDTO
* @Description 宣传能力工作端宣传能力-获取阅读最多的分类数据
* @Description 宣传能力工作端-获取阅读最多的分类数据
* @author jyy
*/
@Override
@ -81,23 +77,20 @@ public class PublicityServiceImpl implements PublicityService {
return publicityDao.getViewedMonthlyCountByTag(agencyId, monthId, pageSize);
} else if (StringUtils.equals("quarter", type)) {//当季
String quarterId = strDate + "Q" + DateUtils.getQuarterIndex(date);
String quarterId = yearId + "Q" + DateUtils.getQuarterIndex(date);
return publicityDao.getViewedQuarterlyCountByTag(agencyId, quarterId, pageSize);
} else if (StringUtils.equals("year", type)) {//当年
return publicityDao.getViewedYearlyCountByTag(agencyId, yearId, pageSize);
} else {
return null;
}
}
/**
* @param tokenDto pageSize type
* @Description 宣传能力工作端宣传能力-获取发表最多的分类数据
* @Description 宣传能力工作端-获取发表最多的分类数据
* @author jyy
*/
@Override
@ -113,18 +106,102 @@ public class PublicityServiceImpl implements PublicityService {
return publicityDao.getUsedMonthlyCountByTag(agencyId, monthId, pageSize);
} else if (StringUtils.equals("quarter", type)) {//当季
String quarterId = strDate + "Q" + DateUtils.getQuarterIndex(date);
String quarterId = yearId + "Q" + DateUtils.getQuarterIndex(date);
return publicityDao.getUsedQuarterlyCountByTag(agencyId, quarterId, pageSize);
} else if (StringUtils.equals("year", type)) {//当年
return publicityDao.getUsedYearlyCountByTag(agencyId, yearId, pageSize);
} else {
return null;
}
}
/**
* @param tokenDto type
* @Description 获取下级机关发文数
* @author jyy
*/
@Override
public List<FactPublishedAgencyDTO> subagencyPublishedarticle(TokenDto tokenDto, String type) {
// String agencyId = this.getLoginUserDetails(tokenDto);
String agencyId = "1041fe5e8499dbd8add314291d2f6da4";
Date date = new Date();
String strDate = DateUtils.format(date, DateUtils.DATE_PATTERN_YYYYMMDD);
String yearId = strDate.substring(0, 4);
String monthId = strDate.substring(0, 6);
if (StringUtils.equals("month", type)) {//当月
return publicityDao.getSubAgencyPublishedMonth(agencyId, monthId);
} else if (StringUtils.equals("quarter", type)) {//当季
String quarterId = yearId + "Q" + DateUtils.getQuarterIndex(date);
return publicityDao.getSubAgencyPublishedQuarter(agencyId, quarterId);
} else if (StringUtils.equals("year", type)) {//当年
return publicityDao.getSubAgencyPublishedYear(agencyId, yearId);
} else {
return null;
}
}
/**
* @param tokenDto type
* @Description 获取直属部门发文数
* @author jyy
*/
@Override
public List<FactPublishedDepartmentDTO> departmentPublishedarticle(TokenDto tokenDto, String type) {
// String agencyId = this.getLoginUserDetails(tokenDto);
String agencyId = "0d2ffe9fce682b602b9d451226d08fae";
Date date = new Date();
String strDate = DateUtils.format(date, DateUtils.DATE_PATTERN_YYYYMMDD);
String yearId = strDate.substring(0, 4);
String monthId = strDate.substring(0, 6);
if (StringUtils.equals("month", type)) {//当月
return publicityDao.getSubDepartPublishedMonth(agencyId, monthId);
} else if (StringUtils.equals("quarter", type)) {//当季
String quarterId = yearId + "Q" + DateUtils.getQuarterIndex(date);
return publicityDao.getSubDepartPublishedQuarter(agencyId, quarterId);
} else if (StringUtils.equals("year", type)) {//当年
return publicityDao.getSubDepartPublishedYear(agencyId, yearId);
} else {
return null;
}
}
/**
* @param tokenDto type
* @Description 获取指数网格发文数
* @author jyy
*/
@Override
public List<FactPublishedGridDTO> subgridPublishedarticle(TokenDto tokenDto, String type) {
// String agencyId = this.getLoginUserDetails(tokenDto);
String agencyId = "0d2ffe9fce682b602b9d451226d08fae";
Date date = new Date();
String strDate = DateUtils.format(date, DateUtils.DATE_PATTERN_YYYYMMDD);
String yearId = strDate.substring(0, 4);
String monthId = strDate.substring(0, 6);
if (StringUtils.equals("month", type)) {//当月
return publicityDao.getSubGridPublishedMonth(agencyId, monthId);
} else if (StringUtils.equals("quarter", type)) {//当季
String quarterId = yearId + "Q" + DateUtils.getQuarterIndex(date);
return publicityDao.getSubGridPublishedQuarter(agencyId, quarterId);
} else if (StringUtils.equals("year", type)) {//当年
return publicityDao.getSubGridPublishedYear(agencyId, yearId);
} else {
return null;
}
}
/**

165
epmet-module/data-report/data-report-server/src/main/resources/mapper/publicity/PublicityDao.xml

@ -8,7 +8,7 @@
SELECT
article_total_count AS publishedTotal,
article_published_count AS publishingTotal,
DATE_FORMAT( date_id, '%Y-%m-%d' ) AS dateName
DATE_FORMAT( date_id, '%Y.%m.%d' ) AS dateName
FROM fact_article_published_agency_daily
where agency_id = #{agencyId}
</select>
@ -74,8 +74,7 @@
</select>
<!-- 机关当季—每个标签发文数量—前pageSize -->
<select id="getUsedQuarterlyCountByTag" parameterType="java.lang.String"
resultType="com.epmet.publicity.dto.result.FactTagAgencyDTO">
<select id="getUsedQuarterlyCountByTag" resultType="com.epmet.publicity.dto.result.FactTagAgencyDTO">
SELECT
tag_name AS name,
agency_id AS agencyId,
@ -90,8 +89,7 @@
</select>
<!-- 机关当年—每个标签发文数量—前pageSize -->
<select id="getUsedYearlyCountByTag" parameterType="map"
resultType="com.epmet.publicity.dto.result.FactTagAgencyDTO">
<select id="getUsedYearlyCountByTag" resultType="com.epmet.publicity.dto.result.FactTagAgencyDTO">
SELECT
tag_name AS name,
agency_id AS agencyId,
@ -104,4 +102,161 @@
ORDER BY value DESC
LIMIT #{pageSize}
</select>
<!-- 当月——下级机发文数:机关名称、机关id、发文数量、上级机关id -->
<select id="getSubAgencyPublishedMonth" resultType="com.epmet.publicity.dto.result.FactPublishedAgencyDTO">
SELECT
agency.agency_name AS name,
pub.agency_id AS agencyId,
pub.pid AS pid,
SUM(pub.published_count) AS value
FROM
fact_article_published_agency_daily AS pub ,
dim_agency AS agency
where
pub.agency_id = agency.id
AND pub.PID =#{agencyId}
AND pub.month_id=#{monthId}
GROUP BY pub.agency_id
</select>
<!-- 当季——下级机发文数:机关名称、机关id、发文数量、上级机关id -->
<select id="getSubAgencyPublishedQuarter" resultType="com.epmet.publicity.dto.result.FactPublishedAgencyDTO">
SELECT
agency.agency_name AS name,
pub.agency_id AS agencyId,
pub.pid AS pid,
SUM(pub.published_count) AS value
FROM
fact_article_published_agency_daily AS pub ,
dim_agency AS agency
where
pub.agency_id = agency.id
AND pub.PID =#{agencyId}
AND pub.quarter_id=#{quarterId}
GROUP BY pub.agency_id
</select>
<!-- 当年——下级机发文数:机关名称、机关id、发文数量、上级机关id -->
<select id="getSubAgencyPublishedYear" resultType="com.epmet.publicity.dto.result.FactPublishedAgencyDTO">
SELECT
agency.agency_name AS name,
pub.agency_id AS agencyId,
pub.pid AS pid,
SUM(pub.published_count) AS value
FROM
fact_article_published_agency_daily AS pub ,
dim_agency AS agency
where
pub.agency_id = agency.id
AND pub.PID =#{agencyId}
AND pub.year_id=#{yearId}
GROUP BY pub.agency_id
</select>
<!-- 当月——下级部门文数:部门名称、机关id、发文数量、部门id -->
<select id="getSubDepartPublishedMonth" resultType="com.epmet.publicity.dto.result.FactPublishedDepartmentDTO">
SELECT
depart.department_name AS name,
pub.agency_id AS agencyId,
pub.department_id AS departmentId,
SUM(pub.published_count) AS value
FROM
fact_article_published_department_daily AS pub ,
dim_department AS depart
where
pub.department_id = depart.id
AND pub.agency_id =#{agencyId}
AND pub.month_id=#{monthId}
GROUP BY pub.department_id
</select>
<!-- 当季——下级部门文数:部门名称、机关id、发文数量、部门id -->
<select id="getSubDepartPublishedQuarter" resultType="com.epmet.publicity.dto.result.FactPublishedDepartmentDTO">
SELECT
depart.department_name AS name,
pub.agency_id AS agencyId,
pub.department_id AS departmentId,
SUM(pub.published_count) AS value
FROM
fact_article_published_department_daily AS pub ,
dim_department AS depart
where
pub.department_id = depart.id
AND pub.agency_id =#{agencyId}
AND pub.quarter_id=#{quarterId}
GROUP BY pub.department_id
</select>
<!-- 当年——下级部门文数:部门名称、机关id、发文数量、部门id -->
<select id="getSubDepartPublishedYear" resultType="com.epmet.publicity.dto.result.FactPublishedDepartmentDTO">
SELECT
depart.department_name AS name,
pub.agency_id AS agencyId,
pub.department_id AS departmentId,
SUM(pub.published_count) AS value
FROM
fact_article_published_department_daily AS pub ,
dim_department AS depart
where
pub.department_id = depart.id
AND pub.agency_id =#{agencyId}
AND pub.year_id=#{yearId}
GROUP BY pub.department_id
</select>
<!-- 当月——下级网格文数:网格名称、机关id、发文数量、网格id -->
<select id="getSubGridPublishedMonth" resultType="com.epmet.publicity.dto.result.FactPublishedGridDTO">
SELECT
grid.grid_name AS name,
pub.agency_id AS agencyId,
pub.grid_id AS gridId,
SUM(pub.published_count) AS value
FROM
fact_article_published_grid_daily AS pub ,
dim_grid AS grid
where
pub.grid_id = grid.id
AND pub.agency_id = #{agencyId}
AND pub.month_id=#{monthId}
GROUP BY pub.grid_id
</select>
<!-- 当季——下级网格文数:网格名称、机关id、发文数量、网格id -->
<select id="getSubGridPublishedQuarter" resultType="com.epmet.publicity.dto.result.FactPublishedGridDTO">
SELECT
grid.grid_name AS name,
pub.agency_id AS agencyId,
pub.grid_id AS gridId,
SUM(pub.published_count) AS value
FROM
fact_article_published_grid_daily AS pub ,
dim_grid AS grid
where
pub.grid_id = grid.id
AND pub.agency_id = #{agencyId}
AND pub.quarter_id=#{quarterId}
GROUP BY pub.grid_id
</select>
<!-- 当年——下级网格文数:网格名称、机关id、发文数量、网格id -->
<select id="getSubGridPublishedYear" resultType="com.epmet.publicity.dto.result.FactPublishedGridDTO">
SELECT
grid.grid_name AS name,
pub.agency_id AS agencyId,
pub.grid_id AS gridId,
SUM(pub.published_count) AS value
FROM
fact_article_published_grid_daily AS pub ,
dim_grid AS grid
where
pub.grid_id = grid.id
AND pub.agency_id = #{agencyId}
AND pub.year_id = #{yearId}
GROUP BY pub.grid_id
</select>
</mapper>
Loading…
Cancel
Save