package com.zcloud.util; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.zcloud.entity.Camera; import com.zcloud.entity.Card; import com.zcloud.entity.EmployeeData; import com.zcloud.entity.PageData; import com.zcloud.service.corp.CorpPlsInfoService; import com.zcloud.service.system.UsersService; import okhttp3.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; import javax.annotation.PostConstruct; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.*; @Component public class PLSUtil { private static final Logger logger = LoggerFactory.getLogger(PLSUtil.class); private static CorpPlsInfoService corpplsinfoService; private static UsersService usersService; // 后台地址 public static HashMap BAKEADDR = new HashMap<>(); private static RestTemplate restTemplate; @Autowired public void setCorpplsinfoService(CorpPlsInfoService corpplsinfoServicebean, UsersService usersServicebean,RestTemplate restTemplatebean) { corpplsinfoService = corpplsinfoServicebean; usersService = usersServicebean; restTemplate = restTemplatebean; } /** * @Description: 电子围栏列表 * @Author: dearLin * @Date: 2024/1/25/025 14:37 * @Param: [java.lang.String, java.lang.Integer, java.lang.Integer] [keywords, currentPage, showCount] * @Return: com.alibaba.fastjson.JSONObject */ public static JSONObject getRyRegionList(String keywords,Integer currentPage,Integer showCount) throws Exception { HttpHeaders headers = new HttpHeaders(); headers.set("Authorization", getToken()); HttpEntity httpEntity = new HttpEntity<>(headers); ResponseEntity exchange = restTemplate.exchange(PLSUtil.BAKEADDR.get(Jurisdiction.getCORPINFO_ID()) + "/region/region/list?pageNum=" + currentPage + "&pageSize=" + showCount + "&str=" + keywords + "&type=0", HttpMethod.GET, httpEntity, JSONObject.class); return exchange.getBody(); } @PostConstruct private void initBakeAddr() throws Exception { List dataList = corpplsinfoService.listAll(new PageData()); dataList.forEach(item -> { BAKEADDR.put(item.getString("CORPINFO_ID"), item.getString("POST_URL")); }); } /** * @Description: 获取token * @Author: dearLin * @Date: 2024/1/24/024 9:59 * @Param: [] [] * @Return: java.lang.String */ public static String getToken() throws Exception { PageData pd = new PageData(); pd.put("CORPINFO_ID", Jurisdiction.getCORPINFO_ID()); pd = corpplsinfoService.findById(pd); String token = pd.getString("TOKEN"); String backAddr = pd.getString("POST_URL"); String expireTime = pd.getString("EXPIRE_TIME"); String userName = pd.getString("ACCOUNT"); String passWord = pd.getString("PASSWORD"); String loginUrl = pd.getString("POST_URL") + "/auth/login"; if (token == null || expireTime == null || expireTime.trim().isEmpty() || DateUtil.compareDate(DateUtil.getTime(), expireTime)) { JSONObject loginPayload = new JSONObject(); loginPayload.put("username", userName); loginPayload.put("password", passWord); loginPayload.put("isPresentationMode", "2"); PageData response = sendPostHttpRequest(loginUrl, loginPayload.toJSONString(), null); if (response != null) { PageData valueData = JSONObject.parseObject(response.getString("data"), PageData.class); token = valueData.getString("access_token"); String newExpireTime = DateUtil.getAfterHourDate("12"); pd.put("TOKEN", token); pd.put("EXPIRE_TIME", newExpireTime); corpplsinfoService.edit(pd); return token; } else { System.out.println("登录失败"); } } return token; } /** * @Description: 查询这个人的定位卡号是否存在 * @Author: dearLin * @Date: 2024/1/24/024 10:00 * @Param: [com.zcloud.entity.PageData] [user] * @Return: void */ public static boolean hasCardNumber(PageData user) throws Exception { // 根据 定位卡号获取对应的人 String url = BAKEADDR.get(Jurisdiction.getCORPINFO_ID()) + "/deploy/card/peopleDisplay/" + user.getString("CARDNO"); PageData response = sendGetHttpRequest(url, null, getToken()); if (response != null) { if (!"200".equals(response.getString("code"))) { return false; } List dataList = JSONObject.parseArray(response.getString("data"), PageData.class); return dataList.isEmpty(); } return false; } /** * @Description: 查询这个人的定位卡号是否存在 * @Author: dearLin * @Date: 2024/1/24/024 10:00 * @Param: [com.zcloud.entity.PageData] [user] * @Return: void */ public static PageData getCardNumberPeople(PageData user) throws Exception { // 根据 定位卡号获取对应的人 String url = BAKEADDR.get(Jurisdiction.getCORPINFO_ID()) + "/deploy/card/peopleDisplay/" + user.getString("CARDNO"); PageData response = sendGetHttpRequest(url, null, getToken()); if (response != null) { if (!"200".equals(response.getString("code"))) { return null; } List dataList = JSONObject.parseArray(response.getString("data"), PageData.class); return dataList.size() > 0 ? dataList.get(0) : null; } return null; } /** * @Description: 把人新增到 人员定位系统 * @Author: dearLin * @Date: 2024/1/24/024 10:00 * @Param: [com.zcloud.entity.PageData] [user] * @Return: void */ public static boolean saveUser(PageData user) throws Exception { String url = BAKEADDR.get(Jurisdiction.getCORPINFO_ID()) + "/deploy/psnmgt/insertPsnIfon"; JSONObject loginPayload = new JSONObject(); loginPayload.put("name", user.getString("NAME")); loginPayload.put("cardNo", user.getString("CARDNO")); loginPayload.put("empNo", ""); loginPayload.put("sex", ""); loginPayload.put("certType", ""); loginPayload.put("certNo", ""); loginPayload.put("office", ""); loginPayload.put("staffType", ""); loginPayload.put("phone", ""); loginPayload.put("empId", ""); loginPayload.put("age", ""); loginPayload.put("addr", ""); loginPayload.put("remark", ""); loginPayload.put("enterpriseName", ""); loginPayload.put("officeName", ""); loginPayload.put("jobsName", ""); loginPayload.put("deptName", ""); loginPayload.put("deptId", ""); loginPayload.put("avatar", ""); PageData response = sendPostHttpRequest(url, loginPayload.toJSONString(), getToken()); return "200".equals(response.getString("code")); } /** * @Description: 把人新增到 人员定位系统 * @Author: dearLin * @Date: 2024/1/24/024 10:00 * @Param: [com.zcloud.entity.PageData] [user] * @Return: void */ public static boolean editUser(PageData user) throws Exception { String url = BAKEADDR.get(Jurisdiction.getCORPINFO_ID()) + "/deploy/psnmgt/updPsnInfoById"; JSONObject loginPayload = new JSONObject(); loginPayload.put("name", user.getString("NAME")); loginPayload.put("psnId", user.getString("PLS_ID")); loginPayload.put("cardNo", user.getString("CARDNO")); loginPayload.put("empNo", ""); loginPayload.put("sex", ""); loginPayload.put("certType", ""); loginPayload.put("certNo", ""); loginPayload.put("office", ""); loginPayload.put("staffType", ""); loginPayload.put("phone", ""); loginPayload.put("empId", ""); loginPayload.put("age", ""); loginPayload.put("addr", ""); loginPayload.put("remark", ""); loginPayload.put("enterpriseName", ""); loginPayload.put("officeName", ""); loginPayload.put("jobsName", ""); loginPayload.put("deptName", ""); loginPayload.put("deptId", ""); loginPayload.put("avatar", ""); PageData response = sendPostHttpRequest(url, loginPayload.toJSONString(), getToken()); return "200".equals(response.getString("code")); } public static boolean removeUser(PageData user) throws Exception { String url = BAKEADDR.get(Jurisdiction.getCORPINFO_ID()) + "/deploy/psnmgt"; PageData removeUser = usersService.findById(user); PageData response = sendDeleteHttpRequest(url, Long.parseLong(removeUser.getString("PLS_ID")), getToken()); return "200".equals(response.getString("code")); } /** * 发送get类型请求 * * @param url * @param queryParams * @param token * @return PageData * @throws IOException */ private static PageData sendGetHttpRequest(String url, Map queryParams, String token) throws IOException { OkHttpClient client = new OkHttpClient(); HttpUrl.Builder httpBuilder = Objects.requireNonNull(HttpUrl.parse(url)).newBuilder(); //封装请求参数 if (queryParams != null) { for (Map.Entry param : queryParams.entrySet()) { httpBuilder.addQueryParameter(param.getKey(), param.getValue()); } } //设置请求的url Request.Builder requestBuilder = new Request.Builder() .url(httpBuilder.build()); if (token != null && !token.isEmpty()) { requestBuilder.addHeader("Authorization", "Bearer " + token); } Request request = requestBuilder.build(); Response execute = client.newCall(request).execute(); if (execute.code() != 200) { logger.error("get请求失败,返回状态码:{},url:{}", execute.code(), url); throw new RuntimeException("get请求失败"); } return JSONObject.parseObject(execute.body().string(), PageData.class); //发送请求并返回响应数据 } /** * 发送post类型请求 * * @param url * @param jsonPayload * @param token * @return * @throws IOException */ private static PageData sendPostHttpRequest(String url, String jsonPayload, String token) throws IOException { OkHttpClient client = new OkHttpClient(); MediaType JSON = MediaType.parse("application/json; charset=utf-8"); RequestBody body = RequestBody.create(JSON, jsonPayload); Request.Builder builder = new Request.Builder() // 构建一个新的Request对象。 .url(url)// 设置请求的URL。 .post(body);// 设置请求的方法为POST,并设置请求体。 //构建请求头 if (token != null && !token.isEmpty()) {// 检查token是否存在且不为空。 builder.addHeader("Authorization", "Bearer " + token); } // 构建请求 Request request = builder.build(); Response execute = client.newCall(request).execute(); if (execute.code() != 200) { logger.error("post请求失败,返回状态码:{},url:{}", execute.code(), url); throw new RuntimeException("get请求失败"); } PageData pageData = JSONObject.parseObject(execute.body().string(), PageData.class); if (!"200".equals(pageData.getString("code"))) { logger.error("post请求失败,返回值:{},url:{}", pageData.getString("msg"), url); } return pageData; //发起请求并响应数据 } /** * 发送PUT类型请求 * * @param url * @param jsonPayload * @param token * @return * @throws IOException */ private static Response sendPutHttpRequest(String url, String jsonPayload, String token) throws IOException { OkHttpClient client = new OkHttpClient(); MediaType JSON = MediaType.parse("application/json; charset=utf-8"); RequestBody body = RequestBody.create(JSON, jsonPayload); Request.Builder builder = new Request.Builder() .url(url) .put(body); if (token != null && !token.isEmpty()) { builder.addHeader("Authorization", "Bearer " + token); } Request request = builder.build(); return client.newCall(request).execute(); } /** * 发送delete类型请求 * * @param url * @param camIds * @param token * @return * @throws IOException */ private static PageData sendDeleteHttpRequest(String url,Long camIds, String token) throws IOException { OkHttpClient client = new OkHttpClient(); //将要删除的Id列表转换为逗号分隔的字符串 //构建完整的url url = url + "/" + camIds; Request.Builder builderBuilder = new Request.Builder() .url(url) .delete(); if (token != null && !token.isEmpty()) { builderBuilder.addHeader("Authorization", "Bearer " + token); } Request request = builderBuilder.build(); Response execute = client.newCall(request).execute(); if (execute.code() != 200) { logger.error("post请求失败,返回状态码:{},url:{}", execute.code(), url); throw new RuntimeException("get请求失败"); } PageData pageData = JSONObject.parseObject(execute.body().string(), PageData.class); if (!"200".equals(pageData.getString("code"))) { logger.error("post请求失败,返回值:{},url:{}", pageData.getString("msg"), url); } return pageData; } }