Commit ab65dc32 by zhangyang

feat:[1006273] 增加rays码分享配置接口

parent f80070cc
...@@ -7,6 +7,7 @@ import org.springframework.context.annotation.Configuration; ...@@ -7,6 +7,7 @@ import org.springframework.context.annotation.Configuration;
@Configuration @Configuration
@EnableNacosConfig @EnableNacosConfig
@NacosPropertySource(dataId = "bookdb.yml") @NacosPropertySource(dataId = "bookdb.yml")
@NacosPropertySource(dataId = "book.yml")
@NacosPropertySource(dataId = "public_system.properties") @NacosPropertySource(dataId = "public_system.properties")
public class NacosPropertyLoadConfig { public class NacosPropertyLoadConfig {
} }
...@@ -8,6 +8,7 @@ import com.pcloud.book.group.dto.BookServeDTO; ...@@ -8,6 +8,7 @@ import com.pcloud.book.group.dto.BookServeDTO;
import com.pcloud.book.group.dto.NavigationParamDTO; import com.pcloud.book.group.dto.NavigationParamDTO;
import com.pcloud.book.group.dto.ResourcePageCourseDTO; import com.pcloud.book.group.dto.ResourcePageCourseDTO;
import com.pcloud.book.group.dto.ResourcePageDTO; import com.pcloud.book.group.dto.ResourcePageDTO;
import com.pcloud.book.group.dto.ResourcePageShareDto;
import com.pcloud.book.group.entity.BookGroupServe; import com.pcloud.book.group.entity.BookGroupServe;
import com.pcloud.book.group.entity.ResourcePage; import com.pcloud.book.group.entity.ResourcePage;
import com.pcloud.book.group.entity.ResourcePageCollect; import com.pcloud.book.group.entity.ResourcePageCollect;
...@@ -18,6 +19,7 @@ import com.pcloud.book.group.vo.RecommendServeVO; ...@@ -18,6 +19,7 @@ import com.pcloud.book.group.vo.RecommendServeVO;
import com.pcloud.book.group.vo.ResourceColumnAndServeVO; import com.pcloud.book.group.vo.ResourceColumnAndServeVO;
import com.pcloud.book.group.vo.ResourcePageItemVO; import com.pcloud.book.group.vo.ResourcePageItemVO;
import com.pcloud.book.group.vo.ResourcePageOneServe; import com.pcloud.book.group.vo.ResourcePageOneServe;
import com.pcloud.book.group.vo.ResourcePageShareParam;
import com.pcloud.book.group.vo.ResourcePageVO; import com.pcloud.book.group.vo.ResourcePageVO;
import com.pcloud.book.group.vo.UpdateResourceColumnVO; import com.pcloud.book.group.vo.UpdateResourceColumnVO;
import com.pcloud.book.group.vo.UpdateResourcePageVO; import com.pcloud.book.group.vo.UpdateResourcePageVO;
...@@ -532,4 +534,18 @@ public interface ResourcePageBiz { ...@@ -532,4 +534,18 @@ public interface ResourcePageBiz {
* @return * @return
*/ */
List<ResourceColumnAndServeVO> getColumnAndServeListByPageId4Wechat(Long resourcePageId, Long wechatUserId, Long bookId, Long adviserId, Long channelId, Integer enableAdverting, Long navigationId); List<ResourceColumnAndServeVO> getColumnAndServeListByPageId4Wechat(Long resourcePageId, Long wechatUserId, Long bookId, Long adviserId, Long channelId, Integer enableAdverting, Long navigationId);
/**
* 保存分享配置
* @param param
* @return
*/
Integer saveShareConfig(ResourcePageShareParam param);
/**
* 获取分享配置
* @param qrCodeId
* @return
*/
ResourcePageShareDto getShareConfig(Long qrCodeId);
} }
...@@ -70,6 +70,7 @@ import com.pcloud.book.group.dto.MemberActivityBookSetDTO; ...@@ -70,6 +70,7 @@ import com.pcloud.book.group.dto.MemberActivityBookSetDTO;
import com.pcloud.book.group.dto.NavigationParamDTO; import com.pcloud.book.group.dto.NavigationParamDTO;
import com.pcloud.book.group.dto.ResourcePageCourseDTO; import com.pcloud.book.group.dto.ResourcePageCourseDTO;
import com.pcloud.book.group.dto.ResourcePageDTO; import com.pcloud.book.group.dto.ResourcePageDTO;
import com.pcloud.book.group.dto.ResourcePageShareDto;
import com.pcloud.book.group.dto.ResourcePageUrlDTO; import com.pcloud.book.group.dto.ResourcePageUrlDTO;
import com.pcloud.book.group.dto.WxworkPageFixedDTO; import com.pcloud.book.group.dto.WxworkPageFixedDTO;
import com.pcloud.book.group.entity.BookAppletScene; import com.pcloud.book.group.entity.BookAppletScene;
...@@ -83,10 +84,12 @@ import com.pcloud.book.group.entity.ResourcePageCourse; ...@@ -83,10 +84,12 @@ import com.pcloud.book.group.entity.ResourcePageCourse;
import com.pcloud.book.group.entity.ResourcePageItem; import com.pcloud.book.group.entity.ResourcePageItem;
import com.pcloud.book.group.entity.ResourcePageNavigation; import com.pcloud.book.group.entity.ResourcePageNavigation;
import com.pcloud.book.group.entity.ResourcePagePic; import com.pcloud.book.group.entity.ResourcePagePic;
import com.pcloud.book.group.entity.ResourcePageShare;
import com.pcloud.book.group.entity.ResourcePageTool; import com.pcloud.book.group.entity.ResourcePageTool;
import com.pcloud.book.group.entity.ResourcePageWxwork; import com.pcloud.book.group.entity.ResourcePageWxwork;
import com.pcloud.book.group.entity.ResourceRecomManage; import com.pcloud.book.group.entity.ResourceRecomManage;
import com.pcloud.book.group.enums.PageLandingPageTypeEnum; import com.pcloud.book.group.enums.PageLandingPageTypeEnum;
import com.pcloud.book.group.mapper.ResourcePageShareMapper;
import com.pcloud.book.group.tools.SendWeixinRequestTools; import com.pcloud.book.group.tools.SendWeixinRequestTools;
import com.pcloud.book.group.vo.CrmContactQrcodeVO; import com.pcloud.book.group.vo.CrmContactQrcodeVO;
import com.pcloud.book.group.vo.RecommendServeVO; import com.pcloud.book.group.vo.RecommendServeVO;
...@@ -94,6 +97,7 @@ import com.pcloud.book.group.vo.ResourceColumnAndServeVO; ...@@ -94,6 +97,7 @@ import com.pcloud.book.group.vo.ResourceColumnAndServeVO;
import com.pcloud.book.group.vo.ResourcePageBookstoreVO; import com.pcloud.book.group.vo.ResourcePageBookstoreVO;
import com.pcloud.book.group.vo.ResourcePageItemVO; import com.pcloud.book.group.vo.ResourcePageItemVO;
import com.pcloud.book.group.vo.ResourcePageOneServe; import com.pcloud.book.group.vo.ResourcePageOneServe;
import com.pcloud.book.group.vo.ResourcePageShareParam;
import com.pcloud.book.group.vo.ResourcePageVO; import com.pcloud.book.group.vo.ResourcePageVO;
import com.pcloud.book.group.vo.UpdateResourceColumnVO; import com.pcloud.book.group.vo.UpdateResourceColumnVO;
import com.pcloud.book.group.vo.UpdateResourcePageVO; import com.pcloud.book.group.vo.UpdateResourcePageVO;
...@@ -277,7 +281,16 @@ public class ResourcePageBizImpl implements ResourcePageBiz { ...@@ -277,7 +281,16 @@ public class ResourcePageBizImpl implements ResourcePageBiz {
private WxworkConsr wxworkConsr; private WxworkConsr wxworkConsr;
@Autowired @Autowired
private ErpConsr erpConsr; private ErpConsr erpConsr;
@Autowired
private ResourcePageShareMapper shareMapper;
@Value("${book.share.defaultTitle}")
private String defaultShareTitle;
@Value("${book.share.defaultContent}")
private String defaultShareContent;
@Value("${book.share.defaultImgUrl}")
private String defaultShareImgUrl;
@Value("${nft.book}") @Value("${nft.book}")
private List<Long> nftBookId; private List<Long> nftBookId;
@Value("${nft.resourcePageId}") @Value("${nft.resourcePageId}")
...@@ -3305,4 +3318,58 @@ public class ResourcePageBizImpl implements ResourcePageBiz { ...@@ -3305,4 +3318,58 @@ public class ResourcePageBizImpl implements ResourcePageBiz {
return resourceColumnAndServeVOS; return resourceColumnAndServeVOS;
} }
@Override
public Integer saveShareConfig(ResourcePageShareParam param) {
checkShareParam(param);
shareMapper.save(buildNewShareConfig(param));
return YesOrNoEnums.YES.getValue();
}
private ResourcePageShare buildNewShareConfig(ResourcePageShareParam param) {
ResourcePageShare pageShare = new ResourcePageShare();
pageShare.setCreateUser(param.getAdviserId());
pageShare.setUpdateUser(param.getAdviserId());
pageShare.setShareTitle(param.getShareTitle());
pageShare.setShareImgUrl(param.getShareImgUrl());
pageShare.setShareContent(param.getShareContent());
pageShare.setQrcodeId(param.getQrcodeId());
return pageShare;
}
private void checkShareParam(ResourcePageShareParam param) {
if (Optional.ofNullable(param.getQrcodeId()).orElse(0L) < 1) {
throw new BizException(BizException.PARAM_DELETION.getCode(), "二维码编号无效");
}
if(StringUtils.isBlank(param.getShareTitle())){
throw new BizException(BizException.PARAM_DELETION.getCode(), "分享标题无效");
}
if(StringUtils.isBlank(param.getShareContent())){
throw new BizException(BizException.PARAM_DELETION.getCode(), "分享内容无效");
}
if (StringUtils.isBlank(param.getShareImgUrl()) || !param.getShareImgUrl().startsWith("http")) {
throw new BizException(BizException.PARAM_DELETION.getCode(), "分享小图链接无效");
}
}
@Override
public ResourcePageShareDto getShareConfig(Long qrCodeId) {
if (Optional.ofNullable(qrCodeId).orElse(0L) < 1) {
throw new BizException(BizException.PARAM_DELETION.getCode(), "二维码编号无效");
}
ResourcePageShareDto shareDto = shareMapper.selectDtoByPrimaryKey(qrCodeId);
if(shareDto==null){
return getDefaultShareConfig(qrCodeId);
}
return shareMapper.selectDtoByPrimaryKey(qrCodeId);
}
private ResourcePageShareDto getDefaultShareConfig(Long qrCodeId) {
ResourcePageShareDto shareDto = new ResourcePageShareDto();
shareDto.setQrcodeId(qrCodeId);
shareDto.setShareTitle(StringUtils.isBlank(defaultShareTitle) ? "书童小睿" : defaultShareTitle);
shareDto.setShareContent(StringUtils.isBlank(defaultShareContent) ? "我找到这本书「完整版」配套服务了,推荐给你" : defaultShareContent);
shareDto.setShareImgUrl(StringUtils.isBlank(defaultShareImgUrl) ? "https://file.5rs.me/oss/uploadfe/png/782544053039e776b5379878a18de70e.png" : defaultShareImgUrl);
return shareDto;
}
} }
package com.pcloud.book.group.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
@Data
public class ResourcePageShareDto {
private Long qrcodeId;
private String shareTitle;
/**
* 分享小图url
*/
private String shareImgUrl;
private String shareContent;
}
\ No newline at end of file
package com.pcloud.book.group.entity;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
public class ResourcePageShare {
private Long qrcodeId;
private String shareTitle;
private String shareImgUrl;
private String shareContent;
private Integer version;
private Long updateUser;
private Long createUser;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
public Long getQrcodeId() {
return qrcodeId;
}
public void setQrcodeId(Long qrcodeId) {
this.qrcodeId = qrcodeId;
}
public String getShareTitle() {
return shareTitle;
}
public void setShareTitle(String shareTitle) {
this.shareTitle = shareTitle == null ? null : shareTitle.trim();
}
public String getShareImgUrl() {
return shareImgUrl;
}
public void setShareImgUrl(String shareImgUrl) {
this.shareImgUrl = shareImgUrl;
}
public String getShareContent() {
return shareContent;
}
public void setShareContent(String shareContent) {
this.shareContent = shareContent == null ? null : shareContent.trim();
}
public Integer getVersion() {
return version;
}
public void setVersion(Integer version) {
this.version = version;
}
public Long getUpdateUser() {
return updateUser;
}
public void setUpdateUser(Long updateUser) {
this.updateUser = updateUser;
}
public Long getCreateUser() {
return createUser;
}
public void setCreateUser(Long createUser) {
this.createUser = createUser;
}
public Date getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Date updateTime) {
this.updateTime = updateTime;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
}
\ No newline at end of file
...@@ -2,9 +2,11 @@ package com.pcloud.book.group.facade.impl; ...@@ -2,9 +2,11 @@ package com.pcloud.book.group.facade.impl;
import com.pcloud.book.group.biz.ResourcePageBiz; import com.pcloud.book.group.biz.ResourcePageBiz;
import com.pcloud.book.group.dto.NavigationParamDTO; import com.pcloud.book.group.dto.NavigationParamDTO;
import com.pcloud.book.group.dto.ResourcePageShareDto;
import com.pcloud.book.group.entity.ResourcePageCollect; import com.pcloud.book.group.entity.ResourcePageCollect;
import com.pcloud.book.group.entity.ResourcePagePic; import com.pcloud.book.group.entity.ResourcePagePic;
import com.pcloud.book.group.entity.ResourceRecomManage; import com.pcloud.book.group.entity.ResourceRecomManage;
import com.pcloud.book.group.vo.ResourcePageShareParam;
import com.pcloud.book.group.vo.ResourcePageVO; import com.pcloud.book.group.vo.ResourcePageVO;
import com.pcloud.book.group.vo.UpdateResourceColumnVO; import com.pcloud.book.group.vo.UpdateResourceColumnVO;
import com.pcloud.book.group.vo.UpdateResourcePageVO; import com.pcloud.book.group.vo.UpdateResourcePageVO;
...@@ -401,4 +403,27 @@ public class ResourcePageFacade { ...@@ -401,4 +403,27 @@ public class ResourcePageFacade {
return new ResponseDto<>(resourcePageBiz.getWxworkPageByPageId(resourcePageId,false)); return new ResponseDto<>(resourcePageBiz.getWxworkPageByPageId(resourcePageId,false));
} }
@ApiOperation("获取分享配置")
@GetMapping("getShareConfig4Wechat")
public ResponseDto<?> getShareConfig4Wechat(@CookieValue("userInfo") String userInfo, @RequestParam("qrCodeId") Long qrCodeId) {
Long wechatUserId = Cookie.getId(userInfo,Cookie._WECHAT_USER_ID);
ResourcePageShareDto shareDto=resourcePageBiz.getShareConfig(qrCodeId);
return new ResponseDto<>(shareDto);
}
@ApiOperation("获取分享配置")
@GetMapping("getShareConfig")
public ResponseDto<?> getShareConfig(@RequestHeader("token") String token, @RequestParam("qrCodeId") Long qrCodeId) {
Long adviserId = (Long) SessionUtil.getVlaue(token, SessionUtil.PARTY_ID);
ResourcePageShareDto shareDto=resourcePageBiz.getShareConfig(qrCodeId);
return new ResponseDto<>(shareDto);
}
@ApiOperation("保存分享配置")
@PostMapping("saveShareConfig")
public ResponseDto<?> saveShareConfig(@RequestHeader("token") String token, @RequestBody ResourcePageShareParam param) {
Long adviserId = (Long) SessionUtil.getVlaue(token, SessionUtil.PARTY_ID);
param.setAdviserId(adviserId);
Integer rs=resourcePageBiz.saveShareConfig(param);
return new ResponseDto<>(rs);
}
} }
package com.pcloud.book.group.mapper;
import com.pcloud.book.group.dto.ResourcePageShareDto;
import com.pcloud.book.group.entity.ResourcePageShare;
import org.springframework.stereotype.Repository;
@Repository
public interface ResourcePageShareMapper {
int deleteByPrimaryKey(Long qrcodeId);
int insert(ResourcePageShare record);
int insertSelective(ResourcePageShare record);
ResourcePageShare selectByPrimaryKey(Long qrcodeId);
int updateByPrimaryKeySelective(ResourcePageShare record);
int updateByPrimaryKey(ResourcePageShare record);
ResourcePageShareDto selectDtoByPrimaryKey(Long qrCodeId);
Integer save(ResourcePageShare record);
}
\ No newline at end of file
package com.pcloud.book.group.vo;
import lombok.Data;
/**
* @描述:
* @作者:张扬
* @创建时间:2021/12/16 20:24:40
* @版本:1.0
*/
@Data
public class ResourcePageShareParam {
/**
* rays码编号
*/
private Long qrcodeId;
private String shareTitle;
private String shareImgUrl;
private String shareContent;
/**
* 服务端填充
*/
private Long adviserId;
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.pcloud.book.group.mapper.ResourcePageShareMapper">
<resultMap id="BaseResultMap" type="com.pcloud.book.group.entity.ResourcePageShare">
<id column="qrcode_id" jdbcType="BIGINT" property="qrcodeId" />
<result column="share_title" jdbcType="VARCHAR" property="shareTitle" />
<result column="share_img_url" jdbcType="VARCHAR" property="shareImgUrl" />
<result column="share_content" jdbcType="VARCHAR" property="shareContent" />
<result column="version" jdbcType="INTEGER" property="version" />
<result column="update_user" jdbcType="BIGINT" property="updateUser" />
<result column="create_user" jdbcType="BIGINT" property="createUser" />
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime" />
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
</resultMap>
<resultMap id="BaseResultDtoMap" type="com.pcloud.book.group.dto.ResourcePageShareDto">
<id column="qrcode_id" jdbcType="BIGINT" property="qrcodeId" />
<result column="share_title" jdbcType="VARCHAR" property="shareTitle" />
<result column="share_img_url" jdbcType="VARCHAR" property="shareImgUrl" />
<result column="share_content" jdbcType="VARCHAR" property="shareContent" />
</resultMap>
<sql id="Base_Column_List">
qrcode_id, share_title, share_img_url, share_content, version, update_user, create_user,
update_time, create_time
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from resource_page_share
where qrcode_id = #{qrcodeId,jdbcType=BIGINT}
</select>
<select id="selectDtoByPrimaryKey" resultMap="BaseResultDtoMap">
select
<include refid="Base_Column_List" />
from resource_page_share
where qrcode_id = #{qrcodeId,jdbcType=BIGINT}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Long">
delete from resource_page_share
where qrcode_id = #{qrcodeId,jdbcType=BIGINT}
</delete>
<insert id="insert" parameterType="com.pcloud.book.group.entity.ResourcePageShare">
insert into resource_page_share (qrcode_id, share_title, share_img_url,
share_content, version, update_user,
create_user, update_time, create_time
)
values (#{qrcodeId,jdbcType=BIGINT}, #{shareTitle,jdbcType=VARCHAR}, #{shareImgUrl,jdbcType=VARCHAR},
#{shareContent,jdbcType=VARCHAR}, #{version,jdbcType=INTEGER}, #{updateUser,jdbcType=BIGINT},
#{createUser,jdbcType=BIGINT}, #{updateTime,jdbcType=TIMESTAMP}, #{createTime,jdbcType=TIMESTAMP}
)
</insert>
<insert id="insertSelective" parameterType="com.pcloud.book.group.entity.ResourcePageShare">
insert into resource_page_share
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="qrcodeId != null">
qrcode_id,
</if>
<if test="shareTitle != null">
share_title,
</if>
<if test="shareImgUrl != null">
share_img_url,
</if>
<if test="shareContent != null">
share_content,
</if>
<if test="version != null">
version,
</if>
<if test="updateUser != null">
update_user,
</if>
<if test="createUser != null">
create_user,
</if>
<if test="updateTime != null">
update_time,
</if>
<if test="createTime != null">
create_time,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="qrcodeId != null">
#{qrcodeId,jdbcType=BIGINT},
</if>
<if test="shareTitle != null">
#{shareTitle,jdbcType=VARCHAR},
</if>
<if test="shareImgUrl != null">
#{shareImgUrl,jdbcType=VARCHAR},
</if>
<if test="shareContent != null">
#{shareContent,jdbcType=VARCHAR},
</if>
<if test="version != null">
#{version,jdbcType=INTEGER},
</if>
<if test="updateUser != null">
#{updateUser,jdbcType=BIGINT},
</if>
<if test="createUser != null">
#{createUser,jdbcType=BIGINT},
</if>
<if test="updateTime != null">
#{updateTime,jdbcType=TIMESTAMP},
</if>
<if test="createTime != null">
#{createTime,jdbcType=TIMESTAMP},
</if>
</trim>
</insert>
<insert id="save" parameterType="com.pcloud.book.group.entity.ResourcePageShare">
insert into resource_page_share (qrcode_id, share_title, share_img_url,
share_content, version, update_user,
create_user, update_time, create_time
)
values (#{qrcodeId,jdbcType=BIGINT}, #{shareTitle,jdbcType=VARCHAR}, #{shareImgUrl,jdbcType=VARCHAR},
#{shareContent,jdbcType=VARCHAR}, 1, #{updateUser,jdbcType=BIGINT},
#{createUser,jdbcType=BIGINT}, now(), now()
)
ON DUPLICATE KEY UPDATE
share_title = #{shareTitle,jdbcType=VARCHAR},
share_img_url = #{shareImgUrl,jdbcType=VARCHAR},
share_content = #{shareContent,jdbcType=VARCHAR},
update_time=now(),
version=version+1;
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.pcloud.book.group.entity.ResourcePageShare">
update resource_page_share
<set>
<if test="shareTitle != null">
share_title = #{shareTitle,jdbcType=VARCHAR},
</if>
<if test="shareImgUrl != null">
share_img_url = #{shareImgUrl,jdbcType=VARCHAR},
</if>
<if test="shareContent != null">
share_content = #{shareContent,jdbcType=VARCHAR},
</if>
<if test="version != null">
version = #{version,jdbcType=INTEGER},
</if>
<if test="updateUser != null">
update_user = #{updateUser,jdbcType=BIGINT},
</if>
<if test="createUser != null">
create_user = #{createUser,jdbcType=BIGINT},
</if>
<if test="updateTime != null">
update_time = #{updateTime,jdbcType=TIMESTAMP},
</if>
<if test="createTime != null">
create_time = #{createTime,jdbcType=TIMESTAMP},
</if>
</set>
where qrcode_id = #{qrcodeId,jdbcType=BIGINT}
</update>
<update id="updateByPrimaryKey" parameterType="com.pcloud.book.group.entity.ResourcePageShare">
update resource_page_share
set share_title = #{shareTitle,jdbcType=VARCHAR},
share_img_url = #{shareImgUrl,jdbcType=VARCHAR},
share_content = #{shareContent,jdbcType=VARCHAR},
version = #{version,jdbcType=INTEGER},
update_user = #{updateUser,jdbcType=BIGINT},
create_user = #{createUser,jdbcType=BIGINT},
update_time = #{updateTime,jdbcType=TIMESTAMP},
create_time = #{createTime,jdbcType=TIMESTAMP}
where qrcode_id = #{qrcodeId,jdbcType=BIGINT}
</update>
</mapper>
\ No newline at end of file
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