ZkDataSyncTask.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322
  1. /*
  2. * Copyright 2019-2020 Zheng Jie
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. package me.zhengjie.modules.quartz.task;
  17. import cn.hutool.core.lang.Snowflake;
  18. import cn.hutool.core.util.IdUtil;
  19. import cn.hutool.http.HttpRequest;
  20. import com.alibaba.fastjson.JSONArray;
  21. import com.alibaba.fastjson.JSONObject;
  22. import lombok.RequiredArgsConstructor;
  23. import lombok.extern.slf4j.Slf4j;
  24. import me.zhengjie.config.RsaProperties;
  25. import me.zhengjie.modules.dm.card.domain.DmCard;
  26. import me.zhengjie.modules.dm.card.service.DmCardService;
  27. import me.zhengjie.modules.dm.card.service.dto.DmCardDto;
  28. import me.zhengjie.modules.dm.plateNumber.domain.DmPlateNumber;
  29. import me.zhengjie.modules.dm.plateNumber.repository.DmPlateNumberRepository;
  30. import me.zhengjie.modules.dm.roomDevice.domain.DmRoomDevice;
  31. import me.zhengjie.modules.dm.roomDevice.repository.DmRoomDeviceRepository;
  32. import me.zhengjie.modules.dm.user.domain.DmUser;
  33. import me.zhengjie.modules.dm.user.service.DmUserService;
  34. import me.zhengjie.modules.dm.user.service.dto.DmUserDto;
  35. import me.zhengjie.modules.system.domain.Dept;
  36. import me.zhengjie.modules.system.domain.Job;
  37. import me.zhengjie.modules.system.domain.Role;
  38. import me.zhengjie.modules.system.domain.User;
  39. import me.zhengjie.modules.system.service.DeptService;
  40. import me.zhengjie.modules.system.service.UserService;
  41. import me.zhengjie.modules.system.service.dto.DeptDto;
  42. import me.zhengjie.modules.system.service.dto.UserDto;
  43. import me.zhengjie.utils.RsaUtils;
  44. import me.zhengjie.utils.SecurityUtils;
  45. import me.zhengjie.utils.StringUtils;
  46. import org.springframework.security.crypto.password.PasswordEncoder;
  47. import org.springframework.stereotype.Component;
  48. import org.springframework.util.ObjectUtils;
  49. import java.util.*;
  50. /**
  51. * ERP 数据同步
  52. * @author Sky
  53. */
  54. @Slf4j
  55. @RequiredArgsConstructor
  56. @Component
  57. public class ZkDataSyncTask {
  58. private final String erpApiUrl = "https://portal.caih.com";
  59. private final String sign = "e34b2f59-0e9d-45ed-a32a-f4abd4381000";
  60. private final String header_key = "X_AUTO_USER_INFO_HEAD";
  61. private final String header_value = "{\"id\":\"anonymous\",\"tenantId\":\"caih\"}";
  62. private final String key = "DMERPYT!@#$QWER2021+{:>";
  63. private final DeptService deptService;
  64. private final UserService userService;
  65. private final DmUserService dmUserService;
  66. private final PasswordEncoder passwordEncoder;
  67. private final DmPlateNumberRepository dmPlateNumberRepository;
  68. private final DmRoomDeviceRepository dmRoomDeviceRepository;
  69. private final DmCardService dmCardService;
  70. public void run() throws Exception {
  71. log.info("deptSync 执行开始");
  72. deptSync();
  73. log.info("deptSync 执行结束");
  74. log.info("userSync 执行开始");
  75. userSync();
  76. log.info("userSync 执行结束");
  77. log.info("plateNumberSync 执行开始");
  78. plateNumberSync();
  79. log.info("plateNumberSync 执行结束");
  80. }
  81. private JSONObject getDatas(String api, int pagenum, int pagesize) {
  82. String res = HttpRequest.get(erpApiUrl + api)
  83. .header(header_key, header_value)
  84. .body("{\n" +
  85. " \"formData\":{\n" +
  86. " \"pageNum\":" + pagenum + ",\n" +
  87. " \"pageSize\":" + pagesize + "\n" +
  88. " },\n" +
  89. " \"product\":\"17\",\n" +
  90. " \"sign\":\"" + sign + "\"\n" +
  91. "}").execute().body();
  92. JSONObject json = JSONObject.parseObject(res);
  93. return json;
  94. }
  95. private int gettotal(String api) {
  96. JSONObject json = getDatas(api, 0, 100);
  97. return json.getJSONObject("page").getInteger("totalCount");
  98. }
  99. /**
  100. * 部门数据同步
  101. */
  102. private void deptSync() {
  103. String api = "/api-third-party/busi/comm/usky/queryGroup";
  104. //计算总页数
  105. int total = gettotal(api);
  106. int pagesize = 100;
  107. int pagetotal = (total / pagesize);
  108. if (total % pagesize != 0) {
  109. pagetotal++;
  110. }
  111. log.info("pagetotal:"+pagetotal);
  112. //按页获取
  113. for (int k = 1; k <= pagetotal; k++) {
  114. JSONObject json = getDatas(api, k, pagesize);
  115. JSONArray datas = json.getJSONArray("data");
  116. JSONObject item;
  117. Dept dept;
  118. for (int i = 0; i < datas.size(); i++) {
  119. item = datas.getJSONObject(i);
  120. dept = new Dept();
  121. if (StringUtils.isBlank(item.getString("groupId"))) {
  122. dept.setId(UUID.randomUUID().toString());
  123. } else {
  124. dept.setId(item.getString("groupId"));
  125. }
  126. dept.setName(item.getString("groupName"));
  127. if (item.getString("parentId").equals("~")) {
  128. dept.setPid(null);
  129. } else {
  130. dept.setPid(item.getString("parentId"));
  131. }
  132. dept.setDeptSort(item.getInteger("sort"));
  133. dept.setEnabled(item.getBoolean("groupStatus"));
  134. dept.setTreeNames(item.getString("groupNamePath"));
  135. dept.setTreeIds(item.getString("groupIdPath"));
  136. dept.setDeptType(item.getInteger("groupType"));
  137. dept.setDescription(item.getString("groupName"));
  138. try {
  139. DeptDto deptDto = deptService.findById(item.getString("groupId"));
  140. if (deptDto != null) {
  141. deptService.update(dept);
  142. } else {
  143. deptService.syncCreate(dept);
  144. }
  145. } catch (Exception ex) {
  146. System.out.println(JSONObject.toJSON(dept));
  147. }
  148. }
  149. }
  150. }
  151. /**
  152. * 人员数据同步
  153. */
  154. private void userSync() {
  155. String api = "/api-third-party/busi/comm/usky/queryUser";
  156. //计算总页数
  157. int total = gettotal(api);
  158. int pagesize = 100;
  159. int pagetotal = (total / pagesize);
  160. if (total % pagesize != 0) {
  161. pagetotal++;
  162. }
  163. log.info("pagetotal:"+pagetotal);
  164. //按页获取
  165. for (int k = 1; k <= pagetotal; k++) {
  166. JSONObject json = getDatas(api, k, pagesize);
  167. JSONArray datas = json.getJSONArray("data");
  168. JSONObject item;
  169. User user;
  170. UserDto userDto;
  171. Dept dept;
  172. DmUser dmUser;
  173. DmUserDto dmUserDto;
  174. for (int i = 0; i < datas.size(); i++) {
  175. item = datas.getJSONObject(i);
  176. user = new User();
  177. user.setId(item.getString("userId"));
  178. user.setUserCode(item.getString("userCode"));
  179. user.setNickName(item.getString("userName"));
  180. user.setUsername(item.getString("userAccount"));
  181. if(StringUtils.isBlank(item.getString("sex"))){
  182. user.setGender("");
  183. }else{
  184. user.setGender(item.getString("sex").equals("m") ? "男" : "女");
  185. }
  186. user.setEmail(item.getString("email"));
  187. user.setPhone(item.getString("mobile"));
  188. user.setEnabled(item.getInteger("userStatus") == 1);
  189. user.setIsAdmin(false);
  190. user.setOrgPassword("12345678");
  191. user.setUserRootGroupId(item.getString("userRootGroupId"));
  192. user.setUserRootGroupName(item.getString("userRootGroupName"));
  193. dept = new Dept();
  194. dept.setId(item.getString("userGroupId"));
  195. if (StringUtils.isBlank(dept.getId())) {
  196. dept.setId("0001T110000000000UKL");
  197. }
  198. user.setDept(dept);
  199. Set<Job> jobs = new HashSet<Job>();
  200. Job job = new Job();
  201. job.setId("10");
  202. jobs.add(job);
  203. user.setJobs(jobs);
  204. Set<Role> roles = new HashSet<Role>();
  205. Role role = new Role();
  206. role.setId("2");//普通用户
  207. roles.add(role);
  208. user.setRoles(roles);
  209. dmUser = new DmUser();
  210. dmUser.setDept(dept);
  211. dmUser.setId(user.getId());
  212. dmUser.setEmail(user.getEmail());
  213. dmUser.setContacts(user.getPhone());
  214. dmUser.setName(user.getNickName());
  215. dmUser.setUsername(user.getUsername());
  216. dmUser.setSex(user.getGender());
  217. dmUser.setUserNumber(user.getUserCode());
  218. dmUser.setStatus(user.getEnabled());
  219. dmUser.setType("00");
  220. dmUser.setUserCode(user.getUserCode());
  221. dmUser.setUserRootGroupId(user.getUserRootGroupId());
  222. dmUser.setUserRootGroupName(user.getUserRootGroupName());
  223. dmUser.setJobs(jobs);
  224. dmUser.setRoles(roles);
  225. try {
  226. //1、入用户库
  227. dmUserDto = dmUserService.findById(dmUser.getId());
  228. if (dmUserDto != null) {
  229. dmUserService.update(dmUser);
  230. } else {
  231. // Snowflake snowflake = IdUtil.createSnowflake(1, 1);
  232. DmCardDto dmCardDto = dmCardService.create(new DmCard());
  233. dmUser.setCardid(String.valueOf(dmCardDto.getId()));
  234. dmUserService.create(dmUser);
  235. }
  236. user.setDmUser(dmUser);
  237. //2、入账户库并与用户库关联
  238. log.info("userCode:"+user.getUserCode());
  239. userDto = userService.findById(user.getId());
  240. if (userDto != null) {
  241. user.setPassword(RsaUtils.encryptByPublicKey(RsaProperties.publicKey, "12345678"));
  242. userService.updateSync(user);
  243. } else {
  244. user.setPassword(RsaUtils.encryptByPublicKey(RsaProperties.publicKey, "12345678"));
  245. userService.createSync(user);
  246. }
  247. } catch (Exception e) {
  248. e.printStackTrace();
  249. }
  250. }
  251. }
  252. }
  253. //车牌及门禁设备数据同步
  254. private void plateNumberSync(){
  255. String url = "http://192.168.1.19:8000/api/thirdparty/v1/openInterface/getPlateNumber";
  256. //根据key拿到token
  257. Map<String,Object> newToken = SecurityUtils.getToken(key);
  258. //组装请求参数
  259. JSONObject param = new JSONObject();
  260. param.put("timestamp",newToken.get("timestamp"));
  261. param.put("nonce",newToken.get("nonce"));
  262. //请求车牌接口
  263. String res = HttpRequest.get(url)
  264. .header("XYTACCESSTOKEN",newToken.get("token").toString() )
  265. .body(param.toJSONString()).execute().body();
  266. if(StringUtils.isNotEmpty(res)) {
  267. log.info("res:"+res);
  268. JSONObject dataJSON = JSONObject.parseObject(res);
  269. String plateRumberArray = dataJSON.getString("data");
  270. if(!ObjectUtils.isEmpty(plateRumberArray)){
  271. //新增之前清空表数据
  272. dmPlateNumberRepository.deleteAll();
  273. dmRoomDeviceRepository.deleteAll();
  274. //进行新增
  275. JSONArray dataJSONArray = JSONArray.parseArray(plateRumberArray);
  276. for(int i = 0;i<dataJSONArray.size();i++){
  277. String plateNumberJSON = dataJSONArray.getString(i);
  278. DmPlateNumber plateNumber = JSONObject.parseObject(plateNumberJSON,DmPlateNumber.class);
  279. Set<DmRoomDevice> dmRoomDevices = plateNumber.getDmRoomDevices();
  280. dmRoomDeviceRepository.saveAll(dmRoomDevices);
  281. dmPlateNumberRepository.save(plateNumber);
  282. }
  283. // List<DmPlateNumber> dmPlateNumberList = JSONArray.parseArray(plateRumberArray, DmPlateNumber.class);
  284. // dmPlateNumberRepository.saveAll(dmPlateNumberList);
  285. } else {
  286. log.info("plateRumberArray is null.");
  287. }
  288. } else {
  289. log.info("res is null.");
  290. }
  291. }
  292. }