Commit d458bfc4 by xiongjiangtao

社群邀请明细

parent 45543919
...@@ -4,6 +4,7 @@ import com.gic.api.base.commons.BasePageInfo; ...@@ -4,6 +4,7 @@ import com.gic.api.base.commons.BasePageInfo;
import com.gic.commons.web.qo.PageQo; import com.gic.commons.web.qo.PageQo;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date;
/** /**
* @author shangfeng * @author shangfeng
...@@ -26,16 +27,36 @@ public class GroupChatActivityInviteLogQDTO extends BasePageInfo implements Seri ...@@ -26,16 +27,36 @@ public class GroupChatActivityInviteLogQDTO extends BasePageInfo implements Seri
private String inviterMemberId; private String inviterMemberId;
/** /**
* 受邀请人会员ID
*/
private String inviteeMemberId;
/**
* 有效邀请类型 1有效0无效 * 有效邀请类型 1有效0无效
*/ */
private Integer inviteType; private Integer inviteType;
/** /**
* 是否新增会员 1是 0否 null未统计
*/
private Integer addMemberType;
/**
* 批次 * 批次
*/ */
private Integer batchNumber; private Integer batchNumber;
/** /**
* 开始时间
*/
private Date beginTime;
/**
* 结束时间
*/
private Date endTime;
/**
* 排序字段 * 排序字段
*/ */
private String sortFiled; private String sortFiled;
...@@ -77,6 +98,38 @@ public class GroupChatActivityInviteLogQDTO extends BasePageInfo implements Seri ...@@ -77,6 +98,38 @@ public class GroupChatActivityInviteLogQDTO extends BasePageInfo implements Seri
this.inviteType = inviteType; this.inviteType = inviteType;
} }
public String getInviteeMemberId() {
return inviteeMemberId;
}
public void setInviteeMemberId(String inviteeMemberId) {
this.inviteeMemberId = inviteeMemberId;
}
public Integer getAddMemberType() {
return addMemberType;
}
public void setAddMemberType(Integer addMemberType) {
this.addMemberType = addMemberType;
}
public Date getBeginTime() {
return beginTime;
}
public void setBeginTime(Date beginTime) {
this.beginTime = beginTime;
}
public Date getEndTime() {
return endTime;
}
public void setEndTime(Date endTime) {
this.endTime = endTime;
}
public Integer getBatchNumber() { public Integer getBatchNumber() {
return batchNumber; return batchNumber;
} }
......
package com.gic.haoban.manage.web.handle; package com.gic.haoban.manage.web.handle;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gic.api.base.commons.Page;
import com.gic.commons.webapi.reponse.RestResponse;
import com.gic.enterprise.api.dto.security.DownloadReportDTO;
import com.gic.haoban.manage.api.enums.chat.ChatActivityInvalidInviteTypeEnum;
import com.gic.haoban.manage.web.controller.chat.GroupChatActivityDataController;
import com.gic.haoban.manage.web.qo.chat.GroupChatActivityInviteLogReq;
import com.gic.haoban.manage.web.vo.chat.GroupChatActivityInviteLogExportVO;
import com.gic.haoban.manage.web.vo.chat.GroupChatActivityInviteLogVO; import com.gic.haoban.manage.web.vo.chat.GroupChatActivityInviteLogVO;
import com.gic.haoban.manage.web.vo.chat.GroupChatActivityRewardLogExportVO;
import com.gic.haoban.manage.web.vo.chat.GroupChatDataJoinDetailVO;
import com.gic.web.common.download.DownloadHandlerAbstract; import com.gic.web.common.download.DownloadHandlerAbstract;
import com.gic.web.common.download.context.Context; import com.gic.web.common.download.context.Context;
import com.google.common.collect.Lists;
import org.apache.commons.collections.CollectionUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
import java.util.Objects;
/** /**
* @author shangfeng * @author shangfeng
* @date 2024-10-11 17:27:51 * @date 2024-10-11 17:27:51
*/ */
@Component @Component
public class GroupChatActivityInviterHandle extends DownloadHandlerAbstract<GroupChatActivityInviteLogVO> { public class GroupChatActivityInviterHandle extends DownloadHandlerAbstract<GroupChatActivityInviteLogExportVO> {
private static Logger log = LogManager.getLogger(GroupChatActivityInviterHandle.class);
@Resource
private GroupChatActivityDataController groupChatActivityDataController;
@Override @Override
public List<GroupChatActivityInviteLogVO> getData(Context context, String s, Integer integer) { public List<GroupChatActivityInviteLogExportVO> getData(Context context, String searchDataParams, Integer currentPage) {
return null; GroupChatActivityInviteLogReq inviteLogReq = JSON.parseObject(searchDataParams, GroupChatActivityInviteLogReq.class);
inviteLogReq.setPageNum(currentPage);
inviteLogReq.setPageSize(getPageSize());
log.info("社群邀请有礼邀请明细数据导出,请求参数={}", JSON.toJSONString(inviteLogReq));
RestResponse<Page<GroupChatActivityInviteLogVO>> dataPageVORestResponse = groupChatActivityDataController.inviterDetail(inviteLogReq);
List<GroupChatActivityInviteLogVO> groupChatActivityInviteLogVOS = dataPageVORestResponse.getResult().getResult();
if (CollectionUtils.isEmpty(groupChatActivityInviteLogVOS)) {
return Lists.newArrayList();
}
List<GroupChatActivityInviteLogExportVO> groupChatActivityInviteLogExportVOS = Lists.newArrayList();
for (GroupChatActivityInviteLogVO groupChatActivityInviteLogVO : groupChatActivityInviteLogVOS) {
GroupChatActivityInviteLogExportVO groupChatActivityRewardLogExportVO = new GroupChatActivityInviteLogExportVO();
BeanUtils.copyProperties(groupChatActivityInviteLogVO, groupChatActivityRewardLogExportVO);
if(groupChatActivityInviteLogVO.getMemberDeleteFlag() == 1){
groupChatActivityInviteLogVO.setName("账号已注销");
}
if (groupChatActivityInviteLogVO.getInviteType() == 0) {
groupChatActivityRewardLogExportVO.setInviteTypeDesc("否");
}else {
groupChatActivityRewardLogExportVO.setInviteTypeDesc("是");
}
if (Objects.nonNull(groupChatActivityInviteLogVO.getInvalidInviteType())) {
if(groupChatActivityInviteLogVO.getInvalidInviteType().equals(ChatActivityInvalidInviteTypeEnum.ONE.value)){
groupChatActivityRewardLogExportVO.setInvalidInviteTypeDesc("非首次参与活动受邀入群");
}else if (groupChatActivityInviteLogVO.getInvalidInviteType().equals(ChatActivityInvalidInviteTypeEnum.TWO.value)){
groupChatActivityRewardLogExportVO.setInvalidInviteTypeDesc("入群前已处于品牌群聊内");
}else if (groupChatActivityInviteLogVO.getInvalidInviteType().equals(ChatActivityInvalidInviteTypeEnum.THREE.value)){
groupChatActivityRewardLogExportVO.setInvalidInviteTypeDesc("非首次加入品牌群聊");
}
}
if (Objects.nonNull(groupChatActivityInviteLogVO.getAddMemberType())) {
if (groupChatActivityInviteLogVO.getAddMemberType() == 1) {
groupChatActivityRewardLogExportVO.setAddMemberTypeDesc("是");
}else {
groupChatActivityRewardLogExportVO.setAddMemberTypeDesc("否");
}
}
groupChatActivityInviteLogExportVOS.add(groupChatActivityRewardLogExportVO);
}
log.info("社群邀请有礼邀请明细数据导出={}", JSON.toJSONString(groupChatActivityInviteLogExportVOS));
return groupChatActivityInviteLogExportVOS;
} }
@Override @Override
public List<String> getColumnNames() { public List<String> getColumnNames() {
return null; return Lists.newArrayList();
} }
@Override @Override
...@@ -31,6 +102,25 @@ public class GroupChatActivityInviterHandle extends DownloadHandlerAbstract<Grou ...@@ -31,6 +102,25 @@ public class GroupChatActivityInviterHandle extends DownloadHandlerAbstract<Grou
@Override @Override
public List<String> getColumns() { public List<String> getColumns() {
return null; return Lists.newArrayList();
}
@Override
public List<String> getColumns(Context context) {
DownloadReportDTO downloadReportDTO = context.getDownloadReportDTO();
String searchDataParams = downloadReportDTO.getSearchDataParams();
JSONObject jsonObject = JSONObject.parseObject(searchDataParams);
List<String> list = (List<String>) jsonObject.get("fieldList");
return list;
} }
@Override
public List<String> getColumnNames(Context context) {
DownloadReportDTO downloadReportDTO = context.getDownloadReportDTO();
String searchDataParams = downloadReportDTO.getSearchDataParams();
JSONObject jsonObject = JSONObject.parseObject(searchDataParams);
List<String> list = (List<String>) jsonObject.get("indexList");
return list;
}
} }
package com.gic.haoban.manage.web.handle; package com.gic.haoban.manage.web.handle;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gic.api.base.commons.Page;
import com.gic.commons.util.DateUtil;
import com.gic.commons.webapi.reponse.RestResponse;
import com.gic.enterprise.api.dto.security.DownloadReportDTO;
import com.gic.haoban.manage.web.controller.chat.GroupChatActivityDataController;
import com.gic.haoban.manage.web.qo.chat.GroupChatActivityInviteLogReq;
import com.gic.haoban.manage.web.qo.chat.GroupChatActivityRewardLogReq;
import com.gic.haoban.manage.web.vo.chat.GroupChatActivityInviteLogVO;
import com.gic.haoban.manage.web.vo.chat.GroupChatActivityRewardLogExportVO;
import com.gic.haoban.manage.web.vo.chat.GroupChatActivityRewardLogVO;
import com.gic.haoban.manage.web.vo.chat.GroupChatDataJoinDetailVO; import com.gic.haoban.manage.web.vo.chat.GroupChatDataJoinDetailVO;
import com.gic.web.common.download.DownloadHandlerAbstract; import com.gic.web.common.download.DownloadHandlerAbstract;
import com.gic.web.common.download.context.Context; import com.gic.web.common.download.context.Context;
import com.google.common.collect.Lists;
import org.apache.commons.collections.CollectionUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
...@@ -14,14 +32,41 @@ import java.util.List; ...@@ -14,14 +32,41 @@ import java.util.List;
*/ */
@Component @Component
public class GroupChatActivityJoinHandle extends DownloadHandlerAbstract<GroupChatDataJoinDetailVO> { public class GroupChatActivityJoinHandle extends DownloadHandlerAbstract<GroupChatDataJoinDetailVO> {
private static Logger log = LogManager.getLogger(GroupChatActivityJoinHandle.class);
@Resource
private GroupChatActivityDataController groupChatActivityDataController;
@Override @Override
public List<GroupChatDataJoinDetailVO> getData(Context context, String s, Integer integer) { public List<GroupChatDataJoinDetailVO> getData(Context context, String searchDataParams, Integer currentPage) {
return null; GroupChatActivityInviteLogReq inviteLogReq = JSON.parseObject(searchDataParams, GroupChatActivityInviteLogReq.class);
inviteLogReq.setPageNum(currentPage);
inviteLogReq.setPageSize(getPageSize());
log.info("社群邀请有礼参与客户数据导出,请求参数={}", JSON.toJSONString(inviteLogReq));
RestResponse<Page<GroupChatActivityInviteLogVO>> dataPageVORestResponse = groupChatActivityDataController.inviterDetail(inviteLogReq);
List<GroupChatActivityInviteLogVO> groupChatActivityInviteLogVOS = dataPageVORestResponse.getResult().getResult();
if (CollectionUtils.isEmpty(groupChatActivityInviteLogVOS)) {
return Lists.newArrayList();
}
List<GroupChatDataJoinDetailVO> groupChatDataJoinDetailVOS = Lists.newArrayList();
for (GroupChatActivityInviteLogVO groupChatActivityInviteLogVO : groupChatActivityInviteLogVOS) {
GroupChatActivityRewardLogExportVO groupChatActivityRewardLogExportVO = new GroupChatActivityRewardLogExportVO();
BeanUtils.copyProperties(groupChatActivityInviteLogVO, groupChatActivityRewardLogExportVO);
}
log.info("社群邀请有礼参与客户数据导出={}", JSON.toJSONString(groupChatDataJoinDetailVOS));
return groupChatDataJoinDetailVOS;
} }
@Override @Override
public List<String> getColumnNames() { public List<String> getColumnNames() {
return null; return Lists.newArrayList();
} }
@Override @Override
...@@ -31,6 +76,25 @@ public class GroupChatActivityJoinHandle extends DownloadHandlerAbstract<GroupCh ...@@ -31,6 +76,25 @@ public class GroupChatActivityJoinHandle extends DownloadHandlerAbstract<GroupCh
@Override @Override
public List<String> getColumns() { public List<String> getColumns() {
return null; return Lists.newArrayList();
}
@Override
public List<String> getColumns(Context context) {
DownloadReportDTO downloadReportDTO = context.getDownloadReportDTO();
String searchDataParams = downloadReportDTO.getSearchDataParams();
JSONObject jsonObject = JSONObject.parseObject(searchDataParams);
List<String> list = (List<String>) jsonObject.get("fieldList");
return list;
} }
@Override
public List<String> getColumnNames(Context context) {
DownloadReportDTO downloadReportDTO = context.getDownloadReportDTO();
String searchDataParams = downloadReportDTO.getSearchDataParams();
JSONObject jsonObject = JSONObject.parseObject(searchDataParams);
List<String> list = (List<String>) jsonObject.get("indexList");
return list;
}
} }
...@@ -47,7 +47,7 @@ public class GroupChatActivityRewardHandle extends DownloadHandlerAbstract<Group ...@@ -47,7 +47,7 @@ public class GroupChatActivityRewardHandle extends DownloadHandlerAbstract<Group
return Lists.newArrayList(); return Lists.newArrayList();
} }
List<GroupChatActivityRewardLogExportVO> goodsAnalysisInteractionDetailExportVOS = Lists.newArrayList(); List<GroupChatActivityRewardLogExportVO> groupChatActivityRewardLogExportVOS = Lists.newArrayList();
for (GroupChatActivityRewardLogVO groupChatActivityRewardLogVO : groupChatActivityRewardLogVOS) { for (GroupChatActivityRewardLogVO groupChatActivityRewardLogVO : groupChatActivityRewardLogVOS) {
GroupChatActivityRewardLogExportVO groupChatActivityRewardLogExportVO = new GroupChatActivityRewardLogExportVO(); GroupChatActivityRewardLogExportVO groupChatActivityRewardLogExportVO = new GroupChatActivityRewardLogExportVO();
...@@ -63,10 +63,11 @@ public class GroupChatActivityRewardHandle extends DownloadHandlerAbstract<Group ...@@ -63,10 +63,11 @@ public class GroupChatActivityRewardHandle extends DownloadHandlerAbstract<Group
groupChatActivityRewardLogExportVO.setInviteLevelType("受邀奖励"); groupChatActivityRewardLogExportVO.setInviteLevelType("受邀奖励");
groupChatActivityRewardLogExportVO.setInviteLevelType("受邀进群奖励"); groupChatActivityRewardLogExportVO.setInviteLevelType("受邀进群奖励");
} }
groupChatActivityRewardLogExportVOS.add(groupChatActivityRewardLogExportVO);
} }
log.info("社群邀请有礼奖励明细数据导出={}", JSON.toJSONString(goodsAnalysisInteractionDetailExportVOS)); log.info("社群邀请有礼奖励明细数据导出={}", JSON.toJSONString(groupChatActivityRewardLogExportVOS));
return goodsAnalysisInteractionDetailExportVOS; return groupChatActivityRewardLogExportVOS;
} }
@Override @Override
......
package com.gic.haoban.manage.web.qo.chat;
import java.io.Serializable;
import java.util.Date;
/**
* @author shangfeng
* @date 2024-10-12 14:40:12
*/
public class GroupChatActivityInviteLogReq implements Serializable {
private static final long serialVersionUID = 4318122460400124472L;
/**
* 页编号
*/
private Integer pageNum;
/**
* 页大小
*/
private Integer pageSize;
/**
* 企业id
*/
private String enterpriseId;
/**
* 社群活动id
*/
private Long chatActivityId;
/**
* 邀请人会员ID
*/
private String inviterMemberId;
/**
* 受邀请人会员ID
*/
private String inviteeMemberId;
/**
* 有效邀请类型 1有效0无效
*/
private Integer inviteType;
/**
* 是否新增会员 1是 0否 null未统计
*/
private Integer addMemberType;
/**
* 批次
*/
private Integer batchNumber;
/**
* 开始时间
*/
private Date beginTime;
/**
* 结束时间
*/
private Date endTime;
/**
* 下载导出参数:数据脱敏 1:脱敏 2:完整
*/
private Integer dataType;
public Integer getPageNum() {
return pageNum;
}
public void setPageNum(Integer pageNum) {
this.pageNum = pageNum;
}
public Integer getPageSize() {
return pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
public String getEnterpriseId() {
return enterpriseId;
}
public void setEnterpriseId(String enterpriseId) {
this.enterpriseId = enterpriseId;
}
public Long getChatActivityId() {
return chatActivityId;
}
public void setChatActivityId(Long chatActivityId) {
this.chatActivityId = chatActivityId;
}
public String getInviterMemberId() {
return inviterMemberId;
}
public void setInviterMemberId(String inviterMemberId) {
this.inviterMemberId = inviterMemberId;
}
public String getInviteeMemberId() {
return inviteeMemberId;
}
public void setInviteeMemberId(String inviteeMemberId) {
this.inviteeMemberId = inviteeMemberId;
}
public Integer getInviteType() {
return inviteType;
}
public void setInviteType(Integer inviteType) {
this.inviteType = inviteType;
}
public Integer getAddMemberType() {
return addMemberType;
}
public void setAddMemberType(Integer addMemberType) {
this.addMemberType = addMemberType;
}
public Integer getBatchNumber() {
return batchNumber;
}
public void setBatchNumber(Integer batchNumber) {
this.batchNumber = batchNumber;
}
public Date getBeginTime() {
return beginTime;
}
public void setBeginTime(Date beginTime) {
this.beginTime = beginTime;
}
public Date getEndTime() {
return endTime;
}
public void setEndTime(Date endTime) {
this.endTime = endTime;
}
public Integer getDataType() {
return dataType;
}
public void setDataType(Integer dataType) {
this.dataType = dataType;
}
}
...@@ -6,7 +6,7 @@ import java.io.Serializable; ...@@ -6,7 +6,7 @@ import java.io.Serializable;
* @author shangfeng * @author shangfeng
* @date 2024-10-10 16:26:38 * @date 2024-10-10 16:26:38
*/ */
public class GroupChatActivityDataInviterDetailReq implements Serializable { public class GroupChatActivityJoinDetailReq implements Serializable {
private static final long serialVersionUID = 2660355784426208294L; private static final long serialVersionUID = 2660355784426208294L;
...@@ -50,6 +50,11 @@ public class GroupChatActivityDataInviterDetailReq implements Serializable { ...@@ -50,6 +50,11 @@ public class GroupChatActivityDataInviterDetailReq implements Serializable {
*/ */
private Integer orderByType; private Integer orderByType;
/**
* 下载导出参数:数据脱敏 1:脱敏 2:完整
*/
private Integer dataType;
public Boolean getReturnTotalNum() { public Boolean getReturnTotalNum() {
return returnTotalNum; return returnTotalNum;
} }
...@@ -113,4 +118,12 @@ public class GroupChatActivityDataInviterDetailReq implements Serializable { ...@@ -113,4 +118,12 @@ public class GroupChatActivityDataInviterDetailReq implements Serializable {
public void setOrderByType(Integer orderByType) { public void setOrderByType(Integer orderByType) {
this.orderByType = orderByType; this.orderByType = orderByType;
} }
public Integer getDataType() {
return dataType;
}
public void setDataType(Integer dataType) {
this.dataType = dataType;
}
} }
...@@ -38,6 +38,9 @@ public class GroupChatActivityRewardLogReq implements Serializable { ...@@ -38,6 +38,9 @@ public class GroupChatActivityRewardLogReq implements Serializable {
*/ */
private Date endTime; private Date endTime;
/**
* 下载导出参数:数据脱敏 1:脱敏 2:完整
*/
private Integer dataType; private Integer dataType;
private Integer pageNum; private Integer pageNum;
......
package com.gic.haoban.manage.web.vo.chat;
import java.io.Serializable;
import java.util.Date;
/**
* @author shangfeng
* @date 2024-10-12 14:52:09
*/
public class GroupChatActivityInviteLogExportVO implements Serializable {
private static final long serialVersionUID = 8280940488482343219L;
/**
* 会员名称
*/
private String name;
/**
* 会员手机
*/
private String phoneNumber;
/**
* 会员别名昵称
*/
private String nickName;
/**
* 会员是否删除
* 0 正常
* 1 已删除
*/
private Integer memberDeleteFlag;
/**
* 受邀人姓名
*/
private String inviteeName;
/**
* 受邀人手机号
*/
private String inviteePhoneNumber;
/**
* 受邀人昵称
*/
private String inviteeNickName;
/**
* 群id
*/
private Long groupChatId;
/**
* 群名称
*/
private String groupChatName;
/**
* 有效邀请类型 1有效0无效
*/
private String inviteTypeDesc;
/**
* 无效邀请类型 1非首次参与活动受邀入群2入群前已处于企业群聊内3非首次加入企业群聊
*/
private String invalidInviteTypeDesc;
/**
* 是否新增会员 1是 0否 null未统计
*/
private String addMemberTypeDesc;
/**
* 入群时间
*/
private String joinGroupChatTime;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public String getNickName() {
return nickName;
}
public void setNickName(String nickName) {
this.nickName = nickName;
}
public Integer getMemberDeleteFlag() {
return memberDeleteFlag;
}
public void setMemberDeleteFlag(Integer memberDeleteFlag) {
this.memberDeleteFlag = memberDeleteFlag;
}
public String getInviteeName() {
return inviteeName;
}
public void setInviteeName(String inviteeName) {
this.inviteeName = inviteeName;
}
public String getInviteePhoneNumber() {
return inviteePhoneNumber;
}
public void setInviteePhoneNumber(String inviteePhoneNumber) {
this.inviteePhoneNumber = inviteePhoneNumber;
}
public String getInviteeNickName() {
return inviteeNickName;
}
public void setInviteeNickName(String inviteeNickName) {
this.inviteeNickName = inviteeNickName;
}
public Long getGroupChatId() {
return groupChatId;
}
public void setGroupChatId(Long groupChatId) {
this.groupChatId = groupChatId;
}
public String getGroupChatName() {
return groupChatName;
}
public void setGroupChatName(String groupChatName) {
this.groupChatName = groupChatName;
}
public String getInviteTypeDesc() {
return inviteTypeDesc;
}
public void setInviteTypeDesc(String inviteTypeDesc) {
this.inviteTypeDesc = inviteTypeDesc;
}
public String getInvalidInviteTypeDesc() {
return invalidInviteTypeDesc;
}
public void setInvalidInviteTypeDesc(String invalidInviteTypeDesc) {
this.invalidInviteTypeDesc = invalidInviteTypeDesc;
}
public String getAddMemberTypeDesc() {
return addMemberTypeDesc;
}
public void setAddMemberTypeDesc(String addMemberTypeDesc) {
this.addMemberTypeDesc = addMemberTypeDesc;
}
public String getJoinGroupChatTime() {
return joinGroupChatTime;
}
public void setJoinGroupChatTime(String joinGroupChatTime) {
this.joinGroupChatTime = joinGroupChatTime;
}
}
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