From a963bbfd462684045568143e0d933ae69790320c Mon Sep 17 00:00:00 2001 From: Xia Kaixiang Date: Fri, 19 Jul 2019 18:44:45 +0800 Subject: [PATCH] =?utf8?q?=E5=AF=B9=E8=B4=A6=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../dlpay/api/dao/TransactionChkdtlDao.java | 10 + .../dlpay/api/dao/TransactionChkfileDao.java | 12 ++ .../dlpay/api/domain/TTransactionChkdtl.java | 179 ++++++++++++++++++ .../dlpay/api/domain/TTransactionChkfile.java | 135 +++++++++++++ .../com/supwisdom/dlpay/PayApiApplication.kt | 19 ++ .../dlpay/api/scheduler_ynrccchk_task.kt | 19 +- ...transaction_reconciliation_service_impl.kt | 22 +++ .../transaction_reconciliation_service.kt | 10 + 8 files changed, 405 insertions(+), 1 deletion(-) create mode 100644 payapi/src/main/java/com/supwisdom/dlpay/api/dao/TransactionChkdtlDao.java create mode 100644 payapi/src/main/java/com/supwisdom/dlpay/api/dao/TransactionChkfileDao.java create mode 100644 payapi/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionChkdtl.java create mode 100644 payapi/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionChkfile.java create mode 100644 payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_reconciliation_service_impl.kt create mode 100644 payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_reconciliation_service.kt diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/TransactionChkdtlDao.java b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/TransactionChkdtlDao.java new file mode 100644 index 00000000..63058e8d --- /dev/null +++ b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/TransactionChkdtlDao.java @@ -0,0 +1,10 @@ +package com.supwisdom.dlpay.api.dao; + +import com.supwisdom.dlpay.api.domain.TTransactionChkdtl; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface TransactionChkdtlDao extends JpaRepository { + +} diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/TransactionChkfileDao.java b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/TransactionChkfileDao.java new file mode 100644 index 00000000..a42f8ad2 --- /dev/null +++ b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/TransactionChkfileDao.java @@ -0,0 +1,12 @@ +package com.supwisdom.dlpay.api.dao; + +import com.supwisdom.dlpay.api.domain.TTransactionChkfile; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Service; + +@Service +public interface TransactionChkfileDao extends JpaRepository { + + TTransactionChkfile getByAccdateAndSourcetype(String accdate, String sourcetype); + +} diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionChkdtl.java b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionChkdtl.java new file mode 100644 index 00000000..d230036b --- /dev/null +++ b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionChkdtl.java @@ -0,0 +1,179 @@ +package com.supwisdom.dlpay.api.domain; + +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.*; +import java.sql.Timestamp; + +@Entity +@Table(name = "TB_TRANSACTION_CHKDTL", + indexes = {@Index(name = "uk_transaction_chkdtl", unique = true, columnList = "accdate,sourcetype,seqno")}) +public class TTransactionChkdtl { + @Id + @GenericGenerator(name = "idGenerator", strategy = "uuid") + @GeneratedValue(generator = "idGenerator") + @Column(name = "ID", nullable = false, length = 32) + private String id; + + @Column(name = "ACCDATE", nullable = false, length = 8) + private String accdate; + + @Column(name = "SOURCETYPE", nullable = false, length = 20) + private String sourcetype; + + @Column(name = "SEQNO", nullable = false, precision = 9) + private Integer seqno; + + @Column(name = "AMOUNT", nullable = false, precision = 9, scale = 2) + private Double amount; + + @Column(name = "THIRD_REFNO", nullable = false, length = 32) + private String thirdRefno; //第三方流水号 + + @Column(name = "LOCAL_REFNO", nullable = false, length = 32) + private String localRefno; //本地流水号 + + @Column(name = "THIRD_ACCDATE", nullable = false, length = 8) + private String thirdAccdate; //第三方记账日期 + + @Column(name = "THIRD_STATUS", length = 20) + private String thirdStatus; //第三方流水状态 + + @Column(name = "REMARK", length = 200) + private String remark; + + @Column(name = "EXTDATA", length = 200) + private String extdata; + + @Column(name = "CHKRESULT", nullable = false, length = 20) + private String chkresult; + + @Column(name = "RESOLVED", nullable = false, length = 20) + private String resolved; + + @Column(name = "LASTSAVED") + private Timestamp lastsaved; + + @Column(name = "tenantid", length = 20) + private String tenantid = ""; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getAccdate() { + return accdate; + } + + public void setAccdate(String accdate) { + this.accdate = accdate; + } + + public String getSourcetype() { + return sourcetype; + } + + public void setSourcetype(String sourcetype) { + this.sourcetype = sourcetype; + } + + public Integer getSeqno() { + return seqno; + } + + public void setSeqno(Integer seqno) { + this.seqno = seqno; + } + + public Double getAmount() { + return amount; + } + + public void setAmount(Double amount) { + this.amount = amount; + } + + public String getThirdRefno() { + return thirdRefno; + } + + public void setThirdRefno(String thirdRefno) { + this.thirdRefno = thirdRefno; + } + + public String getLocalRefno() { + return localRefno; + } + + public void setLocalRefno(String localRefno) { + this.localRefno = localRefno; + } + + public String getThirdAccdate() { + return thirdAccdate; + } + + public void setThirdAccdate(String thirdAccdate) { + this.thirdAccdate = thirdAccdate; + } + + public String getThirdStatus() { + return thirdStatus; + } + + public void setThirdStatus(String thirdStatus) { + this.thirdStatus = thirdStatus; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public String getExtdata() { + return extdata; + } + + public void setExtdata(String extdata) { + this.extdata = extdata; + } + + public String getChkresult() { + return chkresult; + } + + public void setChkresult(String chkresult) { + this.chkresult = chkresult; + } + + public String getResolved() { + return resolved; + } + + public void setResolved(String resolved) { + this.resolved = resolved; + } + + public Timestamp getLastsaved() { + return lastsaved; + } + + public void setLastsaved(Timestamp lastsaved) { + this.lastsaved = lastsaved; + } + + public String getTenantid() { + return tenantid; + } + + public void setTenantid(String tenantid) { + this.tenantid = tenantid; + } +} diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionChkfile.java b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionChkfile.java new file mode 100644 index 00000000..2cdc0f4a --- /dev/null +++ b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionChkfile.java @@ -0,0 +1,135 @@ +package com.supwisdom.dlpay.api.domain; + +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.*; +import java.sql.Timestamp; + +@Entity +@Table(name = "TB_TRANSACTION_CHKFILE", + indexes = {@Index(name = "uk_transaction_chkfile", unique = true, columnList = "accdate,sourcetype,")}) +public class TTransactionChkfile { + @Id + @GenericGenerator(name = "idGenerator", strategy = "uuid") + @GeneratedValue(generator = "idGenerator") + @Column(name = "ID", nullable = false, length = 32) + private String id; + + @Column(name = "ACCDATE", nullable = false, length = 8) + private String accdate; + + @Column(name = "SOURCETYPE", nullable = false, length = 20) + private String sourcetype; + + @Column(name = "STATUS", nullable = false, length = 20) + private String status; + + @Column(name = "REMARK", length = 600) + private String remark; + + @Column(name = "THIRDCNT", nullable = false, precision = 9) + private Integer thirdcnt; + + @Column(name = "THIRDAMT", nullable = false, precision = 15, scale = 2) + private Double thirdamt; + + @Column(name = "LOCALCNT", nullable = false, precision = 9) + private Integer localcnt; + + @Column(name = "LOCALAMT", nullable = false, precision = 15, scale = 2) + private Double localamt; + + @Column(name = "LASTSAVED") + private Timestamp lastsaved; + + @Column(name = "tenantid", length = 20) + private String tenantid = ""; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getAccdate() { + return accdate; + } + + public void setAccdate(String accdate) { + this.accdate = accdate; + } + + public String getSourcetype() { + return sourcetype; + } + + public void setSourcetype(String sourcetype) { + this.sourcetype = sourcetype; + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public Integer getThirdcnt() { + return thirdcnt; + } + + public void setThirdcnt(Integer thirdcnt) { + this.thirdcnt = thirdcnt; + } + + public Double getThirdamt() { + return thirdamt; + } + + public void setThirdamt(Double thirdamt) { + this.thirdamt = thirdamt; + } + + public Integer getLocalcnt() { + return localcnt; + } + + public void setLocalcnt(Integer localcnt) { + this.localcnt = localcnt; + } + + public Double getLocalamt() { + return localamt; + } + + public void setLocalamt(Double localamt) { + this.localamt = localamt; + } + + public Timestamp getLastsaved() { + return lastsaved; + } + + public void setLastsaved(Timestamp lastsaved) { + this.lastsaved = lastsaved; + } + + public String getTenantid() { + return tenantid; + } + + public void setTenantid(String tenantid) { + this.tenantid = tenantid; + } +} diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt index d0e6f9c0..7e2fb15d 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt @@ -25,7 +25,10 @@ import org.springframework.data.redis.core.RedisTemplate import org.springframework.data.redis.repository.configuration.EnableRedisRepositories import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer import org.springframework.data.redis.serializer.StringRedisSerializer +import org.springframework.http.client.ClientHttpRequestFactory +import org.springframework.http.client.SimpleClientHttpRequestFactory import org.springframework.scheduling.annotation.EnableScheduling +import org.springframework.web.client.RestTemplate @Configuration @@ -74,6 +77,22 @@ class HttpSessionConfig { } } +@Configuration +class RestTemplateConfig { + @Bean + fun simpleClientHttpRequestFactory(): SimpleClientHttpRequestFactory { + val factory = SimpleClientHttpRequestFactory() + factory.setConnectTimeout(15000) + factory.setReadTimeout(5000) + return factory + } + + @Bean + fun restTemplate(factory: SimpleClientHttpRequestFactory): RestTemplate { + return RestTemplate(factory) + } +} + @SpringBootApplication @EnableDiscoveryClient diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_ynrccchk_task.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_ynrccchk_task.kt index 04683c02..e721a029 100644 --- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_ynrccchk_task.kt +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/scheduler_ynrccchk_task.kt @@ -2,14 +2,19 @@ package com.supwisdom.dlpay.api import com.supwisdom.dlpay.agent.citizencard.YnrccUtil import com.supwisdom.dlpay.agent.service.CitizencardPayService +import com.supwisdom.dlpay.api.service.SourceTypeService +import com.supwisdom.dlpay.api.service.TransactionReconciliationService import com.supwisdom.dlpay.api.service.YnrccBusinessService import com.supwisdom.dlpay.framework.service.SystemUtilService import com.supwisdom.dlpay.framework.util.DateUtil +import com.supwisdom.dlpay.framework.util.TradeDict import mu.KotlinLogging import net.javacrumbs.shedlock.core.SchedulerLock import org.springframework.beans.factory.annotation.Autowired import org.springframework.scheduling.annotation.Scheduled import org.springframework.stereotype.Component +import org.springframework.web.client.RestTemplate + /** * 第三方对账任务 @@ -22,6 +27,12 @@ class DownloadYnrccChkfileTask { private lateinit var ynrccBusinessService: YnrccBusinessService @Autowired private lateinit var citizencardPayService: CitizencardPayService + @Autowired + private lateinit var transactionReconciliationService: TransactionReconciliationService + @Autowired + private lateinit var sourceTypeService: SourceTypeService + @Autowired + private lateinit var restTemplate: RestTemplate private val logger = KotlinLogging.logger { } @@ -39,9 +50,15 @@ class DownloadYnrccChkfileTask { for (i in 1 until diffDays) { val billDate = DateUtil.getNewDay(downloadLastdate, i) //要取对账单的日期 + var chkfile = transactionReconciliationService.getTransactionChkfile(billDate, TradeDict.PAYTYPE_CITIZEN_CARD) + if (null != chkfile) { + continue // 已经存在对账单 + } + val resp = citizencardPayService.getChkfilename(billDate, null) if (YnrccUtil.CODE_SUCCESS == resp.code) { - val chkfilename = resp.filename + val agentConfig = sourceTypeService.getChargePaytypeConfig(TradeDict.PAYTYPE_CITIZEN_CARD, true) + val agentUrl = agentConfig[YnrccUtil.YNRCC_ANGENT_URL] + "/download" //根据filename 取文件数据 diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_reconciliation_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_reconciliation_service_impl.kt new file mode 100644 index 00000000..f3344039 --- /dev/null +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/transaction_reconciliation_service_impl.kt @@ -0,0 +1,22 @@ +package com.supwisdom.dlpay.api.service.impl + +import com.supwisdom.dlpay.api.dao.TransactionChkdtlDao +import com.supwisdom.dlpay.api.dao.TransactionChkfileDao +import com.supwisdom.dlpay.api.domain.TTransactionChkfile +import com.supwisdom.dlpay.api.service.TransactionReconciliationService +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.stereotype.Service + +@Service +class TransactionReconciliationServiceImpl : TransactionReconciliationService { + @Autowired + private lateinit var transactionChkfileDao: TransactionChkfileDao + @Autowired + private lateinit var transactionChkdtlDao: TransactionChkdtlDao + + override fun getTransactionChkfile(accdate: String, sourcetype: String): TTransactionChkfile? { + return transactionChkfileDao.getByAccdateAndSourcetype(accdate, sourcetype) + } + + +} \ No newline at end of file diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_reconciliation_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_reconciliation_service.kt new file mode 100644 index 00000000..2171dee1 --- /dev/null +++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_reconciliation_service.kt @@ -0,0 +1,10 @@ +package com.supwisdom.dlpay.api.service + +import com.supwisdom.dlpay.api.domain.TTransactionChkfile +import org.springframework.transaction.annotation.Transactional + +interface TransactionReconciliationService { + @Transactional(rollbackFor = [Exception::class], readOnly = true) + fun getTransactionChkfile(accdate: String, sourcetype: String): TTransactionChkfile? + +} \ No newline at end of file -- 2.17.1