diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/DebitCreditDtlDao.java b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/DebitCreditDtlDao.java
index 0b5e733..b55c02c 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/dao/DebitCreditDtlDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/dao/DebitCreditDtlDao.java
@@ -16,9 +16,9 @@
   @Query(value = "select a.drsubjno,case when a.drsubjno='220201' then '220201' else a.draccno end as draccno, a.crsubjno,case when a.crsubjno='220201' then '220201' else a.craccno end as craccno," +
       "a.summary,count(distinct a.refno) as transcnt,sum(a.amount) as transamt " +
       "from TB_USERDTL_DEBITCREDIT a left join TB_TRANSACTIONMAIN b on a.refno=b.refno " +
-      "where b.status='success' and b.accdate=:settledate " +
+      "where a.TENANTID=:tenantid and b.status='success' and b.accdate=:settledate " +
       "group by a.drsubjno,case when a.drsubjno='220201' then '220201' else a.draccno end,a.crsubjno,case when a.crsubjno='220201' then '220201' else a.craccno end,a.summary ", nativeQuery = true)
-  List<VoucherTemp> getVoucherData(@Param("settledate") String settledate);
+  List<VoucherTemp> getVoucherData(@Param("settledate") String settledate, @Param("tenantid") String tenantid);
 
   List<TDebitCreditDtl> findByRefno(String refno);
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/api/service/SourceTypeService.java b/payapi/src/main/java/com/supwisdom/dlpay/api/service/SourceTypeService.java
index c0d78b7..8e4048b 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/api/service/SourceTypeService.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/api/service/SourceTypeService.java
@@ -25,9 +25,6 @@
   @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
   boolean checkShopSourceType(String shopaccno, String sourceType, boolean anonymousflag) throws Exception;
 
-  @Transactional
-  List<TSourceType> getAllEnabledSourcetype();
-
   /**
    * 获取支付能力充值参数全局配置
    */
@@ -46,6 +43,9 @@
   @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
   boolean checkShopCanReverse(String sourcetype, String shopaccno) throws Exception;
 
+  @Transactional(rollbackFor = Exception.class, readOnly = true)
+  List<TSourceType> getAllEnabledSourcetype();
+
   @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class, readOnly = true)
   TSourceTypeCheckStatus getSourceTypeCheckStatus(String sourceType);
 
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/core/DayendSettleTask.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/core/DayendSettleTask.java
index 86fb351..f0cc66c 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/core/DayendSettleTask.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/core/DayendSettleTask.java
@@ -1,5 +1,6 @@
 package com.supwisdom.dlpay.framework.core;
 
+import com.supwisdom.dlpay.exception.TransactionException;
 import com.supwisdom.dlpay.framework.domain.TSettleLog;
 import com.supwisdom.dlpay.framework.service.DayendSettleService;
 import com.supwisdom.dlpay.framework.tenant.TenantContext;
@@ -25,10 +26,10 @@
   @SchedulerLock(name = "DayendSettleTask", lockAtMostForString = "PT30M")
   public void doSettleTask() {
     if (logger.isDebugEnabled()) logger.debug("进入日结算任务！");
+    if (null == TenantContext.getTenantSchema()) TenantContext.setTenantSchema(Constants.DEFAULT_TENANTID);
+
     settleLog = dayendSettleService.doCreateSettleLog(); //记录日志
     try {
-      if (null == TenantContext.getTenantSchema()) TenantContext.setTenantSchema(Constants.DEFAULT_TENANTID);
-
       //step1: 账户校验(fixme: 清算任务？)
       long t1 = System.currentTimeMillis();
       if (!checkAccounts()) {
@@ -80,6 +81,9 @@
         dayendSettleService.doUpdateSettleLog(settleLog.update("0", "成功结算"));
       }
       return ret;
+    } catch (TransactionException ex) {
+      dayendSettleService.doUpdateSettleLog(settleLog.update("" + ex.code(), ex.getMessage()));
+      return false;
     } catch (Exception e) {
       if (!StringUtil.isEmpty(e.getMessage())) {
         dayendSettleService.doUpdateSettleLog(settleLog.update("-9", e.getMessage()));
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/PeriodDao.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/PeriodDao.java
index aa05bd7..bd32b18 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/PeriodDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/PeriodDao.java
@@ -1,7 +1,6 @@
 package com.supwisdom.dlpay.framework.dao;
 
 import com.supwisdom.dlpay.framework.domain.TPeriod;
-import com.supwisdom.dlpay.framework.domain.TPeriodPK;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Lock;
 import org.springframework.data.jpa.repository.Query;
@@ -11,11 +10,11 @@
 import javax.persistence.LockModeType;
 
 @Repository
-public interface PeriodDao extends JpaRepository<TPeriod, TPeriodPK> {
-  @Query(value = "from TPeriod t where t.periodYear=:periodyear and t.periodMonth=:periodmonth ")
-  TPeriod getPeriod(@Param("periodyear") Integer periodyear, @Param("periodmonth") Integer periodmonth);
+public interface PeriodDao extends JpaRepository<TPeriod, String> {
+  @Query(value = "from TPeriod t where t.periodYear=:periodyear and t.periodMonth=:periodmonth and t.tenantId=:tenantid ")
+  TPeriod getPeriod(@Param("periodyear") Integer periodyear, @Param("periodmonth") Integer periodmonth, @Param("tenantid") String tenantid);
 
   @Lock(LockModeType.PESSIMISTIC_WRITE)
-  @Query(value = "from TPeriod t where t.periodYear=:periodyear and t.periodMonth=:periodmonth ")
-  TPeriod getTPeriodWithLock(@Param("periodyear") Integer periodyear, @Param("periodmonth") Integer periodmonth);
+  @Query(value = "from TPeriod t where t.periodYear=:periodyear and t.periodMonth=:periodmonth and t.tenantId=:tenantid  ")
+  TPeriod getTPeriodWithLock(@Param("periodyear") Integer periodyear, @Param("periodmonth") Integer periodmonth, @Param("tenantid") String tenantid);
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/SettleCtlDao.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/SettleCtlDao.java
index ec8fadc..88e3eb2 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/SettleCtlDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/SettleCtlDao.java
@@ -19,8 +19,16 @@
   @Query(value = "from TSettlectl where booksetno=:booksetno ")
   TSettlectl findByBooksetnoWithLock(@Param("booksetno") Integer booksetno);
 
+  @Lock(value = LockModeType.PESSIMISTIC_WRITE)
+  @Query(value = "from TSettlectl where tenantId=:tenantid ")
+  TSettlectl findByTenantIdWithLock(@Param("tenantid") String tenantid);
+
   @Modifying(clearAutomatically = true)
   @Query(value = "update TB_SETTLECTL set PERIODYEAR=:peridyear,PERIODMONTH=:peridmonth where BOOKSETNO=1 ", nativeQuery = true)
   void updateSettlePeriod(@Param("peridyear") int peridyear, @Param("peridmonth") int peridmonth);
 
+  @Modifying(clearAutomatically = true)
+  @Query(value = "update TB_SETTLECTL set PERIODYEAR=:peridyear,PERIODMONTH=:peridmonth where TENANTID=:tenantid ", nativeQuery = true)
+  void updateSettlePeriodByTenantid(@Param("peridyear") int peridyear, @Param("peridmonth") int peridmonth, @Param("tenantid") String tenantid);
+
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/SettleLogDao.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/SettleLogDao.java
index 30de1ae..75b907a 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/SettleLogDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/SettleLogDao.java
@@ -2,8 +2,9 @@
 
 import com.supwisdom.dlpay.framework.domain.TSettleLog;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public interface SettleLogDao extends JpaRepository<TSettleLog, String> {
+public interface SettleLogDao extends JpaRepository<TSettleLog, String>, JpaSpecificationExecutor<TSettleLog> {
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccDao.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccDao.java
index f76cffa..db210cd 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccDao.java
@@ -14,8 +14,8 @@
 @Repository
 public interface ShopaccDao extends JpaRepository<TShopacc, String> {
 
-  @Query(value = "select t.SHOPACCNO from TB_SHOPACC t left join TB_SHOPACCDAY a on t.SHOPACCNO=a.SHOPACCNO and a.accdate=:lastsettday where a.SHOPACCNO is null ", nativeQuery = true)
-  List<String> getNewShopacc(@Param("lastsettday") String lastsettday);
+  @Query(value = "select t.SHOPACCNO from TB_SHOPACC t left join TB_SHOPACCDAY a on t.SHOPACCNO=a.SHOPACCNO and a.accdate=:lastsettday where t.TENANTID=:tenantid and a.SHOPACCNO is null ", nativeQuery = true)
+  List<String> getNewShopacc(@Param("lastsettday") String lastsettday, @Param("tenantid") String tenantid);
 
 
   @Query(value = "select shopname from TShopacc where shopaccno=:shopaccno ")
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccdayDao.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccdayDao.java
index ddc0265..bf0d37b 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccdayDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccdayDao.java
@@ -13,17 +13,17 @@
 @Repository
 public interface ShopaccdayDao extends JpaRepository<TShopaccday, TShopaccdayPK> {
 
-  @Query(value = "from TShopaccday t where t.accdate=:accdate ")
-  List<TShopaccday> getShopaccdayByAccdate(@Param("accdate") String accdate);
+  @Query(value = "from TShopaccday t where t.accdate=:accdate and t.tenantId=:tenantid ")
+  List<TShopaccday> getShopaccdayByAccdate(@Param("accdate") String accdate, @Param("tenantid") String tenantid);
 
   @Query(value = "from TShopaccday t where t.accdate=:accdate and t.shopaccno=:shopaccno ")
   TShopaccday getTShopaccdayById(@Param("accdate") String accdate, @Param("shopaccno") String shopaccno);
 
   @Modifying(clearAutomatically = true)
-  @Query(value = "update TB_SHOPACCDAY set balance=beginbal-dramt+cramt,updtime=:updtime where accdate=:accdate ", nativeQuery = true)
-  void updateShopaccdayBalance(@Param("accdate") String accdate,@Param("updtime")String updtime);
+  @Query(value = "update TB_SHOPACCDAY set balance=beginbal-dramt+cramt,updtime=:updtime where accdate=:accdate and TENANTID=:tenantid ", nativeQuery = true)
+  void updateShopaccdayBalance(@Param("accdate") String accdate,@Param("updtime")String updtime, @Param("tenantid") String tenantid);
 
-  @Query(value = "select sum(balance) as amount from TShopaccday where accdate=:accdate ")
-  Double getSumBalance(@Param("accdate") String accdate);
+  @Query(value = "select sum(balance) as amount from TShopaccday where accdate=:accdate and tenantId=:tenantid ")
+  Double getSumBalance(@Param("accdate") String accdate, @Param("tenantid") String tenantid);
 
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/SubjectDao.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/SubjectDao.java
index 78ecb03..c1fb3e8 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/SubjectDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/SubjectDao.java
@@ -10,19 +10,19 @@
 import java.util.List;
 
 @Repository
-public interface SubjectDao extends JpaRepository<TSubject, String> {
+public interface SubjectDao extends JpaRepository<TSubject, Integer> {
 
-  @Query(value = "select t.SUBJNO from TB_SUBJECT t left join TB_SUBJECTBAL a on t.SUBJNO=a.SUBJNO where t.ENDFLAG=1 and a.SUBJNO is null ", nativeQuery = true)
-  List<String> getNewSubject();
+  @Query(value = "select t.* from TB_SUBJECT t left join TB_SUBJECTBAL a on t.SUBJNO=a.SUBJNO and t.TENANTID=a.TENANTID where t.ENDFLAG=1 and a.SUBJNO is null and t.TENANTID=:tenantid ", nativeQuery = true)
+  List<TSubject> getNewSubjectByTenantid(@Param("tenantid") String tenantid);
 
-  @Query(value = "select count(t.subjno) as existed from TB_SUBJECT t left join TB_SUBJECTBAL a on t.SUBJNO=a.SUBJNO where t.ENDFLAG=1 and a.SUBJNO is null ", nativeQuery = true)
-  ExistBean checkSettleSubject();
+  @Query(value = "select count(t.subjno) as existed from TB_SUBJECT t left join TB_SUBJECTBAL a on t.SUBJNO=a.SUBJNO and t.TENANTID=a.TENANTID where t.ENDFLAG=1 and a.SUBJNO is null and t.TENANTID=:tenantid ", nativeQuery = true)
+  ExistBean checkSettleSubjectByTenantid(@Param("tenantid") String tenantid);
 
-  @Query(value = "select a.subjno as accno from TB_SUBJECT a left join (select subjno from TB_SUBJECTDAY where accdate =:accdate ) b on a.subjno=b.subjno where a.subjlevel=1 and b.subjno is null ", nativeQuery = true)
-  List<String> getNewSubjnos(@Param("accdate") String accdate);
+  @Query(value = "select a.* from TB_SUBJECT a left join (select subjno from TB_SUBJECTDAY where accdate =:accdate and TENANTID=:tenantid ) b on a.subjno=b.subjno where a.subjlevel=1 and a.TENANTID=:tenantid and b.subjno is null ", nativeQuery = true)
+  List<TSubject> getNewSubjnos(@Param("accdate") String accdate, @Param("tenantid") String tenantid);
 
-  @Query(value = "select subjname from TSubject where subjno=:subjno ")
-  String getSubjectname(@Param("subjno") String subjno);
+  @Query(value = "select subjname from TSubject where subjno=:subjno and tenantId=:tenantid ")
+  String getSubjectname(@Param("subjno") String subjno, @Param("tenantid") String tenantid);
 
   TSubject findBySubjno(String subjno);
 
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/SubjectbalDao.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/SubjectbalDao.java
index 73b01cf..3f5737e 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/SubjectbalDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/SubjectbalDao.java
@@ -13,21 +13,24 @@
 import java.util.List;
 
 @Repository
-public interface SubjectbalDao extends JpaRepository<TSubjectbal, String> {
+public interface SubjectbalDao extends JpaRepository<TSubjectbal, Integer> {
 
-  @Query(value = "select t.* from TB_SUBJECTBAL t left join ( select subjno from TB_SUBJECTDAY where accdate =:lastsettday) a on t.subjno=a.subjno where a.subjno is null ", nativeQuery = true)
-  List<TSubjectbal> getUnsettleSubjectbal(@Param("lastsettday") String lastsettday);
+  @Query(value = "select t.* from TB_SUBJECTBAL t left join ( select subjno from TB_SUBJECTDAY where accdate =:lastsettday and TENANTID=:tenantid) a on t.subjno=a.subjno where t.TENANTID=:tenantid and a.subjno is null ", nativeQuery = true)
+  List<TSubjectbal> getUnsettleSubjectbal(@Param("lastsettday") String lastsettday, @Param("tenantid") String tenantid);
 
-  @Query(value = "select sum(BEGINDRBAL) as dramt,sum(BEGINCRBAL) as cramt from TB_SUBJECTBAL where SUBJNO in (select SUBJNO from TB_SUBJECT where fsubjno=:fsubjno) ", nativeQuery = true)
-  MerchBean getSubjectInfo(@Param("fsubjno") String fsubjno);
+  @Query(value = "select sum(BEGINDRBAL) as dramt,sum(BEGINCRBAL) as cramt from TB_SUBJECTBAL where TENANTID=:tenantid and SUBJNO in (select SUBJNO from TB_SUBJECT where fsubjno=:fsubjno and TENANTID=:tenantid) ", nativeQuery = true)
+  MerchBean getSubjectInfo(@Param("fsubjno") String fsubjno, @Param("tenantid") String tenantid);
 
-  @Query(value = "select sa.subjno,sa.drbal,crbal,sb.subjtype,sb.balflag from TB_SUBJECTBAL sa,TB_SUBJECT sb where sa.subjno=sb.subjno and sb.endflag=1  order by sa.subjno ", nativeQuery = true)
-  List<SubjectInfoBean> getSubjectbalAndFlag();
+  @Query(value = "select sa.subjno,sa.drbal,crbal,sb.subjtype,sb.balflag from TB_SUBJECTBAL sa,TB_SUBJECT sb where sa.tenantid=sb.tenantid and sa.subjno=sb.subjno and sb.endflag=1 and sa.tenantid=:tenantid  order by sa.subjno ", nativeQuery = true)
+  List<SubjectInfoBean> getSubjectbalAndFlag(@Param("tenantid") String tenantid);
 
-  @Query(value = "select case when :balflag=1 then sum(drbal) else sum(crbal) end as amount from tb_subjectbal where subjno in (select subjno from tb_subject where endflag=1 and balflag=:balflag )",nativeQuery = true)
-  Double getSumEndsubjectBalByEndflag(@Param("balflag")Integer balflag);
+  @Query(value = "select case when :balflag=1 then sum(drbal) else sum(crbal) end as amount from tb_subjectbal where tenantid=:tenantid and subjno in (select subjno from tb_subject where endflag=1 and balflag=:balflag and tenantid=:tenantid )",nativeQuery = true)
+  Double getSumEndsubjectBalByEndflag(@Param("balflag")Integer balflag, @Param("tenantid") String tenantid);
 
   @Lock(LockModeType.PESSIMISTIC_WRITE)
   @Query("from TSubjectbal where subjno=:subjno ")
   TSubjectbal getTSubjectbalBySubjnoWithLock(@Param("subjno")String subjno);
+
+  @Query("from TSubjectbal where subjno=:subjno and tenantId=:tenantid ")
+  TSubjectbal getBySubjnoAndTenantId(@Param("subjno")String subjno, @Param("tenantid") String tenantid);
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/SubjectdayDao.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/SubjectdayDao.java
index 9a6a92c..fb65662 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/SubjectdayDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/SubjectdayDao.java
@@ -15,26 +15,26 @@
 @Repository
 public interface SubjectdayDao extends JpaRepository<TSubjectday, TSubjectdayPK> {
 
-  @Query(value = "from TSubjectday where accdate=:accdate ")
-  List<TSubjectday> getAllByAccdate(@Param("accdate") String accdate);
+  @Query(value = "from TSubjectday where accdate=:accdate and tenantId=:tenantid ")
+  List<TSubjectday> getAllByAccdate(@Param("accdate") String accdate, @Param("tenantid") String tenantid);
 
-  @Query(value = "select a.subjno as shopaccno,a.begindrbal as dramt,a.begincrbal as cramt from TB_SUBJECTDAY a left join (select subjno from TB_SUBJECT where endflag=1) b on a.subjno=b.subjno where a.accdate=:accdate and b.subjno is not null ", nativeQuery = true)
-  List<MerchBean> getEndSubjectbalInfos(@Param("accdate") String accdate);
+  @Query(value = "select a.subjno as shopaccno,a.begindrbal as dramt,a.begincrbal as cramt from TB_SUBJECTDAY a left join (select subjno from TB_SUBJECT where endflag=1 and TENANTID=:tenantid) b on a.subjno=b.subjno where a.TENANTID=:tenantid and a.accdate=:accdate and b.subjno is not null ", nativeQuery = true)
+  List<MerchBean> getEndSubjectbalInfos(@Param("accdate") String accdate, @Param("tenantid") String tenantid);
 
-  @Query(value = "from TSubjectday where accdate=:accdate and subjno=:subjno")
-  TSubjectday getSubjectDayById(@Param("accdate") String accdate, @Param("subjno") String subjno);
+  @Query(value = "from TSubjectday where accdate=:accdate and subjno=:subjno and tenantId=:tenantid ")
+  TSubjectday getSubjectDayById(@Param("accdate") String accdate, @Param("subjno") String subjno, @Param("tenantid") String tenantid);
 
-  @Query(value = "from TSubjectday t where t.accdate=:accdate and t.subjno in (select subjno from TSubject where subjlevel=1 and endflag=0 ) ")
-  List<TSubjectday> getParentSubjectday(@Param("accdate") String accdate);
+  @Query(value = "from TSubjectday t where t.tenantId=:tenantid and t.accdate=:accdate and t.subjno in (select subjno from TSubject where subjlevel=1 and endflag=0 and tenantId=:tenantid) ")
+  List<TSubjectday> getParentSubjectday(@Param("accdate") String accdate, @Param("tenantid") String tenantid);
 
   @Query(value = "select sum(sb.begindrbal) as begindrbal,sum(sb.begincrbal) as begincrbal,sum(sb.dramt) as dramt,sum(sb.cramt) as cramt,sum(sb.drbal) as drbal,sum(sb.crbal) as crbal  " +
       "from TB_SUBJECTDAY sb, TB_SUBJECT s " +
-      "where sb.accdate =:accdate and sb.subjno=s.subjno and s.subjlevel=2 and s.fsubjno=:fsubjno ", nativeQuery = true)
-  FSubjectInfoBean getParentSumInfo(@Param("accdate") String accdate, @Param("fsubjno") String fsubjno);
+      "where sb.tenantid=s.tenantid and sb.tenantid=:tenantid and sb.accdate =:accdate and sb.subjno=s.subjno and s.subjlevel=2 and s.fsubjno=:fsubjno ", nativeQuery = true)
+  FSubjectInfoBean getParentSumInfo(@Param("accdate") String accdate, @Param("fsubjno") String fsubjno, @Param("tenantid") String tenantid);
 
   @Query(value = "select sum(begindrbal) as begindrbal,sum(begincrbal) as begincrbal,sum(dramt) as dramt,sum(cramt) as cramt,sum(drbal) as drbal,sum(crbal) as crbal " +
-      "from tb_subjectday where accdate=:accdate and subjno in (select subjno from tb_subject where subjlevel=1) ", nativeQuery = true)
-  FSubjectInfoBean getAllParentSubjectSumInfo(@Param("accdate") String accdate);
+      "from tb_subjectday where accdate=:accdate and tenantid=:tenantid and subjno in (select subjno from tb_subject where subjlevel=1 and tenantid=:tenantid) ", nativeQuery = true)
+  FSubjectInfoBean getAllParentSubjectSumInfo(@Param("accdate") String accdate, @Param("tenantid") String tenantid);
 
   @Query(value = "SELECT t.subjno AS subjno, t.subjname AS subjname,t.fsubjno AS fsubjno,t.subjlevel AS subjlevel,t.displayflag, " +
       "a.begindrbal  AS lastdaydrbal,a.begincrbal  AS lastdaycrbal, " +
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/TranscodeDao.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/TranscodeDao.java
index d40f266..516ff2c 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/TranscodeDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/TranscodeDao.java
@@ -6,4 +6,5 @@
 
 @Repository
 public interface TranscodeDao extends JpaRepository<TTranscode, Integer> {
+  TTranscode getByTranscode(Integer transcode);
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/VoucherDao.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/VoucherDao.java
index 02f5bad..c6bcf4c 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/VoucherDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/VoucherDao.java
@@ -20,25 +20,25 @@
 @Repository
 public interface VoucherDao extends JpaRepository<TVoucher, Integer> {
 
-  @Query(value = "select count(t.voucherid) as existed from TB_VOUCHER t where t.POSTFLAG=0 ", nativeQuery = true)
-  ExistBean checkExistUnpostVouhcer();
+  @Query(value = "select count(t.voucherid) as existed from TB_VOUCHER t where t.POSTFLAG=0 and t.TENANTID=:tenantid ", nativeQuery = true)
+  ExistBean checkExistUnpostVouhcer(@Param("tenantid") String tenantid);
 
   @Modifying
-  @Query(value="delete from TB_VOUCHER where POSTFLAG=0 ",nativeQuery = true)
-  void deleteUnpostVoucher();
+  @Query(value = "delete from TB_VOUCHER where POSTFLAG=0 and TENANTID=:tenantid ", nativeQuery = true)
+  void deleteUnpostVoucher(@Param("tenantid") String tenantid);
 
   @Lock(LockModeType.PESSIMISTIC_WRITE)
-  @Query(value = "from TVoucher where postflag=0 order by voucherid ")
-  List<TVoucher> getSettleVouchers();
+  @Query(value = "from TVoucher where postflag=0 and tenantId=:tenantid order by voucherid ")
+  List<TVoucher> getSettleVouchers(@Param("tenantid") String tenantid);
 
   @Query(value="select va.accno as shopaccno,sum(va.dramt) as dramt,sum(va.cramt) as cramt " +
       "from tb_voucherentry va,tb_voucher vb " +
-      "where va.voucherid=vb.voucherid and vb.voucherdate=:settledate and va.subjno='2004' and va.accno is not null " +
+      "where va.voucherid=vb.voucherid and vb.voucherdate=:settledate and va.subjno='2004' and va.accno is not null and va.TENANTID=vb.TENANTID and va.TENANTID=:tenantid " +
       "group by va.accno order by va.accno ", nativeQuery = true)
-  List<MerchBean> getShopVoucherByAccdate(@Param("settledate")Integer settledate);
+  List<MerchBean> getShopVoucherByAccdate(@Param("settledate")Integer settledate, @Param("tenantid") String tenantid);
 
-  @Query(value = "select sum(va.dramt) as dramt, sum(va.cramt) as cramt  from TB_VOUCHERENTRY va,TB_VOUCHER vb where va.voucherid=vb.voucherid and vb.voucherdate=:voucherdate and va.subjno=:subjno ", nativeQuery = true)
-  MerchBean getSettleSuminfo(@Param("voucherdate") Integer voucherdate, @Param("subjno") String subjno);
+  @Query(value = "select sum(va.dramt) as dramt, sum(va.cramt) as cramt  from TB_VOUCHERENTRY va,TB_VOUCHER vb where va.tenantid=vb.tenantid and va.voucherid=vb.voucherid and va.tenantid=:tenantid and vb.voucherdate=:voucherdate and va.subjno=:subjno ", nativeQuery = true)
+  MerchBean getSettleSuminfo(@Param("voucherdate") Integer voucherdate, @Param("subjno") String subjno, @Param("tenantid") String tenantid);
 
   @Lock(LockModeType.PESSIMISTIC_WRITE)
   @Query(value = "from TVoucher where voucherid=:voucherid ")
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/VoucherEntryDao.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/VoucherEntryDao.java
index cfb8cfd..0d3b3cd 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/VoucherEntryDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/VoucherEntryDao.java
@@ -14,11 +14,11 @@
 @Repository
 public interface VoucherEntryDao extends JpaRepository<TVoucherEntry,TVoucherEntryPK> {
   @Modifying
-  @Query(value = "delete from TB_VOUCHERENTRY where VOUCHERID in (select VOUCHERID from TB_VOUCHER where POSTFLAG=0)", nativeQuery = true)
-  void deleteUnpostVoucherentry();
+  @Query(value = "delete from TB_VOUCHERENTRY where TENANTID=:tenantid and VOUCHERID in (select VOUCHERID from TB_VOUCHER where POSTFLAG=0 and t.TENANTID=:tenantid)", nativeQuery = true)
+  void deleteUnpostVoucherentry(@Param("tenantid") String tenantid);
 
-  @Query(value = "from TVoucherEntry where voucherid in (select voucherid from TVoucher where voucherdate=:voucherdate) order by subjno,accno,voucherid ")
-  List<TVoucherEntry> getVoucherEntryByVoucherdate(@Param("voucherdate") Integer voucherdate);
+  @Query(value = "from TVoucherEntry where tenantId=:tenantid and voucherid in (select voucherid from TVoucher where voucherdate=:voucherdate and tenantId=:tenantid) order by subjno,accno,voucherid ")
+  List<TVoucherEntry> getVoucherEntryByVoucherdate(@Param("voucherdate") Integer voucherdate, @Param("tenantid") String tenantid);
 
   @Lock(LockModeType.PESSIMISTIC_WRITE)
   @Query(value = "from TVoucherEntry t where t.voucherid=:voucherid ")
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/VouchernoCtlDao.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/VouchernoCtlDao.java
index 7f81bf9..fcf8b7d 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/VouchernoCtlDao.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/dao/VouchernoCtlDao.java
@@ -16,7 +16,15 @@
   @Query(value = "update TB_VOUCHERNOCTL set PERIODMONTH=:peridmonth,VOUCHERNO=:voucherno where VOUCHERTYPE=1 ", nativeQuery = true)
   void updateVoucherno(@Param("peridmonth") int peridmonth, @Param("voucherno") int voucherno);
 
+  @Modifying(clearAutomatically = true)
+  @Query(value = "update TB_VOUCHERNOCTL set PERIODMONTH=:peridmonth,VOUCHERNO=:voucherno where TENANTID=:tenantid ", nativeQuery = true)
+  void updateVouchernoByTenantid(@Param("peridmonth") int peridmonth, @Param("voucherno") int voucherno, @Param("tenantid") String tenantid);
+
   @Lock(LockModeType.PESSIMISTIC_WRITE)
   @Query(value = "from TVouchernoCtl where vouchertype=1 ")
   TVouchernoCtl getVoucherno();
+
+  @Lock(LockModeType.PESSIMISTIC_WRITE)
+  @Query(value = "from TVouchernoCtl where tenantId=:tenantid ")
+  TVouchernoCtl getVouchernoByTenantid(@Param("tenantid") String tenantid);
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TPeriod.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TPeriod.java
index 5d54268..6df7005 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TPeriod.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TPeriod.java
@@ -1,17 +1,23 @@
 package com.supwisdom.dlpay.framework.domain;
 
+import org.hibernate.annotations.GenericGenerator;
+
 import javax.persistence.*;
 import javax.validation.constraints.NotNull;
 
 @Entity
-@Table(name = "TB_PERIOD")
-@IdClass(TPeriodPK.class)
+@Table(name = "TB_PERIOD",
+    indexes = {@Index(name = "TB_PERIOD_UK", columnList = "PERIOD_YEAR, PERIOD_MONTH, TENANTID", unique = true)})
 public class TPeriod {
   @Id
+  @GenericGenerator(name = "idGenerator", strategy = "uuid")
+  @GeneratedValue(generator = "idGenerator")
+  @Column(name = "ID", nullable = false, length = 32)
+  private String id;
+
   @Column(name = "PERIOD_YEAR", nullable = false, precision = 4)
   private Integer periodYear;
 
-  @Id
   @Column(name = "PERIOD_MONTH", nullable = false, precision = 2)
   private Integer periodMonth;
 
@@ -27,10 +33,18 @@
   @NotNull
   private Integer settleflag = 0;
 
-  @Column(name = "tenantid", length = 20)
+  @Column(name = "TENANTID", length = 20)
   @NotNull
   private String tenantId;
 
+  public String getId() {
+    return id;
+  }
+
+  public void setId(String id) {
+    this.id = id;
+  }
+
   public Integer getPeriodYear() {
     return periodYear;
   }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TPeriodPK.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TPeriodPK.java
deleted file mode 100644
index e307db3..0000000
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TPeriodPK.java
+++ /dev/null
@@ -1,52 +0,0 @@
-package com.supwisdom.dlpay.framework.domain;
-
-import javax.persistence.Column;
-import javax.persistence.Id;
-import java.io.Serializable;
-
-public class TPeriodPK implements Serializable {
-
-  @Id
-  @Column(name="PERIOD_YEAR", nullable = false, precision = 4)
-  private Integer periodYear;
-
-  @Id
-  @Column(name="PERIOD_MONTH", nullable = false, precision = 2)
-  private Integer periodMonth;
-
-  public Integer getPeriodYear() {
-    return periodYear;
-  }
-
-  public void setPeriodYear(Integer periodYear) {
-    this.periodYear = periodYear;
-  }
-
-  public Integer getPeriodMonth() {
-    return periodMonth;
-  }
-
-  public void setPeriodMonth(Integer periodMonth) {
-    this.periodMonth = periodMonth;
-  }
-
-  @Override
-  public boolean equals(Object o) {
-    if (this == o) return true;
-    if (o == null || getClass() != o.getClass()) return false;
-    TPeriodPK tPeriodPK = (TPeriodPK) o;
-    if (periodYear != null ? !periodYear.equals(tPeriodPK.getPeriodYear()) : periodYear != null)
-      return false;
-    if (periodMonth != null ? !periodMonth.equals(tPeriodPK.getPeriodMonth()) : periodMonth != null)
-      return false;
-
-    return true;
-  }
-
-  @Override
-  public int hashCode() {
-    int result = periodYear != null ? periodYear.hashCode() : 0;
-    result = 31 * result + (periodMonth != null ? periodMonth.hashCode() : 0);
-    return result;
-  }
-}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TResource.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TResource.java
index 13be663..fe2ce3f 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TResource.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TResource.java
@@ -5,7 +5,7 @@
 
 @Entity
 @Table(name = "TB_RESOURCE")
-@SequenceGenerator(name = "SEQ_RES", sequenceName = "SEQ_RES", allocationSize = 1000)
+@SequenceGenerator(name = "SEQ_RES", sequenceName = "SEQ_RES", allocationSize = 1, initialValue = 1000)
 public class TResource {
   @Id
   @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_RES")
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TSettlectl.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TSettlectl.java
index aa0a515..5f6f214 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TSettlectl.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TSettlectl.java
@@ -31,7 +31,7 @@
   @Column(name="UPDTIME", length = 14)
   private String updtime;
 
-  @Column(name = "tenantid", length = 20)
+  @Column(name = "TENANTID", length = 20)
   @NotNull
   private String tenantId;
 
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TSubjectbal.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TSubjectbal.java
index 93a64e1..47b7ddd 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TSubjectbal.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TSubjectbal.java
@@ -9,7 +9,7 @@
 public class TSubjectbal {
   @Id
   @Column(name = "subjid", nullable = false, length = 32)
-  private String subjid;
+  private Integer subjid;
 
   @Column(name = "SUBJNO", length = 10)
   @NotNull
@@ -55,7 +55,8 @@
   public TSubjectbal() {
   }
 
-  public TSubjectbal(String subjno) {
+  public TSubjectbal(Integer subjid, String subjno, String tenantId) {
+    this.subjid = subjid;
     this.subjno = subjno;
     this.accumdramt = 0D;
     this.accumcramt = 0D;
@@ -65,9 +66,11 @@
     this.cramt = 0D;
     this.drbal = 0D;
     this.crbal = 0D;
+    this.tenantId = tenantId;
   }
 
-  public TSubjectbal(String subjno, Double accumdramt, Double accumcramt, Double begindrbal, Double begincrbal, Double dramt, Double cramt, Double drbal, Double crbal, String updtime, Integer lastsettleday, Double accumsettleamt) {
+  public TSubjectbal(Integer subjid, @NotNull String subjno, Double accumdramt, Double accumcramt, Double begindrbal, Double begincrbal, Double dramt, Double cramt, Double drbal, Double crbal, String updtime, Integer lastsettleday, Double accumsettleamt, @NotNull String tenantId) {
+    this.subjid = subjid;
     this.subjno = subjno;
     this.accumdramt = accumdramt;
     this.accumcramt = accumcramt;
@@ -80,6 +83,7 @@
     this.updtime = updtime;
     this.lastsettleday = lastsettleday;
     this.accumsettleamt = accumsettleamt;
+    this.tenantId = tenantId;
   }
 
   public String getSubjno() {
@@ -186,11 +190,11 @@
     this.tenantId = tenantId;
   }
 
-  public String getSubjid() {
+  public Integer getSubjid() {
     return subjid;
   }
 
-  public void setSubjid(String subjid) {
+  public void setSubjid(Integer subjid) {
     this.subjid = subjid;
   }
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TSubjectday.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TSubjectday.java
index d200c62..db73aeb 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TSubjectday.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TSubjectday.java
@@ -10,7 +10,7 @@
 public class TSubjectday {
   @Id
   @Column(name = "subjid", nullable = false, length = 32)
-  private String subjid;
+  private Integer subjid;
 
   @Id
   @Column(name = "ACCDATE", nullable = false, length = 8)
@@ -54,7 +54,8 @@
   public TSubjectday() {
   }
 
-  public TSubjectday(String accdate, String subjno, Integer periodYear, Integer periodMonth, Double begindrbal, Double begincrbal, Double dramt, Double cramt, Double drbal, Double crbal) {
+  public TSubjectday(Integer subjid, String accdate, String subjno, Integer periodYear, Integer periodMonth, Double begindrbal, Double begincrbal, Double dramt, Double cramt, Double drbal, Double crbal, String tenantId) {
+    this.subjid = subjid;
     this.accdate = accdate;
     this.subjno = subjno;
     this.periodYear = periodYear;
@@ -65,9 +66,11 @@
     this.cramt = cramt;
     this.drbal = drbal;
     this.crbal = crbal;
+    this.tenantId = tenantId;
   }
 
-  public TSubjectday(String accdate, String subjno, Integer periodYear, Integer periodMonth, Double begindrbal, Double begincrbal, Double dramt, Double cramt, Double drbal, Double crbal, String updtime) {
+  public TSubjectday(Integer subjid, String accdate, String subjno, Integer periodYear, Integer periodMonth, Double begindrbal, Double begincrbal, Double dramt, Double cramt, Double drbal, Double crbal, String updtime, String tenantId) {
+    this.subjid = subjid;
     this.accdate = accdate;
     this.subjno = subjno;
     this.periodYear = periodYear;
@@ -79,6 +82,7 @@
     this.drbal = drbal;
     this.crbal = crbal;
     this.updtime = updtime;
+    this.tenantId = tenantId;
   }
 
   public String getAccdate() {
@@ -177,11 +181,11 @@
     this.tenantId = tenantId;
   }
 
-  public String getSubjid() {
+  public Integer getSubjid() {
     return subjid;
   }
 
-  public void setSubjid(String subjid) {
+  public void setSubjid(Integer subjid) {
     this.subjid = subjid;
   }
 }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TSubjectdayPK.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TSubjectdayPK.java
index ac70e2f..e887b0c 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TSubjectdayPK.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TSubjectdayPK.java
@@ -11,7 +11,7 @@
 
   @Id
   @Column(name = "SUBJID", nullable = false, length = 32)
-  private String subjid;
+  private Integer subjid;
 
   public String getAccdate() {
     return accdate;
@@ -21,11 +21,11 @@
     this.accdate = accdate;
   }
 
-  public String getSubjid() {
+  public Integer getSubjid() {
     return subjid;
   }
 
-  public void setSubjid(String subjid) {
+  public void setSubjid(Integer subjid) {
     this.subjid = subjid;
   }
 
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TVoucherEntry.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TVoucherEntry.java
index b3006d8..d241958 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TVoucherEntry.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TVoucherEntry.java
@@ -52,7 +52,7 @@
   public TVoucherEntry() {
   }
 
-  public TVoucherEntry(Integer voucherid, Integer entryid, String subjno, String accno, Double dramt, Double cramt, String summary, String oppsubjno, String oppaccno) {
+  public TVoucherEntry(Integer voucherid, Integer entryid, String subjno, String accno, Double dramt, Double cramt, String summary, String oppsubjno, String oppaccno, String tenantId) {
     this.voucherid = voucherid;
     this.entryid = entryid;
     this.subjno = subjno;
@@ -62,9 +62,10 @@
     this.summary = summary;
     this.oppsubjno = oppsubjno;
     this.oppaccno = oppaccno;
+    this.tenantId = tenantId;
   }
 
-  public TVoucherEntry(Integer voucherid, Integer entryid, String subjno, String accno, Double dramt, Double cramt, Double balance, Integer balflag, String summary, String oppsubjno, String oppaccno, String oppname) {
+  public TVoucherEntry(Integer voucherid, Integer entryid, String subjno, String accno, Double dramt, Double cramt, Double balance, Integer balflag, String summary, String oppsubjno, String oppaccno, String oppname, String tenantId) {
     this.voucherid = voucherid;
     this.entryid = entryid;
     this.subjno = subjno;
@@ -77,6 +78,7 @@
     this.oppsubjno = oppsubjno;
     this.oppaccno = oppaccno;
     this.oppname = oppname;
+    this.tenantId = tenantId;
   }
 
   public Integer getVoucherid() {
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TVouchernoCtl.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TVouchernoCtl.java
index f7ff649..e2b9e3d 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TVouchernoCtl.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/domain/TVouchernoCtl.java
@@ -1,15 +1,14 @@
 package com.supwisdom.dlpay.framework.domain;
 
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import javax.persistence.*;
 import javax.validation.constraints.NotNull;
 
 @Entity
 @Table(name = "TB_VOUCHERNOCTL")
 public class TVouchernoCtl {
   @Id
+  @SequenceGenerator(name = "vouchertype", sequenceName = "SEQ_vouchertype", allocationSize = 1, initialValue = 100)
+  @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "vouchertype")
   @Column(name = "VOUCHERTYPE", nullable = false, precision = 2)
   private Integer vouchertype;
 
@@ -28,10 +27,10 @@
   public TVouchernoCtl() {
   }
 
-  public TVouchernoCtl(Integer vouchertype, Integer periodMonth, Integer voucherno) {
-    this.vouchertype = vouchertype;
+  public TVouchernoCtl(Integer periodMonth, Integer voucherno, String tenantId) {
     this.periodMonth = periodMonth;
     this.voucherno = voucherno;
+    this.tenantId = tenantId;
   }
 
   public Integer getVouchertype() {
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/service/impl/DayendSettleServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/service/impl/DayendSettleServiceImpl.java
index 8310435..d1ff06d 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/service/impl/DayendSettleServiceImpl.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/service/impl/DayendSettleServiceImpl.java
@@ -1,6 +1,7 @@
 package com.supwisdom.dlpay.framework.service.impl;
 
 import com.supwisdom.dlpay.api.dao.DebitCreditDtlDao;
+import com.supwisdom.dlpay.exception.TransactionException;
 import com.supwisdom.dlpay.framework.dao.*;
 import com.supwisdom.dlpay.framework.data.FSubjectInfoBean;
 import com.supwisdom.dlpay.framework.data.MerchBean;
@@ -9,6 +10,7 @@
 import com.supwisdom.dlpay.framework.domain.*;
 import com.supwisdom.dlpay.framework.service.DayendSettleService;
 import com.supwisdom.dlpay.framework.service.SystemUtilService;
+import com.supwisdom.dlpay.framework.tenant.TenantContext;
 import com.supwisdom.dlpay.framework.util.DateUtil;
 import com.supwisdom.dlpay.framework.util.MoneyUtil;
 import com.supwisdom.dlpay.framework.util.StringUtil;
@@ -65,6 +67,7 @@
   public TSettleLog doCreateSettleLog() {
     TSettleLog log = new TSettleLog();
     log.setStarttime(systemUtilService.getSysdatetime().getHostdatetime());
+    log.setTenantId(TenantContext.getTenantSchema());
     return settleLogDao.save(log);
   }
 
@@ -76,7 +79,7 @@
   }
 
   private boolean doSwitchPeriod() throws Exception {
-    TPeriod period = periodDao.getTPeriodWithLock(periodYear, periodMonth);
+    TPeriod period = periodDao.getTPeriodWithLock(periodYear, periodMonth, TenantContext.getTenantSchema());
     if (period.getSettleflag() == 1) {
       throw new Exception("月末结转已完成");
     }
@@ -90,7 +93,7 @@
       periodMonth = periodMonth + 1; //year不变
     }
 
-    TPeriod nextPerid = periodDao.getPeriod(periodYear, periodMonth);
+    TPeriod nextPerid = periodDao.getPeriod(periodYear, periodMonth, TenantContext.getTenantSchema());
     if (null != nextPerid) {
       if (settledate != Integer.valueOf(nextPerid.getStartdate())) {
         throw new Exception("下一个会计期间的开始日期不正确");
@@ -109,25 +112,27 @@
       nextPerid.setStartdate(startdate.toString());
       nextPerid.setEnddate(enddate.toString());
       nextPerid.setSettleflag(0);
+      nextPerid.setTenantId(TenantContext.getTenantSchema());
       periodDao.save(nextPerid); //保存下个会计期间
     }
 
-    settleCtlDao.updateSettlePeriod(periodYear, periodMonth);
-    vouchernoCtlDao.updateVoucherno(periodMonth, 0);
+    settleCtlDao.updateSettlePeriodByTenantid(periodYear, periodMonth, TenantContext.getTenantSchema());
+    vouchernoCtlDao.updateVouchernoByTenantid(periodMonth, 0, TenantContext.getTenantSchema());
     return true;
   }
 
   private void saveVoucher(VoucherTemp voucherTemp) {
     TVoucher voucher = new TVoucher(periodYear, periodMonth, 0, settledate, settledate, voucherTemp.getTranscnt(), Math.abs(voucherTemp.getTransamt()), voucherTemp.getSummary(), "auto", hostdate);
+    voucher.setTenantId(TenantContext.getTenantSchema());
     voucher = voucherDao.save(voucher);
     TVoucherEntry entry1;
     TVoucherEntry entry2;
     if (voucherTemp.getTransamt() >= 0) {
-      entry1 = new TVoucherEntry(voucher.getVoucherid(), 1, voucherTemp.getDrsubjno(), voucherTemp.getDraccno(), Math.abs(voucherTemp.getTransamt()), 0D, voucherTemp.getSummary(), voucherTemp.getCrsubjno(), voucherTemp.getCraccno());
-      entry2 = new TVoucherEntry(voucher.getVoucherid(), 2, voucherTemp.getCrsubjno(), voucherTemp.getCraccno(), 0D, Math.abs(voucherTemp.getTransamt()), voucherTemp.getSummary(), voucherTemp.getDrsubjno(), voucherTemp.getDraccno());
+      entry1 = new TVoucherEntry(voucher.getVoucherid(), 1, voucherTemp.getDrsubjno(), voucherTemp.getDraccno(), Math.abs(voucherTemp.getTransamt()), 0D, voucherTemp.getSummary(), voucherTemp.getCrsubjno(), voucherTemp.getCraccno(), TenantContext.getTenantSchema());
+      entry2 = new TVoucherEntry(voucher.getVoucherid(), 2, voucherTemp.getCrsubjno(), voucherTemp.getCraccno(), 0D, Math.abs(voucherTemp.getTransamt()), voucherTemp.getSummary(), voucherTemp.getDrsubjno(), voucherTemp.getDraccno(), TenantContext.getTenantSchema());
     } else {
-      entry1 = new TVoucherEntry(voucher.getVoucherid(), 1, voucherTemp.getDrsubjno(), voucherTemp.getDraccno(), 0D, Math.abs(voucherTemp.getTransamt()), voucherTemp.getSummary(), voucherTemp.getCrsubjno(), voucherTemp.getCraccno());
-      entry2 = new TVoucherEntry(voucher.getVoucherid(), 2, voucherTemp.getCrsubjno(), voucherTemp.getCraccno(), Math.abs(voucherTemp.getTransamt()), 0D, voucherTemp.getSummary(), voucherTemp.getDrsubjno(), voucherTemp.getDraccno());
+      entry1 = new TVoucherEntry(voucher.getVoucherid(), 1, voucherTemp.getDrsubjno(), voucherTemp.getDraccno(), 0D, Math.abs(voucherTemp.getTransamt()), voucherTemp.getSummary(), voucherTemp.getCrsubjno(), voucherTemp.getCraccno(), TenantContext.getTenantSchema());
+      entry2 = new TVoucherEntry(voucher.getVoucherid(), 2, voucherTemp.getCrsubjno(), voucherTemp.getCraccno(), Math.abs(voucherTemp.getTransamt()), 0D, voucherTemp.getSummary(), voucherTemp.getDrsubjno(), voucherTemp.getDraccno(), TenantContext.getTenantSchema());
     }
     voucherEntryDao.save(entry1);
     voucherEntryDao.save(entry2);
@@ -135,7 +140,7 @@
 
   @Override
   public boolean doDayendSettle() throws Exception {
-    TSettlectl tSettlectl = settleCtlDao.findByBooksetnoWithLock(1);
+    TSettlectl tSettlectl = settleCtlDao.findByTenantIdWithLock(TenantContext.getTenantSchema());
     if (null == tSettlectl || null == tSettlectl.getBooksetno()) {
       throw new Exception("初始化错误，T_SETTLECTL 无初始化数据");
     }
@@ -149,38 +154,38 @@
     lastsettday = Integer.valueOf(DateUtil.getNewDay(tSettlectl.getSettledate().toString(), -1));
 
     if (settledate >= hostdate) {
-      throw new Exception("日终结算已完成");
+      throw new TransactionException(-99, "日终结算已完成");
     }
 
-    TPeriod period = periodDao.getPeriod(periodYear, periodMonth);
+    TPeriod period = periodDao.getPeriod(periodYear, periodMonth, TenantContext.getTenantSchema());
     if (null == period) throw new Exception("year=[" + periodYear + "],month=[" + periodMonth + "] t_period not find ");
     if (settledate > Integer.valueOf(period.getEnddate())) {
       //月切
       if (!doSwitchPeriod()) {
-        throw new Exception("月切失败");
+        throw new TransactionException(-3, "月切失败");
       }
     }
 
     //新增科目插入科目余额表（末级科目）
-    List<String> newEndsubjectList = subjectDao.getNewSubject();
+    List<TSubject> newEndsubjectList = subjectDao.getNewSubjectByTenantid(TenantContext.getTenantSchema());
     if (!StringUtil.isEmpty(newEndsubjectList)) {
-      for (String subjno : newEndsubjectList) {
-        TSubjectbal subjectbal = new TSubjectbal(subjno);
+      for (TSubject subject : newEndsubjectList) {
+        TSubjectbal subjectbal = new TSubjectbal(subject.getId(),subject.getSubjno(), subject.getTenantId());
         subjectbalDao.save(subjectbal);
       }
     }
-    if (subjectDao.checkSettleSubject().getExisted() > 0) {
+    if (subjectDao.checkSettleSubjectByTenantid(TenantContext.getTenantSchema()).getExisted() > 0) {
       throw new Exception("初始化数据错误:科目余额表数据没有包含所有的科目余额");
     }
 
     //删除未入账凭证
-    if (voucherDao.checkExistUnpostVouhcer().getExisted() > 0) {
-      voucherEntryDao.deleteUnpostVoucherentry();
-      voucherDao.deleteUnpostVoucher();
+    if (voucherDao.checkExistUnpostVouhcer(TenantContext.getTenantSchema()).getExisted() > 0) {
+      voucherEntryDao.deleteUnpostVoucherentry(TenantContext.getTenantSchema());
+      voucherDao.deleteUnpostVoucher(TenantContext.getTenantSchema());
     }
 
     //用户交易凭证
-    List<VoucherTemp> userList = debitCreditDtlDao.getVoucherData(String.valueOf(settledate));
+    List<VoucherTemp> userList = debitCreditDtlDao.getVoucherData(String.valueOf(settledate), TenantContext.getTenantSchema());
     if (!StringUtil.isEmpty(userList)) {
       for (VoucherTemp temp : userList) {
         saveVoucher(temp);
@@ -188,16 +193,16 @@
     }
 
     //凭证号
-    TVouchernoCtl vouchernoCtl = vouchernoCtlDao.getVoucherno();
+    TVouchernoCtl vouchernoCtl = vouchernoCtlDao.getVouchernoByTenantid(TenantContext.getTenantSchema());
     if (null == vouchernoCtl) {
       vouchernoCtl = new TVouchernoCtl();
-      vouchernoCtl.setVouchertype(1);
       vouchernoCtl.setPeriodMonth(periodMonth);
       vouchernoCtl.setVoucherno(0);
+      vouchernoCtl.setTenantId(TenantContext.getTenantSchema());
       vouchernoCtlDao.save(vouchernoCtl);
     }
     int voucherno = vouchernoCtl.getVoucherno();
-    List<TVoucher> voucherList = voucherDao.getSettleVouchers();
+    List<TVoucher> voucherList = voucherDao.getSettleVouchers(TenantContext.getTenantSchema());
     if (!StringUtil.isEmpty(voucherList)) {
       for (TVoucher voucher : voucherList) {
         voucherno++;
@@ -211,24 +216,26 @@
 
     Map<String, Double> v_merchbaldict = new HashMap<String, Double>(0);
     //根据商户昨天日结表生成当天日结表（交易前余额）， 新增商户添加记录
-    List<TShopaccday> lastShopaccdays = shopaccdayDao.getShopaccdayByAccdate(String.valueOf(lastsettday));
+    List<TShopaccday> lastShopaccdays = shopaccdayDao.getShopaccdayByAccdate(String.valueOf(lastsettday), TenantContext.getTenantSchema());
     if (!StringUtil.isEmpty(lastShopaccdays)) {
       for (TShopaccday lastday : lastShopaccdays) {
         TShopaccday today = new TShopaccday(String.valueOf(settledate), lastday.getShopaccno(), periodYear, periodMonth, lastday.getBalance(), 0D, 0D, 0D);
+        today.setTenantId(lastday.getTenantId());
         shopaccdayDao.save(today);
         v_merchbaldict.put(lastday.getShopaccno(), lastday.getBalance());
       }
     }
-    List<String> newShopaccs = shopaccDao.getNewShopacc(String.valueOf(lastsettday)); //新增商户
+    List<String> newShopaccs = shopaccDao.getNewShopacc(String.valueOf(lastsettday), TenantContext.getTenantSchema()); //新增商户
     if(!StringUtil.isEmpty(newShopaccs)){
       for(String accno:newShopaccs){
         TShopaccday today = new TShopaccday(String.valueOf(settledate), accno, periodYear, periodMonth, 0D, 0D, 0D, 0D);
+        today.setTenantId(TenantContext.getTenantSchema());
         shopaccdayDao.save(today);
         v_merchbaldict.put(accno, 0D);
       }
     }
 
-    List<MerchBean> merchBeanList = voucherDao.getShopVoucherByAccdate(settledate);
+    List<MerchBean> merchBeanList = voucherDao.getShopVoucherByAccdate(settledate, TenantContext.getTenantSchema());
     if (!StringUtil.isEmpty(merchBeanList)) {
       for (MerchBean merch : merchBeanList) {
         TShopaccday merchday = shopaccdayDao.getTShopaccdayById(String.valueOf(settledate), merch.getShopaccno());
@@ -240,34 +247,34 @@
         shopaccdayDao.save(merchday);
       }
     }
-    shopaccdayDao.updateShopaccdayBalance(String.valueOf(settledate), systemUtilService.getSysdatetime().getHostdatetime()); //批量更新余额,商户日结表生成
+    shopaccdayDao.updateShopaccdayBalance(String.valueOf(settledate), systemUtilService.getSysdatetime().getHostdatetime(), TenantContext.getTenantSchema()); //批量更新余额,商户日结表生成
 
     //根据科目昨天日结表生成当天日结表（交易前借贷方余额），新增末级科目插入记录（交易前余额为科目贷方余额）
-    List<TSubjectday> lastSubjectDays = subjectdayDao.getAllByAccdate(String.valueOf(lastsettday));
+    List<TSubjectday> lastSubjectDays = subjectdayDao.getAllByAccdate(String.valueOf(lastsettday), TenantContext.getTenantSchema());
     if (!StringUtil.isEmpty(lastSubjectDays)) {
       for (TSubjectday lastday : lastSubjectDays) {
-        TSubjectday today = new TSubjectday(String.valueOf(settledate), lastday.getSubjno(), periodYear, periodMonth, lastday.getDrbal(), lastday.getCrbal(), 0D, 0D, 0D, 0D);
+        TSubjectday today = new TSubjectday(lastday.getSubjid(),String.valueOf(settledate), lastday.getSubjno(), periodYear, periodMonth, lastday.getDrbal(), lastday.getCrbal(), 0D, 0D, 0D, 0D, lastday.getTenantId());
         subjectdayDao.save(today);
       }
     }
-    List<TSubjectbal> newSubjectBals = subjectbalDao.getUnsettleSubjectbal(String.valueOf(lastsettday));
+    List<TSubjectbal> newSubjectBals = subjectbalDao.getUnsettleSubjectbal(String.valueOf(lastsettday), TenantContext.getTenantSchema());
     if (!StringUtil.isEmpty(newSubjectBals)) {
       for (TSubjectbal newSubject : newSubjectBals) {
-        TSubjectday today = new TSubjectday(String.valueOf(settledate), newSubject.getSubjno(), periodYear, periodMonth, newSubject.getBegindrbal(), newSubject.getBegincrbal(), 0D, 0D, 0D, 0D);
+        TSubjectday today = new TSubjectday(newSubject.getSubjid(),String.valueOf(settledate), newSubject.getSubjno(), periodYear, periodMonth, newSubject.getBegindrbal(), newSubject.getBegincrbal(), 0D, 0D, 0D, 0D, newSubject.getTenantId());
         subjectdayDao.save(today);
       }
     }
-    List<String> newFSubjnos = subjectDao.getNewSubjnos(String.valueOf(settledate)); //新增非末级科目
+    List<TSubject> newFSubjnos = subjectDao.getNewSubjnos(String.valueOf(settledate), TenantContext.getTenantSchema()); //新增非末级科目
     if (!StringUtil.isEmpty(newFSubjnos)) {
-      for (String subjno : newFSubjnos) {
+      for (TSubject subj : newFSubjnos) {
         double beginDrbal = 0;
         double beginCrbal = 0;
-        MerchBean balInfo = subjectbalDao.getSubjectInfo(subjno); //统计下级所有科目的交易前余额
+        MerchBean balInfo = subjectbalDao.getSubjectInfo(subj.getSubjno(), subj.getTenantId()); //统计下级所有科目的交易前余额
         if (null != balInfo) {
           beginDrbal = (balInfo.getDramt() == null ? 0 : balInfo.getDramt().doubleValue());
           beginCrbal = (balInfo.getCramt() == null ? 0 : balInfo.getCramt().doubleValue());
         }
-        TSubjectday today = new TSubjectday(String.valueOf(settledate), subjno, periodYear, periodMonth, beginDrbal, beginCrbal, 0D, 0D, 0D, 0D);
+        TSubjectday today = new TSubjectday(subj.getId(),String.valueOf(settledate), subj.getSubjno(), periodYear, periodMonth, beginDrbal, beginCrbal, 0D, 0D, 0D, 0D, subj.getTenantId());
         subjectdayDao.save(today);
       }
     }
@@ -275,22 +282,22 @@
     //初始化末级科目期初余额(包含商户科目)
     Map<String, Double> v_subjbaldict = new HashMap<String, Double>(0);
     Map<String, Integer> v_subjbalflagdict = new HashMap<String, Integer>(0);
-    List<MerchBean> subjectList = subjectdayDao.getEndSubjectbalInfos(String.valueOf(settledate));
+    List<MerchBean> subjectList = subjectdayDao.getEndSubjectbalInfos(String.valueOf(settledate), TenantContext.getTenantSchema());
     if (!StringUtil.isEmpty(subjectList)) {
       for (MerchBean bean : subjectList) {
         v_subjbaldict.put(bean.getShopaccno(), MoneyUtil.formatYuan(bean.getDramt() + bean.getCramt()));
       }
     }
 
-    List<SubjectInfoBean> subjInfoList = subjectbalDao.getSubjectbalAndFlag();
+    List<SubjectInfoBean> subjInfoList = subjectbalDao.getSubjectbalAndFlag(TenantContext.getTenantSchema());
     for (SubjectInfoBean subj : subjInfoList) {
-      TSubjectday tSubjectday = subjectdayDao.getSubjectDayById(String.valueOf(settledate), subj.getSubjno());
+      TSubjectday tSubjectday = subjectdayDao.getSubjectDayById(String.valueOf(settledate), subj.getSubjno(), TenantContext.getTenantSchema());
       if (null == tSubjectday) {
         throw new Exception("科目日结表无此科目记录[" + subj.getSubjno() + "]");
       }
 
       v_subjbalflagdict.put(subj.getSubjno(), subj.getBalflag());
-      MerchBean suminfo = voucherDao.getSettleSuminfo(settledate, subj.getSubjno());
+      MerchBean suminfo = voucherDao.getSettleSuminfo(settledate, subj.getSubjno(), TenantContext.getTenantSchema());
       double sumDramt = ((null == suminfo || null == suminfo.getDramt()) ? 0 : suminfo.getDramt().doubleValue());
       double sumCramt = ((null == suminfo || null == suminfo.getCramt()) ? 0 : suminfo.getCramt().doubleValue());
       tSubjectday.setDramt(sumDramt);
@@ -304,9 +311,9 @@
       subjectdayDao.save(tSubjectday);
     }
     //根据二级更新一级科目日结
-    List<TSubjectday> parentSubject = subjectdayDao.getParentSubjectday(String.valueOf(settledate));
+    List<TSubjectday> parentSubject = subjectdayDao.getParentSubjectday(String.valueOf(settledate), TenantContext.getTenantSchema());
     for (TSubjectday fsub : parentSubject) {
-      FSubjectInfoBean sumInfo = subjectdayDao.getParentSumInfo(String.valueOf(settledate), fsub.getSubjno());
+      FSubjectInfoBean sumInfo = subjectdayDao.getParentSumInfo(String.valueOf(settledate), fsub.getSubjno(), fsub.getTenantId());
       fsub.setBegindrbal((null == sumInfo || null == sumInfo.getBegindrbal()) ? 0D : sumInfo.getBegindrbal());
       fsub.setBegincrbal((null == sumInfo || null == sumInfo.getBegincrbal()) ? 0D : sumInfo.getBegincrbal());
       fsub.setDramt((null == sumInfo || null == sumInfo.getDramt()) ? 0D : sumInfo.getDramt());
@@ -318,7 +325,7 @@
     }
 
     //批量更新凭证明细中商户或科目账户的余额
-    List<TVoucherEntry> entryList = voucherEntryDao.getVoucherEntryByVoucherdate(settledate);
+    List<TVoucherEntry> entryList = voucherEntryDao.getVoucherEntryByVoucherdate(settledate, TenantContext.getTenantSchema());
     if (!StringUtil.isEmpty(entryList)) {
       for (TVoucherEntry vce : entryList) {
         if (Subject.SUBJNO_MACHANT_INCOME.equals(vce.getSubjno())) {
@@ -331,7 +338,7 @@
           if (Subject.SUBJNO_MACHANT_INCOME.equals(vce.getOppsubjno())) {
             vce.setOppname(shopaccDao.getShopname(vce.getOppaccno()));
           } else {
-            vce.setOppname(subjectDao.getSubjectname(vce.getOppsubjno()));
+            vce.setOppname(subjectDao.getSubjectname(vce.getOppsubjno(), vce.getTenantId()));
           }
           voucherEntryDao.save(vce);
           Double befMerchbal = v_subjbaldict.get(vce.getSubjno());
@@ -352,7 +359,7 @@
           if (Subject.SUBJNO_MACHANT_INCOME.equals(vce.getOppsubjno())) {
             vce.setOppname(shopaccDao.getShopname(vce.getOppaccno()));
           } else {
-            vce.setOppname(subjectDao.getSubjectname(vce.getOppsubjno()));
+            vce.setOppname(subjectDao.getSubjectname(vce.getOppsubjno(), vce.getTenantId()));
           }
           voucherEntryDao.save(vce);
         }
@@ -374,11 +381,11 @@
 
     //核算科目日结表科目余额和凭证明细余额是否一致
     for (String subjno : v_subjbaldict.keySet()) {
-      TSubjectday tSubjectday = subjectdayDao.getSubjectDayById(String.valueOf(settledate), subjno);
+      TSubjectday tSubjectday = subjectdayDao.getSubjectDayById(String.valueOf(settledate), subjno, TenantContext.getTenantSchema());
       if (!MoneyUtil.moneyEqual(v_subjbaldict.get(subjno), tSubjectday.getDrbal() + tSubjectday.getCrbal())) {
         throw new Exception("结算后检查失败:科目日结表期末余额不等,科目号[" + subjno + "],科目余额[" + (tSubjectday.getDrbal() + tSubjectday.getCrbal()) + "],凭证科目余额[" + v_subjbaldict.get(subjno) + "]");
       }
-      TSubjectbal tSubjectbal = subjectbalDao.getOne(subjno);
+      TSubjectbal tSubjectbal = subjectbalDao.getBySubjnoAndTenantId(subjno, tSubjectday.getTenantId());
       tSubjectbal.setBegindrbal(tSubjectday.getBegindrbal());
       tSubjectbal.setBegincrbal(tSubjectday.getBegincrbal());
       tSubjectbal.setDramt(tSubjectday.getDramt());
@@ -390,8 +397,8 @@
     }
 
     //核对商户日结表余额表和科目日结表商户余额是否一致
-    TSubjectday shopSubjectday = subjectdayDao.getSubjectDayById(String.valueOf(settledate), Subject.SUBJNO_MACHANT_INCOME);
-    Double merchbal = shopaccdayDao.getSumBalance(String.valueOf(settledate));
+    TSubjectday shopSubjectday = subjectdayDao.getSubjectDayById(String.valueOf(settledate), Subject.SUBJNO_MACHANT_INCOME, TenantContext.getTenantSchema());
+    Double merchbal = shopaccdayDao.getSumBalance(String.valueOf(settledate), TenantContext.getTenantSchema()); //
     double shopSubbal = (shopSubjectday == null ? 0 : shopSubjectday.getCrbal());
     double shopMerchbal = (merchbal == null ? 0 : merchbal);
     if (!MoneyUtil.moneyEqual(shopSubbal, shopMerchbal)) {
@@ -399,7 +406,7 @@
     }
 
     //核算一级科目余额是否平衡
-    FSubjectInfoBean allParentSubjbal = subjectdayDao.getAllParentSubjectSumInfo(String.valueOf(settledate));
+    FSubjectInfoBean allParentSubjbal = subjectdayDao.getAllParentSubjectSumInfo(String.valueOf(settledate), TenantContext.getTenantSchema());
     if (!MoneyUtil.moneyEqual(allParentSubjbal.getBegindrbal(), allParentSubjbal.getBegincrbal())) {
       throw new Exception("结算后检查失败:一级科目余额表期初余额不平衡,借方[" + allParentSubjbal.getBegindrbal() + "],贷方[" + allParentSubjbal.getBegincrbal() + "]");
     }
@@ -410,8 +417,8 @@
       throw new Exception("结算后检查失败:一级科目余额表期末额不平衡,借方[" + allParentSubjbal.getDrbal() + "]贷方[" + allParentSubjbal.getCrbal() + "]");
     }
     //校验科目余额表的balflag=1的总期末余额和balflag=2的总期末余额是否一致
-    Double balflag_1_sumbal = subjectbalDao.getSumEndsubjectBalByEndflag(1);
-    Double balflag_2_sumbal = subjectbalDao.getSumEndsubjectBalByEndflag(2);
+    Double balflag_1_sumbal = subjectbalDao.getSumEndsubjectBalByEndflag(1, TenantContext.getTenantSchema());
+    Double balflag_2_sumbal = subjectbalDao.getSumEndsubjectBalByEndflag(2, TenantContext.getTenantSchema());
     if (null == balflag_1_sumbal || null == balflag_1_sumbal) throw new Exception("结算后检查失败:科目余额表无数据");
     if (!MoneyUtil.moneyEqual(balflag_1_sumbal, balflag_2_sumbal)) {
       throw new Exception("结算后检查失败:科目余额表期末余额不平衡,借方[" + balflag_1_sumbal + "],贷方[" + balflag_2_sumbal + "]");
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/framework/service/impl/SystemUtilServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/framework/service/impl/SystemUtilServiceImpl.java
index baf8449..d67a64d 100644
--- a/payapi/src/main/java/com/supwisdom/dlpay/framework/service/impl/SystemUtilServiceImpl.java
+++ b/payapi/src/main/java/com/supwisdom/dlpay/framework/service/impl/SystemUtilServiceImpl.java
@@ -84,7 +84,7 @@
 
   @Override
   public String getTranscodeName(int transocde, String defaultValue) {
-    TTranscode tTranscode = transcodeDao.getOne(transocde);
+    TTranscode tTranscode = transcodeDao.getByTranscode(transocde);
     if (null != tTranscode && !StringUtil.isEmpty(tTranscode.getTransname())) {
       return tTranscode.getTransname();
     }
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/bean/SettleLogSearchBean.java b/payapi/src/main/java/com/supwisdom/dlpay/system/bean/SettleLogSearchBean.java
new file mode 100644
index 0000000..082c2ea
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/bean/SettleLogSearchBean.java
@@ -0,0 +1,40 @@
+package com.supwisdom.dlpay.system.bean;
+
+public class SettleLogSearchBean {
+  private Integer page;
+  private Integer limit;
+  private String accdate;
+  private String status;
+
+  public Integer getPage() {
+    return page;
+  }
+
+  public void setPage(Integer page) {
+    this.page = page;
+  }
+
+  public Integer getLimit() {
+    return limit;
+  }
+
+  public void setLimit(Integer limit) {
+    this.limit = limit;
+  }
+
+  public String getAccdate() {
+    return accdate;
+  }
+
+  public void setAccdate(String accdate) {
+    this.accdate = accdate;
+  }
+
+  public String getStatus() {
+    return status;
+  }
+
+  public void setStatus(String status) {
+    this.status = status;
+  }
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/controller/SettlementLogController.java b/payapi/src/main/java/com/supwisdom/dlpay/system/controller/SettlementLogController.java
new file mode 100644
index 0000000..296af29
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/controller/SettlementLogController.java
@@ -0,0 +1,56 @@
+package com.supwisdom.dlpay.system.controller;
+
+import com.supwisdom.dlpay.api.bean.JsonResult;
+import com.supwisdom.dlpay.framework.domain.TSettleLog;
+import com.supwisdom.dlpay.framework.domain.TSyspara;
+import com.supwisdom.dlpay.framework.util.PageResult;
+import com.supwisdom.dlpay.framework.util.WebConstant;
+import com.supwisdom.dlpay.system.bean.SettleLogSearchBean;
+import com.supwisdom.dlpay.system.service.SettlementLogService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * 结算日志
+ * */
+@Controller
+public class SettlementLogController {
+  @Autowired
+  private SettlementLogService settlementLogService;
+
+  @GetMapping("/settlelog/index")
+  public String userdtlView() {
+    return "system/settlelog/index";
+  }
+
+  @GetMapping("/settlelog/datalist")
+  @PreAuthorize("hasPermission('/settlelog/index','')")
+  @ResponseBody
+  public PageResult<TSettleLog> searchUserdtlPage(@ModelAttribute SettleLogSearchBean searchBean) {
+    try {
+      Integer pageNo = searchBean.getPage();
+      Integer pageSize = searchBean.getLimit();
+      if (null == pageNo || pageNo < 1) pageNo = WebConstant.PAGENO_DEFAULT;
+      if (null == pageSize || pageSize < 1) pageSize = WebConstant.PAGESIZE_DEFAULT;
+      return settlementLogService.getSettleLogPage(searchBean,pageNo,pageSize);
+    } catch (Exception e) {
+      e.printStackTrace();
+      return new PageResult<>(99, "系统查询错误");
+    }
+  }
+
+  @PostMapping("/settlelog/dosettle")
+  @PreAuthorize("hasPermission('/settlelog/dosettle','')")
+  @ResponseBody
+  public JsonResult doSettlement() {
+    try {
+      return JsonResult.error("暂不支持调用结算执行逻辑");
+    } catch (Exception e) {
+      e.printStackTrace();
+      return JsonResult.error("系统处理异常").put("exception", e);
+    }
+  }
+
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/service/SettlementLogService.java b/payapi/src/main/java/com/supwisdom/dlpay/system/service/SettlementLogService.java
new file mode 100644
index 0000000..0dfb031
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/service/SettlementLogService.java
@@ -0,0 +1,11 @@
+package com.supwisdom.dlpay.system.service;
+
+import com.supwisdom.dlpay.framework.domain.TSettleLog;
+import com.supwisdom.dlpay.framework.util.PageResult;
+import com.supwisdom.dlpay.system.bean.SettleLogSearchBean;
+import org.springframework.transaction.annotation.Transactional;
+
+public interface SettlementLogService {
+  @Transactional(rollbackFor = Exception.class, readOnly = true)
+  PageResult<TSettleLog> getSettleLogPage(SettleLogSearchBean searchBean, int pageNo, int pageSize);
+}
diff --git a/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/SettlementLogServiceImpl.java b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/SettlementLogServiceImpl.java
new file mode 100644
index 0000000..f5cd51f
--- /dev/null
+++ b/payapi/src/main/java/com/supwisdom/dlpay/system/service/impl/SettlementLogServiceImpl.java
@@ -0,0 +1,56 @@
+package com.supwisdom.dlpay.system.service.impl;
+
+import com.supwisdom.dlpay.framework.dao.SettleLogDao;
+import com.supwisdom.dlpay.framework.domain.TSettleLog;
+import com.supwisdom.dlpay.framework.util.DateUtil;
+import com.supwisdom.dlpay.framework.util.PageResult;
+import com.supwisdom.dlpay.framework.util.StringUtil;
+import com.supwisdom.dlpay.system.bean.SettleLogSearchBean;
+import com.supwisdom.dlpay.system.service.SettlementLogService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.PageRequest;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.jpa.domain.Specification;
+import org.springframework.stereotype.Service;
+
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaQuery;
+import javax.persistence.criteria.Predicate;
+import javax.persistence.criteria.Root;
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+public class SettlementLogServiceImpl implements SettlementLogService {
+  @Autowired
+  private SettleLogDao settleLogDao;
+
+
+  @Override
+  public PageResult<TSettleLog> getSettleLogPage(SettleLogSearchBean searchBean, int pageNo, int pageSize) {
+    Pageable pageable = PageRequest.of(pageNo - 1, pageSize, Sort.by(Sort.Direction.DESC, "starttime"));
+    Page<TSettleLog> page = settleLogDao.findAll(new Specification<TSettleLog>() {
+      @Override
+      public Predicate toPredicate(Root<TSettleLog> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
+        List<Predicate> predicates = new ArrayList<>();
+        if (!StringUtil.isEmpty(searchBean.getAccdate())) {
+          predicates.add(criteriaBuilder.ge(root.get("starttime").as(Long.class), Long.valueOf(DateUtil.unParseToDateFormat(searchBean.getAccdate()) + "000000")));
+          predicates.add(criteriaBuilder.le(root.get("endtime").as(Long.class), Long.valueOf(DateUtil.unParseToDateFormat(searchBean.getAccdate()) + "235959")));
+        }
+
+        if (!StringUtil.isEmpty(searchBean.getStatus())) {
+          if ("success".equalsIgnoreCase(searchBean.getStatus())) {
+            predicates.add(criteriaBuilder.equal(root.get("errcode").as(String.class), "0"));
+          } else {
+            predicates.add(criteriaBuilder.notEqual(root.get("errcode").as(String.class), "0"));
+            predicates.add(criteriaBuilder.notEqual(root.get("errcode").as(String.class), "-99"));
+          }
+        }
+        return criteriaBuilder.and(predicates.toArray(new Predicate[0]));
+      }
+    }, pageable);
+    return new PageResult<>(page);
+  }
+}
diff --git a/payapi/src/main/resources/data-postgresql.sql b/payapi/src/main/resources/data-postgresql.sql
index 89ba0ee..4298c90 100644
--- a/payapi/src/main/resources/data-postgresql.sql
+++ b/payapi/src/main/resources/data-postgresql.sql
@@ -1,6 +1,6 @@
 --pg--
-INSERT INTO "tb_period" ("period_year", "period_month", "startdate", "enddate", "settleflag" , "tenantid")
-VALUES (to_number(to_char(CURRENT_TIMESTAMP,'yyyy'),'9999'),to_number(to_char(CURRENT_TIMESTAMP,'MM'),'99'), to_char(CURRENT_TIMESTAMP,'yyyyMM')||'01', to_char((to_date(to_char(CURRENT_TIMESTAMP+'1 month','yyyyMM')||'01','yyyyMMdd')-1)::Timestamp,'yyyyMMdd'), 0, '{tenantid}');
+INSERT INTO "tb_period" ("id", "period_year", "period_month", "startdate", "enddate", "settleflag" , "tenantid")
+VALUES ('8a53b7826c65b925016c65bfa7c3001c',to_number(to_char(CURRENT_TIMESTAMP,'yyyy'),'9999'),to_number(to_char(CURRENT_TIMESTAMP,'MM'),'99'), to_char(CURRENT_TIMESTAMP,'yyyyMM')||'01', to_char((to_date(to_char(CURRENT_TIMESTAMP+'1 month','yyyyMM')||'01','yyyyMMdd')-1)::Timestamp,'yyyyMMdd'), 0, '{tenantid}');
 
 insert into TB_SETTLECTL(BOOKSETNO,PERIODYEAR,PERIODMONTH,STATDATE,SETTLEDATE,STATUS,updtime, "tenantid")
 values (1,to_number(to_char(CURRENT_TIMESTAMP,'yyyy'),'9999'),to_number(to_char(CURRENT_TIMESTAMP,'MM'),'99'),to_number(to_char(CURRENT_TIMESTAMP,'yyyyMMdd'),'99999999'),to_number(to_char(CURRENT_TIMESTAMP,'yyyyMMdd'),'99999999'),0,to_char(CURRENT_TIMESTAMP,'yyyyMMddhh24miss'), '{tenantid}');
diff --git a/payapi/src/main/resources/data.sql b/payapi/src/main/resources/data.sql
index c177115..80a95a2 100644
--- a/payapi/src/main/resources/data.sql
+++ b/payapi/src/main/resources/data.sql
@@ -63,6 +63,8 @@
 VALUES (30, NULL, 1, NULL, '', '/report/subjectdetail', '科目明细账', 2, 20, '{tenantid}');
 INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
 VALUES (31, NULL, 1, NULL, '', '/report/shopbusiness', '商户营业情况表', 3, 20, '{tenantid}');
+INSERT INTO "tb_function" ("id", "createtime", "isleaf", "lastsaved", "menuicon", "menuurl", "name", "ordernum", "parentid", tenantid)
+VALUES (32, NULL, 1, NULL, '', '/settlelog/index', '结算日志', 5, 3, '{tenantid}');
 
 
 INSERT INTO "tb_role_function" ("id", "functionid", "roleid", tenantid)
@@ -117,6 +119,8 @@
 VALUES ('ff8080816b7947ed016b79557736007b', 12, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
 INSERT INTO "tb_role_function" ("id", "functionid", "roleid", tenantid)
 VALUES ('ff8080816b7947ed016b795577370081', 18, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO "tb_role_function" ("id", "functionid", "roleid", tenantid)
+VALUES ('ff8080816c8468e8016c846d7a570017', 32, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
 
 INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
 VALUES (4, '1', 4, '添加功能', '/function/add', '{tenantid}');
@@ -244,6 +248,10 @@
 VALUES (74, '', 31, '查询', '/report/shopbusiness', '{tenantid}');
 INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
 VALUES (76, '', 18, '新增', '/param/addsourcetype', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (77, '', 32, '查询', '/settlelog/index', '{tenantid}');
+INSERT INTO "tb_resource" ("id", "code", "function_id", "name", "uri", tenantid)
+VALUES (78, '', 32, '查询', '/settlelog/dosettle', '{tenantid}');
 
 INSERT INTO "tb_permission" ("id", "resid", "role_func_id", "roleid", tenantid)
 VALUES ('ff8080816b7947ed016b795577300036', 16, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
@@ -371,7 +379,10 @@
 VALUES ('ff8080816bbb130c016bbb6ea2f700c9', 76, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
 INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
 VALUES ('ff8080816bbb130c016bbb6ea2f600b3', 26, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
-
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816c8468e8016c846d7a5d0018', 77, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
+INSERT INTO  "tb_permission" ("id", "resid", "role_func_id", "roleid", "tenantid")
+VALUES ('ff8080816c85279d016c852aa829000d', 78, NULL, 'd1yctWs5+ks0iQN3m9bUvRHus6HbKbrs', '{tenantid}');
 
 INSERT INTO "tb_subject" ("subjid","subjno", "balflag", "displayflag", "endflag", "fsubjno", "opendate", "subjlevel", "subjname", "subjtype", "tenantid")
 VALUES (1, '1001', 1, 'y', 1, NULL, 20190430, 1, '库存现金', 1, '{tenantid}');
diff --git a/payapi/src/main/resources/templates/system/settlelog/index.html b/payapi/src/main/resources/templates/system/settlelog/index.html
new file mode 100644
index 0000000..3ba86e1
--- /dev/null
+++ b/payapi/src/main/resources/templates/system/settlelog/index.html
@@ -0,0 +1,152 @@
+<div class="layui-card">
+    <div class="layui-card-header">
+        <h2 class="header-title">结算日志</h2>
+        <span class="layui-breadcrumb pull-right">
+          <a href="#">系统中心</a>
+          <a><cite>结算日志</cite></a>
+        </span>
+    </div>
+    <div class="layui-card-body">
+        <div class="layui-form toolbar">
+            搜索：
+            <input id="search-settlelog-accdate" class="layui-input search-input" type="text" style="width: 150px;"
+                   placeholder="输入执行日期查询"/>&emsp;
+            <select id="search-settlelog-status" class="layui-select search-input">
+                <option value="">--请选择状态--</option>
+                <option value="success">成功</option>
+                <option value="error">失败</option>
+            </select>
+            <button id="search-settlelog-search" class="layui-btn icon-btn" data-type="search"><i class="layui-icon">&#xe615;</i>搜索
+            </button>
+            <button id="search-settlelog-deal" class="layui-btn icon-btn layui-btn-normal" data-type="add"><i
+                    class="layui-icon">&#xe605;</i>执行结算
+            </button>
+            <button id="search-settlelog-reset" class="layui-btn layui-btn-primary" data-type="reset"><i
+                    class="layui-icon"></i>清 空
+            </button>
+        </div>
+        <table class="layui-table" id="settlementLogTable" lay-filter="settlementLogTable-filter"></table>
+    </div>
+</div>
+
+<script>
+    layui.use(['form', 'table', 'layer', 'admin', 'element', 'laydate'], function () {
+        var form = layui.form;
+        var table = layui.table;
+        var admin = layui.admin;
+        var laydate = layui.laydate;
+
+        form.render("select");
+        laydate.render({
+            elem: '#search-settlelog-accdate',
+            trigger: 'click'
+        });
+
+        // 渲染表格
+        table.render({
+            elem: '#settlementLogTable',
+            url: '[[@{/settlelog/datalist}]]',
+            page: true,
+            cols: [
+                [
+                    {
+                        field: 'starttime',
+                        title: '开始时间',
+                        width: 200,
+                        align: 'center',
+                        fixed: 'left',
+                        sort: true,
+                        templet: function (e) {
+                            return admin.formatDate(e.starttime);
+                        }
+                    },
+                    {
+                        field: 'endtime',
+                        title: '结束时间',
+                        width: 200,
+                        align: 'center',
+                        fixed: 'left',
+                        sort: true,
+                        templet: function (e) {
+                            return admin.formatDate(e.endtime);
+                        }
+                    },
+                    {
+                        field: 'errcode', title: '状态', width: 100, align: 'center', sort: true, templet: function (e) {
+                            if (null == e.errcode) {
+                                return '';
+                            } else if ('0' == e.errcode) {
+                                return '<span class="layui-badge layui-bg-green">成功</span>';
+                            } else if('-99' == e.errcode){
+                                return '<span class="layui-badge layui-bg-gray">无效</span>';
+                            } else {
+                                return '<span class="layui-badge">失败</span>';
+                            }
+                        }
+                    },
+                    {
+                        align: 'center', title: '执行时间', width: 120, templet: function (e) {
+                            if (null == e.endtime) {
+                                return '-';
+                            }
+                            var seconds = moment(e.endtime, 'YYYYMMDDHHmmss').diff(moment(e.starttime, 'YYYYMMDDHHmmss'), 'seconds');
+                            if (seconds > 0) {
+                                var h = parseInt(seconds / 3600);
+                                var m = parseInt((seconds - 3600 * h) / 60);
+                                var s = seconds % 60;
+                                var msg = '';
+                                if (h > 0) {
+                                    msg = msg + h + '时';
+                                }
+                                if (m > 0) {
+                                    msg = msg + m + '分';
+                                }
+                                if (s > 0) {
+                                    msg = msg + s + '秒';
+                                }
+                                return msg;
+                            } else {
+                                return '0';
+                            }
+                        }
+                    },
+                    {field: 'errcode', title: '错误码', width: 100, align: 'center'},
+                    {field: 'errmsg', title: '错误信息', align: 'left'}
+                ]
+            ]
+        });
+        // 搜索按钮点击事件
+        $('#search-settlelog-search').click(function () {
+            var accdate = $("#search-settlelog-accdate").val();
+            var status = $("#search-settlelog-status").val();
+            table.reload('settlementLogTable', {where: {accdate: accdate, status: status}, page: {curr: 1}});
+        });
+
+        $('#search-settlelog-deal').click(function () {
+            var token = $("meta[name='_csrf_token']").attr("value");
+            admin.go('[[@{/settlelog/dosettle}]]', {
+                _csrf: token
+            }, function (data) {
+                if (data.code === 200) {
+                    layer.msg(data.msg, {icon: 1, time: 1000});
+                    table.reload('settlementLogTable');
+                } else if (data.code === 401) {
+                    layer.msg(data.msg, {icon: 2, time: 1500}, function () {
+                        location.replace('[[@{/login}]]');
+                    }, 1000);
+                } else {
+                    layer.msg(data.msg, {icon: 2});
+                    return;
+                }
+            }, function (err) {
+                admin.errorBack(err);
+            });
+        });
+
+        $('#search-settlelog-reset').click(function () {
+            $("#search-settlelog-accdate").val("");
+            $("#search-settlelog-status").val("");
+            form.render("select");
+        });
+    });
+</script>
\ No newline at end of file
