UserTask.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. /**
  2. * Copyright (C), 2022-04-28
  3. * FileName: UserTask
  4. * Author: wanglongda
  5. * Date: 2022/4/28 12:03
  6. * Description: 同步用户
  7. */
  8. package me.zhengjie.modules.quartz.task;/**
  9. * Created Name: wanglongda
  10. * Created Time: 2022/4/28 12:03
  11. * Description: iot-zhyd
  12. */
  13. import cn.hutool.http.HttpRequest;
  14. import com.alibaba.fastjson.JSONArray;
  15. import com.alibaba.fastjson.JSONObject;
  16. import lombok.RequiredArgsConstructor;
  17. import lombok.extern.slf4j.Slf4j;
  18. import me.zhengjie.modules.dm.user.domain.DmUser;
  19. import me.zhengjie.modules.dm.user.repository.DmUserRepository;
  20. import me.zhengjie.modules.system.domain.Dept;
  21. import me.zhengjie.modules.system.domain.Job;
  22. import me.zhengjie.modules.system.domain.Role;
  23. import me.zhengjie.modules.system.domain.User;
  24. import me.zhengjie.modules.system.repository.DeptRepository;
  25. import me.zhengjie.modules.system.repository.UserRepository;
  26. import me.zhengjie.utils.SecurityUtils;
  27. import org.springframework.beans.factory.annotation.Value;
  28. import org.springframework.stereotype.Component;
  29. import org.springframework.util.ObjectUtils;
  30. import java.util.HashSet;
  31. import java.util.Map;
  32. import java.util.Set;
  33. /**
  34. * <功能简要> <br>
  35. * <同步用户>
  36. *
  37. * @Author wanglongda
  38. * @createTime 2022/4/28 12:03
  39. * @Version 1.0.0
  40. */
  41. @Component
  42. @Slf4j
  43. @RequiredArgsConstructor
  44. public class UserTask {
  45. @Value("${zkApiUrl}")
  46. private String zkApiUrl;
  47. @Value("${deptApi}")
  48. private String deptApi;
  49. @Value("${userApi}")
  50. private String userApi;
  51. @Value("${headerKey}")
  52. private String header_key;
  53. @Value("${key}")
  54. private String key;
  55. private final UserRepository userRepository;
  56. private final DmUserRepository dmUserRepository;
  57. private final DeptRepository deptRepository;
  58. public void runDept(){
  59. log.info("deptsync 执行开始");
  60. deptSyncAll();
  61. log.info("deptsync 执行结束");
  62. }
  63. public void runUser(){
  64. log.info("usersync 执行开始");
  65. userSyncAll();
  66. log.info("usersync 执行结束");
  67. }
  68. /**
  69. * 部门数据同步(全量)
  70. */
  71. private void deptSyncAll() {
  72. // String api = "/api/thirdparty/v1/user/getzkdeps";
  73. //计算总页数
  74. int total = getDatas(deptApi,null,0,100,2).getJSONObject("data").getInteger("totalElements");
  75. int pageSize = 100;
  76. int pageTotal = (total / pageSize);
  77. if (total % pageSize != 0) {
  78. pageTotal++;
  79. }
  80. log.info("pageTotal:"+pageTotal);
  81. //按页获取
  82. for (int k = 0; k < pageTotal; k++) {
  83. JSONObject json = getDatas(deptApi,null,k,pageSize,2);
  84. JSONObject data = json.getJSONObject("data");
  85. JSONArray content = data.getJSONArray("content");
  86. for (int i = 0; i < content.size(); i++) {
  87. Dept dept = JSONObject.parseObject(content.getString(i), Dept.class);
  88. deptRepository.save(dept);
  89. }
  90. }
  91. }
  92. /**
  93. * 人员数据同步(全量)
  94. */
  95. private void userSyncAll() {
  96. // String api = "/api/thirdparty/v1/user/getZkSysUsers";
  97. //计算总页数
  98. int total = getDatas(userApi,null,0,1,2).getJSONObject("data").getInteger("totalElements");
  99. int pageSize = 10;
  100. int pageTotal = (total / pageSize);
  101. if (total % pageSize != 0) {
  102. pageTotal++;
  103. }
  104. log.info("pageTotal:"+pageTotal);
  105. //按页获取
  106. for (int k = 0; k <= pageTotal; k++) {
  107. JSONObject json = getDatas(userApi, null,k,pageSize,1);
  108. JSONObject data = json.getJSONObject("data");
  109. JSONArray content = data.getJSONArray("content");
  110. for (int i = 0; i < content.size(); i++) {
  111. User user = new User();
  112. JSONObject userData = content.getJSONObject(i);
  113. user.setId(userData.getString("id"));
  114. if(userData.containsKey("username")) {
  115. user.setUsername(userData.getString("username"));
  116. }
  117. user.setPassword(userData.getString("password"));
  118. user.setOrgPassword("12345678");
  119. if(userData.containsKey("jobs")) {
  120. Set<Job> jobs = new HashSet<>(JSONArray.parseArray(userData.getString("jobs"), Job.class));
  121. user.setJobs(jobs);
  122. }
  123. if(userData.containsKey("roles")) {
  124. Set<Role> roles = new HashSet<>(JSONArray.parseArray(userData.getString("roles"), Role.class));
  125. user.setRoles(roles);
  126. }
  127. if(userData.containsKey("gender")) {
  128. user.setGender(userData.getString("gender"));
  129. }
  130. if(userData.containsKey("dept")) {
  131. user.setDept(JSONObject.parseObject(userData.getString("dept"), Dept.class));
  132. }
  133. if(userData.containsKey("email")) {
  134. user.setEmail(userData.getString("email"));
  135. }
  136. if(userData.containsKey("nickName")) {
  137. user.setNickName(userData.getString("nickName"));
  138. }
  139. if(userData.containsKey("phone")) {
  140. user.setPhone(userData.getString("phone"));
  141. }
  142. if(userData.containsKey("enabled")) {
  143. user.setEnabled(userData.getBoolean("enabled"));
  144. }
  145. if(userData.containsKey("userRootGroupId")) {
  146. user.setUserRootGroupId(userData.getString("userRootGroupId"));
  147. }
  148. if(userData.containsKey("userRootGroupName")) {
  149. user.setUserRootGroupName(userData.getString("userRootGroupName"));
  150. }
  151. DmUser dmUser = new DmUser();
  152. dmUser.setDept(user.getDept());
  153. dmUser.setId(user.getId());
  154. dmUser.setEmail(user.getEmail());
  155. dmUser.setContacts(user.getPhone());
  156. dmUser.setName(user.getNickName());
  157. dmUser.setSex(user.getGender());
  158. if(!ObjectUtils.isEmpty(userData.getJSONObject("dmUser"))){
  159. JSONObject dmUserObject = userData.getJSONObject("dmUser");
  160. if(dmUserObject.containsKey("cardid")) {
  161. dmUser.setCardId(dmUserObject.getString("cardid"));
  162. }
  163. if(dmUserObject.containsKey("userNumber")) {
  164. dmUser.setUserNumber(dmUserObject.getString("userNumber"));
  165. }
  166. if(dmUserObject.containsKey("type")) {
  167. dmUser.setUsertype(dmUserObject.getString("type"));
  168. }
  169. if(dmUserObject.containsKey("faceid")) {
  170. dmUser.setPicture(dmUserObject.getString("faceid"));
  171. }
  172. }
  173. //判断是否是新离职的员工,如果是则修改门禁和停车权限
  174. // if(!user.getEnabled()){
  175. // UserDto userDto = userService.findById(user.getId());
  176. // if(!ObjectUtils.isEmpty(userDto)){
  177. // if(userDto.getEnabled()){
  178. // //删除门禁一楼进入设备权限
  179. // JSONArray deviceInfoArray = new JSONArray();
  180. // List<String> deviceList = Arrays.asList(deviceInfo.split(","));
  181. // for(String device : deviceList){
  182. // log.info("device:"+device);
  183. // DmRoomDevice dmRoomDevice = dmRoomDeviceService.findByCode(device).get(0);
  184. // if(!ObjectUtils.isEmpty(dmRoomDevice)){
  185. // JSONObject object = new JSONObject();
  186. // object.put("serialNumber",dmRoomDevice.getCode());
  187. // object.put("doorID",dmRoomDevice.getDoorID());
  188. // object.put("deviceType",dmRoomDevice.getDeviceType());
  189. // deviceInfoArray.add(object);
  190. // }
  191. // }
  192. // JSONObject device = new JSONObject();
  193. // device.put("userId",dmUser.getUserNumber());
  194. // device.put("operateType","2");
  195. // device.put("deviceInfo",deviceInfoArray);
  196. // log.info("device:"+device.toJSONString());
  197. // String msg = HttpRequest.post(synchronizationDeviceUrl).form("device", device.toJSONString()).execute().body();
  198. // log.info("msg:"+msg);
  199. //
  200. // DmPlateNumberQueryCriteria dmPlateNumberQueryCriteria = new DmPlateNumberQueryCriteria();
  201. // dmPlateNumberQueryCriteria.setUserNumber(dmUser.getId());
  202. // List<DmPlateNumberDto> dmPlateNumberDtoList = dmPlateNumberService.queryAll(dmPlateNumberQueryCriteria);
  203. // if(!ObjectUtils.isEmpty(dmPlateNumberDtoList)){
  204. // for(DmPlateNumberDto dmPlateNumberDto : dmPlateNumberDtoList){
  205. // dmPlateNumberService.deleteYuePlate(dmPlateNumberDto.getPlateNumber());
  206. //
  207. // JSONObject generateProcJson = new JSONObject();
  208. // generateProcJson.put("name",dmPlateNumberDto.getUserNumber().getName());
  209. // generateProcJson.put("phone",dmPlateNumberDto.getUserNumber().getContacts());
  210. // generateProcJson.put("carplate",dmPlateNumberDto.getPlateNumber());
  211. // SimpleDateFormat formater2 = new SimpleDateFormat("yyyy-MM-dd");
  212. // generateProcJson.put("startdate",formater2.format(dmPlateNumberDto.getStartTime()));
  213. // generateProcJson.put("enddate",formater2.format(dmPlateNumberDto.getEndTime()));
  214. // generateProcJson.put("cardtype","A");
  215. // generateProcJson.put("controllers", "3,4");
  216. // String generateProcData = BeanMapUtils.doPostForm(yueUrl,generateProcJson);
  217. // JSONObject generateProcDataJson = JSONObject.parseObject(generateProcData);
  218. // System.out.println("generateProcJson"+generateProcJson);
  219. // System.out.println("generateProcDataJson:"+generateProcDataJson);
  220. // }
  221. // }
  222. //
  223. // }
  224. // }
  225. // }
  226. DmUser newDmUser = dmUserRepository.save(dmUser);
  227. user.setDmUser(newDmUser);
  228. userRepository.save(user);
  229. }
  230. }
  231. }
  232. private JSONObject getDatas(String api,JSONArray time, int pageNum, int pageSize,int type) {
  233. Map<String,Object> tokenData = SecurityUtils.getToken(key);
  234. JSONObject body = new JSONObject();
  235. body.put("timestamp",tokenData.get("timestamp"));
  236. body.put("nonce",tokenData.get("nonce"));
  237. JSONObject query = new JSONObject();
  238. if(type == 1){
  239. query.put("updateTime",time);
  240. }
  241. body.put("query",query);
  242. String res = HttpRequest.get(zkApiUrl + api+"?page="+pageNum+"&size="+pageSize)
  243. .header(header_key, tokenData.get("token").toString())
  244. .body(body.toString()).execute().body();
  245. JSONObject json = JSONObject.parseObject(res);
  246. log.info("json:"+json);
  247. return json;
  248. }
  249. }