增加向风控上传设备数据代码
diff --git a/build.gradle b/build.gradle
index bed1563..ff98f78 100644
--- a/build.gradle
+++ b/build.gradle
@@ -88,7 +88,7 @@
implementation 'net.javacrumbs.shedlock:shedlock-spring:2.5.0'
implementation 'net.javacrumbs.shedlock:shedlock-provider-redis-spring:2.5.0'
implementation files('libs/ojdbc6.jar')
-
+ implementation 'com.alibaba:fastjson:1.2.60'
annotationProcessor 'org.projectlombok:lombok:1.18.8'
compileOnly 'org.projectlombok:lombok:1.18.8'
annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/Constants.java b/src/main/java/com/supwisdom/dlpay/framework/util/Constants.java
index 148138c..a8c7a22 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/Constants.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/Constants.java
@@ -12,4 +12,9 @@
public static final String REDISKEY_SHORTURL = "shorturl_";
public static final String WECHAT_AGENT = "micromessenger";
public static final String WECHAT_MINIPROGRAM = "miniprogram";
+
+ public final static String DEVICE_STATUS_NORMAL = "1";
+ public final static String DEVICE_STATUS_CLOSED = "2";
+ public final static String MONITOR_SUBAPP_WATER = "water";
+ public final static int MONITOR_SUCCESS_CODE = 200;
}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/WaterBudinessConstants.java b/src/main/java/com/supwisdom/dlpay/framework/util/WaterBudinessConstants.java
index 009e288..0d83771 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/WaterBudinessConstants.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/WaterBudinessConstants.java
@@ -10,4 +10,6 @@
public final static String WATER_SECRET = "water_secret";
public final static String WATER_DTLCREDIT_MAXCOUNT = "water_dtlcredit_maxcount"; // 单笔流水每日最大入账次数
public final static String WATER_DTLCREDIT_INTERVALHOUR = "water_dtlcredit_intervalhour"; // 单笔流水入账间隔小时数
+ public final static String WATER_MONITOR_URL = "water_monitor_url"; // 设备监控程序地址
+
}
diff --git a/src/main/java/com/supwisdom/dlpay/util/RestTemplateConfig.java b/src/main/java/com/supwisdom/dlpay/util/RestTemplateConfig.java
new file mode 100644
index 0000000..297fc17
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/util/RestTemplateConfig.java
@@ -0,0 +1,18 @@
+package com.supwisdom.dlpay.util;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.client.SimpleClientHttpRequestFactory;
+import org.springframework.web.client.RestTemplate;
+
+@Configuration
+public class RestTemplateConfig {
+
+ @Bean
+ public RestTemplate restTemplate() {
+ SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
+ factory.setConnectTimeout(15000);
+ factory.setReadTimeout(5000);
+ return new RestTemplate(factory);
+ }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/water/bean/MonitorResult.java b/src/main/java/com/supwisdom/dlpay/water/bean/MonitorResult.java
new file mode 100644
index 0000000..4d0a627
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/water/bean/MonitorResult.java
@@ -0,0 +1,22 @@
+package com.supwisdom.dlpay.water.bean;
+
+public class MonitorResult {
+ private int code;
+ private String msg;
+
+ public int getCode() {
+ return code;
+ }
+
+ public void setCode(int code) {
+ this.code = code;
+ }
+
+ public String getMsg() {
+ return msg;
+ }
+
+ public void setMsg(String msg) {
+ this.msg = msg;
+ }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/water/service/impl/DeviceServiceImpl.java b/src/main/java/com/supwisdom/dlpay/water/service/impl/DeviceServiceImpl.java
index e41dfae..12d3d56 100644
--- a/src/main/java/com/supwisdom/dlpay/water/service/impl/DeviceServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/water/service/impl/DeviceServiceImpl.java
@@ -1,28 +1,34 @@
package com.supwisdom.dlpay.water.service.impl;
-import com.supwisdom.dlpay.exception.TransactionProcessException;
+import com.alibaba.fastjson.JSON;
import com.supwisdom.dlpay.framework.dao.DictionaryDao;
import com.supwisdom.dlpay.framework.domain.TDictionary;
+import com.supwisdom.dlpay.framework.service.BusinessparaService;
import com.supwisdom.dlpay.framework.util.*;
import com.supwisdom.dlpay.framework.util.Dictionary;
import com.supwisdom.dlpay.water.DeviceLineCheckParam;
import com.supwisdom.dlpay.water.DeviceLoginParam;
+import com.supwisdom.dlpay.water.bean.DeviceSearchBean;
+import com.supwisdom.dlpay.water.bean.MonitorResult;
import com.supwisdom.dlpay.water.dao.AreaDao;
import com.supwisdom.dlpay.water.dao.DeviceDao;
import com.supwisdom.dlpay.water.dao.DeviceFeeConfigDao;
import com.supwisdom.dlpay.water.dao.FeeConfigDao;
import com.supwisdom.dlpay.water.domain.*;
import com.supwisdom.dlpay.water.service.DeviceService;
-import com.supwisdom.dlpay.water.bean.DeviceSearchBean;
import org.hibernate.query.internal.NativeQueryImpl;
import org.hibernate.transform.Transformers;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.domain.Specification;
+import org.springframework.http.*;
import org.springframework.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@@ -33,6 +39,7 @@
@Service
public class DeviceServiceImpl implements DeviceService {
+ private Logger logger = LoggerFactory.getLogger(DeviceServiceImpl.class);
@Autowired
private DeviceDao deviceDao;
@@ -49,6 +56,12 @@
@Autowired
private DictionaryDao dictionaryDao;
+ @Autowired
+ private RestTemplate restTemplate;
+
+ @Autowired
+ private BusinessparaService businessparaService;
+
@PersistenceContext
private EntityManager entityManager;
@@ -107,6 +120,13 @@
device.setAreano(region.getAreano());
device.setDeviceStatus("normal");
deviceDao.save(device);
+
+ // 上传设备数据
+ MonitorResult monitorResult = deviceRegister(region, device,Constants.DEVICE_STATUS_NORMAL);
+ if (Constants.MONITOR_SUCCESS_CODE != monitorResult.getCode()) {
+ logger.error(monitorResult.getMsg());
+ throw new RuntimeException("设备数据上传失败:" + monitorResult.getMsg());
+ }
return true;
}
return false;
@@ -161,6 +181,16 @@
if (device != null) {
device.setDeviceStatus("closed");
deviceDao.save(device);
+ Optional<TArea> optional = areaDao.findByAvailableAndAreano(1, device.getAreano());
+ if (!optional.isPresent()) {
+ throw new RuntimeException("设备所属区域未找到");
+ }
+ TArea area = optional.get();
+ MonitorResult monitorResult = deviceRegister(area, device,Constants.DEVICE_STATUS_CLOSED);
+ if (Constants.MONITOR_SUCCESS_CODE != monitorResult.getCode()) {
+ logger.error(monitorResult.getMsg());
+ throw new RuntimeException("设备数据上传失败:" + monitorResult.getMsg());
+ }
return true;
}
return false;
@@ -217,6 +247,23 @@
device.setSoftVer(param.getHwVer());
deviceDao.save(device);
Map<String, String> deviceParam = getParaMapByDeviceno(param.getDeviceno());
+ Optional<TArea> optional = areaDao.findByAvailableAndAreano(1, device.getAreano());
+ if (!optional.isPresent()) {
+ result.put("flag", false);
+ result.put("errorMsg", "设备区域未找到");
+ return result;
+ }
+ TArea area = optional.get();
+
+ //向监控程序上传设备信息
+ MonitorResult monitorResult = deviceRegister(area, device,Constants.DEVICE_STATUS_NORMAL);
+ if (Constants.MONITOR_SUCCESS_CODE != monitorResult.getCode()) {
+ logger.error(monitorResult.getMsg());
+ result.put("flag", false);
+ result.put("errorMsg", "设备信息上传失败:" + monitorResult.getMsg());
+ return result;
+ }
+
result.put("flag", true);
result.put(WaterDeviceParam.devOfflineMaxHour, deviceParam.get(WaterDeviceParam.devOfflineMaxHour));
result.put(WaterDeviceParam.pulseInHML, deviceParam.get(WaterDeviceParam.pulseInHML));
@@ -227,13 +274,59 @@
return result;
}
+ private MonitorResult deviceRegister(TArea area, TDevice device,String status) {
+ HashMap<String, String> data = new HashMap<>(8);
+
+ data.put("areaname", area.getAreaName());
+ data.put("status", status);
+ data.put("devicename", device.getDevicename());
+ data.put("devphyid", device.getDeviceno());
+ data.put("devverno", device.getSoftVer());
+ data.put("source", Constants.MONITOR_SUBAPP_WATER);
+ String url = businessparaService.findByParakey(WaterBudinessConstants.WATER_MONITOR_URL).getParaval();
+ String response = httpPost(url + "register", JSON.toJSONString(data));
+ return JSON.parseObject(response, MonitorResult.class);
+ }
+
+ private MonitorResult deviceHeartBeat(TDevice device) {
+ HashMap<String, String> data = new HashMap<>(4);
+ data.put("devphyid", device.getDeviceno());
+ data.put("source", Constants.MONITOR_SUBAPP_WATER);
+ String url = businessparaService.findByParakey(WaterBudinessConstants.WATER_MONITOR_URL).getParaval();
+ String response = httpPost(url + "beat", JSON.toJSONString(data));
+ return JSON.parseObject(response, MonitorResult.class);
+ }
+
+ private String httpPost(String url,String json){
+ HttpHeaders headers = new HttpHeaders();
+ MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8");
+ headers.setContentType(type);
+ headers.add("Accept", MediaType.APPLICATION_JSON.toString());
+ HttpEntity<String> formEntity = new HttpEntity<>(json, headers);
+ ResponseEntity<String> postEntity = restTemplate.postForEntity(url, formEntity, String.class);
+ if (postEntity.getStatusCode().equals(HttpStatus.OK) && postEntity.hasBody()) {
+ return postEntity.getBody();
+ } else {
+ throw new RuntimeException("上传设备数据请求异常");
+ }
+ }
+
@Override
public TDevice lineCheck(DeviceLineCheckParam param) {
TDevice device = deviceDao.findByDeviceno(param.getDeviceno());
if (device != null) {
+ if ("closed".equals(device.getDeviceStatus())) {
+ throw new RuntimeException("设备已注销");
+ }
String deviceLineCheck = param.getTermdate() + param.getTermtime();
device.setDeviceLineCheck(deviceLineCheck);
deviceDao.save(device);
+ //向监控程序上传设备数据
+ MonitorResult monitorResult = deviceHeartBeat(device);
+ if (Constants.MONITOR_SUCCESS_CODE != monitorResult.getCode()) {
+ logger.error(monitorResult.getMsg());
+ throw new RuntimeException("设备数据上传失败:" + monitorResult.getMsg());
+ }
return device;
}
return null;
diff --git a/src/main/kotlin/com/supwisdom/dlpay/water/controller/api_controller.kt b/src/main/kotlin/com/supwisdom/dlpay/water/controller/api_controller.kt
index e13fdd0..4d940f9 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/water/controller/api_controller.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/water/controller/api_controller.kt
@@ -1,6 +1,5 @@
package com.supwisdom.dlpay.water.controller
-import com.supwisdom.dlpay.api.bean.JsonResult
import com.supwisdom.dlpay.api.bean.QueryCardParam
import com.supwisdom.dlpay.api.bean.QueryUserParam
import com.supwisdom.dlpay.framework.ResponseBodyBuilder
diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql
index c2749b3..c20963d 100644
--- a/src/main/resources/data.sql
+++ b/src/main/resources/data.sql
@@ -54,6 +54,8 @@
INSERT INTO "tb_businesspara"("parakey", "paraval") VALUES ('water_appid', '700001');
INSERT INTO "tb_businesspara"("parakey", "paraval") VALUES ('water_dtlcredit_maxcount', '3');
INSERT INTO "tb_businesspara"("parakey", "paraval") VALUES ('water_dtlcredit_intervalhour', '1');
+INSERT INTO "tb_businesspara"("parakey", "paraval") VALUES ('water_monitor_url', 'http://127.0.0.1:8082/collect/device/');
+
INSERT INTO "tb_syspara"("paraid", "displayflag", "editflag", "lastsaved", "paraname", "paraunit", "paraval", "remark", "valuetype") VALUES (1, '1', 1, '1', 'shopaccno', NULL, NULL, NULL, NULL);