修改二维码短地址生成方式
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 {