账户余额支付优化
diff --git a/src/main/java/com/supwisdom/dlpay/framework/core/DayendSettleTask.java b/src/main/java/com/supwisdom/dlpay/framework/core/DayendSettleTask.java
index 0560c06..de2afe3 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/core/DayendSettleTask.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/core/DayendSettleTask.java
@@ -22,8 +22,7 @@
private static final Logger logger = LoggerFactory.getLogger(DayendSettleTask.class);
- @Scheduled(cron="0 3/30 2-3 * * ? ")
-// @Scheduled(cron="0 0/2 * * * ? ")
+ @Scheduled(cron="${dayend.settletask.cron}")
public void doSettleTask() {
if (logger.isDebugEnabled()) logger.debug("进入日结算任务!");
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/impl/ShopDataServiceImpl.java b/src/main/java/com/supwisdom/dlpay/system/service/impl/ShopDataServiceImpl.java
index d474e2c..f2bc236 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/impl/ShopDataServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/impl/ShopDataServiceImpl.java
@@ -143,14 +143,14 @@
shop.setShopaccno(shopacc.getShopaccno());
shopDao.save(shop);
- TShopPaytype shopPaytype = new TShopPaytype();
- shopPaytype.setShopaccno(shopacc.getShopaccno());
- shopPaytype.setPaytype(TradeDict.PAYTYPE_BALANCE);
- shopPaytype.setConsumeEnable(true);
- shopPaytype.setAnonymousEnable(false);
- shopPaytype.setReverseEnable(false);
- shopPaytype.setCreatetime(dt.getHostdatetime());
- shopPaytypeDao.save(shopPaytype); //默认增加余额支付方式
+// TShopPaytype shopPaytype = new TShopPaytype();
+// shopPaytype.setShopaccno(shopacc.getShopaccno());
+// shopPaytype.setPaytype(TradeDict.PAYTYPE_BALANCE);
+// shopPaytype.setConsumeEnable(true);
+// shopPaytype.setAnonymousEnable(false);
+// shopPaytype.setReverseEnable(false);
+// shopPaytype.setCreatetime(dt.getHostdatetime());
+// shopPaytypeDao.save(shopPaytype); //默认增加余额支付方式
}
return true;
}
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/controller/charge_api_controller.kt b/src/main/kotlin/com/supwisdom/dlpay/api/controller/charge_api_controller.kt
index c52dce2..3141e6c 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/controller/charge_api_controller.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/controller/charge_api_controller.kt
@@ -123,6 +123,7 @@
return ResponseEntity.ok(ResponseBodyBuilder.create()
.data("refno", it.refno)
.data("billno", it.outTradeNo)
+ .data("amount", chargeApiService.getPersonDtl(it.refno).amount)
.success("交易确认成功"))
}
diff --git a/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt b/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
index 390e8d1..7a15077 100644
--- a/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
+++ b/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
@@ -140,64 +140,69 @@
* */
@PostMapping("/balance/pay")
fun balancePay(@RequestBody param: CitizenCardPayinitParam, authentication: Authentication): ResponseEntity<Any> {
- try {
- if (param.checkParam() && param.checkSign(commonService.getSecretByAppid(authentication.name))) {
- return ResponseEntity.ok(ResponseBodyBuilder.create()
- .fail(TradeErrorCode.REQUEST_SIGN_ERROR, "参数签名错误"))
- }
-
- val person = userService.findPersonByIdentityCheckStatus(param.cardNo)
- if (consumePayService.checkShopPaytype(param.shopaccno, TradeDict.PAYTYPE_BALANCE)) {
- val account = accountUtilServcie.readAccount(person.userid)
- val shopacc = accountUtilServcie.readShopbyShopaccno(param.shopaccno)
-
- val dtl = TransactionBuilder().apply {
- setTransInfo(param.transdate, param.transtime,
- TradeCode.TRANSCODE_BALANCE_PAY,
- TradeDict.PAYTYPE_BALANCE)
- setOutTransInfo(shopacc.shopaccno, param.billno)
- operator(param.shopaccno, TradeDict.OPERTYPE_SHOP)
- payinfo = "账户余额消费"
- description = "账户余额消费"
- }.person(account).apply {
- setAmount(param.amount / 100.0, TradeDict.TRADE_FLAG_OUT)
- opposite = AccountProxy(shopacc)
- }.and().shop(shopacc).apply {
- setAmount(param.amount / 100.0, TradeDict.TRADE_FLAG_IN)
- opposite = AccountProxy(account)
- }.and().also { builder ->
- param.feelist?.forEach {
- when (it.feetype) {
- TradeDict.FEETYPE_CONSUME_MEALER -> {
- consumeMealer(param, builder, it, account, shopacc)
- }
- TradeDict.FEETYPE_CONSUME_DISCOUNT -> {
- consumeDiscount(param, builder, it, account, shopacc)
- }
- else -> throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
- "支付费率清单不支持feetype<${it.feetype}>")
- }
- }
- }.init(transactionService)
-
- transactionService.success(dtl.refno)
-
- return ResponseEntity.ok(ResponseBodyBuilder.create()
- .data("refno", dtl.refno)
- .data("amount", dtl.personDtl.amount)
- .success("交易成功"))
- }
-
+ if(!param.checkSign(commonService.getSecretByAppid(authentication.name))){
return ResponseEntity.ok(ResponseBodyBuilder.create()
- .fail(TradeErrorCode.BUSINESS_PAYTYPE_NOSUPPORT, "不支持支付方式<账户余额>"))
-
- } catch (ex: RequestParamCheckException) {
- return ResponseEntity.ok(ResponseBodyBuilder.create()
- .requestException(ex, "请求参数错误"))
- } catch (et: TransactionException) {
- return ResponseEntity.ok(ResponseBodyBuilder.create()
- .transException(et, "业务处理错误"))
+ .fail(TradeErrorCode.REQUEST_SIGN_ERROR, "参数签名错误"))
}
+
+ val person = userService.findPersonByIdentityCheckStatus(param.cardNo)
+ if(consumePayService.checkShopPaytype(param.shopaccno, TradeDict.PAYTYPE_BALANCE)) {
+ val account = accountUtilServcie.readAccount(person.userid)
+ val shopacc = accountUtilServcie.readShopbyShopaccno(param.shopaccno)
+
+ val dtl = TransactionBuilder().apply {
+ setTransInfo(param.transdate, param.transtime,
+ TradeCode.TRANSCODE_BALANCE_PAY,
+ TradeDict.PAYTYPE_BALANCE)
+ setOutTransInfo(shopacc.shopaccno, param.billno)
+ operator(param.shopaccno, TradeDict.OPERTYPE_SHOP)
+ payinfo = param.cardNo //fixme: 卡号或其他唯一信息
+ description = "账户余额消费"
+ }.person(account).apply {
+ setAmount(param.amount / 100.0, TradeDict.TRADE_FLAG_OUT)
+ opposite = AccountProxy(shopacc)
+ }.and().shop(shopacc).apply {
+ setAmount(param.amount / 100.0, TradeDict.TRADE_FLAG_IN)
+ opposite = AccountProxy(account)
+ }.and().addDebitCreditRecord(AccountProxy(account), AccountProxy(shopacc),
+ param.amount / 100.0, "账户余额消费")
+ .also { builder ->
+ param.feelist?.forEach {
+ val feeamt = it.amount / 100.0
+ when (it.feetype) {
+ TradeDict.FEETYPE_CONSUME_MEALER -> {
+ //搭伙费
+ val feetypeConfig = accountUtilServcie.readFeetype(TradeDict.FEETYPE_CONSUME_MEALER, TradeDict.PAYTYPE_BALANCE)
+ val subject = accountUtilServcie.readSubject(feetypeConfig.crsubjno) //不同在贷方科目
+ when (Subject.SUBJNO_MACHANT_INCOME == subject.subjno) {
+ true -> builder.addDebitCreditRecord(AccountProxy(account), AccountProxy(shopacc), feeamt, feetypeConfig.summary) //商户收
+ false -> builder.addDebitCreditRecord(AccountProxy(account), AccountProxy(subject), feeamt, feetypeConfig.summary) //其他科目
+ }
+ }
+ TradeDict.FEETYPE_CONSUME_DISCOUNT -> {
+ //优惠折扣
+ val feetypeConfig = accountUtilServcie.readFeetype(TradeDict.FEETYPE_CONSUME_DISCOUNT, TradeDict.PAYTYPE_BALANCE)
+ val subject = accountUtilServcie.readSubject(feetypeConfig.drsubjno) //不同在借方科目
+ builder.addDebitCreditRecord(AccountProxy(subject), AccountProxy(shopacc), feeamt, feetypeConfig.summary)
+
+ }
+ else -> throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
+ "账户余额支付费用清单不支持feetype<${it.feetype}>")
+ }
+ }
+ }.init(transactionService)
+
+ transactionService.success(dtl.refno)
+
+ return ResponseEntity.ok(ResponseBodyBuilder.create()
+ .data("refno", dtl.refno)
+ .data("billno", dtl.outTradeNo)
+ .data("amount", dtl.personDtl.amount)
+ .success("交易成功"))
+ }
+
+ return ResponseEntity.ok(ResponseBodyBuilder.create()
+ .fail(TradeErrorCode.BUSINESS_PAYTYPE_NOSUPPORT, "不支持支付方式<账户余额>"))
}
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
index a4d11c5..18ea9d2 100644
--- a/src/main/resources/application.properties
+++ b/src/main/resources/application.properties
@@ -26,6 +26,8 @@
##################################################
## quartz task scheduler
shopbalance.updater.cron = 10/* * * * *
+dayend.settletask.cron = 0 3/30 2-3 * * ?
+#dayend.settletask.cron = 0 0/2 * * * ?
################################################
# user password
auth.password.bcrypt.length=10