Commit 723235de by songyinghui

feat: 落地页模板相关

parent 43184165
......@@ -50,4 +50,11 @@ public interface HmPageTemplateApiService {
*/
ServiceResponse<Page<HmPageRelationRespDTO>> queryPageRelation(HmPageRelationQueryDTO relationQueryDTO);
/**
* 根据页面id 查询
* @param templateId
* @return
*/
ServiceResponse<HmPageTemplateRespDTO> queryPageTemplateDetail(Long templateId);
}
......@@ -18,6 +18,11 @@ public class HmPageTemplateQO extends BasePageInfo {
private String pageSearchText;
/**
* 模板id
*/
private Long templateId;
/**
* 企业id
*/
private String enterpriseId;
......@@ -83,4 +88,12 @@ public class HmPageTemplateQO extends BasePageInfo {
public void setStatus(Integer status) {
this.status = status;
}
public Long getTemplateId() {
return templateId;
}
public void setTemplateId(Long templateId) {
this.templateId = templateId;
}
}
......@@ -48,11 +48,13 @@ public class HmGroupApiServiceImpl implements HmGroupApiService {
public ServiceResponse<Long> saveOrUpdateHmGroupSetting(HmGroupDTO hmGroupDTO) {
ServiceResponse<Long> serviceResponse = new ServiceResponse();
if (StringUtils.isBlank(hmGroupDTO.getGroupName())) {
serviceResponse.setCode(HaoBanErrCodeCommon.ERR_2.getCode());
serviceResponse.setCode(HaoBanErrCodeCommon.ERR_5.getCode());
serviceResponse.setMessage(HaoBanErrCodeCommon.ERR_5.getMsg());
return serviceResponse;
}
if (StringUtils.equals(DEFAULT_GROUP_NAME, hmGroupDTO.getGroupName())){
serviceResponse.setCode(HaoBanErrCodeCommon.ERR_5.getCode());
serviceResponse.setMessage(HaoBanErrCodeCommon.ERR_5.getMsg());
return serviceResponse;
}
HmGroupInfoQO groupInfoQo = new HmGroupInfoQO();
......@@ -66,6 +68,7 @@ public class HmGroupApiServiceImpl implements HmGroupApiService {
// check groupName unique
if (CollectionUtils.isNotEmpty(tabHaobanHmGroupSettings)) {
serviceResponse.setCode(HaoBanErrCodeCommon.ERR_2.getCode());
serviceResponse.setMessage(HaoBanErrCodeCommon.ERR_2.getMsg());
return serviceResponse;
}
TabHaobanHmGroupSetting tempGroupSetting = new TabHaobanHmGroupSetting();
......@@ -85,6 +88,7 @@ public class HmGroupApiServiceImpl implements HmGroupApiService {
&& tabHaobanHmGroupSettings.size() > 1) {
// 名称重复
serviceResponse.setCode(HaoBanErrCodeCommon.ERR_5.getCode());
serviceResponse.setMessage(HaoBanErrCodeCommon.ERR_5.getMsg());
return serviceResponse;
}
if (CollectionUtils.isNotEmpty(tabHaobanHmGroupSettings)
......@@ -96,23 +100,24 @@ public class HmGroupApiServiceImpl implements HmGroupApiService {
TabHaobanHmGroupSetting tabHaobanHmGroupSetting = haobanHmGroupSettingMapper.selectByPrimaryKey(hmGroupDTO.getGroupId());
if (tabHaobanHmGroupSetting == null) {
serviceResponse.setCode(HaoBanErrCodeCommon.ERR_8.getCode());
serviceResponse.setMessage(HaoBanErrCodeCommon.ERR_8.getMsg());
return serviceResponse;
}
if (!StringUtils.equals(tabHaobanHmGroupSetting.getEnterpriseId(), hmGroupDTO.getEnterpriseId())) {
// 无权限
serviceResponse.setCode(HaoBanErrCodeCommon.ERR_9.getCode());
serviceResponse.setMessage(HaoBanErrCodeCommon.ERR_9.getMsg());
return serviceResponse;
}
TabHaobanHmGroupSetting tempGroupSetting = new TabHaobanHmGroupSetting();
tempGroupSetting.setGroupId(tabHaobanHmGroupSetting.getGroupId());
tempGroupSetting.setGroupName(tabHaobanHmGroupSetting.getGroupName());
tempGroupSetting.setGroupName(hmGroupDTO.getGroupName());
tempGroupSetting.setModifierId(hmGroupDTO.getModifierId());
tempGroupSetting.setModifierName(hmGroupDTO.getModifierName());
tempGroupSetting.setUpdateTime(new Date());
haobanHmGroupSettingMapper.updateByPrimaryKeySelective(tempGroupSetting);
serviceResponse.setResult(tempGroupSetting.getGroupId());
}
// todo 日志
return serviceResponse;
}
......@@ -131,6 +136,7 @@ public class HmGroupApiServiceImpl implements HmGroupApiService {
List<HmGroupDTO> result = new ArrayList<>();
result.add(buildDefault(null));
if (CollectionUtils.isNotEmpty(hmGroupInfoPage.getResult())){
hmGroupInfoPage.getResult().forEach(item -> item.setDefaultFlag(0));
result.addAll(hmGroupInfoPage.getResult());
}
hmGroupInfoPage.setResult(result);
......@@ -174,7 +180,6 @@ public class HmGroupApiServiceImpl implements HmGroupApiService {
tempGroupSetting.setModifierName(groupDTO.getModifierName());
tempGroupSetting.setUpdateTime(new Date());
serviceResponse.setResult(haobanHmGroupSettingMapper.updateByPrimaryKeySelective(tempGroupSetting) == 1);
// todo log
return serviceResponse;
}
......
......@@ -19,6 +19,7 @@ import com.gic.haoban.manage.service.pojo.bo.hm.HmPageRelationBO;
import com.gic.haoban.manage.service.pojo.qo.HmPageRelationQO;
import com.gic.haoban.manage.service.pojo.qo.HmPageTemplateQO;
import com.gic.haoban.manage.service.service.hm.HmPageRelationService;
import com.github.pagehelper.PageHelper;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
......@@ -57,8 +58,8 @@ public class HmPageTemplateApiServiceImpl implements HmPageTemplateApiService {
// save
TabHaobanHmPage haobanHmPage = new TabHaobanHmPage();
BeanUtils.copyProperties(pageTemplateDTO, haobanHmPage);
haobanHmPage.setTemplateCode(this.generatorTemplateCode());
haobanHmPage.setTemplateId(UniqueIdUtils.uniqueLong());
haobanHmPage.setTemplateCode(this.generatorTemplateCode(haobanHmPage.getTemplateId()));
haobanHmPage.setCreateorId(pageTemplateDTO.getClerkId());
haobanHmPage.setCreateorName(pageTemplateDTO.getClerkName());
haobanHmPage.setCreateTime(new Date());
......@@ -96,7 +97,6 @@ public class HmPageTemplateApiServiceImpl implements HmPageTemplateApiService {
haobanHmPageMapper.updateByPrimaryKeySelective(haobanHmPage);
serviceResponse.setResult(pageTemplateDTO.getTemplateId());
}
// todo log
return serviceResponse;
}
......@@ -122,7 +122,6 @@ public class HmPageTemplateApiServiceImpl implements HmPageTemplateApiService {
tempHmPage.setModifierName(pageTemplateDTO.getClerkName());
haobanHmPageMapper.updateByPrimaryKeySelective(tempHmPage);
serviceResponse.setResult(Boolean.TRUE);
// todo log
return serviceResponse;
}
......@@ -131,6 +130,7 @@ public class HmPageTemplateApiServiceImpl implements HmPageTemplateApiService {
HmPageTemplateQO pageTemplateQO = new HmPageTemplateQO();
BeanUtils.copyProperties(pageQueryDTO, pageTemplateQO);
pageTemplateQO.setStatus(HmPageTemplateStatus.ENABLE.getCode());
PageHelper.startPage(pageQueryDTO.getPageNum(), pageTemplateQO.getPageSize());
com.github.pagehelper.Page<TabHaobanHmPage> tabHaobanHmPages =
(com.github.pagehelper.Page<TabHaobanHmPage>) haobanHmPageMapper.queryHmPageTemplateList(pageTemplateQO);
Page<HmPageTemplateRespDTO> pageTemplateRespDTO =
......@@ -175,7 +175,26 @@ public class HmPageTemplateApiServiceImpl implements HmPageTemplateApiService {
* 生成模板code
* @return
*/
private String generatorTemplateCode(){
return TEMPLATE_CODE_PREFIX + UniqueIdUtils.uniqueLong();
private String generatorTemplateCode(Long templateId){
return TEMPLATE_CODE_PREFIX + templateId;
}
/**
* 根据页面id 查询
*
* @param templateId
* @return
*/
@Override
public ServiceResponse<HmPageTemplateRespDTO> queryPageTemplateDetail(Long templateId) {
ServiceResponse<HmPageTemplateRespDTO> serviceResponse = new ServiceResponse<>();
TabHaobanHmPage haobanHmPage = haobanHmPageMapper.selectByPrimaryKey(templateId);
if (haobanHmPage == null){
return serviceResponse;
}
HmPageTemplateRespDTO hmPageTemplateRespDTO = new HmPageTemplateRespDTO();
BeanUtils.copyProperties(haobanHmPage, hmPageTemplateRespDTO);
serviceResponse.setResult(hmPageTemplateRespDTO);
return serviceResponse;
}
}
......@@ -219,7 +219,7 @@ public class WelcomeController extends WebBaseController {
}
@RequestMapping(path = "/relation/list")
public RestResponse<PageResult2<HmWelcomeRelationDTO>> queryWelcomeRelationList(@RequestParam("welcomeId") Long welcomeId,
public RestResponse<PageResult2<HmWelcomeRelationDTO>> queryWelcomeRelationList(@RequestParam("welcomeId") String welcomeId,
@RequestParam(value = "pageNum", defaultValue = "1") Integer pageNum,
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
QueryWelcomeRelationQDTO queryWelcomeRelationQDTO = new QueryWelcomeRelationQDTO();
......
package com.gic.haoban.manage.web.controller.hm;
import com.gic.api.base.commons.Page;
import com.gic.commons.webapi.reponse.RestResponse;
import com.gic.haoban.base.api.common.PageResult2;
import com.gic.haoban.base.api.common.ServiceResponse;
import com.gic.haoban.base.api.common.pojo.dto.WebLoginDTO;
......@@ -37,7 +38,7 @@ public class HmGroupController extends WebBaseController {
private HmGroupApiService groupApiService;
@RequestMapping(path = "/save", method = RequestMethod.POST)
public HaobanResponse saveHmGroupSetting(@Valid HmGroupSettingVO hmGroupSettingVO){
public RestResponse<?> saveHmGroupSetting(@Valid HmGroupSettingVO hmGroupSettingVO){
WebLoginDTO loginUser = AuthWebRequestUtil.getLoginUser();
HmGroupDTO hmGroupDTO = new HmGroupDTO();
hmGroupDTO.setGroupName(hmGroupSettingVO.getGroupName());
......@@ -46,11 +47,14 @@ public class HmGroupController extends WebBaseController {
hmGroupDTO.setEnterpriseId(loginUser.getEnterpriseId());
hmGroupDTO.setWxEnterpriseId(loginUser.getWxEnterpriseId());
ServiceResponse<Long> serviceResponse = groupApiService.saveOrUpdateHmGroupSetting(hmGroupDTO);
return resultResponse(HaoBanErrCode.ERR_1, serviceResponse.getResult());
if (serviceResponse.isSuccess()){
return RestResponse.successResult(serviceResponse.getResult());
}
return RestResponse.failure(serviceResponse.getCode()+"", serviceResponse.getMessage());
}
@RequestMapping(path = "/list")
public HaobanResponse queryHmGroupList(HmGroupQO hmGroupQo){
public RestResponse<?> queryHmGroupList(HmGroupQO hmGroupQo){
WebLoginDTO loginUser = AuthWebRequestUtil.getLoginUser();
String wxEnterpriseId = loginUser.getWxEnterpriseId();
String enterpriseId = loginUser.getEnterpriseId();
......@@ -62,25 +66,30 @@ public class HmGroupController extends WebBaseController {
hmGroupQueryDTO.setEnterpriseId(enterpriseId);
ServiceResponse<Page<HmGroupDTO>> serviceResponse = groupApiService.queryHmGroupSettingList(hmGroupQueryDTO);
PageResult2 pageInfo = PageUtil.getPageInfo(serviceResponse.getResult());
return resultResponse(HaoBanErrCode.ERR_1, pageInfo);
return RestResponse.successResult(pageInfo);
}
@RequestMapping(path = "/edit", method = RequestMethod.POST)
public HaobanResponse editHmGroupSetting(@Valid HmGroupSettingVO hmGroupSettingVO){
public RestResponse<?> editHmGroupSetting(@Valid HmGroupSettingVO hmGroupSettingVO){
WebLoginDTO loginUser = AuthWebRequestUtil.getLoginUser();
HmGroupDTO hmGroupDTO = new HmGroupDTO();
hmGroupDTO.setGroupName(hmGroupSettingVO.getGroupName());
hmGroupDTO.setModifierId(loginUser.getClerkId());
hmGroupDTO.setModifierName(loginUser.getClerkName());
hmGroupDTO.setGroupId(hmGroupSettingVO.getGroupId());
hmGroupDTO.setEnterpriseId(loginUser.getEnterpriseId());
hmGroupDTO.setWxEnterpriseId(loginUser.getWxEnterpriseId());
ServiceResponse<Long> serviceResponse = groupApiService.saveOrUpdateHmGroupSetting(hmGroupDTO);
return resultResponse(HaoBanErrCode.ERR_1, serviceResponse.getResult());
if (serviceResponse.isSuccess()){
return RestResponse.successResult(serviceResponse.getResult());
}
return RestResponse.failure(serviceResponse.getCode()+"", serviceResponse.getMessage());
}
@RequestMapping(path = "/delete", method = RequestMethod.POST)
public HaobanResponse deleteHmGroupSetting(HmGroupSettingVO hmGroupSettingVO){
public RestResponse<?> deleteHmGroupSetting(HmGroupSettingVO hmGroupSettingVO){
if (hmGroupSettingVO.getGroupId() == null){
return resultResponse(HaoBanErrCode.ERR_2);
return RestResponse.failure(HaoBanErrCode.ERR_2.getCode()+"", HaoBanErrCode.ERR_2.getMsg());
}
WebLoginDTO loginUser = AuthWebRequestUtil.getLoginUser();
HmGroupDTO hmGroupDTO = new HmGroupDTO();
......@@ -88,13 +97,16 @@ public class HmGroupController extends WebBaseController {
hmGroupDTO.setModifierName(loginUser.getClerkName());
hmGroupDTO.setGroupId(hmGroupSettingVO.getGroupId());
ServiceResponse<Boolean> serviceResponse = groupApiService.deleteGroupSetting(hmGroupDTO);
return resultResponse(HaoBanErrCode.ERR_1, serviceResponse.getResult());
if (serviceResponse.isSuccess()){
return RestResponse.successResult(serviceResponse.getResult());
}
return RestResponse.failure(serviceResponse.getCode()+"", serviceResponse.getMessage());
}
@RequestMapping(path = "/refer/count")
public HaobanResponse queryGroupTotalReferCount(){
public RestResponse<?> queryGroupTotalReferCount(){
WebLoginDTO loginUser = AuthWebRequestUtil.getLoginUser();
ServiceResponse<Integer> serviceResponse = groupApiService.queryGroupReferCount(loginUser.getEnterpriseId(), loginUser.getWxEnterpriseId());
return resultResponse(HaoBanErrCode.ERR_1, serviceResponse.getResult());
return RestResponse.successResult(serviceResponse.getResult());
}
}
package com.gic.haoban.manage.web.controller.hm;
import com.gic.api.base.commons.Page;
import com.gic.commons.webapi.reponse.RestResponse;
import com.gic.haoban.base.api.common.PageResult2;
import com.gic.haoban.base.api.common.ServiceResponse;
import com.gic.haoban.base.api.common.pojo.dto.WebLoginDTO;
import com.gic.haoban.common.utils.AuthWebRequestUtil;
import com.gic.haoban.common.utils.PageUtil;
import com.gic.haoban.manage.api.dto.hm.HmPageQueryDTO;
import com.gic.haoban.manage.api.dto.hm.HmPageTemplateDTO;
import com.gic.haoban.manage.api.dto.hm.HmPageTemplateRespDTO;
import com.gic.haoban.manage.api.service.hm.HmPageTemplateApiService;
import com.gic.haoban.manage.web.vo.hm.HmPageTemplateListVO;
import com.gic.haoban.manage.web.vo.hm.HmPageTemplateSettingVO;
import com.sun.deploy.net.proxy.pac.PACFunctions;
import com.tencentcloudapi.mongodb.v20190725.models.Auth;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
......@@ -10,8 +26,75 @@ import org.springframework.web.bind.annotation.RestController;
* @Version
**/
@RestController
@RequestMapping(path = "/hm/guide/")
@RequestMapping(path = "/hm/guide")
public class HmPageTemplateController {
@Autowired
private HmPageTemplateApiService pageTemplateApiService;
@RequestMapping(path = "/page/save")
public RestResponse<?> savePageTemplate(HmPageTemplateSettingVO pageTemplateSettingVO){
WebLoginDTO loginUser = AuthWebRequestUtil.getLoginUser();
HmPageTemplateDTO pageTemplateDTO = new HmPageTemplateDTO();
pageTemplateDTO.setTemplateName(pageTemplateSettingVO.getTemplateName());
pageTemplateDTO.setPageTitle(pageTemplateSettingVO.getPageTitle());
pageTemplateDTO.setMerchantName(pageTemplateSettingVO.getMerchantName());
pageTemplateDTO.setMerchantPhoneNumber(pageTemplateSettingVO.getMerchantPhoneNumber());
pageTemplateDTO.setMerchantLogo(pageTemplateSettingVO.getMerchantLogo());
pageTemplateDTO.setPageBackgroudImg(pageTemplateSettingVO.getPageBackgroundImg());
pageTemplateDTO.setGuideComment(pageTemplateSettingVO.getGuideComment());
pageTemplateDTO.setClerkId(loginUser.getClerkId());
pageTemplateDTO.setClerkName(loginUser.getClerkName());
pageTemplateDTO.setEnterpriseId(loginUser.getEnterpriseId());
pageTemplateDTO.setWxEnterpriseId(loginUser.getWxEnterpriseId());
ServiceResponse<Long> serviceResponse = pageTemplateApiService.saveOrUpdateHmPageTemplate(pageTemplateDTO);
return RestResponse.successResult(serviceResponse.getResult());
}
@RequestMapping(path = "/page/edit")
public RestResponse<?> editPageTemplate(HmPageTemplateSettingVO pageTemplateSettingVO){
WebLoginDTO loginUser = AuthWebRequestUtil.getLoginUser();
HmPageTemplateDTO pageTemplateDTO = new HmPageTemplateDTO();
pageTemplateDTO.setTemplateId(pageTemplateSettingVO.getTemplateId());
pageTemplateDTO.setTemplateName(pageTemplateSettingVO.getTemplateName());
pageTemplateDTO.setPageTitle(pageTemplateSettingVO.getPageTitle());
pageTemplateDTO.setMerchantName(pageTemplateSettingVO.getMerchantName());
pageTemplateDTO.setMerchantPhoneNumber(pageTemplateSettingVO.getMerchantPhoneNumber());
pageTemplateDTO.setMerchantLogo(pageTemplateSettingVO.getMerchantLogo());
pageTemplateDTO.setPageBackgroudImg(pageTemplateSettingVO.getPageBackgroundImg());
pageTemplateDTO.setGuideComment(pageTemplateSettingVO.getGuideComment());
pageTemplateDTO.setClerkId(loginUser.getClerkId());
pageTemplateDTO.setClerkName(loginUser.getClerkName());
ServiceResponse<Long> serviceResponse = pageTemplateApiService.saveOrUpdateHmPageTemplate(pageTemplateDTO);
return RestResponse.successResult(serviceResponse.getResult());
}
@RequestMapping(path = "/page/list")
public RestResponse<?> queryPageTemplateList(HmPageTemplateListVO pageTemplateListVO){
WebLoginDTO loginUser = AuthWebRequestUtil.getLoginUser();
HmPageQueryDTO hmPageQueryDTO = new HmPageQueryDTO();
hmPageQueryDTO.setPageNum(pageTemplateListVO.getPageNum());
hmPageQueryDTO.setPageSize(pageTemplateListVO.getPageSize());
hmPageQueryDTO.setEnterpriseId(loginUser.getEnterpriseId());
hmPageQueryDTO.setWxEnterpriseId(loginUser.getWxEnterpriseId());
hmPageQueryDTO.setPageSearchText(pageTemplateListVO.getPageSearchText());
hmPageQueryDTO.setStartTime(pageTemplateListVO.getStartTime());
hmPageQueryDTO.setEndTime(pageTemplateListVO.getEndTime());
ServiceResponse<Page<HmPageTemplateRespDTO>> serviceResponse = pageTemplateApiService.queryPageTemplateList(hmPageQueryDTO);
PageResult2 pageInfo = PageUtil.getPageInfo(serviceResponse.getResult());
return RestResponse.successResult(pageInfo);
}
@RequestMapping(path = "/page/delete")
public RestResponse<?> deletePageTemplate(Long templateId){
WebLoginDTO loginUser = AuthWebRequestUtil.getLoginUser();
HmPageTemplateDTO hmPageTemplateDTO = new HmPageTemplateDTO();
hmPageTemplateDTO.setTemplateId(templateId);
hmPageTemplateDTO.setClerkId(loginUser.getClerkId());
hmPageTemplateDTO.setClerkName(loginUser.getClerkName());
ServiceResponse<Boolean> serviceResponse = pageTemplateApiService.deleteHmPageTemplate(hmPageTemplateDTO);
return RestResponse.successResult(serviceResponse.getResult());
}
}
package com.gic.haoban.manage.web.vo.hm;
import com.gic.haoban.base.api.common.BasePageInfo;
import java.util.Date;
/**
* @Author MUSI
* @Date 2022/7/8 10:01 AM
* @Description
* @Version
**/
public class HmPageTemplateListVO extends BasePageInfo {
private String pageSearchText;
private Date startTime;
private Date endTime;
public String getPageSearchText() {
return pageSearchText;
}
public void setPageSearchText(String pageSearchText) {
this.pageSearchText = pageSearchText;
}
public Date getStartTime() {
return startTime;
}
public void setStartTime(Date startTime) {
this.startTime = startTime;
}
public Date getEndTime() {
return endTime;
}
public void setEndTime(Date endTime) {
this.endTime = endTime;
}
}
package com.gic.haoban.manage.web.vo.hm;
import java.io.Serializable;
/**
* @Author MUSI
* @Date 2022/7/8 9:47 AM
* @Description
* @Version
**/
public class HmPageTemplateSettingVO implements Serializable {
private Long templateId;
/**
* 落地页模板名称
*/
private String templateName;
/**
* 页面标题
*/
private String pageTitle;
/**
* 商户名称
*/
private String merchantName;
/**
* 商户电话号码
*/
private String merchantPhoneNumber;
/***
* 商户logo
*/
private String merchantLogo;
/**
* 页面背景
*/
private String pageBackgroundImg;
/**
* 引导语
*/
private String guideComment;
public Long getTemplateId() {
return templateId;
}
public void setTemplateId(Long templateId) {
this.templateId = templateId;
}
public String getTemplateName() {
return templateName;
}
public void setTemplateName(String templateName) {
this.templateName = templateName;
}
public String getPageTitle() {
return pageTitle;
}
public void setPageTitle(String pageTitle) {
this.pageTitle = pageTitle;
}
public String getMerchantName() {
return merchantName;
}
public void setMerchantName(String merchantName) {
this.merchantName = merchantName;
}
public String getMerchantPhoneNumber() {
return merchantPhoneNumber;
}
public void setMerchantPhoneNumber(String merchantPhoneNumber) {
this.merchantPhoneNumber = merchantPhoneNumber;
}
public String getMerchantLogo() {
return merchantLogo;
}
public void setMerchantLogo(String merchantLogo) {
this.merchantLogo = merchantLogo;
}
public String getPageBackgroundImg() {
return pageBackgroundImg;
}
public void setPageBackgroundImg(String pageBackgroundImg) {
this.pageBackgroundImg = pageBackgroundImg;
}
public String getGuideComment() {
return guideComment;
}
public void setGuideComment(String guideComment) {
this.guideComment = guideComment;
}
}
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