农商行下载对账单
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/bean/YnrccChkfileBean.java b/payapi/src/main/java/com/supwisdom/dlpay/api/bean/YnrccChkfileBean.java
new file mode 100644
index 0000000..bdfc228
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/bean/YnrccChkfileBean.java
@@ -0,0 +1,85 @@
+package com.supwisdom.dlpay.api.bean;
+
+public class YnrccChkfileBean {
+ private String refno; //本地流水号
+ private String agentrefno; //银行流水号
+ private String agentdate; //yin
+ private Integer amount;
+ private String payerid;
+ private String payeeid;
+ private String summary;
+ private String status;
+ private String flag;
+
+ public String getRefno() {
+ return refno;
+ }
+
+ public void setRefno(String refno) {
+ this.refno = refno;
+ }
+
+ public String getAgentrefno() {
+ return agentrefno;
+ }
+
+ public void setAgentrefno(String agentrefno) {
+ this.agentrefno = agentrefno;
+ }
+
+ public String getAgentdate() {
+ return agentdate;
+ }
+
+ public void setAgentdate(String agentdate) {
+ this.agentdate = agentdate;
+ }
+
+ public Integer getAmount() {
+ return amount;
+ }
+
+ public void setAmount(Integer amount) {
+ this.amount = amount;
+ }
+
+ public String getPayerid() {
+ return payerid;
+ }
+
+ public void setPayerid(String payerid) {
+ this.payerid = payerid;
+ }
+
+ public String getPayeeid() {
+ return payeeid;
+ }
+
+ public void setPayeeid(String payeeid) {
+ this.payeeid = payeeid;
+ }
+
+ public String getSummary() {
+ return summary;
+ }
+
+ public void setSummary(String summary) {
+ this.summary = summary;
+ }
+
+ public String getStatus() {
+ return status;
+ }
+
+ public void setStatus(String status) {
+ this.status = status;
+ }
+
+ public String getFlag() {
+ return flag;
+ }
+
+ public void setFlag(String flag) {
+ this.flag = flag;
+ }
+}
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
index 63058e8..88a6f56 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/TransactionChkdtlDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/TransactionChkdtlDao.java
@@ -1,10 +1,20 @@
package com.supwisdom.dlpay.api.dao;
import com.supwisdom.dlpay.api.domain.TTransactionChkdtl;
+import com.supwisdom.dlpay.framework.data.CountAmountBean;
import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
+import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
@Repository
public interface TransactionChkdtlDao extends JpaRepository<TTransactionChkdtl, String> {
+ @Modifying
+ @Query("delete from TTransactionChkdtl t where t.accdate=?1 and t.sourcetype=?2 ")
+ void deleteByAccdateAndSorucetype(String accdate, String sourcetype);
+
+ @Query("select count(t.id) as totalcnt,sum(t.amount) as totalamt from TTransactionChkdtl t where t.accdate=?1 and t.sourcetype=?2 ")
+ CountAmountBean getTransactionSumInfo(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
index d230036..bc8d7ea 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionChkdtl.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionChkdtl.java
@@ -7,7 +7,7 @@
@Entity
@Table(name = "TB_TRANSACTION_CHKDTL",
- indexes = {@Index(name = "uk_transaction_chkdtl", unique = true, columnList = "accdate,sourcetype,seqno")})
+ indexes = {@Index(name = "UK_TRANSACTION_CHKDTL", unique = true, columnList = "ACCDATE,SOURCETYPE,THIRD_REFNO,LOCAL_REFNO")})
public class TTransactionChkdtl {
@Id
@GenericGenerator(name = "idGenerator", strategy = "uuid")
@@ -21,9 +21,6 @@
@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;
@@ -36,6 +33,9 @@
@Column(name = "THIRD_ACCDATE", nullable = false, length = 8)
private String thirdAccdate; //第三方记账日期
+ @Column(name = "TRANSTYPE", length = 20)
+ private String transtype; // pay-支付|refund-退款|cancel-撤销
+
@Column(name = "THIRD_STATUS", length = 20)
private String thirdStatus; //第三方流水状态
@@ -45,10 +45,10 @@
@Column(name = "EXTDATA", length = 200)
private String extdata;
- @Column(name = "CHKRESULT", nullable = false, length = 20)
+ @Column(name = "CHKRESULT", length = 20)
private String chkresult;
- @Column(name = "RESOLVED", nullable = false, length = 20)
+ @Column(name = "RESOLVED", length = 20)
private String resolved;
@Column(name = "LASTSAVED")
@@ -81,14 +81,6 @@
this.sourcetype = sourcetype;
}
- public Integer getSeqno() {
- return seqno;
- }
-
- public void setSeqno(Integer seqno) {
- this.seqno = seqno;
- }
-
public Double getAmount() {
return amount;
}
@@ -121,6 +113,14 @@
this.thirdAccdate = thirdAccdate;
}
+ public String getTranstype() {
+ return transtype;
+ }
+
+ public void setTranstype(String transtype) {
+ this.transtype = transtype;
+ }
+
public String getThirdStatus() {
return thirdStatus;
}
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
index 2cdc0f4..6517f21 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionChkfile.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TTransactionChkfile.java
@@ -7,7 +7,7 @@
@Entity
@Table(name = "TB_TRANSACTION_CHKFILE",
- indexes = {@Index(name = "uk_transaction_chkfile", unique = true, columnList = "accdate,sourcetype,")})
+ indexes = {@Index(name = "uk_transaction_chkfile", unique = true, columnList = "accdate,sourcetype,tenantid")})
public class TTransactionChkfile {
@Id
@GenericGenerator(name = "idGenerator", strategy = "uuid")
@@ -24,6 +24,9 @@
@Column(name = "STATUS", nullable = false, length = 20)
private String status;
+ @Column(name = "RESULT", nullable = false, length = 20)
+ private String result;
+
@Column(name = "REMARK", length = 600)
private String remark;
@@ -39,6 +42,7 @@
@Column(name = "LOCALAMT", nullable = false, precision = 15, scale = 2)
private Double localamt;
+ @Version
@Column(name = "LASTSAVED")
private Timestamp lastsaved;
@@ -77,6 +81,14 @@
this.status = status;
}
+ public String getResult() {
+ return result;
+ }
+
+ public void setResult(String result) {
+ this.result = result;
+ }
+
public String getRemark() {
return remark;
}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/core/DayendSettleTask.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/core/DayendSettleTask.java
index 368bf8e..86fb351 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/core/DayendSettleTask.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/core/DayendSettleTask.java
@@ -2,6 +2,8 @@
import com.supwisdom.dlpay.framework.domain.TSettleLog;
import com.supwisdom.dlpay.framework.service.DayendSettleService;
+import com.supwisdom.dlpay.framework.tenant.TenantContext;
+import com.supwisdom.dlpay.framework.util.Constants;
import com.supwisdom.dlpay.framework.util.StringUtil;
import net.javacrumbs.shedlock.core.SchedulerLock;
import org.slf4j.Logger;
@@ -25,6 +27,8 @@
if (logger.isDebugEnabled()) logger.debug("进入日结算任务!");
settleLog = dayendSettleService.doCreateSettleLog(); //记录日志
try {
+ if (null == TenantContext.getTenantSchema()) TenantContext.setTenantSchema(Constants.DEFAULT_TENANTID);
+
//step1: 账户校验(fixme: 清算任务?)
long t1 = System.currentTimeMillis();
if (!checkAccounts()) {
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/BusinessparaDao.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/BusinessparaDao.java
index 8f8be9c..4b8addc 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/BusinessparaDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/BusinessparaDao.java
@@ -3,10 +3,7 @@
import com.supwisdom.dlpay.framework.domain.TBusinesspara;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Lock;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.jpa.repository.QueryHints;
+import org.springframework.data.jpa.repository.*;
import org.springframework.stereotype.Repository;
import javax.persistence.LockModeType;
@@ -26,4 +23,8 @@
TBusinesspara findByParakeyForUpdateNowait(String parakey);
Page<TBusinesspara> findAllByParakeyContaining(String parakey, Pageable pageable);
+
+ @Modifying
+ @Query("update TBusinesspara t set t.paraval=?2 where t.parakey=?1 ")
+ void updateBusinessparaValue(String parakey, String paraval);
}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/data/CountAmountBean.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/data/CountAmountBean.java
new file mode 100644
index 0000000..2fc13b8
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/data/CountAmountBean.java
@@ -0,0 +1,6 @@
+package com.supwisdom.dlpay.framework.data;
+
+public interface CountAmountBean {
+ Integer getTotalcnt();
+ Double getTotalamt();
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/util/ConstantUtil.java b/payapi/src/main/java/com/supwisdom/dlpay/util/ConstantUtil.java
index 3c7b5de..c7b479c 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/util/ConstantUtil.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/util/ConstantUtil.java
@@ -33,4 +33,38 @@
public static final String QUERYTYPE_NEED_QUERY = "query";
public static final String QUERYTYPE_QUERY_FINISH = "finish";
public static final int QUERY_MAX_COUNT = 10;
+
+ /**
+ * 对账文件状态
+ * */
+ public static final String CHKFILE_STATUS_INIT = "init"; //初始化
+ public static final String CHKFILE_STATUS_UNCHECK = "uncheck"; //待对账
+ public static final String CHKFILE_STATUS_finish = "finish"; //对账完成
+ public static final String CHKFILE_STATUS_ERROR = "error"; //对账异常
+
+ /**
+ * 对账文件结果状态
+ * */
+ public static final String CHKFILE_RESULT_NONE = "none"; //未对账 -
+ public static final String CHKFILE_RESULT_EQUAL = "equal"; //对账一致,平
+ public static final String CHKFILE_RESULT_UNEQUAL = "unequal"; //对账不一致,不平
+
+ /**
+ * 对账明细状态
+ * */
+ public static final String CHKDTL_CHKRESULT_UNCHECK= "uncheck"; //未检查
+ public static final String CHKDTL_CHKRESULT_NEGATION= "negation"; //交易流水不存在
+ public static final String CHKDTL_CHKRESULT_NOCHARGE = "nocharge"; //支付未记账
+ public static final String CHKDTL_CHKRESULT_DIFF = "diff"; //金额不相等
+
+ /**
+ * 对账明细解决状态
+ * */
+ public static final String CHKDTL_RESOLVED_ADD ="add"; //补账
+ public static final String CHKDTL_RESOLVED_PROCESSED = "processed"; //已处理
+ public static final String CHKDTL_RESOLVED_FAIL = "fail"; //补账失败
+ public static final String CHKDTL_RESOLVED_EQUAL = "equal"; //一致,相等
+ public static final String CHKDTL_RESOLVED_HANGUP="hangup"; //挂起
+
+
}
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 e721a02..e2fbcda 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
@@ -15,6 +15,19 @@
import org.springframework.stereotype.Component
import org.springframework.web.client.RestTemplate
+import com.sun.jersey.api.client.Client
+import com.sun.jersey.api.client.ClientResponse
+import com.supwisdom.dlpay.api.bean.YnrccChkfileBean
+import com.supwisdom.dlpay.api.domain.TTransactionChkfile
+import com.supwisdom.dlpay.framework.tenant.TenantContext
+import com.supwisdom.dlpay.framework.util.Constants
+import com.supwisdom.dlpay.framework.util.StringUtil
+import com.supwisdom.dlpay.util.ConstantUtil
+import java.io.BufferedReader
+import java.io.InputStream
+import java.io.InputStreamReader
+import javax.ws.rs.core.MediaType
+
/**
* 第三方对账任务
@@ -31,8 +44,6 @@
private lateinit var transactionReconciliationService: TransactionReconciliationService
@Autowired
private lateinit var sourceTypeService: SourceTypeService
- @Autowired
- private lateinit var restTemplate: RestTemplate
private val logger = KotlinLogging.logger { }
@@ -41,6 +52,8 @@
@SchedulerLock(name = "DownloadYnrccChkfileSchedulerTask", lockAtMostForString = "PT10M")
fun doDownloadYnrccChkfile() {
try {
+ if(null==TenantContext.getTenantSchema()) TenantContext.setTenantSchema(Constants.DEFAULT_TENANTID)
+
//下载对账单逻辑
val hostdate = systemUtilService.sysdatetime.hostdate
val downloadLastdate = ynrccBusinessService.getLastDownloadBillDate()
@@ -50,24 +63,25 @@
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 // 已经存在对账单
- }
+ var chkfile = transactionReconciliationService.doInitTransactionChkfile(billDate, TradeDict.PAYTYPE_CITIZEN_CARD)
val resp = citizencardPayService.getChkfilename(billDate, null)
if (YnrccUtil.CODE_SUCCESS == resp.code) {
val agentConfig = sourceTypeService.getChargePaytypeConfig(TradeDict.PAYTYPE_CITIZEN_CARD, true)
- val agentUrl = agentConfig[YnrccUtil.YNRCC_ANGENT_URL] + "/download"
+ val agentUrl = agentConfig[YnrccUtil.YNRCC_ANGENT_URL] + "/download?filename=" + resp.filename
//根据filename 取文件数据
-
+ downloadYnrccBills(billDate, agentUrl, chkfile)
} else if (YnrccUtil.NO_RECORDS_TODAY == resp.code) {
//当日无交易明细,也创建空记录
+ transactionReconciliationService.doSuccessTransactionChkfile(chkfile,"请求银行返回:当日无交易明细")
} else {
//报错,退出对账单拉取
logger.error("大理农商行对账单下载[$billDate]报错:${resp.message}")
+ chkfile.status = ConstantUtil.CHKFILE_STATUS_ERROR
+ chkfile.remark = "请求前置获取对账文件报错:${resp.message}"
+ transactionReconciliationService.saveOrUpdateTransactionChkfile(chkfile)
break
}
}
@@ -77,4 +91,82 @@
}
}
+ private fun downloadYnrccBills(accdate: String, agentUrl: String, chkfile: TTransactionChkfile) {
+ val client = Client.create()
+ client.setConnectTimeout(30000)
+ val respClient = client.resource(agentUrl).type(MediaType.APPLICATION_OCTET_STREAM_TYPE).get(ClientResponse::class.java)
+ if (200 == respClient.status) {
+ val stream = respClient.getEntity(InputStream::class.java)
+ BufferedReader(InputStreamReader(stream)).use { reader ->
+ val header = reader.readLine()
+ val fields = header.split(",").mapNotNull { if (it.isNotEmpty()) it else null }
+ val batchSize = 10000 //每次保存的数目
+ var totalcnt = 0
+ var failcnt = 0
+
+ val datalist = ArrayList<YnrccChkfileBean>()
+ while (true) {
+ val line = reader.readLine() ?: break
+ if (line.isEmpty()) continue
+ val columns = line.split(",").mapNotNull { if (it.isNotEmpty()) it else null }
+ val bean = YnrccChkfileBean()
+ StringUtil.transforToBean(fields, columns, bean)
+ datalist.add(bean)
+ totalcnt++
+ if (datalist.size >= batchSize) {
+ val fcnt = doBatchSaveYnrccCheckDetails(accdate, datalist) //保存
+ failcnt += fcnt
+ datalist.clear()
+ if (failcnt > 0) break
+ }
+
+ }
+ //保存最后的不足batchSize的记录
+ if (datalist.size > 0) {
+ val fcnt = doBatchSaveYnrccCheckDetails(accdate, datalist) //保存
+ failcnt += fcnt
+ }
+
+ if (failcnt > 0) {
+ //该天对账单保存错误
+ transactionReconciliationService.deleteTransactionChkDtlByAccdateAndSourcetype(accdate, TradeDict.PAYTYPE_CITIZEN_CARD) //删除已存明细
+ chkfile.status = ConstantUtil.CHKFILE_STATUS_ERROR
+ chkfile.remark = "对账单数据入库失败,请下载的检查数据"
+ transactionReconciliationService.saveOrUpdateTransactionChkfile(chkfile)
+ return
+ }
+
+ //成功
+ transactionReconciliationService.doSuccessTransactionChkfile(chkfile,"对账单数据下载成功")
+
+ }
+ } else {
+ logger.error("请求前置download[$accdate]对账单返回失败:httpStatus=[${respClient.status}]。获取对账文件数据失败")
+ chkfile.status = ConstantUtil.CHKFILE_STATUS_ERROR
+ chkfile.remark = "请求前置获取对账单数据失败,download返回:httpStatus=${respClient.status}"
+ transactionReconciliationService.saveOrUpdateTransactionChkfile(chkfile)
+ }
+ }
+
+ private fun doBatchSaveYnrccCheckDetails(accdate: String, list: ArrayList<YnrccChkfileBean>): Int {
+ try {
+ transactionReconciliationService.doBatchSaveYnrccTransactionChkDtl(TradeDict.PAYTYPE_CITIZEN_CARD, accdate, list)
+ return 0 //批量保存成功,无失败
+ } catch (e1: Exception) {
+ }
+
+ //批量保存有异常,逐笔保存
+ var failcnt = 0
+ for (bean in list) {
+ try {
+ transactionReconciliationService.saveYnrccTransactionChkDtl(TradeDict.PAYTYPE_CITIZEN_CARD, accdate, bean)
+ } catch (e2: Exception) {
+ failcnt++
+ e2.printStackTrace()
+ continue
+ }
+ }
+ return failcnt
+ }
+
}
\ No newline at end of file
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
index f334403..d43e051 100644
--- 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
@@ -1,9 +1,18 @@
package com.supwisdom.dlpay.api.service.impl
+import com.supwisdom.dlpay.agent.citizencard.YnrccUtil
+import com.supwisdom.dlpay.api.bean.YnrccChkfileBean
import com.supwisdom.dlpay.api.dao.TransactionChkdtlDao
import com.supwisdom.dlpay.api.dao.TransactionChkfileDao
+import com.supwisdom.dlpay.api.domain.TTransactionChkdtl
import com.supwisdom.dlpay.api.domain.TTransactionChkfile
import com.supwisdom.dlpay.api.service.TransactionReconciliationService
+import com.supwisdom.dlpay.exception.TransactionCheckException
+import com.supwisdom.dlpay.framework.dao.BusinessparaDao
+import com.supwisdom.dlpay.framework.service.SystemUtilService
+import com.supwisdom.dlpay.framework.tenant.TenantContext
+import com.supwisdom.dlpay.framework.util.TradeErrorCode
+import com.supwisdom.dlpay.util.ConstantUtil
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.stereotype.Service
@@ -13,10 +22,81 @@
private lateinit var transactionChkfileDao: TransactionChkfileDao
@Autowired
private lateinit var transactionChkdtlDao: TransactionChkdtlDao
+ @Autowired
+ private lateinit var systemUtilService: SystemUtilService
+ @Autowired
+ private lateinit var businessparaDao: BusinessparaDao
override fun getTransactionChkfile(accdate: String, sourcetype: String): TTransactionChkfile? {
return transactionChkfileDao.getByAccdateAndSourcetype(accdate, sourcetype)
}
+ override fun doInitTransactionChkfile(accdate: String, sourcetype: String): TTransactionChkfile {
+ return transactionChkfileDao.getByAccdateAndSourcetype(accdate, sourcetype).let {
+ if (it != null) {
+ if (ConstantUtil.CHKFILE_STATUS_INIT != it.status)
+ throw TransactionCheckException(TradeErrorCode.BUSINESS_DEAL_ERROR, "accdate=$accdate,sourcetype=$sourcetype 的chkfile已经存在")
+ it
+ } else {
+ transactionChkfileDao.save(TTransactionChkfile().apply {
+ this.accdate = accdate
+ this.sourcetype = sourcetype
+ this.status = ConstantUtil.CHKFILE_STATUS_INIT
+ this.result = ConstantUtil.CHKFILE_RESULT_NONE
+ this.remark = null
+ this.thirdcnt = 0
+ this.thirdamt = 0.00
+ this.localcnt = 0
+ this.localamt = 0.00
+ this.lastsaved = systemUtilService.sysdatetime.sysdate
+ this.tenantid = TenantContext.getTenantSchema()
+ }) //保存init对账文件
+ }
+ }
+ }
+
+ override fun saveOrUpdateTransactionChkfile(chkfile: TTransactionChkfile) {
+ transactionChkfileDao.save(chkfile)
+ }
+
+ override fun saveYnrccTransactionChkDtl(sourcetype: String, accdate: String, bean: YnrccChkfileBean): TTransactionChkdtl {
+ return transactionChkdtlDao.save(TTransactionChkdtl().apply {
+ this.accdate = accdate
+ this.sourcetype = sourcetype
+ this.amount = bean.amount / 100.0
+ this.thirdRefno = bean.agentrefno
+ this.localRefno = bean.refno
+ this.thirdAccdate = bean.agentdate
+ this.transtype = bean.flag
+ this.thirdStatus = bean.status
+ this.remark = null
+ this.extdata = bean.summary
+ this.chkresult = ConstantUtil.CHKDTL_CHKRESULT_UNCHECK
+ this.resolved = null
+ this.lastsaved = systemUtilService.sysdatetime.sysdate
+ this.tenantid = TenantContext.getTenantSchema()
+ })
+ }
+
+ override fun doBatchSaveYnrccTransactionChkDtl(sourcetype: String, accdate: String, list: ArrayList<YnrccChkfileBean>): Boolean {
+ for (bean in list) {
+ saveYnrccTransactionChkDtl(sourcetype, accdate, bean)
+ }
+ return true
+ }
+
+ override fun deleteTransactionChkDtlByAccdateAndSourcetype(accdate: String, sourcetype: String) {
+ transactionChkdtlDao.deleteByAccdateAndSorucetype(accdate, sourcetype)
+ }
+
+ override fun doSuccessTransactionChkfile(chkfile: TTransactionChkfile, remark: String) {
+ val suminfo = transactionChkdtlDao.getTransactionSumInfo(chkfile.accdate, chkfile.sourcetype)
+ chkfile.status = ConstantUtil.CHKFILE_STATUS_UNCHECK
+ chkfile.remark = remark
+ chkfile.thirdcnt = suminfo.totalcnt ?: 0
+ chkfile.thirdamt = suminfo.totalamt ?: 0.0
+ transactionChkfileDao.save(chkfile)
+ businessparaDao.updateBusinessparaValue(YnrccUtil.YNRCC_BILLS_DOWNLOAD_LASTDATE, chkfile.accdate) //更新下载对账单日期
+ }
}
\ 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
index 2171dee..2326df3 100644
--- 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
@@ -1,5 +1,7 @@
package com.supwisdom.dlpay.api.service
+import com.supwisdom.dlpay.api.bean.YnrccChkfileBean
+import com.supwisdom.dlpay.api.domain.TTransactionChkdtl
import com.supwisdom.dlpay.api.domain.TTransactionChkfile
import org.springframework.transaction.annotation.Transactional
@@ -7,4 +9,23 @@
@Transactional(rollbackFor = [Exception::class], readOnly = true)
fun getTransactionChkfile(accdate: String, sourcetype: String): TTransactionChkfile?
+ @Transactional(rollbackFor = [Exception::class])
+ fun doInitTransactionChkfile(accdate: String, sourcetype: String): TTransactionChkfile
+
+ @Transactional(rollbackFor = [Exception::class])
+ fun saveOrUpdateTransactionChkfile(chkfile: TTransactionChkfile)
+
+ @Transactional(rollbackFor = [Exception::class])
+ fun saveYnrccTransactionChkDtl(sourcetype: String, accdate: String, bean: YnrccChkfileBean): TTransactionChkdtl
+
+ @Transactional(rollbackFor = [Exception::class])
+ fun doBatchSaveYnrccTransactionChkDtl(sourcetype: String, accdate: String, list: ArrayList<YnrccChkfileBean>): Boolean
+
+ @Transactional(rollbackFor = [Exception::class])
+ fun deleteTransactionChkDtlByAccdateAndSourcetype(accdate: String, sourcetype: String)
+
+ @Transactional(rollbackFor = [Exception::class])
+ fun doSuccessTransactionChkfile(chkfile: TTransactionChkfile, reamrk:String)
+
+
}
\ No newline at end of file
diff --git a/payapi/src/main/resources/data.sql b/payapi/src/main/resources/data.sql
index da276c1..112b98b 100644
--- a/payapi/src/main/resources/data.sql
+++ b/payapi/src/main/resources/data.sql
@@ -512,6 +512,7 @@
INSERT INTO "tb_syspara" ("paraid", "displayflag", "editflag", "lastsaved", "paraname", "paraunit", "paraval", "remark", "valuetype", "tenantid")
VALUES (4, 'yes', 1, '20190514165658', '手机端用户过期时间', '秒', null, '手机端用户过期时间(秒)', 'decimal', '{tenantid}');
+INSERT INTO "tb_syspara" ("paraid", "displayflag", "editflag", "lastsaved", "paraname", "paraunit", "paraval", "remark", "valuetype", "tenantid")
VALUES (2019, 'yes', 1, '20190514165658', '与卡管系统对接的应用ID', null, null, '与卡管系统对接的app_id', 'string', '{tenantid}');
INSERT INTO "tb_syspara" ("paraid", "displayflag", "editflag", "lastsaved", "paraname", "paraunit", "paraval", "remark", "valuetype", "tenantid")
VALUES (2020, 'yes', 1, '20190514165658', '与卡管系统对接的签名秘钥', null, null, '与卡管系统对接的appkey', 'string', '{tenantid}');