feat(auth): 实现用户头像修改次数限制功能

- 在Member实体中添加avatarModifyCount和avatarModifyYear字段用于统计本年头像修改次数
- 在上传头像接口中实现头像修改次数检查,限制每年最多修改2次
- 更新用户信息时增加头像修改次数统计逻辑
- 修改createByMobile方法参数,移除不必要的用户信息参数
- 在MemberDTO中添加avatarModifyRemainCount字段显示剩余修改次数
- 添加数据库表结构变更SQL脚本
- 移除已废弃的手机号注册和微信登录相关代码
- 移除BindMobileDTO中的冗余字段定义
This commit is contained in:
2026-04-09 16:49:43 +08:00
parent be6376f10d
commit dc14a57686
9 changed files with 220 additions and 238 deletions

View File

@@ -44,16 +44,17 @@ public class LoginOrRegisterController extends BaseApiController {
* @param address * @param address
* @return * @return
*/ */
@RequestMapping(value = "/member/register" , method = RequestMethod.POST) // @RequestMapping(value = "/member/register" , method = RequestMethod.POST)
public ResponseDTO register(@RequestParam("mobile")String mobile,@RequestParam("captcha")String captcha, // @Deprecated
@RequestParam(value = "name",required = false)String name, // public ResponseDTO register(@RequestParam("mobile")String mobile,@RequestParam("captcha")String captcha,
@RequestParam(value = "sex",required = false)Integer sex, // @RequestParam(value = "name",required = false)String name,
@RequestParam(value = "age",required = false)Integer age, // @RequestParam(value = "sex",required = false)Integer sex,
@RequestParam(value = "address",required = false)String address // @RequestParam(value = "age",required = false)Integer age,
){ // @RequestParam(value = "address",required = false)String address
MemberTokenDTO memberTokenDTO = loginRegisterService.registerByMobile(mobile, captcha, name, sex, age , address); // ){
return ResponseDTO.ok().addAttribute("authorization",memberTokenDTO); // MemberTokenDTO memberTokenDTO = loginRegisterService.registerByMobile(mobile, captcha, name, sex, age , address);
} // return ResponseDTO.ok().addAttribute("authorization",memberTokenDTO);
// }
/** /**
* 手机号和验证码登录 * 手机号和验证码登录
@@ -72,12 +73,13 @@ public class LoginOrRegisterController extends BaseApiController {
@Deprecated @Deprecated
public ResponseDTO loginWx(@RequestParam("code") String code, @RequestParam("nickname") String nickname, public ResponseDTO loginWx(@RequestParam("code") String code, @RequestParam("nickname") String nickname,
@RequestParam("avatar") String avatar){ @RequestParam("avatar") String avatar){
String openId = wechatService.getXcxOpenId(code); //查询openId: // String openId = wechatService.getXcxOpenId(code); //查询openId:
MemberTokenDTO memberTokenDTO = loginRegisterService.loginWithXcx(openId,nickname,avatar); // MemberTokenDTO memberTokenDTO = loginRegisterService.loginWithXcx(openId,nickname,avatar);
//
// memberTokenDTO为null则跳绑定手机页面 // // memberTokenDTO为null则跳绑定手机页面
return ResponseDTO.ok().addAttribute("authorization",memberTokenDTO) // return ResponseDTO.ok().addAttribute("authorization",memberTokenDTO)
.addAttribute("information",loginRegisterService.info(avatar,nickname,openId)); // .addAttribute("information",loginRegisterService.info(avatar,nickname,openId));
return null;
} }
/** /**

View File

@@ -1,10 +1,13 @@
package com.sv.api.controller; package com.sv.api.controller;
import com.sv.api.service.impl.LoginRegisterServiceImpl; import com.sv.api.service.impl.LoginRegisterServiceImpl;
import com.sv.entity.Member;
import com.sv.service.api.MemberService;
import com.sv.service.common.OSSClientUtil; import com.sv.service.common.OSSClientUtil;
import com.ydd.framework.core.annotation.AccessToken; import com.ydd.framework.core.annotation.AccessToken;
import com.ydd.framework.core.common.dto.ResponseDTO; import com.ydd.framework.core.common.dto.ResponseDTO;
import com.ydd.framework.core.controller.BaseApiController; import com.ydd.framework.core.controller.BaseApiController;
import com.ydd.framework.core.exception.ServiceException;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
@@ -21,11 +24,23 @@ public class UploadController extends BaseApiController {
private OSSClientUtil ossClientUtil; private OSSClientUtil ossClientUtil;
@Resource @Resource
private LoginRegisterServiceImpl loginRegisterService; private LoginRegisterServiceImpl loginRegisterService;
@Resource
private MemberService memberService;
@RequestMapping("/upload/avatar") @RequestMapping("/upload/avatar")
@AccessToken @AccessToken
public ResponseDTO uploadImg(@RequestParam("image") MultipartFile file) throws IOException { public ResponseDTO uploadImg(@RequestParam("image") MultipartFile file) throws IOException {
Integer loginMemberId = getLoginMemberId(); Integer loginMemberId = getLoginMemberId();
Member member = memberService.findById(loginMemberId);
// 检查头像修改次数限制
int currentYear = java.util.Calendar.getInstance().get(java.util.Calendar.YEAR);
Integer modifyCount = member.getAvatarModifyCount();
Integer modifyYear = member.getAvatarModifyYear();
if (modifyYear != null && modifyYear == currentYear) {
if (modifyCount != null && modifyCount >= 2) {
throw new ServiceException("本年头像修改次数已达上限2次");
}
}
String imgUrl = ossClientUtil.uploadImg(file); String imgUrl = ossClientUtil.uploadImg(file);
loginRegisterService.updateInformation(loginMemberId,null,imgUrl); loginRegisterService.updateInformation(loginMemberId,null,imgUrl);
return ResponseDTO.ok(); return ResponseDTO.ok();

View File

@@ -69,37 +69,37 @@ public class LoginRegisterServiceImpl extends BaseServiceImpl {
/** /**
* 手机号注册 * 手机号注册
*/ */
@Transactional // @Transactional
@Deprecated // @Deprecated
public MemberTokenDTO registerByMobile(String mobile,String captcha,String name,Integer sex,Integer age,String address){ // public MemberTokenDTO registerByMobile(String mobile,String captcha,String name,Integer sex,Integer age,String address){
ValidationUtils.assertNotBlank(mobile, "请输入手机号码"); // ValidationUtils.assertNotBlank(mobile, "请输入手机号码");
VenueValidateUtils.assertMobile(mobile); // VenueValidateUtils.assertMobile(mobile);
ValidationUtils.assertNotNull(captcha); // ValidationUtils.assertNotNull(captcha);
//
// 校验验证码是否正确 // // 校验验证码是否正确
captchaCacheService.assertCaptcha(mobile, ApiConstants.REGISTER_SMS_CAPTCHA_PREFIX, captcha); // captchaCacheService.assertCaptcha(mobile, ApiConstants.REGISTER_SMS_CAPTCHA_PREFIX, captcha);
MemberTokenDTO memberTokenDTO = null; // MemberTokenDTO memberTokenDTO = null;
synchronized (mobile){ // synchronized (mobile){
// 根据手机号码创建新用户 // // 根据手机号码创建新用户
Member member = memberService.createByMobile(mobile,name,sex,age,address,PlatformContext.getValue()); // Member member = memberService.createByMobile(mobile,name,sex,age,address,PlatformContext.getValue());
//
// 删除验证码 // // 删除验证码
captchaCacheService.remove(mobile, ApiConstants.REGISTER_SMS_CAPTCHA_PREFIX); // captchaCacheService.remove(mobile, ApiConstants.REGISTER_SMS_CAPTCHA_PREFIX);
//
// 查询认证 // // 查询认证
MemberAuth memberAuth = memberAuthService.findByMobile(mobile); // MemberAuth memberAuth = memberAuthService.findByMobile(mobile);
if (memberAuth == null){ // if (memberAuth == null){
// 创建用户登录认证 // // 创建用户登录认证
memberAuth = memberAuthService.createByMobile(member.getId(),member.getPlatformId(),mobile); // memberAuth = memberAuthService.createByMobile(member.getId(),member.getPlatformId(),mobile);
} // }
//
// 查询访问凭证,并强制更新 // // 查询访问凭证,并强制更新
memberTokenDTO = memberTokenService.findDTOByMemberId(memberAuth.getMemberId(), Boolean.TRUE); // memberTokenDTO = memberTokenService.findDTOByMemberId(memberAuth.getMemberId(), Boolean.TRUE);
} // }
//
//
return memberTokenDTO; // return memberTokenDTO;
} // }
/** /**
@@ -135,22 +135,23 @@ public class LoginRegisterServiceImpl extends BaseServiceImpl {
/** /**
* 微信快捷登录 * 微信快捷登录
*/ */
public MemberTokenDTO loginWithXcx(String openId,String nickname, String avatar){ // @Deprecated
// public MemberTokenDTO loginWithXcx(String openId,String nickname, String avatar){
MemberTokenDTO memberTokenDTO = null; //
synchronized (openId){ // MemberTokenDTO memberTokenDTO = null;
// 判断用户是否注册过,用微信登录过 // synchronized (openId){
MemberAuth memberAuth = memberAuthService.findByAuthId(openId); // // 判断用户是否注册过,用微信登录过
// 登录过,则直接登录成功 // MemberAuth memberAuth = memberAuthService.findByAuthId(openId);
if (memberAuth != null){ // // 登录过,则直接登录成功
// 查询访问凭证,并强制更新 // if (memberAuth != null){
memberTokenDTO = memberTokenService.findDTOByMemberId(memberAuth.getMemberId(), Boolean.TRUE); // // 查询访问凭证,并强制更新
// 修改用户图像 // memberTokenDTO = memberTokenService.findDTOByMemberId(memberAuth.getMemberId(), Boolean.TRUE);
updateInformation(memberAuth.getMemberId(),nickname,avatar); // // 修改用户图像
} // updateInformation(memberAuth.getMemberId(),nickname,avatar);
} // }
return memberTokenDTO; // }
} // return memberTokenDTO;
// }
/** /**
* 已用手机号登录,支付,再跳转微信登录 * 已用手机号登录,支付,再跳转微信登录
@@ -188,7 +189,7 @@ public class LoginRegisterServiceImpl extends BaseServiceImpl {
} }
// 修改用户图像 // 修改用户图像
updateInformation(memberId,nickname,avatar); // updateInformation(memberId,nickname,avatar);
// 查询访问凭证,并强制更新 // 查询访问凭证,并强制更新
memberTokenDTO = memberTokenService.findDTOByMemberId(memberId, Boolean.TRUE); memberTokenDTO = memberTokenService.findDTOByMemberId(memberId, Boolean.TRUE);
@@ -306,31 +307,31 @@ public class LoginRegisterServiceImpl extends BaseServiceImpl {
/** /**
* 更新用户信息 * 更新用户信息
*/ */
@Transactional // @Transactional
public Member updateMember(Member member,BindMobileDTO bindMobileDTO){ // public Member updateMember(Member member,BindMobileDTO bindMobileDTO){
member.setAvatar(bindMobileDTO.getAvatar()); // member.setAvatar(bindMobileDTO.getAvatar());
member.setNickname(bindMobileDTO.getNickname()); // member.setNickname(bindMobileDTO.getNickname());
member.setMobile(bindMobileDTO.getMobile()); // member.setMobile(bindMobileDTO.getMobile());
if (bindMobileDTO.getName() != null){ // if (bindMobileDTO.getName() != null){
member.setName(bindMobileDTO.getName()); // member.setName(bindMobileDTO.getName());
} // }
if (bindMobileDTO.getSex() != null){ // if (bindMobileDTO.getSex() != null){
member.setSex(bindMobileDTO.getSex()); // member.setSex(bindMobileDTO.getSex());
} // }
if (bindMobileDTO.getAge() != null){ // if (bindMobileDTO.getAge() != null){
member.setAge(bindMobileDTO.getAge()); // member.setAge(bindMobileDTO.getAge());
} // }
if (bindMobileDTO.getAddress() != null){ // if (bindMobileDTO.getAddress() != null){
member.setAddress(bindMobileDTO.getAddress()); // member.setAddress(bindMobileDTO.getAddress());
} // }
try { // try {
// member.setAvatar(updateWxImgToOss(bindMobileDTO.getAvatar())); //// member.setAvatar(updateWxImgToOss(bindMobileDTO.getAvatar()));
} catch (Exception e) { // } catch (Exception e) {
e.printStackTrace(); // e.printStackTrace();
} // }
memberService.update(member); // memberService.update(member);
return member; // return member;
} // }
/** /**
* 退出登录 * 退出登录
@@ -363,10 +364,7 @@ public class LoginRegisterServiceImpl extends BaseServiceImpl {
synchronized (openId.intern()){ synchronized (openId.intern()){
Member member = memberService.findByMobile(mobile); Member member = memberService.findByMobile(mobile);
if (member == null) { if (member == null) {
member = memberService.createByMobile(mobile, bindMobileDTO.getNickname(), member = memberService.createByMobile(mobile, value);
bindMobileDTO.getSex(), bindMobileDTO.getAge(), bindMobileDTO.getAddress(), value);
updateInformation(member.getId(), bindMobileDTO.getNickname(), bindMobileDTO.getAvatar());
MemberAuth memberAuth = memberAuthService.findByMobile(mobile); MemberAuth memberAuth = memberAuthService.findByMobile(mobile);
if (memberAuth == null) { if (memberAuth == null) {
memberAuth = memberAuthService.createByMobileByOpenId(member.getId(), member.getPlatformId(), mobile, openId); memberAuth = memberAuthService.createByMobileByOpenId(member.getId(), member.getPlatformId(), mobile, openId);
@@ -389,7 +387,6 @@ public class LoginRegisterServiceImpl extends BaseServiceImpl {
} else { } else {
throw new ServiceException("该手机号已被其他微信账号绑定"); throw new ServiceException("该手机号已被其他微信账号绑定");
} }
updateInformation(member.getId(), bindMobileDTO.getNickname(), bindMobileDTO.getAvatar());
} }
} }
return memberTokenDTO; return memberTokenDTO;
@@ -407,12 +404,22 @@ public class LoginRegisterServiceImpl extends BaseServiceImpl {
if (nickname != null){ if (nickname != null){
member.setNickname(nickname); member.setNickname(nickname);
} }
member.setAvatar(avatar);
try { // 如果更新了头像,增加修改次数
// member.setAvatar(updateWxImgToOss(avatar)); if (avatar != null && !avatar.equals(member.getAvatar())) {
} catch (Exception e) { int currentYear = java.util.Calendar.getInstance().get(java.util.Calendar.YEAR);
e.printStackTrace(); Integer modifyCount = member.getAvatarModifyCount();
Integer modifyYear = member.getAvatarModifyYear();
if (modifyYear == null || modifyYear != currentYear) {
member.setAvatarModifyCount(1);
member.setAvatarModifyYear(currentYear);
} else {
member.setAvatarModifyCount((modifyCount == null ? 0 : modifyCount) + 1);
}
} }
member.setAvatar(avatar);
memberService.update(member); memberService.update(member);
} }
} }

View File

@@ -10,128 +10,11 @@ public class BindMobileDTO implements Serializable {
*/ */
private String loginCode; private String loginCode;
/**
* 小程序openId
*/
private String openId;
/** /**
* 微信手机号 code (wx.getPhoneNumber获取) * 微信手机号 code (wx.getPhoneNumber获取)
*/ */
private String phoneCode; private String phoneCode;
/**
* 微信昵称
*/
private String nickname;
/**
* 微信图像
*/
private String avatar;
/**
* 手机号码 (从phoneCode解析得到)
*/
private String mobile;
/**
* 验证码 (不再使用)
*/
private String captcha;
/**
* 真实姓名
*/
private String name;
/**
* 性别
*/
private Integer sex;
/**
* 年龄
*/
private Integer age;
/**
* 地址
*/
private String address;
public String getOpenId() {
return openId;
}
public void setOpenId(String openId) {
this.openId = openId;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public String getAvatar() {
return avatar;
}
public void setAvatar(String avatar) {
this.avatar = avatar;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getCaptcha() {
return captcha;
}
public void setCaptcha(String captcha) {
this.captcha = captcha;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getSex() {
return sex;
}
public void setSex(Integer sex) {
this.sex = sex;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getLoginCode() { public String getLoginCode() {
return loginCode; return loginCode;
} }
@@ -147,4 +30,4 @@ public class BindMobileDTO implements Serializable {
public void setPhoneCode(String phoneCode) { public void setPhoneCode(String phoneCode) {
this.phoneCode = phoneCode; this.phoneCode = phoneCode;
} }
} }

View File

@@ -102,6 +102,11 @@ public class MemberDTO implements Serializable {
*/ */
private Integer deleted; private Integer deleted;
/**
* 本年头像剩余修改次数
*/
private Integer avatarModifyRemainCount;
/** /**
@@ -430,4 +435,12 @@ public class MemberDTO implements Serializable {
return deleted; return deleted;
} }
public Integer getAvatarModifyRemainCount() {
return avatarModifyRemainCount;
}
public void setAvatarModifyRemainCount(Integer avatarModifyRemainCount) {
this.avatarModifyRemainCount = avatarModifyRemainCount;
}
} }

View File

@@ -117,6 +117,18 @@ public class Member implements Serializable {
@JsonIgnore @JsonIgnore
private Integer deleted; private Integer deleted;
/**
* 头像修改次数(本年)
*/
@JsonIgnore
private Integer avatarModifyCount;
/**
* 头像修改统计年份
*/
@JsonIgnore
private Integer avatarModifyYear;
/** /**
@@ -452,4 +464,20 @@ public class Member implements Serializable {
public void setBanType(Integer banType) { public void setBanType(Integer banType) {
this.banType = banType; this.banType = banType;
} }
public Integer getAvatarModifyCount() {
return avatarModifyCount;
}
public void setAvatarModifyCount(Integer avatarModifyCount) {
this.avatarModifyCount = avatarModifyCount;
}
public Integer getAvatarModifyYear() {
return avatarModifyYear;
}
public void setAvatarModifyYear(Integer avatarModifyYear) {
this.avatarModifyYear = avatarModifyYear;
}
} }

4
other/sql/202604.sql Normal file
View File

@@ -0,0 +1,4 @@
-- 2026年4月 - 添加用户头像修改限制字段
ALTER TABLE sv_member
ADD COLUMN avatar_modify_count INT DEFAULT 0 COMMENT '本年头像修改次数',
ADD COLUMN avatar_modify_year INT DEFAULT NULL COMMENT '头像修改统计年份';

View File

@@ -211,7 +211,7 @@ public class MemberService extends BaseServiceImpl {
* @return 新用户 * @return 新用户
*/ */
@Transactional @Transactional
public Member createByMobile(String mobile, String name, Integer sex, Integer age, String address, Integer platformId) { public Member createByMobile(String mobile, Integer platformId) {
// 参数校验 // 参数校验
ValidationUtils.assertNotNull(mobile); ValidationUtils.assertNotNull(mobile);
VenueValidateUtils.assertMobile(mobile); VenueValidateUtils.assertMobile(mobile);
@@ -230,25 +230,12 @@ public class MemberService extends BaseServiceImpl {
} }
member.setInviteCode(inviteCode); member.setInviteCode(inviteCode);
member.setMobile(mobile); member.setMobile(mobile);
if (name != null) {
if (name.length() > 8) {
throw new ServiceException("姓名不能超过8位");
}
member.setName(name);
}
if (sex != null) {
member.setSex(sex);
}
if (age != null) {
if (age.intValue() < 10 || age.intValue() > 100) {
throw new ServiceException("年龄在10-100之间");
}
member.setAge(age);
}
if (address != null) {
member.setAddress(address);
}
member.setPlatformId(platformId); member.setPlatformId(platformId);
// 初始化头像修改次数
member.setAvatarModifyCount(0);
member.setAvatarModifyYear(java.util.Calendar.getInstance().get(java.util.Calendar.YEAR));
memberMapper.insert(member); memberMapper.insert(member);
return member; return member;
} }
@@ -375,6 +362,17 @@ public class MemberService extends BaseServiceImpl {
memberDTO.setSex(member.getSex()); memberDTO.setSex(member.getSex());
memberDTO.setAge(member.getAge() == null ? null : member.getAge()); memberDTO.setAge(member.getAge() == null ? null : member.getAge());
memberDTO.setAddress(member.getAddress() == null ? "" : member.getAddress()); memberDTO.setAddress(member.getAddress() == null ? "" : member.getAddress());
// 计算本年头像剩余修改次数
int currentYear = java.util.Calendar.getInstance().get(java.util.Calendar.YEAR);
Integer modifyCount = member.getAvatarModifyCount();
Integer modifyYear = member.getAvatarModifyYear();
if (modifyYear == null || modifyYear != currentYear) {
memberDTO.setAvatarModifyRemainCount(2);
} else {
memberDTO.setAvatarModifyRemainCount(Math.max(0, 2 - (modifyCount == null ? 0 : modifyCount)));
}
return memberDTO; return memberDTO;
} }
@@ -461,6 +459,7 @@ public class MemberService extends BaseServiceImpl {
* @param faceUrl * @param faceUrl
* @param memberId * @param memberId
*/ */
@Deprecated
public void setMemberFaceInfo(Integer subjectId, String faceUrl, Integer memberId, Integer platformId) { public void setMemberFaceInfo(Integer subjectId, String faceUrl, Integer memberId, Integer platformId) {
MemberFaceInfo memberFaceInfo = memberMapper.findMemberFaceInfo(memberId); MemberFaceInfo memberFaceInfo = memberMapper.findMemberFaceInfo(memberId);
if (memberFaceInfo == null) { if (memberFaceInfo == null) {
@@ -485,6 +484,7 @@ public class MemberService extends BaseServiceImpl {
* @param file * @param file
*/ */
@Transactional @Transactional
@Deprecated
public void setMemberFaceInfo(Integer memberId, MultipartFile file, Integer platformId) { public void setMemberFaceInfo(Integer memberId, MultipartFile file, Integer platformId) {
Date now = new Date(); Date now = new Date();
MemberFaceInfo memberFaceInfo = memberMapper.findMemberFaceInfo(memberId); MemberFaceInfo memberFaceInfo = memberMapper.findMemberFaceInfo(memberId);

View File

@@ -21,6 +21,8 @@
<result column="created_time" property="createdTime" jdbcType="TIMESTAMP" /> <result column="created_time" property="createdTime" jdbcType="TIMESTAMP" />
<result column="modified_time" property="modifiedTime" jdbcType="TIMESTAMP" /> <result column="modified_time" property="modifiedTime" jdbcType="TIMESTAMP" />
<result column="deleted" property="deleted" jdbcType="TINYINT" /> <result column="deleted" property="deleted" jdbcType="TINYINT" />
<result column="avatar_modify_count" property="avatarModifyCount" jdbcType="INTEGER" />
<result column="avatar_modify_year" property="avatarModifyYear" jdbcType="INTEGER" />
<result column="face_url" property="faceUrl" jdbcType="VARCHAR" /> <result column="face_url" property="faceUrl" jdbcType="VARCHAR" />
</resultMap> </resultMap>
@@ -42,6 +44,8 @@
<result column="created_time" property="createdTime" jdbcType="TIMESTAMP" /> <result column="created_time" property="createdTime" jdbcType="TIMESTAMP" />
<result column="modified_time" property="modifiedTime" jdbcType="TIMESTAMP" /> <result column="modified_time" property="modifiedTime" jdbcType="TIMESTAMP" />
<result column="deleted" property="deleted" jdbcType="TINYINT" /> <result column="deleted" property="deleted" jdbcType="TINYINT" />
<result column="avatar_modify_count" property="avatarModifyCount" jdbcType="INTEGER" />
<result column="avatar_modify_year" property="avatarModifyYear" jdbcType="INTEGER" />
</resultMap> </resultMap>
<resultMap id="MemberFaceInfoMap" type="com.sv.entity.MemberFaceInfo"> <resultMap id="MemberFaceInfoMap" type="com.sv.entity.MemberFaceInfo">
@@ -79,7 +83,9 @@
platform_id, platform_id,
created_time, created_time,
modified_time, modified_time,
deleted deleted,
avatar_modify_count,
avatar_modify_year
</sql> </sql>
<!-- 字段值 --> <!-- 字段值 -->
@@ -100,7 +106,9 @@
#{platformId, jdbcType=INTEGER}, #{platformId, jdbcType=INTEGER},
#{createdTime, jdbcType=TIMESTAMP}, #{createdTime, jdbcType=TIMESTAMP},
#{modifiedTime, jdbcType=TIMESTAMP}, #{modifiedTime, jdbcType=TIMESTAMP},
#{deleted, jdbcType=TINYINT} #{deleted, jdbcType=TINYINT},
#{avatarModifyCount, jdbcType=INTEGER},
#{avatarModifyYear, jdbcType=INTEGER}
</sql> </sql>
<!-- 查询全部记录 --> <!-- 查询全部记录 -->
@@ -123,6 +131,8 @@
sm.created_time, sm.created_time,
sm.modified_time, sm.modified_time,
sm.deleted, sm.deleted,
sm.avatar_modify_count,
sm.avatar_modify_year,
smfi.face_url smfi.face_url
FROM FROM
sv_member AS sm sv_member AS sm
@@ -187,6 +197,12 @@
<if test="deleted != null"> <if test="deleted != null">
deleted, deleted,
</if> </if>
<if test="avatarModifyCount != null">
avatar_modify_count,
</if>
<if test="avatarModifyYear != null">
avatar_modify_year,
</if>
</trim> </trim>
<trim prefix="values (" suffix=")" suffixOverrides=","> <trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null"> <if test="id != null">
@@ -240,6 +256,12 @@
<if test="deleted != null"> <if test="deleted != null">
#{deleted}, #{deleted},
</if> </if>
<if test="avatarModifyCount != null">
#{avatarModifyCount},
</if>
<if test="avatarModifyYear != null">
#{avatarModifyYear},
</if>
</trim> </trim>
</insert> </insert>
@@ -317,6 +339,12 @@
<if test="deleted != null"> <if test="deleted != null">
deleted = #{deleted}, deleted = #{deleted},
</if> </if>
<if test="avatarModifyCount != null">
avatar_modify_count = #{avatarModifyCount},
</if>
<if test="avatarModifyYear != null">
avatar_modify_year = #{avatarModifyYear},
</if>
</set> </set>
WHERE id = #{id} WHERE id = #{id}
</update> </update>
@@ -345,6 +373,8 @@
sm.created_time, sm.created_time,
sm.modified_time, sm.modified_time,
sm.deleted, sm.deleted,
sm.avatar_modify_count,
sm.avatar_modify_year,
smfi.face_url smfi.face_url
FROM FROM
sv_member AS sm sv_member AS sm