改进代码,增加lock time
diff --git a/build.gradle b/build.gradle
index 381e261..e86876d 100644
--- a/build.gradle
+++ b/build.gradle
@@ -25,14 +25,14 @@
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')
+ 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')
- compile group: 'com.google.code.gson', name: 'gson', version: '2.8.5'
+ 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 b2a7892..5cae32d 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 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<TAccount, String> {
@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 0000000..ede84de
--- /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 b0e1331..0a93fd2 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.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 @@
@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<Any> {
+ outtradeno: String, payinfo: String, feetype: String): ResponseEntity<Any> {
//一卡通支付款 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 @@
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)