package com.ruoyi.web.controller.tool;
import cn.hutool.crypto.SecureUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.dto.SysDoorDevicePageRequest;
import com.ruoyi.system.dto.SysEmployeePageRequest;
import com.ruoyi.system.dto.SysVisitorMachinePageRequest;
import com.ruoyi.system.dto.SysVisitAreaTreeRequest;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* 集群版对接中台时,将基础信息中台查询结果适配成当前页面字段。
*
*
目的:前端页面已绑定本系统字段名,直接透传中台字段会导致表格空列。
* 影响范围:部门、区域、员工、访客机、门禁设备的查询和详情接口。
* 注意:访客记录、入园承诺、版本更新暂无明确基础信息中台接口映射,仍由只读拦截保证不能写。
*/
public final class MiddlePlatformDataQuery {
/**
* 目的:工具类只提供静态中台查询适配方法,禁止实例化。
*/
private MiddlePlatformDataQuery() {
}
public static String login(String username, String password) throws IOException {
Map body = new LinkedHashMap<>();
body.put("username", username);
body.put("password", SecureUtil.sha256(password));
JSONObject root = JSON.parseObject(BaseDataApiUtil.requestJson(BaseDataApiUtil.Api.POST_AUTH_USER_LOGIN, body));
if (root == null) {
throw new IOException("middle platform login returned empty response");
}
if (Boolean.FALSE.equals(root.getBoolean("success"))) {
if (isNotFoundResponse(root)) {
return null;
}
throw new IOException(StringUtils.defaultIfEmpty(root.getString("description"), "middle platform login failed"));
}
String token = root.getString("data");
if (!StringUtils.isNotBlank(token)) {
throw new IOException("middle platform login returned empty token");
}
return token;
}
public static void logout(String token) throws IOException {
if (!StringUtils.isNotBlank(token)) {
return;
}
Map headers = new LinkedHashMap<>();
headers.put("Authorization", "Bearer " + token);
BaseDataApiUtil.request(BaseDataApiUtil.Api.POST_AUTH_USER_LOGOUT, null, Collections.emptyMap(), headers);
}
/**
* 目的:查询中台区域树,并转换为访问区域页面使用的 areaId/areaName/children 字段。
*/
public static Object areaTree(SysVisitAreaTreeRequest request) throws IOException {
Map params = new LinkedHashMap<>();
Object data = data(BaseDataApiUtil.request(BaseDataApiUtil.Api.GET_REGION_TREE, params));
String keyword = request == null ? null : request.getAreaName();
List