Browse Source

对接派拉同步用户接口

zyl 1 month ago
parent
commit
7dcd301f62

+ 2 - 0
liutongyi-admin/src/main/java/com/citygis/web/service/ITabUserService.java

@@ -16,4 +16,6 @@ public interface ITabUserService extends IService<TabUser> {
 
     AjaxResult insertTabUser(TabUser tabUser);
 
+    void userSynchronous();
+
 }

+ 162 - 6
liutongyi-admin/src/main/java/com/citygis/web/service/impl/TabUserServiceImpl.java

@@ -2,16 +2,37 @@ package com.citygis.web.service.impl;
 
 import cn.hutool.core.lang.Snowflake;
 import cn.hutool.core.util.IdUtil;
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONArray;
+import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.citygis.common.core.domain.AjaxResult;
+import com.citygis.common.core.domain.entity.SysUser;
+import com.citygis.system.service.ISysUserService;
 import com.citygis.web.domain.TabUser;
 import com.citygis.web.mapper.TabUserMapper;
 import com.citygis.web.service.ITabUserService;
 import com.citygis.web.utils.AesUtil;
+import com.citygis.web.utils.SM4Util;
+import org.apache.http.HttpEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
+import javax.annotation.Resource;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
 /**
  * <p>
  * 登录用户 服务实现类
@@ -23,6 +44,20 @@ import org.springframework.transaction.annotation.Transactional;
 @Service
 public class TabUserServiceImpl extends ServiceImpl<TabUserMapper, TabUser> implements ITabUserService {
 
+    private static final Logger logger = LoggerFactory.getLogger(TabUserServiceImpl.class);
+
+    @Value("${paiLaUserUrl.userUrl}")
+    private String userUrl;
+
+    @Value("${paiLaUserUrl.callbackUrl}")
+    private String callbackUrl;
+
+    @Value("${paiLaUserUrl.key}")
+    private String key;
+
+    @Resource
+    private ISysUserService sysUserService;
+
     @Override
     @Transactional
     public AjaxResult insertTabUser(TabUser tabUser) {
@@ -35,17 +70,138 @@ public class TabUserServiceImpl extends ServiceImpl<TabUserMapper, TabUser> impl
         TabUser one = this.getOne(queryWrapper);
 
         if (one != null) {
-            String s = AesUtil.aesEncrypt(tabUser.getPassword());
-
-            tabUser.setPassword(s);
+            tabUser.setPassword(AesUtil.aesEncrypt(tabUser.getPassword()));
             this.update(tabUser, queryWrapper);
         } else {
-            String s = AesUtil.aesEncrypt(tabUser.getPassword());
-
-            tabUser.setPassword(s);
+            tabUser.setPassword(AesUtil.aesEncrypt(tabUser.getPassword()));
             this.save(tabUser);
         }
 
         return AjaxResult.success("添加成功");
     }
+
+    @Override
+    public void userSynchronous() {
+        forwardRequest(userUrl);
+    }
+
+    public void forwardRequest(String url) {
+        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
+            HttpPost httpPost = new HttpPost(url);
+            try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
+                HttpEntity entity = response.getEntity();
+                String responseString = EntityUtils.toString(entity);
+                parseJsonResponse(responseString);
+            }
+        } catch (IOException e) {
+            handleException(e);
+        }
+    }
+
+    public void parseJsonResponse(String jsonResponse) {
+        Map<String, Object> requestData = new HashMap<>();
+        JSONArray errors = new JSONArray();
+        StringBuilder ids = new StringBuilder();
+
+        try {
+            JSONObject rootNode = JSONObject.parseObject(jsonResponse);
+            JSONObject dataNode = rootNode.getJSONObject("data");
+            JSONArray listNode = dataNode.getJSONArray("list");
+
+            for (int i = 0; i < listNode.size(); i++) {
+                JSONObject accountNode = listNode.getJSONObject(i);
+                SysUser sysUser = extractSysUserFromAccountNode(accountNode);
+
+                int insertResult = sysUserService.insertUser(sysUser);
+                if (insertResult == 1) {
+                    appendRequestId(ids, sysUser.getRequestLogId());
+                } else {
+                    addError(errors, sysUser.getRequestLogId(), "保存失败");
+                }
+            }
+
+            requestData.put("ids", ids.toString());
+            requestData.put("errors", errors);
+            callback(requestData);
+        } catch (Exception e) {
+            handleException(e);
+        }
+    }
+
+    private SysUser extractSysUserFromAccountNode(JSONObject accountNode) throws Exception {
+        SysUser sysUser = new SysUser();
+        String accountName = accountNode.getString("app_account__account_name");
+        String accountNo = accountNode.getString("app_account__account_no");
+        String password = accountNode.getString("request_log__account_pwd");
+        String requestLogId = accountNode.getString("request_log__id");
+
+        SM4Util sm4Util = SM4Util.getInstance(key);
+        String decryptBase64 = sm4Util.decryptBase64(password);
+
+        sysUser.setUserName(accountNo);
+        sysUser.setNickName(accountName);
+        sysUser.setPassword(decryptBase64);
+        sysUser.setCreateBy("用户同步");
+        sysUser.setRequestLogId(requestLogId);
+
+//        printUserInfo(accountNode, sysUser);
+
+        return sysUser;
+    }
+
+//    private void printUserInfo(JSONObject accountNode, SysUser sysUser) {
+//        logger.info("帐号名称: {}", sysUser.getNickName());
+//        logger.info("帐号: {}", sysUser.getUserName());
+//        logger.info("状态: {}", accountNode.getString("app_account__status"));
+//
+//        JSONArray jobsNode = accountNode.getJSONArray("jobs");
+//        for (int j = 0; j < jobsNode.size(); j++) {
+//            JSONObject jobNode = jobsNode.getJSONObject(j);
+//            logger.info("岗位编码: {}, 岗位名称: {}", jobNode.getString("idt_job__code"), jobNode.getString("idt_job__name"));
+//        }
+//
+//        JSONArray orgsNode = accountNode.getJSONArray("orgs");
+//        for (int k = 0; k < orgsNode.size(); k++) {
+//            JSONObject orgNode = orgsNode.getJSONObject(k);
+//            logger.info("组织名称: {}", orgNode.getString("idt_org__name"));
+//        }
+//    }
+
+    private void appendRequestId(StringBuilder ids, String requestId) {
+        if (ids.length() > 0) {
+            ids.append(",");
+        }
+        ids.append(requestId);
+    }
+
+    private void addError(JSONArray errors, String id, String msg) {
+        Map<String, String> error = new HashMap<>();
+        error.put("id", id);
+        error.put("msg", msg);
+        errors.add(error);
+    }
+
+    public void callback(Map<String, Object> requestData) {
+        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
+            HttpPost httpPost = new HttpPost(callbackUrl);
+            httpPost.setHeader("Content-Type", "application/json");
+            StringEntity entity = new StringEntity(JSON.toJSONString(requestData));
+            httpPost.setEntity(entity);
+
+            try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
+                HttpEntity responseEntity = response.getEntity();
+                String responseString = EntityUtils.toString(responseEntity);
+                logger.info("响应内容: {}", responseString);
+            }
+        } catch (IOException e) {
+            handleException(e);
+        }
+    }
+
+    private void handleException(Exception e) {
+        logger.error("发生异常", e);
+    }
 }
+
+
+

+ 152 - 0
liutongyi-admin/src/main/java/com/citygis/web/utils/SM4Util.java

@@ -0,0 +1,152 @@
+package com.citygis.web.utils;
+
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.bouncycastle.pqc.math.linearalgebra.ByteUtils;
+
+import javax.crypto.BadPaddingException;
+import javax.crypto.Cipher;
+import javax.crypto.IllegalBlockSizeException;
+import javax.crypto.SecretKey;
+import javax.crypto.spec.SecretKeySpec;
+import java.nio.charset.StandardCharsets;
+import java.security.InvalidKeyException;
+import java.security.Security;
+import java.util.Arrays;
+import java.util.Base64;
+import java.util.UUID;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
+/**
+ * @Author: zyl
+ * @CreateTime: 2025-02-10
+ * @Description: 国密
+ * @Version: 1.0
+ */
+public class SM4Util {
+
+    public static final String ALGORITHM_NAME = "SM4";
+    public static final String ALGORITHM_NAME_ECB_PADDING = "SM4/ECB/PKCS5Padding";
+
+    private final Lock lock = new ReentrantLock();
+    private final Cipher cipher;
+    private final SecretKey secretKey;
+
+    static {
+        Security.addProvider(new BouncyCastleProvider());
+    }
+
+    public SM4Util(byte[] key) throws Exception {
+        this.cipher = Cipher.getInstance(SM4Util.ALGORITHM_NAME_ECB_PADDING, new org.bouncycastle.jce.provider.BouncyCastleProvider());
+        this.secretKey = new SecretKeySpec(key, ALGORITHM_NAME);
+    }
+
+    /**
+     * 根据字符类型秘钥获取加密实例
+     *
+     * @param key 秘钥
+     */
+    public static SM4Util getInstance(String key) throws Exception {
+        return new SM4Util(ByteUtils.fromHexString(key));
+    }
+
+    /**
+     * 根据byte类型秘钥获取SM4加密实例
+     *
+     * @param key 秘钥
+     */
+    public static SM4Util getInstance(byte[] key) throws Exception {
+        return new SM4Util(key);
+    }
+
+    private Cipher initCipher(int mode) throws InvalidKeyException {
+        final Cipher cipher = this.cipher;
+        cipher.init(mode, secretKey);
+        return cipher;
+    }
+
+
+    /**
+     * 加密为byte数组
+     *
+     * @param data 待加密byte
+     */
+    public byte[] encrypt_Ecb_Padding(byte[] data) throws InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
+        lock.lock();
+        try {
+            Cipher cipher = this.initCipher(Cipher.ENCRYPT_MODE);
+            return cipher.doFinal(data);
+        } finally {
+            lock.unlock();
+        }
+    }
+
+    /**
+     * 解密为byte数组
+     *
+     * @param cipherText 加密后的byte数组
+     */
+    public byte[] decrypt_Ecb_Padding(byte[] cipherText) throws Exception {
+        lock.lock();
+        try {
+            Cipher cipher = this.initCipher(Cipher.DECRYPT_MODE);
+            return cipher.doFinal(cipherText);
+        } finally {
+            lock.unlock();
+        }
+    }
+
+    /**
+     * 加密成Base64的密文
+     *
+     * @param text 待加密文字
+     */
+    public String encryptBase64(String text) throws Exception {
+        byte[] textBytes = text.getBytes(StandardCharsets.UTF_8);
+        byte[] encode = Base64.getEncoder().encode(encrypt_Ecb_Padding(textBytes));
+        return new String(encode, StandardCharsets.UTF_8);
+    }
+
+    /**
+     * 解密Base64字符串的密文
+     *
+     * @param text 待解密文字
+     */
+    public String decryptBase64(String text) throws Exception {
+        byte[] decode = java.util.Base64.getDecoder().decode(text);
+        return new String(this.decrypt_Ecb_Padding(decode), StandardCharsets.UTF_8);
+    }
+
+    /**
+     * 获取随机秘钥
+     */
+    public static String generateRandomKey() {
+        String uuid = UUID.randomUUID().toString();
+        return uuid.replace("-", "");
+    }
+
+    /**
+     * 获取随机秘钥
+     */
+    public static String generateRandomKeyBytes() {
+        String uuid = UUID.randomUUID().toString();
+        return Arrays.toString(ByteUtils.fromHexString(uuid));
+    }
+
+    public static void main(String[] args) {
+        String key = "77eb4c72b36644759af649d2d941c944";
+        try {
+            System.out.println(key);
+            String pwd = "Pass@word2022#$";
+            SM4Util sm4Util = SM4Util.getInstance(key);
+            String encryptBase64 = sm4Util.encryptBase64(pwd);
+            String decryptBase64 = sm4Util.decryptBase64(encryptBase64);
+            System.out.println(encryptBase64);
+            System.out.println(decryptBase64);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
+
+}

+ 7 - 1
liutongyi-admin/src/main/resources/application.yml

@@ -163,4 +163,10 @@ weekReport:
 singleLogin:
   clientId:
   url:
-  ssoRet: https://iam.scdc.sh.cegn.cn/esc-sso/oauth2.0/authorize?
+  ssoRet: https://iam.scdc.sh.cegn.cn/esc-sso/oauth2.0/authorize?
+
+#同步派拉用户
+paiLaUserUrl:
+  userUrl: http://paraview.paraesc.com/esc-idm/api/v1/org/list
+  callbackUrl: http://paraview.paraesc.com/esc-idm/api/v1/org/callback
+  key:

+ 12 - 0
liutongyi-common/pom.xml

@@ -178,6 +178,18 @@
             <groupId>io.micrometer</groupId>
             <artifactId>micrometer-core</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+            <version>4.5.13</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.bouncycastle</groupId>
+            <artifactId>bcpkix-jdk15on</artifactId>
+            <version>1.69</version>
+        </dependency>
     </dependencies>
 
 </project>

+ 138 - 129
liutongyi-common/src/main/java/com/citygis/common/core/domain/entity/SysUser.java

@@ -1,324 +1,333 @@
 package com.citygis.common.core.domain.entity;
 
-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 com.citygis.common.annotation.Excel;
 import com.citygis.common.annotation.Excel.ColumnType;
 import com.citygis.common.annotation.Excel.Type;
 import com.citygis.common.annotation.Excels;
 import com.citygis.common.core.domain.BaseEntity;
 import com.citygis.common.xss.Xss;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+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
- * 
+ *
  * @author citygis
  */
-public class SysUser extends BaseEntity
-{
+public class SysUser extends BaseEntity {
     private static final long serialVersionUID = 1L;
 
-    /** 用户ID */
+    /**
+     * 用户ID
+     */
     @Excel(name = "用户序号", type = Type.EXPORT, cellType = ColumnType.NUMERIC, prompt = "用户编号")
     private Long userId;
 
-    /** 部门ID */
+    /**
+     * 部门ID
+     */
     @Excel(name = "部门编号", type = Type.IMPORT)
     private Long deptId;
 
-    /** 用户账号 */
+    /**
+     * 用户账号
+     */
     @Excel(name = "登录名称")
     private String userName;
 
-    /** 用户昵称 */
+    /**
+     * 用户昵称
+     */
     @Excel(name = "用户名称")
     private String nickName;
 
-    /** 用户邮箱 */
+    /**
+     * 用户邮箱
+     */
     @Excel(name = "用户邮箱")
     private String email;
 
-    /** 手机号码 */
+    /**
+     * 手机号码
+     */
     @Excel(name = "手机号码", cellType = ColumnType.TEXT)
     private String phonenumber;
 
-    /** 用户性别 */
+    /**
+     * 用户性别
+     */
     @Excel(name = "用户性别", readConverterExp = "0=男,1=女,2=未知")
     private String sex;
 
-    /** 用户头像 */
+    /**
+     * 用户头像
+     */
     private String avatar;
 
-    /** 密码 */
+    /**
+     * 密码
+     */
     private String password;
 
-    /** 帐号状态(0正常 1停用) */
+    /**
+     * 帐号状态(0正常 1停用)
+     */
     @Excel(name = "帐号状态", readConverterExp = "0=正常,1=停用")
     private String status;
 
-    /** 删除标志(0代表存在 2代表删除) */
+    /**
+     * 删除标志(0代表存在 2代表删除)
+     */
     private String delFlag;
 
-    /** 最后登录IP */
+    /**
+     * 最后登录IP
+     */
     @Excel(name = "最后登录IP", type = Type.EXPORT)
     private String loginIp;
 
-    /** 最后登录时间 */
+    /**
+     * 最后登录时间
+     */
     @Excel(name = "最后登录时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT)
     private Date loginDate;
 
-    /** 部门对象 */
+    //    派拉用户id
+    private String requestLogId;
+
+    public String getRequestLogId() {
+        return requestLogId;
+    }
+
+    public void setRequestLogId(String requestLogId) {
+        this.requestLogId = requestLogId;
+    }
+
+    /**
+     * 部门对象
+     */
     @Excels({
-        @Excel(name = "部门名称", targetAttr = "deptName", type = Type.EXPORT),
-        @Excel(name = "部门负责人", targetAttr = "leader", type = Type.EXPORT)
+            @Excel(name = "部门名称", targetAttr = "deptName", type = Type.EXPORT),
+            @Excel(name = "部门负责人", targetAttr = "leader", type = Type.EXPORT)
     })
     private SysDept dept;
 
-    /** 角色对象 */
+    /**
+     * 角色对象
+     */
     private List<SysRole> roles;
 
-    /** 角色组 */
+    /**
+     * 角色组
+     */
     private Long[] roleIds;
 
-    /** 岗位组 */
+    /**
+     * 岗位组
+     */
     private Long[] postIds;
 
-    /** 角色ID */
+    /**
+     * 角色ID
+     */
     private Long roleId;
 
-    public SysUser()
-    {
+    public SysUser() {
 
     }
 
-    public SysUser(Long userId)
-    {
+    public SysUser(Long userId) {
         this.userId = userId;
     }
 
-    public Long getUserId()
-    {
+    public Long getUserId() {
         return userId;
     }
 
-    public void setUserId(Long userId)
-    {
+    public void setUserId(Long userId) {
         this.userId = userId;
     }
 
-    public boolean isAdmin()
-    {
+    public boolean isAdmin() {
         return isAdmin(this.userId);
     }
 
-    public static boolean isAdmin(Long userId)
-    {
+    public static boolean isAdmin(Long userId) {
         return userId != null && 1L == userId;
     }
 
-    public Long getDeptId()
-    {
+    public Long getDeptId() {
         return deptId;
     }
 
-    public void setDeptId(Long deptId)
-    {
+    public void setDeptId(Long deptId) {
         this.deptId = deptId;
     }
 
     @Xss(message = "用户昵称不能包含脚本字符")
     @Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符")
-    public String getNickName()
-    {
+    public String getNickName() {
         return nickName;
     }
 
-    public void setNickName(String nickName)
-    {
+    public void setNickName(String nickName) {
         this.nickName = nickName;
     }
 
     @Xss(message = "用户账号不能包含脚本字符")
     @NotBlank(message = "用户账号不能为空")
     @Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符")
-    public String getUserName()
-    {
+    public String getUserName() {
         return userName;
     }
 
-    public void setUserName(String userName)
-    {
+    public void setUserName(String userName) {
         this.userName = userName;
     }
 
     @Email(message = "邮箱格式不正确")
     @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符")
-    public String getEmail()
-    {
+    public String getEmail() {
         return email;
     }
 
-    public void setEmail(String email)
-    {
+    public void setEmail(String email) {
         this.email = email;
     }
 
     @Size(min = 0, max = 11, message = "手机号码长度不能超过11个字符")
-    public String getPhonenumber()
-    {
+    public String getPhonenumber() {
         return phonenumber;
     }
 
-    public void setPhonenumber(String phonenumber)
-    {
+    public void setPhonenumber(String phonenumber) {
         this.phonenumber = phonenumber;
     }
 
-    public String getSex()
-    {
+    public String getSex() {
         return sex;
     }
 
-    public void setSex(String sex)
-    {
+    public void setSex(String sex) {
         this.sex = sex;
     }
 
-    public String getAvatar()
-    {
+    public String getAvatar() {
         return avatar;
     }
 
-    public void setAvatar(String avatar)
-    {
+    public void setAvatar(String avatar) {
         this.avatar = avatar;
     }
 
-    public String getPassword()
-    {
+    public String getPassword() {
         return password;
     }
 
-    public void setPassword(String password)
-    {
+    public void setPassword(String password) {
         this.password = password;
     }
 
-    public String getStatus()
-    {
+    public String getStatus() {
         return status;
     }
 
-    public void setStatus(String status)
-    {
+    public void setStatus(String status) {
         this.status = status;
     }
 
-    public String getDelFlag()
-    {
+    public String getDelFlag() {
         return delFlag;
     }
 
-    public void setDelFlag(String delFlag)
-    {
+    public void setDelFlag(String delFlag) {
         this.delFlag = delFlag;
     }
 
-    public String getLoginIp()
-    {
+    public String getLoginIp() {
         return loginIp;
     }
 
-    public void setLoginIp(String loginIp)
-    {
+    public void setLoginIp(String loginIp) {
         this.loginIp = loginIp;
     }
 
-    public Date getLoginDate()
-    {
+    public Date getLoginDate() {
         return loginDate;
     }
 
-    public void setLoginDate(Date loginDate)
-    {
+    public void setLoginDate(Date loginDate) {
         this.loginDate = loginDate;
     }
 
-    public SysDept getDept()
-    {
+    public SysDept getDept() {
         return dept;
     }
 
-    public void setDept(SysDept dept)
-    {
+    public void setDept(SysDept dept) {
         this.dept = dept;
     }
 
-    public List<SysRole> getRoles()
-    {
+    public List<SysRole> getRoles() {
         return roles;
     }
 
-    public void setRoles(List<SysRole> roles)
-    {
+    public void setRoles(List<SysRole> roles) {
         this.roles = roles;
     }
 
-    public Long[] getRoleIds()
-    {
+    public Long[] getRoleIds() {
         return roleIds;
     }
 
-    public void setRoleIds(Long[] roleIds)
-    {
+    public void setRoleIds(Long[] roleIds) {
         this.roleIds = roleIds;
     }
 
-    public Long[] getPostIds()
-    {
+    public Long[] getPostIds() {
         return postIds;
     }
 
-    public void setPostIds(Long[] postIds)
-    {
+    public void setPostIds(Long[] postIds) {
         this.postIds = postIds;
     }
 
-    public Long getRoleId()
-    {
+    public Long getRoleId() {
         return roleId;
     }
 
-    public void setRoleId(Long roleId)
-    {
+    public void setRoleId(Long roleId) {
         this.roleId = roleId;
     }
 
     @Override
     public String toString() {
-        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
-            .append("userId", getUserId())
-            .append("deptId", getDeptId())
-            .append("userName", getUserName())
-            .append("nickName", getNickName())
-            .append("email", getEmail())
-            .append("phonenumber", getPhonenumber())
-            .append("sex", getSex())
-            .append("avatar", getAvatar())
-            .append("password", getPassword())
-            .append("status", getStatus())
-            .append("delFlag", getDelFlag())
-            .append("loginIp", getLoginIp())
-            .append("loginDate", getLoginDate())
-            .append("createBy", getCreateBy())
-            .append("createTime", getCreateTime())
-            .append("updateBy", getUpdateBy())
-            .append("updateTime", getUpdateTime())
-            .append("remark", getRemark())
-            .append("dept", getDept())
-            .toString();
+        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+                .append("userId", getUserId())
+                .append("deptId", getDeptId())
+                .append("userName", getUserName())
+                .append("nickName", getNickName())
+                .append("email", getEmail())
+                .append("phonenumber", getPhonenumber())
+                .append("sex", getSex())
+                .append("avatar", getAvatar())
+                .append("password", getPassword())
+                .append("status", getStatus())
+                .append("delFlag", getDelFlag())
+                .append("loginIp", getLoginIp())
+                .append("loginDate", getLoginDate())
+                .append("createBy", getCreateBy())
+                .append("createTime", getCreateTime())
+                .append("updateBy", getUpdateBy())
+                .append("updateTime", getUpdateTime())
+                .append("remark", getRemark())
+                .append("dept", getDept())
+                .toString();
     }
 }