完善二维码消费接口
diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/WaterDeviceParam.java b/src/main/java/com/supwisdom/dlpay/framework/util/WaterDeviceParam.java
index 8ad1e25..a4950b9 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/util/WaterDeviceParam.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/util/WaterDeviceParam.java
@@ -33,4 +33,11 @@
public static final String paidAmount = "paidAmount";
// 立即扣费阈值
public static final String imdDecThreshold = "imdDecThreshold";
+ // 允许未入账金额
+ public static final String permitNotAccAmount = "permitNotAccAmount";
+ // 是否允许消费
+ public static final String permit = "permit";
+ // 限制消费信息
+ public static final String limitMsg = "limitmsg";
+
}
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/UserDataService.java b/src/main/java/com/supwisdom/dlpay/system/service/UserDataService.java
index 0a8bad2..918cb87 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/UserDataService.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/UserDataService.java
@@ -53,4 +53,6 @@
@Transactional(rollbackFor = Exception.class, readOnly = true)
PageResult<UserAccountDTO> queryUserAccByParam(UserAccountSearchBean param);
+
+ double subtract(Double minuend, Double subtractor);
}
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java b/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java
index 18e921c..fa55c34 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java
@@ -249,7 +249,7 @@
return new PageResult<>(count.longValue(), list);
}
- private double subtract(Double minuend,Double subtractor){
+ public double subtract(Double minuend,Double subtractor){
return new BigDecimal(String.valueOf(minuend))
.subtract(new BigDecimal(String.valueOf(subtractor)))
.doubleValue();
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 58d4175..145ad01 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
@@ -15,6 +15,7 @@
import com.supwisdom.dlpay.water.service.CollectdtlService
import mu.KotlinLogging
import org.springframework.beans.factory.annotation.Autowired
+import org.springframework.http.HttpRequest
import org.springframework.http.ResponseEntity
import org.springframework.web.bind.annotation.*
import org.springframework.web.servlet.ModelAndView
@@ -101,8 +102,20 @@
return ResponseEntity.ok(ResponseBodyBuilder.create()
.fail(WaterErrorCode.DATA_NOTFOUND_ERROR, "物理卡号不匹配"))
}
+// val notaccAmount = userDataService.subtract(personIdentity.coamount, personIdentity.accamount)
//2. 通过 deviceno 查询设备费率参数
val deviceParam = deviceService.getParaMapByDeviceno(param.deviceno)
+// if (notaccAmount > deviceParam[WaterDeviceParam.permitNotAccAmount]!!.toInt()) {
+// return ResponseEntity.ok(ResponseBodyBuilder.create()
+// .data(WaterDeviceParam.cobillNo, "")
+// .data(WaterDeviceParam.feeAmount, "")
+// .data(WaterDeviceParam.waterLimit, "")
+// .data(WaterDeviceParam.feestart, "")
+// .data(WaterDeviceParam.feeUnit, "")
+// .data(WaterDeviceParam.permit, 1)
+// .data(WaterDeviceParam.limitMsg,"限制消费!未扣费金额过多")
+// .success())
+// }
//3. 创建 collectdtl 记录初始流水
val trans = TCollectdtl().apply {
mode = TradeDict.PAY_MODE_CARD
@@ -126,6 +139,8 @@
.data(WaterDeviceParam.waterLimit, deviceParam[WaterDeviceParam.waterLimit]!!)
.data(WaterDeviceParam.feestart, deviceParam[WaterDeviceParam.feestart]!!)
.data(WaterDeviceParam.feeUnit, deviceParam[WaterDeviceParam.feeUnit]!!)
+// .data(WaterDeviceParam.permit, 0)
+// .data(WaterDeviceParam.limitMsg,"")
.success())
} catch (ex: Exception) {
return ResponseEntity.ok(ResponseBodyBuilder.create()
@@ -174,6 +189,28 @@
if (trans.authStatus) {
authStatus = 1
}
+// if (authStatus == 1) {
+// val personIdentity = userDataService.getPersonIdentityByThirdUid(trans.citizenCardno)
+// ?: return ResponseEntity.ok(ResponseBodyBuilder.create()
+// .fail(WaterErrorCode.DATA_NOTFOUND_ERROR, "未查询到您的身份信息"))
+// val notaccAmount = userDataService.subtract(personIdentity.coamount, personIdentity.accamount)
+// if (notaccAmount > deviceParam[WaterDeviceParam.permitNotAccAmount]!!.toInt()) {
+// return ResponseEntity.ok(ResponseBodyBuilder.create()
+// .data(WaterDeviceParam.cobillNo, "")
+// .data(WaterDeviceParam.authStatus, "")
+// //2为代扣模式
+// .data(WaterDeviceParam.payStatus, "")
+// .data(WaterDeviceParam.waterLimit, "")
+// .data(WaterDeviceParam.feeAmount, "")
+// .data(WaterDeviceParam.feestart, "")
+// .data(WaterDeviceParam.feeUnit, "")
+// // 如果订单为已支付状态,支付金额多少
+// .data(WaterDeviceParam.paidAmount, "")
+// .data(WaterDeviceParam.permit, 1)
+// .data(WaterDeviceParam.limitMsg,"限制消费!未扣费金额过多")
+// .success())
+// }
+// }
return ResponseEntity.ok(ResponseBodyBuilder.create()
.data(WaterDeviceParam.cobillNo, trans.cobillno)
.data(WaterDeviceParam.authStatus, authStatus)
@@ -185,6 +222,8 @@
.data(WaterDeviceParam.feeUnit, deviceParam[WaterDeviceParam.feeUnit]!!)
// 如果订单为已支付状态,支付金额多少
.data(WaterDeviceParam.paidAmount, 0)
+// .data(WaterDeviceParam.permit, 0)
+// .data(WaterDeviceParam.limitMsg,"")
.success())
} catch (ex: Exception) {
return ResponseEntity.ok(ResponseBodyBuilder.create()
@@ -197,32 +236,43 @@
*/
@GetMapping("/qrcode/pretend")
fun confirmView(@RequestParam("cobillno") cobillno: Int,
- @RequestParam("userid") userid: String): ModelAndView {
+ @RequestParam("userid") userid: String?): ModelAndView {
try {
+ if (userid == null) {
+ return ModelAndView("error/500").addObject("errorMsg","用户id不能为空")
+ }
val userInfo = userProxy.querybycardno(QueryUserParam().apply {
this.userid = userid
})
if (userInfo.retcode != 0) {
logger.error { "获取用户${userid}信息失败,错误信息:${userInfo.retmsg}" }
- return ModelAndView("/error/500").addObject("errorMsg", "用户信息异常")
+ return ModelAndView("error/500").addObject("errorMsg", "用户信息异常")
}
if (userInfo.cardstatus != TradeDict.STATUS_NORMAL || userInfo.transstatus != TradeDict.STATUS_NORMAL) {
- return ModelAndView("/error/500").addObject("errorMsg", "用户消费状态异常")
+ return ModelAndView("error/500").addObject("errorMsg", "用户消费状态异常")
}
val collectDtl = collectdtlService.pretendAsCard(userInfo, cobillno)
+// val deviceParam = deviceService.getParaMapByDeviceno(collectDtl.deviceno)
+// val personIdentity = userDataService.getPersonIdentityByThirdUid(userInfo.cardno)
+// ?: return ModelAndView("error/500").addObject("errorMsg", "未查询到您的身份信息")
+// val notaccAmount = userDataService.subtract(personIdentity.coamount, personIdentity.accamount)
+// if (notaccAmount > deviceParam[WaterDeviceParam.permitNotAccAmount]!!.toInt()) {
+// return ModelAndView("error/500").
+// addObject("errorMsg", "你的未入账金额为${notaccAmount},已超过最大限额:${deviceParam[WaterDeviceParam.permitNotAccAmount]!!.toInt()}")
+// }
if (collectDtl.status != TradeDict.DTL_STATUS_INIT) {
- return ModelAndView("/error/500").addObject("errorMsg", "流水状态异常")
+ return ModelAndView("error/500").addObject("errorMsg", "流水状态异常")
}
val device = deviceService.queryDeviceByDeviceno(collectDtl.deviceno)
- ?: return ModelAndView("/error/500").addObject("errorMsg", "设备信息异常")
+ ?: return ModelAndView("error/500").addObject("errorMsg", "设备信息异常")
val area = areaService.findByAreaNo(device.areano)
- ?: return ModelAndView("/error/500").addObject("errorMsg", "区域信息异常")
+ ?: 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")
+ return ModelAndView("error/500")
}
}
@@ -255,11 +305,13 @@
// 流水是否重复上传
if (!querycodtl.uploadStatus) {
val dtl = collectdtlService.saveDeviceDtlData(param)
- userDataService.updateCoamount(dtl.citizenCardno, param.amount / 100.0)
- // 是否立即扣费
- if (param.amount >= deviceService.getParaMapByDeviceno(param.deviceno)[WaterDeviceParam.imdDecThreshold]!!.toInt()) {
- // 立即异步扣费
- waterPayAsyncTask.waterPay(querycodtl.cobillno)
+ if (dtl.status == TradeDict.DTL_STATUS_WIP) {
+ userDataService.updateCoamount(dtl.citizenCardno, param.amount / 100.0)
+ // 是否立即扣费
+ if (param.amount >= deviceService.getParaMapByDeviceno(param.deviceno)[WaterDeviceParam.imdDecThreshold]!!.toInt()) {
+ // 立即异步扣费
+ waterPayAsyncTask.waterPay(querycodtl.cobillno)
+ }
}
return ResponseEntity.ok(ResponseBodyBuilder.create().data(WaterDeviceParam.cobillNo, dtl.cobillno)
.success())
@@ -267,4 +319,11 @@
return ResponseEntity.ok(ResponseBodyBuilder.create().data(WaterDeviceParam.cobillNo, querycodtl.cobillno)
.success())
}
+
+ @GetMapping("/test")
+ fun test(request:HttpRequest): ResponseEntity<Any> {
+ request.uri
+ return ResponseEntity.ok(ResponseBodyBuilder.create().data("test","test")
+ .success())
+ }
}
\ No newline at end of file
diff --git a/src/main/resources/data.sql b/src/main/resources/data.sql
index 079f943..0977d6a 100644
--- a/src/main/resources/data.sql
+++ b/src/main/resources/data.sql
@@ -111,6 +111,8 @@
INSERT INTO "tb_areapara"("paraname", "groupid", "maxval", "minval", "paradesc", "paraval", "valtype") VALUES ('waterlimit', 1, '500', '1', '单次用水上限(单位:百毫升)', '300', 'N');
INSERT INTO "tb_areapara"("paraname", "groupid", "maxval", "minval", "paradesc", "paraval", "valtype") VALUES ('validtime', 1, '240', '60', '二维码有效时间(单位:秒)', '180', 'N');
INSERT INTO "tb_areapara"("paraname", "groupid", "maxval", "minval", "paradesc", "paraval", "valtype") VALUES ('imdDecThreshold', 1, '500', '1', '流水上传立即扣费阈值(单位:分)', '50', 'N');
+INSERT INTO "tb_areapara"("paraname", "groupid", "maxval", "minval", "paradesc", "paraval", "valtype") VALUES ('permitNotAccAmount', 1, '200', '1', '允许未入账金额(单位:元)', '50', 'N');
+