Commit fb23a5ce authored by 廖旭伟's avatar 廖旭伟

用户表增加用户头像;名片访问记录增加头像

parent 0da51c38
......@@ -68,6 +68,7 @@ CREATE TABLE mortals_xhx_bussinesscard_record(
`bussinesscardId` bigint(20) NOT NULL COMMENT '名片ID',
`viewId` bigint(20) COMMENT '查看人id',
`viewName` varchar(64) COMMENT '查看人名称',
`photoPath` varchar(255) COMMENT '头像地址',
`sumViews` int(4) DEFAULT '0' COMMENT '累计查看次数',
`remark` varchar(255) COMMENT '备注',
`viewTime` datetime COMMENT '最后浏览时间',
......@@ -78,3 +79,5 @@ CREATE TABLE mortals_xhx_bussinesscard_record(
PRIMARY KEY (`id`)
,KEY `viewId` (`viewId`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='名片访问记录信息';
ALTER TABLE `mortals_xhx_user` ADD COLUMN `photoPath` varchar(255) COMMENT '头像地址';
\ No newline at end of file
......@@ -104,6 +104,11 @@ public class UserEntity extends UserVo implements IUser {
*/
private String shareCode;
/**
* 头像地址
*/
private String photoPath;
public UserEntity(){}
......@@ -405,6 +410,14 @@ public class UserEntity extends UserVo implements IUser {
this.deptName = deptName;
}
public String getPhotoPath() {
return photoPath;
}
public void setPhotoPath(String photoPath) {
this.photoPath = photoPath;
}
@Override
public int hashCode() {
return this.getId().hashCode();
......@@ -472,5 +485,7 @@ public class UserEntity extends UserVo implements IUser {
this.lastLoginTime = null;
this.lastLoginAddress = "";
this.photoPath = "";
}
}
\ No newline at end of file
......@@ -196,6 +196,12 @@ public class UserQuery extends UserEntity {
/** 员工分享码排除列表 */
private List <String> shareCodeNotList;
/** 头像地址 */
private List<String> photoPathList;
/** 头像地址排除列表 */
private List <String> photoPathNotList;
/** OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4) */
private List<UserQuery> orConditionList;
......@@ -1234,6 +1240,38 @@ public class UserQuery extends UserEntity {
this.openIdNotList = openIdNotList;
}
/**
* 获取 头像地址
* @return photoPathList
*/
public List<String> getPhotoPathList(){
return this.photoPathList;
}
/**
* 设置 头像地址
* @param photoPathList
*/
public void setPhotoPathList(List<String> photoPathList){
this.photoPathList = photoPathList;
}
/**
* 获取 头像地址
* @return photoPathNotList
*/
public List<String> getPhotoPathNotList(){
return this.photoPathNotList;
}
/**
* 设置 头像地址
* @param photoPathNotList
*/
public void setPhotoPathNotList(List<String> photoPathNotList){
this.photoPathNotList = photoPathNotList;
}
/**
* 设置 用户ID,主键,自增长
* @param id
......@@ -1863,6 +1901,24 @@ public class UserQuery extends UserEntity {
return this;
}
/**
* 设置 头像地址
* @param photoPath
*/
public UserQuery photoPath(String photoPath){
setPhotoPath(photoPath);
return this;
}
/**
* 设置 头像地址
* @param photoPathList
*/
public UserQuery photoPathList(List<String> photoPathList){
this.photoPathList = photoPathList;
return this;
}
/**
* 获取 OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4)
* @return orConditionList
......
......@@ -11,11 +11,11 @@ import com.mortals.framework.model.BaseEntityLong;
import com.mortals.xhx.module.bussinesscard.model.vo.BussinesscardRecordVo;
import lombok.Data;
/**
* 名片访问记录信息实体对象
*
* @author zxfei
* @date 2024-11-20
*/
* 名片访问记录信息实体对象
*
* @author zxfei
* @date 2024-11-21
*/
@Data
public class BussinesscardRecordEntity extends BussinesscardRecordVo {
private static final long serialVersionUID = 1L;
......@@ -44,6 +44,10 @@ public class BussinesscardRecordEntity extends BussinesscardRecordVo {
* 最后浏览时间
*/
private Date viewTime;
/**
* 头像地址
*/
private String photoPath;
@Override
public int hashCode() {
return this.getId().hashCode();
......@@ -67,5 +71,6 @@ public class BussinesscardRecordEntity extends BussinesscardRecordVo {
this.sumViews = 0;
this.remark = "";
this.viewTime = null;
this.photoPath = "";
}
}
\ No newline at end of file
......@@ -4,11 +4,11 @@ import java.util.Date;
import java.util.List;
import com.mortals.xhx.module.bussinesscard.model.BussinesscardRecordEntity;
/**
* 名片访问记录信息查询对象
*
* @author zxfei
* @date 2024-11-20
*/
* 名片访问记录信息查询对象
*
* @author zxfei
* @date 2024-11-21
*/
public class BussinesscardRecordQuery extends BussinesscardRecordEntity {
/** 开始 序号,主键,自增长 */
private Long idStart;
......@@ -128,6 +128,11 @@ public class BussinesscardRecordQuery extends BussinesscardRecordEntity {
/** 结束 更新时间 */
private String updateTimeEnd;
/** 头像地址 */
private List<String> photoPathList;
/** 头像地址排除列表 */
private List <String> photoPathNotList;
/** OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4) */
private List<BussinesscardRecordQuery> orConditionList;
......@@ -782,6 +787,38 @@ public class BussinesscardRecordQuery extends BussinesscardRecordEntity {
this.updateTimeEnd = updateTimeEnd;
}
/**
* 获取 头像地址
* @return photoPathList
*/
public List<String> getPhotoPathList(){
return this.photoPathList;
}
/**
* 设置 头像地址
* @param photoPathList
*/
public void setPhotoPathList(List<String> photoPathList){
this.photoPathList = photoPathList;
}
/**
* 获取 头像地址
* @return photoPathNotList
*/
public List<String> getPhotoPathNotList(){
return this.photoPathNotList;
}
/**
* 设置 头像地址
* @param photoPathNotList
*/
public void setPhotoPathNotList(List<String> photoPathNotList){
this.photoPathNotList = photoPathNotList;
}
/**
* 设置 序号,主键,自增长
* @param id
......@@ -1147,6 +1184,25 @@ public class BussinesscardRecordQuery extends BussinesscardRecordEntity {
}
/**
* 设置 头像地址
* @param photoPath
*/
public BussinesscardRecordQuery photoPath(String photoPath){
setPhotoPath(photoPath);
return this;
}
/**
* 设置 头像地址
* @param photoPathList
*/
public BussinesscardRecordQuery photoPathList(List<String> photoPathList){
this.photoPathList = photoPathList;
return this;
}
/**
* 获取 OR条件集合,列表项之间是OR,项内容之间是AND,如:(list[0].1 and list[0].2) or (list[1].3 and list[1].4)
* @return orConditionList
......
package com.mortals.xhx.module.bussinesscard.service.impl;
import com.mortals.xhx.base.system.user.model.UserEntity;
import com.mortals.xhx.base.system.user.service.UserService;
import com.mortals.xhx.module.bussinesscard.model.BussinesscardEntity;
import com.mortals.xhx.module.bussinesscard.model.BussinesscardRecordQuery;
import org.springframework.beans.BeanUtils;
......@@ -7,6 +9,8 @@ import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.mortals.framework.service.impl.AbstractCRUDServiceImpl;
import com.mortals.framework.exception.AppException;
......@@ -15,6 +19,8 @@ import com.mortals.xhx.module.bussinesscard.dao.BussinesscardRecordDao;
import com.mortals.xhx.module.bussinesscard.model.BussinesscardRecordEntity;
import com.mortals.xhx.module.bussinesscard.service.BussinesscardRecordService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;
/**
* BussinesscardRecordService
* 名片访问记录信息 service实现
......@@ -26,9 +32,13 @@ import lombok.extern.slf4j.Slf4j;
@Slf4j
public class BussinesscardRecordServiceImpl extends AbstractCRUDServiceImpl<BussinesscardRecordDao, BussinesscardRecordEntity, Long> implements BussinesscardRecordService {
@Autowired
private UserService userService;
@Override
public void saveRecord(BussinesscardEntity bussinesscardEntity, Context context) {
if(context!=null&&context.getUser()!=null) {
UserEntity userEntity = userService.get(context.getUser().getId());
BussinesscardRecordEntity recordEntity = this.selectOne(new BussinesscardRecordQuery().bussinesscardId(bussinesscardEntity.getId()).viewId(context.getUser().getId()));
if(recordEntity!=null){
Map condition = new HashMap();
......@@ -37,6 +47,9 @@ public class BussinesscardRecordServiceImpl extends AbstractCRUDServiceImpl<Buss
data.put("sumViewsIncrement",1);
data.put("viewTime",new Date());
data.put("updateTime",new Date());
if(StringUtils.isEmpty(recordEntity.getPhotoPath())){
data.put("photoPath",userEntity==null?"":userEntity.getPhotoPath());
}
this.dao.update(data,condition);
}else {
recordEntity = new BussinesscardRecordEntity();
......@@ -47,6 +60,7 @@ public class BussinesscardRecordServiceImpl extends AbstractCRUDServiceImpl<Buss
recordEntity.setViewName(context.getUser().getRealName());
recordEntity.setViewTime(new Date());
recordEntity.setCreateTime(new Date());
recordEntity.setPhotoPath(userEntity==null?"":userEntity.getPhotoPath());
recordEntity.setCreateUserId(1l);
this.save(recordEntity);
}
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"mybatis-3-mapper.dtd">
<mapper namespace="com.mortals.xhx.base.system.user.dao.ibatis.UserDaoImpl">
<mapper namespace="com.mortals.xhx.module.user.dao.ibatis.UserDaoImpl">
<!-- 字段和属性映射 -->
<resultMap type="UserEntity" id="UserEntity-Map">
......@@ -28,11 +28,9 @@
<result property="areaCodes" column="areaCodes" />
<result property="staffId" column="staffId" />
<result property="openId" column="openId" />
<result property="shareCode" column="shareCode" />
<result property="photoPath" column="photoPath" />
</resultMap>
<!-- 表所有列 -->
<sql id="_columns">
<trim suffixOverrides="," suffix="">
......@@ -105,26 +103,26 @@
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('openId') or colPickMode == 1 and data.containsKey('openId')))">
a.openId,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('shareCode') or colPickMode == 1 and data.containsKey('shareCode')))">
a.shareCode,
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('photoPath') or colPickMode == 1 and data.containsKey('photoPath')))">
a.photoPath,
</if>
</trim>
</sql>
<!-- 新增 区分主键自增加还是业务插入 -->
<insert id="insert" parameterType="UserEntity" useGeneratedKeys="true" keyProperty="id">
insert into mortals_xhx_user
(loginName,loginPwd,loginLimitAddress,realName,mobile,phone,email,qq,userType,status,customerId,createTime,createUserId,createUserName,lastLoginTime,lastLoginAddress,deptId,deptName,siteIds,areaCodes,staffId,openId,shareCode)
(loginName,loginPwd,loginLimitAddress,realName,mobile,phone,email,qq,userType,status,customerId,createTime,createUserId,createUserName,lastLoginTime,lastLoginAddress,deptId,deptName,siteIds,areaCodes,staffId,openId,photoPath)
VALUES
(#{loginName},#{loginPwd},#{loginLimitAddress},#{realName},#{mobile},#{phone},#{email},#{qq},#{userType},#{status},#{customerId},#{createTime},#{createUserId},#{createUserName},#{lastLoginTime},#{lastLoginAddress},#{deptId},#{deptName},#{siteIds},#{areaCodes},#{staffId},#{openId},#{shareCode})
(#{loginName},#{loginPwd},#{loginLimitAddress},#{realName},#{mobile},#{phone},#{email},#{qq},#{userType},#{status},#{customerId},#{createTime},#{createUserId},#{createUserName},#{lastLoginTime},#{lastLoginAddress},#{deptId},#{deptName},#{siteIds},#{areaCodes},#{staffId},#{openId},#{photoPath})
</insert>
<!-- 批量新增 -->
<insert id="insertBatch" parameterType="paramDto">
insert into mortals_xhx_user
(loginName,loginPwd,loginLimitAddress,realName,mobile,phone,email,qq,userType,status,customerId,createTime,createUserId,createUserName,lastLoginTime,lastLoginAddress,deptId,deptName,siteIds,areaCodes,staffId,openId,shareCode)
(loginName,loginPwd,loginLimitAddress,realName,mobile,phone,email,qq,userType,status,customerId,createTime,createUserId,createUserName,lastLoginTime,lastLoginAddress,deptId,deptName,siteIds,areaCodes,staffId,openId,photoPath)
VALUES
<foreach collection="data.dataList" item="item" index="index" separator="," >
(#{item.loginName},#{item.loginPwd},#{item.loginLimitAddress},#{item.realName},#{item.mobile},#{item.phone},#{item.email},#{item.qq},#{item.userType},#{item.status},#{item.customerId},#{item.createTime},#{item.createUserId},#{item.createUserName},#{item.lastLoginTime},#{item.lastLoginAddress},#{item.deptId},#{item.deptName},#{item.siteIds},#{item.areaCodes},#{item.staffId},#{item.openId},#{item.shareCode})
(#{item.loginName},#{item.loginPwd},#{item.loginLimitAddress},#{item.realName},#{item.mobile},#{item.phone},#{item.email},#{item.qq},#{item.userType},#{item.status},#{item.customerId},#{item.createTime},#{item.createUserId},#{item.createUserName},#{item.lastLoginTime},#{item.lastLoginAddress},#{item.deptId},#{item.deptName},#{item.siteIds},#{item.areaCodes},#{item.staffId},#{item.openId},#{item.photoPath})
</foreach>
</insert>
......@@ -218,8 +216,8 @@
<if test="(colPickMode==0 and data.containsKey('openId')) or (colPickMode==1 and !data.containsKey('openId'))">
a.openId=#{data.openId},
</if>
<if test="(colPickMode==0 and data.containsKey('shareCode')) or (colPickMode==1 and !data.containsKey('shareCode'))">
a.shareCode=#{data.shareCode},
<if test="(colPickMode==0 and data.containsKey('photoPath')) or (colPickMode==1 and !data.containsKey('photoPath'))">
a.photoPath=#{data.photoPath},
</if>
</trim>
<trim suffixOverrides="where" suffix="">
......@@ -417,10 +415,10 @@
</if>
</foreach>
</trim>
<trim prefix="shareCode=(case" suffix="ELSE shareCode end),">
<trim prefix="photoPath=(case" suffix="ELSE photoPath end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('shareCode')) or (colPickMode==1 and !item.containsKey('shareCode'))">
when a.id=#{item.id} then #{item.shareCode}
<if test="(colPickMode==0 and item.containsKey('photoPath')) or (colPickMode==1 and !item.containsKey('photoPath'))">
when a.id=#{item.id} then #{item.photoPath}
</if>
</foreach>
</trim>
......@@ -535,6 +533,10 @@
<!-- 条件映射-代参数 -->
<sql id="_condition_param_">
<bind name="conditionParamRef" value="${_conditionParam_}"/>
<if test="permissionSql != null and permissionSql != ''">
${permissionSql}
</if>
<if test="conditionParamRef.containsKey('id')">
<if test="conditionParamRef.id != null">
${_conditionType_} a.id=#{${_conditionParam_}.id}
......@@ -1054,23 +1056,23 @@
</foreach>
</if>
<if test="conditionParamRef.containsKey('shareCode')">
<if test="conditionParamRef.shareCode != null and conditionParamRef.shareCode != ''">
${_conditionType_} a.shareCode like #{${_conditionParam_}.shareCode}
<if test="conditionParamRef.containsKey('photoPath')">
<if test="conditionParamRef.photoPath != null and conditionParamRef.photoPath != ''">
${_conditionType_} a.photoPath like #{${_conditionParam_}.photoPath}
</if>
<if test="conditionParamRef.shareCode == null">
${_conditionType_} a.shareCode is null
<if test="conditionParamRef.photoPath == null">
${_conditionType_} a.photoPath is null
</if>
</if>
<if test="conditionParamRef.containsKey('shareCodeList') and conditionParamRef.shareCodeList.size() > 0">
${_conditionType_} a.shareCode in
<foreach collection="conditionParamRef.shareCodeList" open="(" close=")" index="index" item="item" separator=",">
<if test="conditionParamRef.containsKey('photoPathList') and conditionParamRef.photoPathList.size() > 0">
${_conditionType_} a.photoPath in
<foreach collection="conditionParamRef.photoPathList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('shareCodeNotList') and conditionParamRef.shareCodeNotList.size() > 0">
${_conditionType_} a.shareCode not in
<foreach collection="conditionParamRef.shareCodeNotList" open="(" close=")" index="index" item="item" separator=",">
<if test="conditionParamRef.containsKey('photoPathNotList') and conditionParamRef.photoPathNotList.size() > 0">
${_conditionType_} a.photoPath not in
<foreach collection="conditionParamRef.photoPathNotList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
......@@ -1300,9 +1302,9 @@
<if test='orderCol.openId != null and "DESC".equalsIgnoreCase(orderCol.openId)'>DESC</if>
,
</if>
<if test="orderCol.containsKey('shareCode')">
a.shareCode
<if test='orderCol.shareCode != null and "DESC".equalsIgnoreCase(orderCol.shareCode)'>DESC</if>
<if test="orderCol.containsKey('photoPath')">
a.photoPath
<if test='orderCol.photoPath != null and "DESC".equalsIgnoreCase(orderCol.photoPath)'>DESC</if>
,
</if>
</trim>
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"mybatis-3-mapper.dtd">
"mybatis-3-mapper.dtd">
<mapper namespace="com.mortals.xhx.module.bussinesscard.dao.ibatis.BussinesscardRecordDaoImpl">
<!-- 字段和属性映射 -->
......@@ -16,6 +16,7 @@
<result property="createTime" column="createTime" />
<result property="updateUserId" column="updateUserId" />
<result property="updateTime" column="updateTime" />
<result property="photoPath" column="photoPath" />
</resultMap>
<!-- 表所有列 -->
......@@ -54,23 +55,26 @@
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('updateTime') or colPickMode == 1 and data.containsKey('updateTime')))">
a.updateTime,
</if>
<if test="(data == null) or (data != null and ( colPickMode == 0 and !data.containsKey('photoPath') or colPickMode == 1 and data.containsKey('photoPath')))">
a.photoPath,
</if>
</trim>
</sql>
<!-- 新增 区分主键自增加还是业务插入 -->
<insert id="insert" parameterType="BussinesscardRecordEntity" useGeneratedKeys="true" keyProperty="id">
insert into mortals_xhx_bussinesscard_record
(bussinesscardId,viewId,viewName,sumViews,remark,viewTime,createUserId,createTime,updateUserId,updateTime)
(bussinesscardId,viewId,viewName,sumViews,remark,viewTime,createUserId,createTime,updateUserId,updateTime,photoPath)
VALUES
(#{bussinesscardId},#{viewId},#{viewName},#{sumViews},#{remark},#{viewTime},#{createUserId},#{createTime},#{updateUserId},#{updateTime})
(#{bussinesscardId},#{viewId},#{viewName},#{sumViews},#{remark},#{viewTime},#{createUserId},#{createTime},#{updateUserId},#{updateTime},#{photoPath})
</insert>
<!-- 批量新增 -->
<insert id="insertBatch" parameterType="paramDto">
insert into mortals_xhx_bussinesscard_record
(bussinesscardId,viewId,viewName,sumViews,remark,viewTime,createUserId,createTime,updateUserId,updateTime)
(bussinesscardId,viewId,viewName,sumViews,remark,viewTime,createUserId,createTime,updateUserId,updateTime,photoPath)
VALUES
<foreach collection="data.dataList" item="item" index="index" separator="," >
(#{item.bussinesscardId},#{item.viewId},#{item.viewName},#{item.sumViews},#{item.remark},#{item.viewTime},#{item.createUserId},#{item.createTime},#{item.updateUserId},#{item.updateTime})
(#{item.bussinesscardId},#{item.viewId},#{item.viewName},#{item.sumViews},#{item.remark},#{item.viewTime},#{item.createUserId},#{item.createTime},#{item.updateUserId},#{item.updateTime},#{item.photoPath})
</foreach>
</insert>
......@@ -125,6 +129,9 @@
<if test="(colPickMode==0 and data.containsKey('updateTime')) or (colPickMode==1 and !data.containsKey('updateTime'))">
a.updateTime=#{data.updateTime},
</if>
<if test="(colPickMode==0 and data.containsKey('photoPath')) or (colPickMode==1 and !data.containsKey('photoPath'))">
a.photoPath=#{data.photoPath},
</if>
</trim>
<trim suffixOverrides="where" suffix="">
where
......@@ -232,6 +239,13 @@
</if>
</foreach>
</trim>
<trim prefix="photoPath=(case" suffix="ELSE photoPath end),">
<foreach collection="data.dataList" item="item" index="index" separator="" >
<if test="(colPickMode==0 and item.containsKey('photoPath')) or (colPickMode==1 and !item.containsKey('photoPath'))">
when a.id=#{item.id} then #{item.photoPath}
</if>
</foreach>
</trim>
</trim>
where id in
<foreach collection="data.dataList" item="item" index="index" open="(" separator="," close=")">
......@@ -601,6 +615,27 @@
<if test="conditionParamRef.containsKey('updateTimeEnd') and conditionParamRef.updateTimeEnd != null and conditionParamRef.updateTimeEnd!=''">
${_conditionType_} a.updateTime <![CDATA[ <= ]]> STR_TO_DATE(left(concat(#{${_conditionParam_}.updateTimeEnd},' 23:59:59'),19),'%Y-%m-%d %k:%i:%s')
</if>
<if test="conditionParamRef.containsKey('photoPath')">
<if test="conditionParamRef.photoPath != null and conditionParamRef.photoPath != ''">
${_conditionType_} a.photoPath like #{${_conditionParam_}.photoPath}
</if>
<if test="conditionParamRef.photoPath == null">
${_conditionType_} a.photoPath is null
</if>
</if>
<if test="conditionParamRef.containsKey('photoPathList') and conditionParamRef.photoPathList.size() > 0">
${_conditionType_} a.photoPath in
<foreach collection="conditionParamRef.photoPathList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
<if test="conditionParamRef.containsKey('photoPathNotList') and conditionParamRef.photoPathNotList.size() > 0">
${_conditionType_} a.photoPath not in
<foreach collection="conditionParamRef.photoPathNotList" open="(" close=")" index="index" item="item" separator=",">
#{item}
</foreach>
</if>
</sql>
<sql id="_orderCols_">
<if test="orderColList != null and !orderColList.isEmpty()">
......@@ -753,6 +788,11 @@
<if test='orderCol.updateTime != null and "DESC".equalsIgnoreCase(orderCol.updateTime)'>DESC</if>
,
</if>
<if test="orderCol.containsKey('photoPath')">
a.photoPath
<if test='orderCol.photoPath != null and "DESC".equalsIgnoreCase(orderCol.photoPath)'>DESC</if>
,
</if>
</trim>
</if>
......
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