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 55aa02e..575d011 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
@@ -32,7 +32,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);
@@ -55,4 +58,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..657b64d 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 {
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 14a7bf8..755d619 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,13 +1,18 @@
 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.bean.*
 import com.supwisdom.dlpay.api.exception.RequestParamCheckException
 import com.supwisdom.dlpay.api.service.CardService
 import com.supwisdom.dlpay.api.service.KafkaSendMsgService
+import com.supwisdom.dlpay.api.service.QRCodeService
 import com.supwisdom.dlpay.api.service.UserService
 import com.supwisdom.dlpay.exception.TransactionException
 import com.supwisdom.dlpay.framework.ResponseBodyBuilder
+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
@@ -27,6 +32,15 @@
     private lateinit var kafkaSendMsgService: KafkaSendMsgService
     @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
+
 
 
     @PostMapping("/open")
@@ -174,8 +188,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"))
@@ -184,6 +198,16 @@
                     .fail(500, ret.get("msg") as String))
         }
     }
+    @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()
@@ -263,4 +287,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 9a0c135..79dbbb9 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
@@ -163,9 +171,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
     }
@@ -193,7 +201,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 dbb5681..e7cfca6 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
@@ -109,11 +109,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
             });
         }
 
