DataUtil.java 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714
  1. package com.xjrsoft.module.hikvision.util;
  2. import cn.hutool.db.Entity;
  3. import com.google.gson.JsonArray;
  4. import com.google.gson.JsonElement;
  5. import com.google.gson.JsonObject;
  6. import com.google.gson.JsonParser;
  7. import com.xjrsoft.common.mybatis.SqlRunnerAdapter;
  8. import com.xjrsoft.common.utils.SqlRunnerAdapterUtil;
  9. import com.xjrsoft.module.base.entity.BaseGrade;
  10. import com.xjrsoft.module.hikvision.entity.HikvisionData;
  11. import com.xjrsoft.module.hikvision.mapper.HikvisionDataMapper;
  12. import com.xjrsoft.module.organization.entity.Department;
  13. import com.xjrsoft.module.personnel.entity.CarMessageApply;
  14. import lombok.extern.slf4j.Slf4j;
  15. import java.text.SimpleDateFormat;
  16. import java.util.ArrayList;
  17. import java.util.Date;
  18. import java.util.HashMap;
  19. import java.util.HashSet;
  20. import java.util.List;
  21. import java.util.Map;
  22. import java.util.Set;
  23. /**
  24. * @author dzx
  25. * @date 2024/5/10
  26. */
  27. @Slf4j
  28. public class DataUtil {
  29. /**
  30. * 同步组织数据
  31. * 只有批量添加接口,需要一个层级一个层级的添加
  32. */
  33. public Map<String, String> insertDepartment(String tableName, Map<String, String> tableData) {
  34. String sql = "SELECT DISTINCT LENGTH(hierarchy) FROM " + tableName + " WHERE delete_mark = 0";
  35. List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql, Integer[].class);
  36. Set<Integer> levelSet = new HashSet<>();
  37. for (Map<String, Object> strings : list) {
  38. Integer[] strings1 = SqlRunnerAdapterUtil.convertMapToIntegerArray(strings);
  39. levelSet.add(strings1[0]);
  40. }
  41. sql = "SELECT * FROM " + tableName + " WHERE delete_mark = 0 ORDER BY LENGTH(hierarchy)";
  42. List<Map<String, Object>> dataList = SqlRunnerAdapter.db().selectList(sql, Department.class);
  43. String apiPath = "/api/resource/v1/org/batch/add";
  44. Map<String, String> idMap = new HashMap<>();
  45. JsonParser jsonParser = new JsonParser();
  46. ApiUtil apiUtil = new ApiUtil();
  47. Map<String, String> idCodeMap = new HashMap<>();
  48. for (Integer level : levelSet) {
  49. JsonArray dataArray = new JsonArray();
  50. for (Map<String, Object> department : dataList) {
  51. if (tableData != null && tableData.containsKey(department.get("id").toString())) {
  52. continue;
  53. }
  54. if (department.get("hierarchy").toString().length() == level) {
  55. JsonObject paramJson = new JsonObject();
  56. paramJson.addProperty("clientId", department.get("code").toString());
  57. paramJson.addProperty("orgIndexCode", department.get("id").toString());
  58. paramJson.addProperty("orgName", department.get("name").toString());
  59. paramJson.addProperty("parentIndexCode", department.get("parent_id").toString());
  60. if (Long.parseLong(department.get("parent_id").toString()) == 0) {
  61. paramJson.addProperty("parentIndexCode", "root000000");
  62. }
  63. paramJson.addProperty("orgCode", department.get("code").toString());
  64. dataArray.add(paramJson);
  65. idCodeMap.put(department.get("code").toString(), department.get("id").toString());
  66. }
  67. }
  68. String result = apiUtil.doPost(apiPath, dataArray.toString(), null, null);
  69. JsonElement parse = jsonParser.parse(result);
  70. JsonObject resultJson = parse.getAsJsonObject();
  71. if ("0".equals(resultJson.get("code").getAsString()) && "success".equals(resultJson.get("msg").getAsString())) {
  72. JsonArray array = resultJson.get("data").getAsJsonObject().get("successes").getAsJsonArray();
  73. for (JsonElement jsonElement : array) {
  74. JsonObject jsonObject = jsonElement.getAsJsonObject();
  75. idMap.put(idCodeMap.get(jsonObject.get("clientId").getAsString()), jsonObject.get("orgIndexCode").getAsString());
  76. }
  77. }
  78. }
  79. //插入记录表
  80. insertRecord(tableName, idMap);
  81. return idMap;
  82. }
  83. /**
  84. * 推送学生班级信息
  85. */
  86. public Map<String, String> insertClass(String tableName, Map<String, String> tableData) {
  87. ApiUtil apiUtil = new ApiUtil();
  88. JsonParser jsonParser = new JsonParser();
  89. //先查询海康中存在的组织id
  90. // Set<Integer> orgCodeList = new HashSet<>();
  91. // String listApiPath = "/api/resource/v1/org/orgList";
  92. // JsonObject paramsJson = new JsonObject();
  93. // paramsJson.addProperty("pageNo", 1);
  94. // paramsJson.addProperty("pageSize", 1000);
  95. // String orgData = apiUtil.doPost(listApiPath, paramsJson.toString(), null, null);
  96. // JsonArray orgDataArray = jsonParser.parse(orgData).getAsJsonObject().get("data").getAsJsonObject().get("list").getAsJsonArray();
  97. // for (JsonElement jsonElement : orgDataArray) {
  98. // JsonObject orgJson = jsonElement.getAsJsonObject();
  99. // orgCodeList.add(orgJson.get("orgNo").getAsInt());
  100. // }
  101. Map<String, String> idMap = new HashMap<>();
  102. //1、查询字典,将走读住读、班级类型先推送过去
  103. String sql = "SELECT * FROM xjr_dictionary_detail WHERE delete_mark = 0 AND item_id = 2023000000000000030";
  104. List<Map<String, Object>> detailList = SqlRunnerAdapter.db().selectList(sql);
  105. String apiPath = "/api/resource/v1/org/batch/add";
  106. int clientId = 1;
  107. Map<Integer, String> idCodeMap = new HashMap<>();
  108. JsonArray dataArray = new JsonArray();
  109. Set<String> stduyStatus = new HashSet<>();
  110. for (Map<String, Object> dict : detailList) {
  111. if (tableData != null && tableData.containsKey(dict.get("id").toString())) {
  112. stduyStatus.add(dict.get("id").toString());
  113. continue;
  114. }
  115. JsonObject paramJson = new JsonObject();
  116. paramJson.addProperty("clientId", clientId);
  117. paramJson.addProperty("orgIndexCode", dict.get("code").toString());
  118. paramJson.addProperty("orgName", dict.get("name").toString() + "学生");
  119. paramJson.addProperty("parentIndexCode", "root000000");
  120. paramJson.addProperty("orgCode", dict.get("code").toString());
  121. dataArray.add(paramJson);
  122. idCodeMap.put(clientId, dict.get("code").toString());
  123. clientId++;
  124. }
  125. String result = apiUtil.doPost(apiPath, dataArray.toString(), null, null);
  126. JsonElement parse = jsonParser.parse(result);
  127. JsonObject resultJson = parse.getAsJsonObject();
  128. if ("0".equals(resultJson.get("code").getAsString()) && "success".equals(resultJson.get("msg").getAsString())) {
  129. JsonArray array = resultJson.get("data").getAsJsonObject().get("successes").getAsJsonArray();
  130. for (JsonElement jsonElement : array) {
  131. JsonObject jsonObject = jsonElement.getAsJsonObject();
  132. idMap.put(idCodeMap.get(jsonObject.get("clientId").getAsInt()), jsonObject.get("orgIndexCode").getAsString());
  133. stduyStatus.add(jsonObject.get("orgIndexCode").getAsString());
  134. }
  135. }
  136. if (stduyStatus.isEmpty()) {
  137. for (Map<String, Object> dict : detailList) {
  138. stduyStatus.add(dict.get("code").toString());
  139. }
  140. }
  141. //推送班级类型
  142. sql = "SELECT * FROM xjr_dictionary_detail WHERE delete_mark = 0 AND item_id = 2023000000000000039";
  143. List<Map<String, Object>> classTypeList = SqlRunnerAdapter.db().selectList(sql);
  144. dataArray = new JsonArray();
  145. Set<String> classTypeSet = new HashSet<>();
  146. for (String status : stduyStatus) {
  147. for (Map<String, Object> dict : classTypeList) {
  148. if (tableData != null && tableData.containsKey(dict.get("code").toString() + "-" + status)) {
  149. classTypeSet.add(dict.get("code").toString() + "-" + status);
  150. continue;
  151. }
  152. JsonObject paramJson = new JsonObject();
  153. paramJson.addProperty("clientId", clientId);
  154. paramJson.addProperty("orgIndexCode", dict.get("code").toString() + "-" + status);
  155. paramJson.addProperty("orgName", dict.get("name").toString());
  156. paramJson.addProperty("parentIndexCode", status);
  157. paramJson.addProperty("orgCode", dict.get("code").toString());
  158. dataArray.add(paramJson);
  159. idCodeMap.put(clientId, dict.get("code").toString() + "-" + status);
  160. clientId++;
  161. }
  162. }
  163. result = apiUtil.doPost(apiPath, dataArray.toString(), null, null);
  164. parse = jsonParser.parse(result);
  165. resultJson = parse.getAsJsonObject();
  166. if ("0".equals(resultJson.get("code").getAsString()) && "success".equals(resultJson.get("msg").getAsString())) {
  167. JsonArray array = resultJson.get("data").getAsJsonObject().get("successes").getAsJsonArray();
  168. for (JsonElement jsonElement : array) {
  169. JsonObject jsonObject = jsonElement.getAsJsonObject();
  170. idMap.put(idCodeMap.get(jsonObject.get("clientId").getAsInt()), jsonObject.get("orgIndexCode").getAsString());
  171. classTypeSet.add(jsonObject.get("orgIndexCode").getAsString());
  172. }
  173. }
  174. //推送年级
  175. sql = "SELECT * FROM base_grade WHERE delete_mark = 0 AND status = 1";
  176. List<Map<String, Object>> gradeList = SqlRunnerAdapter.db().selectList(sql, BaseGrade.class);
  177. Map<Long, String> gradeNameMap = new HashMap<>();
  178. dataArray = new JsonArray();
  179. for (String classType : classTypeSet) {
  180. for (Map<String, Object> baseGrade : gradeList) {
  181. gradeNameMap.put(Long.parseLong(baseGrade.get("id").toString()), baseGrade.get("name").toString().replaceAll("级", ""));
  182. if (tableData != null && tableData.containsKey(baseGrade.get("name").toString().replaceAll("级", "") + "-" + classType)) {
  183. continue;
  184. }
  185. JsonObject paramJson = new JsonObject();
  186. paramJson.addProperty("clientId", clientId);
  187. paramJson.addProperty("orgIndexCode", baseGrade.get("name").toString().replaceAll("级", "") + "-" + classType);
  188. paramJson.addProperty("orgName", baseGrade.get("name").toString());
  189. paramJson.addProperty("parentIndexCode", classType);
  190. // paramJson.addProperty("orgCode", clientId);
  191. dataArray.add(paramJson);
  192. idCodeMap.put(clientId, baseGrade.get("name").toString().replaceAll("级", "") + "-" + classType);
  193. clientId++;
  194. }
  195. }
  196. result = apiUtil.doPost(apiPath, dataArray.toString(), null, null);
  197. parse = jsonParser.parse(result);
  198. Set<String> gradeSet = new HashSet<>();
  199. resultJson = parse.getAsJsonObject();
  200. if ("0".equals(resultJson.get("code").getAsString()) && "success".equals(resultJson.get("msg").getAsString())) {
  201. JsonArray array = resultJson.get("data").getAsJsonObject().get("successes").getAsJsonArray();
  202. for (JsonElement jsonElement : array) {
  203. JsonObject jsonObject = jsonElement.getAsJsonObject();
  204. idMap.put(idCodeMap.get(jsonObject.get("clientId").getAsInt()), jsonObject.get("orgIndexCode").getAsString());
  205. gradeSet.add(jsonObject.get("orgIndexCode").getAsString());
  206. }
  207. } else {
  208. sql = "select * from hikvision_data where table_name = 'base_grade'";
  209. List<Map<String, Object>> gradeDataList = SqlRunnerAdapter.db().selectList(sql);
  210. for (Map<String, Object> objectMap : gradeDataList) {
  211. gradeSet.add(objectMap.get("hikvision_id").toString());
  212. }
  213. }
  214. //推送班级
  215. sql = "SELECT CONCAT(t1.id,'-',REPLACE(t2.name,'级',''),'-',t1.class_type) AS id,t1.name,t1.class_type," +
  216. " CONCAT(REPLACE(t2.name,'级',''),'-',t1.class_type) as orgIndexCode FROM base_class t1" +
  217. " INNER JOIN base_grade t2 ON t1.grade_id = t2.id" +
  218. " WHERE t1.delete_mark = 0 AND t1.is_graduate = 1" +
  219. " AND t1.class_type IS NOT NULL";
  220. List<Map<String, Object>> classList = SqlRunnerAdapter.db().selectList(sql);
  221. dataArray = new JsonArray();
  222. for (String stduyStatu : stduyStatus) {
  223. for (Map<String, Object> baseClass : classList) {
  224. if (tableData != null && tableData.containsKey(baseClass.get("id").toString() + "-" + stduyStatu)) {
  225. continue;
  226. }
  227. JsonObject paramJson = new JsonObject();
  228. paramJson.addProperty("clientId", clientId);
  229. paramJson.addProperty("orgIndexCode", baseClass.get("id").toString() + "-" + stduyStatu);
  230. paramJson.addProperty("orgName", baseClass.get("name").toString());
  231. paramJson.addProperty("parentIndexCode", baseClass.get("orgIndexCode").toString() + "-" + stduyStatu);
  232. // paramJson.addProperty("orgCode", baseClass.get("id").toString() + "-" + stduyStatu);
  233. dataArray.add(paramJson);
  234. idCodeMap.put(clientId, baseClass.get("orgIndexCode").toString() + "-" + stduyStatu);
  235. clientId++;
  236. }
  237. }
  238. result = apiUtil.doPost(apiPath, dataArray.toString(), null, null);
  239. parse = jsonParser.parse(result);
  240. resultJson = parse.getAsJsonObject();
  241. if ("0".equals(resultJson.get("code").getAsString()) && "success".equals(resultJson.get("msg").getAsString())) {
  242. JsonArray array = resultJson.get("data").getAsJsonObject().get("successes").getAsJsonArray();
  243. for (JsonElement jsonElement : array) {
  244. JsonObject jsonObject = jsonElement.getAsJsonObject();
  245. idMap.put(idCodeMap.get(jsonObject.get("clientId").getAsInt()), jsonObject.get("orgIndexCode").getAsString());
  246. }
  247. }
  248. //插入记录表
  249. insertRecord(tableName, idMap);
  250. return idMap;
  251. }
  252. public Map<String, String> insertStudentOne(String tableName, Map<String, String> tableData, List<HikvisionData> studentList) throws InterruptedException {
  253. return insertStudentOne(tableName, tableData, studentList, null);
  254. }
  255. public Map<String, String> insertStudentOne(String tableName, Map<String, String> tableData, List<HikvisionData> studentList, Long userId) throws InterruptedException {
  256. String sql = "SELECT t1.id,t1.name,CONCAT(t3.id,'-',replace(t4.name,'级',''),'-',t3.class_type,'-',t2.stduy_status) as orgIndexCode," +
  257. " t1.user_name,t1.gender,DATE_FORMAT(t1.birth_date, '%Y-%m-%d') as birthday,t1.mobile,t1.email,t1.credential_type,t1.credential_number FROM xjr_user t1" +
  258. " INNER JOIN base_student_school_roll t2 ON t1.id = t2.user_id" +
  259. " INNER JOIN base_class t3 ON t2.class_id = t3.id" +
  260. " INNER JOIN base_grade t4 ON t3.grade_id = t4.id" +
  261. " WHERE t1.delete_mark = 0 AND t2.delete_mark = 0" +
  262. " AND t3.class_type IS NOT NULL AND t3.is_graduate = 1";
  263. if (userId != null) {
  264. sql += " and t1.id = " + userId;
  265. }
  266. List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql, String[].class);
  267. Map<Integer, String> clientMap = new HashMap<>();
  268. List<Entity> insertList = new ArrayList<>();
  269. Map<String, String> historyMap = new HashMap<>();
  270. for (HikvisionData hikvisionData : studentList) {
  271. historyMap.put(hikvisionData.getSourceId(), hikvisionData.getSendData());
  272. }
  273. Map<String, String> idMap = new HashMap<>();
  274. JsonParser jsonParser = new JsonParser();
  275. ApiUtil apiUtil = new ApiUtil();
  276. Map<String, String> header = new HashMap<>();
  277. header.put("tagId", "insert_student");
  278. List<JsonObject> addList = new ArrayList<>();
  279. List<JsonObject> updateList = new ArrayList<>();
  280. for (int i = 0; i < list.size(); i++) {
  281. Map<String, Object> objectMap = list.get(i);
  282. String id = objectMap.get("id").toString();
  283. JsonObject paramJson = new JsonObject();
  284. // paramJson.addProperty("clientId", i);
  285. paramJson.addProperty("personId", id);
  286. paramJson.addProperty("personName", objectMap.get("name").toString());
  287. paramJson.addProperty("orgIndexCode", objectMap.get("orgIndexCode").toString());
  288. paramJson.addProperty("phoneNo", objectMap.get("mobile") == null ? "" : objectMap.get("mobile").toString());
  289. paramJson.addProperty("jobNo", objectMap.get("user_name").toString());
  290. paramJson.addProperty("birthday", objectMap.get("birthday") == null ? "" : objectMap.get("birthday").toString());
  291. paramJson.addProperty("personType", 2);
  292. int gender = 0;
  293. String genderData = objectMap.get("gender") == null ? "" : objectMap.get("gender").toString();
  294. switch (genderData) {
  295. case "SB10001":
  296. gender = 1;
  297. break;
  298. case "SB10002":
  299. gender = 2;
  300. break;
  301. default:
  302. gender = 0;
  303. break;
  304. }
  305. paramJson.addProperty("gender", gender);
  306. if (historyMap.containsKey(id)) {
  307. if (!paramJson.toString().equals(historyMap.get(id))) {
  308. paramJson.addProperty("personId", tableData.get(id));
  309. updateList.add(paramJson);
  310. }
  311. continue;
  312. }
  313. addList.add(paramJson);
  314. }
  315. String apiPath = "/api/resource/v1/person/single/add";
  316. SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
  317. for (JsonObject paramJson : addList) {
  318. String result = apiUtil.doPost(apiPath, paramJson.toString(), null, header);
  319. JsonElement parse = jsonParser.parse(result);
  320. JsonObject resultJson = parse.getAsJsonObject();
  321. if ("0".equals(resultJson.get("code").getAsString()) && "success".equals(resultJson.get("msg").getAsString())) {
  322. Entity entity = Entity.create(tableName);
  323. entity.set("table_name", tableName);
  324. entity.set("create_date", sdf.format(new Date()));
  325. // entity.set("source_id", clientMap.get(paramJson.get("clientId").getAsInt()));
  326. entity.set("source_id", paramJson.get("personId").getAsString());
  327. entity.set("hikvision_id", paramJson.get("personId").getAsString());
  328. entity.set("send_data", paramJson.toString());
  329. insertList.add(entity);
  330. } else if ("0x00052102".equals(resultJson.get("code").getAsString()) && "PersonId Already In Db".equals(resultJson.get("msg").getAsString())) {
  331. Entity entity = Entity.create(tableName);
  332. entity.set("table_name", tableName);
  333. entity.set("create_date", sdf.format(new Date()));
  334. entity.set("source_id", paramJson.get("personId").getAsString());
  335. entity.set("hikvision_id", paramJson.get("personId").getAsString());
  336. entity.set("send_data", paramJson.toString());
  337. insertList.add(entity);
  338. }
  339. }
  340. tableName = "hikvision_data";
  341. if (!insertList.isEmpty()) {
  342. SqlRunnerAdapter.db().dynamicInsertBatch(tableName, insertList);
  343. }
  344. apiPath = "/api/resource/v1/person/single/update";
  345. for (JsonObject paramJson : updateList) {
  346. Thread.sleep(500);
  347. String result = apiUtil.doPost(apiPath, paramJson.toString(), null, header);
  348. JsonElement parse = jsonParser.parse(result);
  349. JsonObject resultJson = parse.getAsJsonObject();
  350. if ("0".equals(resultJson.get("code").getAsString()) && "success".equals(resultJson.get("msg").getAsString())) {
  351. Entity entity = Entity.create(tableName);
  352. entity.set("send_data", paramJson.toString());
  353. Entity where = Entity.create(tableName);
  354. where.set("hikvision_id", paramJson.get("personId").getAsString());
  355. SqlRunnerAdapter.db().dynamicUpdate(tableName, entity, where);
  356. }
  357. }
  358. //插入记录表
  359. insertRecord(tableName, idMap);
  360. return idMap;
  361. }
  362. public Map<String, String> insertStudent(String tableName, Map<String, String> tableData) {
  363. String sql = "SELECT t1.id,t1.name,CONCAT(t3.id,'-',t4.name,'-',t3.class_type,'-',t2.stduy_status)," +
  364. " t1.user_name,t1.gender,t1.birth_date,t1.mobile,t1.email,t1.credential_type,t1.credential_number FROM xjr_user t1" +
  365. " INNER JOIN base_student_school_roll t2 ON t1.id = t2.user_id" +
  366. " INNER JOIN base_class t3 ON t2.class_id = t3.id" +
  367. " INNER JOIN base_grade t4 ON t3.grade_id = t4.id" +
  368. " WHERE t1.delete_mark = 0 AND t2.delete_mark = 0 AND t3.class_type IS NOT NULL ";
  369. List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql, String[].class);
  370. Map<Integer, String> clientMap = new HashMap<>();
  371. String apiPath = "/api/resource/v1/person/batch/add";
  372. Map<String, String> idMap = new HashMap<>();
  373. JsonParser jsonParser = new JsonParser();
  374. ApiUtil apiUtil = new ApiUtil();
  375. Map<String, String> header = new HashMap<>();
  376. header.put("tagId", "insert_student");
  377. int maxCount = 100;
  378. int frequency = list.size() / maxCount;
  379. for (int index = 0; index < frequency; index++) {
  380. JsonArray paramArray = new JsonArray();
  381. for (int i = (index * maxCount); i < ((index + 1) * maxCount); i++) {
  382. if (i >= list.size()) {
  383. continue;
  384. }
  385. String[] el = SqlRunnerAdapterUtil.convertMapToStringArray(list.get(i));
  386. if (tableData != null && tableData.containsKey(el[0])) {
  387. continue;
  388. }
  389. JsonObject paramJson = new JsonObject();
  390. paramJson.addProperty("clientId", i);
  391. paramJson.addProperty("personId", el[0]);
  392. paramJson.addProperty("personName", el[1]);
  393. paramJson.addProperty("orgIndexCode", el[2]);
  394. paramJson.addProperty("phoneNo", el[6]);
  395. paramJson.addProperty("jobNo", el[3]);
  396. paramJson.addProperty("birthday", el[5]);
  397. paramJson.addProperty("personType", 2);
  398. int gender;
  399. switch (el[4]) {
  400. case "SB10001":
  401. gender = 1;
  402. break;
  403. case "SB10002":
  404. gender = 2;
  405. break;
  406. default:
  407. gender = 0;
  408. break;
  409. }
  410. paramJson.addProperty("gender", gender);
  411. paramArray.add(paramJson);
  412. clientMap.put(i, el[0]);
  413. }
  414. String result = apiUtil.doPost(apiPath, paramArray.toString(), null, header);
  415. JsonElement parse = jsonParser.parse(result);
  416. JsonObject resultJson = parse.getAsJsonObject();
  417. if ("0".equals(resultJson.get("code").getAsString()) && "success".equals(resultJson.get("msg").getAsString())) {
  418. JsonArray array = resultJson.get("data").getAsJsonObject().get("successes").getAsJsonArray();
  419. for (JsonElement jsonElement : array) {
  420. JsonObject jsonObject = jsonElement.getAsJsonObject();
  421. idMap.put(clientMap.get(jsonObject.get("clientId").getAsInt()), jsonObject.get("personId").getAsString());
  422. }
  423. }
  424. }
  425. //插入记录表
  426. insertRecord(tableName, idMap);
  427. return idMap;
  428. }
  429. public Map<String, String> insertTeacher(String tableName, Map<String, String> tableData, Map<String, String> deptMap) {
  430. String sql = "SELECT t1.id,t1.name,t1.gender,t3.dept_id,t1.birth_date,t1.mobile,t1.email,t1.credential_type,t1.credential_number,t1.user_name FROM xjr_user t1" +
  431. " INNER JOIN " + tableName + " t2 ON t1.id = t2.user_id" +
  432. " INNER JOIN xjr_user_dept_relation t3 ON t1.id = t3.user_id" +
  433. " INNER JOIN xjr_department t4 ON t3.dept_id = t4.id " +
  434. " WHERE t1.delete_mark = 0 AND t2.delete_mark = 0 AND t4.delete_mark = 0";
  435. List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql, String[].class);
  436. JsonArray paramArray = new JsonArray();
  437. ApiUtil apiUtil = new ApiUtil();
  438. Map<Integer, String> clientMap = new HashMap<>();
  439. for (int i = 0; i < list.size(); i++) {
  440. Map<String, Object> objectMap = list.get(i);
  441. JsonObject paramJson = new JsonObject();
  442. paramJson.addProperty("clientId", i);
  443. paramJson.addProperty("personId", objectMap.get("id").toString());
  444. paramJson.addProperty("personName", objectMap.get("name").toString());
  445. paramJson.addProperty("orgIndexCode", objectMap.get("dept_id").toString());
  446. paramJson.addProperty("phoneNo", objectMap.get("mobile") == null ? "" : objectMap.get("mobile").toString());
  447. paramJson.addProperty("jobNo", objectMap.get("user_name").toString());
  448. paramJson.addProperty("birthday", objectMap.get("birth_date") == null ? "" : objectMap.get("birth_date").toString());
  449. paramJson.addProperty("personType", 1);
  450. int gender;
  451. String genderData = objectMap.get("gender") == null ? "" : objectMap.get("gender").toString();
  452. switch (genderData) {
  453. case "SB10001":
  454. gender = 1;
  455. break;
  456. case "SB10002":
  457. gender = 2;
  458. break;
  459. default:
  460. gender = 0;
  461. break;
  462. }
  463. paramJson.addProperty("gender", gender);
  464. if (tableData != null && tableData.containsKey(objectMap.get("id").toString())) {
  465. String apiPath = "/api/resource/v1/person/single/update";
  466. apiUtil.doPost(apiPath, paramJson.toString(), null);
  467. continue;
  468. }
  469. paramArray.add(paramJson);
  470. clientMap.put(i, objectMap.get("id").toString());
  471. }
  472. String apiPath = "/api/resource/v1/person/batch/add";
  473. Map<String, String> idMap = new HashMap<>();
  474. JsonParser jsonParser = new JsonParser();
  475. Map<String, String> header = new HashMap<>();
  476. header.put("tagId", "insert_teacher");
  477. String result = apiUtil.doPost(apiPath, paramArray.toString(), null, header);
  478. JsonElement parse = jsonParser.parse(result);
  479. JsonObject resultJson = parse.getAsJsonObject();
  480. if ("0".equals(resultJson.get("code").getAsString()) && "success".equals(resultJson.get("msg").getAsString())) {
  481. JsonArray array = resultJson.get("data").getAsJsonObject().get("successes").getAsJsonArray();
  482. for (JsonElement jsonElement : array) {
  483. JsonObject jsonObject = jsonElement.getAsJsonObject();
  484. idMap.put(clientMap.get(jsonObject.get("clientId").getAsInt()), jsonObject.get("personId").getAsString());
  485. }
  486. } else {
  487. }
  488. //插入记录表
  489. insertRecord(tableName, idMap);
  490. return idMap;
  491. }
  492. /*同步车辆数据*/
  493. public Map<Long, String> insertCar(String tableName, Map<String, String> tableData, HikvisionDataMapper hikvisionDataMapper) {
  494. String sql = "SELECT * FROM " + tableName + " WHERE delete_mark = 0 and status = 1";
  495. List<Map<String, Object>> dataList = SqlRunnerAdapter.db().selectList(sql, CarMessageApply.class);
  496. String apiPath = "/api/resource/v1/vehicle/batch/add";
  497. String apiPathTime = "/api/pms/v1/car/charge";
  498. Map<Long, String> idMap = new HashMap<>();
  499. JsonParser jsonParser = new JsonParser();
  500. ApiUtil apiUtil = new ApiUtil();
  501. Map<Integer, Long> clientMap = new HashMap<>();
  502. Map<String, String> tagMap = new HashMap<>();
  503. tagMap.put("tagId", "frs");
  504. String existingPlatesSql = "SELECT source_id FROM hikvision_data";
  505. List<Map<String, Object>> existingPlates = SqlRunnerAdapter.db().selectList(existingPlatesSql, String.class);
  506. JsonArray dataArray = new JsonArray();
  507. String result = null;
  508. int clientId = 1;
  509. for (Map<String, Object> carMap : dataList) {
  510. if (existingPlates.contains(carMap.get("id") + "")) {
  511. continue;
  512. }
  513. JsonObject paramJson = new JsonObject();
  514. paramJson.addProperty("clientId", clientId);
  515. paramJson.addProperty("plateNo", carMap.get("car_number").toString());
  516. paramJson.addProperty("personId", hikvisionDataMapper.getTeacherHikvisionId(Long.parseLong(carMap.get("user_id").toString())));
  517. int vehicleTypeNum;
  518. switch (carMap.get("vehicle_type").toString()) {
  519. case "小型车":
  520. vehicleTypeNum = 1;
  521. break;
  522. case "大型车":
  523. vehicleTypeNum = 2;
  524. break;
  525. case "摩托车":
  526. vehicleTypeNum = 3;
  527. break;
  528. default:
  529. vehicleTypeNum = 0;
  530. break;
  531. }
  532. paramJson.addProperty("vehicleType", vehicleTypeNum);
  533. clientMap.put(clientId, Long.parseLong(carMap.get("id").toString()));
  534. dataArray.add(paramJson);
  535. clientId++;
  536. }
  537. result = apiUtil.doPost(apiPath, dataArray.toString(), tagMap, null);
  538. for (Map<String, Object> carMap : dataList) {
  539. JsonObject paramJsonTime = new JsonObject();
  540. paramJsonTime.addProperty("parkSyscode", "c69f2a7c48a74216bcab7d65f24d4a09");
  541. paramJsonTime.addProperty("plateNo", carMap.get("car_number").toString());
  542. paramJsonTime.addProperty("startTime", carMap.get("start_time").toString());
  543. paramJsonTime.addProperty("endTime", carMap.get("end_time").toString());
  544. apiUtil.doPost(apiPathTime, String.valueOf(paramJsonTime), tagMap, null);
  545. }
  546. JsonElement parse = jsonParser.parse(result);
  547. JsonObject resultJson = parse.getAsJsonObject();
  548. if ("0".equals(resultJson.get("code").getAsString()) && "success".equals(resultJson.get("msg").getAsString())) {
  549. JsonArray array = resultJson.get("data").getAsJsonObject().get("successes").getAsJsonArray();
  550. for (JsonElement jsonElement : array) {
  551. JsonObject jsonObject = jsonElement.getAsJsonObject();
  552. int responseClientId = jsonObject.get("clientId").getAsInt();
  553. Long sourceId = clientMap.get(responseClientId);
  554. if (sourceId != null) {
  555. idMap.put(sourceId, jsonObject.get("vehicleId").getAsString());
  556. } else {
  557. System.err.println("No matching clientId found in clientMap for: " + responseClientId);
  558. }
  559. }
  560. insertRecord(tableName, idMap);
  561. } else {
  562. System.err.println("API call failed: " + resultJson.get("msg").getAsString());
  563. }
  564. return idMap;
  565. }
  566. void insertRecord(String tableName, Map<?, String> idsMap) {
  567. if (idsMap.isEmpty()) {
  568. return;
  569. }
  570. for (var entry : idsMap.entrySet()) {
  571. var sourceId = entry.getKey();
  572. String sql = "INSERT INTO hikvision_data(create_date, table_name, source_id, hikvision_id) " +
  573. "VALUES(now(), '" + tableName + "', '" + sourceId + "', '" + entry.getValue() + "')";
  574. SqlRunnerAdapter.db().insert(sql);
  575. }
  576. }
  577. // void insertRecord(Db db, String tableName, Map<Long, String> idsMap) throws SQLException {
  578. // if(idsMap.isEmpty()){
  579. // return;
  580. // }
  581. // List<String> sqls = new ArrayList<>();
  582. // for (Long sourceId : idsMap.keySet()) {
  583. // String sql = "INSERT INTO hikvision_data(create_date,table_name,source_id,hikvision_id) value(now(),'"
  584. // + tableName + "'," + sourceId + ",'" + idsMap.get(sourceId) + "')";
  585. // sqls.add(sql);
  586. // }
  587. // db.executeBatch(sqls);
  588. // };
  589. /**
  590. * 根据用用户id,删除海康人员信息
  591. *
  592. * @param userIds
  593. */
  594. public void deletePerson(List<Long> userIds) {
  595. JsonArray personIds = new JsonArray();
  596. for (Long userId : userIds) {
  597. String sql = "select * from hikvision_data where source_id = '" + userId + "'";
  598. List<Map<String, Object>> maps = SqlRunnerAdapter.db().selectList(sql);
  599. if (maps.isEmpty()) {
  600. continue;
  601. }
  602. for (Map<String, Object> map : maps) {
  603. personIds.add(map.get("hikvision_id").toString());
  604. }
  605. }
  606. String apiPath = "/api/resource/v1/person/batch/delete";
  607. ApiUtil apiUtil = new ApiUtil();
  608. JsonObject param = new JsonObject();
  609. param.add("personIds", personIds);
  610. String result = apiUtil.doPost(apiPath, param.toString(), null);
  611. log.info("海康人员删除:param:" + param + ",result:" + result);
  612. }
  613. public void deleteCar(List<CarMessageApply> carList) {
  614. ApiUtil apiUtil = new ApiUtil();
  615. String apiPath = "/api/resource/v2/vehicle/advance/vehicleList";
  616. JsonParser parser = new JsonParser();
  617. JsonArray vehicleIds = new JsonArray();
  618. for (CarMessageApply carMessageApply : carList) {
  619. JsonObject param = new JsonObject();
  620. param.addProperty("plateNo", carMessageApply.getCarNumber());
  621. String result = apiUtil.doPost(apiPath, param.toString(), null);
  622. JsonObject vehicleData = parser.parse(result).getAsJsonObject();
  623. if ("0".equals(vehicleData.get("code").getAsString()) && "success".equals(vehicleData.get("msg").getAsString())) {
  624. JsonObject dataJson = vehicleData.get("data").getAsJsonObject();
  625. if (dataJson.get("total").getAsInt() > 0) {
  626. JsonArray vehicleList = dataJson.get("list").getAsJsonArray();
  627. for (JsonElement jsonElement : vehicleList) {
  628. vehicleIds.add(jsonElement.getAsJsonObject().get("vehicleId"));
  629. }
  630. }
  631. }
  632. }
  633. if(vehicleIds.size() > 0){
  634. apiPath = "/api/resource/v1/vehicle/batch/delete";
  635. JsonObject param = new JsonObject();
  636. param.add("vehicleIds", vehicleIds);
  637. apiUtil.doPost(apiPath, param.toString(), null);
  638. }
  639. }
  640. }