From d24207998d1978c252ce2ed0e67ba49e765b3ba6 Mon Sep 17 00:00:00 2001 From: Tang Cheng Date: Sat, 13 Apr 2019 20:32:48 +0800 Subject: [PATCH] =?utf8?q?=E9=87=8D=E6=9E=84=E4=BB=A3=E7=A0=81=EF=BC=8C?= =?utf8?q?=E4=BC=98=E5=8C=96kontlin=20=E4=BB=A3=E7=A0=81=E9=A3=8E=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../dlpay/consume/comsume_builder.kt | 68 +++++++++---------- .../consume/controller/consume_service.kt | 6 +- .../consume/service/impl/pay_service_impl.kt | 51 +++++++------- 3 files changed, 60 insertions(+), 65 deletions(-) diff --git a/src/main/kotlin/com/supwisdom/dlpay/consume/comsume_builder.kt b/src/main/kotlin/com/supwisdom/dlpay/consume/comsume_builder.kt index 67257c6d..a0467534 100644 --- a/src/main/kotlin/com/supwisdom/dlpay/consume/comsume_builder.kt +++ b/src/main/kotlin/com/supwisdom/dlpay/consume/comsume_builder.kt @@ -63,9 +63,10 @@ class PersonTransBuilder private constructor(accUitl: AccountUtilServcie) { val amount: Double, val summary: String, val rowno: Int) - // 输入参数,调用接口时指定的参数值 + /////////////////////////////////////////////////////////////////////////////// + // 以下为输入参数,调用接口时指定的参数值 lateinit var person: TPerson - lateinit var tradetype:Tradetype + lateinit var tradetype: Tradetype var transcode = 0 @@ -77,12 +78,6 @@ class PersonTransBuilder private constructor(accUitl: AccountUtilServcie) { var overdraft = false var description = "" - // 内部参数,不需要调用者处理 - val details = mutableListOf() - var amount: Double = 0.0 - var accountUtil = accUitl - - /** * 支付方式 * */ @@ -94,6 +89,13 @@ class PersonTransBuilder private constructor(accUitl: AccountUtilServcie) { * */ var outtradeno = "" //发起支付系统的流水号(对接系统根据此流水号查询本地流水对账) + //////////////////////////////////////////////////////////////////////////////////// + // 以下为内部参数,不需要调用者处理 + val details = mutableListOf() + var amount: Double = 0.0 + var accountUtil = accUitl + + ///////////////////////////////////////////// fun setOwner(per: TPerson): PersonTransBuilder { this.person = per @@ -139,25 +141,20 @@ class PersonTransBuilder private constructor(accUitl: AccountUtilServcie) { } private fun prepareData() { - if (null == this.tradetype) { - throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "未指定交易类型") - } - if(transcode==0){ + if (transcode == 0) { throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "未指定交易码") } - when(this.tradetype){ + // fixme : 是否要检查 recharge , consume 之外的类型 + when (this.tradetype) { //充值必须指明用户和支付方式 Tradetype.RECHARGE -> { - if (null == this.person) - throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "未指定充值账户") - if (StringUtil.isEmpty(this.paytype)) throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "未指定充值方式") } //消费 - Tradetype.CONSUME ->{ + Tradetype.CONSUME -> { if (StringUtil.isEmpty(this.paytype)) this.paytype = TradeDict.PAYTYPE_BALANCE //默认余额支付 } @@ -167,36 +164,39 @@ class PersonTransBuilder private constructor(accUitl: AccountUtilServcie) { if (this.details.size < 1) { throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "未指定交易明细") } - if (null != this.person) { - var buyer = accountUtil.readAccount(person.userid) //判断是一个人的流水 - for (detail in details) { - if (detail.debitSubjNo.equals(buyer.subjno) && !detail.debitAccNo.equals(buyer.accno)) - throw throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "交易明细用户错误") - - if (detail.creditSubjNo.equals(buyer.subjno) && !detail.creditAccNo.equals(buyer.accno)) - throw throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "交易明细用户错误") + val buyer = accountUtil.readAccount(person.userid) //判断是一个人的流水 + + amount = this.details.sumByDouble { detail -> + if (detail.debitSubjNo == buyer.subjno && detail.debitAccNo != buyer.accno) { + throw throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "交易明细用户错误") } + + if (detail.creditSubjNo == buyer.subjno && detail.creditAccNo != buyer.accno) { + throw throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "交易明细用户错误") + } + detail.amount } - amount = this.details.sumByDouble { it.amount } - if (!StringUtil.isEmpty(this.transDate) && !DateUtil.checkDatetimeValid(this.transDate, "yyyyMMdd")) { + if (!StringUtil.isEmpty(this.transDate) && + !DateUtil.checkDatetimeValid(this.transDate, "yyyyMMdd")) { throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "交易日期格式错误[yyyyMMdd]") } - if (!StringUtil.isEmpty(this.transTime) && !DateUtil.checkDatetimeValid(this.transTime, "HHmmss")) { + if (!StringUtil.isEmpty(this.transTime) && + !DateUtil.checkDatetimeValid(this.transTime, "HHmmss")) { throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "交易时间格式错误[HHmmss]") } - if(StringUtil.isEmpty(this.outtradeno)){ + if (StringUtil.isEmpty(this.outtradeno)) { throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR, "未传递外部流水号") } } private fun preCheckAccount() { - if (null != this.person) { - when (person.status) { - TradeDict.STATUS_CLOSED -> throw TransactionCheckException(TradeErrorCode.PERSON_STATUS_ERROR, "用户已注销") - TradeDict.STATUS_LOCKED -> throw TransactionCheckException(TradeErrorCode.PERSON_STATUS_ERROR, "用户已冻结锁定") - } + when (person.status) { + TradeDict.STATUS_CLOSED -> + throw TransactionCheckException(TradeErrorCode.PERSON_STATUS_ERROR, "用户已注销") + TradeDict.STATUS_LOCKED -> + throw TransactionCheckException(TradeErrorCode.PERSON_STATUS_ERROR, "用户已冻结锁定") } } diff --git a/src/main/kotlin/com/supwisdom/dlpay/consume/controller/consume_service.kt b/src/main/kotlin/com/supwisdom/dlpay/consume/controller/consume_service.kt index 6b8c4194..06f3cae9 100644 --- a/src/main/kotlin/com/supwisdom/dlpay/consume/controller/consume_service.kt +++ b/src/main/kotlin/com/supwisdom/dlpay/consume/controller/consume_service.kt @@ -112,10 +112,10 @@ class ConsumeController { @PostMapping("/ykt/payfinish") fun yktPayFinish(refno: String, yktshopid: String, devphyid: String?): ResponseEntity { - var dtl = personBalancePayService.wip(refno) - var person = personService.getPersonByUserid(dtl.userid) + val dtl = personBalancePayService.wip(refno) + val person = personService.getPersonByUserid(dtl.userid) val code = CallService.callYktPay(paytypeService.getPaytypeConfigByPaytype(PaytypeUtil.YKTPAY), - dtl, DateUtil.getNow(),person?.thirdUniqueIdenty,yktshopid,devphyid) + dtl, DateUtil.getNow(), person.thirdUniqueIdenty,yktshopid,devphyid) return if (code.retcode == "0") { val suc = PersonTransBuilder.newBuilder(accountUtilServcie) .done(dtl.refno, TradeDict.DTL_STATUS_SUCCESS, personBalancePayService) diff --git a/src/main/kotlin/com/supwisdom/dlpay/consume/service/impl/pay_service_impl.kt b/src/main/kotlin/com/supwisdom/dlpay/consume/service/impl/pay_service_impl.kt index e0d792fd..c85139d7 100644 --- a/src/main/kotlin/com/supwisdom/dlpay/consume/service/impl/pay_service_impl.kt +++ b/src/main/kotlin/com/supwisdom/dlpay/consume/service/impl/pay_service_impl.kt @@ -72,12 +72,8 @@ class AccountUtilServcieImpl : AccountUtilServcie { } override fun readSubject(subjno: String): TSubject { - subjectDao.getOne(subjno).let { - if (null != it) { - return it - } - throw TransactionProcessException(TradeErrorCode.SUBJECT_NOT_EXISTS, "科目<$subjno>不存在") - } + return subjectDao.getOne(subjno) +// throw TransactionProcessException(TradeErrorCode.SUBJECT_NOT_EXISTS, "科目<$subjno>不存在") } override fun readTranstype(transtype: Int): TTranstype { @@ -157,10 +153,10 @@ class PersonBalancePayServiceImpl : PersonBalancePayService { } override fun init(builder: PersonTransBuilder): TUserdtl { - var userdtl = TUserdtl() + val userdtl = TUserdtl() userdtl.refno = systemUtilService.refno userdtl.accdate = systemUtilService.accdate - userdtl.userid = builder.person?.userid + userdtl.userid = builder.person.userid if (StringUtil.isEmpty(builder.transDate)) { userdtl.transdate = systemUtilService.sysdatetime.hostdate } else { @@ -194,17 +190,18 @@ class PersonBalancePayServiceImpl : PersonBalancePayService { userdtl.status = TradeDict.DTL_STATUS_INIT userdtlDao.save(userdtl) - for (detail in builder.details) { - var dtl = TDebitCreditDtl() - dtl.refno = userdtl.refno - dtl.seqno = detail.rowno - dtl.drsubjno = detail.debitSubjNo - dtl.draccno = detail.debitAccNo - dtl.crsubjno = detail.creditSubjNo - dtl.craccno = detail.creditAccNo - dtl.amount = detail.amount - dtl.summary = detail.summary - debitCreditDtlDao.save(dtl) + builder.details.forEach { + TDebitCreditDtl().apply { + refno = userdtl.refno + seqno = it.rowno + drsubjno = it.debitSubjNo + draccno = it.debitAccNo + crsubjno = it.creditSubjNo + craccno = it.creditAccNo + amount = it.amount + summary = it.summary + debitCreditDtlDao.save(this) + } } return userdtl } @@ -214,8 +211,8 @@ class PersonBalancePayServiceImpl : PersonBalancePayService { } override fun finish(refno: String, status: String, businessData: Map?): TUserdtl { - var userdtl = getLockUserdtl(refno) - when (status) { + val userdtl = getLockUserdtl(refno) + return when (status) { TradeDict.DTL_STATUS_FAIL -> { //失败 if (TradeDict.DTL_STATUS_SUCCESS == userdtl.status) @@ -223,15 +220,14 @@ class PersonBalancePayServiceImpl : PersonBalancePayService { userdtl.status = TradeDict.DTL_STATUS_FAIL userdtl.endtime = systemUtilService.sysdatetime.hostdatetime userdtl.remark = businessData?.get("errmsg") - return userdtlDao.save(userdtl) + userdtlDao.save(userdtl) } - TradeDict.DTL_STATUS_SUCCESS -> { //成功 if (TradeDict.DTL_STATUS_SUCCESS == userdtl.status) return userdtl //已成功直接返回 - for (detail in debitCreditDtlDao.findByRefno(userdtl.refno)) { + debitCreditDtlDao.findByRefno(userdtl.refno).forEach { detail -> //个人账户入账 if (TradeDict.SUBJNO_ACCOUNT == detail.drsubjno) { doDealAccount(detail.draccno, -1 * detail.amount, false) //借方消费 @@ -253,9 +249,8 @@ class PersonBalancePayServiceImpl : PersonBalancePayService { userdtl.accdate = systemUtilService.accdate //入账成功时更新 userdtl.endtime = systemUtilService.sysdatetime.hostdatetime //TODO 存储一些业务参数 - return userdtlDao.save(userdtl) + userdtlDao.save(userdtl) } - else -> throw TransactionProcessException(TradeErrorCode.TRANSDTL_STATUS_ERROR, "未指定明确的交易结束状态") } } @@ -265,8 +260,8 @@ class PersonBalancePayServiceImpl : PersonBalancePayService { } override fun wip(refno: String): TUserdtl { - var userdtl = getLockUserdtlNowait(refno) - if(TradeDict.DTL_STATUS_WIP == userdtl.status){ + val userdtl = getLockUserdtlNowait(refno) + if (TradeDict.DTL_STATUS_WIP == userdtl.status) { return userdtl } -- 2.17.1