diff --git a/cloud/dahua/src/main/java/com/example/dahua/service/imp/PermissFaceServiceImp.java b/cloud/dahua/src/main/java/com/example/dahua/service/imp/PermissFaceServiceImp.java
index fd39bc8..2d138d3 100644
--- a/cloud/dahua/src/main/java/com/example/dahua/service/imp/PermissFaceServiceImp.java
+++ b/cloud/dahua/src/main/java/com/example/dahua/service/imp/PermissFaceServiceImp.java
@@ -41,14 +41,7 @@ public class PermissFaceServiceImp implements PermissFaceService {
int schoolId = permissionFaceBean.getSchoolId();
- //编辑设置
PermissionBean permissionBean = permissionFaceBean.getPermissionBean();
- if(!StringUtils.isEmpty(permissionFaceBean.getChannel())){
- permissionBean.setChannel(permissionFaceBean.getChannel());
- }
- if(!StringUtils.isEmpty(permissionFaceBean.getCustomName())){
- permissionBean.setChannel(permissionFaceBean.getCustomName());
- }
int type = permissionFaceBean.getType();
if (null != permissionBean)
@@ -80,12 +73,22 @@ public class PermissFaceServiceImp implements PermissFaceService {
responseBean.setStatus(1);
break;
case 1://编辑
- if (null == permissionFaceDao.getPerFaceWithId(id)) {
+ PermissionFaceBean faceBean = permissionFaceDao.getPerFaceWithId(id);
+ if (null == faceBean) {
responseBean.setMessage("模板不存在");
} else {
responseBean.setMessage("编辑权限模板成功");
+ permissionFaceBean.setChannel(faceBean.getChannel());
+ permissionFaceBean.setCustomName(faceBean.getCustomName());
permissionFaceDao.updatePermissionFace(permissionFaceBean);
}
+ //编辑时设置
+ if(!StringUtils.isEmpty(permissionFaceBean.getChannel())){
+ permissionBean.setChannel(permissionFaceBean.getChannel());
+ }
+ if(!StringUtils.isEmpty(permissionFaceBean.getCustomName())){
+ permissionBean.setChannel(permissionFaceBean.getCustomName());
+ }
responseBean.setData(null);
sendPermiss2Dev(permissionFaceBean);
responseBean.setStatus(1);
diff --git a/cloud/dahua/src/main/resources/mapper/PermissionFaceMapper.xml b/cloud/dahua/src/main/resources/mapper/PermissionFaceMapper.xml
index 58632cf..fdf4342 100644
--- a/cloud/dahua/src/main/resources/mapper/PermissionFaceMapper.xml
+++ b/cloud/dahua/src/main/resources/mapper/PermissionFaceMapper.xml
@@ -19,7 +19,7 @@
-
+
diff --git a/cloud/dahua/src/test/java/com/example/dahua/mapper/SearchMapperTest.java b/cloud/dahua/src/test/java/com/example/dahua/mapper/SearchMapperTest.java
index bc9184d..807c791 100644
--- a/cloud/dahua/src/test/java/com/example/dahua/mapper/SearchMapperTest.java
+++ b/cloud/dahua/src/test/java/com/example/dahua/mapper/SearchMapperTest.java
@@ -2,11 +2,18 @@ package com.example.dahua.mapper;
import com.alibaba.fastjson.JSON;
import com.example.dahua.Tester;
+import com.example.dahua.async.MyScheduledTask;
import com.example.dahua.bean.CheckIn;
+import com.example.dahua.bean.PermissionBean;
+import com.example.dahua.bean.PermissionFaceBean;
import com.example.dahua.bean.ShortMsg;
+import com.example.dahua.dao.PermissionFaceDao;
import com.example.dahua.dao.UserDao;
+import com.example.dahua.mqtt.MqttManager;
+import com.example.dahua.service.PermissFaceService;
import com.example.dahua.service.UserService;
import com.example.dahua.utils.DateUtils;
+import com.example.dahua.utils.JsonUtils;
import com.example.dahua.xiananDao.SearchMapper;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
@@ -31,6 +38,12 @@ public class SearchMapperTest extends Tester {
@Autowired
private UserService userService;
+ @Autowired
+ private PermissionFaceDao permissionFaceDao;
+
+ @Autowired
+ private PermissFaceService permissFaceService;
+
@Test
public void test(){
//有效刷卡调考勤存储过程
@@ -66,5 +79,45 @@ public class SearchMapperTest extends Tester {
}
+ @Test
+ public void test4(){
+ PermissionFaceBean faceBean = permissionFaceDao.getPerFaceWithId(45);
+ System.out.println(JsonUtils.nonDefaultMapper().toJson(faceBean));
+ faceBean.setType(1);
+
+ String json = "{\"studentType\":\"1\",\"deviceIds\":[\"ytj01hzszdddddddd\"],\"weekDays\":[{\"weekTimes\":[{\"startTime\":\"10:00\",\"endTime\":\"12:05\"}],\"sex\":\"1\",\"weekDay\":\"3,4,5\"}]}";
+ PermissionBean permissionBean = JsonUtils.nonDefaultMapper().fromJson(json,PermissionBean.class);
+ faceBean.setPermissionBean(permissionBean);
+ faceBean.setPerrmissName("顺治测试学校");
+ faceBean.setChannel("");
+ faceBean.setCustomName("");
+ permissFaceService.addPermissionFace(faceBean);
+
+ }
+
+
+ private MqttManager mqttManager;
+
+ @Autowired
+ private MyScheduledTask myScheduledTask;
+
+ @Test
+ public void test5(){
+ if(null == mqttManager){
+ mqttManager = new MqttManager();
+ mqttManager.init();
+ }
+
+ String eventTime = DateUtils.date2String(new Date(), DateUtils.format2);
+ String deviceId ="";
+ String cardNo ="";
+ String content = "考勤成功!,设备:" + deviceId + "卡号:" + cardNo + "方向:进门" + "______" + eventTime;
+
+ myScheduledTask.sendMQMess(content,deviceId);
+ System.out.println("发送成功");
+ }
+
+
+
// boolean uploadImgAndUserInfo(String file, String schoolId, String studentCode, String clint_type, int userType, String devid);
}
diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/AttendanceController.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/AttendanceController.java
index 11e3b7c..8d1d309 100644
--- a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/AttendanceController.java
+++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/AttendanceController.java
@@ -68,6 +68,11 @@ public class AttendanceController {
attendacenService.updateAttendance(clientId);
}
+ /**
+ * 关联的显示看板设备
+ * @param placeId
+ * @return
+ */
@RequestMapping(value = "selectRoomAttendance", method = RequestMethod.GET)
List selectRoomAttendance(@RequestParam("placeId") int placeId) {
return attendacenService.selectRoomAttendance(placeId);
@@ -93,4 +98,15 @@ public class AttendanceController {
return DateUtils.date2String(date, DateUtils.format2);
}
}
+
+ /**
+ * 根据考勤设备ID 获取关联看板设备ID
+ * @param deviceId
+ * @return
+ */
+ @RequestMapping(value = "selectPlaceAttendance", method = RequestMethod.GET)
+ String selectPlaceAttendance(@RequestParam("placeId") String deviceId) {
+ return attendacenService.selectPlaceAttendance(deviceId);
+ }
+
}
diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/UserController.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/UserController.java
index 8e850ef..0ee77a0 100644
--- a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/UserController.java
+++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/controller/UserController.java
@@ -63,4 +63,14 @@ public class UserController {
SzVSchoolStudent selectByStudentId(@RequestParam("studentId") int studentId) {
return userService.selectByStudentId(studentId);
}
+
+ @RequestMapping(value = "getSchoolIdWidthCardNum", method = RequestMethod.GET)
+ int getSchoolIdWidthCardNum(@RequestParam("num") String num) {
+ return userService.getSchoolIdWidthCardNum(num);
+ }
+
+ @RequestMapping(value = "getClintIds", method = RequestMethod.GET)
+ List getClintIds(@RequestParam("schoolId") String schoolId) {
+ return userService.getClintIds(schoolId);
+ }
}
diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/AttendaceMapper.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/AttendaceMapper.java
index 3f4bb2e..d624df4 100644
--- a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/AttendaceMapper.java
+++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/AttendaceMapper.java
@@ -23,4 +23,6 @@ public interface AttendaceMapper {
List selectCloudAttendanceBySchoolId(int schoolId);
+ String selectPlaceAttendance(String deviceId);
+
}
diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/UserMapper.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/UserMapper.java
index fc95e51..6be610f 100644
--- a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/UserMapper.java
+++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/mapper/UserMapper.java
@@ -24,4 +24,8 @@ public interface UserMapper {
StudentBean getStudent_NumWitdCode(@Param("studentcode") String studentcode);
+ int getSchoolIdWidthCardNum(@Param("cardNum") String cardNum);
+
+ List getClintIds(@Param("schoolId") String schoolId);
+
}
diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/AttendacenService.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/AttendacenService.java
index d5965eb..fea9567 100644
--- a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/AttendacenService.java
+++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/AttendacenService.java
@@ -17,9 +17,19 @@ public interface AttendacenService {
int updateAttendance(String client_id);
+ /**
+ * 关联的显示看板设备
+ */
List selectRoomAttendance(int placeId);
List selectCloudAttendance();
List selectCloudAttendanceBySchoolId(int schoolId);
+
+ /**
+ * 根据考勤设备ID 获取关联看板设备ID
+ * @param deviceId
+ * @return
+ */
+ String selectPlaceAttendance(String deviceId);
}
diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/UserService.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/UserService.java
index 5633655..9e53d9e 100644
--- a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/UserService.java
+++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/UserService.java
@@ -30,4 +30,8 @@ public interface UserService {
int insertTemperature(CwStutemperaturereocrd record);
+ int getSchoolIdWidthCardNum(String num);
+
+ List getClintIds(String schoolId);
+
}
diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/AttendacenServiceImp.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/AttendacenServiceImp.java
index 9419151..3bc530e 100644
--- a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/AttendacenServiceImp.java
+++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/AttendacenServiceImp.java
@@ -35,6 +35,11 @@ public class AttendacenServiceImp implements AttendacenService {
return attendaceMapper.updateAttendance(client_id);
}
+ /**
+ * 关联的显示看板设备
+ * @param placeId
+ * @return
+ */
@Override
public List selectRoomAttendance(int placeId) {
return attendaceMapper.selectRoomAttendance(placeId);
@@ -49,4 +54,14 @@ public class AttendacenServiceImp implements AttendacenService {
public List selectCloudAttendanceBySchoolId(int schoolId) {
return attendaceMapper.selectCloudAttendanceBySchoolId(schoolId);
}
+
+ /**
+ * 根据考勤设备ID 获取关联看板设备ID
+ * @param deviceId
+ * @return
+ */
+ @Override
+ public String selectPlaceAttendance(String deviceId) {
+ return attendaceMapper.selectPlaceAttendance(deviceId);
+ }
}
diff --git a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/UserServiceImpl.java b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/UserServiceImpl.java
index 5337505..92646c7 100644
--- a/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/UserServiceImpl.java
+++ b/cloud/search_smartCampus/src/main/java/com/sincere/smartSearch/service/impl/UserServiceImpl.java
@@ -93,4 +93,14 @@ public class UserServiceImpl implements UserService {
}
return 0;
}
+
+ @Override
+ public int getSchoolIdWidthCardNum(String num) {
+ return userMapper.getSchoolIdWidthCardNum(num);
+ }
+
+ @Override
+ public List getClintIds(String schoolId) {
+ return userMapper.getClintIds(schoolId);
+ }
}
diff --git a/cloud/search_smartCampus/src/main/resources/mapper/AttendanceMapper.xml b/cloud/search_smartCampus/src/main/resources/mapper/AttendanceMapper.xml
index 8bf4053..7b70b3b 100644
--- a/cloud/search_smartCampus/src/main/resources/mapper/AttendanceMapper.xml
+++ b/cloud/search_smartCampus/src/main/resources/mapper/AttendanceMapper.xml
@@ -39,7 +39,7 @@
+
+
diff --git a/cloud/search_smartCampus/src/main/resources/mapper/UserMapper.xml b/cloud/search_smartCampus/src/main/resources/mapper/UserMapper.xml
index 8403aab..6a27022 100644
--- a/cloud/search_smartCampus/src/main/resources/mapper/UserMapper.xml
+++ b/cloud/search_smartCampus/src/main/resources/mapper/UserMapper.xml
@@ -6,4 +6,11 @@
select student_num from SZ_V_School_Student where student_id = #{studentId}
+
+
+
\ No newline at end of file
diff --git a/cloud/zkAttendance/pom.xml b/cloud/zkAttendance/pom.xml
index a1d0ac4..cb2aec2 100644
--- a/cloud/zkAttendance/pom.xml
+++ b/cloud/zkAttendance/pom.xml
@@ -41,6 +41,11 @@
org.springframework.boot
spring-boot-starter-web
+
+ org.eclipse.paho
+ org.eclipse.paho.client.mqttv3
+ 1.1.0
+
diff --git a/cloud/zkAttendance/src/main/java/com/sincere/att/controller/AttPushController.java b/cloud/zkAttendance/src/main/java/com/sincere/att/controller/AttPushController.java
index cd1f99e..de03bab 100644
--- a/cloud/zkAttendance/src/main/java/com/sincere/att/controller/AttPushController.java
+++ b/cloud/zkAttendance/src/main/java/com/sincere/att/controller/AttPushController.java
@@ -7,6 +7,7 @@ import com.sincere.att.feign.ScFeign;
import com.sincere.att.feign.XaFeign;
import com.sincere.att.logs.LogName;
import com.sincere.att.logs.LoggerUtils;
+import com.sincere.att.mqtt.MqtUtils;
import com.sincere.att.vo.AttendanceInfoBean;
import com.sincere.att.vo.CheckOrderVo;
import com.sincere.att.vo.FingerOrderVo;
@@ -410,6 +411,11 @@ public class AttPushController {
JSONObject jsonObject = HttpClientUtils.httpPostJson(urlHXY, jsonResult);
//if ((int) jsonObject.get("status") == 1) {
if ( Integer.parseInt(jsonObject.get("data").toString()) == 0) {
+ /**
+ * 签到成功发送数据到看板 add by 2020-11-17
+ */
+ sendMQMessage(SN,cardNo);
+
Log_kaoInfo.info("出入寝签到成功:" + SN + " 卡号:" + cardNo);
} else {
Log_kaoInfo.info("出入寝签到失败:" + SN + " 卡号:" + cardNo + " result1:" + jsonObject.toJSONString());
@@ -450,6 +456,33 @@ public class AttPushController {
}
}
+ public void sendMQMessage(String deviceId,String cardNum) {
+ //获取寝室关联的场景id
+ String placeId = scFeign.selectPlaceAttendance(deviceId);
+
+ if (null != placeId) {
+ //关联的显示看板设备
+ List kanbanIds = scFeign.selectRoomAttendance(Integer.parseInt(placeId));
+
+ for (int i = 0; i < kanbanIds.size(); i++) {
+ String kanbanId = kanbanIds.get(i);
+ String data = "{\"cmd\":\"" + 34 + "\",\"clientId\":\"" + kanbanId + "\",\"data\":{\"cardNum\":\"" + cardNum+"}}";
+ MqtUtils.getInstance().sendMsg(kanbanId, data);
+ }
+
+ } else {
+ String schoolId = scFeign.getSchoolIdWidthCardNum(cardNum);
+ if(org.springframework.util.StringUtils.isEmpty(schoolId)||Integer.parseInt(schoolId) <=0)return;
+ List clintIds = scFeign.getClintIds(schoolId);
+ for (int i = 0; i < clintIds.size(); i++) {
+ String clintId = clintIds.get(i);
+ String data = "{\"cmd\":\"" + 34 + "\",\"clientId\":\"" + clintId + "\",\"data\":{\"cardNum\":\"" + cardNum + "}}";
+ MqtUtils.getInstance().sendMsg(clintId, data);
+ }
+ }
+
+ }
+
public static void main(String[] args) {
/*JSONObject object = new JSONObject();
object.put("pageIndex",1);
diff --git a/cloud/zkAttendance/src/main/java/com/sincere/att/feign/ScFeign.java b/cloud/zkAttendance/src/main/java/com/sincere/att/feign/ScFeign.java
index 90692d5..95278be 100644
--- a/cloud/zkAttendance/src/main/java/com/sincere/att/feign/ScFeign.java
+++ b/cloud/zkAttendance/src/main/java/com/sincere/att/feign/ScFeign.java
@@ -33,4 +33,12 @@ public interface ScFeign {
String selectStudentNumByStudentId(@RequestParam("studentId") int studentId);
+ @RequestMapping(value = "attendance/selectPlaceAttendance", method = RequestMethod.GET)
+ String selectPlaceAttendance(@RequestParam("deviceId") String deviceId);
+
+ @RequestMapping(value = "/sm/user/getSchoolIdWidthCardNum", method = RequestMethod.GET)
+ String getSchoolIdWidthCardNum(@RequestParam("num") String num);
+
+ @RequestMapping(value = "/sm/user/getClintIds", method = RequestMethod.GET)
+ List getClintIds(@RequestParam("schoolId") String schoolId);
}
diff --git a/cloud/zkAttendance/src/main/java/com/sincere/att/mqtt/MqtUtils.java b/cloud/zkAttendance/src/main/java/com/sincere/att/mqtt/MqtUtils.java
new file mode 100644
index 0000000..6883b65
--- /dev/null
+++ b/cloud/zkAttendance/src/main/java/com/sincere/att/mqtt/MqtUtils.java
@@ -0,0 +1,28 @@
+package com.sincere.att.mqtt;
+
+public class MqtUtils {
+
+ private static MqtUtils mqtUtils;
+
+ private MqttManager mqttManager = null;
+
+ public static MqtUtils getInstance() {
+ if (null == mqtUtils) {
+ synchronized (MqtUtils.class) {
+ if (null == mqtUtils) mqtUtils = new MqtUtils();
+ }
+ }
+ return mqtUtils;
+ }
+
+ public MqtUtils() {
+ mqttManager = new MqttManager();
+ mqttManager.init();
+ }
+
+ public void sendMsg(String deviceId, String content) {
+ mqttManager.sendMq(deviceId, content);
+ }
+
+
+}
diff --git a/cloud/zkAttendance/src/main/java/com/sincere/att/mqtt/MqttManager.java b/cloud/zkAttendance/src/main/java/com/sincere/att/mqtt/MqttManager.java
new file mode 100644
index 0000000..d5100df
--- /dev/null
+++ b/cloud/zkAttendance/src/main/java/com/sincere/att/mqtt/MqttManager.java
@@ -0,0 +1,116 @@
+package com.sincere.att.mqtt;
+
+import lombok.extern.slf4j.Slf4j;
+import org.eclipse.paho.client.mqttv3.*;
+import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
+
+import java.io.UnsupportedEncodingException;
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+
+/**
+ * mqtt 消息发送服务
+ */
+@Slf4j
+public class MqttManager {
+
+ private static String accessKey;
+
+ private static String sign;
+
+ public static MqttClient mqttClient;
+
+ public static String groupId;
+
+ public static String topic;
+
+ private static int qosLevel;
+
+ public void init() {
+ final String brokerUrl = "tcp://post-cn-4590mq2hr03.mqtt.aliyuncs.com:1883";
+ groupId = "GID_HFJSIURFHAQO110";
+ topic = "Topic_Quene_Test";
+ qosLevel = 1;
+ final Boolean cleanSession = false;
+ String clientId = groupId + "@@@9ED96FB6D72C1698";
+ accessKey = "UimvLVp0Wj90P88u";
+ String secretKey = "TE4rZenITG27tiQqHx9qINjx71Nws7";
+ final MemoryPersistence memoryPersistence = new MemoryPersistence();
+ if (null == mqttClient) {
+ try {
+ mqttClient = new MqttClient(brokerUrl, clientId, memoryPersistence);
+ } catch (MqttException e) {
+ e.printStackTrace();
+ }
+ MqttConnectOptions connOpts = new MqttConnectOptions();
+ //cal the sign as password,sign=BASE64(MAC.SHA1(groupId,secretKey))
+ try {
+ sign = Tools.macSignature(clientId.split("@@@")[0], secretKey);
+ } catch (InvalidKeyException e) {
+ e.printStackTrace();
+ } catch (NoSuchAlgorithmException e) {
+ e.printStackTrace();
+ }
+ connOpts.setUserName(accessKey);
+ connOpts.setPassword(sign.toCharArray());
+ connOpts.setCleanSession(cleanSession);
+ connOpts.setKeepAliveInterval(90);
+ connOpts.setAutomaticReconnect(true);
+ mqttClient.setCallback(new MqttCallbackExtended() {
+ @Override
+ public void connectComplete(boolean reconnect, String serverURI) {
+ log.info("connect success");
+ }
+
+ @Override
+ public void connectionLost(Throwable throwable) {
+ log.info("connect lost:" + throwable.toString());
+ throwable.printStackTrace();
+ init();//初始化
+ }
+
+ @Override
+ public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {
+ log.info("receive msg from topic " + s + " , body is " + new String(mqttMessage.getPayload()));
+ }
+
+ @Override
+ public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
+ //this notice make sense when qos >0
+// System.out.println("send msg succeed");
+ }
+ });
+ try {
+ mqttClient.connect(connOpts);
+ } catch (MqttException e) {
+ log.warn("mqtt:" + e.toString());
+ e.printStackTrace();
+ }
+ }
+ }
+
+ public void sendMq(String deviceId, String content) {
+
+ String recvClientId = groupId + "@@@" + deviceId;
+ final String p2pSendTopic = topic + "/p2p/" + recvClientId;
+
+ MqttMessage message = null;
+ try {
+ message = new MqttMessage(content.getBytes("GB2312"));
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ }
+ message.setQos(qosLevel);
+ log.info("发送内容:" + p2pSendTopic + " msg:---------" + content);
+ if (null != mqttClient) {
+ try {
+ mqttClient.publish(p2pSendTopic, message);
+ } catch (MqttException e) {
+ e.printStackTrace();
+ }
+ }
+
+ }
+
+
+}
diff --git a/cloud/zkAttendance/src/main/java/com/sincere/att/mqtt/Tools.java b/cloud/zkAttendance/src/main/java/com/sincere/att/mqtt/Tools.java
new file mode 100644
index 0000000..1c5e2fa
--- /dev/null
+++ b/cloud/zkAttendance/src/main/java/com/sincere/att/mqtt/Tools.java
@@ -0,0 +1,217 @@
+package com.sincere.att.mqtt;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import org.apache.commons.codec.binary.Base64;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.HttpStatus;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.client.utils.URLEncodedUtils;
+import org.apache.http.config.Registry;
+import org.apache.http.config.RegistryBuilder;
+import org.apache.http.conn.socket.ConnectionSocketFactory;
+import org.apache.http.conn.socket.PlainConnectionSocketFactory;
+import org.apache.http.conn.ssl.NoopHostnameVerifier;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.util.EntityUtils;
+
+import javax.crypto.Mac;
+import javax.crypto.spec.SecretKeySpec;
+import javax.net.ssl.SSLContext;
+import javax.net.ssl.TrustManager;
+import javax.net.ssl.X509TrustManager;
+import java.io.IOException;
+import java.nio.charset.Charset;
+import java.security.*;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+import java.util.*;
+
+/**
+ * Created by alvin on 17-3-29.
+ */
+public class Tools {
+ public static Properties loadProperties() {
+ Properties properties = new Properties();
+ try {
+ properties.load(ClassLoader.getSystemResourceAsStream("test.properties"));
+ } catch (IOException e) {
+ }
+ return properties;
+ }
+
+ /**
+ * 计算签名,参数分别是参数对以及密钥
+ *
+ * @param requestParams 参数对,即参与计算签名的参数
+ * @param secretKey 密钥
+ * @return 签名字符串
+ * @throws NoSuchAlgorithmException
+ * @throws InvalidKeyException
+ */
+ public static String doHttpSignature(Map requestParams, String secretKey) throws NoSuchAlgorithmException, InvalidKeyException {
+ List paramList = new ArrayList();
+ for (Map.Entry entry : requestParams.entrySet()) {
+ paramList.add(entry.getKey() + "=" + entry.getValue());
+ }
+ Collections.sort(paramList);
+ StringBuffer sb = new StringBuffer();
+ for (int i = 0; i < paramList.size(); i++) {
+ if (i > 0) {
+ sb.append('&');
+ }
+ sb.append(paramList.get(i));
+ }
+ return macSignature(sb.toString(), secretKey);
+ }
+
+ /**
+ * @param text 要签名的文本
+ * @param secretKey 阿里云MQ secretKey
+ * @return 加密后的字符串
+ * @throws InvalidKeyException
+ * @throws NoSuchAlgorithmException
+ */
+ public static String macSignature(String text, String secretKey) throws InvalidKeyException, NoSuchAlgorithmException {
+ Charset charset = Charset.forName("UTF-8");
+ String algorithm = "HmacSHA1";
+ Mac mac = Mac.getInstance(algorithm);
+ mac.init(new SecretKeySpec(secretKey.getBytes(charset), algorithm));
+ byte[] bytes = mac.doFinal(text.getBytes(charset));
+ return new String(Base64.encodeBase64(bytes), charset);
+ }
+
+ /**
+ * 创建HTTPS 客户端
+ *
+ * @return 单例模式的客户端
+ * @throws KeyStoreException
+ * @throws UnrecoverableKeyException
+ * @throws NoSuchAlgorithmException
+ * @throws KeyManagementException
+ */
+ private static HttpClient httpClient = null;
+
+ public static HttpClient getHttpsClient() throws KeyStoreException, UnrecoverableKeyException, NoSuchAlgorithmException, KeyManagementException {
+ if (httpClient != null) {
+ return httpClient;
+ }
+ X509TrustManager xtm = new X509TrustManager() {
+ @Override
+ public void checkClientTrusted(X509Certificate[] arg0, String arg1)
+ throws CertificateException {
+ }
+
+ @Override
+ public void checkServerTrusted(X509Certificate[] arg0, String arg1)
+ throws CertificateException {
+ }
+
+ @Override
+ public X509Certificate[] getAcceptedIssuers() {
+ return new X509Certificate[]{};
+ }
+ };
+ SSLContext context = SSLContext.getInstance("TLS");
+ context.init(null, new TrustManager[]{xtm}, null);
+ SSLConnectionSocketFactory scsf = new SSLConnectionSocketFactory(context, NoopHostnameVerifier.INSTANCE);
+ Registry sfr = RegistryBuilder.create()
+ .register("http", PlainConnectionSocketFactory.INSTANCE)
+ .register("https", scsf).build();
+ PoolingHttpClientConnectionManager pcm = new PoolingHttpClientConnectionManager(sfr);
+ httpClient = HttpClientBuilder.create().setConnectionManager(pcm).build();
+ return httpClient;
+ }
+
+ public static HttpClient createHttpsClient() throws KeyManagementException, NoSuchAlgorithmException {
+ X509TrustManager xtm = new X509TrustManager() {
+ @Override
+ public void checkClientTrusted(X509Certificate[] arg0, String arg1)
+ throws CertificateException {
+ }
+
+ @Override
+ public void checkServerTrusted(X509Certificate[] arg0, String arg1)
+ throws CertificateException {
+ }
+
+ @Override
+ public X509Certificate[] getAcceptedIssuers() {
+ return new X509Certificate[]{};
+ }
+ };
+ SSLContext context = SSLContext.getInstance("TLS");
+ context.init(null, new TrustManager[]{xtm}, null);
+ SSLConnectionSocketFactory scsf = new SSLConnectionSocketFactory(context, NoopHostnameVerifier.INSTANCE);
+ Registry sfr = RegistryBuilder.create()
+ .register("http", PlainConnectionSocketFactory.INSTANCE)
+ .register("https", scsf).build();
+ PoolingHttpClientConnectionManager pcm = new PoolingHttpClientConnectionManager(sfr);
+ return HttpClientBuilder.create().setConnectionManager(pcm).build();
+ }
+
+ /**
+ * 发起Https Get请求,并得到返回的JSON响应
+ *
+ * @param url 接口Url
+ * @param params 参数u对
+ * @return
+ * @throws IOException
+ * @throws KeyStoreException
+ * @throws UnrecoverableKeyException
+ * @throws NoSuchAlgorithmException
+ * @throws KeyManagementException
+ */
+ public static JSONObject httpsGet(String url, Map params) throws IOException, KeyStoreException, UnrecoverableKeyException, NoSuchAlgorithmException, KeyManagementException {
+ HttpClient client = Tools.getHttpsClient();
+ JSONObject jsonResult = null;
+ //发送get请求
+ List urlParameters = new ArrayList();
+ for (Map.Entry entry : params.entrySet()) {
+ urlParameters.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
+ }
+ String paramUrl = URLEncodedUtils.format(urlParameters, Charset.forName("UTF-8"));
+ HttpGet request = new HttpGet(url + "?" + paramUrl);
+ HttpResponse response = client.execute(request);
+ if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
+ String strResult = EntityUtils.toString(response.getEntity());
+ jsonResult = JSON.parseObject(strResult);
+ }
+ return jsonResult;
+ }
+
+ /**
+ * 工具方法,发送一个http post请求,并尝试将响应转换为JSON
+ *
+ * @param url 请求的方法名url
+ * @param params 参数表
+ * @return 如果请求成功则返回JSON, 否则抛异常或者返回空
+ * @throws IOException
+ */
+ public static JSONObject httpsPost(String url, Map params) throws IOException, UnrecoverableKeyException, NoSuchAlgorithmException, KeyStoreException, KeyManagementException {
+ JSONObject jsonResult = null;
+ //发送get请求
+ HttpClient client = getHttpsClient();
+ HttpPost request = new HttpPost(url);
+ List urlParameters = new ArrayList();
+ for (Map.Entry entry : params.entrySet()) {
+ urlParameters.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
+ }
+ HttpEntity postParams = new UrlEncodedFormEntity(urlParameters);
+ request.setEntity(postParams);
+ HttpResponse response = client.execute(request);
+ if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
+ String strResult = EntityUtils.toString(response.getEntity());
+ jsonResult = JSON.parseObject(strResult);
+ }
+ return jsonResult;
+ }
+}
--
libgit2 0.21.0