From: Tang Cheng Date: Sun, 14 Apr 2019 06:08:44 +0000 (+0800) Subject: 改进代码,增加lock time X-Git-Tag: 1.0.0^2~296 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=0ef385dd4ef0b9f1a5fde5a83f7a4f1060721bd1;p=epayment%2Ffood_payapi.git 改进代码,增加lock time --- diff --git a/build.gradle b/build.gradle index 381e2614..e86876d5 100644 --- a/build.gradle +++ b/build.gradle @@ -25,14 +25,14 @@ dependencies { providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat' testImplementation 'org.springframework.boot:spring-boot-starter-test' - compile group: 'com.sun.jersey', name: 'jersey-client', version:'1.19' - compile group: 'javax.servlet', name: 'jstl', version: '1.2' - compile group: 'taglibs', name: 'standard', version: '1.1.2' - compile group: 'javax.servlet.jsp', name: 'jsp-api', version: '2.1' - compile group: 'log4j', name: 'log4j', version: '1.2.16' - compile files ('libs/ojdbc6.jar') - - compile group: 'com.google.code.gson', name: 'gson', version: '2.8.5' + implementation group: 'com.sun.jersey', name: 'jersey-client', version:'1.19' + implementation group: 'javax.servlet', name: 'jstl', version: '1.2' + implementation group: 'taglibs', name: 'standard', version: '1.1.2' + implementation group: 'javax.servlet.jsp', name: 'jsp-api', version: '2.1' + implementation group: 'log4j', name: 'log4j', version: '1.2.16' + implementation files ('libs/ojdbc6.jar') + + implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.5' } compileKotlin { diff --git a/src/main/java/com/supwisdom/dlpay/consume/dao/AccountDao.java b/src/main/java/com/supwisdom/dlpay/consume/dao/AccountDao.java index b2a78922..5cae32df 100644 --- a/src/main/java/com/supwisdom/dlpay/consume/dao/AccountDao.java +++ b/src/main/java/com/supwisdom/dlpay/consume/dao/AccountDao.java @@ -4,16 +4,23 @@ import com.supwisdom.dlpay.consume.domain.TAccount; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Lock; import org.springframework.data.jpa.repository.Query; -import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.data.jpa.repository.QueryHints; import javax.persistence.LockModeType; +import javax.persistence.QueryHint; public interface AccountDao extends JpaRepository { @Lock(LockModeType.PESSIMISTIC_WRITE) + @QueryHints({@QueryHint(name = "javax.persistence.lock.timeout", value ="5000")}) @Query("select a from TAccount a where a.accno = ?1") TAccount getByAccnoForUpdate(String accno); + @Lock(LockModeType.PESSIMISTIC_WRITE) + @QueryHints({@QueryHint(name = "javax.persistence.lock.timeout", value ="0")}) + @Query("select a from TAccount a where a.accno = ?1") + TAccount getByAccnoForUpdateNowait(String accno); + TAccount findByUserid(String userid); } diff --git a/src/main/java/com/supwisdom/dlpay/framework/util/Subject.java b/src/main/java/com/supwisdom/dlpay/framework/util/Subject.java new file mode 100644 index 00000000..ede84deb --- /dev/null +++ b/src/main/java/com/supwisdom/dlpay/framework/util/Subject.java @@ -0,0 +1,34 @@ +package com.supwisdom.dlpay.framework.util; + +public class Subject { + // 资产类科目 + /** + * 现金 + */ + public static final String SUBJ_CASH = "1001"; + + /** + * 银行存款 + */ + public static final String SUBJ_DEPOSIT = "1002"; + + /** + * 支票 + */ + public static final String SUBJ_CHEQUE = "1003"; + + // 负债类科目 + + /** + * 个人预存款 + */ + public static final String SUBJ_PRE_DEPOSIT = "2001"; + + /** + * 商户营业款 + */ + public static final String SUBJ_MACHANT_INCOME = "2002"; + + // 损益类科目 + +} 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 b0e1331f..0a93fd25 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 @@ -7,10 +7,7 @@ import com.supwisdom.dlpay.consume.service.AccountUtilServcie import com.supwisdom.dlpay.consume.service.PaytypeService import com.supwisdom.dlpay.consume.service.PersonBalancePayService import com.supwisdom.dlpay.consume.service.PersonService -import com.supwisdom.dlpay.framework.util.DateUtil -import com.supwisdom.dlpay.framework.util.TradeCode -import com.supwisdom.dlpay.framework.util.TradeDict -import com.supwisdom.dlpay.framework.util.Tradetype +import com.supwisdom.dlpay.framework.util.* import com.supwisdom.dlpay.util.PaytypeUtil import org.springframework.beans.factory.annotation.Autowired import org.springframework.http.ResponseEntity @@ -70,42 +67,36 @@ class ConsumeController { @PostMapping("/ykt/payinit") fun yktPayInit(userid: String, amount: Int, manageFee: Int, stuempno: String, shopid: String, transdate: String, transtime: String, - outtradeno: String, payinfo: String,feetype:String): ResponseEntity { + outtradeno: String, payinfo: String, feetype: String): ResponseEntity { //一卡通支付款 112240 - var feeDrsubjectno = "" - var feeCrsubjectno = "" - var summary = "" - var realamount = 0 - when(feetype){ - TradeDict.FEETYPE_CONSUME_MEALER->{ - feeDrsubjectno="112240" - feeCrsubjectno = "2002" - realamount = amount - summary = "收搭伙费" - } - TradeDict.FEETYPE_CONSUME_DISCOUNT->{ - feeDrsubjectno = "2003" - feeCrsubjectno = shopid - realamount = amount - manageFee - summary = "优惠折扣" - } - } - val person = personService.getPersonByThirdUniqueIdenty(stuempno) val dtl = PersonTransBuilder.newBuilder(accountUtilServcie) .setTransDatetime(transdate, transtime) .selectPaytype(PaytypeUtil.YKTPAY, payinfo) .setOuttradeno(outtradeno) .setOwner(person) - .setTransinfo(TradeCode.TRANSCODE_YKTPAY,"一卡通支付") + .setTransinfo(TradeCode.TRANSCODE_YKTPAY, "一卡通支付") .chooseTradetype(Tradetype.CONSUME) - .addDetail(AccountHolder.subject("112240"), - AccountHolder.shop(shopid), - realamount / 100.0, "一卡通支付") - .addDetail(AccountHolder.subject(feeDrsubjectno), - AccountHolder.subject(feeCrsubjectno), - manageFee / 100.0, summary) - .done(personBalancePayService, false) + .also { + when (feetype) { + TradeDict.FEETYPE_CONSUME_MEALER -> { + it.addDetail(AccountHolder.subject("112240"), + AccountHolder.shop(shopid), + amount / 100.0, "一卡通支付") + .addDetail(AccountHolder.subject("112240"), + AccountHolder.subject(Subject.SUBJ_MACHANT_INCOME), + manageFee / 100.0, "收搭伙费") + } + TradeDict.FEETYPE_CONSUME_DISCOUNT -> { + it.addDetail(AccountHolder.subject("112240"), + AccountHolder.shop(shopid), + (amount - manageFee) / 100.0, "一卡通支付") + .addDetail(AccountHolder.subject("2003"), + AccountHolder.shop(shopid), + manageFee / 100.0, "优惠折扣") + } + } + }.done(personBalancePayService, false) return ResponseEntity.ok(dtl) } @@ -114,7 +105,7 @@ class ConsumeController { 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)