diff --git a/src/main/java/com/jhinno/sdk/openapi/api/organization/AddUpdateUserInfo.java b/src/main/java/com/jhinno/sdk/openapi/api/organization/AddUpdateUserInfo.java
new file mode 100644
index 0000000..036da03
--- /dev/null
+++ b/src/main/java/com/jhinno/sdk/openapi/api/organization/AddUpdateUserInfo.java
@@ -0,0 +1,91 @@
+package com.jhinno.sdk.openapi.api.organization;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 添加用户
+ *
+ * @author yanlongqi
+ * @date 2024/2/19 10:14
+ */
+@Data
+public class AddUpdateUserInfo {
+
+ /**
+ * 用户名(必填)
+ */
+ private String userName;
+
+ /**
+ * 用户中文名(必填)
+ */
+ private String userNameCn;
+
+ /**
+ * 用户密码(必填,需要修改)
+ */
+ private String userPassword;
+
+ /**
+ * 用户身份证(非必填)
+ */
+ private String userCard;
+
+ /**
+ * 部门名称(必填)
+ */
+ private String depName;
+
+ /**
+ * 部门中文名称(没必要)
+ */
+ private String depNameCn;
+
+ /**
+ * 用户说明(非必填)
+ */
+ private String userNote;
+
+ /**
+ * 用户电话(非必填)
+ */
+ private String userTel;
+
+ /**
+ * 用户邮箱(非必填)
+ */
+ private String userMail;
+
+ /**
+ * 用户密级配置(非必填)
+ */
+ private String userConf;
+
+ /**
+ * 用户密级配置中文名(没必要)
+ */
+ private String userConfCn;
+
+ /**
+ * 用户角色(非必填)
+ */
+ private String userRole;
+
+ /**
+ * 用户角色中文名(没必要)
+ */
+ private String userRoleCn;
+
+ /**
+ * 账号有效时间(非必填,为空这表示永不失效)
+ */
+ private Date userExpireTime;
+
+
+ /**
+ * 属性(不知道有什么用)
+ */
+ private String attribute;
+}
diff --git a/src/main/java/com/jhinno/sdk/openapi/api/organization/JHUserApiExecution.java b/src/main/java/com/jhinno/sdk/openapi/api/organization/JHUserApiExecution.java
index 097135d..382c9ea 100644
--- a/src/main/java/com/jhinno/sdk/openapi/api/organization/JHUserApiExecution.java
+++ b/src/main/java/com/jhinno/sdk/openapi/api/organization/JHUserApiExecution.java
@@ -12,6 +12,8 @@ import java.util.Map;
/**
* 用户相关接口执行器
+ *
+ * 注:要调用以下接口,传入的username必须有user_manager的权限
*
* @author yanlongqi
* @date 2024/2/6 17:37
@@ -51,4 +53,102 @@ public class JHUserApiExecution extends JHApiExecution {
return get(path, username, new TypeReference>>() {
});
}
+
+ /**
+ * 添加用户
+ *
+ * @param username 用户名
+ * @param userInfo 用户信息
+ */
+ public void addUser(String username, AddUpdateUserInfo userInfo) {
+ post(UserPathConstant.USERS_PATH, username, userInfo);
+ }
+
+ /**
+ * 修改用户信息
+ *
+ * @param username 用户名
+ * @param userInfo 用户信息
+ */
+ public void updateUser(String username, AddUpdateUserInfo userInfo) {
+ String path = UserPathConstant.USERS_USERNAME_PATH.replace("{username}", userInfo.getUserName());
+ put(path, username, userInfo);
+ }
+
+
+ /**
+ * 修改或重置用户密码
+ *
+ *
+ * - 当type值为{@link UpdateUserPasswordType#FORCE_UPDATE_PASSWORD_TYPE} 时会怎样
+ * - 当type值为{@link UpdateUserPasswordType#RESET_UPDATE_PASSWORD_TYPE} 时会怎样
+ * - 当type值为空时会怎样
+ *
+ * 参数怎么传,还需进一步确认,此处需要增加三个重构,方便开发者调用
+ *
+ * @param username 用户名
+ * @param updatePasswordUsername 被修改的用户名
+ * @param oldPassword 旧密码
+ * @param password 新密码
+ * @param type 类型,(非必填,取值见{@link UpdateUserPasswordType})
+ */
+ public void updateUserPassword(String username, String updatePasswordUsername, String oldPassword, String password, String type) {
+ String path = UserPathConstant.USERS_RESET_PASSWORD_PATH.replace("{username}", updatePasswordUsername);
+ Map params = new HashMap<>(4);
+ if (StringUtils.isNotBlank(oldPassword)) {
+ params.put("oldPassword", oldPassword);
+ }
+ if (StringUtils.isNotBlank("type")) {
+ params.put("type", type);
+ }
+ params.put("password", password);
+ put(path, username, params);
+ }
+
+
+ /**
+ * 修改用户的密码
+ *
+ * @param username 用户名
+ * @param updatePasswordUsername 被修改的用户名
+ * @param oldPassword 旧密码
+ * @param password 新密码
+ */
+ public void updateUserPassword(String username, String updatePasswordUsername, String oldPassword, String password) {
+ updateUserPassword(username, updatePasswordUsername, oldPassword, password, null);
+ }
+
+ /**
+ * 重置用户密码后强制用户修改密码
+ *
+ * @param username 用户名
+ * @param updatePasswordUsername 被修改的用户名
+ * @param password 新的用户密码
+ */
+ public void resetForceUpdatePassword(String username, String updatePasswordUsername, String password) {
+ updateUserPassword(username, updatePasswordUsername, null, password, UpdateUserPasswordType.FORCE_UPDATE_PASSWORD_TYPE);
+ }
+
+ /**
+ * 重置用户名
+ *
+ * @param username 用户名
+ * @param updatePasswordUsername 被修改的用户密码
+ * @param password 新的用户密码
+ */
+ public void resetPassword(String username, String updatePasswordUsername, String password) {
+ updateUserPassword(username, updatePasswordUsername, null, password, UpdateUserPasswordType.RESET_UPDATE_PASSWORD_TYPE);
+ }
+
+
+ /**
+ * 删除用户
+ *
+ * @param username 用户名
+ * @param deleteUsername 被删除的用户名
+ */
+ public void deleteUser(String username, String deleteUsername) {
+ delete(UserPathConstant.USERS_USERNAME_PATH.replace("{username}", deleteUsername), username);
+ }
+
}
diff --git a/src/main/java/com/jhinno/sdk/openapi/api/organization/UpdateUserPasswordType.java b/src/main/java/com/jhinno/sdk/openapi/api/organization/UpdateUserPasswordType.java
new file mode 100644
index 0000000..4457cca
--- /dev/null
+++ b/src/main/java/com/jhinno/sdk/openapi/api/organization/UpdateUserPasswordType.java
@@ -0,0 +1,20 @@
+package com.jhinno.sdk.openapi.api.organization;
+
+/**
+ * 密码操作的类型
+ *
+ * @author yanlongqi
+ * @date 2024/2/19 10:54
+ */
+public class UpdateUserPasswordType {
+
+ /**
+ * 重置密码
+ */
+ protected static final String RESET_UPDATE_PASSWORD_TYPE = "reset";
+ /**
+ * 首次登录强制修改密码
+ */
+ protected static final String FORCE_UPDATE_PASSWORD_TYPE = "force";
+
+}
diff --git a/src/main/java/com/jhinno/sdk/openapi/api/organization/UserPathConstant.java b/src/main/java/com/jhinno/sdk/openapi/api/organization/UserPathConstant.java
index 960a9d0..ce3fbe0 100644
--- a/src/main/java/com/jhinno/sdk/openapi/api/organization/UserPathConstant.java
+++ b/src/main/java/com/jhinno/sdk/openapi/api/organization/UserPathConstant.java
@@ -21,9 +21,8 @@ public class UserPathConstant {
/**
- * 充值用户密码
+ * 用户密码操作
*/
public static final String USERS_RESET_PASSWORD_PATH = "/ws/api/users/{username}/password/password_reset";
-
}