diff --git a/sql/update-sql/update-202411271637.sql b/sql/update-sql/update-202411271637.sql new file mode 100644 index 0000000..5a5e335 --- /dev/null +++ b/sql/update-sql/update-202411271637.sql @@ -0,0 +1,4 @@ +ALTER TABLE `wfc-cloud`.`sys_user` + ADD COLUMN `full_name` varchar(64) NULL COMMENT '用户姓名' AFTER `nick_name`, + ADD COLUMN `age` int(11) NULL COMMENT '年龄' AFTER `password`, + ADD COLUMN `address` varchar(255) NULL COMMENT '地址' AFTER `age`; diff --git a/wfc-api/wfc-api-system/src/main/java/org/wfc/system/api/domain/SysUser.java b/wfc-api/wfc-api-system/src/main/java/org/wfc/system/api/domain/SysUser.java index 018687e..dfea6c4 100644 --- a/wfc-api/wfc-api-system/src/main/java/org/wfc/system/api/domain/SysUser.java +++ b/wfc-api/wfc-api-system/src/main/java/org/wfc/system/api/domain/SysUser.java @@ -1,8 +1,5 @@ package org.wfc.system.api.domain; -import java.util.Date; -import java.util.List; -import javax.validation.constraints.*; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import org.wfc.common.core.annotation.Excel; @@ -12,6 +9,12 @@ import org.wfc.common.core.annotation.Excels; import org.wfc.common.core.web.domain.BaseEntity; import org.wfc.common.core.xss.Xss; +import javax.validation.constraints.Email; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.Size; +import java.util.Date; +import java.util.List; + /** * 用户对象 sys_user * @@ -55,6 +58,15 @@ public class SysUser extends BaseEntity /** 密码 */ private String password; + /** 用户姓名 */ + private String fullName; + + /** 年龄 */ + private Integer age; + + /** 地址 */ + private String address; + /** 帐号状态(0正常 1停用) */ @Excel(name = "帐号状态", readConverterExp = "0=正常,1=停用") private String status; @@ -99,6 +111,30 @@ public class SysUser extends BaseEntity this.userId = userId; } + public String getFullName() { + return fullName; + } + + public void setFullName(String fullName) { + this.fullName = fullName; + } + + 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 Long getUserId() { return userId; diff --git a/wfc-auth/src/main/java/org/wfc/auth/controller/TokenController.java b/wfc-auth/src/main/java/org/wfc/auth/controller/TokenController.java index 32b9447..97fe844 100644 --- a/wfc-auth/src/main/java/org/wfc/auth/controller/TokenController.java +++ b/wfc-auth/src/main/java/org/wfc/auth/controller/TokenController.java @@ -21,6 +21,8 @@ import org.wfc.user.api.domain.UUser; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequest; + /** * token 控制 * @@ -88,7 +90,7 @@ public class TokenController public R register(@RequestBody RegisterBody registerBody) { // 用户注册 - sysLoginService.register(registerBody.getUsername(), registerBody.getPassword()); + sysLoginService.register(registerBody); return R.ok(); } } diff --git a/wfc-auth/src/main/java/org/wfc/auth/service/SysLoginService.java b/wfc-auth/src/main/java/org/wfc/auth/service/SysLoginService.java index 3c8a065..3254fc2 100644 --- a/wfc-auth/src/main/java/org/wfc/auth/service/SysLoginService.java +++ b/wfc-auth/src/main/java/org/wfc/auth/service/SysLoginService.java @@ -1,11 +1,14 @@ package org.wfc.auth.service; +import cn.hutool.core.util.StrUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.wfc.common.core.constant.CacheConstants; import org.wfc.common.core.constant.Constants; +import org.wfc.common.core.constant.GlobalConstants; import org.wfc.common.core.constant.SecurityConstants; import org.wfc.common.core.constant.UserConstants; +import org.wfc.common.core.domain.LoginUser; import org.wfc.common.core.domain.R; import org.wfc.common.core.enums.UserStatus; import org.wfc.common.core.exception.ServiceException; @@ -13,12 +16,11 @@ import org.wfc.common.core.text.Convert; import org.wfc.common.core.utils.DateUtils; import org.wfc.common.core.utils.StringUtils; import org.wfc.common.core.utils.ip.IpUtils; +import org.wfc.common.core.web.form.RegisterBody; import org.wfc.common.redis.service.RedisService; import org.wfc.common.security.utils.SecurityUtils; import org.wfc.system.api.RemoteUserService; import org.wfc.system.api.domain.SysUser; -import org.wfc.common.core.domain.LoginUser; -import org.wfc.user.api.domain.UUser; /** * 登录校验方法 @@ -128,8 +130,10 @@ public class SysLoginService /** * 注册 */ - public void register(String username, String password) + public void register(RegisterBody registerBody) { + String username = registerBody.getUsername(); + String password = registerBody.getPassword(); // 用户名或密码为空 错误 if (StringUtils.isAnyBlank(username, password)) { @@ -151,12 +155,22 @@ public class SysLoginService sysUser.setUserName(username); sysUser.setNickName(username); sysUser.setPassword(SecurityUtils.encryptPassword(password)); + sysUser.setAge(registerBody.getAge()); + sysUser.setAddress(registerBody.getAddress()); + sysUser.setEmail(registerBody.getEmail()); + sysUser.setFullName(registerBody.getFullName()); + sysUser.setSex(registerBody.getSex()); + sysUser.setPhonenumber(registerBody.getPhonenumber()); R registerResult = remoteUserService.registerUserInfo(sysUser, SecurityConstants.INNER); if (R.FAIL == registerResult.getCode()) { throw new ServiceException(registerResult.getMsg()); } + // 注册成功删除redis + if (StrUtil.isNotBlank(registerBody.getEmail())) { + redisService.deleteObject(GlobalConstants.CAPTCHA_CODE_KEY + registerBody.getEmail()); + } recordLogService.recordLogininfor(username, Constants.REGISTER, "注册成功"); } } diff --git a/wfc-common/wfc-common-core/src/main/java/org/wfc/common/core/constant/Constants.java b/wfc-common/wfc-common-core/src/main/java/org/wfc/common/core/constant/Constants.java index c88d799..7a94ed0 100644 --- a/wfc-common/wfc-common-core/src/main/java/org/wfc/common/core/constant/Constants.java +++ b/wfc-common/wfc-common-core/src/main/java/org/wfc/common/core/constant/Constants.java @@ -112,6 +112,11 @@ public class Constants */ public static final long CAPTCHA_EXPIRATION = 2; + /** + * 邮箱验证码有效期(分钟) + */ + public static final long MAIL_CAPTCHA_EXPIRATION = 30; + /** * 资源映射路径 前缀 */ diff --git a/wfc-common/wfc-common-core/src/main/java/org/wfc/common/core/web/form/RegisterBody.java b/wfc-common/wfc-common-core/src/main/java/org/wfc/common/core/web/form/RegisterBody.java index cfc0a2e..6675a3e 100644 --- a/wfc-common/wfc-common-core/src/main/java/org/wfc/common/core/web/form/RegisterBody.java +++ b/wfc-common/wfc-common-core/src/main/java/org/wfc/common/core/web/form/RegisterBody.java @@ -1,11 +1,43 @@ package org.wfc.common.core.web.form; +import lombok.Data; + /** * 用户注册对象 - * + * * @author wfc */ -public class RegisterBody extends LoginBody -{ +@Data +public class RegisterBody extends LoginBody { + + /** + * 用户邮箱 + */ + private String email; + + /** + * 用户姓名 + */ + private String fullName; + + /** + * 年龄 + */ + private Integer age; + + /** + * 地址 + */ + private String address; + + /** + * 性别 + */ + private String sex; + + /** + * 性别 + */ + private String phonenumber; } diff --git a/wfc-common/wfc-common-core/src/main/resources/i18n/messages_en_US.properties b/wfc-common/wfc-common-core/src/main/resources/i18n/messages_en_US.properties index c4cf251..bdc0879 100644 --- a/wfc-common/wfc-common-core/src/main/resources/i18n/messages_en_US.properties +++ b/wfc-common/wfc-common-core/src/main/resources/i18n/messages_en_US.properties @@ -25,7 +25,9 @@ user.phonenumber.not.blank=Phone number cannot be blank user.mobile.phone.number.not.valid=Phone number format error user.login.success=Login successful user.register.success=Register successful -user.register.save.error=Failed to save user {0}, The registered account already exists +user.register.save.error=The registered username already exists +user.register.phone.save.error=The registered phone already exists +user.register.email.save.error=The registered email already exists user.register.error=Register failed, please contact system administrator user.notfound=Please login again user.forcelogout=The administrator is forced to exit,please login again diff --git a/wfc-common/wfc-common-core/src/main/resources/i18n/messages_zh_CN.properties b/wfc-common/wfc-common-core/src/main/resources/i18n/messages_zh_CN.properties index 3fc7074..9a472ca 100644 --- a/wfc-common/wfc-common-core/src/main/resources/i18n/messages_zh_CN.properties +++ b/wfc-common/wfc-common-core/src/main/resources/i18n/messages_zh_CN.properties @@ -25,7 +25,9 @@ user.phonenumber.not.blank=用户手机号不能为空 user.mobile.phone.number.not.valid=手机号格式错误 user.login.success=登录成功 user.register.success=注册成功 -user.register.save.error=保存用户 {0} 失败,注册账号已存在 +user.register.save.error=注册账号已存在 +user.register.phone.save.error=注册手机已存在 +user.register.email.save.error=注册邮箱已存在 user.register.error=注册失败,请联系系统管理人员 user.notfound=请重新登录 user.forcelogout=管理员强制退出,请重新登录 diff --git a/wfc-gateway/src/main/java/org/wfc/gateway/config/SpringDocConfig.java b/wfc-gateway/src/main/java/org/wfc/gateway/config/SpringDocConfig.java index a393934..fd3f843 100644 --- a/wfc-gateway/src/main/java/org/wfc/gateway/config/SpringDocConfig.java +++ b/wfc-gateway/src/main/java/org/wfc/gateway/config/SpringDocConfig.java @@ -52,7 +52,7 @@ class SwaggerDocRegister extends Subscriber @Autowired private DiscoveryClient discoveryClient; - private final static String[] EXCLUDE_ROUTES = new String[] { "wfc-gateway", "wfc-auth", "wfc-file", "wfc-monitor" }; + private final static String[] EXCLUDE_ROUTES = new String[] { "wfc-gateway", "wfc-file", "wfc-monitor" }; public SwaggerDocRegister(SwaggerUiConfigProperties swaggerUiConfigProperties, DiscoveryClient discoveryClient) { diff --git a/wfc-gateway/src/main/java/org/wfc/gateway/config/properties/CaptchaProperties.java b/wfc-gateway/src/main/java/org/wfc/gateway/config/properties/CaptchaProperties.java index 9658991..1dbc0e5 100644 --- a/wfc-gateway/src/main/java/org/wfc/gateway/config/properties/CaptchaProperties.java +++ b/wfc-gateway/src/main/java/org/wfc/gateway/config/properties/CaptchaProperties.java @@ -15,10 +15,15 @@ import org.springframework.context.annotation.Configuration; public class CaptchaProperties { /** - * 验证码开关 + * 图片验证码开关 */ private Boolean enabled; + /** + * 邮箱验证码开关 + */ + private Boolean mailEnabled; + /** * 验证码类型(math 数组计算 char 字符) */ @@ -43,4 +48,12 @@ public class CaptchaProperties { this.type = type; } + + public Boolean getMailEnabled() { + return mailEnabled; + } + + public void setMailEnabled(Boolean mailEnabled) { + this.mailEnabled = mailEnabled; + } } diff --git a/wfc-gateway/src/main/java/org/wfc/gateway/filter/ValidateCodeFilter.java b/wfc-gateway/src/main/java/org/wfc/gateway/filter/ValidateCodeFilter.java index 5decc69..dba1339 100644 --- a/wfc-gateway/src/main/java/org/wfc/gateway/filter/ValidateCodeFilter.java +++ b/wfc-gateway/src/main/java/org/wfc/gateway/filter/ValidateCodeFilter.java @@ -1,8 +1,7 @@ package org.wfc.gateway.filter; -import java.nio.CharBuffer; -import java.nio.charset.StandardCharsets; -import java.util.concurrent.atomic.AtomicReference; +import com.alibaba.fastjson2.JSON; +import com.alibaba.fastjson2.JSONObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.gateway.filter.GatewayFilter; import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory; @@ -10,14 +9,16 @@ import org.springframework.core.io.buffer.DataBuffer; import org.springframework.core.io.buffer.DataBufferUtils; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.stereotype.Component; -import com.alibaba.fastjson2.JSON; -import com.alibaba.fastjson2.JSONObject; import org.wfc.common.core.utils.ServletUtils; import org.wfc.common.core.utils.StringUtils; import org.wfc.gateway.config.properties.CaptchaProperties; import org.wfc.gateway.service.ValidateCodeService; import reactor.core.publisher.Flux; +import java.nio.CharBuffer; +import java.nio.charset.StandardCharsets; +import java.util.concurrent.atomic.AtomicReference; + /** * 验证码过滤器 * @@ -26,7 +27,8 @@ import reactor.core.publisher.Flux; @Component public class ValidateCodeFilter extends AbstractGatewayFilterFactory { - private final static String[] VALIDATE_URL = new String[] { "/auth/login", "/auth/register" }; + private final static String[] VALIDATE_URL = new String[] { "/auth/login" }; + private final static String[] MAIL_VALIDATE_URL = new String[] { "/auth/register" }; @Autowired private ValidateCodeService validateCodeService; @@ -38,14 +40,18 @@ public class ValidateCodeFilter extends AbstractGatewayFilterFactory private static final String UUID = "uuid"; + private static final String EMAIL = "email"; + @Override public GatewayFilter apply(Object config) { return (exchange, chain) -> { ServerHttpRequest request = exchange.getRequest(); - // 非登录/注册请求或验证码关闭,不处理 - if (!StringUtils.equalsAnyIgnoreCase(request.getURI().getPath(), VALIDATE_URL) || !captchaProperties.getEnabled()) + // 非登录请求且验证码启用,非注册请求且邮箱验证码启用, 不处理 + boolean enabledLoginCaptcha = StringUtils.equalsAnyIgnoreCase(request.getURI().getPath(), VALIDATE_URL) && captchaProperties.getEnabled(); + boolean enabledRegisterCaptcha = StringUtils.equalsAnyIgnoreCase(request.getURI().getPath(), MAIL_VALIDATE_URL) && captchaProperties.getMailEnabled(); + if (!enabledLoginCaptcha && !enabledRegisterCaptcha) { return chain.filter(exchange); } @@ -54,7 +60,14 @@ public class ValidateCodeFilter extends AbstractGatewayFilterFactory { String rspStr = resolveBodyFromRequest(request); JSONObject obj = JSON.parseObject(rspStr); - validateCodeService.checkCaptcha(obj.getString(CODE), obj.getString(UUID)); + // 图片验证码启用 + if (enabledLoginCaptcha) { + validateCodeService.checkCaptcha(obj.getString(CODE), obj.getString(UUID), true); + } + // 邮箱验证码启用 + if (enabledRegisterCaptcha) { + validateCodeService.checkCaptcha(obj.getString(CODE), obj.getString(EMAIL), false); + } } catch (Exception e) { diff --git a/wfc-gateway/src/main/java/org/wfc/gateway/service/ValidateCodeService.java b/wfc-gateway/src/main/java/org/wfc/gateway/service/ValidateCodeService.java index 729d8b5..4829294 100644 --- a/wfc-gateway/src/main/java/org/wfc/gateway/service/ValidateCodeService.java +++ b/wfc-gateway/src/main/java/org/wfc/gateway/service/ValidateCodeService.java @@ -1,9 +1,10 @@ package org.wfc.gateway.service; -import java.io.IOException; import org.wfc.common.core.exception.CaptchaException; import org.wfc.common.core.web.domain.AjaxResult; +import java.io.IOException; + /** * 验证码处理 * @@ -19,5 +20,5 @@ public interface ValidateCodeService /** * 校验验证码 */ - public void checkCaptcha(String key, String value) throws CaptchaException; + public void checkCaptcha(String key, String value, boolean isPic) throws CaptchaException; } diff --git a/wfc-gateway/src/main/java/org/wfc/gateway/service/impl/ValidateCodeServiceImpl.java b/wfc-gateway/src/main/java/org/wfc/gateway/service/impl/ValidateCodeServiceImpl.java index dc03bcd..2652312 100644 --- a/wfc-gateway/src/main/java/org/wfc/gateway/service/impl/ValidateCodeServiceImpl.java +++ b/wfc-gateway/src/main/java/org/wfc/gateway/service/impl/ValidateCodeServiceImpl.java @@ -5,8 +5,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.util.FastByteArrayOutputStream; -import org.wfc.common.core.constant.CacheConstants; import org.wfc.common.core.constant.Constants; +import org.wfc.common.core.constant.GlobalConstants; import org.wfc.common.core.exception.CaptchaException; import org.wfc.common.core.utils.StringUtils; import org.wfc.common.core.utils.sign.Base64; @@ -63,7 +63,7 @@ public class ValidateCodeServiceImpl implements ValidateCodeService // 保存验证码信息 String uuid = IdUtils.simpleUUID(); - String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + uuid; + String verifyKey = GlobalConstants.CAPTCHA_CODE_KEY + uuid; String capStr = null, code = null; BufferedImage image = null; @@ -109,19 +109,21 @@ public class ValidateCodeServiceImpl implements ValidateCodeService * 校验验证码 */ @Override - public void checkCaptcha(String code, String uuid) throws CaptchaException + public void checkCaptcha(String code, String uuid, boolean isPic) throws CaptchaException { if (StringUtils.isEmpty(code)) { throw new CaptchaException("user.jcaptcha.not.blank"); } - String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + StringUtils.nvl(uuid, ""); + String verifyKey = GlobalConstants.CAPTCHA_CODE_KEY + StringUtils.nvl(uuid, ""); String captcha = redisService.getCacheObject(verifyKey); if (captcha == null) { throw new CaptchaException(); } - redisService.deleteObject(verifyKey); + if (isPic) { + redisService.deleteObject(verifyKey); + } if (!code.equalsIgnoreCase(captcha)) { throw new CaptchaException(); diff --git a/wfc-modules/wfc-system/src/main/java/org/wfc/system/controller/SysEmailController.java b/wfc-modules/wfc-system/src/main/java/org/wfc/system/controller/SysEmailController.java index 5113113..2f89f0c 100644 --- a/wfc-modules/wfc-system/src/main/java/org/wfc/system/controller/SysEmailController.java +++ b/wfc-modules/wfc-system/src/main/java/org/wfc/system/controller/SysEmailController.java @@ -47,9 +47,9 @@ public class SysEmailController extends BaseController { } String key = GlobalConstants.CAPTCHA_CODE_KEY + email; String code = RandomUtil.randomNumbers(4); - redisService.setCacheObject(key, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES); + redisService.setCacheObject(key, code, Constants.MAIL_CAPTCHA_EXPIRATION, TimeUnit.MINUTES); try { - MailUtils.sendText(email, "登录验证码", "您本次验证码为:" + code + ",有效性为" + Constants.CAPTCHA_EXPIRATION + "分钟,请尽快填写。"); + MailUtils.sendText(email, "Registration verification code", "Your verification code is: " + code + ", The validity period is " + Constants.MAIL_CAPTCHA_EXPIRATION + " minutes, please fill in as soon as possible."); } catch (Exception e) { log.error("验证码短信发送异常 => {}", e.getMessage()); return R.fail(e.getMessage()); diff --git a/wfc-modules/wfc-system/src/main/java/org/wfc/system/controller/SysUserController.java b/wfc-modules/wfc-system/src/main/java/org/wfc/system/controller/SysUserController.java index 3af516d..69da842 100644 --- a/wfc-modules/wfc-system/src/main/java/org/wfc/system/controller/SysUserController.java +++ b/wfc-modules/wfc-system/src/main/java/org/wfc/system/controller/SysUserController.java @@ -1,6 +1,7 @@ package org.wfc.system.controller; import org.apache.commons.lang3.ArrayUtils; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.MessageSource; import org.springframework.validation.annotation.Validated; @@ -30,6 +31,7 @@ import org.wfc.system.api.domain.SysDept; import org.wfc.system.api.domain.SysRole; import org.wfc.system.api.domain.SysUser; import org.wfc.common.core.domain.LoginUser; +import org.wfc.system.domain.query.UserRepeatQuery; import org.wfc.system.service.ISysConfigService; import org.wfc.system.service.ISysDeptService; import org.wfc.system.service.ISysPermissionService; @@ -79,12 +81,24 @@ public class SysUserController extends BaseController private MessageSource messageSource; /** - * 获取用户列表 + * 测试国际化 */ @GetMapping("/test") public String test() { - return MessageUtils.message("user.jcaptcha.error"); + return MessageUtils.message("user.register.save.error", "test"); + } + + /** + * 检查重复 + */ + @PostMapping("/checkRepeat") + public R checkRepeat(@RequestBody UserRepeatQuery query) + { + SysUser sysUser = new SysUser(); + BeanUtils.copyProperties(query, sysUser); + return R.ok(!userService.checkUserNameUnique(sysUser) || !userService.checkPhoneUnique(sysUser) + || !userService.checkEmailUnique(sysUser)); } /** @@ -165,8 +179,19 @@ public class SysUserController extends BaseController } if (!userService.checkUserNameUnique(sysUser)) { - return R.fail("保存用户'" + username + "'失败,注册账号已存在"); + return R.fail("user.register.save.error"); } + + if (!userService.checkPhoneUnique(sysUser)) + { + return R.fail("user.register.phone.save.error"); + } + + if (!userService.checkEmailUnique(sysUser)) + { + return R.fail("user.register.email.save.error"); + } + return R.ok(userService.registerUser(sysUser)); } diff --git a/wfc-modules/wfc-system/src/main/java/org/wfc/system/domain/query/UserRepeatQuery.java b/wfc-modules/wfc-system/src/main/java/org/wfc/system/domain/query/UserRepeatQuery.java new file mode 100644 index 0000000..8623217 --- /dev/null +++ b/wfc-modules/wfc-system/src/main/java/org/wfc/system/domain/query/UserRepeatQuery.java @@ -0,0 +1,15 @@ +package org.wfc.system.domain.query; + +import lombok.Data; + +/** + * @description: 用户重复query + * @author: caiyuchao + * @date: 2024-11-27 + */ +@Data +public class UserRepeatQuery { + private String userName; + private String email; + private String phonenumber; +} diff --git a/wfc-modules/wfc-system/src/main/java/org/wfc/system/mapper/SysUserMapper.java b/wfc-modules/wfc-system/src/main/java/org/wfc/system/mapper/SysUserMapper.java index 7967395..9685eda 100644 --- a/wfc-modules/wfc-system/src/main/java/org/wfc/system/mapper/SysUserMapper.java +++ b/wfc-modules/wfc-system/src/main/java/org/wfc/system/mapper/SysUserMapper.java @@ -1,9 +1,10 @@ package org.wfc.system.mapper; -import java.util.List; import org.apache.ibatis.annotations.Param; import org.wfc.system.api.domain.SysUser; +import java.util.List; + /** * 用户表 数据层 * diff --git a/wfc-modules/wfc-system/src/main/resources/mapper/system/SysUserMapper.xml b/wfc-modules/wfc-system/src/main/resources/mapper/system/SysUserMapper.xml index 470a47a..b5c4166 100644 --- a/wfc-modules/wfc-system/src/main/resources/mapper/system/SysUserMapper.xml +++ b/wfc-modules/wfc-system/src/main/resources/mapper/system/SysUserMapper.xml @@ -23,6 +23,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + @@ -156,6 +159,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" status, create_by, remark, + full_name, + age, + address, create_time )values( #{userId}, @@ -170,6 +176,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{status}, #{createBy}, #{remark}, + #{fullName}, + #{age}, + #{address}, sysdate() )