diff --git a/payapi/build.gradle b/payapi/build.gradle
index ed8ce9b..d5c3abf 100644
--- a/payapi/build.gradle
+++ b/payapi/build.gradle
@@ -89,6 +89,7 @@
     implementation files('libs/sms.jar')
 //    implementation files('libs/ojdbc6.jar')
     implementation 'commons-dbcp:commons-dbcp:1.4'
+    implementation 'commons-beanutils:commons-beanutils:1.9.3'
 
     implementation project(':payapi-common')
     /*支付宝SDK*/
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/CitycardTempDao.java b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/CitycardTempDao.java
new file mode 100644
index 0000000..fb00e85
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/CitycardTempDao.java
@@ -0,0 +1,15 @@
+package com.supwisdom.dlpay.api.dao;
+
+import com.supwisdom.dlpay.api.domain.TCitycardTemp;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Query;
+
+import java.util.List;
+
+public interface CitycardTempDao extends JpaRepository<TCitycardTemp, String> {
+  @Query("from TCitycardTemp where id=?1 ")
+  List<TCitycardTemp> findbyTempid(String tempid);
+
+  @Query("from TCitycardTemp where lastsaved>=?1 order by lastsaved ")
+  List<TCitycardTemp> findbyUpdtime(String updtime);
+}
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
new file mode 100644
index 0000000..7d7f454
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/domain/TCitycardTemp.java
@@ -0,0 +1,188 @@
+package com.supwisdom.dlpay.api.domain;
+
+import org.hibernate.annotations.GenericGenerator;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "TB_CITYCARD_TEMP")
+public class TCitycardTemp {
+  @Id
+  @GenericGenerator(name = "idGenerator", strategy = "uuid")
+  @GeneratedValue(generator = "idGenerator")
+  @Column(name = "ID", nullable = false, length = 32)
+  private String id;
+
+  @Column(name = "CARDNO", length = 32)
+  private String cardno;
+
+  @Column(name = "CARDPHYID", length = 20)
+  private String cardphyid;
+
+  @Column(name = "EXPIREDATE", length = 8)
+  private String expiredate;
+
+  @Column(name = "CARDSTATUS", length = 10)
+  private String cardstatus;
+
+  @Column(name = "BANKCARDNO", length = 32)
+  private String bankcardno;
+
+  @Column(name = "USERNAME", length = 200)
+  private String username;
+
+  @Column(name = "SEX", length = 10)
+  private String sex;
+
+  @Column(name = "IDTYPE", length = 10)
+  private String idtype;
+
+  @Column(name = "IDNO", length = 60)
+  private String idno;
+
+  @Column(name = "MOBILE", length = 30)
+  private String mobile;
+
+  @Column(name = "EMAIL", length = 60)
+  private String email;
+
+  @Column(name = "STATUS", length = 20)
+  private String status;
+
+  @Column(name = "REMARK", length = 600)
+  private String remark;
+
+  @Column(name = "LASTSAVED", length = 14)
+  private String lastsaved;
+
+  @Column(name = "tenantid", length = 20)
+  private String tenantid = "";
+
+  public String getId() {
+    return id;
+  }
+
+  public void setId(String id) {
+    this.id = id;
+  }
+
+  public String getCardno() {
+    return cardno;
+  }
+
+  public void setCardno(String cardno) {
+    this.cardno = cardno;
+  }
+
+  public String getCardphyid() {
+    return cardphyid;
+  }
+
+  public void setCardphyid(String cardphyid) {
+    this.cardphyid = cardphyid;
+  }
+
+  public String getExpiredate() {
+    return expiredate;
+  }
+
+  public void setExpiredate(String expiredate) {
+    this.expiredate = expiredate;
+  }
+
+  public String getCardstatus() {
+    return cardstatus;
+  }
+
+  public void setCardstatus(String cardstatus) {
+    this.cardstatus = cardstatus;
+  }
+
+  public String getBankcardno() {
+    return bankcardno;
+  }
+
+  public void setBankcardno(String bankcardno) {
+    this.bankcardno = bankcardno;
+  }
+
+  public String getUsername() {
+    return username;
+  }
+
+  public void setUsername(String username) {
+    this.username = username;
+  }
+
+  public String getSex() {
+    return sex;
+  }
+
+  public void setSex(String sex) {
+    this.sex = sex;
+  }
+
+  public String getIdtype() {
+    return idtype;
+  }
+
+  public void setIdtype(String idtype) {
+    this.idtype = idtype;
+  }
+
+  public String getIdno() {
+    return idno;
+  }
+
+  public void setIdno(String idno) {
+    this.idno = idno;
+  }
+
+  public String getMobile() {
+    return mobile;
+  }
+
+  public void setMobile(String mobile) {
+    this.mobile = mobile;
+  }
+
+  public String getEmail() {
+    return email;
+  }
+
+  public void setEmail(String email) {
+    this.email = email;
+  }
+
+  public String getStatus() {
+    return status;
+  }
+
+  public void setStatus(String status) {
+    this.status = status;
+  }
+
+  public String getRemark() {
+    return remark;
+  }
+
+  public void setRemark(String remark) {
+    this.remark = remark;
+  }
+
+  public String getLastsaved() {
+    return lastsaved;
+  }
+
+  public void setLastsaved(String lastsaved) {
+    this.lastsaved = lastsaved;
+  }
+
+  public String getTenantid() {
+    return tenantid;
+  }
+
+  public void setTenantid(String tenantid) {
+    this.tenantid = tenantid;
+  }
+}
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 2657b51..1556941 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
@@ -3,6 +3,7 @@
 import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import org.apache.commons.beanutils.BeanUtils;
 
 public class StringUtil {
   /**
@@ -166,4 +167,16 @@
       return url+"/"+path;
     }
   }
+
+  public static void transforToBean(List<String> fields, List<String> columns, Object bean) throws Exception {
+    if (null == fields) throw new Exception("fields is null");
+    if (null == columns) throw new Exception("columns is null");
+    if (fields.size() < columns.size()) throw new Exception("错误的列定义");
+    Map<String, String> data = new HashMap<>(0);
+    for (int i = 0; i < fields.size(); i++) {
+      data.put(fields.get(i), columns.get(i));
+    }
+    BeanUtils.populate(bean, data);
+    return;
+  }
 }
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/dali_datasync_api_controller.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/dali_datasync_api_controller.kt
index 80a9ca9..db41364 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/dali_datasync_api_controller.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/controller/dali_datasync_api_controller.kt
@@ -1,17 +1,22 @@
 package com.supwisdom.dlpay.api.controller
 
 import com.google.gson.Gson
+import com.supwisdom.dlpay.api.bean.DaliDatasyncDetail
 import com.supwisdom.dlpay.api.bean.DaliDatasyncErrorDetail
 import com.supwisdom.dlpay.api.bean.DaliDatasyncParam
 import com.supwisdom.dlpay.api.exception.RequestParamCheckException
 import com.supwisdom.dlpay.api.service.DaliDatasyncService
 import com.supwisdom.dlpay.framework.ResponseBodyBuilder
 import com.supwisdom.dlpay.framework.service.SystemUtilService
+import com.supwisdom.dlpay.framework.util.DateUtil
 import com.supwisdom.dlpay.framework.util.StringUtil
 import com.supwisdom.dlpay.framework.util.SysparaUtil
+import mu.KotlinLogging
 import org.springframework.beans.factory.annotation.Autowired
 import org.springframework.http.ResponseEntity
 import org.springframework.web.bind.annotation.*
+import java.io.*
+import java.nio.charset.Charset
 
 @RequestMapping("/api/common")
 @RestController
@@ -21,6 +26,8 @@
     @Autowired
     lateinit var daliDatasyncService: DaliDatasyncService
 
+    private val logger = KotlinLogging.logger { }
+
     /**
      * ============================================================================
      * 大理卡管系统推送市民卡信息同步接口
@@ -65,12 +72,27 @@
                         errcode = "2001"
                         errmsg = e1.message ?: "明细数据关键字段为空"
                     })
+
+                    try {
+                        daliDatasyncService.saveUpdateUserinfoErrors(detail, e1.message ?: "明细数据关键字段为空") //记录失败数据
+                    } catch (e3: Exception) {
+                        logger.error("保存错误同步数据失败" + Gson().toJson(detail))
+                        e3.printStackTrace()
+                    }
+
                 } catch (e2: Exception) {
                     errlist.add(DaliDatasyncErrorDetail().apply {
                         cardno = detail.cardno
                         errcode = "3000"
                         errmsg = e2.message ?: "明细处理错误"
                     })
+
+                    try {
+                        daliDatasyncService.saveUpdateUserinfoErrors(detail, e2.message ?: e2.javaClass.name) //记录失败数据
+                    } catch (e4: Exception) {
+                        logger.error("保存错误同步数据失败" + Gson().toJson(detail))
+                        e4.printStackTrace()
+                    }
                 }
             }
 
@@ -90,4 +112,134 @@
         }
     }
 
+    /**
+     * ============================================================================
+     * 大理卡管系统第一次初始化数据txt导入接口
+     * ============================================================================
+     * */
+    @GetMapping("/import")
+    fun importDaliInitData(@RequestParam("filename") filename: String): ResponseEntity<Any> {
+        if (StringUtil.isEmpty(filename)) {
+            return ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .fail(30001, "请输入初始化数据txt文件全路径名"))
+        } else if (!filename.endsWith(".txt")) {
+            return ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .fail(30001, "请输入初始化数据txt文件"))
+        }
+
+        try {
+            val txtFile = File(filename)
+            val batchSize = 1000
+            var sumCount = 0
+            var failCount = 0
+
+            txtFile.bufferedReader(Charset.forName("GBK")).use { reader ->
+                val header = reader.readLine()
+                val fields = header.split("|")
+
+                var datalist = ArrayList<DaliDatasyncDetail>()
+                while (true) {
+                    val line = reader.readLine() ?: break
+                    if (StringUtil.isEmpty(line)) continue
+                    val column = line.split("|")
+                    val bean = DaliDatasyncDetail()
+                    StringUtil.transforToBean(fields, column, bean)
+                    datalist.add(bean)
+                    sumCount++
+                    if (datalist.size >= batchSize) {
+                        val fcnt = doBatchSaveData(datalist) //保存
+                        failCount += fcnt
+                        datalist.clear()
+                    }
+                }
+
+                //保存最后的不足batchSize的记录
+                if (datalist.size > 0) {
+                    val fcnt = doBatchSaveData(datalist) //保存
+                    failCount += fcnt
+                }
+            }
+
+            return ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .data("totalcnt", sumCount)
+                    .data("failcnt", failCount)
+                    .data("successcnt", sumCount - failCount)
+                    .success("导入请求成功"))
+            
+        } catch (ex: Exception) {
+            ex.printStackTrace()
+            return ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .exception(4000, ex, "处理异常！" + (ex.message ?: ex.javaClass.name)))
+        }
+
+    }
+
+    private fun doBatchSaveData(list: ArrayList<DaliDatasyncDetail>): Int {
+        try {
+            daliDatasyncService.doBatchSaveOrUpdateUserInfos(list)
+            return 0  //批量保存成功，无失败
+        } catch (e1: Exception) {
+        }
+
+        //批量保存有异常，逐笔保存
+        var failcnt = 0
+        for (bean in list) {
+            try {
+                bean.checkParam()
+                daliDatasyncService.doUpdateUserInfos(bean)
+            } catch (e2: Exception) {
+                failcnt++
+                try {
+                    daliDatasyncService.saveUpdateUserinfoErrors(bean, e2.message ?: e2.javaClass.name)
+                } catch (e3: Exception) {
+                    logger.error("初始化txt文件保存错误同步数据失败" + Gson().toJson(bean))
+                    e3.printStackTrace()
+                }
+                continue
+            }
+        }
+        return failcnt
+    }
+
+    /**
+     * ============================================================================
+     * 大理卡管系统错误同步信息补处理
+     * ============================================================================
+     * */
+    @GetMapping("/dealerror")
+    fun doDealErrorRecord(@RequestParam(name = "tempid", required = false, defaultValue = "") tempid: String,
+                          @RequestParam(name = "updtime", required = false, defaultValue = "") updtime: String): ResponseEntity<Any> {
+        if (StringUtil.isEmpty(tempid) && !DateUtil.checkDatetimeValid(updtime, DateUtil.DATETIME_FMT)) {
+            return ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .fail(99, "请求参数错误[tempid和updtime不能同时为空]"))
+        }
+
+        try {
+            var totalcnt = 0
+            var failcnt = 0
+            var detailMsg = ""
+            daliDatasyncService.getErrorUpdateUserinfos(tempid, updtime).forEach {
+                totalcnt++
+                try {
+                    daliDatasyncService.dealErrorRecord(it)
+                } catch (e1: Exception) {
+                    failcnt++
+                    detailMsg += ("${it.cardno}同步出错：" + (e1.message ?: e1.javaClass.name) + "\n")
+                }
+            }
+
+            return ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .data("totalcnt", totalcnt)
+                    .data("failcnt", failcnt)
+                    .data("successcnt", totalcnt - failcnt)
+                    .data("detailmsg", detailMsg)
+                    .success("导入成功"))
+        } catch (ex: Exception) {
+            ex.printStackTrace()
+            return ResponseEntity.ok(ResponseBodyBuilder.create()
+                    .exception(99, ex, "处理异常！" + (ex.message ?: ex.javaClass.name)))
+        }
+    }
+
+
 }
diff --git a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/dali_datasync_service.kt b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/dali_datasync_service.kt
index d5a960f..1356d46 100644
--- a/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/dali_datasync_service.kt
+++ b/payapi/src/main/kotlin/com/supwisdom/dlpay/api/service/dali_datasync_service.kt
@@ -2,12 +2,25 @@
 
 import com.supwisdom.dlpay.api.bean.DaliDatasyncDetail
 import com.supwisdom.dlpay.api.domain.TCard
+import com.supwisdom.dlpay.api.domain.TCitycardTemp
 import org.springframework.transaction.annotation.Propagation
 import org.springframework.transaction.annotation.Transactional
 
-interface DaliDatasyncService{
+interface DaliDatasyncService {
 
-    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = arrayOf(Exception::class))
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = [Exception::class])
     fun doUpdateUserInfos(bean: DaliDatasyncDetail): Boolean
 
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = [Exception::class])
+    fun doBatchSaveOrUpdateUserInfos(userlist: ArrayList<DaliDatasyncDetail>): Boolean
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = [Exception::class])
+    fun saveUpdateUserinfoErrors(bean: DaliDatasyncDetail, errmsg: String)
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = [Exception::class], readOnly = true)
+    fun getErrorUpdateUserinfos(tmpid: String, updtime: String): List<TCitycardTemp>
+
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = [Exception::class])
+    fun dealErrorRecord(temp: TCitycardTemp)
+
 }
\ No newline at end of file
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 cc4cf56..59833f6 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
@@ -3,9 +3,11 @@
 import com.supwisdom.dlpay.api.bean.DaliDatasyncDetail
 import com.supwisdom.dlpay.api.dao.AccountDao
 import com.supwisdom.dlpay.api.dao.CardDao
+import com.supwisdom.dlpay.api.dao.CitycardTempDao
 import com.supwisdom.dlpay.api.dao.PersonDao
 import com.supwisdom.dlpay.api.domain.TAccount
 import com.supwisdom.dlpay.api.domain.TCard
+import com.supwisdom.dlpay.api.domain.TCitycardTemp
 import com.supwisdom.dlpay.api.domain.TPerson
 import com.supwisdom.dlpay.api.service.DaliDatasyncService
 import com.supwisdom.dlpay.api.types.IDTypes
@@ -26,6 +28,8 @@
     @Autowired
     lateinit var cardDao: CardDao
     @Autowired
+    lateinit var citycardTempDao: CitycardTempDao
+    @Autowired
     lateinit var systemUtilService: SystemUtilService
 
     override fun doUpdateUserInfos(bean: DaliDatasyncDetail): Boolean {
@@ -79,7 +83,7 @@
                 person = personDao.save(person)
             }
         } else {
-            //修改
+            //新增
             person = TPerson().apply {
                 name = bean.username
                 this.sex = sex
@@ -110,8 +114,8 @@
                 lastdayDpsamt = 0.00
                 opendate = systime.hostdate
             }
-            account.generateTac()
             account.tenantid = TenantContext.getTenantSchema()
+            account.generateTac()
             accountDao.save(account)
         }
 
@@ -125,25 +129,25 @@
             }
 
             //fixme: bean.cardstatus 判断修改状态
-            if(TradeDict.STATUS_CLOSED == cardStatus){
+            if (TradeDict.STATUS_CLOSED == cardStatus) {
                 //注销卡片
-                if(cityCard.status != TradeDict.STATUS_CLOSED){
+                if (cityCard.status != TradeDict.STATUS_CLOSED) {
                     cardUpdateFlag = true
                     cityCard.status = TradeDict.STATUS_CLOSED
                 }
-            }else{
+            } else {
                 //卡片的其他状态,代表交易状态
-                if(TradeDict.STATUS_NORMAL != cityCard.transStatus){
+                if (TradeDict.STATUS_NORMAL != cityCard.transStatus) {
                     cardUpdateFlag = true
                     cityCard.status = TradeDict.STATUS_NORMAL
                 }
-                if(cardStatus != cityCard.transStatus){
+                if (cardStatus != cityCard.transStatus) {
                     cardUpdateFlag = true
-                    cityCard.transStatus=cardStatus
+                    cityCard.transStatus = cardStatus
                 }
             }
 
-            if(cardUpdateFlag){
+            if (cardUpdateFlag) {
                 cityCard.lastsaved = systime.hostdatetime
                 cardDao.save(cityCard) //更新
             }
@@ -201,4 +205,60 @@
         return true
     }
 
+    override fun doBatchSaveOrUpdateUserInfos(userlist: ArrayList<DaliDatasyncDetail>): Boolean {
+        for (bean in userlist) {
+            bean.checkParam()
+            doUpdateUserInfos(bean)
+        }
+        return true
+    }
+
+    override fun saveUpdateUserinfoErrors(bean: DaliDatasyncDetail, errmsg: String) {
+        citycardTempDao.save(TCitycardTemp().apply {
+            this.cardno = bean.cardno
+            this.cardphyid = bean.cardphyid
+            this.expiredate = bean.expiredate
+            this.cardstatus = bean.cardstatus
+            this.bankcardno = bean.bankcardno
+            this.username = bean.username
+            this.sex = bean.sex
+            this.idtype = bean.idtype
+            this.idno = bean.idno
+            this.mobile = bean.mobile
+            this.email = bean.email
+            this.status = TradeDict.DTL_STATUS_FAIL
+            this.remark = errmsg
+            this.lastsaved = systemUtilService.sysdatetime.hostdatetime
+            this.tenantid = TenantContext.getTenantSchema()
+        })
+    }
+
+    override fun getErrorUpdateUserinfos(tmpid: String, updtime: String): List<TCitycardTemp> {
+        if (!StringUtil.isEmpty(tmpid)) {
+            return citycardTempDao.findbyTempid(tmpid.trim()) ?: ArrayList<TCitycardTemp>()
+        } else {
+            return citycardTempDao.findbyUpdtime(updtime) ?: ArrayList<TCitycardTemp>()
+        }
+    }
+
+    override fun dealErrorRecord(temp: TCitycardTemp) {
+        val bean = DaliDatasyncDetail().apply {
+            this.cardno = temp.cardno
+            this.cardphyid = temp.cardphyid
+            this.expiredate = temp.expiredate
+            this.cardstatus = temp.cardstatus
+            this.bankcardno = temp.bankcardno
+            this.username = temp.username
+            this.sex = temp.sex
+            this.idtype = temp.idtype
+            this.idno = temp.idno
+            this.mobile = temp.mobile
+            this.email = temp.email
+        }
+        bean.checkParam()
+        if (doUpdateUserInfos(bean)) {
+            citycardTempDao.delete(temp) //删除
+        }
+    }
+
 }
\ No newline at end of file
