package com.ruoyi.station.service.impl; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.ruoyi.common.constant.UrlConstant; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.IdUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.station.domain.MjFingerprint; import com.ruoyi.station.domain.MjFingerprintReadHead; import com.ruoyi.station.domain.MjOrderDetail; import com.ruoyi.station.domain.MjWorkUser; import com.ruoyi.station.mapper.MjFingerprintMapper; import com.ruoyi.station.mapper.MjWorkUserMapper; import com.ruoyi.station.service.IMjFingerprintReadHeadService; import com.ruoyi.station.service.IMjOrderDetailService; import com.ruoyi.station.service.IMjWorkUserPushService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * 推送用户数据服务 */ @Service public class MjWorkUserPushServiceImpl implements IMjWorkUserPushService { @Autowired private MjFingerprintMapper mjFingerprintMapper; @Autowired private IMjOrderDetailService mjOrderDetailService; @Autowired private IMjFingerprintReadHeadService mjFingerprintReadHeadService; @Autowired private MjWorkUserMapper mjWorkUserMapper; /** * 推送用户基本信息 * @param mjWorkUser * @return */ @Override public Integer addUser(MjWorkUser mjWorkUser, Integer fingerprint) { RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); // List areaIdList = new ArrayList<>(); // // MjOrderDetail mjOrderDetail = new MjOrderDetail(); // mjOrderDetail.setUserId(mjWorkUser.getId()); // List mjOrderDetailList = mjOrderDetailService.selectMjOrderDetailList(mjOrderDetail); // if(mjOrderDetailList != null && mjOrderDetailList.size() > 0) { // String areaId = mjOrderDetailList.get(0).getAreaId(); // if(StringUtils.isNotEmpty(areaId)) { // String[] areaIds = areaId.split(","); // for(String id : areaIds) { // MjFingerprintReadHead fingerprintReadHead = new MjFingerprintReadHead(); // fingerprintReadHead.setAreaId(id); // List fingerprintReadHeads = mjFingerprintReadHeadService.selectMjFingerprintReadHeadList(fingerprintReadHead); // for(MjFingerprintReadHead head : fingerprintReadHeads) { MultiValueMap map= new LinkedMultiValueMap<>(); map.add("ip",UrlConstant.FIGERPRINT_URL); map.add("port",UrlConstant.FIGERPRINT_PORT); // map.add("ip", head.getIpOrOther()); // map.add("port",head.getPort()); map.add("id",mjWorkUser.getId().toString()); map.add("userId",mjWorkUser.getUserId()); map.add("name",mjWorkUser.getUserName()); map.add("pass",mjWorkUser.getPass()); HttpEntity> request = new HttpEntity<>(map, headers); ResponseEntity response = restTemplate.postForEntity(UrlConstant.ZK_URL+"api/SDZ/ZktAddUserInfo", request , String.class ); JSONObject jsonObject = JSONObject.parseObject(response.getBody()); System.out.println(jsonObject.get("code")); if((int)jsonObject.get("code") == 0) { getFingerInterface(mjWorkUser, fingerprint); } return (int)jsonObject.get("code"); // } // } // } // } // return 1; } /** * 获取用户指纹信息 * @param id * @return */ @Override public Integer getFingerPrint(Long id, Integer fingerIndex) { RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); MultiValueMap map= new LinkedMultiValueMap<>(); map.add("ip",UrlConstant.FIGERPRINT_URL); map.add("port",UrlConstant.FIGERPRINT_PORT); map.add("id",id.toString()); map.add("fingerIndex", fingerIndex.toString()); HttpEntity> request = new HttpEntity<>(map, headers); ResponseEntity response = restTemplate.postForEntity( UrlConstant.ZK_URL+"api/SDZ/ZktGetUserTmp", request , String.class ); JSONObject jsonObject = JSONObject.parseObject(response.getBody()); JSONObject result = JSONObject.parseObject(jsonObject.get("result").toString()); // System.out.println(result.get("TmpData").toString()); // System.out.println(jsonObject.get("code")); if((int)jsonObject.get("code") == 1) { return (int)jsonObject.get("code"); } if((int)jsonObject.get("code") == 0) { Integer count = mjFingerprintMapper.selectCountByTmpData(id, result.get("TmpData").toString()); if(count > 0) { return 2; //重复指纹 } } MjFingerprint mjFingerprint = new MjFingerprint(); mjFingerprint.setId(IdUtils.getUUIDInOrderId()+""); mjFingerprint.setUserId(id); if(result.get("TmpData") != null) { mjFingerprint.setTmpdata(result.get("TmpData").toString()); } mjFingerprint.setFingerindex(fingerIndex); mjFingerprintMapper.insertMjFingerprint(mjFingerprint); //插入最新指纹 return (int)jsonObject.get("code"); } /** * 获取用户信息 * @param id * @return */ @Override public Integer getUsers(String id) { RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); String[] ids = id.split(","); try { for(String uid : ids) { MjFingerprintReadHead readHead = mjFingerprintReadHeadService.selectMjFingerprintReadHeadById(uid); if(readHead != null) { if(StringUtils.isEmpty(readHead.getIpOrOther()) || StringUtils.isEmpty(readHead.getPort())){ continue; } MultiValueMap map= new LinkedMultiValueMap<>(); map.add("ip", readHead.getIpOrOther()); map.add("port", readHead.getPort()); HttpEntity> request = new HttpEntity<>(map, headers); ResponseEntity response = restTemplate.postForEntity( UrlConstant.ZK_URL+"api/SDZ/ZktGetAllUserInfo", request , String.class ); JSONObject jsonObject = JSONObject.parseObject(response.getBody()); JSONObject result = JSONObject.parseObject(jsonObject.get("result").toString()); System.out.println(jsonObject.get("code")); if((int)jsonObject.get("code") == 1) { return (int)jsonObject.get("code"); } JSONArray userList = JSONObject.parseArray(result.get("userList").toString()); for(int i=0; i < userList.size(); i++) { JSONObject user = JSONObject.parseObject(userList.get(i).toString()); // System.out.println(user.get("name")); // System.out.println(user.get("id")); // System.out.println(user.get("tmpDatas")); if(user != null) { MjWorkUser mjWorkUser = new MjWorkUser(); if(StringUtils.isNotEmpty(user.get("id").toString())) { int count = mjWorkUserMapper.selectWorkUserCountById(Long.parseLong(user.get("id").toString())); if(count > 0) { continue; } mjWorkUser.setId(Long.parseLong(user.get("id").toString())); } if(StringUtils.isNotEmpty(user.get("name").toString())) { mjWorkUser.setUserName(user.get("name").toString()); } if(StringUtils.isNotEmpty(user.get("pass").toString())) { mjWorkUser.setPass(user.get("pass").toString()); } mjWorkUser.setCreateTime(new Date()); mjWorkUser.setExpandStatus(1); mjWorkUserMapper.insertMjWorkUser(mjWorkUser); //插入用户 } JSONArray tmpDatas = JSONObject.parseArray(user.get("tmpDatas").toString()); for(int j=0; j < tmpDatas.size(); j++) { JSONObject tmpData = JSONObject.parseObject(tmpDatas.get(j).toString()); // System.out.println(tmpData.get("tmpData")); // System.out.println(tmpData.get("fingerIndex")); // System.out.println(tmpData.get("iFlag")); if(tmpData != null) { MjFingerprint mjFingerprint = new MjFingerprint(); mjFingerprint.setId(IdUtils.getUUIDInOrderId()+""); mjFingerprint.setUserId(Long.parseLong(user.get("id").toString())); if(tmpData.get("tmpData") != null) { mjFingerprint.setTmpdata(tmpData.get("tmpData").toString()); } if(StringUtils.isNotEmpty(tmpData.get("fingerIndex").toString())) { mjFingerprint.setFingerindex(Integer.parseInt(tmpData.get("fingerIndex").toString())); } mjFingerprintMapper.insertMjFingerprint(mjFingerprint); //插入用户指纹 } } } } } }catch (Exception e){ } return 0; } /** * 从读头清除用户信息 * @param fingerprintReadHead * @return */ @Override public Integer removeUserInfoFromFingerHead(MjFingerprintReadHead fingerprintReadHead) { RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); MultiValueMap map= new LinkedMultiValueMap<>(); map.add("ip", fingerprintReadHead.getIpOrOther()); map.add("port", fingerprintReadHead.getPort()); HttpEntity> request = new HttpEntity<>(map, headers); ResponseEntity response = restTemplate.postForEntity( UrlConstant.ZK_URL+"api/SDZ/ZktResetData", request , String.class ); JSONObject jsonObject = JSONObject.parseObject(response.getBody()); return (int)jsonObject.get("code"); } /** * 唤起指纹录入界面 * * @return */ public void getFingerInterface(MjWorkUser mjWorkUser, Integer fingerprint) { RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); MultiValueMap map= new LinkedMultiValueMap<>(); map.add("ip", UrlConstant.FIGERPRINT_URL); map.add("port", UrlConstant.FIGERPRINT_PORT); map.add("id", mjWorkUser.getId().toString()); map.add("fingerIndex", fingerprint.toString()); HttpEntity> request = new HttpEntity<>(map, headers); ResponseEntity response = restTemplate.postForEntity( UrlConstant.ZK_URL+"api/SDZ/ZktStartEnroll", request , String.class ); JSONObject jsonObject = JSONObject.parseObject(response.getBody()); } /** * 删除用户指纹 * * @return */ public void removeFingerTmp(String userId, String ip, String port) { RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); MultiValueMap map= new LinkedMultiValueMap<>(); map.add("ip", ip); map.add("port", port); map.add("id", userId); HttpEntity> request = new HttpEntity<>(map, headers); ResponseEntity response = restTemplate.postForEntity( UrlConstant.ZK_URL+"api/SDZ/ZktDelUserTmp", request , String.class ); JSONObject jsonObject = JSONObject.parseObject(response.getBody()); } @Override public Integer removeUserTmp(MjFingerprintReadHead fingerprintReadHead) { return getUsersFromHead(fingerprintReadHead.getIpOrOther(), fingerprintReadHead.getPort()); } private Integer getUsersFromHead(String ip, String port) { RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); MultiValueMap map= new LinkedMultiValueMap<>(); map.add("ip", ip); map.add("port", port); HttpEntity> request = new HttpEntity<>(map, headers); ResponseEntity response = restTemplate.postForEntity( UrlConstant.ZK_URL+"api/SDZ/ZktResetDataNew", request , String.class ); //清除指纹 ResponseEntity response1 = null; ResponseEntity response2 = null; ResponseEntity response3 = null; JSONObject jsonObject = JSONObject.parseObject(response.getBody()); JSONObject jsonObject1 = null; JSONObject jsonObject2 = null; JSONObject jsonObject3 = null; if(jsonObject != null && (int)jsonObject.get("code") == 0) { response1 = restTemplate.postForEntity( UrlConstant.ZK_URL+"api/SDZ/ZktRestartDevice", request , String.class ); //重启读头 jsonObject1 = JSONObject.parseObject(response1.getBody()); }else { System.out.println(response.getBody()); return 5; } if(response1 != null && (int)jsonObject1.get("code") == 0) { SimpleDateFormat dfs = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String startTime = DateUtils.getTime(); try { Date begin = dfs.parse(startTime); while(true) { response2 = restTemplate.postForEntity( UrlConstant.ZK_URL+"api/SDZ/ZktIsAlive", request , String.class ); //获取连接状态 jsonObject2 = JSONObject.parseObject(response2.getBody()); if(response2 != null) { if((int)jsonObject2.get("code") == 0) { response3 = restTemplate.postForEntity( UrlConstant.ZK_URL+"api/SDZ/ZktRegEvent", request , String.class ); //注册 jsonObject3 = JSONObject.parseObject(response3.getBody()); break; }else { String endTime = DateUtils.getTime(); Date end = dfs.parse(endTime); long between=(end.getTime()-begin.getTime())/1000;//除以1000是为了转换成秒 if(between > 180) { return 2; //2超过一分钟未成功重启读头 } } } } } catch (ParseException e) { e.printStackTrace(); return 1; //1操作失败 } }else { return 3; } if(response3 == null) { return 4; //1操作失败 } return (int)jsonObject3.get("code"); } @Override public Integer cleanFingerInfo(MjFingerprintReadHead fingerprintReadHead) { RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); MultiValueMap map= new LinkedMultiValueMap<>(); map.add("ip", fingerprintReadHead.getIpOrOther()); map.add("port", fingerprintReadHead.getPort()); HttpEntity> request = new HttpEntity<>(map, headers); ResponseEntity response = restTemplate.postForEntity( UrlConstant.ZK_URL+"api/SDZ/ZktResetDataNew", request , String.class ); JSONObject jsonObject = JSONObject.parseObject(response.getBody()); return (int)jsonObject.get("code"); } @Override public Integer restartHead(MjFingerprintReadHead fingerprintReadHead) { RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); MultiValueMap map= new LinkedMultiValueMap<>(); map.add("ip", fingerprintReadHead.getIpOrOther()); map.add("port", fingerprintReadHead.getPort()); HttpEntity> request = new HttpEntity<>(map, headers); ResponseEntity response = restTemplate.postForEntity( UrlConstant.ZK_URL+"api/SDZ/ZktRestartDevice", request , String.class ); JSONObject jsonObject = JSONObject.parseObject(response.getBody()); return (int)jsonObject.get("code"); } @Override public Integer getConnectStatus(MjFingerprintReadHead fingerprintReadHead) { RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); MultiValueMap map= new LinkedMultiValueMap<>(); map.add("ip", fingerprintReadHead.getIpOrOther()); map.add("port", fingerprintReadHead.getPort()); HttpEntity> request = new HttpEntity<>(map, headers); ResponseEntity response = restTemplate.postForEntity( UrlConstant.ZK_URL+"api/SDZ/ZktIsAlive", request , String.class ); JSONObject jsonObject = JSONObject.parseObject(response.getBody()); return (int)jsonObject.get("code"); } @Override public Integer register(MjFingerprintReadHead fingerprintReadHead) { RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); MultiValueMap map= new LinkedMultiValueMap<>(); map.add("ip", fingerprintReadHead.getIpOrOther()); map.add("port", fingerprintReadHead.getPort()); HttpEntity> request = new HttpEntity<>(map, headers); ResponseEntity response = restTemplate.postForEntity( UrlConstant.ZK_URL+"api/SDZ/ZktRegEvent", request , String.class ); JSONObject jsonObject = JSONObject.parseObject(response.getBody()); return (int)jsonObject.get("code"); } @Override public List getNewUser() { List list = mjWorkUserMapper.selectNewUser(); return list; } }