diff --git a/src/main/java/com/supwisdom/dlpay/framework/filter/ValidateCodeFilter.java b/src/main/java/com/supwisdom/dlpay/framework/filter/ValidateCodeFilter.java
index 77242b9..491a2e0 100755
--- a/src/main/java/com/supwisdom/dlpay/framework/filter/ValidateCodeFilter.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/filter/ValidateCodeFilter.java
@@ -43,16 +43,28 @@
 	protected void doFilterInternal(HttpServletRequest request,
 																	HttpServletResponse response, FilterChain filterChain)
 			throws ServletException, IOException {
-		if (StringUtil.equals("/login/form", request.getRequestURI())
+		String context = request.getContextPath();
+		if (context == null || "" == context.trim()) {
+			context = "/";
+		}
+		if (request.getRequestURI().isEmpty()) {
+			filterChain.doFilter(request, response);
+			return;
+		}
+		String url = request.getRequestURI();
+		if (!"/".equals(context)) {
+			url = url.replace(context, "");
+		}
+		if (StringUtil.equals("/login/form", url)
 				&& StringUtil.equalsIgnoreCase(request.getMethod(), "post")) {
 			try {
 				validate(request);
 			} catch (ValidateCodeException e) {
-				response.setStatus(HttpStatus.OK.value());
-				response.setContentType("application/json;charset=UTF-8");
-				response.getWriter().write(objectMapper.writeValueAsString(JsonResult.error(400, e.getMessage())));
+				//response.setStatus(HttpStatus.OK.value());
+				//response.setContentType("application/json;charset=UTF-8");
+				//response.getWriter().write(objectMapper.writeValueAsString(JsonResult.error(400, e.getMessage())));
 				//response.sendError(HttpStatus.UNAUTHORIZED.value(),e.getMessage());
-				//myAuthenticationFailureHandler.onAuthenticationFailure(request, response, e);
+				myAuthenticationFailureHandler.onAuthenticationFailure(request, response, e);
 				return;
 			}
 		}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/ShortURLUtil.java b/src/main/java/com/supwisdom/dlpay/framework/util/ShortURLUtil.java
index ad25aee..0081395 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/ShortURLUtil.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/ShortURLUtil.java
@@ -11,15 +11,10 @@
 public class ShortURLUtil {
 
     public static String doGetSinaShortUrl(String longUrl) {
-        String shortUrlService = "http://www.mynb8.com/api/sina"; //新浪服务网址
-        String sinaAppkey = "2223392143"; //注册申请
         String result = "";
         BufferedReader in = null;
         try {
-            String encLongUrl = URLEncoder.encode(longUrl, "UTF-8");
-            String sign = MD5.encodeByMD5(sinaAppkey.trim() + MD5.encodeByMD5(encLongUrl).toLowerCase()).toLowerCase(); //md5(appkey+md5(long_url)) 小写
             //http://www.mynb8.com/api/sina?appkey=APPKEY&sign=SIGN&long_url=LONG_URL
-            String serviceUrl = shortUrlService + "?appkey=" + sinaAppkey + "&sign=" + sign + "&long_url=" + encLongUrl;
             String address = "http://api.t.sina.com.cn/short_url/shorten.json?source=2223392143";
             address += "&url_long=" + URLEncoder.encode(longUrl, "UTF-8");
             URL url = new URL(address);
@@ -36,7 +31,6 @@
             JSONObject json = JSONObject.fromObject(result);
             if (json.getInt("type") != 0) {
 //                logger.error("[" + longUrl + "]短地址生成错误：" + json.getString("rs_msg"));
-                System.out.println("短地址生成错误");
                 return null;
             }
             return json.getString("url_short");
diff --git a/src/main/java/com/supwisdom/dlpay/water/domain/TTransdtl.java b/src/main/java/com/supwisdom/dlpay/water/domain/TTransdtl.java
index bff8cb7..cf68fd4 100644
--- a/src/main/java/com/supwisdom/dlpay/water/domain/TTransdtl.java
+++ b/src/main/java/com/supwisdom/dlpay/water/domain/TTransdtl.java
@@ -26,7 +26,6 @@
   private String deviceno;
 
   @Column(length = 32)
-  @NotNull
   private String userid;
 
   @Column(name = "bankcardno", length = 32)
@@ -52,7 +51,7 @@
   @Column(name = "accdate", length = 8)
   private String accdate;
 
-  @Column(name = "billno", length = 32)
+  @Column(name = "refno", length = 32)
   private String refno;
 
   @Column(name = "accstatus", length = 10)
diff --git a/src/main/java/com/supwisdom/dlpay/water/service/DeviceService.java b/src/main/java/com/supwisdom/dlpay/water/service/DeviceService.java
index 854ba68..4e87205 100644
--- a/src/main/java/com/supwisdom/dlpay/water/service/DeviceService.java
+++ b/src/main/java/com/supwisdom/dlpay/water/service/DeviceService.java
@@ -36,7 +36,7 @@
     @Transactional
     Map<String,Object> deviceLogin(DeviceLoginParam param);
     @Transactional
-    boolean lineCheck(DeviceLineCheckParam param);
+    TDevice lineCheck(DeviceLineCheckParam param);
     @Transactional
     TFeeConfig queryTFeeConfigByDeviceno(String deviceno);
 }
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 276dab0..6334cce 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
@@ -187,6 +187,11 @@
         Map<String, Object> result = new HashMap<>();
         TDevice device = deviceDao.findByDeviceno(param.getDeviceno());
         if (device != null) {
+            if (device.getDeviceStatus().equals("closed")) {
+                result.put("flag", false);
+                result.put("errorMsg", "本设备已注销，签到失败");
+                return result;
+            }
             device.setSoftVer(param.getHwVer());
             deviceDao.save(device);
             result.put("flag", true);
@@ -195,19 +200,20 @@
             return result;
         }
         result.put("flag", false);
+        result.put("errorMsg", "没有编号为" + param.getDeviceno() + "的设备");
         return result;
     }
 
     @Override
-    public boolean lineCheck(DeviceLineCheckParam param) {
+    public TDevice lineCheck(DeviceLineCheckParam param) {
         TDevice device = deviceDao.findByDeviceno(param.getDeviceno());
         if (device != null) {
             String deviceLineCheck = param.getTermdate() + param.getTermtime();
             device.setDeviceLineCheck(deviceLineCheck);
             deviceDao.save(device);
-            return true;
+            return device;
         }
-        return false;
+        return null;
     }
 
     @Override
diff --git a/src/main/kotlin/com/supwisdom/dlpay/water/api_request_param.kt b/src/main/kotlin/com/supwisdom/dlpay/water/api_request_param.kt
index ec0f698..8acd715 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/water/api_request_param.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/water/api_request_param.kt
@@ -141,7 +141,7 @@
     var transtime: String = ""
 
     @Sign
-    var refno: String = ""
+    var billno: String = ""
 
     @Sign
     var amount: Int = 0
@@ -168,13 +168,13 @@
 class UserAuthRequest : APIRequestParam() {
 
     @Sign
-    var refno: String = ""
+    var billno: String = ""
 
     @Sign
     var userid: String = ""
 
     override fun checkParam(): Boolean {
-        if (refno.length != 20 || refno.any { it !in '0'..'9' }) {
+        if (billno.length != 20 || billno.any { it !in '0'..'9' }) {
             throw RequestParamCheckException(TradeErrorCode.INPUT_DATA_ERROR, "流水号长度不符")
         }
         return true
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 714586f..21ff75a 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,7 @@
 package com.supwisdom.dlpay.water.controller
 
 import com.supwisdom.dlpay.framework.ResponseBodyBuilder
+import com.supwisdom.dlpay.framework.dao.BusinessparaDao
 import com.supwisdom.dlpay.framework.service.SystemUtilService
 import com.supwisdom.dlpay.framework.util.ShortURLUtil
 import com.supwisdom.dlpay.framework.util.TradeDict
@@ -32,6 +33,9 @@
     @Autowired
     private lateinit var transdtlService: TransdtlService
 
+    @Autowired
+    private lateinit var businessparaDao: BusinessparaDao
+
     @GetMapping("/devicelogin")
     fun deviceLogin(@RequestBody param: DeviceLoginParam): ResponseEntity<Any> {
         try {
@@ -44,7 +48,7 @@
                         .success())
             }
             return ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .fail(WaterErrorCode.DATA_NOTFOUND_ERROR, "没有编号为" + param.deviceno + "的设备"))
+                    .fail(WaterErrorCode.DATA_NOTFOUND_ERROR, result["errorMsg"].toString()))
         } catch (ex: Exception) {
             return ResponseEntity.ok(ResponseBodyBuilder.create()
                     .exception(WaterErrorCode.PROCESS_ERROR, ex, "系统出错"))
@@ -55,14 +59,14 @@
     @RequestMapping("/linecheck", method = [RequestMethod.GET, RequestMethod.POST])
     fun deviceLineCheck(@RequestBody param: DeviceLineCheckParam): ResponseEntity<Any> {
         try {
-            if (deviceService.lineCheck(param)) {
-                return ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .data("sysdate", systemUtilService.sysdatetime.hostdate)
-                        .data("systemTime", systemUtilService.sysdatetime.hosttime)
-                        .success())
-            }
+            val device = deviceService.lineCheck(param)
+                    ?: return ResponseEntity.ok(ResponseBodyBuilder.create()
+                            .fail(WaterErrorCode.DATA_NOTFOUND_ERROR, "没有编号为${param.deviceno}的设备"))
             return ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .fail(WaterErrorCode.DATA_NOTFOUND_ERROR, "没有编号为${param.deviceno}的设备"))
+                    .data("sysdate", systemUtilService.sysdatetime.hostdate)
+                    .data("systime", systemUtilService.sysdatetime.hosttime)
+                    .data("status", device.deviceStatus)
+                    .success())
         } catch (ex: Exception) {
             return ResponseEntity.ok(ResponseBodyBuilder.create()
                     .exception(WaterErrorCode.PROCESS_ERROR, ex, "系统出错"))
@@ -127,7 +131,7 @@
             //2.将流水号及认证地址返回给终端
             //将认证url转为短码
             val url = ShortURLUtil.doGetSinaShortUrl(
-                    "http://172.28.43.20:8080/water/api/confirm?billno=" + savedTrans.billno)
+                    businessparaDao.findByParakey("water_auth_url").paraval + savedTrans.billno)
             return ResponseEntity.ok(ResponseBodyBuilder.create()
                     .data("billno", savedTrans.billno)
                     .data("url", url)
@@ -141,13 +145,10 @@
 
     @GetMapping("/qrcode/query")
     fun qrcodeQuery(@RequestBody param: QrcodeQueryRequest): ResponseEntity<Any> {
-        try {
             val feeConfig = deviceService.queryTFeeConfigByDeviceno(param.deviceno)
                     ?: return ResponseEntity.ok(ResponseBodyBuilder.create()
                             .fail(WaterErrorCode.DATA_NOTFOUND_ERROR, "未查询到该设备的费率信息"))
             val trans = transdtlService.queryTrans(param)
-                    ?: return ResponseEntity.ok(ResponseBodyBuilder.create()
-                            .fail(WaterErrorCode.DATA_NOTFOUND_ERROR, "未查询到该流水号"))
             return ResponseEntity.ok(ResponseBodyBuilder.create()
                     .data("billno", trans.billno)
                     .data("authstatus", trans.authStatus)
@@ -156,10 +157,6 @@
                     .data("feeunit", 0)
                     .data("paidAmount", 0)
                     .success())
-        } catch (ex: Exception) {
-            return ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .exception(WaterErrorCode.PROCESS_ERROR, ex, "系统出错"))
-        }
     }
 
     @GetMapping("/confirm")
diff --git a/src/main/kotlin/com/supwisdom/dlpay/water/service/transdtl_service.kt b/src/main/kotlin/com/supwisdom/dlpay/water/service/transdtl_service.kt
index e0645b4..240f03e 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/water/service/transdtl_service.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/water/service/transdtl_service.kt
@@ -22,7 +22,7 @@
     }
 
     override fun saveDeviceDtlData(record: UploadRecordRequest): TTransdtl {
-        val dtl = transdtlDao.findByBillnoForUpdate(record.refno)
+        val dtl = transdtlDao.findByBillnoForUpdate(record.billno)
                 ?: throw TransactionProcessException(WaterErrorCode.DATA_NOTFOUND_ERROR,
                         "交易订单号不存在")
         if (record.transtatus == "2") {
@@ -40,10 +40,12 @@
 
     override fun queryTrans(param: QrcodeQueryRequest): TTransdtl {
         return transdtlDao.findByBillnoAndDeviceno(param.billno, param.deviceno)
+            ?: throw TransactionProcessException(WaterErrorCode.DATA_NOTFOUND_ERROR,
+                    "交易订单号不存在")
     }
 
     override fun userAuth(param: UserAuthRequest): TTransdtl {
-        val dtl = transdtlDao.findById(param.refno).orElse(null)
+        val dtl = transdtlDao.findById(param.billno).orElse(null)
                 ?: throw TransactionProcessException(WaterErrorCode.DATA_NOTFOUND_ERROR,
                         "交易订单号不存在")
         dtl.userid = param.userid
diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql
index eee881b..1dcc5e1 100644
--- a/src/main/resources/data.sql
+++ b/src/main/resources/data.sql
@@ -102,11 +102,9 @@
 
 
 INSERT INTO "tb_devicefeeconfig"("deviceid", "feecfgversion", "feeconfig") VALUES (1, NULL, 1);
-
 INSERT INTO "tb_feeconfig"("id", "amount", "max_water_litre", "cfg_version") VALUES (1, 1, 50, NULL);
-
 INSERT INTO "tb_person_identity"("third_uid", "createtime", "lockflag", "lossflag", "status", "userid") VALUES ('1', NULL, 0, 0, '1', 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-
 INSERT INTO "tb_person"("userid", "addr", "country", "email", "idno", "idtype", "lastsaved", "mobile", "name", "nation", "sex", "status", "tel", "zipcode") VALUES ('d1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, '1', NULL, NULL);
+INSERT INTO "tb_businesspara"("parakey", "paraval") VALUES ('water_auth_url', 'http://172.28.43.20:8080/water/api/confirm?billno=');
 
 commit;
\ No newline at end of file
diff --git a/src/main/resources/templates/system/confirm/confirm.html b/src/main/resources/templates/system/confirm/confirm.html
index 062ffb0..5b0452a 100644
--- a/src/main/resources/templates/system/confirm/confirm.html
+++ b/src/main/resources/templates/system/confirm/confirm.html
@@ -26,7 +26,7 @@
         return "d1yctWs5+ks0iQN3m9bUvRHus6HbKbrs"
     }
     var allData = {
-        refno:GetUrlRefnoPara(),
+        billno:GetUrlRefnoPara(),
         userid:GetUserid()
     }
     $("#button-auth").click(function () {
