diff --git a/build.gradle b/build.gradle
index 761f8b5..4cbb0ed 100644
--- a/build.gradle
+++ b/build.gradle
@@ -56,7 +56,7 @@
     compile group: 'org.apache.poi', name: 'poi-ooxml', version: '3.10.1'
     compile group: 'org.apache.poi', name: 'poi-ooxml-schemas', version: '3.10.1'
     compile group: 'org.apache.poi', name: 'poi-scratchpad', version: '3.10.1'
-    compile 'com.supwisdom:payapi-sdk:1.0.9-1-gb3cd8c8'
+    compile 'com.supwisdom:payapi-sdk:1.0.11'
     compile group: 'org.springframework.security.oauth', name: 'spring-security-oauth2', version: '2.3.4.RELEASE'
 
 
diff --git a/src/main/java/com/supwisdom/dlpay/bus/bean/BusApiResp.java b/src/main/java/com/supwisdom/dlpay/bus/bean/BusApiResp.java
new file mode 100644
index 0000000..4956990
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/bean/BusApiResp.java
@@ -0,0 +1,27 @@
+package com.supwisdom.dlpay.bus.bean;
+
+public class BusApiResp {
+  private String retcode;
+  private String retmsg;
+
+  public String getRetcode() {
+    return retcode;
+  }
+
+  public void setRetcode(String retcode) {
+    this.retcode = retcode;
+  }
+
+  public String getRetmsg() {
+    return retmsg;
+  }
+
+  public void setRetmsg(String retmsg) {
+    this.retmsg = retmsg;
+  }
+
+  @Override
+  public String toString() {
+    return "retcode=[" + retcode + "],retmsg=[" + retmsg + "]";
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/bean/BusBlacklistReq.java b/src/main/java/com/supwisdom/dlpay/bus/bean/BusBlacklistReq.java
new file mode 100644
index 0000000..0d0d544
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/bean/BusBlacklistReq.java
@@ -0,0 +1,31 @@
+package com.supwisdom.dlpay.bus.bean;
+
+public class BusBlacklistReq extends BusDevBaseReq {
+  private String devphyid;
+  private String cardverno;
+  private Integer maxcount;
+
+  public String getDevphyid() {
+    return devphyid;
+  }
+
+  public void setDevphyid(String devphyid) {
+    this.devphyid = devphyid;
+  }
+
+  public String getCardverno() {
+    return cardverno;
+  }
+
+  public void setCardverno(String cardverno) {
+    this.cardverno = cardverno;
+  }
+
+  public Integer getMaxcount() {
+    return maxcount;
+  }
+
+  public void setMaxcount(Integer maxcount) {
+    this.maxcount = maxcount;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/bean/BusBlacklistResp.java b/src/main/java/com/supwisdom/dlpay/bus/bean/BusBlacklistResp.java
new file mode 100644
index 0000000..096bea2
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/bean/BusBlacklistResp.java
@@ -0,0 +1,33 @@
+package com.supwisdom.dlpay.bus.bean;
+
+import java.util.List;
+
+public class BusBlacklistResp extends BusApiResp {
+  private String cardverno;
+  private int count;
+  private List<BusCardverBean> blkdata;
+
+  public String getCardverno() {
+    return cardverno;
+  }
+
+  public void setCardverno(String cardverno) {
+    this.cardverno = cardverno;
+  }
+
+  public int getCount() {
+    return count;
+  }
+
+  public void setCount(int count) {
+    this.count = count;
+  }
+
+  public List<BusCardverBean> getBlkdata() {
+    return blkdata;
+  }
+
+  public void setBlkdata(List<BusCardverBean> blkdata) {
+    this.blkdata = blkdata;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/bean/BusCardverBean.java b/src/main/java/com/supwisdom/dlpay/bus/bean/BusCardverBean.java
new file mode 100644
index 0000000..4289bfa
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/bean/BusCardverBean.java
@@ -0,0 +1,22 @@
+package com.supwisdom.dlpay.bus.bean;
+
+public class BusCardverBean {
+  private String cardno;
+  private String flag;  // 1/0
+
+  public String getCardno() {
+    return cardno;
+  }
+
+  public void setCardno(String cardno) {
+    this.cardno = cardno;
+  }
+
+  public String getFlag() {
+    return flag;
+  }
+
+  public void setFlag(String flag) {
+    this.flag = flag;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/bean/BusDevBaseReq.java b/src/main/java/com/supwisdom/dlpay/bus/bean/BusDevBaseReq.java
new file mode 100644
index 0000000..88cf2f7
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/bean/BusDevBaseReq.java
@@ -0,0 +1,52 @@
+package com.supwisdom.dlpay.bus.bean;
+
+/**
+ * 参数需签名时备用
+ * */
+public class BusDevBaseReq {
+  private String app_id;
+  private String term_id;
+  private String timestamp;
+  private String sign_method;
+  private String sign;
+
+  public String getApp_id() {
+    return app_id;
+  }
+
+  public void setApp_id(String app_id) {
+    this.app_id = app_id;
+  }
+
+  public String getTerm_id() {
+    return term_id;
+  }
+
+  public void setTerm_id(String term_id) {
+    this.term_id = term_id;
+  }
+
+  public String getTimestamp() {
+    return timestamp;
+  }
+
+  public void setTimestamp(String timestamp) {
+    this.timestamp = timestamp;
+  }
+
+  public String getSign_method() {
+    return sign_method;
+  }
+
+  public void setSign_method(String sign_method) {
+    this.sign_method = sign_method;
+  }
+
+  public String getSign() {
+    return sign;
+  }
+
+  public void setSign(String sign) {
+    this.sign = sign;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/bean/BusDevLoginReq.java b/src/main/java/com/supwisdom/dlpay/bus/bean/BusDevLoginReq.java
new file mode 100644
index 0000000..7399af0
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/bean/BusDevLoginReq.java
@@ -0,0 +1,49 @@
+package com.supwisdom.dlpay.bus.bean;
+
+public class BusDevLoginReq extends BusDevBaseReq {
+  private String devphyid;
+  private String termdate;
+  private String termtime;
+  private Integer paragroupid;
+  private String cardverno;
+
+  public String getDevphyid() {
+    return devphyid;
+  }
+
+  public void setDevphyid(String devphyid) {
+    this.devphyid = devphyid;
+  }
+
+  public String getTermdate() {
+    return termdate;
+  }
+
+  public void setTermdate(String termdate) {
+    this.termdate = termdate;
+  }
+
+  public String getTermtime() {
+    return termtime;
+  }
+
+  public void setTermtime(String termtime) {
+    this.termtime = termtime;
+  }
+
+  public Integer getParagroupid() {
+    return paragroupid;
+  }
+
+  public void setParagroupid(Integer paragroupid) {
+    this.paragroupid = paragroupid;
+  }
+
+  public String getCardverno() {
+    return cardverno;
+  }
+
+  public void setCardverno(String cardverno) {
+    this.cardverno = cardverno;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/bean/BusDevLoginResp.java b/src/main/java/com/supwisdom/dlpay/bus/bean/BusDevLoginResp.java
new file mode 100644
index 0000000..f6b1a61
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/bean/BusDevLoginResp.java
@@ -0,0 +1,58 @@
+package com.supwisdom.dlpay.bus.bean;
+
+public class BusDevLoginResp extends BusApiResp {
+  private Integer paragroupid;
+  private Integer paraverno;
+  private Integer termseqno;
+  private String cardverno;
+  private String systime;
+  private String shopname;
+
+  public Integer getParagroupid() {
+    return paragroupid;
+  }
+
+  public void setParagroupid(Integer paragroupid) {
+    this.paragroupid = paragroupid;
+  }
+
+  public Integer getParaverno() {
+    return paraverno;
+  }
+
+  public void setParaverno(Integer paraverno) {
+    this.paraverno = paraverno;
+  }
+
+  public Integer getTermseqno() {
+    return termseqno;
+  }
+
+  public void setTermseqno(Integer termseqno) {
+    this.termseqno = termseqno;
+  }
+
+  public String getCardverno() {
+    return cardverno;
+  }
+
+  public void setCardverno(String cardverno) {
+    this.cardverno = cardverno;
+  }
+
+  public String getSystime() {
+    return systime;
+  }
+
+  public void setSystime(String systime) {
+    this.systime = systime;
+  }
+
+  public String getShopname() {
+    return shopname;
+  }
+
+  public void setShopname(String shopname) {
+    this.shopname = shopname;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/bean/BusDtlUploadResp.java b/src/main/java/com/supwisdom/dlpay/bus/bean/BusDtlUploadResp.java
new file mode 100644
index 0000000..1fdbb15
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/bean/BusDtlUploadResp.java
@@ -0,0 +1,13 @@
+package com.supwisdom.dlpay.bus.bean;
+
+public class BusDtlUploadResp extends BusApiResp {
+  private Integer termseqno;
+
+  public Integer getTermseqno() {
+    return termseqno;
+  }
+
+  public void setTermseqno(Integer termseqno) {
+    this.termseqno = termseqno;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/bean/BusHeartBeatReq.java b/src/main/java/com/supwisdom/dlpay/bus/bean/BusHeartBeatReq.java
new file mode 100644
index 0000000..7b50f05
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/bean/BusHeartBeatReq.java
@@ -0,0 +1,22 @@
+package com.supwisdom.dlpay.bus.bean;
+
+public class BusHeartBeatReq extends BusDevBaseReq {
+  private String devphyid;
+  private String cardverno;
+
+  public String getDevphyid() {
+    return devphyid;
+  }
+
+  public void setDevphyid(String devphyid) {
+    this.devphyid = devphyid;
+  }
+
+  public String getCardverno() {
+    return cardverno;
+  }
+
+  public void setCardverno(String cardverno) {
+    this.cardverno = cardverno;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/bean/BusHeartBeatResp.java b/src/main/java/com/supwisdom/dlpay/bus/bean/BusHeartBeatResp.java
new file mode 100644
index 0000000..64a66ae
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/bean/BusHeartBeatResp.java
@@ -0,0 +1,40 @@
+package com.supwisdom.dlpay.bus.bean;
+
+public class BusHeartBeatResp extends BusApiResp {
+  private Integer paragroupid;
+  private Integer paraverno;
+  private String cardverno;
+  private String systime;
+
+  public Integer getParagroupid() {
+    return paragroupid;
+  }
+
+  public void setParagroupid(Integer paragroupid) {
+    this.paragroupid = paragroupid;
+  }
+
+  public Integer getParaverno() {
+    return paraverno;
+  }
+
+  public void setParaverno(Integer paraverno) {
+    this.paraverno = paraverno;
+  }
+
+  public String getCardverno() {
+    return cardverno;
+  }
+
+  public void setCardverno(String cardverno) {
+    this.cardverno = cardverno;
+  }
+
+  public String getSystime() {
+    return systime;
+  }
+
+  public void setSystime(String systime) {
+    this.systime = systime;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/bean/BusSysparaReq.java b/src/main/java/com/supwisdom/dlpay/bus/bean/BusSysparaReq.java
new file mode 100644
index 0000000..718c1dd
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/bean/BusSysparaReq.java
@@ -0,0 +1,40 @@
+package com.supwisdom.dlpay.bus.bean;
+
+public class BusSysparaReq extends BusDevBaseReq{
+  private String devphyid;
+  private String termdate;
+  private String termtime;
+  private Integer paragroupid;
+
+  public String getDevphyid() {
+    return devphyid;
+  }
+
+  public void setDevphyid(String devphyid) {
+    this.devphyid = devphyid;
+  }
+
+  public String getTermdate() {
+    return termdate;
+  }
+
+  public void setTermdate(String termdate) {
+    this.termdate = termdate;
+  }
+
+  public String getTermtime() {
+    return termtime;
+  }
+
+  public void setTermtime(String termtime) {
+    this.termtime = termtime;
+  }
+
+  public Integer getParagroupid() {
+    return paragroupid;
+  }
+
+  public void setParagroupid(Integer paragroupid) {
+    this.paragroupid = paragroupid;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/bean/BusSysparaResp.java b/src/main/java/com/supwisdom/dlpay/bus/bean/BusSysparaResp.java
new file mode 100644
index 0000000..151de10
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/bean/BusSysparaResp.java
@@ -0,0 +1,35 @@
+package com.supwisdom.dlpay.bus.bean;
+
+import com.supwisdom.dlpay.api.bean.DevparaBean;
+
+import java.util.ArrayList;
+
+public class BusSysparaResp extends BusApiResp {
+  private Integer paragroupid;
+  private Integer paraverno;
+  private ArrayList<DevparaBean> syspara;
+
+  public Integer getParagroupid() {
+    return paragroupid;
+  }
+
+  public void setParagroupid(Integer paragroupid) {
+    this.paragroupid = paragroupid;
+  }
+
+  public Integer getParaverno() {
+    return paraverno;
+  }
+
+  public void setParaverno(Integer paraverno) {
+    this.paraverno = paraverno;
+  }
+
+  public ArrayList<DevparaBean> getSyspara() {
+    return syspara;
+  }
+
+  public void setSyspara(ArrayList<DevparaBean> syspara) {
+    this.syspara = syspara;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/bean/BusdtlUploadReq.java b/src/main/java/com/supwisdom/dlpay/bus/bean/BusdtlUploadReq.java
new file mode 100644
index 0000000..41b3ee3
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/bean/BusdtlUploadReq.java
@@ -0,0 +1,94 @@
+package com.supwisdom.dlpay.bus.bean;
+
+public class BusdtlUploadReq extends BusDevBaseReq {
+  private String devphyid;
+  private Integer termseqno;
+  private String transdate;
+  private String transtime;
+  private Integer amount;
+  private String cardno;
+  private String cardphyid;
+  private Integer extraamt;
+  private String managefeetype;
+  private String status; //success/fail
+
+  public String getDevphyid() {
+    return devphyid;
+  }
+
+  public void setDevphyid(String devphyid) {
+    this.devphyid = devphyid;
+  }
+
+  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 Integer getAmount() {
+    return amount;
+  }
+
+  public void setAmount(Integer amount) {
+    this.amount = amount;
+  }
+
+  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 Integer getExtraamt() {
+    return extraamt;
+  }
+
+  public void setExtraamt(Integer extraamt) {
+    this.extraamt = extraamt;
+  }
+
+  public String getManagefeetype() {
+    return managefeetype;
+  }
+
+  public void setManagefeetype(String managefeetype) {
+    this.managefeetype = managefeetype;
+  }
+
+  public String getStatus() {
+    return status;
+  }
+
+  public void setStatus(String status) {
+    this.status = status;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/controller/BusConsumeController.java b/src/main/java/com/supwisdom/dlpay/bus/controller/BusConsumeController.java
new file mode 100644
index 0000000..f178ce2
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/controller/BusConsumeController.java
@@ -0,0 +1,46 @@
+package com.supwisdom.dlpay.bus.controller;
+
+import com.supwisdom.dlpay.bus.bean.*;
+import com.supwisdom.dlpay.bus.service.BusConsumeService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/api/bus")
+public class BusConsumeController {
+  @Autowired
+  private BusConsumeService busConsumeService;
+
+  @PostMapping("/login")
+  public BusDevLoginResp busLogin(@ModelAttribute BusDevLoginReq req) {
+    return new BusDevLoginResp();
+  }
+
+  @PostMapping("/heartbeat")
+  public BusHeartBeatResp heartBeat(@ModelAttribute BusHeartBeatReq req) {
+    return new BusHeartBeatResp();
+  }
+
+  @PostMapping("/updatesyspara")
+  public BusSysparaResp updateSyspara(@ModelAttribute BusSysparaReq req){
+    return new BusSysparaResp();
+  }
+
+  @PostMapping("/blacklistbitmap")
+  public String downloadBlacklistbitmap(){
+    return "";
+  }
+
+  @PostMapping("/downloadblacklist")
+  public BusBlacklistResp downloadBlacklist(@ModelAttribute BusBlacklistReq req){
+    return new BusBlacklistResp();
+  }
+
+  @PostMapping("/busdtlupload")
+  public BusDtlUploadResp uploadBusdtl(@ModelAttribute BusdtlUploadReq req){
+    return new BusDtlUploadResp();
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/dao/CitizenCardDao.java b/src/main/java/com/supwisdom/dlpay/bus/dao/CitizenCardDao.java
new file mode 100644
index 0000000..500d35b
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/dao/CitizenCardDao.java
@@ -0,0 +1,10 @@
+package com.supwisdom.dlpay.bus.dao;
+
+import com.supwisdom.dlpay.bus.domain.TCitizenCard;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface CitizenCardDao extends JpaRepository<TCitizenCard, String> {
+  TCitizenCard findByCardno(String cardno);
+}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/dao/CitizenCardverDao.java b/src/main/java/com/supwisdom/dlpay/bus/dao/CitizenCardverDao.java
new file mode 100644
index 0000000..bd65241
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/dao/CitizenCardverDao.java
@@ -0,0 +1,14 @@
+package com.supwisdom.dlpay.bus.dao;
+
+import com.supwisdom.dlpay.bus.domain.TCitizenCardver;
+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 CitizenCardverDao extends JpaRepository<TCitizenCardver, String> {
+  @Modifying
+  @Query(value = "update tb_citizen_cardver set status='closed' where status='normal' and cardvertype=?1 and cardno=?2 and cardverno<?3 ", nativeQuery = true)
+  void doClosedHistoryRecords(String cardvertype, String cardno, String cardverno);
+}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/domain/TCitizenCard.java b/src/main/java/com/supwisdom/dlpay/bus/domain/TCitizenCard.java
new file mode 100644
index 0000000..ede535e
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/domain/TCitizenCard.java
@@ -0,0 +1,204 @@
+package com.supwisdom.dlpay.bus.domain;
+
+import com.supwisdom.dlpay.api.bean.CitizenCardInfo;
+
+import javax.persistence.*;
+import java.sql.Timestamp;
+
+@Entity
+@Table(name = "TB_CITIZEN_CARD",
+    indexes = {@Index(name = "IDX_CITIZEN_CARD_BANKCARDNO", columnList = "BANKCARDNO")})
+public class TCitizenCard {
+  @Id
+  @Column(name = "CARDNO", nullable = false, length = 20)
+  private String cardno;
+
+  @Column(name = "CARDPHYID", length = 20)
+  private String cardphyid;
+
+  @Column(name = "EXPIREDATE", length = 20)
+  private String expiredate;
+
+  @Column(name = "STATUS", nullable = false, length = 20)
+  private String status;
+
+  @Column(name = "TRANS_STATUS", nullable = false, length = 20)
+  private String transStatus;
+
+  @Column(name = "PAYERID", length = 31)
+  private String payerid;
+
+  @Column(name = "USERNAME", length = 200)
+  private String username;
+
+  @Column(name = "SEX", length = 10)
+  private String sex;
+
+  @Column(name = "IDTYPE", length = 60)
+  private String idtype;
+
+  @Column(name = "IDNO", length = 30)
+  private String idno;
+
+  @Column(name = "PHONE", length = 30)
+  private String phone;
+
+  @Column(name = "BANKCARDNO", length = 32)
+  private String bankcardno;
+
+  @Column(name = "CARDVERNO", length = 32)
+  private String cardverno;
+
+  @Version
+  @Column(name = "LASTSAVED")
+  private Timestamp lastsaved;
+
+  public TCitizenCard() {
+  }
+
+  public TCitizenCard(String cardno, String cardphyid, String expiredate, String status, String transStatus, String payerid, String username, String sex, String idtype, String idno, String phone, String bankcardno, String cardverno, Timestamp lastsaved) {
+    this.cardno = cardno;
+    this.cardphyid = cardphyid;
+    this.expiredate = expiredate;
+    this.status = status;
+    this.transStatus = transStatus;
+    this.payerid = payerid;
+    this.username = username;
+    this.sex = sex;
+    this.idtype = idtype;
+    this.idno = idno;
+    this.phone = phone;
+    this.bankcardno = bankcardno;
+    this.cardverno = cardverno;
+    this.lastsaved = lastsaved;
+  }
+
+  public TCitizenCard(CitizenCardInfo cardInfo, String cardverno, Timestamp lastsaved) {
+    this.cardno = cardInfo.getCardno();
+    this.cardphyid = cardInfo.getCardphyid();
+    this.expiredate = cardInfo.getExpiredate();
+    this.status = cardInfo.getCardstatus();
+    this.transStatus = cardInfo.getTransstatus();
+    this.payerid = cardInfo.getUserid();
+    this.username = cardInfo.getUsername();
+    this.sex = cardInfo.getSex();
+    this.idtype = cardInfo.getIdtype();
+    this.idno = cardInfo.getIdno();
+    this.phone = cardInfo.getPhone();
+    this.bankcardno = cardInfo.getBankcardno();
+    this.cardverno = cardverno;
+    this.lastsaved = lastsaved;
+  }
+
+  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 getExpiredate() {
+    return expiredate;
+  }
+
+  public void setExpiredate(String expiredate) {
+    this.expiredate = expiredate;
+  }
+
+  public String getStatus() {
+    return status;
+  }
+
+  public void setStatus(String status) {
+    this.status = status;
+  }
+
+  public String getTransStatus() {
+    return transStatus;
+  }
+
+  public void setTransStatus(String transStatus) {
+    this.transStatus = transStatus;
+  }
+
+  public String getPayerid() {
+    return payerid;
+  }
+
+  public void setPayerid(String payerid) {
+    this.payerid = payerid;
+  }
+
+  public String getUsername() {
+    return username;
+  }
+
+  public void setUsername(String username) {
+    this.username = username;
+  }
+
+  public String getSex() {
+    return sex;
+  }
+
+  public void setSex(String sex) {
+    this.sex = sex;
+  }
+
+  public String getIdtype() {
+    return idtype;
+  }
+
+  public void setIdtype(String idtype) {
+    this.idtype = idtype;
+  }
+
+  public String getIdno() {
+    return idno;
+  }
+
+  public void setIdno(String idno) {
+    this.idno = idno;
+  }
+
+  public String getPhone() {
+    return phone;
+  }
+
+  public void setPhone(String phone) {
+    this.phone = phone;
+  }
+
+  public String getBankcardno() {
+    return bankcardno;
+  }
+
+  public void setBankcardno(String bankcardno) {
+    this.bankcardno = bankcardno;
+  }
+
+  public String getCardverno() {
+    return cardverno;
+  }
+
+  public void setCardverno(String cardverno) {
+    this.cardverno = cardverno;
+  }
+
+  public Timestamp getLastsaved() {
+    return lastsaved;
+  }
+
+  public void setLastsaved(Timestamp lastsaved) {
+    this.lastsaved = lastsaved;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/domain/TCitizenCardver.java b/src/main/java/com/supwisdom/dlpay/bus/domain/TCitizenCardver.java
new file mode 100644
index 0000000..6358aa4
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/domain/TCitizenCardver.java
@@ -0,0 +1,108 @@
+package com.supwisdom.dlpay.bus.domain;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "TB_CITIZEN_CARDVER",
+    indexes = {@Index(name = "idx_citizen_cardver_cardno", columnList = "cardno")})
+public class TCitizenCardver {
+  @Id
+  @Column(name = "CARDVERNO", nullable = false, length = 20)
+  private String cardverno;
+
+  @Column(name = "ACCDATE", length = 8)
+  private String accdate;
+
+  @Column(name = "CARDNO", nullable = false, length = 20)
+  private String cardno;
+
+  @Column(name = "CARDPHYID", length = 20)
+  private String cardphyid;
+
+  @Column(name = "PAYERID", length = 32)
+  private String payerid;
+
+  @Column(name = "CARDVERTYPE", length = 20)
+  private String cardvertype;
+
+  @Column(name = "ADDDELFLAG", nullable = false, length = 1)
+  private Integer adddelflag; //1-需要下发，0-不需要下发
+
+  @Column(name = "STATUS", nullable = false, length = 20)
+  private String status;
+
+  @Column(name = "LASTSAVED", length = 14)
+  private String lastsaved;
+
+  public String getCardverno() {
+    return cardverno;
+  }
+
+  public void setCardverno(String cardverno) {
+    this.cardverno = cardverno;
+  }
+
+  public String getAccdate() {
+    return accdate;
+  }
+
+  public void setAccdate(String accdate) {
+    this.accdate = accdate;
+  }
+
+  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 getPayerid() {
+    return payerid;
+  }
+
+  public void setPayerid(String payerid) {
+    this.payerid = payerid;
+  }
+
+  public String getCardvertype() {
+    return cardvertype;
+  }
+
+  public void setCardvertype(String cardvertype) {
+    this.cardvertype = cardvertype;
+  }
+
+  public Integer getAdddelflag() {
+    return adddelflag;
+  }
+
+  public void setAdddelflag(Integer adddelflag) {
+    this.adddelflag = adddelflag;
+  }
+
+  public String getStatus() {
+    return status;
+  }
+
+  public void setStatus(String status) {
+    this.status = status;
+  }
+
+  public String getLastsaved() {
+    return lastsaved;
+  }
+
+  public void setLastsaved(String lastsaved) {
+    this.lastsaved = lastsaved;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/service/BusConsumeService.java b/src/main/java/com/supwisdom/dlpay/bus/service/BusConsumeService.java
new file mode 100644
index 0000000..289ba99
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/service/BusConsumeService.java
@@ -0,0 +1,4 @@
+package com.supwisdom.dlpay.bus.service;
+
+public interface BusConsumeService {
+}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/service/CitizenCardService.java b/src/main/java/com/supwisdom/dlpay/bus/service/CitizenCardService.java
new file mode 100644
index 0000000..af0063e
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/service/CitizenCardService.java
@@ -0,0 +1,20 @@
+package com.supwisdom.dlpay.bus.service;
+
+import com.supwisdom.dlpay.api.bean.CitizenCardInfo;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+public interface CitizenCardService {
+  @Transactional(rollbackFor = Exception.class)
+  String getPayapiCardSynctime();
+
+  @Transactional(rollbackFor = Exception.class, readOnly = true)
+  String getPayapiSignkey();
+
+  @Transactional(rollbackFor = Exception.class)
+  boolean doFirstSyncCard(List<CitizenCardInfo> cards)throws Exception;
+
+  @Transactional(rollbackFor = Exception.class)
+  void doSyncSingleCitizencard(CitizenCardInfo cardInfo) throws Exception;
+}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/service/impl/BusConsumeServiceImpl.java b/src/main/java/com/supwisdom/dlpay/bus/service/impl/BusConsumeServiceImpl.java
new file mode 100644
index 0000000..a3541d2
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/service/impl/BusConsumeServiceImpl.java
@@ -0,0 +1,9 @@
+package com.supwisdom.dlpay.bus.service.impl;
+
+import com.supwisdom.dlpay.bus.service.BusConsumeService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class BusConsumeServiceImpl implements BusConsumeService {
+
+}
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
new file mode 100644
index 0000000..dc8d0b8
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/service/impl/CitizenCardServiceImpl.java
@@ -0,0 +1,288 @@
+package com.supwisdom.dlpay.bus.service.impl;
+
+import com.supwisdom.dlpay.api.bean.CitizenCardInfo;
+import com.supwisdom.dlpay.bus.dao.CitizenCardDao;
+import com.supwisdom.dlpay.bus.dao.CitizenCardverDao;
+import com.supwisdom.dlpay.bus.domain.TCitizenCard;
+import com.supwisdom.dlpay.bus.domain.TCitizenCardver;
+import com.supwisdom.dlpay.bus.service.CitizenCardService;
+import com.supwisdom.dlpay.bus.util.BusConstant;
+import com.supwisdom.dlpay.bus.util.BusException;
+import com.supwisdom.dlpay.framework.dao.SysparaDao;
+import com.supwisdom.dlpay.framework.data.SystemDateTime;
+import com.supwisdom.dlpay.framework.domain.TSyspara;
+import com.supwisdom.dlpay.framework.service.SystemUtilService;
+import com.supwisdom.dlpay.framework.util.DateUtil;
+import com.supwisdom.dlpay.framework.util.StringUtil;
+import com.supwisdom.dlpay.framework.util.SysparaUtil;
+import org.apache.commons.lang.math.NumberUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+public class CitizenCardServiceImpl implements CitizenCardService {
+  @Autowired
+  private SysparaDao sysparaDao;
+  @Autowired
+  private SystemUtilService systemUtilService;
+  @Autowired
+  private CitizenCardDao citizenCardDao;
+  @Autowired
+  private CitizenCardverDao citizenCardverDao;
+
+  @Override
+  public String getPayapiCardSynctime() {
+    TSyspara syspara = sysparaDao.findByParaidWithLockNowait(BusConstant.SYSPARAID_CARDSYNCTIME);
+    if (null == syspara) {
+      syspara = new TSyspara();
+      syspara.setParaid(BusConstant.SYSPARAID_CARDSYNCTIME);
+      syspara.setParaval(BusConstant.PAYAPI_CARDSYNC_DEFAULTTIME);
+      syspara.setParaname("跟核心平台同步卡信息的最后时间");
+      syspara.setValueType(SysparaUtil.SYSPARA_VALUETYPE_STRING);
+      syspara.setEditflag(0);
+      syspara.setDisplayflag("y");
+      syspara.setLastsaved(systemUtilService.getSysdatetime().getHostdatetime());
+      sysparaDao.save(syspara);
+    }
+    return syspara.getParaval();
+  }
+
+  @Override
+  public String getPayapiSignkey() {
+    return BusConstant.PAYAPI_CONNECT_SIGNKEY;
+  }
+
+  private String createCardverno(String hostdate, int index) {
+    return String.format("%s%08d", hostdate.substring(2), index); //191225 00000001
+  }
+
+  @Override
+  public boolean doFirstSyncCard(List<CitizenCardInfo> cards) throws Exception {
+    TSyspara synctime = sysparaDao.findByParaidWithLockNowait(BusConstant.SYSPARAID_CARDSYNCTIME);
+    TSyspara maxcardver = sysparaDao.findByParaidWithLockNowait(BusConstant.SYSPARAID_MAXCARDVERNO);
+    TSyspara maxBlackCardver = sysparaDao.findByParaidWithLockNowait(BusConstant.SYSPARAID_MAXBLACKCARDVERNO);
+    if (null == maxcardver || null == maxBlackCardver) {
+      throw new BusException("卡版本号全局参数为空");
+    }
+    SystemDateTime dt = systemUtilService.getSysdatetime();
+    int count = 0;
+    String cardverno = BusConstant.CARDVERNO_DEFAULT;
+    String blackverno = BusConstant.CARDVERNO_DEFAULT;
+    String cardsynctime = BusConstant.PAYAPI_CARDSYNC_DEFAULTTIME;
+    List<TCitizenCard> citizenCards = new ArrayList<>(0);
+    List<TCitizenCardver> citizenCardvers = new ArrayList<>(0);
+    for (CitizenCardInfo bean : cards) {
+      cardsynctime = bean.getUpdtime(); //updtime 升序排最后一条
+      cardverno = createCardverno(dt.getHostdate(), ++count);
+
+      TCitizenCard card = new TCitizenCard(bean, cardverno, systemUtilService.getSysdatetime().getSysdate());
+      citizenCards.add(card);
+
+      TCitizenCardver cardver = new TCitizenCardver();
+      cardver.setCardverno(card.getCardverno());
+      cardver.setAccdate(dt.getHostdate());
+      cardver.setCardno(card.getCardno());
+      cardver.setCardphyid(card.getCardphyid());
+      cardver.setPayerid(card.getPayerid());
+      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); //下发黑名单
+        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); //下发黑名单
+        blackverno = card.getCardverno();
+      }
+      cardver.setStatus(BusConstant.STATUS_CARDVER_NORMAL);
+      cardver.setLastsaved(systemUtilService.getSysdatetime().getHostdatetime());
+      citizenCardvers.add(cardver);
+    }
+
+    citizenCardDao.saveAll(citizenCards); //批量插入
+    citizenCardverDao.saveAll(citizenCardvers); //批量插入
+
+    maxcardver.setParaval(cardverno);
+    sysparaDao.save(maxcardver); //当前系统版本号
+    maxBlackCardver.setParaval(blackverno);
+    sysparaDao.save(maxBlackCardver); //当前黑名单版本号
+    synctime.setParaval(cardsynctime);
+    sysparaDao.save(synctime); //当前同步时间
+    return true;
+  }
+
+  private String doSwithCardverno(String cardverno) throws Exception {
+    String hostdate = systemUtilService.getSysdatetime().getHostdate();
+    if (StringUtil.isEmpty(cardverno) || BusConstant.CARDVERNO_DEFAULT.equals(cardverno)) {
+      return createCardverno(hostdate, 1);
+    }
+
+    if (cardverno.trim().length() != BusConstant.CARDVERNO_LENGTH) {
+      throw new BusException("******************* 卡版本号[" + cardverno + "]非14位数！！！******************* ");
+    }
+    String verdate = "20" + cardverno.substring(0, 6);
+    if (!DateUtil.checkDatetimeValid(verdate, "yyyyMMdd")) {
+      throw new BusException("******************* 卡版本号[" + cardverno + "]非法，前六位非日期格式 ******************* ");
+    } else if (DateUtil.compareDatetime(verdate, hostdate, "yyyyMMdd") > 0) {
+      throw new BusException("******************* 卡版本号[" + cardverno + "]非法，前六位日期比当前日期大 ******************* ");
+    } else if (!NumberUtils.isDigits(cardverno.substring(6))) {
+      throw new BusException("******************* 卡版本号[" + cardverno + "]非法，后八位非数字！！！ ******************* ");
+    }
+    if (hostdate.equals(verdate)) {
+      int suffix = Integer.valueOf(cardverno.substring(6));
+      return createCardverno(hostdate, suffix + 1);
+    } else {
+      return createCardverno(hostdate, 1); //跨天从1开始
+    }
+  }
+
+
+  @Override
+  public void doSyncSingleCitizencard(CitizenCardInfo cardInfo) throws Exception {
+    TSyspara synctime = sysparaDao.findByParaidWithLockNowait(BusConstant.SYSPARAID_CARDSYNCTIME); //非等待锁
+    TSyspara maxcardver = sysparaDao.findByParaidWithLockNowait(BusConstant.SYSPARAID_MAXCARDVERNO); //非等待锁
+    String cardverno = null;
+
+    SystemDateTime dt = systemUtilService.getSysdatetime();
+    TCitizenCard card = citizenCardDao.findByCardno(cardInfo.getCardno());
+    if (null != card) {
+      cardverno = doSwithCardverno(maxcardver.getParaval());
+      card = new TCitizenCard(cardInfo, cardverno, dt.getSysdate());
+      citizenCardDao.save(card);
+
+      TCitizenCardver cardver = new TCitizenCardver();
+      cardver.setCardverno(card.getCardverno());
+      cardver.setAccdate(dt.getHostdate());
+      cardver.setCardno(card.getCardno());
+      cardver.setCardphyid(card.getCardphyid());
+      cardver.setPayerid(card.getPayerid());
+      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); //下发黑名单
+      } 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.setStatus(BusConstant.STATUS_CARDVER_NORMAL);
+      cardver.setLastsaved(systemUtilService.getSysdatetime().getHostdatetime());
+      citizenCardverDao.save(cardver);
+    } else {
+      boolean updFlag = false;
+      if (null != cardInfo.getCardphyid() && !cardInfo.getCardphyid().equals(card.getCardphyid())) {
+        card.setCardphyid(cardInfo.getCardphyid());
+        updFlag = true;
+      }
+      if (null != cardInfo.getExpiredate() && !cardInfo.getExpiredate().equals(card.getExpiredate())) {
+        card.setExpiredate(cardInfo.getExpiredate());
+        updFlag = true;
+      }
+      if (null != cardInfo.getUserid() && !cardInfo.getUserid().equals(card.getPayerid())) {
+        card.setPayerid(cardInfo.getUserid());
+        updFlag = true;
+      }
+      if (null != cardInfo.getUsername() && !cardInfo.getUsername().equals(card.getUsername())) {
+        card.setUsername(cardInfo.getUsername());
+        updFlag = true;
+      }
+      if (null != cardInfo.getSex() && !cardInfo.getSex().equals(card.getSex())) {
+        card.setSex(cardInfo.getSex());
+        updFlag = true;
+      }
+      if (null != cardInfo.getIdtype() && !cardInfo.getIdtype().equals(card.getIdtype())) {
+        card.setIdtype(cardInfo.getIdtype());
+        updFlag = true;
+      }
+      if (null != cardInfo.getIdno() && !cardInfo.getIdno().equals(card.getIdno())) {
+        card.setIdno(cardInfo.getIdno());
+        updFlag = true;
+      }
+      if (null != cardInfo.getPhone() && !cardInfo.getPhone().equals(card.getPhone())) {
+        card.setPhone(cardInfo.getPhone());
+        updFlag = true;
+      }
+      if (null != card.getBankcardno() && !card.getBankcardno().equals(card.getBankcardno())) {
+        card.setBankcardno(cardInfo.getBankcardno());
+        updFlag = true;
+      }
+
+      if (!card.getStatus().equals(cardInfo.getCardstatus()) || !card.getTransStatus().equals(cardInfo.getTransstatus())) {
+        //卡状态有变化
+        updFlag = true;
+        card.setStatus(cardInfo.getCardstatus());
+        card.setTransStatus(cardInfo.getTransstatus());
+
+        TCitizenCardver cardver = null;
+        if (BusConstant.STATUS_CARDVER_CLOSED.equals(cardInfo.getCardstatus()) || BusConstant.STATUS_CARDVER_CLOSED.equals(cardInfo.getTransstatus())) {
+          if (!BusConstant.STATUS_CARDVER_CLOSED.equals(card.getStatus()) && !BusConstant.STATUS_CARDVER_CLOSED.equals(card.getTransStatus())) {
+            //卡状态改为注销
+            cardverno = doSwithCardverno(maxcardver.getParaval());
+            card.setCardverno(cardverno);
+            cardver = new TCitizenCardver();
+            cardver.setCardverno(cardverno);
+            cardver.setCardvertype(BusConstant.CARDVERTYPE_CLOSED); //注销
+            cardver.setAdddelflag(BusConstant.ADDDELFLAG_DOWNLOAD); //下发黑名单
+            citizenCardverDao.doClosedHistoryRecords(BusConstant.CARDVERTYPE_REGISTER, card.getCardno(), cardverno); //注册记录置为无效
+          }
+        } else if (BusConstant.STATUS_CARDVER_NORMAL.equals(card.getStatus()) && BusConstant.STATUS_CARDVER_NORMAL.equals(card.getTransStatus())) {
+          if (!BusConstant.STATUS_CARDVER_NORMAL.equals(card.getStatus()) || !BusConstant.STATUS_CARDVER_NORMAL.equals(card.getStatus())) {
+            //卡状态由异常变正常
+            cardverno = doSwithCardverno(maxcardver.getParaval());
+            card.setCardverno(cardverno);
+            cardver = new TCitizenCardver();
+            cardver.setCardverno(cardverno);
+            cardver.setCardvertype(BusConstant.CARDVERTYPE_UNFREEZE); //变为正常
+            cardver.setAdddelflag(BusConstant.ADDDELFLAG_DOWNLOAD); //下发黑名单
+            citizenCardverDao.doClosedHistoryRecords(BusConstant.CARDVERTYPE_FREEZE, card.getCardno(), cardverno); //冻结记录置为无效
+            citizenCardverDao.doClosedHistoryRecords(BusConstant.CARDVERTYPE_CLOSED, card.getCardno(), cardverno); //注销记录置为无效
+          }
+        } else {
+          if (BusConstant.STATUS_CARDVER_NORMAL.equals(card.getStatus()) && BusConstant.STATUS_CARDVER_NORMAL.equals(card.getStatus())) {
+            //卡状态由正常变异常
+            cardverno = doSwithCardverno(maxcardver.getParaval());
+            card.setCardverno(cardverno);
+            cardver = new TCitizenCardver();
+            cardver.setCardverno(cardverno);
+            cardver.setCardvertype(BusConstant.CARDVERTYPE_FREEZE); //变为异常
+            cardver.setAdddelflag(BusConstant.ADDDELFLAG_DOWNLOAD); //下发黑名单
+            citizenCardverDao.doClosedHistoryRecords(BusConstant.CARDVERTYPE_UNFREEZE, card.getCardno(), cardverno); //解冻记录置为无效
+          }
+        }
+
+        if (null != cardver) {
+          cardver.setAccdate(dt.getHostdate());
+          cardver.setCardno(card.getCardno());
+          cardver.setCardphyid(card.getCardphyid());
+          cardver.setPayerid(card.getPayerid());
+          cardver.setStatus(BusConstant.STATUS_CARDVER_NORMAL);
+          cardver.setLastsaved(systemUtilService.getSysdatetime().getHostdatetime());
+          citizenCardverDao.save(cardver);
+          sysparaDao.updateSysparaValue(cardver.getCardverno(), BusConstant.SYSPARAID_MAXBLACKCARDVERNO); //更新系统黑名单版本号
+        }
+      }
+
+      if (updFlag) {
+        citizenCardDao.save(card); //更新卡表
+      }
+    }
+
+    if (null != cardverno) {
+      maxcardver.setParaval(cardverno);
+      sysparaDao.save(maxcardver);  //系统的卡版本号
+    }
+
+    synctime.setParaval(cardInfo.getUpdtime());
+    sysparaDao.save(synctime); //更新同步时间
+  }
+
+
+}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/task/CitizenCardSyncTask.java b/src/main/java/com/supwisdom/dlpay/bus/task/CitizenCardSyncTask.java
new file mode 100644
index 0000000..cb8030d
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/task/CitizenCardSyncTask.java
@@ -0,0 +1,79 @@
+package com.supwisdom.dlpay.bus.task;
+
+import com.supwisdom.dlpay.api.bean.CardsResponse;
+import com.supwisdom.dlpay.api.bean.CitizenCardInfo;
+import com.supwisdom.dlpay.api.bean.QueryCardsParam;
+import com.supwisdom.dlpay.bus.service.CitizenCardService;
+import com.supwisdom.dlpay.bus.util.BusConstant;
+import com.supwisdom.dlpay.framework.service.SystemUtilService;
+import com.supwisdom.dlpay.paysdk.proxy.UserProxy;
+import net.javacrumbs.shedlock.core.SchedulerLock;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * 跟核心平台获取市民卡信息和实时生成黑名单
+ */
+@Component
+public class CitizenCardSyncTask {
+  private static final Logger logger = LoggerFactory.getLogger(CitizenCardSyncTask.class);
+
+  @Autowired
+  private CitizenCardService citizenCardService;
+  @Autowired
+  private SystemUtilService systemUtilService;
+  @Autowired
+  private UserProxy userProxy;
+
+
+  @Scheduled(cron = "${busapp.cardsync.cron}")
+  @SchedulerLock(name = "BusappCardSyncTask", lockAtMostForString = "PT10M")
+  public void doCitizenCardSyncTask() {
+    try {
+      long t1 = System.currentTimeMillis();
+      logger.info("跟核心平台同步市民卡信息任务开始");
+
+      String lastsynctime = citizenCardService.getPayapiCardSynctime(); //上次同步时间
+      String currenttime = systemUtilService.getSysdatetime().getHostdatetime();
+
+      doSyncCitizenCard(lastsynctime, currenttime);
+
+      long t2 = System.currentTimeMillis();
+      logger.info("跟核心平台同步市民卡信息任务结束，耗时 " + (t2 - t1) + " ms");
+    } catch (Exception ex) {
+      logger.error("跟核心平台同步市民卡信息任务报错!!！");
+      ex.printStackTrace();
+    }
+  }
+
+  private void doSyncCitizenCard(String begintime, String endtime) throws Exception {
+    QueryCardsParam param = new QueryCardsParam();
+    param.setStarttime(begintime);
+    param.setEndtime(endtime);
+    param.setVersion(BusConstant.PAYAPI_CONNECT_VERSION);
+    param.setTenantid(BusConstant.PAYAPI_CONNECT_TENANTID);
+    param.setSign_type(BusConstant.PAYAPI_CONNECT_SIGNTYPE);
+    param.generalSign(citizenCardService.getPayapiSignkey());
+    CardsResponse response = userProxy.querycards(param);
+    if (null == response || null == response.getCards() || response.getCards().size() <= 0) return;
+
+    if(BusConstant.PAYAPI_CARDSYNC_DEFAULTTIME.equals(begintime)) {
+      //第一次全量同步
+      boolean ret = citizenCardService.doFirstSyncCard(response.getCards());
+      if (ret) {
+        logger.info("初次同步数据成功，共插入" + response.getCards().size() + "条数据");
+      } else {
+        logger.error("初次同步数据失败！！！");
+      }
+    } else {
+      //增量同步
+      for (CitizenCardInfo cardInfo : response.getCards()) {
+        citizenCardService.doSyncSingleCitizencard(cardInfo);
+      }
+    }
+  }
+
+}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/util/BusConstant.java b/src/main/java/com/supwisdom/dlpay/bus/util/BusConstant.java
new file mode 100644
index 0000000..8bd7bea
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/util/BusConstant.java
@@ -0,0 +1,33 @@
+package com.supwisdom.dlpay.bus.util;
+
+public class BusConstant {
+  public final static String PAYAPI_CONNECT_VERSION="1.0";
+  public final static String PAYAPI_CONNECT_SIGNTYPE="MD5";
+  public final static String PAYAPI_CONNECT_TENANTID="tenantid";
+  public final static String PAYAPI_CONNECT_SIGNKEY="c9ae5b4fe5014b5b9eb19e1a0797a3a3";
+
+  public final static String PAYAPI_CARDSYNC_DEFAULTTIME = "00000000000000"; //yyyyMMddhhmmss
+
+  public final static int CARDVERNO_LENGTH = 14;
+  public final static String CARDVERNO_DEFAULT = "00000000000000"; //yyMMdd+8位递增数
+
+
+  public final static String STATUS_CARDVER_NORMAL="normal";
+  public final static String STATUS_CARDVER_CLOSED="closed";
+
+  public final static String PAYAPI_CARDSYNC_ONCECOUNT="payapi.cardsync.oncecount";
+  public final static int PAYAPI_CARDSYNC_ONCECOUNT_DEFAULT = 20000;
+
+
+  public final static String CARDVERTYPE_REGISTER = "register"; //注册
+  public final static String CARDVERTYPE_CLOSED = "closed"; //注销
+  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_NONE = 0; //不需要下发
+
+  public final static int SYSPARAID_MAXCARDVERNO = 10; //全局参数，最大版本号
+  public final static int SYSPARAID_MAXBLACKCARDVERNO = 11; //全局参数，最大黑名单版本号
+  public final static int SYSPARAID_CARDSYNCTIME = 21; //全局参数，卡同步时间
+}
diff --git a/src/main/java/com/supwisdom/dlpay/bus/util/BusException.java b/src/main/java/com/supwisdom/dlpay/bus/util/BusException.java
new file mode 100644
index 0000000..5ce5f5a
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/bus/util/BusException.java
@@ -0,0 +1,7 @@
+package com.supwisdom.dlpay.bus.util;
+
+public class BusException extends Exception {
+  public BusException(String message) {
+    super(message);
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/dao/SysparaDao.java b/src/main/java/com/supwisdom/dlpay/framework/dao/SysparaDao.java
index b4f5da3..cd65fdf 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/SysparaDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/SysparaDao.java
@@ -20,5 +20,9 @@
   @Query(value = "from TSyspara where paraid=?1 ")
   TSyspara findByParaidWithLockNowait(int paraid);
 
+  @Modifying
+  @Query(value = "update tb_syspara set paraval=?1 where paraid=?2 ", nativeQuery = true)
+  void updateSysparaValue(String value, int paraid);
+
 
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/data/SystemDateTime.java b/src/main/java/com/supwisdom/dlpay/framework/data/SystemDateTime.java
index baaa274..49cb2a5 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/data/SystemDateTime.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/data/SystemDateTime.java
@@ -1,5 +1,6 @@
 package com.supwisdom.dlpay.framework.data;
 
+import java.sql.Timestamp;
 import java.util.Date;
 
 public interface SystemDateTime {
@@ -9,5 +10,5 @@
 
   String getHostdatetime();
 
-  Date getSysdate();
+  Timestamp getSysdate();
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/service/impl/SystemUtilServiceImpl.java b/src/main/java/com/supwisdom/dlpay/framework/service/impl/SystemUtilServiceImpl.java
index 7a70969..386c5d1 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/service/impl/SystemUtilServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/service/impl/SystemUtilServiceImpl.java
@@ -35,35 +35,6 @@
 
   private static final Logger logger = LoggerFactory.getLogger(SystemUtilServiceImpl.class);
 
-  public static class SystemDateTimeImpl implements SystemDateTime {
-    private Date now;
-    private static final SimpleDateFormat sdft = new SimpleDateFormat("yyyyMMddHHmmss");
-
-    public SystemDateTimeImpl(Date now) {
-      this.now = now;
-    }
-
-    @Override
-    public String getHostdate() {
-      return sdft.format(this.now).substring(0, 8);
-    }
-
-    @Override
-    public String getHosttime() {
-      return sdft.format(this.now).substring(8, 14);
-    }
-
-    @Override
-    public String getHostdatetime() {
-      return sdft.format(this.now);
-    }
-
-    @Override
-    public Date getSysdate() {
-      return this.now;
-    }
-  }
-
   /**
    * 获取oracle数据库时间
    */
