DataUtil.java 33 KB

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