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<String> areaIdList = new ArrayList<>();
|
//
|
// MjOrderDetail mjOrderDetail = new MjOrderDetail();
|
// mjOrderDetail.setUserId(mjWorkUser.getId());
|
// List<MjOrderDetail> 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<MjFingerprintReadHead> fingerprintReadHeads = mjFingerprintReadHeadService.selectMjFingerprintReadHeadList(fingerprintReadHead);
|
// for(MjFingerprintReadHead head : fingerprintReadHeads) {
|
MultiValueMap<String, String> 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<MultiValueMap<String, String>> request = new HttpEntity<>(map, headers);
|
ResponseEntity<String> 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<String, String> 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<MultiValueMap<String, String>> request = new HttpEntity<>(map, headers);
|
ResponseEntity<String> 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<String, String> map= new LinkedMultiValueMap<>();
|
map.add("ip", readHead.getIpOrOther());
|
map.add("port", readHead.getPort());
|
|
HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(map, headers);
|
ResponseEntity<String> 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<String, String> map= new LinkedMultiValueMap<>();
|
map.add("ip", fingerprintReadHead.getIpOrOther());
|
map.add("port", fingerprintReadHead.getPort());
|
|
HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(map, headers);
|
ResponseEntity<String> 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<String, String> 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<MultiValueMap<String, String>> request = new HttpEntity<>(map, headers);
|
ResponseEntity<String> 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<String, String> map= new LinkedMultiValueMap<>();
|
map.add("ip", ip);
|
map.add("port", port);
|
map.add("id", userId);
|
|
HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(map, headers);
|
ResponseEntity<String> 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<String, String> map= new LinkedMultiValueMap<>();
|
map.add("ip", ip);
|
map.add("port", port);
|
|
HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(map, headers);
|
ResponseEntity<String> response = restTemplate.postForEntity( UrlConstant.ZK_URL+"api/SDZ/ZktResetDataNew", request , String.class ); //清除指纹
|
ResponseEntity<String> response1 = null;
|
ResponseEntity<String> response2 = null;
|
ResponseEntity<String> 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<String, String> map= new LinkedMultiValueMap<>();
|
map.add("ip", fingerprintReadHead.getIpOrOther());
|
map.add("port", fingerprintReadHead.getPort());
|
|
HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(map, headers);
|
ResponseEntity<String> 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<String, String> map= new LinkedMultiValueMap<>();
|
map.add("ip", fingerprintReadHead.getIpOrOther());
|
map.add("port", fingerprintReadHead.getPort());
|
|
HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(map, headers);
|
ResponseEntity<String> 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<String, String> map= new LinkedMultiValueMap<>();
|
map.add("ip", fingerprintReadHead.getIpOrOther());
|
map.add("port", fingerprintReadHead.getPort());
|
|
HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(map, headers);
|
ResponseEntity<String> 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<String, String> map= new LinkedMultiValueMap<>();
|
map.add("ip", fingerprintReadHead.getIpOrOther());
|
map.add("port", fingerprintReadHead.getPort());
|
|
HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(map, headers);
|
ResponseEntity<String> 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<MjWorkUser> getNewUser() {
|
List<MjWorkUser> list = mjWorkUserMapper.selectNewUser();
|
return list;
|
}
|
}
|