package com.supwisdom.dlpay.api.controller
-import com.supwisdom.dlpay.api.AccountHolder
-import com.supwisdom.dlpay.api.CallService
-import com.supwisdom.dlpay.api.PersonTransBuilder
-import com.supwisdom.dlpay.api.bean.CitizenCardPayfinishParam
-import com.supwisdom.dlpay.api.bean.CitizenCardPayinitParam
-import com.supwisdom.dlpay.api.bean.QueryDtlResultParam
-import com.supwisdom.dlpay.api.bean.YktCardPayinitParam
+import com.supwisdom.dlpay.api.*
+import com.supwisdom.dlpay.api.bean.*
+import com.supwisdom.dlpay.api.domain.TAccount
import com.supwisdom.dlpay.api.service.*
import com.supwisdom.dlpay.exception.RequestParamCheckException
+import com.supwisdom.dlpay.exception.TransactionCheckException
import com.supwisdom.dlpay.exception.TransactionException
import com.supwisdom.dlpay.exception.TransactionProcessException
import com.supwisdom.dlpay.framework.ResponseBodyBuilder
+import com.supwisdom.dlpay.framework.domain.TShopacc
import com.supwisdom.dlpay.framework.service.CommonService
import com.supwisdom.dlpay.framework.service.SystemUtilService
import com.supwisdom.dlpay.framework.util.*
import com.supwisdom.dlpay.util.ConstantUtil
import com.supwisdom.dlpay.util.PaytypeUtil
+import org.apache.catalina.authenticator.SpnegoAuthenticator
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.http.ResponseEntity
+import org.springframework.security.core.Authentication
+import org.springframework.security.core.context.SecurityContextHolder
import org.springframework.web.bind.annotation.*
import javax.servlet.http.HttpServletRequest
import javax.servlet.http.HttpServletResponse
@Autowired
lateinit var commonService: CommonService
+ @Autowired
+ lateinit var transactionService: TransactionService
+
/**
* 流水结果查询统一接口
* */
fun queryDtlResult(@RequestBody param: QueryDtlResultParam, request: HttpServletRequest, response: HttpServletResponse): ResponseEntity<Any> {
- try {
+ try {
if (param.checkParam() && param.checkSign(commonService.getAppidSecretByRequest(request))) {
return ResponseEntity.ok(ResponseBodyBuilder.create()
.fail(TradeErrorCode.REQUEST_SIGN_ERROR, "参数签名错误"))
personBalancePayService.getUserdtlByBillnoForUpdateNowait(param.billno!!, param.shopaccno!!)
}
val person = dtl.userid?.let { userService.findPersonByUserid(dtl.userid) }
- return ResponseEntity.ok(ResponseBodyBuilder.create()
+ return ResponseEntity.ok(ResponseBodyBuilder.create()
.data("refno", dtl.refno)
.data("amount", dtl.amount)
.data("paytype", dtl.paytype)
.success("查询成功"))
} catch (ex: RequestParamCheckException) {
- return ResponseEntity.ok(ResponseBodyBuilder.create()
+ return ResponseEntity.ok(ResponseBodyBuilder.create()
.requestException(ex, "请求参数错误"))
} catch (et: TransactionException) {
- return ResponseEntity.ok(ResponseBodyBuilder.create()
+ return ResponseEntity.ok(ResponseBodyBuilder.create()
.transException(et, "查询错误"))
}
}
+ private fun consumeMealer(param: CitizenCardPayinitParam, builder: TransactionBuilder,
+ feetype: ConsumeFeetype, person: TAccount, shop: TShopacc) {
+ val feetypeConfig = accountUtilServcie.readFeetype(TradeDict.FEETYPE_CONSUME_MEALER,
+ TradeDict.PAYTYPE_BALANCE)
+ val amount = feetype.amount / 100.0
+ when (feetypeConfig.crsubjno) {
+ shop.subjno -> {
+ builder.addDebitCreditRecord(AccountProxy(person), AccountProxy(shop),
+ amount, feetypeConfig.summary)
+ .shop().also {
+ it.amount += amount
+ }
+ }
+ else -> {
+ val subject = accountUtilServcie.readSubject(feetypeConfig.crsubjno)
+ builder.addDebitCreditRecord(AccountProxy(person), AccountProxy(subject),
+ amount, feetypeConfig.summary)
+ }
+ }
+
+ }
+
+ private fun consumeDiscount(param: CitizenCardPayinitParam, builder: TransactionBuilder,
+ feetype: ConsumeFeetype, person: TAccount, shop: TShopacc) {
+ val feetypeConfig = accountUtilServcie.readFeetype(TradeDict.FEETYPE_CONSUME_MEALER,
+ TradeDict.PAYTYPE_BALANCE)
+ val amount = feetype.amount / 100.0
+ when (feetypeConfig.drsubjno) {
+ shop.subjno -> {
+ builder.addDebitCreditRecord(AccountProxy(shop), AccountProxy(person),
+ amount, feetypeConfig.summary)
+ }
+ else -> {
+ val subject = accountUtilServcie.readSubject(feetypeConfig.drsubjno)
+ builder.addDebitCreditRecord(AccountProxy(subject), AccountProxy(shop),
+ amount, feetypeConfig.summary)
+ }
+ }
+ }
+
/**
* ============================================================================
* 账户【余额支付】
* ============================================================================
* */
@PostMapping("/balance/pay")
- fun balancePay(@RequestBody param: CitizenCardPayinitParam, request: HttpServletRequest, response: HttpServletResponse): ResponseEntity<Any> {
- try {
- if (param.checkParam() && param.checkSign(commonService.getAppidSecretByRequest(request))) {
+ 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 dtl = PersonTransBuilder.newBuilder(accountUtilServcie)
- .chooseTradetype(Tradetype.CONSUME) //消费
- .setOwner(person) //记名
- .setTransinfo(TradeCode.TRANSCODE_BALANCE_PAY, "账户余额支付")
- .setTransDatetime(param.transdate, param.transtime) //交易时间
- .selectPaytype(TradeDict.PAYTYPE_BALANCE, param.cardNo)
- .addDetail(AccountHolder.person(person.userid),
- AccountHolder.shop(param.shopaccno),
- param.amount / 100.0, "账户余额消费")
- .also { builder ->
- param.feelist?.forEach {
- when(it.feetype){
- TradeDict.FEETYPE_CONSUME_MEALER -> {
- if (it.amount <= 0) {
- throw RequestParamCheckException(TradeErrorCode.REQUEST_PARAM_ERROR, "费用类别<${it.feetype}>的金额不能为负")
- }
- builder.addDetail(AccountHolder.feetype(it.feetype, TradeDict.PAYTYPE_BALANCE)
- .with(AccountHolder.shop(param.shopaccno))
- .with(AccountHolder.person(person.userid))
- , it.amount / 100.0)
- }
- TradeDict.FEETYPE_CONSUME_DISCOUNT->{
- TODO("折扣逻辑暂缺")
- }
- else -> throw TransactionProcessException(TradeErrorCode.FEETYPE_NOT_NOSUPPORT, "费用类别<${it.feetype}>不支持")
- }
-
- }
+ val account = accountUtilServcie.readAccount(person.userid)
+ val shopacc = accountUtilServcie.readShopbyAccno(param.shopaccno)
+
+ val builder = TransactionBuilder().apply {
+ transDate = param.transdate
+ transTime = param.transtime
+ paytype = TradeDict.PAYTYPE_BALANCE
+ transCode = TradeCode.TRANSCODE_BALANCE_PAY
+ }.person(account).apply {
+ description = "账户余额支付"
+ summary = "账户余额消费"
+ amount = param.amount / 100.0
+ opposite = AccountProxy(shopacc)
+ }.and().shop(shopacc).apply {
+ summary = "账户余额消费"
+ amount = param.amount / 100.0
+ opposite = AccountProxy(account)
+ }.and()
+
+ param.feelist?.forEach {
+ when (it.feetype) {
+ TradeDict.FEETYPE_CONSUME_MEALER -> {
+ consumeMealer(param, builder, it, account, shopacc)
}
- .done(personBalancePayService)
+ TradeDict.FEETYPE_CONSUME_DISCOUNT -> {
+ consumeDiscount(param, builder, it, account, shopacc)
+ }
+ else -> throw TransactionCheckException(TradeErrorCode.INPUT_DATA_ERROR,
+ "支付费率清单不支持feetype<${it.feetype}>")
+ }
+ }
+
+ val dtl = builder.init(transactionService)
+ transactionService.success(dtl.refno)
return ResponseEntity.ok(ResponseBodyBuilder.create()
.data("refno", dtl.refno)
- .data("amount", dtl.amount)
+ .data("amount", dtl.personDtl.amount)
.success("交易成功"))
}
- return ResponseEntity.ok(ResponseBodyBuilder.create()
+ return ResponseEntity.ok(ResponseBodyBuilder.create()
.fail(TradeErrorCode.BUSINESS_PAYTYPE_NOSUPPORT, "不支持支付方式<账户余额>"))
} catch (ex: RequestParamCheckException) {
- return ResponseEntity.ok(ResponseBodyBuilder.create()
+ return ResponseEntity.ok(ResponseBodyBuilder.create()
.requestException(ex, "请求参数错误"))
} catch (et: TransactionException) {
- return ResponseEntity.ok(ResponseBodyBuilder.create()
+ return ResponseEntity.ok(ResponseBodyBuilder.create()
.transException(et, "业务处理错误"))
}
}
-
/**
* ============================================================================
* 市民卡【交易初始化】
* ============================================================================
* */
@PostMapping("/citizencard/payinit")
- fun citizencardPayinit(@RequestBody param: CitizenCardPayinitParam, request: HttpServletRequest, response: HttpServletResponse): ResponseEntity<Any> {
- try {
- if (param.checkParam() && param.checkSign(commonService.getAppidSecretByRequest(request))) {
+ fun citizencardPayinit(@RequestBody param: CitizenCardPayinitParam, authenticateAction: Authentication): ResponseEntity<Any> {
+ try {
+ if (param.checkParam() && param.checkSign(commonService.getSecretByAppid(authenticateAction.name))) {
return ResponseEntity.ok(ResponseBodyBuilder.create()
.fail(TradeErrorCode.REQUEST_SIGN_ERROR, "参数签名错误"))
}
val person = userService.findPersonByIdentityCheckStatus(param.cardNo)
if (consumePayService.checkShopPaytype(param.shopaccno, TradeDict.PAYTYPE_CITIZEN_CARD)) {
- val dtl = PersonTransBuilder.newBuilder(accountUtilServcie)
- .chooseTradetype(Tradetype.CONSUME) //消费
- .setOwner(person) //记名
- .setTransinfo(TradeCode.TRANSCODE_CITIZENCARD_PAY, "市民卡代扣消费")
- .setTransDatetime(param.transdate, param.transtime) //交易时间
- .selectPaytype(TradeDict.PAYTYPE_CITIZEN_CARD, param.cardNo)
- .addDetail(AccountHolder.subject(Subject.SUBJNO_PAY_CITIZEN_CARD),
- AccountHolder.shop(param.shopaccno),
- param.amount / 100.0, "市民卡代扣消费")
+
+ val account = accountUtilServcie.readAccount(person.userid)
+ val shopacc = accountUtilServcie.readShopbyAccno(param.shopaccno)
+ val subject = accountUtilServcie.readSubject(Subject.SUBJNO_PAY_CITIZEN_CARD)
+ val transaction = TransactionBuilder().apply {
+ transCode = TradeCode.TRANSCODE_CITIZENCARD_PAY
+ transDate = param.transdate
+ transTime = param.transtime
+ paytype = TradeDict.PAYTYPE_CITIZEN_CARD
+ payinfo = "市民卡代扣消费"
+ }.person(account).apply {
+ amount = param.amount / 100.0
+ opposite = AccountProxy(shopacc)
+ summary = "市民卡代扣消费"
+ }.and().shop(shopacc).apply {
+ amount = param.amount / 100.0
+ opposite = AccountProxy(account)
+ summary = "市民卡代扣消费"
+ }.and().addDebitCreditRecord(AccountProxy(subject), AccountProxy(shopacc),
+ param.amount / 100.0, "市民卡代扣消费")
.also { builder ->
param.feelist?.forEach {
//fixme: 科目 -> 商户 与个人无关
- builder.addDetail(AccountHolder.feetype(it.feetype, TradeDict.PAYTYPE_CITIZEN_CARD)
- .with(AccountHolder.shop(param.shopaccno))
- .with(AccountHolder.subject(Subject.SUBJNO_PAY_CITIZEN_CARD))
- , it.amount / 100.0)
+ val feeconfig = accountUtilServcie.readFeetype(it.feetype,
+ TradeDict.PAYTYPE_CITIZEN_CARD)
+ val subject = accountUtilServcie.readSubject(feeconfig.drsubjno)
+ builder.addDebitCreditRecord(AccountProxy(subject), AccountProxy(shopacc),
+ it.amount / 100.0, feeconfig.summary)
+
}
- }
- .init(personBalancePayService)
+ }.init(transactionService)
return ResponseEntity.ok(ResponseBodyBuilder.create()
- .data("refno", dtl.refno)
- .data("amount", dtl.amount)
+ .data("refno", transaction.refno)
+ .data("amount", transaction.shopDtl.amount)
.success("交易初始化成功"))
}
- return ResponseEntity.ok(ResponseBodyBuilder.create()
+ return ResponseEntity.ok(ResponseBodyBuilder.create()
.fail(TradeErrorCode.BUSINESS_PAYTYPE_NOSUPPORT, "不支持支付方式<市民卡代扣>"))
} catch (ex: RequestParamCheckException) {
- return ResponseEntity.ok(ResponseBodyBuilder.create()
+ return ResponseEntity.ok(ResponseBodyBuilder.create()
.requestException(ex, "请求参数错误"))
} catch (et: TransactionException) {
- return ResponseEntity.ok(ResponseBodyBuilder.create()
+ return ResponseEntity.ok(ResponseBodyBuilder.create()
.transException(et, "业务处理错误"))
}
}
* ============================================================================
* */
@PostMapping("/citizencard/payfinish")
- fun citizencardPayinit(@RequestBody param: CitizenCardPayfinishParam, request: HttpServletRequest, response: HttpServletResponse): ResponseEntity<Any> {
- try {
- if (param.checkParam() && param.checkSign(commonService.getAppidSecretByRequest(request))) {
+ fun citizencardPayinit(@RequestBody param: CitizenCardPayfinishParam, authentication: Authentication): ResponseEntity<Any> {
+ try {
+ if (param.checkParam() && param.checkSign(commonService.getSecretByAppid(authentication.name))) {
return ResponseEntity.ok(ResponseBodyBuilder.create()
.fail(TradeErrorCode.REQUEST_SIGN_ERROR, "参数签名错误"))
}
- var dtl = PersonTransBuilder.newBuilder(accountUtilServcie)
- .setRefno(param.refno)
- .wip(personBalancePayService)
- val code = CallService.CallCitizenCardPay(consumePayService.getPaytypeConfig(TradeDict.PAYTYPE_CITIZEN_CARD, dtl.shopaccno), dtl)
+ val code = transactionService.wip(param.refno).let {
+ CallService.CallCitizenCardPay(
+ consumePayService.getPaytypeConfig(TradeDict.PAYTYPE_CITIZEN_CARD, it.shopDtl.shopaccno),
+ it.shopDtl)
+ }
if (code.retcode == "0") {
- dtl = PersonTransBuilder.newBuilder(accountUtilServcie)
- .setRefno(param.refno)
- .addResult(code.data)
- .success(personBalancePayService) //流水置成功
-
- return ResponseEntity.ok(ResponseBodyBuilder.create()
- .data("refno", dtl.refno)
- .data("billno", dtl.outtradeno)
- .success())
+ transactionService.success(param.refno).let {
+ return ResponseEntity.ok(ResponseBodyBuilder.create()
+ .data("refno", it.refno)
+ .data("billno", it.outTradeNo)
+ .success("交易确认成功"))
+ }
} else {
- PersonTransBuilder.newBuilder(accountUtilServcie)
- .setRefno(param.refno)
- .addResult("errmsg", code.retmsg!!)
- .finish(personBalancePayService, TradeDict.DTL_STATUS_FAIL) //流水置成功
-
- return ResponseEntity.ok(ResponseBodyBuilder.create()
- .fail(TradeErrorCode.BUSINESS_DEAL_ERROR, "交易扣费失败-${code.retmsg}"))
+ transactionService.fail(param.refno).let {
+ return ResponseEntity.ok(ResponseBodyBuilder.create()
+ .fail(TradeErrorCode.BUSINESS_DEAL_ERROR, "交易扣费失败-${code.retmsg}"))
+ }
}
-
} catch (ex: RequestParamCheckException) {
- return ResponseEntity.ok(ResponseBodyBuilder.create()
+ return ResponseEntity.ok(ResponseBodyBuilder.create()
.requestException(ex, "请求参数错误"))
} catch (et: TransactionException) {
- return ResponseEntity.ok(ResponseBodyBuilder.create()
+ return ResponseEntity.ok(ResponseBodyBuilder.create()
.transException(et, "业务处理错误"))
}
}
-
/**
* ============================================================================
* 一卡通支付【交易初始化】
* */
@PostMapping("/ykt/payinit")
fun yktPayInit(@RequestBody param: YktCardPayinitParam, request: HttpServletRequest, response: HttpServletResponse): ResponseEntity<Any> {
- try {
+ try {
if (param.checkParam() && param.checkSign(commonService.getAppidSecretByRequest(request))) {
return ResponseEntity.ok(ResponseBodyBuilder.create()
.fail(TradeErrorCode.REQUEST_SIGN_ERROR, "参数签名错误"))
}
val person = param.uid?.let { userService.findByThirdUniqueIdenty(it) } //没注册,可能匿名?
- if (consumePayService.checkShopPaytype(param.shopaccno, TradeDict.PAYTYPE_YKT_CARD, person==null)) {
+ if (consumePayService.checkShopPaytype(param.shopaccno, TradeDict.PAYTYPE_YKT_CARD, person == null)) {
val dtl = PersonTransBuilder.newBuilder(accountUtilServcie)
.chooseTradetype(Tradetype.CONSUME) //消费
.also {
}
- return ResponseEntity.ok(ResponseBodyBuilder.create()
+ return ResponseEntity.ok(ResponseBodyBuilder.create()
.fail(TradeErrorCode.BUSINESS_PAYTYPE_NOSUPPORT, "不支持支付方式<一卡通支付>"))
} catch (ex: RequestParamCheckException) {
- return ResponseEntity.ok(ResponseBodyBuilder.create()
+ return ResponseEntity.ok(ResponseBodyBuilder.create()
.requestException(ex, "请求参数错误"))
} catch (et: TransactionException) {
- return ResponseEntity.ok(ResponseBodyBuilder.create()
+ return ResponseEntity.ok(ResponseBodyBuilder.create()
.transException(et, "业务处理错误"))
}
}
* ============================================================================
* */
@PostMapping("/ykt/payfinish")
- fun yktPayFinish(@RequestBody param:CitizenCardPayfinishParam,request: HttpServletRequest,response: HttpServletResponse): ResponseEntity<Any> {
- try {
+ fun yktPayFinish(@RequestBody param: CitizenCardPayfinishParam, request: HttpServletRequest, response: HttpServletResponse): ResponseEntity<Any> {
+ try {
if (param.checkParam() && param.checkSign(commonService.getAppidSecretByRequest(request))) {
return ResponseEntity.ok(ResponseBodyBuilder.create()
.fail(TradeErrorCode.REQUEST_SIGN_ERROR, "参数签名错误"))
.setRefno(param.refno)
.wip(personBalancePayService)
val extendMap = consumePayService.getUserdtlExtendParamMap(dtl.refno)
- val code = CallService.callYktPay(consumePayService.getPaytypeConfig(TradeDict.PAYTYPE_YKT_CARD, dtl.shopaccno, dtl.userid==null),
+ val code = CallService.callYktPay(consumePayService.getPaytypeConfig(TradeDict.PAYTYPE_YKT_CARD, dtl.shopaccno, dtl.userid == null),
dtl, DateUtil.getNow(), extendMap["stuempno"]!!, extendMap["yktshopid"]!!, extendMap["devphyid"])
if (code.retcode == "0") {
dtl = PersonTransBuilder.newBuilder(accountUtilServcie)
.fail(TradeErrorCode.BUSINESS_DEAL_ERROR, "交易扣费失败-${code.retmsg}"))
}
- }catch (ex: RequestParamCheckException) {
- return ResponseEntity.ok(ResponseBodyBuilder.create()
+ } catch (ex: RequestParamCheckException) {
+ return ResponseEntity.ok(ResponseBodyBuilder.create()
.requestException(ex, "请求参数错误"))
} catch (et: TransactionException) {
- return ResponseEntity.ok(ResponseBodyBuilder.create()
+ return ResponseEntity.ok(ResponseBodyBuilder.create()
.transException(et, "业务处理错误"))
}
}
// }
-
//
// /**
// * 微信支付
package com.supwisdom.dlpay.api.service.impl
import com.supwisdom.dlpay.api.TransactionBuilder
-import com.supwisdom.dlpay.api.TransactionResult
import com.supwisdom.dlpay.api.dao.*
import com.supwisdom.dlpay.api.domain.*
import com.supwisdom.dlpay.api.repositories.ShopaccRepositoryImpl
@Autowired
lateinit var shopaccRepository: ShopaccRepositoryImpl
- private fun builderRecords(builder: TransactionBuilder, status: String): TransactionResult {
+ private fun builderRecords(builder: TransactionBuilder, status: String): TTransactionMain {
// 记录三方的交易流水(个人,商户,科目)
try {
- val result = TransactionResult("20000000000001", "20190520")
val transaction = TTransactionMain().apply {
- this.refno = result.refno
- this.accdate = result.accdate
+ refno = "20000000000001"
+ accdate = "20190520"
}
+
if (builder.hasPerson()) {
TPersondtl().apply {
- this.refno = result.refno
- this.accdate = result.accdate
+ this.refno = transaction.refno
+ this.accdate = transaction.accdate
userid = builder.person().person.userid
userName = builder.person().person.accname
transdate = builder.transDate
}.also {
// save persondtl
persondtlDao.save(it)
- result.persondtl = it
+ transaction.personDtl = it
transaction.person = true
}
}
if (builder.hasShop()) {
TShopdtl().apply {
- this.refno = result.refno
- this.accdate = result.accdate
+ this.refno = transaction.refno
+ this.accdate = transaction.accdate
this.amount = builder.shop().amount
this.payInfo = builder.shop().payinfo
this.payType = builder.shop().paytype
}.also {
// save shopdtl
shopdtlDao.save(it)
- result.shopdtl = it
+ transaction.shopDtl = it
transaction.shop = true
}
}
if (builder.hasSubject()) {
// save subjectdtl
TSubjectdtl().apply {
- this.refno = result.refno
- this.accdate = result.accdate
+ this.refno = transaction.refno
+ this.accdate = transaction.accdate
this.amount = builder.subject().amount
this.payInfo = builder.subject().payinfo
this.payType = builder.subject().paytype
this.status = status
}.also {
subjectdtlDao.save(it)
- result.subjectdtl = it
+ transaction.subjectDtl = it
transaction.subject = true
}
}
- builder.getAllDetails().forEach { line ->
+ builder.getAllDetails().map { line ->
TDebitCreditDtl().apply {
- this.refno = result.refno
- this.accdate = result.accdate
+ this.refno = transaction.refno
+ this.accdate = transaction.accdate
this.seqno = line.seqno
this.draccno = line.debit.getAccountNo()
this.drsubjno = line.debit.getSubjectNo()
this.summary = line.summary
}.also {
debitCreditDtlDao.save(it)
- result.debitCreditLines.add(it)
}
+ }.apply {
+ transaction.details = this
}
- val details = debitCreditDtlDao.findByRefno(result.refno)
+ val details = debitCreditDtlDao.findByRefno(transaction.refno)
if (builder.hasPerson()) {
sumBalanceFromDetails(details, builder.person().person.accno,
Subject.SUBJNO_PERSONAL_DEPOSIT).also {
- if (result.persondtl.amount != it) {
+ if (transaction.personDtl.amount != it) {
throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR,
- "输入金额错误,个人余额不符<${result.persondtl.amount}>")
+ "输入金额错误,个人余额不符<${transaction.personDtl.amount}>")
}
}
}
if (builder.hasShop()) {
sumBalanceFromDetails(details, builder.shop().shopacc.shopaccno,
Subject.SUBJNO_MACHANT_INCOME).also {
- if (result.shopdtl.amount != it) {
+ if (transaction.shopDtl.amount != it) {
throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR,
- "输入金额错误,商户余额不符<${result.shopdtl.amount}>")
+ "输入金额错误,商户余额不符<${transaction.shopDtl.amount}>")
}
}
}
if (builder.hasSubject()) {
sumBalanceFromDetails(details, builder.subject().subject.subjno,
- result.subjectdtl.subjectno).also {
- if (result.subjectdtl.amount != it) {
+ transaction.subjectDtl.subjectno).also {
+ if (transaction.subjectDtl.amount != it) {
throw TransactionProcessException(TradeErrorCode.INPUT_DATA_ERROR,
- "输入金额错误,科目余额不符<${result.subjectdtl.amount}>")
+ "输入金额错误,科目余额不符<${transaction.subjectDtl.amount}>")
}
}
}
transactionMainDao.save(transaction)
- return result
+ return transaction
} catch (ex: SQLException) {
throw TransactionProcessException(TradeErrorCode.BUSINESS_DEAL_ERROR, ex.message)
}
}
- override fun init(builder: TransactionBuilder): TransactionResult {
+ override fun init(builder: TransactionBuilder): TTransactionMain {
return builderRecords(builder, TradeDict.DTL_STATUS_INIT)
}
- override fun wip(builder: TransactionBuilder): TransactionResult {
+ override fun wip(builder: TransactionBuilder): TTransactionMain {
return builderRecords(builder, TradeDict.DTL_STATUS_WIP)
}
}
}
- override fun wip(refno: String) {
+ override fun wip(refno: String): TTransactionMain {
val transaction = transactionMainDao.findById(refno).let {
if (it.isPresent) it.get() else null
} ?: throw TransactionProcessException(TradeErrorCode.TRANSACTION_IS_FINISHED, "流水<$refno>参考号错误")
} ?: throw TransactionProcessException(TradeErrorCode.TRANSACTION_NOT_EXISTS, "科目流水<$refno>不存在")
}
transactionMainDao.save(transaction)
+ return transaction
}
- override fun fail(refno: String) {
+ override fun fail(refno: String): TTransactionMain {
val transaction = transactionMainDao.findByRefnoForUpdate(refno)
?: throw TransactionProcessException(TradeErrorCode.TRANSACTION_IS_FINISHED, "流水<$refno>参考号错误")
transaction.status = TradeDict.DTL_STATUS_FAIL
transactionMainDao.save(transaction)
+ return transaction
}
- override fun success(refno: String) {
+ override fun success(refno: String): TTransactionMain {
val transaction = transactionMainDao.findByRefnoForUpdate(refno)
?: throw TransactionProcessException(TradeErrorCode.TRANSACTION_IS_FINISHED, "流水<$refno>参考号错误")
// update subject balance
}
transactionMainDao.save(transaction)
+ return transaction
}
}
\ No newline at end of file