|
|
@@ -17,6 +17,7 @@ import java.io.UnsupportedEncodingException;
|
|
|
import java.nio.charset.StandardCharsets;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.Map;
|
|
|
+import java.util.UUID;
|
|
|
|
|
|
/**
|
|
|
* 功能:人脸下发、查询、删除、人员计划模板配置
|
|
|
@@ -217,7 +218,7 @@ public class UserManage {
|
|
|
* @param condition
|
|
|
*/
|
|
|
public void getUserInfo(int userID, Map<String, Object> condition) {
|
|
|
- String jsonQueryCondition = generateQueryCondition(); // 生成查询条件 JSON
|
|
|
+ String jsonQueryCondition = generateQueryCondition(condition); // 生成查询条件 JSON
|
|
|
HCNetSDK.BYTE_ARRAY ptrInbuff = new HCNetSDK.BYTE_ARRAY(jsonQueryCondition.length());
|
|
|
System.arraycopy(jsonQueryCondition.getBytes(), 0, ptrInbuff.byValue, 0, jsonQueryCondition.length());
|
|
|
ptrInbuff.write();
|
|
|
@@ -255,7 +256,7 @@ public class UserManage {
|
|
|
} else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_SUCCESS) {
|
|
|
ptrOutbuff.read();
|
|
|
String resultJson = new String(ptrOutbuff.byValue).trim();
|
|
|
- processUserInfo(resultJson); // 处理人员信息
|
|
|
+ processUserInfo(userID, condition, resultJson); // 处理人员信息
|
|
|
break;
|
|
|
} else if (dwState == HCNetSDK.NET_SDK_CONFIG_STATUS_FINISH) {
|
|
|
logger.info("获取人员完成");
|
|
|
@@ -269,7 +270,7 @@ public class UserManage {
|
|
|
*
|
|
|
* @param resultJson 查询结果的 JSON 字符串
|
|
|
*/
|
|
|
- private void processUserInfo(String resultJson) {
|
|
|
+ private void processUserInfo(int userID, Map<String, Object> condition, String resultJson) {
|
|
|
try {
|
|
|
JSONObject responseJson = new JSONObject(resultJson); // 解析 JSON
|
|
|
JSONObject userInfoSearch = responseJson.getJSONObject("UserInfoSearch");
|
|
|
@@ -293,8 +294,8 @@ public class UserManage {
|
|
|
if (numOfMatches < totalMatches) {
|
|
|
logger.info("继续分页查询...");
|
|
|
// 更新查询条件:根据返回的记录数更新起始位置
|
|
|
- // 假设分页查询的起始位置使用 `searchResultPosition`
|
|
|
- String updatedQueryCondition = updateQueryConditionForPagination();
|
|
|
+ int nextPosition = (int) condition.getOrDefault("searchResultPosition", 0) + numOfMatches;
|
|
|
+ String updatedQueryCondition = updateQueryConditionForPagination(condition, nextPosition);
|
|
|
// getUserInfo(userID, lHandler, updatedQueryCondition);
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
@@ -307,10 +308,11 @@ public class UserManage {
|
|
|
*
|
|
|
* @return 更新后的查询条件 JSON 字符串
|
|
|
*/
|
|
|
- private String updateQueryConditionForPagination() {
|
|
|
+ private String updateQueryConditionForPagination(Map<String, Object> condition, int nextPosition) {
|
|
|
// 根据实际情况生成分页查询条件,假设每次获取 `maxResults` 为 30
|
|
|
// 更新查询条件中的 `searchResultPosition`
|
|
|
- return generateQueryCondition(); // 更新条件
|
|
|
+ condition.put("searchResultPosition", nextPosition);
|
|
|
+ return generateQueryCondition(condition); // 更新条件
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -318,15 +320,22 @@ public class UserManage {
|
|
|
*
|
|
|
* @return 查询条件的 JSON 字符串
|
|
|
*/
|
|
|
- private String generateQueryCondition() {
|
|
|
+ private String generateQueryCondition(Map<String, Object> condition) {
|
|
|
// 根据实际需求生成查询条件的 JSON 字符串
|
|
|
JSONObject queryCondition = new JSONObject();
|
|
|
JSONObject userInfoSearchCond = new JSONObject();
|
|
|
|
|
|
- userInfoSearchCond.put("searchID", "123"); // 生成一个搜索ID
|
|
|
- userInfoSearchCond.put("searchResultPosition", 0); // 初始位置
|
|
|
- userInfoSearchCond.put("maxResults", 30); // 每次查询的最大记录数
|
|
|
- userInfoSearchCond.put("fuzzySearch", "test"); // 模糊查询
|
|
|
+ userInfoSearchCond.put("searchID", UUID.randomUUID().toString()); // 生成一个搜索ID
|
|
|
+ userInfoSearchCond.put("searchResultPosition", condition.getOrDefault("searchResultPosition", 0)); // 初始位置
|
|
|
+ userInfoSearchCond.put("maxResults", condition.getOrDefault("maxResults", 30)); // 每次查询的最大记录数
|
|
|
+ if (condition.containsKey("fuzzySearch")) {
|
|
|
+ userInfoSearchCond.put("fuzzySearch", condition.get("fuzzySearch"));
|
|
|
+ } // 模糊查询
|
|
|
+
|
|
|
+ // 指定员工号
|
|
|
+ if (condition.containsKey("employeeNo")) {
|
|
|
+ userInfoSearchCond.put("employeeNo", condition.get("employeeNo"));
|
|
|
+ }
|
|
|
|
|
|
// 可以根据需要加入员工编号等其他查询条件
|
|
|
queryCondition.put("UserInfoSearchCond", userInfoSearchCond);
|
|
|
@@ -417,41 +426,41 @@ public class UserManage {
|
|
|
* 新增人员
|
|
|
*
|
|
|
* @param lUserID 登录句柄
|
|
|
- * @param employeeNo 员工ID
|
|
|
+ * @param userInfo 人员信息对象(包含所有字段,参考 SDK JSON)
|
|
|
* @throws JSONException
|
|
|
* @throws UnsupportedEncodingException
|
|
|
* @throws InterruptedException
|
|
|
*/
|
|
|
- public void addUserInfo(int lUserID, String employeeNo)
|
|
|
+ public void addUserInfo(int lUserID, JSONObject userInfo)
|
|
|
throws JSONException, UnsupportedEncodingException, InterruptedException {
|
|
|
- modifyOrAddUserInfo(lUserID, employeeNo, false);
|
|
|
+ modifyOrAddUserInfo(lUserID, userInfo, false);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 修改人员信息
|
|
|
*
|
|
|
* @param lUserID 登录句柄
|
|
|
- * @param employeeNo 员工ID
|
|
|
+ * @param userInfo 员工ID 人员信息对象(包含所有字段,参考 SDK JSON)
|
|
|
* @throws JSONException
|
|
|
* @throws UnsupportedEncodingException
|
|
|
* @throws InterruptedException
|
|
|
*/
|
|
|
- public void modifyUserInfo(int lUserID, String employeeNo)
|
|
|
+ public void updateUserInfo(int lUserID, JSONObject userInfo)
|
|
|
throws JSONException, UnsupportedEncodingException, InterruptedException {
|
|
|
- modifyOrAddUserInfo(lUserID, employeeNo, true);
|
|
|
+ modifyOrAddUserInfo(lUserID, userInfo, true);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 新增或修改人员信息(统一方法)
|
|
|
*
|
|
|
* @param lUserID 登录句柄
|
|
|
- * @param employeeNo 员工ID
|
|
|
+ * @param userInfo 员工信息
|
|
|
* @param isUpdate 是否为修改操作
|
|
|
* @throws JSONException
|
|
|
* @throws UnsupportedEncodingException
|
|
|
* @throws InterruptedException
|
|
|
*/
|
|
|
- private void modifyOrAddUserInfo(int lUserID, String employeeNo, boolean isUpdate)
|
|
|
+ private void modifyOrAddUserInfo(int lUserID, JSONObject userInfo, boolean isUpdate)
|
|
|
throws JSONException, UnsupportedEncodingException, InterruptedException {
|
|
|
String strInBuffer = isUpdate
|
|
|
? "PUT /ISAPI/AccessControl/UserInfo/Modify?format=json" // 修改人员信息
|
|
|
@@ -473,10 +482,60 @@ public class UserManage {
|
|
|
|
|
|
// 构造人员信息参数
|
|
|
Map<String, Object> parameter = new HashMap<>();
|
|
|
- parameter.put("employeeNo", employeeNo); // 员工ID
|
|
|
- parameter.put("name", "测试人员"); // 员工名称
|
|
|
- parameter.put("enable", true); // 是否启用
|
|
|
- parameter.put("doorNo", 1); // 门编号
|
|
|
+
|
|
|
+ // ---- 基本信息 ----
|
|
|
+ parameter.put("employeeNo", userInfo.getString("employeeNo"));
|
|
|
+ parameter.put("name", userInfo.optString("name", ""));
|
|
|
+ parameter.put("userType", userInfo.optString("userType", "normal"));
|
|
|
+ parameter.put("closeDelayEnabled", userInfo.optBoolean("closeDelayEnabled", false));
|
|
|
+
|
|
|
+ // ---- 有效期 Valid ----
|
|
|
+ if (userInfo.has("Valid")) {
|
|
|
+ JSONObject valid = userInfo.getJSONObject("Valid");
|
|
|
+ Map<String, Object> validMap = new HashMap<>();
|
|
|
+ validMap.put("enable", valid.optBoolean("enable", true));
|
|
|
+ validMap.put("beginTime", valid.optString("beginTime", ""));
|
|
|
+ validMap.put("endTime", valid.optString("endTime", ""));
|
|
|
+ validMap.put("timeType", valid.optString("timeType", "local"));
|
|
|
+ parameter.put("Valid", validMap);
|
|
|
+ }
|
|
|
+
|
|
|
+ // ---- 其他基础字段 ----
|
|
|
+ parameter.put("belongGroup", userInfo.optString("belongGroup", ""));
|
|
|
+ parameter.put("password", userInfo.optString("password", ""));
|
|
|
+ parameter.put("doorRight", userInfo.optString("doorRight", ""));
|
|
|
+ parameter.put("maxOpenDoorTime", userInfo.optInt("maxOpenDoorTime", 0));
|
|
|
+ parameter.put("openDoorTime", userInfo.optInt("openDoorTime", 0));
|
|
|
+ parameter.put("roomNumber", userInfo.optInt("roomNumber", 0));
|
|
|
+ parameter.put("floorNumber", userInfo.optInt("floorNumber", 0));
|
|
|
+ parameter.put("doubleLockRight", userInfo.optBoolean("doubleLockRight", false));
|
|
|
+ parameter.put("localUIRight", userInfo.optBoolean("localUIRight", true));
|
|
|
+ parameter.put("userVerifyMode", userInfo.optString("userVerifyMode", ""));
|
|
|
+ parameter.put("checkUser", userInfo.optBoolean("checkUser", true));
|
|
|
+ parameter.put("numOfFace", userInfo.optInt("numOfFace", 0));
|
|
|
+ parameter.put("numOfFP", userInfo.optInt("numOfFP", 0));
|
|
|
+ parameter.put("numOfCard", userInfo.optInt("numOfCard", 0));
|
|
|
+ parameter.put("gender", userInfo.optString("gender", "unknown"));
|
|
|
+ parameter.put("operateType", userInfo.optString("operateType", ""));
|
|
|
+ parameter.put("dynamicCode", userInfo.optString("dynamicCode", ""));
|
|
|
+ parameter.put("groupName", userInfo.optString("groupName", ""));
|
|
|
+
|
|
|
+ // ---- 数组字段 ----
|
|
|
+ if (userInfo.has("RightPlan")) {
|
|
|
+ parameter.put("RightPlan", userInfo.getJSONArray("RightPlan").toList());
|
|
|
+ }
|
|
|
+ if (userInfo.has("PersonInfoExtends")) {
|
|
|
+ parameter.put("PersonInfoExtends", userInfo.getJSONArray("PersonInfoExtends").toList());
|
|
|
+ }
|
|
|
+ if (userInfo.has("terminalNoList")) {
|
|
|
+ parameter.put("terminalNoList", userInfo.getJSONArray("terminalNoList").toList());
|
|
|
+ }
|
|
|
+ if (userInfo.has("callNumbers")) {
|
|
|
+ parameter.put("callNumbers", userInfo.getJSONArray("callNumbers").toList());
|
|
|
+ }
|
|
|
+ if (userInfo.has("floorNumbers")) {
|
|
|
+ parameter.put("floorNumbers", userInfo.getJSONArray("floorNumbers").toList());
|
|
|
+ }
|
|
|
|
|
|
// 使用模板文件生成 JSON 请求报文
|
|
|
String input = ConfigFileUtil.getReqBodyFromTemplate("conf/acs/AddUserInfoInputParam.json", parameter);
|