/** * Copyright (C), 2022-04-28 * FileName: UserTask * Author: wanglongda * Date: 2022/4/28 12:03 * Description: 同步用户 */ package me.zhengjie.modules.quartz.task;/** * Created Name: wanglongda * Created Time: 2022/4/28 12:03 * Description: iot-zhyd */ import cn.hutool.http.HttpRequest; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import me.zhengjie.modules.dm.user.domain.DmUser; import me.zhengjie.modules.dm.user.repository.DmUserRepository; import me.zhengjie.modules.system.domain.Dept; import me.zhengjie.modules.system.domain.Job; import me.zhengjie.modules.system.domain.Role; import me.zhengjie.modules.system.domain.User; import me.zhengjie.modules.system.repository.DeptRepository; import me.zhengjie.modules.system.repository.UserRepository; import me.zhengjie.utils.SecurityUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import org.springframework.util.ObjectUtils; import java.util.HashSet; import java.util.Map; import java.util.Set; /** * <功能简要>
* <同步用户> * * @Author wanglongda * @createTime 2022/4/28 12:03 * @Version 1.0.0 */ @Component @Slf4j @RequiredArgsConstructor public class UserTask { @Value("${zkApiUrl}") private String zkApiUrl; @Value("${deptApi}") private String deptApi; @Value("${userApi}") private String userApi; @Value("${headerKey}") private String header_key; @Value("${key}") private String key; private final UserRepository userRepository; private final DmUserRepository dmUserRepository; private final DeptRepository deptRepository; public void runDept(){ log.info("deptsync 执行开始"); deptSyncAll(); log.info("deptsync 执行结束"); } public void runUser(){ log.info("usersync 执行开始"); userSyncAll(); log.info("usersync 执行结束"); } /** * 部门数据同步(全量) */ private void deptSyncAll() { // String api = "/api/thirdparty/v1/user/getzkdeps"; //计算总页数 int total = getDatas(deptApi,null,0,100,2).getJSONObject("data").getInteger("totalElements"); int pageSize = 100; int pageTotal = (total / pageSize); if (total % pageSize != 0) { pageTotal++; } log.info("pageTotal:"+pageTotal); //按页获取 for (int k = 0; k < pageTotal; k++) { JSONObject json = getDatas(deptApi,null,k,pageSize,2); JSONObject data = json.getJSONObject("data"); JSONArray content = data.getJSONArray("content"); for (int i = 0; i < content.size(); i++) { Dept dept = JSONObject.parseObject(content.getString(i), Dept.class); deptRepository.save(dept); } } } /** * 人员数据同步(全量) */ private void userSyncAll() { // String api = "/api/thirdparty/v1/user/getZkSysUsers"; //计算总页数 int total = getDatas(userApi,null,0,1,2).getJSONObject("data").getInteger("totalElements"); int pageSize = 10; int pageTotal = (total / pageSize); if (total % pageSize != 0) { pageTotal++; } log.info("pageTotal:"+pageTotal); //按页获取 for (int k = 0; k <= pageTotal; k++) { JSONObject json = getDatas(userApi, null,k,pageSize,1); JSONObject data = json.getJSONObject("data"); JSONArray content = data.getJSONArray("content"); for (int i = 0; i < content.size(); i++) { User user = new User(); JSONObject userData = content.getJSONObject(i); user.setId(userData.getString("id")); if(userData.containsKey("username")) { user.setUsername(userData.getString("username")); } user.setPassword(userData.getString("password")); user.setOrgPassword("12345678"); if(userData.containsKey("jobs")) { Set jobs = new HashSet<>(JSONArray.parseArray(userData.getString("jobs"), Job.class)); user.setJobs(jobs); } if(userData.containsKey("roles")) { Set roles = new HashSet<>(JSONArray.parseArray(userData.getString("roles"), Role.class)); user.setRoles(roles); } if(userData.containsKey("gender")) { user.setGender(userData.getString("gender")); } if(userData.containsKey("dept")) { user.setDept(JSONObject.parseObject(userData.getString("dept"), Dept.class)); } if(userData.containsKey("email")) { user.setEmail(userData.getString("email")); } if(userData.containsKey("nickName")) { user.setNickName(userData.getString("nickName")); } if(userData.containsKey("phone")) { user.setPhone(userData.getString("phone")); } if(userData.containsKey("enabled")) { user.setEnabled(userData.getBoolean("enabled")); } if(userData.containsKey("userRootGroupId")) { user.setUserRootGroupId(userData.getString("userRootGroupId")); } if(userData.containsKey("userRootGroupName")) { user.setUserRootGroupName(userData.getString("userRootGroupName")); } DmUser dmUser = new DmUser(); dmUser.setDept(user.getDept()); dmUser.setId(user.getId()); dmUser.setEmail(user.getEmail()); dmUser.setContacts(user.getPhone()); dmUser.setName(user.getNickName()); dmUser.setSex(user.getGender()); if(!ObjectUtils.isEmpty(userData.getJSONObject("dmUser"))){ JSONObject dmUserObject = userData.getJSONObject("dmUser"); if(dmUserObject.containsKey("cardid")) { dmUser.setCardId(dmUserObject.getString("cardid")); } if(dmUserObject.containsKey("userNumber")) { dmUser.setUserNumber(dmUserObject.getString("userNumber")); } if(dmUserObject.containsKey("type")) { dmUser.setUsertype(dmUserObject.getString("type")); } if(dmUserObject.containsKey("faceid")) { dmUser.setPicture(dmUserObject.getString("faceid")); } } //判断是否是新离职的员工,如果是则修改门禁和停车权限 // if(!user.getEnabled()){ // UserDto userDto = userService.findById(user.getId()); // if(!ObjectUtils.isEmpty(userDto)){ // if(userDto.getEnabled()){ // //删除门禁一楼进入设备权限 // JSONArray deviceInfoArray = new JSONArray(); // List deviceList = Arrays.asList(deviceInfo.split(",")); // for(String device : deviceList){ // log.info("device:"+device); // DmRoomDevice dmRoomDevice = dmRoomDeviceService.findByCode(device).get(0); // if(!ObjectUtils.isEmpty(dmRoomDevice)){ // JSONObject object = new JSONObject(); // object.put("serialNumber",dmRoomDevice.getCode()); // object.put("doorID",dmRoomDevice.getDoorID()); // object.put("deviceType",dmRoomDevice.getDeviceType()); // deviceInfoArray.add(object); // } // } // JSONObject device = new JSONObject(); // device.put("userId",dmUser.getUserNumber()); // device.put("operateType","2"); // device.put("deviceInfo",deviceInfoArray); // log.info("device:"+device.toJSONString()); // String msg = HttpRequest.post(synchronizationDeviceUrl).form("device", device.toJSONString()).execute().body(); // log.info("msg:"+msg); // // DmPlateNumberQueryCriteria dmPlateNumberQueryCriteria = new DmPlateNumberQueryCriteria(); // dmPlateNumberQueryCriteria.setUserNumber(dmUser.getId()); // List dmPlateNumberDtoList = dmPlateNumberService.queryAll(dmPlateNumberQueryCriteria); // if(!ObjectUtils.isEmpty(dmPlateNumberDtoList)){ // for(DmPlateNumberDto dmPlateNumberDto : dmPlateNumberDtoList){ // dmPlateNumberService.deleteYuePlate(dmPlateNumberDto.getPlateNumber()); // // JSONObject generateProcJson = new JSONObject(); // generateProcJson.put("name",dmPlateNumberDto.getUserNumber().getName()); // generateProcJson.put("phone",dmPlateNumberDto.getUserNumber().getContacts()); // generateProcJson.put("carplate",dmPlateNumberDto.getPlateNumber()); // SimpleDateFormat formater2 = new SimpleDateFormat("yyyy-MM-dd"); // generateProcJson.put("startdate",formater2.format(dmPlateNumberDto.getStartTime())); // generateProcJson.put("enddate",formater2.format(dmPlateNumberDto.getEndTime())); // generateProcJson.put("cardtype","A"); // generateProcJson.put("controllers", "3,4"); // String generateProcData = BeanMapUtils.doPostForm(yueUrl,generateProcJson); // JSONObject generateProcDataJson = JSONObject.parseObject(generateProcData); // System.out.println("generateProcJson"+generateProcJson); // System.out.println("generateProcDataJson:"+generateProcDataJson); // } // } // // } // } // } DmUser newDmUser = dmUserRepository.save(dmUser); user.setDmUser(newDmUser); userRepository.save(user); } } } private JSONObject getDatas(String api,JSONArray time, int pageNum, int pageSize,int type) { Map tokenData = SecurityUtils.getToken(key); JSONObject body = new JSONObject(); body.put("timestamp",tokenData.get("timestamp")); body.put("nonce",tokenData.get("nonce")); JSONObject query = new JSONObject(); if(type == 1){ query.put("updateTime",time); } body.put("query",query); String res = HttpRequest.get(zkApiUrl + api+"?page="+pageNum+"&size="+pageSize) .header(header_key, tokenData.get("token").toString()) .body(body.toString()).execute().body(); JSONObject json = JSONObject.parseObject(res); log.info("json:"+json); return json; } }