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);
 
