DataUtil.java 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727
  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. updateList.add(paramJson);
  309. }
  310. continue;
  311. }
  312. addList.add(paramJson);
  313. // if(tableData != null && tableData.containsKey(id)){
  314. // apiPath = "/api/resource/v1/person/single/update";
  315. // apiUtil.doPost(apiPath, paramJson.toString(), null, header);
  316. // continue;
  317. // }
  318. //
  319. // clientMap.put(i, id);
  320. // String result = apiUtil.doPost(apiPath, paramJson.toString(), null, header);
  321. // JsonElement parse = jsonParser.parse(result);
  322. // JsonObject resultJson = parse.getAsJsonObject();
  323. // if("0".equals(resultJson.get("code").getAsString()) && "success".equals(resultJson.get("msg").getAsString())){
  324. // JsonObject array = resultJson.get("data").getAsJsonObject();
  325. // idMap.put(id, array.get("personId").getAsString());
  326. // }
  327. }
  328. String apiPath = "/api/resource/v1/person/single/add";
  329. SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
  330. for (JsonObject paramJson : addList) {
  331. String result = apiUtil.doPost(apiPath, paramJson.toString(), null, header);
  332. JsonElement parse = jsonParser.parse(result);
  333. JsonObject resultJson = parse.getAsJsonObject();
  334. if ("0".equals(resultJson.get("code").getAsString()) && "success".equals(resultJson.get("msg").getAsString())) {
  335. if ("0".equals(resultJson.get("code").getAsString()) && "success".equals(resultJson.get("msg").getAsString())) {
  336. Entity entity = Entity.create(tableName);
  337. entity.set("table_name", tableName);
  338. entity.set("create_date", sdf.format(new Date()));
  339. entity.set("source_id", clientMap.get(paramJson.get("clientId").getAsInt()));
  340. entity.set("hikvision_id", paramJson.get("personId").getAsString());
  341. entity.set("send_data", paramJson.toString());
  342. insertList.add(entity);
  343. } else if ("0x00052102".equals(resultJson.get("code").getAsString()) && "PersonId Already In Db".equals(resultJson.get("msg").getAsString())) {
  344. Entity entity = Entity.create(tableName);
  345. entity.set("table_name", tableName);
  346. entity.set("create_date", sdf.format(new Date()));
  347. entity.set("source_id", paramJson.get("personId").getAsString());
  348. entity.set("hikvision_id", paramJson.get("personId").getAsString());
  349. entity.set("send_data", paramJson.toString());
  350. insertList.add(entity);
  351. }
  352. }
  353. }
  354. if (!insertList.isEmpty()) {
  355. SqlRunnerAdapter.db().dynamicInsertBatch(tableName, insertList);
  356. }
  357. tableName = "hikvision_data";
  358. apiPath = "/api/resource/v1/person/single/update";
  359. for (JsonObject paramJson : updateList) {
  360. Thread.sleep(500);
  361. String result = apiUtil.doPost(apiPath, paramJson.toString(), null, header);
  362. JsonElement parse = jsonParser.parse(result);
  363. JsonObject resultJson = parse.getAsJsonObject();
  364. if ("0".equals(resultJson.get("code").getAsString()) && "success".equals(resultJson.get("msg").getAsString())) {
  365. Entity entity = Entity.create(tableName);
  366. entity.set("send_data", paramJson.toString());
  367. Entity where = Entity.create(tableName);
  368. where.set("source_id", paramJson.get("personId").getAsString());
  369. SqlRunnerAdapter.db().dynamicUpdate(tableName, entity, where);
  370. }
  371. }
  372. //插入记录表
  373. insertRecord(tableName, idMap);
  374. return idMap;
  375. }
  376. public Map<String, String> insertStudent(String tableName, Map<String, String> tableData) {
  377. String sql = "SELECT t1.id,t1.name,CONCAT(t3.id,'-',t4.name,'-',t3.class_type,'-',t2.stduy_status)," +
  378. " t1.user_name,t1.gender,t1.birth_date,t1.mobile,t1.email,t1.credential_type,t1.credential_number FROM xjr_user t1" +
  379. " INNER JOIN base_student_school_roll t2 ON t1.id = t2.user_id" +
  380. " INNER JOIN base_class t3 ON t2.class_id = t3.id" +
  381. " INNER JOIN base_grade t4 ON t3.grade_id = t4.id" +
  382. " WHERE t1.delete_mark = 0 AND t2.delete_mark = 0 AND t3.class_type IS NOT NULL ";
  383. List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql, String[].class);
  384. Map<Integer, String> clientMap = new HashMap<>();
  385. String apiPath = "/api/resource/v1/person/batch/add";
  386. Map<String, String> idMap = new HashMap<>();
  387. JsonParser jsonParser = new JsonParser();
  388. ApiUtil apiUtil = new ApiUtil();
  389. Map<String, String> header = new HashMap<>();
  390. header.put("tagId", "insert_student");
  391. int maxCount = 100;
  392. int frequency = list.size() / maxCount;
  393. for (int index = 0; index < frequency; index++) {
  394. JsonArray paramArray = new JsonArray();
  395. for (int i = (index * maxCount); i < ((index + 1) * maxCount); i++) {
  396. if (i >= list.size()) {
  397. continue;
  398. }
  399. String[] el = SqlRunnerAdapterUtil.convertMapToStringArray(list.get(i));
  400. if (tableData != null && tableData.containsKey(el[0])) {
  401. continue;
  402. }
  403. JsonObject paramJson = new JsonObject();
  404. paramJson.addProperty("clientId", i);
  405. paramJson.addProperty("personId", el[0]);
  406. paramJson.addProperty("personName", el[1]);
  407. paramJson.addProperty("orgIndexCode", el[2]);
  408. paramJson.addProperty("phoneNo", el[6]);
  409. paramJson.addProperty("jobNo", el[3]);
  410. paramJson.addProperty("birthday", el[5]);
  411. paramJson.addProperty("personType", 2);
  412. int gender;
  413. switch (el[4]) {
  414. case "SB10001":
  415. gender = 1;
  416. break;
  417. case "SB10002":
  418. gender = 2;
  419. break;
  420. default:
  421. gender = 0;
  422. break;
  423. }
  424. paramJson.addProperty("gender", gender);
  425. paramArray.add(paramJson);
  426. clientMap.put(i, el[0]);
  427. }
  428. String result = apiUtil.doPost(apiPath, paramArray.toString(), null, header);
  429. JsonElement parse = jsonParser.parse(result);
  430. JsonObject resultJson = parse.getAsJsonObject();
  431. if ("0".equals(resultJson.get("code").getAsString()) && "success".equals(resultJson.get("msg").getAsString())) {
  432. JsonArray array = resultJson.get("data").getAsJsonObject().get("successes").getAsJsonArray();
  433. for (JsonElement jsonElement : array) {
  434. JsonObject jsonObject = jsonElement.getAsJsonObject();
  435. idMap.put(clientMap.get(jsonObject.get("clientId").getAsInt()), jsonObject.get("personId").getAsString());
  436. }
  437. }
  438. }
  439. //插入记录表
  440. insertRecord(tableName, idMap);
  441. return idMap;
  442. }
  443. public Map<String, String> insertTeacher(String tableName, Map<String, String> tableData, Map<String, String> deptMap) {
  444. 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" +
  445. " INNER JOIN " + tableName + " t2 ON t1.id = t2.user_id" +
  446. " INNER JOIN xjr_user_dept_relation t3 ON t1.id = t3.user_id" +
  447. " INNER JOIN xjr_department t4 ON t3.dept_id = t4.id " +
  448. " WHERE t1.delete_mark = 0 AND t2.delete_mark = 0 AND t4.delete_mark = 0";
  449. List<Map<String, Object>> list = SqlRunnerAdapter.db().selectList(sql, String[].class);
  450. JsonArray paramArray = new JsonArray();
  451. ApiUtil apiUtil = new ApiUtil();
  452. Map<Integer, String> clientMap = new HashMap<>();
  453. for (int i = 0; i < list.size(); i++) {
  454. Map<String, Object> objectMap = list.get(i);
  455. JsonObject paramJson = new JsonObject();
  456. paramJson.addProperty("clientId", i);
  457. paramJson.addProperty("personId", objectMap.get("id").toString());
  458. paramJson.addProperty("personName", objectMap.get("name").toString());
  459. paramJson.addProperty("orgIndexCode", objectMap.get("dept_id").toString());
  460. paramJson.addProperty("phoneNo", objectMap.get("mobile") == null ? "" : objectMap.get("mobile").toString());
  461. paramJson.addProperty("jobNo", objectMap.get("user_name").toString());
  462. paramJson.addProperty("birthday", objectMap.get("birth_date") == null ? "" : objectMap.get("birth_date").toString());
  463. paramJson.addProperty("personType", 1);
  464. int gender;
  465. String genderData = objectMap.get("gender") == null ? "" : objectMap.get("gender").toString();
  466. switch (genderData) {
  467. case "SB10001":
  468. gender = 1;
  469. break;
  470. case "SB10002":
  471. gender = 2;
  472. break;
  473. default:
  474. gender = 0;
  475. break;
  476. }
  477. paramJson.addProperty("gender", gender);
  478. if (tableData != null && tableData.containsKey(objectMap.get("id").toString())) {
  479. String apiPath = "/api/resource/v1/person/single/update";
  480. apiUtil.doPost(apiPath, paramJson.toString(), null);
  481. continue;
  482. }
  483. paramArray.add(paramJson);
  484. clientMap.put(i, objectMap.get("id").toString());
  485. }
  486. String apiPath = "/api/resource/v1/person/batch/add";
  487. Map<String, String> idMap = new HashMap<>();
  488. JsonParser jsonParser = new JsonParser();
  489. Map<String, String> header = new HashMap<>();
  490. header.put("tagId", "insert_teacher");
  491. String result = apiUtil.doPost(apiPath, paramArray.toString(), null, header);
  492. JsonElement parse = jsonParser.parse(result);
  493. JsonObject resultJson = parse.getAsJsonObject();
  494. if ("0".equals(resultJson.get("code").getAsString()) && "success".equals(resultJson.get("msg").getAsString())) {
  495. JsonArray array = resultJson.get("data").getAsJsonObject().get("successes").getAsJsonArray();
  496. for (JsonElement jsonElement : array) {
  497. JsonObject jsonObject = jsonElement.getAsJsonObject();
  498. idMap.put(clientMap.get(jsonObject.get("clientId").getAsInt()), jsonObject.get("personId").getAsString());
  499. }
  500. } else {
  501. }
  502. //插入记录表
  503. insertRecord(tableName, idMap);
  504. return idMap;
  505. }
  506. /*同步车辆数据*/
  507. public Map<Long, String> insertCar(String tableName, Map<String, String> tableData, HikvisionDataMapper hikvisionDataMapper) {
  508. String sql = "SELECT * FROM " + tableName + " WHERE delete_mark = 0 and status = 1";
  509. List<Map<String, Object>> dataList = SqlRunnerAdapter.db().selectList(sql, CarMessageApply.class);
  510. String apiPath = "/api/resource/v1/vehicle/batch/add";
  511. String apiPathTime = "/api/pms/v1/car/charge";
  512. Map<Long, String> idMap = new HashMap<>();
  513. JsonParser jsonParser = new JsonParser();
  514. ApiUtil apiUtil = new ApiUtil();
  515. Map<Integer, Long> clientMap = new HashMap<>();
  516. Map<String, String> tagMap = new HashMap<>();
  517. tagMap.put("tagId", "frs");
  518. String existingPlatesSql = "SELECT source_id FROM hikvision_data";
  519. List<Map<String, Object>> existingPlates = SqlRunnerAdapter.db().selectList(existingPlatesSql, String.class);
  520. JsonArray dataArray = new JsonArray();
  521. String result = null;
  522. int clientId = 1;
  523. for (Map<String, Object> carMap : dataList) {
  524. if (existingPlates.contains(carMap.get("id") + "")) {
  525. continue;
  526. }
  527. JsonObject paramJson = new JsonObject();
  528. paramJson.addProperty("clientId", clientId);
  529. paramJson.addProperty("plateNo", carMap.get("car_number").toString());
  530. paramJson.addProperty("personId", hikvisionDataMapper.getTeacherHikvisionId(Long.parseLong(carMap.get("user_id").toString())));
  531. int vehicleTypeNum;
  532. switch (carMap.get("vehicle_type").toString()) {
  533. case "小型车":
  534. vehicleTypeNum = 1;
  535. break;
  536. case "大型车":
  537. vehicleTypeNum = 2;
  538. break;
  539. case "摩托车":
  540. vehicleTypeNum = 3;
  541. break;
  542. default:
  543. vehicleTypeNum = 0;
  544. break;
  545. }
  546. paramJson.addProperty("vehicleType", vehicleTypeNum);
  547. clientMap.put(clientId, Long.parseLong(carMap.get("id").toString()));
  548. dataArray.add(paramJson);
  549. clientId++;
  550. }
  551. result = apiUtil.doPost(apiPath, dataArray.toString(), tagMap, null);
  552. for (Map<String, Object> carMap : dataList) {
  553. JsonObject paramJsonTime = new JsonObject();
  554. paramJsonTime.addProperty("parkSyscode", "c69f2a7c48a74216bcab7d65f24d4a09");
  555. paramJsonTime.addProperty("plateNo", carMap.get("car_number").toString());
  556. paramJsonTime.addProperty("startTime", carMap.get("start_time").toString());
  557. paramJsonTime.addProperty("endTime", carMap.get("end_time").toString());
  558. apiUtil.doPost(apiPathTime, String.valueOf(paramJsonTime), tagMap, null);
  559. }
  560. JsonElement parse = jsonParser.parse(result);
  561. JsonObject resultJson = parse.getAsJsonObject();
  562. if ("0".equals(resultJson.get("code").getAsString()) && "success".equals(resultJson.get("msg").getAsString())) {
  563. JsonArray array = resultJson.get("data").getAsJsonObject().get("successes").getAsJsonArray();
  564. for (JsonElement jsonElement : array) {
  565. JsonObject jsonObject = jsonElement.getAsJsonObject();
  566. int responseClientId = jsonObject.get("clientId").getAsInt();
  567. Long sourceId = clientMap.get(responseClientId);
  568. if (sourceId != null) {
  569. idMap.put(sourceId, jsonObject.get("vehicleId").getAsString());
  570. } else {
  571. System.err.println("No matching clientId found in clientMap for: " + responseClientId);
  572. }
  573. }
  574. insertRecord(tableName, idMap);
  575. } else {
  576. System.err.println("API call failed: " + resultJson.get("msg").getAsString());
  577. }
  578. return idMap;
  579. }
  580. void insertRecord(String tableName, Map<?, String> idsMap) {
  581. if (idsMap.isEmpty()) {
  582. return;
  583. }
  584. for (var entry : idsMap.entrySet()) {
  585. var sourceId = entry.getKey();
  586. String sql = "INSERT INTO hikvision_data(create_date, table_name, source_id, hikvision_id) " +
  587. "VALUES(now(), '" + tableName + "', '" + sourceId + "', '" + entry.getValue() + "')";
  588. SqlRunnerAdapter.db().insert(sql);
  589. }
  590. }
  591. // void insertRecord(Db db, String tableName, Map<Long, String> idsMap) throws SQLException {
  592. // if(idsMap.isEmpty()){
  593. // return;
  594. // }
  595. // List<String> sqls = new ArrayList<>();
  596. // for (Long sourceId : idsMap.keySet()) {
  597. // String sql = "INSERT INTO hikvision_data(create_date,table_name,source_id,hikvision_id) value(now(),'"
  598. // + tableName + "'," + sourceId + ",'" + idsMap.get(sourceId) + "')";
  599. // sqls.add(sql);
  600. // }
  601. // db.executeBatch(sqls);
  602. // };
  603. /**
  604. * 根据用用户id,删除海康人员信息
  605. *
  606. * @param userIds
  607. */
  608. public void deletePerson(List<Long> userIds) {
  609. JsonArray personIds = new JsonArray();
  610. for (Long userId : userIds) {
  611. String sql = "select * from hikvision_data where source_id = '" + userId + "'";
  612. List<Map<String, Object>> maps = SqlRunnerAdapter.db().selectList(sql);
  613. if (maps.isEmpty()) {
  614. continue;
  615. }
  616. for (Map<String, Object> map : maps) {
  617. personIds.add(map.get("hikvision_id").toString());
  618. }
  619. }
  620. String apiPath = "/api/resource/v1/person/batch/delete";
  621. ApiUtil apiUtil = new ApiUtil();
  622. JsonObject param = new JsonObject();
  623. param.add("personIds", personIds);
  624. String result = apiUtil.doPost(apiPath, param.toString(), null);
  625. log.info("海康人员删除:param:" + param + ",result:" + result);
  626. }
  627. public void deleteCar(List<CarMessageApply> carList) {
  628. ApiUtil apiUtil = new ApiUtil();
  629. String apiPath = "/api/resource/v2/vehicle/advance/vehicleList";
  630. JsonParser parser = new JsonParser();
  631. JsonArray vehicleIds = new JsonArray();
  632. for (CarMessageApply carMessageApply : carList) {
  633. JsonObject param = new JsonObject();
  634. param.addProperty("plateNo", carMessageApply.getCarNumber());
  635. String result = apiUtil.doPost(apiPath, param.toString(), null);
  636. JsonObject vehicleData = parser.parse(result).getAsJsonObject();
  637. if ("0".equals(vehicleData.get("code").getAsString()) && "success".equals(vehicleData.get("msg").getAsString())) {
  638. JsonObject dataJson = vehicleData.get("data").getAsJsonObject();
  639. if (dataJson.get("total").getAsInt() > 0) {
  640. JsonArray vehicleList = dataJson.get("list").getAsJsonArray();
  641. for (JsonElement jsonElement : vehicleList) {
  642. vehicleIds.add(jsonElement.getAsJsonObject().get("vehicleId"));
  643. }
  644. }
  645. }
  646. }
  647. if(vehicleIds.size() > 0){
  648. apiPath = "/api/resource/v1/vehicle/batch/delete";
  649. JsonObject param = new JsonObject();
  650. param.add("vehicleIds", vehicleIds);
  651. apiUtil.doPost(apiPath, param.toString(), null);
  652. }
  653. }
  654. }