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 f4ed735..c2246b2 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/ShortURLUtil.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/ShortURLUtil.java
@@ -2,14 +2,16 @@
 
 import com.supwisdom.dlpay.framework.service.BusinessparaService;
 import net.sf.json.JSONObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.io.BufferedReader;
 import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
 import java.net.HttpURLConnection;
 import java.net.URL;
-import java.net.URLEncoder;
 
 @Component
 public class ShortURLUtil {
@@ -17,7 +19,87 @@
     @Autowired
     private BusinessparaService businessparaService;
 
-    public String doGetSinaShortUrl(String longUrl) {
+    private static final Logger logger = LoggerFactory.getLogger(ShortURLUtil.class);
+
+    public String doGetShortUrl(String longUrl) {
+        return doGetBaiduShortUrl(longUrl);
+    }
+
+    public String doGetBaiduShortUrl(String longUrl) {
+        String shortUrlService = businessparaService.findByParakey(WaterBudinessConstants.WATER_SHORTURL_BAIDU).getParaval(); //https://dwz.cn/admin/v2/create
+        String baiduToken = businessparaService.findByParakey(WaterBudinessConstants.WATER_SHORTURL_BAIDU_TOKEN).getParaval(); //由数字和字母组成的32位字符,注册申请
+        if (StringUtil.isEmpty(shortUrlService) || StringUtil.isEmpty(baiduToken)) {
+            logger.error("百度水控短地址生成服务器参数未配置！");
+            return null;
+        }
+
+        String termOfValidity = "1-year";
+        String params = "{\"Url\":\"" + longUrl + "\",\"TermOfValidity\":\"" + termOfValidity + "\"}";
+
+        BufferedReader reader = null;
+        try {
+            // 创建连接
+            URL url = new URL(shortUrlService);
+            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
+            connection.setDoOutput(true);
+            connection.setDoInput(true);
+            connection.setUseCaches(false);
+            connection.setInstanceFollowRedirects(true);
+            connection.setRequestMethod("POST"); // 设置请求方式
+            connection.setRequestProperty("Content-Type", "application/json"); // 设置发送数据的格式
+            connection.setRequestProperty("Token", baiduToken); // 设置发送数据的格式");
+            connection.setConnectTimeout(3000);
+            connection.setReadTimeout(3000);
+
+            // 发起请求
+            connection.connect();
+            OutputStreamWriter out = new OutputStreamWriter(connection.getOutputStream(), "UTF-8"); // utf-8编码
+            out.append(params);
+            out.flush();
+            out.close();
+
+            // 读取响应
+            reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
+            String line;
+            String result = "";
+            while ((line = reader.readLine()) != null) {
+                result += line;
+            }
+            reader.close();
+            //      {
+            //          "Code": 0,
+            //          "ShortUrl": "https://dwz.cn/de3rp2Fl",
+            //          "LongUrl": "http://www.baidu.com",
+            //          "ErrMsg": ""
+            //      }
+            logger.info("Baidu shortUrl origin LongUrl=[" + longUrl + "], return=[" + result + "]");
+            if (StringUtil.isEmpty(result)) {
+                logger.error("百度短网址返回为空！！！");
+                return null;
+            }
+            JSONObject json = JSONObject.fromObject(result);
+            if (json.has("Code") && json.getInt("Code") == 0) {
+                logger.info("百度短地址生成成功！LongUrl=[" + longUrl + "],ShortUrl=[" + json.getString("ShortUrl") + "]");
+                return json.getString("ShortUrl");
+            } else {
+                logger.error("短地址生成失败！！！" + json.getString("ErrMsg"));
+                return null;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        } finally {
+            try {
+                if (null != reader) {
+                    reader.close();
+                }
+            } catch (Exception ex) {
+                ex.printStackTrace();
+            }
+        }
+    }
+
+    /*private String doGetSinaShortUrl(String longUrl) {
         String result = "";
         BufferedReader in = null;
         try {
@@ -50,5 +132,5 @@
                 e.printStackTrace();
             }
         }
-    }
+    }*/
 }
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 ea2a198..df2419d 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/WaterBudinessConstants.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/WaterBudinessConstants.java
@@ -2,7 +2,8 @@
 
 public class WaterBudinessConstants {
     public final static String waterAuthUrl = "water_auth_url";
-    public final static String waterSinaShortUrl = "water_sina_shorturl";
+    public final static String WATER_SHORTURL_BAIDU = "water_shorturl_baidu";
+    public final static String WATER_SHORTURL_BAIDU_TOKEN = "water_shorturl_baidu_token";
     public final static String WATER_SHOP_ACCNO = "water_shopaccno";
     public final static String WATER_APPID = "water_appid";
     public final static String WATER_SECRET = "water_secret";
diff --git a/src/main/java/com/supwisdom/dlpay/water/pay/WaterPayAsyncTask.java b/src/main/java/com/supwisdom/dlpay/water/pay/WaterPayAsyncTask.java
index 73d8e69..d5f60d1 100644
--- a/src/main/java/com/supwisdom/dlpay/water/pay/WaterPayAsyncTask.java
+++ b/src/main/java/com/supwisdom/dlpay/water/pay/WaterPayAsyncTask.java
@@ -57,7 +57,7 @@
         if (TradeDict.PAY_MODE_CARD.equals(collectdtl.getMode())) {
             waterCardPay(collectdtl);
         } else if (TradeDict.PAY_MODE_QRCODE.equals(collectdtl.getMode())) {
-
+            waterCardPay(collectdtl);   //刷码暂时使用刷卡扣费模式
         } else {
             logger.error("暂不支持的消费类型");
         }
diff --git a/src/main/java/com/supwisdom/dlpay/water/service/AreaService.java b/src/main/java/com/supwisdom/dlpay/water/service/AreaService.java
index 680b94b..d2b7c2f 100644
--- a/src/main/java/com/supwisdom/dlpay/water/service/AreaService.java
+++ b/src/main/java/com/supwisdom/dlpay/water/service/AreaService.java
@@ -41,4 +41,7 @@
 
   @Transactional(rollbackFor = Exception.class,readOnly = true)
   PageResult<TArea> queryAreaByAreaNo(Integer areano);
+
+  @Transactional(rollbackFor = Exception.class,readOnly = true)
+  TArea findByAreaNo(Integer areano);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/water/service/CollectdtlService.java b/src/main/java/com/supwisdom/dlpay/water/service/CollectdtlService.java
index 58bfa28..47c7398 100644
--- a/src/main/java/com/supwisdom/dlpay/water/service/CollectdtlService.java
+++ b/src/main/java/com/supwisdom/dlpay/water/service/CollectdtlService.java
@@ -1,8 +1,9 @@
 package com.supwisdom.dlpay.water.service;
 
+import com.supwisdom.dlpay.api.bean.UserInforResponse;
 import com.supwisdom.dlpay.framework.util.PageResult;
+import com.supwisdom.dlpay.water.StartWaterRequest;
 import com.supwisdom.dlpay.water.UploadRecordRequest;
-import com.supwisdom.dlpay.water.UserAuthRequest;
 import com.supwisdom.dlpay.water.bean.TransdtlCountSearchBean;
 import com.supwisdom.dlpay.water.domain.TCollectdtl;
 import com.supwisdom.dlpay.water.pojo.TCollectdtlDTO;
@@ -24,7 +25,10 @@
     TCollectdtl queryTrans(Integer cobillno);
 
     @Transactional(rollbackFor = Exception.class)
-    TCollectdtl userAuth(UserAuthRequest param);
+    TCollectdtl startWater(StartWaterRequest param);
+
+    @Transactional(rollbackFor = Exception.class)
+    TCollectdtl pretendAsCard(UserInforResponse param, Integer cobillno);
 
     @Transactional(rollbackFor = Exception.class)
     PageResult<TCollectdtlDTO> queryTransdtlDTOByParam(TransdtlSearchBean param);
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 7d73588..21e6eaf 100644
--- a/src/main/java/com/supwisdom/dlpay/water/service/DeviceService.java
+++ b/src/main/java/com/supwisdom/dlpay/water/service/DeviceService.java
@@ -23,6 +23,9 @@
     @Transactional(rollbackFor = Exception.class)
     TDevice queryDeviceById(Integer deviceid);
 
+    @Transactional(rollbackFor = Exception.class,readOnly = true)
+    TDevice queryDeviceByDeviceno(String deviceno);
+
     @Transactional(rollbackFor = Exception.class)
     boolean updateDevice(TDevice device);
 
diff --git a/src/main/java/com/supwisdom/dlpay/water/service/impl/AreaServiceImpl.java b/src/main/java/com/supwisdom/dlpay/water/service/impl/AreaServiceImpl.java
index b80df68..ba1abf4 100644
--- a/src/main/java/com/supwisdom/dlpay/water/service/impl/AreaServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/water/service/impl/AreaServiceImpl.java
@@ -152,6 +152,11 @@
         return new PageResult<>(page);
     }
 
+    @Override
+    public TArea findByAreaNo(Integer areano) {
+        return regionDao.findByAvailableAndAreano(1, areano).orElse(null);
+    }
+
     private void setParentArea(Page<TArea> page) {
         page.get().forEach(area -> {
             Optional<TArea> optional = regionDao.findByAvailableAndAreano(1, area.getParentId());
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 043e561..bc9269c 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,11 +1,10 @@
 package com.supwisdom.dlpay.water.service.impl;
 
+import com.supwisdom.dlpay.exception.TransactionProcessException;
 import com.supwisdom.dlpay.framework.dao.DictionaryDao;
 import com.supwisdom.dlpay.framework.domain.TDictionary;
+import com.supwisdom.dlpay.framework.util.*;
 import com.supwisdom.dlpay.framework.util.Dictionary;
-import com.supwisdom.dlpay.framework.util.PageResult;
-import com.supwisdom.dlpay.framework.util.StringUtil;
-import com.supwisdom.dlpay.framework.util.WaterDeviceParam;
 import com.supwisdom.dlpay.water.DeviceLineCheckParam;
 import com.supwisdom.dlpay.water.DeviceLoginParam;
 import com.supwisdom.dlpay.water.dao.AreaDao;
@@ -77,6 +76,11 @@
     }
 
     @Override
+    public TDevice queryDeviceByDeviceno(String deviceno) {
+        return deviceDao.findByDeviceno(deviceno);
+    }
+
+    @Override
     public boolean updateDevice(TDevice device) {
         Optional<TDevice> deviOption = deviceDao.findById(device.getDeviceid());
         Optional<TArea> regiOption = areaDao.findByAvailableAndAreano(1, device.getAreano());
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 ef6476c..f8bfaad 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
@@ -172,14 +172,11 @@
     }
 }
 
-class UserAuthRequest : APIRequestParam() {
+class StartWaterRequest : APIRequestParam() {
 
     @Sign
     var cobillno: Int = 0
 
-    @Sign
-    var userid: String = ""
-
     override fun checkParam(): Boolean {
         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 91651f9..78fb586 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,16 +1,19 @@
 package com.supwisdom.dlpay.water.controller
 
+import com.supwisdom.dlpay.api.bean.QueryUserParam
 import com.supwisdom.dlpay.framework.ResponseBodyBuilder
 import com.supwisdom.dlpay.framework.service.BusinessparaService
 import com.supwisdom.dlpay.framework.service.SystemUtilService
 import com.supwisdom.dlpay.framework.util.*
+import com.supwisdom.dlpay.paysdk.proxy.UserProxy
 import com.supwisdom.dlpay.system.service.UserDataService
 import com.supwisdom.dlpay.water.*
 import com.supwisdom.dlpay.water.domain.TCollectdtl
 import com.supwisdom.dlpay.water.pay.WaterPayAsyncTask
-import com.supwisdom.dlpay.water.service.AccdtlService
+import com.supwisdom.dlpay.water.service.AreaService
 import com.supwisdom.dlpay.water.service.DeviceService
 import com.supwisdom.dlpay.water.service.CollectdtlService
+import mu.KotlinLogging
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.http.ResponseEntity
 import org.springframework.web.bind.annotation.*
@@ -43,7 +46,12 @@
     private lateinit var waterPayAsyncTask: WaterPayAsyncTask
 
     @Autowired
-    private lateinit var accdtlService: AccdtlService
+    private lateinit var areaService: AreaService
+
+    @Autowired
+    private lateinit var userProxy: UserProxy
+
+    private val logger = KotlinLogging.logger { }
 
     @PostMapping("/devicelogin")
     fun deviceLogin(param: DeviceLoginParam): ResponseEntity<Any> {
@@ -144,7 +152,7 @@
             val savedTrans = collectdtlService.createNewTransdtl(trans)
             //2.将流水号及认证地址返回给终端
             //将认证url转为短码
-            val url = shortURLUtil.doGetSinaShortUrl(
+            val url = shortURLUtil.doGetShortUrl(
                     businessparaService.findByParakey(WaterBudinessConstants.waterAuthUrl).paraval + savedTrans.cobillno)
             return ResponseEntity.ok(ResponseBodyBuilder.create()
                     .data(WaterDeviceParam.cobillNo, savedTrans.cobillno)
@@ -171,6 +179,7 @@
                     .data(WaterDeviceParam.authStatus, authStatus)
                     //2为代扣模式
                     .data(WaterDeviceParam.payStatus, 2)
+                    .data(WaterDeviceParam.waterLimit, deviceParam[WaterDeviceParam.waterLimit]!!)
                     .data(WaterDeviceParam.feeAmount, deviceParam[WaterDeviceParam.feeAmount]!!)
                     .data(WaterDeviceParam.feestart, deviceParam[WaterDeviceParam.feestart]!!)
                     .data(WaterDeviceParam.feeUnit, deviceParam[WaterDeviceParam.feeUnit]!!)
@@ -183,32 +192,65 @@
         }
     }
 
-    @GetMapping("/confirm")
-    fun confirmView(): ModelAndView {
-        return ModelAndView("/system/confirm/confirm")
+    /**
+     * 通过userid查询用户卡片信息并记录在流水中
+     */
+    @GetMapping("/qrcode/pretend")
+    fun confirmView(@RequestParam("cobillno") cobillno: Int,
+                    @RequestParam("userid") userid: String): ModelAndView {
+        try {
+            val userInfo = userProxy.querybycardno(QueryUserParam().apply {
+                this.userid = userid
+            })
+            if (userInfo.retcode != 0) {
+                logger.error { "获取用户${userid}信息失败,错误信息:${userInfo.retmsg}" }
+                return ModelAndView("/error/500").addObject("errorMsg", "用户信息异常")
+            }
+            if (userInfo.cardstatus != TradeDict.STATUS_NORMAL || userInfo.transstatus != TradeDict.STATUS_NORMAL) {
+                return ModelAndView("/error/500").addObject("errorMsg", "用户消费状态异常")
+            }
+            val collectDtl = collectdtlService.pretendAsCard(userInfo, cobillno)
+            if (collectDtl.status != TradeDict.DTL_STATUS_INIT) {
+                return ModelAndView("/error/500").addObject("errorMsg", "流水状态异常")
+            }
+            val device = deviceService.queryDeviceByDeviceno(collectDtl.deviceno)
+                    ?: return ModelAndView("/error/500").addObject("errorMsg", "设备信息异常")
+            val area = areaService.findByAreaNo(device.areano)
+                    ?: return ModelAndView("/error/500").addObject("errorMsg", "区域信息异常")
+            return ModelAndView("/system/start/start").
+                    addObject("devicename", device.devicename).
+                    addObject("areaname",area.areaName)
+        } catch (e: Exception) {
+            logger.error { e.message }
+            return ModelAndView("/error/500")
+        }
     }
 
-    @PostMapping("/auth")
+    /**
+     * 手机控制开始出水
+     */
+    @PostMapping("/qrcode/start")
     @ResponseBody
-    fun auth(@RequestBody param: UserAuthRequest): ResponseEntity<Any> {
+    fun qrcodeStart(@RequestBody param: StartWaterRequest): ResponseEntity<Any> {
         return try {
-            collectdtlService.userAuth(param)
+            collectdtlService.startWater(param)
             ResponseEntity.ok(ResponseBodyBuilder.create().success())
         } catch (ex: Exception) {
             ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .exception(WaterErrorCode.PROCESS_ERROR, ex, "系统出错,认证失败"))
+                    .exception(WaterErrorCode.PROCESS_ERROR, ex, "出水失败，请稍后重试或联系管理员!"))
         }
     }
 
+
     @PostMapping("/uploadrecord")
     fun transdtlUpload(param: UploadRecordRequest): ResponseEntity<Any> {
         // 1. 根据 cobillno 查询 collectdtl , 并加锁
         val querycodtl = collectdtlService.queryTrans(param.cobillno)
                 ?: return ResponseEntity.ok(ResponseBodyBuilder.create()
-                        .fail(WaterErrorCode.DATA_NOTFOUND_ERROR, "采集流水号"+param.cobillno+"未找到"))
+                        .fail(WaterErrorCode.DATA_NOTFOUND_ERROR, "采集流水号" + param.cobillno + "未找到"))
         if (param.deviceno != querycodtl.deviceno) {
             return ResponseEntity.ok(ResponseBodyBuilder.create()
-                    .fail(WaterErrorCode.REQUEST_DATA_ERROR, "设备号"+param.deviceno+"与采集流水号"+param.cobillno+"不匹配"))
+                    .fail(WaterErrorCode.REQUEST_DATA_ERROR, "设备号" + param.deviceno + "与采集流水号" + param.cobillno + "不匹配"))
         }
         //  流水是否重复上传
         if (!querycodtl.uploadStatus) {
@@ -216,11 +258,8 @@
             userDataService.updateCoamount(dtl.citizenCardno, param.amount / 100.0)
             //  是否立即扣费
             if (param.amount >= deviceService.getParaMapByDeviceno(param.deviceno)[WaterDeviceParam.imdDecThreshold]!!.toInt()) {
-                //  刷卡消费
-                if (TradeDict.PAY_MODE_CARD == dtl.mode) {
-                    //  立即异步扣费
-                    waterPayAsyncTask.waterPay(querycodtl.cobillno)
-                }
+                //  立即异步扣费
+                waterPayAsyncTask.waterPay(querycodtl.cobillno)
             }
             return ResponseEntity.ok(ResponseBodyBuilder.create().data(WaterDeviceParam.cobillNo, dtl.cobillno)
                     .success())
diff --git a/src/main/kotlin/com/supwisdom/dlpay/water/service/collectdtl_service.kt b/src/main/kotlin/com/supwisdom/dlpay/water/service/collectdtl_service.kt
index 21682dc..3ed389a 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/water/service/collectdtl_service.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/water/service/collectdtl_service.kt
@@ -1,13 +1,14 @@
 package com.supwisdom.dlpay.water.service
 
+import com.supwisdom.dlpay.api.bean.UserInforResponse
 import com.supwisdom.dlpay.exception.TransactionProcessException
 import com.supwisdom.dlpay.framework.service.SystemUtilService
 import com.supwisdom.dlpay.framework.util.PageResult
 import com.supwisdom.dlpay.framework.util.StringUtil
 import com.supwisdom.dlpay.framework.util.TradeDict
 import com.supwisdom.dlpay.framework.util.WaterErrorCode
+import com.supwisdom.dlpay.water.StartWaterRequest
 import com.supwisdom.dlpay.water.UploadRecordRequest
-import com.supwisdom.dlpay.water.UserAuthRequest
 import com.supwisdom.dlpay.water.bean.TransdtlCountSearchBean
 import com.supwisdom.dlpay.water.dao.CollectdtlDao
 import com.supwisdom.dlpay.water.domain.TCollectdtl
@@ -83,16 +84,26 @@
         }
     }
 
-    override fun userAuth(param: UserAuthRequest): TCollectdtl {
+    override fun startWater(param: StartWaterRequest): TCollectdtl {
         val dtl = collectdtlDao.findByCobillnoForUpdate(param.cobillno)
                 ?: throw TransactionProcessException(WaterErrorCode.DATA_NOTFOUND_ERROR,
                         "交易订单号不存在")
-        dtl.userid = param.userid
         dtl.authStatus = true
         collectdtlDao.save(dtl)
         return dtl
     }
 
+    override fun pretendAsCard(param: UserInforResponse, cobillno: Int?): TCollectdtl {
+        val dtl = collectdtlDao.findByCobillnoForUpdate(cobillno)
+                ?: throw TransactionProcessException(WaterErrorCode.DATA_NOTFOUND_ERROR,
+                        "交易订单号不存在")
+        dtl.userid = param.userid
+        dtl.citizenCardno = param.cardno
+        dtl.cardPhyId = param.cardphyid
+        collectdtlDao.save(dtl)
+        return dtl
+    }
+
     override fun queryTransdtlDTOByParam(param: TransdtlSearchBean): PageResult<TCollectdtlDTO>? {
         val sql = StringBuffer("select t1.cobillno,t1.amount,t1.citizencardno,t1.cardphyid,t1.deviceno,t1.mode,t1.status,t1.transdate,t1.entryno,t1.transtime,t1.accdate,t1.water_in_100ml water_sum_hundred_litre,t1.name username,t2.devicename,t2.areaname,t2.areano  " +
                 "from (select dtl.*,person.name from tb_collectdtl dtl left join tb_person person on dtl.userid = person.userid) t1," +
diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql
index 296df08..079f943 100644
--- a/src/main/resources/data.sql
+++ b/src/main/resources/data.sql
@@ -76,13 +76,14 @@
 INSERT INTO "tb_devicefeeconfig"("areano", "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", "accamount", "cardphyid", "coamount", "createtime", "lockflag", "lossflag", "status", "userid") VALUES ('25002882', 0, '6655ec27', 0, NULL, 0, 0, 'normal', 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs');
-INSERT INTO "tb_person_identity"("third_uid", "accamount", "cardphyid", "coamount", "createtime", "lockflag", "lossflag", "status", "userid") VALUES ('25002885', 0, '6655ec27', 0, NULL, 0, 0, 'normal', 'f3yctKs5+bs1iMU4m8JUvPOus7SbDbrd');
+INSERT INTO "tb_person_identity"("third_uid", "accamount", "cardphyid", "coamount", "createtime", "lockflag", "lossflag", "status", "userid") VALUES ('25002885', 0, '6655ec27', 0, NULL, 0, 0, 'normal', '2c9380836c6b91e9016c6ec7c0020005');
 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, '1', NULL, NULL);
-INSERT INTO "tb_person"("userid", "addr", "country", "email", "idno", "idtype", "lastsaved", "mobile", "name", "nation", "sex", "status", "tel", "zipcode") VALUES ('f3yctKs5+bs1iMU4m8JUvPOus7SbDbrd', NULL, NULL, NULL, NULL, NULL, NULL, NULL, '蔡程应', NULL, NULL, '1', NULL, NULL);
+INSERT INTO "tb_person"("userid", "addr", "country", "email", "idno", "idtype", "lastsaved", "mobile", "name", "nation", "sex", "status", "tel", "zipcode") VALUES ('2c9380836c6b91e9016c6ec7c0020005', 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/device/confirm?cobillno=');
-INSERT INTO "tb_businesspara"("parakey", "paraval") VALUES ('water_sina_shorturl', 'http://api.t.sina.com.cn/short_url/shorten.json?source=2223392143');
+INSERT INTO "tb_businesspara"("parakey", "paraval") VALUES ('water_auth_url', 'https://yy.dlsmk.cn/water/api/device/qrcode/pretend?cobillno=');
+INSERT INTO "tb_businesspara"("parakey", "paraval") VALUES ('water_shorturl_baidu', 'https://dwz.cn/admin/v2/create');
+INSERT INTO "tb_businesspara"("parakey", "paraval") VALUES ('water_shorturl_baidu_token', 'ee9dc7c65a2b0598106a5930dd774971');
 INSERT INTO "tb_businesspara"("parakey", "paraval") VALUES ('water_shopaccno', '2000000010');
 INSERT INTO "tb_businesspara"("parakey", "paraval") VALUES ('water_appid', '700001');
 INSERT INTO "tb_businesspara"("parakey", "paraval") VALUES ('water_secret', '5f788ce433ec44f299351cdf7f137e81');
diff --git a/src/main/resources/templates/error/500.html b/src/main/resources/templates/error/500.html
index c46acd2..8e2bbea 100755
--- a/src/main/resources/templates/error/500.html
+++ b/src/main/resources/templates/error/500.html
@@ -16,6 +16,7 @@
     <i class="layui-icon" face>&#xe664;</i>
     <div class="layui-text">
       <p>服务器出错了</p>
+      <p>[[${errorMsg}]]</p>
       <h1>
         <span class="layui-anim layui-anim-loop layui-anim-">5</span>
         <span class="layui-anim layui-anim-loop layui-anim-rotate">0</span> 
diff --git a/src/main/resources/templates/system/confirm/confirm.html b/src/main/resources/templates/system/confirm/confirm.html
deleted file mode 100644
index 5e66269..0000000
--- a/src/main/resources/templates/system/confirm/confirm.html
+++ /dev/null
@@ -1,55 +0,0 @@
-<!DOCTYPE html>
-<html xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4">
-<head>
-    <meta charset="UTF-8">
-    <title>Title</title>
-</head>
-<body>
-<button id="button-auth" style="margin:100px 100px auto;text-align: center;color: green;width: 200px;height: 80px;">确认</button>
-</body>
-<script type="text/javascript" th:src="@{/static/libs/jquery/jquery-3.2.1.min.js}"></script>
-<script>
-    /**
-     * @return {string}
-     */
-    function GetUrlRefnoPara() {
-        var url = document.location.toString();
-        var arrUrl = url.split("?");
-        var para = arrUrl[1].split("=");
-        return para[1]
-    }
-
-    /**
-     * @return {string}
-     */
-    function GetUserid() {
-        return "d1yctWs5+ks0iQN3m9bUvRHus6HbKbrs"
-    }
-    var allData = {
-        cobillno:GetUrlRefnoPara(),
-        userid:GetUserid()
-    }
-    $("#button-auth").click(function () {
-        $.ajax({
-            url: "[[@{/api/device/auth}]]",
-            type:"POST",
-            contentType:"application/json;charset=UTF-8",
-            data:JSON.stringify(allData),
-            success:function (data) {
-                if (data.retcode == 0) {
-                    alert("认证成功")
-                }else {
-                    alert(data.retmsg)
-                }
-            },
-            fail: function (data) {
-                alert(data.retmsg)
-            },
-            error:function (xhr) {
-                console.log(xhr)
-            }
-        })
-    })
-</script>
-</html>
-
diff --git a/src/main/resources/templates/system/start/start.html b/src/main/resources/templates/system/start/start.html
new file mode 100644
index 0000000..79888d7
--- /dev/null
+++ b/src/main/resources/templates/system/start/start.html
@@ -0,0 +1,71 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org" xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity4">
+<head>
+    <meta charset="utf-8">
+    <title>扫码成功</title>
+    <meta name="renderer" content="webkit">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="viewport"
+          content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
+    <link rel="stylesheet" th:href="@{/static/libs/layui/css/layui.css}" media="all"/>
+    <link rel="stylesheet" th:href="@{/static/custom/css/admin.css}" media="all"/>
+</head>
+<body>
+<div class="layui-fluid">
+    <h2 style="margin-top: 10px">
+        设备区域:<span class="layui-anim layui-anim-loop layui-anim-">[[${areaname}]]</span>
+    </h2>
+    <h2 style="margin-top: 10px">
+        设备名称:<span class="layui-anim layui-anim-loop layui-anim-">[[${devicename}]]</span>
+    </h2>
+    <h2 id="qrcode-success" style="margin-top: 70px;text-align: center">
+        扫码成功!
+    </h2>
+    <div style="margin-top:25px;text-align:center">
+        <button id="button-start-water" class="layui-btn icon-btn" style="width: 120px;height: 45px">
+            <div style="font-size: 20px">开始出水</div>
+        </button>
+        <span><h2 id="msg-area"></h2></span>
+    </div>
+</div>
+</body>
+<script type="text/javascript" th:src="@{/static/libs/jquery/jquery-3.2.1.min.js}"></script>
+<script>
+    function GetUrlCobillnoPara() {
+        var url = document.location.toString();
+        var arrUrl = url.split("?");
+        var para = arrUrl[1].split("&")[0].split("=");
+        return para[1]
+    }
+
+    var allData = {
+        cobillno: GetUrlCobillnoPara(),
+    }
+
+    $("#button-start-water").click(function () {
+        $.ajax({
+            url: "[[@{/api/device/qrcode/start}]]",
+            type: "POST",
+            contentType: "application/json;charset=UTF-8",
+            data: JSON.stringify(allData),
+            success: function (data) {
+                if (data.retcode == 0) {
+                    $("#button-start-water").hide()
+                    $("#msg-area").html("正在控制设备出水，请稍后!")
+                } else {
+                    $("#qrcode-success").html(" ")
+                    $("#button-start-water").hide()
+                    $("#msg-area").html(data.retmsg)
+                }
+            },
+            fail: function (data) {
+                alert(data.retmsg)
+            },
+            error: function (xhr) {
+                console.log(xhr)
+            }
+        })
+    })
+</script>
+</html>
+
