流水表定义
diff --git a/src/main/java/com/supwisdom/dlpay/bus/dao/OfflineBusdtlDao.java b/src/main/java/com/supwisdom/dlpay/bus/dao/OfflineBusdtlDao.java
new file mode 100644
index 0000000..e5d0afc
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/dao/OfflineBusdtlDao.java
@@ -0,0 +1,9 @@
+package com.supwisdom.dlpay.bus.dao;
+
+import com.supwisdom.dlpay.bus.domain.TOfflineBusdtl;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface OfflineBusdtlDao extends JpaRepository<TOfflineBusdtl, String> {
+}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/dao/OnlineBusdtlDao.java b/src/main/java/com/supwisdom/dlpay/bus/dao/OnlineBusdtlDao.java
new file mode 100644
index 0000000..1f38b4d
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/dao/OnlineBusdtlDao.java
@@ -0,0 +1,9 @@
+package com.supwisdom.dlpay.bus.dao;
+
+import com.supwisdom.dlpay.bus.domain.TOnlineBusdtl;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface OnlineBusdtlDao extends JpaRepository<TOnlineBusdtl, String> {
+}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/domain/TOfflineBusdtl.java b/src/main/java/com/supwisdom/dlpay/bus/domain/TOfflineBusdtl.java
new file mode 100644
index 0000000..f068de4
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/domain/TOfflineBusdtl.java
@@ -0,0 +1,277 @@
+package com.supwisdom.dlpay.bus.domain;
+
+import org.hibernate.annotations.GenericGenerator;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "TB_OFFLINE_BUSDTL",
+    indexes = {@Index(name = "uk_offline_busdtl", unique = true, columnList = "devphyid,termseqno,transdate")})
+public class TOfflineBusdtl {
+  @Id
+  @GenericGenerator(name = "idGenerator", strategy = "uuid")
+  @GeneratedValue(generator = "idGenerator")
+  @Column(name = "id", nullable = false, length = 32)
+  private String id;
+
+  @Column(name = "devphyid", length = 32)
+  private String devphyid;
+
+  @Column(name = "termid", precision = 9)
+  private Integer termid;
+
+  @Column(name = "termseqno", precision = 9)
+  private Integer termseqno;
+
+  @Column(name = "dtltype", nullable = false, length = 10)
+  private String dtltype;  //card-刷卡流水;qrcode-刷二维码流水
+
+  @Column(name = "termseqno", length = 20)
+  private String cardno;
+
+  @Column(name = "cardphyid", length = 20)
+  private String cardphyid;
+
+  @Column(name = "qrcode", length = 600)
+  private String qrcode;
+
+  @Column(name = "transdate", length = 8)
+  private String transdate;
+
+  @Column(name = "transtime", length = 6)
+  private String transtime;
+
+  @Column(name = "amount", nullable = false, precision = 9, scale = 2)
+  private Double amount;
+
+  @Column(name = "managefeetype", length = 20)
+  private String managefeetype = "none"; //none-无;mealer-搭伙费;discount-折扣
+
+  @Column(name = "managefee", precision = 9, scale = 2)
+  private Double managefee = 0D;
+
+  @Column(name = "dtlstat", length = 20)
+  private String dtlstat;  //设备流水的的状态,上传时的status
+
+  @Column(name = "payerid", length = 32)
+  private String payerid; //cardno对应TCitizenCard的payerid
+
+  @Column(name = "payername", length = 200)
+  private String payername; //cardno对应TCitizenCard的username
+
+  @Column(name = "status", nullable = false, length = 10)
+  private String status; //init-采集上来待处理;success-入账成功;fail-入账失败;hangup-挂起
+
+  @Column(name = "errcode", length = 20)
+  private String errcode;
+
+  @Column(name = "errmsg", length = 600)
+  private String errmsg;
+
+  @Column(name = "remark", length = 600)
+  private String remark;
+
+  @Column(name = "accdate", length = 8)
+  private String accdate;
+
+  @Column(name = "billno", length = 20)
+  private String billno;
+
+  @Column(name = "merchaccno", length = 20)
+  private String merchaccno;
+
+  @Column(name = "collecttime", length = 14)
+  private String collecttime; //采集时间,yyyyMMddHHmmss
+
+  public String getId() {
+    return id;
+  }
+
+  public void setId(String id) {
+    this.id = id;
+  }
+
+  public String getDevphyid() {
+    return devphyid;
+  }
+
+  public void setDevphyid(String devphyid) {
+    this.devphyid = devphyid;
+  }
+
+  public Integer getTermid() {
+    return termid;
+  }
+
+  public void setTermid(Integer termid) {
+    this.termid = termid;
+  }
+
+  public Integer getTermseqno() {
+    return termseqno;
+  }
+
+  public void setTermseqno(Integer termseqno) {
+    this.termseqno = termseqno;
+  }
+
+  public String getDtltype() {
+    return dtltype;
+  }
+
+  public void setDtltype(String dtltype) {
+    this.dtltype = dtltype;
+  }
+
+  public String getCardno() {
+    return cardno;
+  }
+
+  public void setCardno(String cardno) {
+    this.cardno = cardno;
+  }
+
+  public String getCardphyid() {
+    return cardphyid;
+  }
+
+  public void setCardphyid(String cardphyid) {
+    this.cardphyid = cardphyid;
+  }
+
+  public String getQrcode() {
+    return qrcode;
+  }
+
+  public void setQrcode(String qrcode) {
+    this.qrcode = qrcode;
+  }
+
+  public String getTransdate() {
+    return transdate;
+  }
+
+  public void setTransdate(String transdate) {
+    this.transdate = transdate;
+  }
+
+  public String getTranstime() {
+    return transtime;
+  }
+
+  public void setTranstime(String transtime) {
+    this.transtime = transtime;
+  }
+
+  public Double getAmount() {
+    return amount;
+  }
+
+  public void setAmount(Double amount) {
+    this.amount = amount;
+  }
+
+  public String getManagefeetype() {
+    return managefeetype;
+  }
+
+  public void setManagefeetype(String managefeetype) {
+    this.managefeetype = managefeetype;
+  }
+
+  public Double getManagefee() {
+    return managefee;
+  }
+
+  public void setManagefee(Double managefee) {
+    this.managefee = managefee;
+  }
+
+  public String getDtlstat() {
+    return dtlstat;
+  }
+
+  public void setDtlstat(String dtlstat) {
+    this.dtlstat = dtlstat;
+  }
+
+  public String getPayerid() {
+    return payerid;
+  }
+
+  public void setPayerid(String payerid) {
+    this.payerid = payerid;
+  }
+
+  public String getPayername() {
+    return payername;
+  }
+
+  public void setPayername(String payername) {
+    this.payername = payername;
+  }
+
+  public String getStatus() {
+    return status;
+  }
+
+  public void setStatus(String status) {
+    this.status = status;
+  }
+
+  public String getErrcode() {
+    return errcode;
+  }
+
+  public void setErrcode(String errcode) {
+    this.errcode = errcode;
+  }
+
+  public String getErrmsg() {
+    return errmsg;
+  }
+
+  public void setErrmsg(String errmsg) {
+    this.errmsg = errmsg;
+  }
+
+  public String getRemark() {
+    return remark;
+  }
+
+  public void setRemark(String remark) {
+    this.remark = remark;
+  }
+
+  public String getAccdate() {
+    return accdate;
+  }
+
+  public void setAccdate(String accdate) {
+    this.accdate = accdate;
+  }
+
+  public String getBillno() {
+    return billno;
+  }
+
+  public void setBillno(String billno) {
+    this.billno = billno;
+  }
+
+  public String getMerchaccno() {
+    return merchaccno;
+  }
+
+  public void setMerchaccno(String merchaccno) {
+    this.merchaccno = merchaccno;
+  }
+
+  public String getCollecttime() {
+    return collecttime;
+  }
+
+  public void setCollecttime(String collecttime) {
+    this.collecttime = collecttime;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/domain/TOnlineBusdtl.java b/src/main/java/com/supwisdom/dlpay/bus/domain/TOnlineBusdtl.java
new file mode 100644
index 0000000..9651597
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/domain/TOnlineBusdtl.java
@@ -0,0 +1,274 @@
+package com.supwisdom.dlpay.bus.domain;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "TB_ONLINE_BUSDTL",
+    indexes = {@Index(name = "idx_online_busdtl_accdate", columnList = "accdate"),
+        @Index(name = "idx_online_busdtl_termid", columnList = "termid")})
+public class TOnlineBusdtl {
+  @Id
+  @Column(name = "billno", unique = true, nullable = false, length = 20)
+  private String billno;
+
+  @Column(name = "accdate", length = 8)
+  private String accdate;
+
+  @Column(name = "acctime", length = 6)
+  private String acctime;
+
+  @Column(name = "termid", precision = 9)
+  private Integer termid;
+
+  @Column(name = "termseqno", precision = 9)
+  private Integer termseqno;
+
+  @Column(name = "transdate", length = 8)
+  private String transdate;
+
+  @Column(name = "transtime", length = 6)
+  private String transtime;
+
+  @Column(name = "cardno", length = 20)
+  private String cardno;
+
+  @Column(name = "amount", nullable = false, precision = 9, scale = 2)
+  private Double amount;
+
+  @Column(name = "managefeetype", length = 20)
+  private String managefeetype = "none";
+
+  @Column(name = "managefee", precision = 9, scale = 2)
+  private Double managefee = 0D;
+
+  @Column(name = "status", nullable = false, length = 20)
+  private String status; //init|success|fail
+
+  @Column(name = "transtype", nullable = false, length = 20)
+  private String transtype = "none"; //none-消费流水;cancel-撤销流水;refund-退款流水
+
+  @Column(name = "revflag", nullable = false, precision = 1)
+  private Integer revflag = 0;
+
+  @Column(name = "remark", length = 600)
+  private String remark;
+
+  @Column(name = "merchaccno", length = 20)
+  private String merchaccno;
+
+  @Column(name = "transmode", nullable = false, length = 20)
+  private String transmode; //card / qrcode
+
+  @Column(name = "payerid", length = 32)
+  private String payerid;
+
+  @Column(name = "payername", length = 200)
+  private String payername;
+
+  @Column(name = "collectid", length = 32)
+  private String collectid; //采集表的id
+
+  @Column(name = "refno", length = 32)
+  private String refno;
+
+  @Column(name = "core_accdate", length = 8)
+  private String coreAccdate;
+
+  @Column(name = "core_status", length = 10)
+  private String coreStatus;
+
+  @Column(name = "core_sourcetype", length = 20)
+  private String coreSourcetype; //核心平台支付方式
+
+  public String getBillno() {
+    return billno;
+  }
+
+  public void setBillno(String billno) {
+    this.billno = billno;
+  }
+
+  public String getAccdate() {
+    return accdate;
+  }
+
+  public void setAccdate(String accdate) {
+    this.accdate = accdate;
+  }
+
+  public String getAcctime() {
+    return acctime;
+  }
+
+  public void setAcctime(String acctime) {
+    this.acctime = acctime;
+  }
+
+  public Integer getTermid() {
+    return termid;
+  }
+
+  public void setTermid(Integer termid) {
+    this.termid = termid;
+  }
+
+  public Integer getTermseqno() {
+    return termseqno;
+  }
+
+  public void setTermseqno(Integer termseqno) {
+    this.termseqno = termseqno;
+  }
+
+  public String getTransdate() {
+    return transdate;
+  }
+
+  public void setTransdate(String transdate) {
+    this.transdate = transdate;
+  }
+
+  public String getTranstime() {
+    return transtime;
+  }
+
+  public void setTranstime(String transtime) {
+    this.transtime = transtime;
+  }
+
+  public String getCardno() {
+    return cardno;
+  }
+
+  public void setCardno(String cardno) {
+    this.cardno = cardno;
+  }
+
+  public Double getAmount() {
+    return amount;
+  }
+
+  public void setAmount(Double amount) {
+    this.amount = amount;
+  }
+
+  public String getManagefeetype() {
+    return managefeetype;
+  }
+
+  public void setManagefeetype(String managefeetype) {
+    this.managefeetype = managefeetype;
+  }
+
+  public Double getManagefee() {
+    return managefee;
+  }
+
+  public void setManagefee(Double managefee) {
+    this.managefee = managefee;
+  }
+
+  public String getStatus() {
+    return status;
+  }
+
+  public void setStatus(String status) {
+    this.status = status;
+  }
+
+  public String getTranstype() {
+    return transtype;
+  }
+
+  public void setTranstype(String transtype) {
+    this.transtype = transtype;
+  }
+
+  public Integer getRevflag() {
+    return revflag;
+  }
+
+  public void setRevflag(Integer revflag) {
+    this.revflag = revflag;
+  }
+
+  public String getRemark() {
+    return remark;
+  }
+
+  public void setRemark(String remark) {
+    this.remark = remark;
+  }
+
+  public String getMerchaccno() {
+    return merchaccno;
+  }
+
+  public void setMerchaccno(String merchaccno) {
+    this.merchaccno = merchaccno;
+  }
+
+  public String getTransmode() {
+    return transmode;
+  }
+
+  public void setTransmode(String transmode) {
+    this.transmode = transmode;
+  }
+
+  public String getPayerid() {
+    return payerid;
+  }
+
+  public void setPayerid(String payerid) {
+    this.payerid = payerid;
+  }
+
+  public String getPayername() {
+    return payername;
+  }
+
+  public void setPayername(String payername) {
+    this.payername = payername;
+  }
+
+  public String getCollectid() {
+    return collectid;
+  }
+
+  public void setCollectid(String collectid) {
+    this.collectid = collectid;
+  }
+
+  public String getRefno() {
+    return refno;
+  }
+
+  public void setRefno(String refno) {
+    this.refno = refno;
+  }
+
+  public String getCoreAccdate() {
+    return coreAccdate;
+  }
+
+  public void setCoreAccdate(String coreAccdate) {
+    this.coreAccdate = coreAccdate;
+  }
+
+  public String getCoreStatus() {
+    return coreStatus;
+  }
+
+  public void setCoreStatus(String coreStatus) {
+    this.coreStatus = coreStatus;
+  }
+
+  public String getCoreSourcetype() {
+    return coreSourcetype;
+  }
+
+  public void setCoreSourcetype(String coreSourcetype) {
+    this.coreSourcetype = coreSourcetype;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/service/impl/CitizenCardServiceImpl.java b/src/main/java/com/supwisdom/dlpay/bus/service/impl/CitizenCardServiceImpl.java
index dc8d0b8..e18065d 100644
--- a/src/main/java/com/supwisdom/dlpay/bus/service/impl/CitizenCardServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/bus/service/impl/CitizenCardServiceImpl.java
@@ -90,14 +90,14 @@
       if (BusConstant.STATUS_CARDVER_CLOSED.equals(card.getStatus()) || BusConstant.STATUS_CARDVER_CLOSED.equals(card.getTransStatus())) {
         //注销
         cardver.setCardvertype(BusConstant.CARDVERTYPE_CLOSED); //注销
-        cardver.setAdddelflag(BusConstant.ADDDELFLAG_DOWNLOAD); //下发黑名单
+        cardver.setAdddelflag(BusConstant.ADDDELFLAG_ADD); //下发黑名单
         blackverno = card.getCardverno();
       } else if (BusConstant.STATUS_CARDVER_NORMAL.equals(card.getStatus()) && BusConstant.STATUS_CARDVER_NORMAL.equals(card.getTransStatus())) {
         cardver.setCardvertype(BusConstant.CARDVERTYPE_REGISTER); //注册
         cardver.setAdddelflag(BusConstant.ADDDELFLAG_NONE); //不下发黑名单
       } else {
         cardver.setCardvertype(BusConstant.CARDVERTYPE_FREEZE); //卡状态异常
-        cardver.setAdddelflag(BusConstant.ADDDELFLAG_DOWNLOAD); //下发黑名单
+        cardver.setAdddelflag(BusConstant.ADDDELFLAG_ADD); //下发黑名单
         blackverno = card.getCardverno();
       }
       cardver.setStatus(BusConstant.STATUS_CARDVER_NORMAL);
@@ -165,13 +165,13 @@
       if (BusConstant.STATUS_CARDVER_CLOSED.equals(card.getStatus()) || BusConstant.STATUS_CARDVER_CLOSED.equals(card.getTransStatus())) {
         //注销
         cardver.setCardvertype(BusConstant.CARDVERTYPE_CLOSED); //注销
-        cardver.setAdddelflag(BusConstant.ADDDELFLAG_DOWNLOAD); //下发黑名单
+        cardver.setAdddelflag(BusConstant.ADDDELFLAG_ADD); //下发黑名单
       } else if (BusConstant.STATUS_CARDVER_NORMAL.equals(card.getStatus()) && BusConstant.STATUS_CARDVER_NORMAL.equals(card.getTransStatus())) {
         cardver.setCardvertype(BusConstant.CARDVERTYPE_REGISTER); //注册
         cardver.setAdddelflag(BusConstant.ADDDELFLAG_NONE); //不下发黑名单
       } else {
         cardver.setCardvertype(BusConstant.CARDVERTYPE_FREEZE); //卡状态异常
-        cardver.setAdddelflag(BusConstant.ADDDELFLAG_DOWNLOAD); //下发黑名单
+        cardver.setAdddelflag(BusConstant.ADDDELFLAG_ADD); //下发黑名单
       }
       cardver.setStatus(BusConstant.STATUS_CARDVER_NORMAL);
       cardver.setLastsaved(systemUtilService.getSysdatetime().getHostdatetime());
@@ -230,7 +230,7 @@
             cardver = new TCitizenCardver();
             cardver.setCardverno(cardverno);
             cardver.setCardvertype(BusConstant.CARDVERTYPE_CLOSED); //注销
-            cardver.setAdddelflag(BusConstant.ADDDELFLAG_DOWNLOAD); //下发黑名单
+            cardver.setAdddelflag(BusConstant.ADDDELFLAG_ADD); //下发黑名单
             citizenCardverDao.doClosedHistoryRecords(BusConstant.CARDVERTYPE_REGISTER, card.getCardno(), cardverno); //注册记录置为无效
           }
         } else if (BusConstant.STATUS_CARDVER_NORMAL.equals(card.getStatus()) && BusConstant.STATUS_CARDVER_NORMAL.equals(card.getTransStatus())) {
@@ -241,7 +241,7 @@
             cardver = new TCitizenCardver();
             cardver.setCardverno(cardverno);
             cardver.setCardvertype(BusConstant.CARDVERTYPE_UNFREEZE); //变为正常
-            cardver.setAdddelflag(BusConstant.ADDDELFLAG_DOWNLOAD); //下发黑名单
+            cardver.setAdddelflag(BusConstant.ADDDELFLAG_DELETE); //下发黑名单
             citizenCardverDao.doClosedHistoryRecords(BusConstant.CARDVERTYPE_FREEZE, card.getCardno(), cardverno); //冻结记录置为无效
             citizenCardverDao.doClosedHistoryRecords(BusConstant.CARDVERTYPE_CLOSED, card.getCardno(), cardverno); //注销记录置为无效
           }
@@ -253,7 +253,7 @@
             cardver = new TCitizenCardver();
             cardver.setCardverno(cardverno);
             cardver.setCardvertype(BusConstant.CARDVERTYPE_FREEZE); //变为异常
-            cardver.setAdddelflag(BusConstant.ADDDELFLAG_DOWNLOAD); //下发黑名单
+            cardver.setAdddelflag(BusConstant.ADDDELFLAG_ADD); //下发黑名单
             citizenCardverDao.doClosedHistoryRecords(BusConstant.CARDVERTYPE_UNFREEZE, card.getCardno(), cardverno); //解冻记录置为无效
           }
         }
diff --git a/src/main/java/com/supwisdom/dlpay/bus/util/BusConstant.java b/src/main/java/com/supwisdom/dlpay/bus/util/BusConstant.java
index 8bd7bea..504ad12 100644
--- a/src/main/java/com/supwisdom/dlpay/bus/util/BusConstant.java
+++ b/src/main/java/com/supwisdom/dlpay/bus/util/BusConstant.java
@@ -24,7 +24,8 @@
   public final static String CARDVERTYPE_FREEZE = "frozen"; //状态挂失、冻结、未启用等都会冻结卡,下载黑名单
   public final static String CARDVERTYPE_UNFREEZE = "unfrozen"; //卡状态正常时解冻
 
-  public final static int ADDDELFLAG_DOWNLOAD = 1; //需要下发
+  public final static int ADDDELFLAG_DELETE = 2; //下发删除
+  public final static int ADDDELFLAG_ADD = 1; //下发新增
   public final static int ADDDELFLAG_NONE = 0; //不需要下发
 
   public final static int SYSPARAID_MAXCARDVERNO = 10; //全局参数,最大版本号