修改二维码短地址生成方式
diff --git a/build.gradle b/build.gradle
index b8c991f..8edfc1c 100644
--- a/build.gradle
+++ b/build.gradle
@@ -15,7 +15,9 @@
 waterManagerVersion = gitVersion()
 repositories {
     mavenCentral()
-
+    maven {
+        url  "http://dl.bintray.com/snimavat/maven"
+    }
     maven {
         url "http://ykt-nx.supwisdom.com/repository/ecard-repo/"
         credentials {
@@ -55,6 +57,7 @@
     compile(
             'net.sf.json-lib:json-lib:2.4:jdk15'
     )
+    compile "me.nimavat:shortid:1.0.1.RC1"
     implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
     implementation 'org.springframework.boot:spring-boot-starter-data-redis'
     implementation 'org.springframework.boot:spring-boot-starter-web'
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 25cecd0..4ec9e4f 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/Constants.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/Constants.java
@@ -9,4 +9,5 @@
   public static final String JWT_CLAIM_UID = "uid";
   public static final String JWT_CLAIM_AUTHORITIES = "authorities";
   public static final String DTLTYPE_WATER = "water";
+  public static final String REDISKEY_SHORTURL = "shorturl_";
 }
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 c2246b2..46c7586 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/ShortURLUtil.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/ShortURLUtil.java
@@ -6,6 +6,7 @@
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
+import me.nimavat.shortid.ShortId;
 
 import java.io.BufferedReader;
 import java.io.InputStreamReader;
@@ -25,6 +26,10 @@
         return doGetBaiduShortUrl(longUrl);
     }
 
+    public String doGetShortId() {
+        return ShortId.generate();
+    }
+
     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位字符,注册申请
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 f8bfaad..86853f6 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
@@ -168,6 +168,9 @@
                 || !DateUtil.checkDatetimeValid(transtime, DateUtil.TIME_FMT)) {
             throw RequestParamCheckException(TradeErrorCode.INPUT_DATA_ERROR, "设备日期时间错误")
         }
+        if (transtatus.any{ it !in '1'..'2'}){
+            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 c78361b..8623c32 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
@@ -11,13 +11,15 @@
 import com.supwisdom.dlpay.water.domain.TCollectdtl
 import com.supwisdom.dlpay.water.pay.WaterPayAsyncTask
 import com.supwisdom.dlpay.water.service.AreaService
-import com.supwisdom.dlpay.water.service.DeviceService
 import com.supwisdom.dlpay.water.service.CollectdtlService
+import com.supwisdom.dlpay.water.service.DeviceService
 import mu.KotlinLogging
 import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.data.redis.core.RedisTemplate
 import org.springframework.http.ResponseEntity
 import org.springframework.web.bind.annotation.*
 import org.springframework.web.servlet.ModelAndView
+import java.util.concurrent.TimeUnit
 
 
 @RestController
@@ -51,6 +53,9 @@
     @Autowired
     private lateinit var userProxy: UserProxy
 
+    @Autowired
+    private lateinit var redisTemplate: RedisTemplate<Any,Any>
+
     private val logger = KotlinLogging.logger { }
 
     @PostMapping("/devicelogin")
@@ -187,9 +192,11 @@
             }
             val savedTrans = collectdtlService.createNewTransdtl(trans)
             //2.将流水号及认证地址返回给终端
-            //将认证url转为短码
-            val url = shortURLUtil.doGetShortUrl(
-                    businessparaService.findByParakey(WaterBudinessConstants.waterAuthUrl).paraval + savedTrans.cobillno)
+            //生成短id 将id与认证url的映射存入redis
+            val shortId = shortURLUtil.doGetShortId()
+            redisTemplate.opsForValue().set(Constants.REDISKEY_SHORTURL + shortId, savedTrans.cobillno, 2000, TimeUnit.SECONDS)
+            val url =
+                    businessparaService.findByParakey(WaterBudinessConstants.waterAuthUrl).paraval + shortId
             return ResponseEntity.ok(ResponseBodyBuilder.create()
                     .data(WaterDeviceParam.cobillNo, savedTrans.cobillno)
                     .data(WaterDeviceParam.url, url)
@@ -201,6 +208,19 @@
         }
     }
 
+    @GetMapping("/qrcode/redirect/{shortId}")
+    fun qrcodePayRedirect(@PathVariable shortId:String) :ModelAndView {
+        return try {
+            val cobillno = redisTemplate.opsForValue().get(Constants.REDISKEY_SHORTURL + shortId)
+                    ?: return ModelAndView("error/500")
+                            .addObject("errorMsg","二维码已过期")
+            ModelAndView("redirect:/api/device/qrcode/pretend?cobillno=" + cobillno)
+        } catch (e: Exception) {
+            logger.error { e.message }
+            ModelAndView("error/500")
+        }
+    }
+
     @PostMapping("/qrcode/query")
     fun qrcodeQuery(param: QrcodeQueryRequest): ResponseEntity<Any> {
         try {