diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/BindCardParam.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/BindCardParam.java
new file mode 100644
index 0000000..92428f0
--- /dev/null
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/BindCardParam.java
@@ -0,0 +1,34 @@
+package com.supwisdom.dlpay.api.bean;
+
+import com.supwisdom.dlpay.api.APIRequestParam;
+import com.supwisdom.dlpay.api.annotation.Sign;
+import com.supwisdom.dlpay.api.exception.RequestParamCheckException;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotEmpty;
+
+@Getter
+@Setter
+public class BindCardParam extends APIRequestParam {
+  @Sign
+  @NotEmpty(message = "卡号不能为空")
+  private String cardno;
+  @Sign
+  @NotEmpty(message = "姓名不能为空")
+  private String name;
+  @Sign
+  @NotEmpty(message = "证件类型不能为空")
+  private String idtype;
+  @Sign
+  @NotEmpty(message = "证件号不能为空")
+  private String idno;
+  @Sign
+  @NotEmpty(message = "手机号不能为空")
+  private String phone;
+
+  @Override
+  public boolean checkParam() throws RequestParamCheckException {
+    return true;
+  }
+}
diff --git a/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QrcodeParam.java b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QrcodeParam.java
new file mode 100644
index 0000000..cca7278
--- /dev/null
+++ b/payapi-common/src/main/java/com/supwisdom/dlpay/api/bean/QrcodeParam.java
@@ -0,0 +1,31 @@
+package com.supwisdom.dlpay.api.bean;
+
+import com.supwisdom.dlpay.api.APIRequestParam;
+import com.supwisdom.dlpay.api.annotation.Sign;
+import com.supwisdom.dlpay.api.exception.RequestParamCheckException;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotEmpty;
+
+@Getter
+@Setter
+public class QrcodeParam extends APIRequestParam {
+  @Sign
+  @NotEmpty(message = "用户id不能为空")
+  private String userid;
+  @Sign
+  @NotEmpty(message = "手机用户id不能为空")
+  private String uid;
+  @Sign
+  @NotEmpty(message = "secertkey不能为空")
+  private String secertkey;
+  @Sign
+  @NotEmpty(message = "rsapublic不能为空")
+  private String rsapublic;
+
+  @Override
+  public boolean checkParam() throws RequestParamCheckException {
+    return true;
+  }
+}
\ No newline at end of file
diff --git a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/UserProxy.java b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/UserProxy.java
index 1da07a8..d336ab1 100644
--- a/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/UserProxy.java
+++ b/payapi-sdk/src/main/java/com/supwisdom/dlpay/paysdk/proxy/UserProxy.java
@@ -45,7 +45,10 @@
   ApiResponse userTask(@RequestBody UserTaskParam param);
 
   @PostMapping("/api/user/getTask")
-  Map<String, Object> getTPointsTaskNoPage();
+  Map<String, Object> getTPointsTaskNoPage(@RequestParam("userid") String userid);
+
+  @PostMapping("/api/user/getTaskStatus")
+  Map<String, Object> getTaskStatus(@RequestParam("userid") String userid,@RequestParam("taskid")Integer taskid);
 
   @PostMapping("/api/user/getUserPoints")
   Map<String, Object> getUserPoints(@RequestBody UserPointsParam param);
@@ -68,4 +71,21 @@
   @PostMapping("/api/user/updateCardTransStatus")
   ApiResponse updateCardTransStatus(@RequestParam("cardno") String cardno,@RequestParam("status") String status);
 
+  @PostMapping("/api/user/bindcard")
+  Map<String, Object> bindCard(@RequestBody BindCardParam param);
+
+  @PostMapping("/api/user/bindcardcode")
+  Map<String, Object> bindCardCode(@RequestParam("userid") String userid,@RequestParam("phone") String phone);
+
+  @PostMapping("/api/user/signbxy")
+  ApiResponse signbxy(@RequestParam("userid") String userid,@RequestParam("code") String code,@RequestParam("phone") String phone);
+
+  @PostMapping("/api/user/unsignbxy")
+  ApiResponse unsignbxy(@RequestParam("userid") String userid,@RequestParam("phone") String phone);
+
+  @PostMapping("/api/user/qrcode")
+  Map<String, Object> qrcode(@RequestBody QrcodeParam param);
+
+  @PostMapping("/api/user/consumetask")
+  ApiResponse consumeTask(@RequestParam("userid") String userid);
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/PersonDao.java b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/PersonDao.java
index 5483aa1..988afaa 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/PersonDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/PersonDao.java
@@ -19,8 +19,4 @@
     TPerson findByUserid(String userid);
 
     Page<TPerson> findAllByNameContaining(String name, Pageable pageable);
-
-    TPerson findByUseridAndAndName(String userid,String name);
-
-    TPerson findByUseridAndIdtype(String userid,String idtype);
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/PersondtlDao.java b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/PersondtlDao.java
index 0f39c37..3be4457 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/PersondtlDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/PersondtlDao.java
@@ -25,4 +25,6 @@
     List<TPersondtl> findAllByUseridAndTransdateStartingWithAndReverseFlagAndStatusAndTradeflag(String userid, String transdate,String reverseFlag,String status,String tradeflag);
 
     List<TPersondtl> findAllByTransdateAndReverseFlagAndStatusAndTradeflag(String transdate,String reverseFlag,String status,String tradeflag);
+
+    TPersondtl findTopByUseridAndStatusAndTradeflag(String userid, String status, String tradeFlag);
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TCard.java b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TCard.java
index 02e6bf9..d21ff59 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TCard.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TCard.java
@@ -30,6 +30,9 @@
   @Column(name = "TRANS_STATUS", nullable = false, length = 20)
   private String transStatus; //normal/loss/frozen/locked/abnormal/unuse
 
+  @Column(name = "BUS_CARD_TYPE", length = 20)
+  private String busCardType; //市民卡的公交卡类型
+
   @Column(name = "EXPIREDATE", length = 20)
   private String expiredate;
 
@@ -49,12 +52,13 @@
   public TCard() {
   }
 
-  public TCard(String cardno, String cardtype, String cardphyid, String status, String transStatus, String expiredate, Boolean signed, String userid, String lastsaved) {
+  public TCard(String cardno, String cardtype, String cardphyid, String status, String transStatus, String busCardType, String expiredate, Boolean signed, String userid, String lastsaved) {
     this.cardno = cardno;
     this.cardtype = cardtype;
     this.cardphyid = cardphyid;
     this.status = status;
     this.transStatus = transStatus;
+    this.busCardType = busCardType;
     this.expiredate = expiredate;
     this.signed = signed;
     this.userid = userid;
@@ -109,6 +113,14 @@
     this.transStatus = transStatus;
   }
 
+  public String getBusCardType() {
+    return busCardType;
+  }
+
+  public void setBusCardType(String busCardType) {
+    this.busCardType = busCardType;
+  }
+
   public String getExpiredate() {
     return expiredate;
   }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TCitycardTemp.java b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TCitycardTemp.java
index 7d7f454..97a48d7 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TCitycardTemp.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TCitycardTemp.java
@@ -46,6 +46,9 @@
   @Column(name = "EMAIL", length = 60)
   private String email;
 
+  @Column(name = "BUS_CARD_TYPE", length = 20)
+  private String busCardType;
+
   @Column(name = "STATUS", length = 20)
   private String status;
 
@@ -185,4 +188,12 @@
   public void setTenantid(String tenantid) {
     this.tenantid = tenantid;
   }
+
+  public String getBusCardType() {
+    return busCardType;
+  }
+
+  public void setBusCardType(String busCardType) {
+    this.busCardType = busCardType;
+  }
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/PointsDtlDao.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/PointsDtlDao.java
index 0bbf7a3..5e3d58e 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/PointsDtlDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/PointsDtlDao.java
@@ -33,4 +33,5 @@
 
   TPointsdtl findAllByUseridAndRefnoAndTransdate(String userid,Integer refno,String transdate);
 
+  TPointsdtl findTopByUseridAndTypeAndRefnoOrderByIdDesc(String userid, String type, Integer refno);
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TPointsTask.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TPointsTask.java
index 3bfb71b..c56be1e 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TPointsTask.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TPointsTask.java
@@ -37,6 +37,9 @@
   @Column(name = "ORDERNUM")
   private Integer ordernum;
 
+  @Transient
+  private String lasttime;
+
   public Integer getTaskid() {
     return taskid;
   }
@@ -108,4 +111,12 @@
   public void setOrdernum(Integer ordernum) {
     this.ordernum = ordernum;
   }
+
+  public String getLasttime() {
+    return lasttime;
+  }
+
+  public void setLasttime(String lasttime) {
+    this.lasttime = lasttime;
+  }
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TPointsdtl.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TPointsdtl.java
index 34c2f98..a5fe945 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TPointsdtl.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TPointsdtl.java
@@ -5,7 +5,7 @@
 import javax.persistence.*;
 
 @Entity
-@Table(name = "TB_POINTSDTL")
+@Table(name = "TB_POINTSDTL",indexes = {@Index(name = "points_dtl_idx",columnList = "userid")})
 public class TPointsdtl {
   @Id
   @GenericGenerator(name = "idGeneratorDtl", strategy = "sequence")
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/Dictionary.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/Dictionary.java
index 9eac02d..6798ebc 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/Dictionary.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/Dictionary.java
@@ -8,6 +8,7 @@
   public static final String SEX = "sexList";
   public static final String ACCOUNT_STATUS = "accountStatusList";
   public static final String DTLTYPES = "dtltypeList";
+  public static final String BUSCARDTYPES = "busCardTypeList";
 
   /////////////////////////////////////
   public static final String SOURCE_TYPE = "sourcetypeList";
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/StringUtil.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/StringUtil.java
index ff4084c..180679b 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/util/StringUtil.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/util/StringUtil.java
@@ -272,5 +272,16 @@
 //    return bankCard.charAt(bankCard.length() - 1) == bit;
   }
 
+  /**
+   * 根据卡号创建8位16进制卡物理ID
+   * */
+  public static String createCardphyid(int cardno) {
+    String hex = Integer.toHexString(cardno);
+    while (hex.length() < 8) {
+      hex = "0" + hex;
+    }
+    return hex.toUpperCase();
+  }
+
 
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/bean/CitizenCardShowBean.java b/payapi/src/main/java/com/supwisdom/dlpay/system/bean/CitizenCardShowBean.java
index 5f4961b..17fd877 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/system/bean/CitizenCardShowBean.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/bean/CitizenCardShowBean.java
@@ -18,6 +18,7 @@
   private String mobile;
   private String email;
   private String sex;
+  private String buscardtype;
 
   public String getCid() {
     return cid;
@@ -154,4 +155,12 @@
   public void setSex(String sex) {
     this.sex = sex;
   }
+
+  public String getBuscardtype() {
+    return buscardtype;
+  }
+
+  public void setBuscardtype(String buscardtype) {
+    this.buscardtype = buscardtype;
+  }
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/controller/UserController.java b/payapi/src/main/java/com/supwisdom/dlpay/system/controller/UserController.java
index eb36de9..4c35709 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/system/controller/UserController.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/controller/UserController.java
@@ -210,9 +210,10 @@
                                    @RequestParam(value = "idtype", required = false) String idtype,
                                    @RequestParam(value = "idno", required = false) String idno,
                                    @RequestParam(value = "mobile", required = false) String mobile,
-                                   @RequestParam(value = "email", required = false) String email) {
+                                   @RequestParam(value = "email", required = false) String email,
+                                   @RequestParam(value = "buscardtype", required = false) String buscardtype) {
     try {
-      if (userDataService.doSaveNewCitizenCard(cardno, cardphyid, expiredate, cardstatus, bankcardno, signstatus, username, sex, idtype, idno, mobile, email)) {
+      if (userDataService.doSaveNewCitizenCard(cardno, cardphyid, expiredate, cardstatus, bankcardno, signstatus, username, sex, idtype, idno, mobile, email, buscardtype)) {
         return JsonResult.ok("新增成功！");
       } else {
         return JsonResult.error("新增失败！");
@@ -264,9 +265,10 @@
                                    @RequestParam(value = "idtype", required = false) String idtype,
                                    @RequestParam(value = "idno", required = false) String idno,
                                    @RequestParam(value = "mobile", required = false) String mobile,
-                                   @RequestParam(value = "email", required = false) String email) {
+                                   @RequestParam(value = "email", required = false) String email,
+                                   @RequestParam(value = "buscardtype", required = false) String buscardtype) {
     try {
-      if (userDataService.doUpdateCitizenCard(cid, bkid, cardno, cardphyid, expiredate, cardstatus, bankcardno, signstatus, username, sex, idtype, idno, mobile, email)) {
+      if (userDataService.doUpdateCitizenCard(cid, bkid, cardno, cardphyid, expiredate, cardstatus, bankcardno, signstatus, username, sex, idtype, idno, mobile, email, buscardtype)) {
         return JsonResult.ok("修改成功！");
       } else {
         return JsonResult.error("修改失败！");
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/service/PointsService.java b/payapi/src/main/java/com/supwisdom/dlpay/system/service/PointsService.java
index b32f9cf..7efce69 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/system/service/PointsService.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/service/PointsService.java
@@ -11,6 +11,7 @@
 import com.supwisdom.dlpay.system.bean.CitizenCardShowBean;
 import com.supwisdom.dlpay.system.bean.LevelBean;
 import com.supwisdom.dlpay.system.bean.PersonParamBean;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -74,6 +75,10 @@
   * 通过消费获得积分
   *
   * */
+  //消费进行积分处理
+  @Async
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+  void consumePoints(String userid,Double amount,String billno) throws ParseException;
   //单次消费进行积分处理
   @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
   Boolean singleHandlePoints(String userid,Double amount,String billno) throws ParseException;
@@ -136,7 +141,10 @@
   JsonResult finishTask (String userid,String taskid);
 
   @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
-  JsonResult getTPointsTaskNoPage();
+  JsonResult getTPointsTaskNoPage(String userid);
+
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
+  TPointsdtl getTaskStatus(String userid,Integer taskid);
 
 
   /*
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/service/UserDataService.java b/payapi/src/main/java/com/supwisdom/dlpay/system/service/UserDataService.java
index 8cc7a5b..e463ae5 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/system/service/UserDataService.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/service/UserDataService.java
@@ -50,12 +50,12 @@
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     boolean doSaveNewCitizenCard(String cardno, String cardphyid, String expiredate, String cardstatus, String bankcardno,
                                  String signstatus, String username, String sex, String idtype, String idno, String mobile,
-                                 String email) throws Exception;
+                                 String email, String buscardtype) throws Exception;
 
 
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     boolean doUpdateCitizenCard(String cid, String bkid, String cardno, String cardphyid, String expiredate, String cardstatus,
                                 String bankcardno, String signstatus, String username, String sex, String idtype, String idno,
-                                String mobile, String email) throws Exception;
+                                String mobile, String email, String buscardtype) throws Exception;
 
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/PointsServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/PointsServiceImpl.java
index c65cd8c..2d638b6 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/PointsServiceImpl.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/PointsServiceImpl.java
@@ -119,11 +119,15 @@
 
   @Override
   public PageResult getTPointsByname(LevelBean param) {
+    logger.error("通过卡号查询用户卡开始时间"+DateUtil.getNow());
     TCard tCard = cardDao.findCardByCardnoAndCardtype(param.getIdno(), ConstantUtil.CARDTYPE_CITIZENCARD);
+    logger.error("通过卡号查询用户卡结束时间"+DateUtil.getNow());
     if (tCard == null || StringUtil.isEmpty(tCard.getUserid())) {
       return new PageResult<>(99, "未查询到该用户的信息");
     }
-    TPerson tPerson = personDao.findByUseridAndAndName(tCard.getUserid(), param.getName());
+    logger.error("通过用户id和名称查询用户信息开始时间"+DateUtil.getNow());
+    TPerson tPerson = personDao.findByUserid(tCard.getUserid());
+    logger.error("通过用户id和名称查询用户信息结束时间"+DateUtil.getNow());
     if (tPerson == null) {
       return new PageResult<>(99, "未查询到该用户的信息");
     }
@@ -221,13 +225,20 @@
     consumePointsDao.deleteById(tConsumePoints.getId());
     return JsonResult.ok("成功");
   }
-
+  @Override
+  public void consumePoints(String userid, Double amount, String billno) throws ParseException {
+    singleHandlePoints(userid,amount,billno);
+    dayHandlePoints(userid,billno);
+    monthHandlePoints(userid,billno);
+  }
   @Override
   public Boolean singleHandlePoints(String userid, Double amount, String billno) throws ParseException {
     double rate = 1;
     // 1.根据当天日期判断当天是否该用户的特殊日期或者生日，得到实际倍率
     String nowDateTemp = DateUtil.getNow("yyyyMMdd");
-    TPerson person = personDao.findByUseridAndIdtype(userid, "idcard");
+    logger.error("单次消费查询用户信息开始时间"+DateUtil.getNow());
+    TPerson person = personDao.findByUserid(userid);
+    logger.error("单次消费查询用户信息结束时间"+DateUtil.getNow());
     if (person != null && !StringUtil.isEmpty(person.getIdno())) {
       String nowDate = DateUtil.getNow("MMdd");
       String brithdate = person.getIdno().substring(10, 14);
@@ -922,11 +933,25 @@
   }
 
   @Override
-  public JsonResult getTPointsTaskNoPage() {
+  public JsonResult getTPointsTaskNoPage(String userid) {
+    List<TPointsTask> list = pointsTaskDao.findAll(Sort.by(Sort.Direction.ASC, "ordernum"));
+    if (!StringUtil.isEmpty(userid)) {
+      list.forEach(task ->{
+        TPointsdtl dtl = pointsDtlDao.findTopByUseridAndTypeAndRefnoOrderByIdDesc(userid, TradeDict.TASK_FLAG_FINISH, task.getTaskid());
+        if (dtl != null) {
+          task.setLasttime(dtl.getTransdate() + dtl.getTranstime());
+        }
+      });
+    }
     return JsonResult.ok().put("dataList",pointsTaskDao.findAll(Sort.by(Sort.Direction.ASC,"ordernum")));
   }
 
   @Override
+  public TPointsdtl getTaskStatus(String userid, Integer taskid) {
+    return pointsDtlDao.findTopByUseridAndTypeAndRefnoOrderByIdDesc(userid, TradeDict.TASK_FLAG_FINISH, taskid);
+  }
+
+  @Override
   public JsonResult pointsOutdate(){
     String yesterday = DateUtil.getYesterdayDay();
     List<TPointsDetail> pointsDetails = pointsDetailDao.findAllByOutDateAndStatus("20200821","normal");
@@ -954,7 +979,9 @@
   @Override
   public JsonResult pointsCompensate() throws ParseException {
     String yesterday = DateUtil.getYesterdayDay();
+    logger.error("查询用户流水开始时间"+DateUtil.getNow());
     List<TPersondtl> tPersondtl = persondtlDao.findAllByTransdateAndReverseFlagAndStatusAndTradeflag("20200821", "none", "success","out");
+    logger.error("查询用户流水结束时间"+DateUtil.getNow());
     //消费流水补偿
     for(TPersondtl temp:tPersondtl){
       singleHandlePoints(temp.getUserid(),temp.getAmount(),temp.getRefno());
@@ -962,7 +989,9 @@
       monthHandlePoints(temp.getUserid(),temp.getRefno());
     }
     //退款流水补偿
+    logger.error("查询用户流水list开始时间"+DateUtil.getNow());
     List<TPersondtl> tPersondtlReve = persondtlDao.findAllByTransdateAndReverseFlagAndStatusAndTradeflag("20200821", "refund", "success","out");
+    logger.error("查询用户流水list结束时间"+DateUtil.getNow());
     for(TPersondtl temp:tPersondtlReve){
       //退款怎么确认，refno和支付时一样吗
       refundHandlePoints(temp.getUserid(),temp.getRefno());
@@ -972,12 +1001,16 @@
 
   public List<TPersondtl> getShopdtlByUseridAndTransdateAndReverseFlagAndStatus(String userid,String transdate,String reverseFlag,String status){
     //TAccount account = accountDao.findByUserid(userid);
+    logger.error("查询用户流水list2开始时间"+DateUtil.getNow());
     List<TPersondtl> tShopdtls = persondtlDao.findAllByUseridAndTransdateAndReverseFlagAndStatusAndTradeflag(userid, transdate, reverseFlag, status,"out");
+    logger.error("查询用户流水list2结束时间"+DateUtil.getNow());
     return tShopdtls;
   }
   public List<TPersondtl> getShopdtlByUseridAndTransdateStartingWithAndReverseFlagAndStatus(String userid,String transdate,String reverseFlag,String status){
     //TAccount account = accountDao.findByUserid(userid);
+    logger.error("查询用户流水list3开始时间"+DateUtil.getNow());
     List<TPersondtl> tShopdtls = persondtlDao.findAllByUseridAndTransdateStartingWithAndReverseFlagAndStatusAndTradeflag(userid, transdate, reverseFlag, status,"out");
+    logger.error("查询用户流水list3结束时间"+DateUtil.getNow());
     return tShopdtls;
   }
 
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java
index 01105f8..a7ed10e 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/UserDataServiceImpl.java
@@ -196,7 +196,7 @@
 
   @Override
   public PageResult<CitizenCardShowBean> getUserCitizenCardPage(CitizenCardSearchBean param, int pageNo, int pageSize) {
-    StringBuffer querySql = new StringBuffer("select t.id as cid,t.cardno,t.cardtype,t.cardphyid,case when t.status='closed' then 'closed' else t.trans_status end as status,t.expiredate,a.id as bkid,a.cardno as bankcardno,a.signed,t.lastsaved,t.userid,p.name as username,p.idtype,p.idno,p.mobile,p.email,p.sex \n" +
+    StringBuffer querySql = new StringBuffer("select t.id as cid,t.cardno,t.cardtype,t.cardphyid,case when t.status='closed' then 'closed' else t.trans_status end as status,t.expiredate,a.id as bkid,a.cardno as bankcardno,a.signed,t.lastsaved,t.userid,p.name as username,p.idtype,p.idno,p.mobile,p.email,p.sex,t.bus_card_type as buscardtype \n" +
         "from tb_card t left join tb_card a on a.cardtype='bankcard' and a.cardphyid=t.cardphyid and a.userid=t.userid left join tb_person p on p.userid=t.userid \n" +
         "where t.cardtype='citizencard' ");
     StringBuffer countSql = new StringBuffer("select count(t.id) as cnt \n" +
@@ -255,7 +255,7 @@
 
   private boolean checkCitizenCardData(String cardno, String cardphyid, String expiredate, String cardstatus, String bankcardno,
                                        String signstatus, String username, String sex, String idtype, String idno, String mobile,
-                                       String email) throws WebCheckException {
+                                       String email, String buscardtype) throws WebCheckException {
     if (StringUtil.isEmpty(cardno)) throw new WebCheckException("市民卡号不能为空");
     if (!StringUtil.isNumber(cardno.trim())) throw new WebCheckException("请正确填写市民卡号");
 
@@ -290,14 +290,15 @@
 
     if (!StringUtil.isEmpty(mobile) && !StringUtil.isMobile(mobile.trim())) throw new WebCheckException("请正确填写手机号");
     if (!StringUtil.isEmpty(email) && !StringUtil.isEmail(email.trim())) throw new WebCheckException("请正确填写电子邮箱");
+    if (StringUtil.isEmpty(buscardtype)) throw new WebCheckException("请选择公交卡类型");
     return true;
   }
 
   @Override
   public boolean doSaveNewCitizenCard(String cardno, String cardphyid, String expiredate, String cardstatus, String bankcardno,
                                       String signstatus, String username, String sex, String idtype, String idno, String mobile,
-                                      String email) throws Exception {
-    if (checkCitizenCardData(cardno, cardphyid, expiredate, cardstatus, bankcardno, signstatus, username, sex, idtype, idno, mobile, email)) {
+                                      String email, String buscardtype) throws Exception {
+    if (checkCitizenCardData(cardno, cardphyid, expiredate, cardstatus, bankcardno, signstatus, username, sex, idtype, idno, mobile, email, buscardtype)) {
       double maxbal = systemUtilService.getSysparaValueAsDouble(SysparaUtil.BALANCE_LIMIT, SysparaUtil.DEFAULT_BALANCE_LIMIT);
       double lowfreeLimit = systemUtilService.getSysparaValueAsDouble(SysparaUtil.NOPASS_LIMIT, SysparaUtil.DEFAULT_NOPASS_LIMIT);
       double daylimit = systemUtilService.getSysparaValueAsDouble(SysparaUtil.DAY_PAY_LIMIT, SysparaUtil.DEFAULT_DAY_PAY_LIMIT);
@@ -385,6 +386,7 @@
       cityCard.setUserid(person.getUserid());
       cityCard.setLastsaved(dt.getHostdatetime());
       cityCard.setTenantid(person.getTenantid());
+      cityCard.setBusCardType(buscardtype.trim());
       cardDao.save(cityCard);
 
       bankCard = new TCard(); //新增银行卡
@@ -404,6 +406,7 @@
       if (TradeDict.STATUS_NORMAL.equals(bankCard.getStatus())) {
         cardDao.closedBankcardStatusByUserid(bankCard.getUserid());  //注销其他银行卡
       }
+      bankCard.setBusCardType(buscardtype.trim());
       cardDao.save(bankCard);
       return true;
     }
@@ -418,7 +421,7 @@
   @Override
   public boolean doUpdateCitizenCard(String cid, String bkid, String cardno, String cardphyid, String expiredate, String cardstatus,
                                      String bankcardno, String signstatus, String username, String sex, String idtype, String idno,
-                                     String mobile, String email) throws Exception {
+                                     String mobile, String email, String buscardtype) throws Exception {
     TCard cityCard = findCardById(cid);
     TCard bankCard = findCardById(bkid);
     if (null == cityCard || null == bankCard ||
@@ -431,7 +434,7 @@
     TPerson person = personDao.findByUserid(cityCard.getUserid());
     if(null==person) throw new WebCheckException("请求参数错误，请重新查询！");
 
-    if (checkCitizenCardData(cardno, cardphyid, expiredate, cardstatus, bankcardno, signstatus, username, sex, idtype, idno, mobile, email)) {
+    if (checkCitizenCardData(cardno, cardphyid, expiredate, cardstatus, bankcardno, signstatus, username, sex, idtype, idno, mobile, email, buscardtype)) {
       TPerson owner = null; //市民卡拥有者
       SystemDateTime dt = systemUtilService.getSysdatetime();
       if(idtype.trim().equals(person.getIdtype()) && idno.trim().equals(person.getIdno())){
@@ -539,7 +542,10 @@
         cityCard.setUserid(owner.getUserid());
         cardUpdate = true;
       }
-
+      if (!buscardtype.trim().equals(cityCard.getBusCardType())) {
+        cityCard.setBusCardType(buscardtype.trim());
+        cardUpdate = true;
+      }
       if(cardUpdate){
         cityCard.setLastsaved(dt.getHostdatetime());
         cardDao.save(cityCard);
@@ -569,6 +575,10 @@
         bankCard.setUserid(cityCard.getUserid());
         bankcardUpdate = true;
       }
+      if (!buscardtype.trim().equals(bankCard.getBusCardType())) {
+        bankCard.setBusCardType(buscardtype.trim());
+        bankcardUpdate = true;
+      }
 
       if(bankcardUpdate){
         bankCard.setLastsaved(dt.getHostdatetime());
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt
index f489996..2df8b69 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/PayApiApplication.kt
@@ -30,6 +30,7 @@
 import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer
 import org.springframework.data.redis.serializer.StringRedisSerializer
 import org.springframework.http.client.SimpleClientHttpRequestFactory
+import org.springframework.scheduling.annotation.EnableAsync
 import org.springframework.scheduling.annotation.EnableScheduling
 import org.springframework.stereotype.Component
 import org.springframework.web.client.RestTemplate
@@ -39,6 +40,7 @@
 
 @Configuration
 @EnableRedisRepositories
+@EnableAsync
 class AppConfig {
 
     @Autowired
@@ -164,4 +166,4 @@
 
 fun main(args: Array<String>) {
     SpringApplication.run(PayApiApplication::class.java, * args)
-}
\ No newline at end of file
+}
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/citizencard_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/citizencard_service_impl.kt
index 1dbd5c7..0d97656 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/citizencard_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/agent/service/impl/citizencard_service_impl.kt
@@ -236,10 +236,7 @@
             return if (200 == respClient.status) {
                 val jsonStr = respClient.getEntity(String::class.java)
                 logger.error("refno=[$refno], url=[$url], return=[$jsonStr]")
-//                resp = Gson().fromJson(jsonStr, DlpayResp::class.java)
-                resp = DlpayResp().apply {
-                    code="0000"
-                }
+                resp = Gson().fromJson(jsonStr, DlpayResp::class.java)
                 resp
             } else {
                 resp.code = "99"
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt
index 5eef7e5..21edbe8 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/bean/api_request_param.kt
@@ -59,7 +59,7 @@
 
 class DaliDatasyncDetail {
     var cardno: String = ""
-    var cardphyid: String = ""
+    var cardphyid: String? = null //fixme:物理卡号可能为空！
     var expiredate: String = ""
     var cardstatus: String = ""
     var bankcardno: String? = null
@@ -69,10 +69,12 @@
     var idno: String = ""
     var mobile: String? = null
     var email: String? = null
+    var cardType: String = ""
 
     fun checkParam(): Boolean {
         if (StringUtil.isEmpty(idtype) || StringUtil.isEmpty(idno) || StringUtil.isEmpty(username)) throw RequestParamCheckException("用户明细数据关键字段为空")
-        if (StringUtil.isEmpty(cardno) || StringUtil.isEmpty(cardphyid) || StringUtil.isEmpty(expiredate) || StringUtil.isEmpty(cardstatus)) throw RequestParamCheckException("卡片明细数据关键字段为空")
+        if (StringUtil.isEmpty(cardno) || StringUtil.isEmpty(expiredate) || StringUtil.isEmpty(cardstatus)) throw RequestParamCheckException("卡片明细数据关键字段为空")
+        if (StringUtil.isEmpty(cardType)) throw RequestParamCheckException("卡片的公交卡类型字段值为空")
         return true
     }
 }
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
index 6779e80..87e054c 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/consume_api_controller.kt
@@ -234,8 +234,6 @@
         val dtl = transactionService.wip(param.refno)
         val service = createAgentService<DtlStatus>(TradeDict.PAYTYPE_CITIZEN_CARD)
         val resp = service.pay(dtl)
-        resp.code = AgentCode.SUCCESS
-        resp.agentRefno = systemUtilService.refno
         when (resp.code) {
             AgentCode.SUCCESS ->
                 transactionService.success(dtl.refno, resp.agentRefno, false).let {
@@ -346,8 +344,6 @@
             transactionService.wip(refundTrans.refno)
             val service = createAgentService<Any>(mainDtl.sourceType)
             val resp = service.refund(refundTrans)
-            resp.code = AgentCode.SUCCESS
-            resp.agentRefno = systemUtilService.refno
             when (resp.code) {
                 AgentCode.SUCCESS -> {
                     transactionService.success(refundTrans.refno, resp.agentRefno, false)
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt
index ce7a15a..2c80fa3 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/user_api_controller.kt
@@ -1,5 +1,7 @@
 package com.supwisdom.dlpay.api.controller
 
+import com.supwisdom.dlpay.agent.citizencard.YnrccUtil
+import com.supwisdom.dlpay.agent.service.CitizencardPayService
 import com.supwisdom.dlpay.api.TransactionBuilder
 import com.supwisdom.dlpay.api.bean.*
 import com.supwisdom.dlpay.api.bean.groups.ConfirmAction
@@ -14,6 +16,7 @@
 import com.supwisdom.dlpay.framework.util.TradeCode
 import com.supwisdom.dlpay.framework.util.TradeDict
 import com.supwisdom.dlpay.framework.util.TradeErrorCode
+import com.supwisdom.dlpay.mobile.service.MobileApiService
 import com.supwisdom.dlpay.system.bean.LevelBean
 import com.supwisdom.dlpay.system.service.PointsService
 import org.apache.commons.beanutils.BeanUtils
@@ -41,6 +44,15 @@
 
     @Autowired
     private lateinit var pointsService: PointsService
+    @Autowired
+    private lateinit var mobileApiService: MobileApiService
+    @Autowired
+    private lateinit var userService: UserService
+    @Autowired
+    private lateinit var citizencardPayService: CitizencardPayService
+    @Autowired
+    private lateinit var qrcodeService: QRCodeService
+
 
     @Autowired
     private lateinit var transactionService: TransactionServiceProxy
@@ -393,8 +405,8 @@
     }
 
     @PostMapping("/getTask")
-    fun getTPointsTaskNoPage(): ResponseEntity<Any> {
-        val ret = pointsService.getTPointsTaskNoPage()
+    fun getTPointsTaskNoPage(userid:String?): ResponseEntity<Any> {
+        val ret = pointsService.getTPointsTaskNoPage(userid)
         return if(ret.get("code")==200){
             ResponseEntity.ok(ResponseBodyBuilder.create().data("data", ret.get("dataList")!!)
                     .success("ok"))
@@ -404,6 +416,17 @@
         }
     }
 
+    @PostMapping("/getTaskStatus")
+    fun getTaskStatus(userid:String,taskid:Int): ResponseEntity<Any> {
+        val dtl = pointsService.getTaskStatus(userid,taskid)
+        var time = ""
+        if (dtl != null) {
+            time = dtl.transdate + dtl.transtime
+        }
+        return ResponseEntity.ok(ResponseBodyBuilder.create().data("data",time)
+                .success("ok"))
+    }
+
     @PostMapping("/getUserPoints")
     fun getUserPoints(@RequestBody param: UserPointsParam): ResponseEntity<Any> {
         var lev = LevelBean()
@@ -483,4 +506,145 @@
                     .fail(ret.retcode, ret.retmsg))
         }
     }
+
+    /**
+     * 用户绑卡
+     */
+    @PostMapping("/bindcard")
+    fun bindCard(@RequestBody param: BindCardParam):ResponseEntity<Any>{
+        val card = mobileApiService.findCardByNo(param.cardno)
+                ?: return ResponseEntity.ok(ResponseBodyBuilder.create()
+                        .fail(400, "银行卡号有误"))
+        if (card.userid.isNullOrEmpty() || card.status != TradeDict.STATUS_NORMAL) {
+            return ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .fail(500, "银行卡号信息有误"))
+        }
+        val person = userService.findOnePersonByUserid(card.userid)
+        if (person.name != param.name) {
+            return ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .fail(400, "绑定信息有误[姓名]"))
+        }
+        if (person.idtype != param.idtype || person.idno != param.idno) {
+            return ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .fail(400, "绑定信息有误[证件类型/证件号]"))
+        }
+        var signed = ""
+        //call api
+        val resp = citizencardPayService.bindCard(param.cardno, param.name, param.idtype, param.idno, param.phone)
+        if (resp.code != "0000") {
+            return ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .fail(500, resp.message))
+        }
+        if (resp.sinstatus == YnrccUtil.TRANSTYPE_SIGNCARD ) {
+            signed = TradeDict.STATUS_YES
+            if(!card.signed){
+                card.signed = true
+                mobileApiService.saveCard(card)
+            }
+        }
+        return  ResponseEntity.ok(ResponseBodyBuilder.create().data("signed", signed)
+                .success("ok"))
+    }
+
+    /**
+     * 签约验证码
+     */
+    @PostMapping("/bindcardcode")
+    fun bindCardCode(userid: String,phone:String):ResponseEntity<Any>{
+        val card = mobileApiService.findCardByUserid(userid)
+                ?: return ResponseEntity.ok(ResponseBodyBuilder.create()
+                        .fail(400, "卡片不存在，请重新绑定"))
+        //call sign api
+        val person = userService.findOnePersonByUserid(card.userid)
+        var signed=""
+        //call api
+        val resp = citizencardPayService.bindCard(card.cardno, person.name, person.idtype, person.idno, phone)
+        if (resp.code != "0000") {
+            return ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .fail(500, resp.message))
+        }
+
+        if (resp.sinstatus == YnrccUtil.TRANSTYPE_SIGNCARD ) {
+            signed = TradeDict.STATUS_YES
+            if(!card.signed){
+                card.signed = true
+                mobileApiService.saveCard(card)
+            }
+        }
+        return  ResponseEntity.ok(ResponseBodyBuilder.create().data("signed", signed)
+                .success("ok"))
+    }
+
+    /**
+     * 签约银行协议
+     */
+    @PostMapping("/signbxy")
+    fun signbxy(userid: String, code: String, phone: String): ResponseEntity<Any> {
+        val card = mobileApiService.findCardByUserid(userid)
+                ?: return ResponseEntity.ok(ResponseBodyBuilder.create()
+                        .fail(400, "卡片不存在，请重新绑定"))
+        //call sign api
+        val person = userService.findOnePersonByUserid(card.userid)
+        val resp = citizencardPayService.signCard(card.cardno, person.name, person.idtype, person.idno, phone, YnrccUtil.TRANSTYPE_SIGNCARD, code)
+        if (resp.code != "0000") {
+            return ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .fail(500, resp.message))
+        }
+        card.signed = true
+        mobileApiService.saveCard(card)
+        return ResponseEntity.ok(ResponseBodyBuilder.create()
+                .success("ok"))
+    }
+
+    /**
+     * 用户解约
+     */
+    @PostMapping("/unsignbxy")
+    fun unsignbxy(userid: String,phone:String): ResponseEntity<Any> {
+        val card = mobileApiService.findCardByUserid(userid)
+                ?: return ResponseEntity.ok(ResponseBodyBuilder.create()
+                        .fail(400, "银行卡不存在，不能解除代扣协议"))
+        //call sign api
+        val person = userService.findOnePersonByUserid(card.userid)
+        val captcha = ""//此处为验证码，暂由此参数代替
+        var resp = citizencardPayService.signCard(card.cardno, person.name, person.idtype, person.idno, phone, YnrccUtil.TRANSTYPE_UNSIGNCARD, captcha)
+        if (resp.code != "0000") {
+            return ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .fail(500, resp.message))
+        }
+        card.signed = false
+        mobileApiService.saveCard(card)
+        return ResponseEntity.ok(ResponseBodyBuilder.create()
+                .success("ok"))
+    }
+
+    /**
+     * 二维码
+     */
+    @PostMapping("/qrcode")
+    fun qrcode(@RequestBody param: QrcodeParam): ResponseEntity<Any> {
+        val resp = qrcodeService.encodeCode(param)
+        return if (resp.retcode == 0) {
+            ResponseEntity.ok(ResponseBodyBuilder.create().data("qrcode", resp.retmsg)
+                    .success("ok"))
+        } else {
+            ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .fail(500, resp.retmsg))
+        }
+    }
+
+    /**
+     * 查询用户是否完成了首次消费任务
+     */
+    @PostMapping("/consumetask")
+    fun consumeTask(userid:String): ResponseEntity<Any> {
+        val flag = userService.findPersonIsConsume(userid)
+        return if (flag) {
+            ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .success("ok"))
+        } else {
+            ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .fail(400,"未完成首次消费任务"))
+        }
+    }
 }
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/card_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/card_service_impl.kt
index 734d138..6c67732 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/card_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/card_service_impl.kt
@@ -6,7 +6,11 @@
 import com.supwisdom.dlpay.api.domain.TCard
 import com.supwisdom.dlpay.api.domain.TPerson
 import com.supwisdom.dlpay.api.service.CardService
+import com.supwisdom.dlpay.citizencard.dao.CitizencardLossApplyDao
+import com.supwisdom.dlpay.citizencard.domain.TCitizencardLossApply
 import com.supwisdom.dlpay.exception.TransactionProcessException
+import com.supwisdom.dlpay.framework.service.SystemUtilService
+import com.supwisdom.dlpay.framework.util.Constants
 import com.supwisdom.dlpay.framework.util.StringUtil
 import com.supwisdom.dlpay.framework.util.TradeDict
 import com.supwisdom.dlpay.framework.util.TradeErrorCode
@@ -24,6 +28,10 @@
     lateinit var cardDao: CardDao
     @Autowired
     lateinit var personDao: PersonDao
+    @Autowired
+    lateinit var citizencardLossApplyDao:CitizencardLossApplyDao
+    @Autowired
+    lateinit var systemUtilService: SystemUtilService
 
     @PersistenceContext
     private lateinit var entityManager: EntityManager
@@ -164,9 +172,9 @@
 
     override fun getCardByCardNoOrUserid(param: QueryCardParam): TCard? {
         if (!StringUtil.isEmpty(param.cardno)) {
-            return cardDao.findCardByCardnoAndCardtype(param.cardno,param.cardtype)
+            return cardDao.findCardByCardnoAndCardtype(param.cardno, param.cardtype)
         }else if (!StringUtil.isEmpty(param.userid)) {
-            return cardDao.findCardByUseridAndCardtype(param.userid,param.cardtype)
+            return cardDao.findCardByUseridAndCardtype(param.userid, param.cardtype)
         }
         return null
     }
@@ -194,7 +202,23 @@
         val card = cardDao.findCardByCardnoAndCardtype(cardno, ConstantUtil.CARDTYPE_BANKCARD)
                 ?: return result
         card.transStatus = status
+        card.lastsaved = systemUtilService.sysdatetime.hostdatetime
         cardDao.save(card)
+        if (TradeDict.STATUS_LOST == status) {
+            //保存挂失申请，异步通知卡管系统
+            cardDao.findBankcardByCitizencard(card.userid, ConstantUtil.CARDTYPE_CITIZENCARD, card.cardphyid)?.let { cityCard ->
+                citizencardLossApplyDao.save(TCitizencardLossApply().apply {
+                    this.refno = systemUtilService.refno
+                    this.cardno = cityCard.cardno //银行卡对应的市民卡号
+                    this.applytime = systemUtilService.sysdatetime.hostdatetime
+                    this.termtype = "app"
+                    this.status = ConstantUtil.CITIZENCARD_LOSSAPPLY_STATUS_APPLY
+                    this.sendcnt = 0
+                    this.lastsaved = systemUtilService.sysdatetime.sysdate
+                    this.tenantId = card.tenantid ?: Constants.DEFAULT_TENANTID
+                })
+            }
+        }
         return result.apply {
             this.retcode = 0
             this.retmsg = "ok"
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/dali_datasync_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/dali_datasync_service_impl.kt
index 96b13f8..ff32235 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/dali_datasync_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/dali_datasync_service_impl.kt
@@ -146,7 +146,7 @@
                     cityCard.status = TradeDict.STATUS_CLOSED
                 }
             } else {
-                //卡片的其他状态,代表交易状态
+                //卡片的其他状态,代表交易状态。主状态改为正常，交易状态覆盖
                 if (TradeDict.STATUS_NORMAL != cityCard.transStatus) {
                     cardUpdateFlag = true
                     cityCard.status = TradeDict.STATUS_NORMAL
@@ -157,6 +157,12 @@
                 }
             }
 
+            //fixme: 公交卡类型
+            if (bean.cardType.trim() != cityCard.busCardType) {
+                cardUpdateFlag = true
+                cityCard.busCardType = bean.cardType.trim()
+            }
+
             if (cardUpdateFlag) {
                 cityCard.lastsaved = systime.hostdatetime
                 cardDao.save(cityCard) //更新
@@ -165,7 +171,10 @@
             cityCard = TCard().apply {
                 cardno = bean.cardno.trim()
                 cardtype = ConstantUtil.CARDTYPE_CITIZENCARD
-                cardphyid = bean.cardphyid.trim()
+                cardphyid = when (bean.cardphyid.isNullOrBlank()) {
+                    true -> bean.cardno.trim()
+                    false -> bean.cardphyid!!.trim()
+                }
                 status = when (TradeDict.STATUS_CLOSED == cardStatus) {
                     true -> TradeDict.STATUS_CLOSED
                     false -> TradeDict.STATUS_NORMAL
@@ -174,6 +183,7 @@
                     true -> TradeDict.STATUS_ABNORMAL
                     false -> cardStatus
                 }
+                busCardType = bean.cardType.trim()
                 expiredate = bean.expiredate.trim()
                 signed = false
                 userid = person.userid
@@ -189,12 +199,19 @@
                 bankCard = TCard().apply {
                     cardno = bean.bankcardno!!.trim()
                     cardtype = ConstantUtil.CARDTYPE_BANKCARD
-                    cardphyid = bean.cardphyid.trim()
+                    cardphyid = when (bean.cardphyid.isNullOrBlank()) {
+                        true -> bean.cardno.trim()
+                        false -> bean.cardphyid!!.trim()
+                    }
                     status = when (TradeDict.STATUS_CLOSED == cardStatus) {
                         true -> TradeDict.STATUS_CLOSED
                         false -> TradeDict.STATUS_NORMAL
                     }
-                    transStatus = TradeDict.STATUS_NORMAL
+                    transStatus = when (TradeDict.STATUS_CLOSED == cardStatus) {
+                        true -> TradeDict.STATUS_ABNORMAL
+                        false -> cardStatus
+                    }
+                    busCardType = bean.cardType.trim()
                     expiredate = "21991231"
                     signed = false
                     userid = person.userid
@@ -209,6 +226,36 @@
                 if (bankCard.userid != person.userid) {
                     throw TransactionProcessException(3000, "银行卡已被人绑定")
                 }
+
+                var bankUpdate = false
+                if (TradeDict.STATUS_CLOSED == cardStatus) {
+                    //注销卡片
+                    if (bankCard.status != TradeDict.STATUS_CLOSED) {
+                        bankUpdate = true
+                        bankCard.status = TradeDict.STATUS_CLOSED
+                    }
+                } else {
+                    //卡片的其他状态,代表交易状态。主状态改为正常，交易状态覆盖
+                    if (TradeDict.STATUS_NORMAL != bankCard.transStatus) {
+                        bankUpdate = true
+                        bankCard.status = TradeDict.STATUS_NORMAL
+                    }
+                    if (cardStatus != bankCard.transStatus) {
+                        bankUpdate = true
+                        bankCard.transStatus = cardStatus
+                    }
+                }
+
+                //fixme: 公交卡类型
+                if (bean.cardType.trim() != bankCard.busCardType) {
+                    bankUpdate = true
+                    bankCard.busCardType = bean.cardType.trim()
+                }
+
+                if(bankUpdate){
+                    bankCard.lastsaved = systime.hostdatetime
+                    cardDao.save(bankCard) //更新
+                }
             }
         }
 
@@ -236,6 +283,7 @@
             this.idno = bean.idno
             this.mobile = bean.mobile
             this.email = bean.email
+            this.busCardType = bean.cardType
             this.status = TradeDict.DTL_STATUS_FAIL
             this.remark = errmsg
             this.lastsaved = systemUtilService.sysdatetime.hostdatetime
@@ -264,6 +312,7 @@
             this.idno = temp.idno
             this.mobile = temp.mobile
             this.email = temp.email
+            this.cardType = temp.busCardType
         }
         bean.checkParam()
         if (doUpdateUserInfos(bean)) {
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/qrcode_srvice_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/qrcode_srvice_impl.kt
index f26dafa..38b6374 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/qrcode_srvice_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/qrcode_srvice_impl.kt
@@ -3,6 +3,8 @@
 import com.google.gson.Gson
 import com.supwisdom.dlpay.api.bean.ApiResponse
 import com.supwisdom.dlpay.api.bean.DoorQrcodeResponse
+import com.supwisdom.dlpay.api.bean.QrcodeParam
+import com.supwisdom.dlpay.api.service.CardService
 import com.supwisdom.dlpay.api.service.QRCodeService
 import com.supwisdom.dlpay.api.service.UserService
 import com.supwisdom.dlpay.framework.service.SystemUtilService
@@ -26,6 +28,8 @@
     @Autowired
     lateinit var userService: UserService
     @Autowired
+    lateinit var cardService: CardService
+    @Autowired
     lateinit var redisTemplate: RedisTemplate<String, String>
 
     val logger = KotlinLogging.logger { }
@@ -50,6 +54,17 @@
             resp.retmsg = "用户未绑定身份"
             return resp
         }
+        val bankCard = cardService.getBankcardByUserid(muser.userid!!)
+        if (null == bankCard) {
+            resp.retcode = 1
+            resp.retmsg = "用户未绑定银行卡"
+            return resp
+        } else if (!bankCard.signed) {
+            resp.retcode = 1
+            resp.retmsg = "银行卡未签约"
+            return resp
+        }
+
         val totp = QrCodeTotpUtil.generateTOTP(muser.secertkey)
         val rowdata = QrcodeRawData()
         rowdata.userid = muser.userid
@@ -66,6 +81,32 @@
         return resp
     }
 
+    override fun encodeCode(param: QrcodeParam): ApiResponse {
+        var resp = ApiResponse()
+        val uid = param.uid
+        val rootkey = systemUtilService.getBusinessValue("aes.cfb.rootkey")
+        val iv = systemUtilService.getBusinessValue("aes.cfb.iv")
+        if (rootkey.isNullOrEmpty()||iv.isNullOrEmpty()) {
+            resp.retcode = 1
+            resp.retmsg = "秘钥未配置"
+            return resp
+        }
+        val totp = QrCodeTotpUtil.generateTOTP(param.secertkey)
+        val rowdata = QrcodeRawData()
+        rowdata.userid = param.userid
+        rowdata.setTotp(totp)
+        val orgData = Gson().toJson(rowdata)
+        val publicKey = RSAKeysGenerate.getPublicKey(param.rsapublic)
+        val encdata = org.apache.commons.codec.binary.Base64.encodeBase64String(RSAKeysGenerate.encryptbyte(publicKey, orgData))
+        val qrcode = AesUtil.encryptCFB("$uid:$encdata", rootkey, iv, "AES/CFB/NoPadding")
+
+        val key = MD5.encodeByMD5ToURLSafeBase64(qrcode)
+        redisTemplate.opsForValue().set(key,qrcode, Duration.ofSeconds(20))
+        resp.retcode = 0
+        resp.retmsg = key
+        return resp
+    }
+
     override fun decodeCode(qrcode :String): DoorQrcodeResponse {
 
         //解密
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/user_service_impl.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/user_service_impl.kt
index ce708b1..b98129a 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/user_service_impl.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/impl/user_service_impl.kt
@@ -230,4 +230,8 @@
             return null
         }
     }
+
+    override fun findPersonIsConsume(userid: String): Boolean {
+        return persondtlDao.findTopByUseridAndStatusAndTradeflag(userid, TradeDict.DTL_STATUS_SUCCESS, TradeDict.TRADE_FLAG_OUT) != null
+    }
 }
\ No newline at end of file
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/qrcode_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/qrcode_service.kt
index 029f6a8..d8b21ce 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/qrcode_service.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/qrcode_service.kt
@@ -2,8 +2,10 @@
 
 import com.supwisdom.dlpay.api.bean.ApiResponse
 import com.supwisdom.dlpay.api.bean.DoorQrcodeResponse
+import com.supwisdom.dlpay.api.bean.QrcodeParam
 
 interface QRCodeService {
     fun encodeCode(uid: String): ApiResponse
+    fun encodeCode(param: QrcodeParam): ApiResponse
     fun decodeCode(qrcode: String): DoorQrcodeResponse
 }
\ No newline at end of file
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt
index 33e9f2f..4d18a91 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/transaction_service.kt
@@ -116,11 +116,7 @@
             }
             if(-it.personDtl.amount>=0) {
                 //支付成功  进行积分处理
-                pointsService.singleHandlePoints(it.personDtl.userid, -it.personDtl.amount, refno);
-                pointsService.dayHandlePoints(it.personDtl.userid, refno);
-                pointsService.monthHandlePoints(it.personDtl.userid, refno);
-               // pointsService.pointsOutdate();
-                pointsService.pointsCompensate();
+                pointsService.consumePoints(it.personDtl.userid, -it.personDtl.amount, refno);
             }else {
                 //退款之后进行积分处理
                 pointsService.refundHandlePoints(it.personDtl.userid, it.reverseRefno);
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/user_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/user_service.kt
index 26fc2ff..a439f44 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/user_service.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/user_service.kt
@@ -54,4 +54,7 @@
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class), readOnly = true)
     fun findPersondtlDetailByUserid(userid:String, billno :String) : TPersondtl?
 
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class), readOnly = true)
+    fun findPersonIsConsume(userid:String): Boolean
+
 }
\ No newline at end of file
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
index 299fd7f..8de6f1e 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/mobile/MobileApi.kt
@@ -6,6 +6,8 @@
 import com.supwisdom.dlpay.api.service.QRCodeService
 import com.supwisdom.dlpay.api.service.UserService
 import com.supwisdom.dlpay.api.util.MobileNumberCheck
+import com.supwisdom.dlpay.citizencard.domain.TCitizencardLossApply
+import com.supwisdom.dlpay.citizencard.service.CitizencardManagerService
 import com.supwisdom.dlpay.framework.core.JwtConfig
 import com.supwisdom.dlpay.framework.core.JwtTokenUtil
 import com.supwisdom.dlpay.framework.domain.JwtRedis
@@ -267,6 +269,10 @@
     lateinit var jwtConfig: JwtConfig
     @Autowired
     lateinit var qrcodeService:QRCodeService
+    @Autowired
+    lateinit var citizencardManagerService: CitizencardManagerService
+    @Autowired
+    lateinit var systemUtilService: SystemUtilService
     val logger = KotlinLogging.logger { }
 
     @RequestMapping("/idtypes")
@@ -850,6 +856,19 @@
         }
         card.transStatus = TradeDict.STATUS_LOST
         mobileApiService.saveCard(card)
+        mobileApiService.findCardByUseridAndCardphyid(card.userid, ConstantUtil.CARDTYPE_CITIZENCARD, card.cardphyid)?.let { cityCard ->
+            citizencardManagerService.saveOrUpdateCitizencardLossApply(TCitizencardLossApply().apply {
+                this.refno = systemUtilService.refno
+                this.cardno = cityCard.cardno //银行卡对应的市民卡号
+                this.applytime = systemUtilService.sysdatetime.hostdatetime
+                this.termtype = "app"
+                this.uid = user.uid
+                this.status = ConstantUtil.CITIZENCARD_LOSSAPPLY_STATUS_APPLY
+                this.sendcnt = 0
+                this.lastsaved = systemUtilService.sysdatetime.sysdate
+                this.tenantId = card.tenantid ?: Constants.DEFAULT_TENANTID
+            })
+        }
         return JsonResult.ok("ok")
     }
 
diff --git a/payapi/src/main/resources/static/libs/custom.js b/payapi/src/main/resources/static/libs/custom.js
index 0307a2d..8c81562 100644
--- a/payapi/src/main/resources/static/libs/custom.js
+++ b/payapi/src/main/resources/static/libs/custom.js
@@ -67,6 +67,7 @@
                     .addNewDict("accountStatusList")
                     .addNewDict("allSubjectList")
                     .addNewDict("transcodeList")
+                    .addNewDict("busCardTypeList")
             },
             getDict: function (dictType) {
                 var dict, that = this;
diff --git a/payapi/src/main/resources/templates/system/user/addcard.html b/payapi/src/main/resources/templates/system/user/addcard.html
index 0151106..1fb8fc1 100644
--- a/payapi/src/main/resources/templates/system/user/addcard.html
+++ b/payapi/src/main/resources/templates/system/user/addcard.html
@@ -120,6 +120,21 @@
         </div>
     </div>
 
+    <div class="layui-form-item">
+        <div class="layui-inline">
+            <label class="layui-form-label"><span style="color: red;">*</span>公交卡类型</label>
+            <div class="layui-input-inline">
+                <select name="buscardtype" class="layui-input layui-select" lay-verify="required">
+                    <option value="80" selected>80_普通卡</option>
+                    <option value="81" selected>81_学生卡</option>
+                    <option value="82" selected>82_老年卡</option>
+                    <option value="83" selected>83_爱心卡</option>
+                    <option value="84" selected>84_阳光卡</option>
+                </select>
+            </div>
+        </div>
+    </div>
+
     <div class="layui-form-item model-form-footer">
         <button class="layui-btn" lay-filter="citizencard-add-form-submit" lay-submit  id="citizencard-add-ok">保存</button>
         <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>
diff --git a/payapi/src/main/resources/templates/system/user/card.html b/payapi/src/main/resources/templates/system/user/card.html
index 251daa4..1759183 100644
--- a/payapi/src/main/resources/templates/system/user/card.html
+++ b/payapi/src/main/resources/templates/system/user/card.html
@@ -81,12 +81,18 @@
             url: '[[@{/user/cardlist}]]',
             page: true,
             toolbar: '#citizencard-table-toolbar',
+            defaultToolbar: ['filter'],
             cols: [
                 [
                     {type:'radio', align: 'center', width: 35, fixed: 'left'},
                     {field:'cardno',title:'市民卡号', align: 'center', width: 120, fixed: 'left', sort: true},
                     {field:'cardphyid',title:'物理卡号', align: 'center', width: 120, fixed: 'left'},
                     {
+                        field: 'buscardtype', title: '公交卡类型', align: 'center', width: 100, templet: function (d) {
+                          return getTempDictValue('busCardTypeList', d.buscardtype);
+                        }
+                    },
+                    {
                         field: 'expiredate', title: '有效期', align: 'center', width: 120, templet: function (d) {
                             return dateFormat('' + d.expiredate);
                         }
diff --git a/payapi/src/main/resources/templates/system/user/updatecard.html b/payapi/src/main/resources/templates/system/user/updatecard.html
index 7e1cb74..49d0002 100644
--- a/payapi/src/main/resources/templates/system/user/updatecard.html
+++ b/payapi/src/main/resources/templates/system/user/updatecard.html
@@ -122,6 +122,21 @@
         </div>
     </div>
 
+    <div class="layui-form-item">
+        <div class="layui-inline">
+            <label class="layui-form-label"><span style="color: red;">*</span>公交卡类型</label>
+            <div class="layui-input-inline">
+                <select name="buscardtype" class="layui-input layui-select" lay-verify="required">
+                    <option value="80" selected>80_普通卡</option>
+                    <option value="81" selected>81_学生卡</option>
+                    <option value="82" selected>82_老年卡</option>
+                    <option value="83" selected>83_爱心卡</option>
+                    <option value="84" selected>84_阳光卡</option>
+                </select>
+            </div>
+        </div>
+    </div>
+
     <div class="layui-form-item model-form-footer">
         <button class="layui-btn" lay-filter="citizencard-modify-form-submit" lay-submit  id="citizencard-modify-ok">保存</button>
         <button class="layui-btn layui-btn-primary" type="button" ew-event="closeDialog">取消</button>
@@ -159,7 +174,8 @@
                 idtype:cardBean.idtype,
                 idno:cardBean.idno,
                 mobile:cardBean.mobile,
-                email:cardBean.email
+                email:cardBean.email,
+                buscardtype:cardBean.buscardtype
             });
         }
 
