diff --git a/src/main/java/com/supwisdom/dlpay/consume/dao/DebitCreditDtlDao.java b/src/main/java/com/supwisdom/dlpay/consume/dao/DebitCreditDtlDao.java
index 220ff83..b5004e3 100644
--- a/src/main/java/com/supwisdom/dlpay/consume/dao/DebitCreditDtlDao.java
+++ b/src/main/java/com/supwisdom/dlpay/consume/dao/DebitCreditDtlDao.java
@@ -5,20 +5,19 @@
 import com.supwisdom.dlpay.framework.data.VoucherTemp;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
-import org.springframework.web.bind.annotation.RequestParam;
 
 import java.util.List;
 
 @Repository
 public interface DebitCreditDtlDao extends JpaRepository<TDebitCreditDtl, TDebitCreditDtlPK> {
 
-  @Query(value = "select a.drsubjno,a.draccno,a.crsubjno,a.craccno,a.summary,count(*) as transcnt,sum(amount) as transamt " +
+  @Query(value = "select a.drsubjno,a.crsubjno,a.summary,count(distinct a.refno) as transcnt,sum(a.amount) as transamt " +
       "from TB_USERDTL_DEBITCREDIT a left join TB_USERDTL b on a.refno=b.refno " +
       "where b.status='success' and b.accdate=:settledate " +
-      "group by a.drsubjno,a.draccno,a.crsubjno,a.craccno,a.summary ", nativeQuery = true)
-  List<VoucherTemp> getVoucherData(@RequestParam("settledate") String settledate);
-
+      "group by a.drsubjno,a.crsubjno,a.summary ", nativeQuery = true)
+  List<VoucherTemp> getVoucherData(@Param("settledate") String settledate);
 
   List<TDebitCreditDtl> findByRefno(String refno);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/dao/PeriodDao.java b/src/main/java/com/supwisdom/dlpay/framework/dao/PeriodDao.java
index 688df2e..8ec82ca 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/PeriodDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/PeriodDao.java
@@ -5,17 +5,17 @@
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Lock;
 import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
-import org.springframework.web.bind.annotation.RequestParam;
 
 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(@RequestParam("periodyear") Integer periodyear, @RequestParam("periodmonth") Integer periodmonth);
+  TPeriod getPeriod(@Param("periodyear") Integer periodyear, @Param("periodmonth") Integer periodmonth);
 
   @Lock(LockModeType.PESSIMISTIC_FORCE_INCREMENT)
   @Query(value = "from TPeriod t where t.periodYear=:periodyear and t.periodMonth=:periodmonth ")
-  TPeriod getTPeriodWithLock(@RequestParam("periodyear") Integer periodyear, @RequestParam("periodmonth") Integer periodmonth);
+  TPeriod getTPeriodWithLock(@Param("periodyear") Integer periodyear, @Param("periodmonth") Integer periodmonth);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/dao/SettleCtlDao.java b/src/main/java/com/supwisdom/dlpay/framework/dao/SettleCtlDao.java
index 5a80eab..07dcd70 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/SettleCtlDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/SettleCtlDao.java
@@ -4,21 +4,21 @@
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Lock;
 import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
-import org.springframework.web.bind.annotation.RequestParam;
 
 import javax.persistence.LockModeType;
 
 @Repository
 public interface SettleCtlDao extends JpaRepository<TSettlectl, Integer> {
-  @Lock(value = LockModeType.PESSIMISTIC_FORCE_INCREMENT)
+  @Lock(value = LockModeType.PESSIMISTIC_WRITE)
   TSettlectl findByBooksetno(Integer booksetno);
 
-  @Lock(value = LockModeType.PESSIMISTIC_FORCE_INCREMENT)
+  @Lock(value = LockModeType.PESSIMISTIC_WRITE)
   @Query(value = "from TSettlectl where booksetno=:booksetno ")
-  TSettlectl findByBooksetnoWithLock(@RequestParam("booksetno") Integer booksetno);
+  TSettlectl findByBooksetnoWithLock(@Param("booksetno") Integer booksetno);
 
   @Query(value = "update TB_SETTLECTL set PERIOD_YEAR=:peridyear,PERIOD_MONTH=:peridmonth where BOOKSETNO=1 ", nativeQuery = true)
-  void updateSettlePeriod(@RequestParam("peridyear") int peridyear, @RequestParam("peridmonth") int peridmonth);
+  void updateSettlePeriod(@Param("peridyear") int peridyear, @Param("peridmonth") int peridmonth);
 
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccDao.java b/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccDao.java
index e7a7a99..89cf592 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccDao.java
@@ -1,13 +1,11 @@
 package com.supwisdom.dlpay.framework.dao;
 
-import com.supwisdom.dlpay.framework.data.AccnameBean;
-import com.supwisdom.dlpay.framework.data.AccnoBean;
 import com.supwisdom.dlpay.framework.data.ExistBean;
 import com.supwisdom.dlpay.framework.domain.TShopacc;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
-import org.springframework.web.bind.annotation.RequestParam;
 
 import java.util.List;
 
@@ -15,16 +13,16 @@
 public interface ShopaccDao extends JpaRepository<TShopacc, String> {
 
   @Query(value = "select t.SHOPACCNO as accno from TB_SHOPACC t left join TB_SHOPACCBAL a on t.SHOPACCNO=a.SHOPACCNO where a.SHOPACCNO is null ", nativeQuery = true)
-  List<AccnoBean> getNewShopacc();
+  List<String> getNewShopacc();
 
-  @Query(value = "select count(t.*) as existed from TB_SHOPACC t left join TB_SHOPACCBAL a on t.SHOPACCNO=a.SHOPACCNO where a.SHOPACCNO is null and t.STATUS='normal' ", nativeQuery = true)
+  @Query(value = "select count(t.shopaccno) as existed from TB_SHOPACC t left join TB_SHOPACCBAL a on t.SHOPACCNO=a.SHOPACCNO where a.SHOPACCNO is null and t.STATUS='normal' ", nativeQuery = true)
   ExistBean checkSettleShopacc();
 
   @Query(value = "select shopname from TShopacc where shopaccno=:shopaccno ")
-  AccnameBean getShopname(@RequestParam("shopaccno") String shopaccno);
+  String getShopname(@Param("shopaccno") String shopaccno);
 
   @Query(value = "select t.SHOPACCNO as accno from TB_SHOPACC t left join TB_SHOPACCBAL a on t.SHOPACCNO=a.SHOPACCNO where a.SHOPACCNO is null and t.opendate>=:settday ", nativeQuery = true)
-  List<AccnoBean> getNewAddShopacc(@RequestParam("settday") String settday);
+  List<String> getNewAddShopacc(@Param("settday") String settday);
 
   TShopacc findByShopid(Integer shopid);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccbalDao.java b/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccbalDao.java
index 2bd91c0..1721e6e 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccbalDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccbalDao.java
@@ -4,8 +4,8 @@
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Lock;
 import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
-import org.springframework.web.bind.annotation.RequestParam;
 
 import javax.persistence.LockModeType;
 import java.util.List;
@@ -14,10 +14,10 @@
 public interface ShopaccbalDao extends JpaRepository<TShopaccbal, String> {
 
   @Query(value = "select t.* from TB_SHOPACCBAL t left join (select shopaccno from TB_SHOPACCDAY where accdate=:lastsettday ) a on t.shopaccno=a.shopaccno where a.shopaccno is null ", nativeQuery = true)
-  List<TShopaccbal> getUnsettleShopacc(@RequestParam("lastsettday") String lastsettday);
+  List<TShopaccbal> getUnsettleShopacc(@Param("lastsettday") String lastsettday);
 
   @Lock(LockModeType.PESSIMISTIC_FORCE_INCREMENT)
   @Query(value = "from TShopaccbal where shopaccno=:shopaccno ")
-  TShopaccbal getTShopaccbalByIdWithLock(@RequestParam("shopaccno")String shopaccno);
+  TShopaccbal getTShopaccbalByIdWithLock(@Param("shopaccno")String shopaccno);
 
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccdayDao.java b/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccdayDao.java
index 7ea21f6..b7acdb3 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccdayDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccdayDao.java
@@ -1,12 +1,11 @@
 package com.supwisdom.dlpay.framework.dao;
 
-import com.supwisdom.dlpay.framework.data.AmountBean;
 import com.supwisdom.dlpay.framework.domain.TShopaccday;
 import com.supwisdom.dlpay.framework.domain.TShopaccdayPK;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
-import org.springframework.web.bind.annotation.RequestParam;
 
 import java.util.List;
 
@@ -14,15 +13,15 @@
 public interface ShopaccdayDao extends JpaRepository<TShopaccday, TShopaccdayPK> {
 
   @Query(value = "from TShopaccday t where t.accdate=:accdate ")
-  List<TShopaccday> getShopaccdayByAccdate(@RequestParam("accdate") String accdate);
+  List<TShopaccday> getShopaccdayByAccdate(@Param("accdate") String accdate);
 
   @Query(value = "from TShopaccday t where t.accdate=:accdate and t.shopaccno=:shopaccno ")
-  TShopaccday getTShopaccdayById(@RequestParam("accdate") String accdate, @RequestParam("shopaccno") String shopaccno);
+  TShopaccday getTShopaccdayById(@Param("accdate") String accdate, @Param("shopaccno") String shopaccno);
 
   @Query(value = "update TShopaccday set balance=beginbal-dramt+cramt,updtime=:updtime where accdate=:accdate ")
-  void updateShopaccdayBalance(@RequestParam("accdate") String accdate,@RequestParam("updtime")String updtime);
+  void updateShopaccdayBalance(@Param("accdate") String accdate,@Param("updtime")String updtime);
 
   @Query(value = "select sum(balance) as amount from TShopaccday where accdate=:accdate ")
-  AmountBean getSumBalance(@RequestParam("accdate") String accdate);
+  Double getSumBalance(@Param("accdate") String accdate);
 
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/dao/SubjectDao.java b/src/main/java/com/supwisdom/dlpay/framework/dao/SubjectDao.java
index 480750b..a694eaa 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/SubjectDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/SubjectDao.java
@@ -1,13 +1,11 @@
 package com.supwisdom.dlpay.framework.dao;
 
-import com.supwisdom.dlpay.framework.data.AccnameBean;
-import com.supwisdom.dlpay.framework.data.AccnoBean;
 import com.supwisdom.dlpay.framework.data.ExistBean;
 import com.supwisdom.dlpay.framework.domain.TSubject;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
-import org.springframework.web.bind.annotation.RequestParam;
 
 import java.util.List;
 
@@ -15,14 +13,14 @@
 public interface SubjectDao extends JpaRepository<TSubject, String> {
 
   @Query(value = "select t.SUBJNO as accno 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<AccnoBean> getNewSubject();
+  List<String> getNewSubject();
 
-  @Query(value = "select count(t.*) 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)
+  @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 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<AccnoBean> getNewSubjnos(@RequestParam("accdate") String accdate);
+  List<String> getNewSubjnos(@Param("accdate") String accdate);
 
   @Query(value = "select subjname from TSubject where subjno=:subjno ")
-  AccnameBean getSubjectname(@RequestParam("subjno") String subjno);
+  String getSubjectname(@Param("subjno") String subjno);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/dao/SubjectbalDao.java b/src/main/java/com/supwisdom/dlpay/framework/dao/SubjectbalDao.java
index 3aacfe3..71940c4 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/SubjectbalDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/SubjectbalDao.java
@@ -7,8 +7,8 @@
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Lock;
 import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
-import org.springframework.web.bind.annotation.RequestParam;
 
 import javax.persistence.LockModeType;
 import java.util.List;
@@ -17,18 +17,18 @@
 public interface SubjectbalDao extends JpaRepository<TSubjectbal, String> {
 
   @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(@RequestParam("lastsettday") String lastsettday);
+  List<TSubjectbal> getUnsettleSubjectbal(@Param("lastsettday") String lastsettday);
 
   @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(@RequestParam("fsubjno") String fsubjno);
+  MerchBean getSubjectInfo(@Param("fsubjno") String fsubjno);
 
   @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 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)
-  AmountBean getSumEndsubjectBalByEndflag(@RequestParam("balflag")Integer balflag);
+  Double getSumEndsubjectBalByEndflag(@Param("balflag")Integer balflag);
 
   @Lock(LockModeType.PESSIMISTIC_FORCE_INCREMENT)
   @Query("from TSubjectbal where subjno=:subjno ")
-  TSubjectbal getTSubjectbalBySubjnoWithLock(@RequestParam("subjno")String subjno);
+  TSubjectbal getTSubjectbalBySubjnoWithLock(@Param("subjno")String subjno);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/dao/SubjectdayDao.java b/src/main/java/com/supwisdom/dlpay/framework/dao/SubjectdayDao.java
index bd0f311..fb10362 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/SubjectdayDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/SubjectdayDao.java
@@ -6,8 +6,8 @@
 import com.supwisdom.dlpay.framework.domain.TSubjectdayPK;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
-import org.springframework.web.bind.annotation.RequestParam;
 
 import java.util.List;
 
@@ -15,23 +15,23 @@
 public interface SubjectdayDao extends JpaRepository<TSubjectday, TSubjectdayPK> {
 
   @Query(value = "from TSubjectday where accdate=:accdate ")
-  List<TSubjectday> getAllByAccdate(@RequestParam("accdate") String accdate);
+  List<TSubjectday> getAllByAccdate(@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) b on a.subjno=b.subjno where a.accdate=:accdate and b.subjno is not null ", nativeQuery = true)
-  List<MerchBean> getEndSubjectbalInfos(@RequestParam("accdate") String accdate);
+  List<MerchBean> getEndSubjectbalInfos(@Param("accdate") String accdate);
 
   @Query(value = "from TSubjectday where accdate=:accdate and subjno=:subjno")
-  TSubjectday getSubjectDayById(@RequestParam("accdate") String accdate, @RequestParam("subjno") String subjno);
+  TSubjectday getSubjectDayById(@Param("accdate") String accdate, @Param("subjno") String subjno);
 
   @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(@RequestParam("accdate") String accdate);
+  List<TSubjectday> getParentSubjectday(@Param("accdate") String accdate);
 
   @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(@RequestParam("accdate") String accdate, @RequestParam("fsubjno") String fsubjno);
+  FSubjectInfoBean getParentSumInfo(@Param("accdate") String accdate, @Param("fsubjno") String fsubjno);
 
   @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(@RequestParam("accdate") String accdate);
+  FSubjectInfoBean getAllParentSubjectSumInfo(@Param("accdate") String accdate);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/dao/TaskLockDao.java b/src/main/java/com/supwisdom/dlpay/framework/dao/TaskLockDao.java
index e9b3a37..9199a6a 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/TaskLockDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/TaskLockDao.java
@@ -5,8 +5,8 @@
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Lock;
 import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
-import org.springframework.web.bind.annotation.RequestParam;
 
 import javax.persistence.LockModeType;
 
@@ -15,7 +15,7 @@
 
   @Lock(LockModeType.PESSIMISTIC_FORCE_INCREMENT)
   @Query("select a from TTaskLock a where a.taskcode=:taskcode")
-  TTaskLock getTaskLockWithLock(@RequestParam("taskcode") String taskcode);
+  TTaskLock getTaskLockWithLock(@Param("taskcode") String taskcode);
 
   //================= database=Oracle =================//
   @Query(value = "select  to_char(sysdate,'yyyymmdd') as hostdate,to_char(sysdate,'hh24miss') as hosttime,to_char(sysdate,'yyyymmddhh24miss') as hostdatetime, sysdate from dual", nativeQuery = true)
diff --git a/src/main/java/com/supwisdom/dlpay/framework/dao/VoucherDao.java b/src/main/java/com/supwisdom/dlpay/framework/dao/VoucherDao.java
index f331a6b..18a4769 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/VoucherDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/VoucherDao.java
@@ -6,14 +6,14 @@
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Lock;
 import org.springframework.data.jpa.repository.Query;
-import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.data.repository.query.Param;
 
 import javax.persistence.LockModeType;
 import java.util.List;
 
 public interface VoucherDao extends JpaRepository<TVoucher, String> {
 
-  @Query(value = "select count(t.*) as existed from TB_VOUCHER t where t.POSTFLAG=0 and t.SOURCETYPE!='auto' ", nativeQuery = true)
+  @Query(value = "select count(t.voucherid) as existed from TB_VOUCHER t where t.POSTFLAG=0 and t.SOURCETYPE!='auto' ", nativeQuery = true)
   ExistBean checkExistUnpostVouhcer();
 
   @Query(value="delete from TB_VOUCHER where POSTFLAG=0 ",nativeQuery = true)
@@ -27,12 +27,12 @@
       "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 " +
       "group by va.accno order by va.accno ", nativeQuery = true)
-  List<MerchBean> getShopVoucherByAccdate(@RequestParam("settledate")Integer settledate);
+  List<MerchBean> getShopVoucherByAccdate(@Param("settledate")Integer settledate);
 
   @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(@RequestParam("voucherdate") Integer voucherdate, @RequestParam("subjno") String subjno);
+  MerchBean getSettleSuminfo(@Param("voucherdate") Integer voucherdate, @Param("subjno") String subjno);
 
   @Lock(LockModeType.PESSIMISTIC_FORCE_INCREMENT)
   @Query(value = "from TVoucher where voucherid=:voucherid ")
-  TVoucher findByVoucheridWithLock(@RequestParam("voucherid") String voucherid);
+  TVoucher findByVoucheridWithLock(@Param("voucherid") String voucherid);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/dao/VoucherEntryDao.java b/src/main/java/com/supwisdom/dlpay/framework/dao/VoucherEntryDao.java
index 2bb4664..893bd2a 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/VoucherEntryDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/VoucherEntryDao.java
@@ -5,9 +5,8 @@
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Lock;
 import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
-import org.springframework.web.bind.annotation.RequestParam;
-
 import javax.persistence.LockModeType;
 import java.util.List;
 
@@ -17,9 +16,9 @@
   void deleteUnpostVoucherentry();
 
   @Query(value = "from TVoucherEntry where voucherid in (select voucherid from TVoucher where voucherdate=:voucherdate) order by subjno,accno,voucherid ")
-  List<TVoucherEntry> getVoucherEntryByVoucherdate(@RequestParam("voucherdate") Integer voucherdate);
+  List<TVoucherEntry> getVoucherEntryByVoucherdate(@Param("voucherdate") Integer voucherdate);
 
   @Lock(LockModeType.PESSIMISTIC_FORCE_INCREMENT)
   @Query(value = "from TVoucherEntry t where t.voucherid=:voucherid ")
-  List<TVoucherEntry> getVoucherEntryByVoucherid(@RequestParam("voucherid")String voucherid);
+  List<TVoucherEntry> getVoucherEntryByVoucherid(@Param("voucherid")String voucherid);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/dao/VouchernoCtlDao.java b/src/main/java/com/supwisdom/dlpay/framework/dao/VouchernoCtlDao.java
index 51d3194..62d3827 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/VouchernoCtlDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/VouchernoCtlDao.java
@@ -4,15 +4,15 @@
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Lock;
 import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
-import org.springframework.web.bind.annotation.RequestParam;
 
 import javax.persistence.LockModeType;
 
 @Repository
 public interface VouchernoCtlDao extends JpaRepository<TVouchernoCtl, Integer> {
   @Query(value = "update TB_VOUCHERNOCTL set PERIOD_MONTH=:peridmonth,VOUCHERNO=:voucherno where VOUCHERTYPE=1 ", nativeQuery = true)
-  void updateVoucherno(@RequestParam("peridmonth") int peridmonth, @RequestParam("voucherno") int voucherno);
+  void updateVoucherno(@Param("peridmonth") int peridmonth, @Param("voucherno") int voucherno);
 
   @Lock(LockModeType.PESSIMISTIC_FORCE_INCREMENT)
   @Query(value = "from TVouchernoCtl where vouchertype=1 ")
diff --git a/src/main/java/com/supwisdom/dlpay/framework/data/AccnameBean.java b/src/main/java/com/supwisdom/dlpay/framework/data/AccnameBean.java
deleted file mode 100644
index 6e0a312..0000000
--- a/src/main/java/com/supwisdom/dlpay/framework/data/AccnameBean.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package com.supwisdom.dlpay.framework.data;
-
-public interface AccnameBean {
-  String getAccname();
-}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/data/AccnoBean.java b/src/main/java/com/supwisdom/dlpay/framework/data/AccnoBean.java
deleted file mode 100644
index c086926..0000000
--- a/src/main/java/com/supwisdom/dlpay/framework/data/AccnoBean.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package com.supwisdom.dlpay.framework.data;
-
-public interface AccnoBean {
-  String getAccno();
-}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/data/AmountBean.java b/src/main/java/com/supwisdom/dlpay/framework/data/AmountBean.java
deleted file mode 100644
index c079755..0000000
--- a/src/main/java/com/supwisdom/dlpay/framework/data/AmountBean.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package com.supwisdom.dlpay.framework.data;
-
-public interface AmountBean {
-  Double getAmount();
-}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/data/ExistBean.java b/src/main/java/com/supwisdom/dlpay/framework/data/ExistBean.java
index d4f695a..a7691fc 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/data/ExistBean.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/data/ExistBean.java
@@ -1,5 +1,5 @@
 package com.supwisdom.dlpay.framework.data;
 
 public interface ExistBean {
-  public int getExisted();
+   Integer getExisted();
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/data/VoucherTemp.java b/src/main/java/com/supwisdom/dlpay/framework/data/VoucherTemp.java
index ee4e4d4..8a38e41 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/data/VoucherTemp.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/data/VoucherTemp.java
@@ -3,11 +3,11 @@
 public interface VoucherTemp {
   String getDrsubjno();
 
-  String getDraccno();
+//  String getDraccno();
 
   String getCrsubjno();
 
-  String getCraccno();
+//  String getCraccno();
 
   String getSummary();
 
diff --git a/src/main/java/com/supwisdom/dlpay/framework/service/impl/DayendSettleServiceImpl.java b/src/main/java/com/supwisdom/dlpay/framework/service/impl/DayendSettleServiceImpl.java
index ffefda1..b57c657 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/service/impl/DayendSettleServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/service/impl/DayendSettleServiceImpl.java
@@ -121,11 +121,11 @@
     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(), null, Math.abs(voucherTemp.getTransamt()), 0D, voucherTemp.getSummary(), voucherTemp.getCrsubjno(), null);
+      entry2 = new TVoucherEntry(voucher.getVoucherid(), 2, voucherTemp.getCrsubjno(), null, 0D, Math.abs(voucherTemp.getTransamt()), voucherTemp.getSummary(), voucherTemp.getDrsubjno(), null);
     } else {
-      entry1 = new TVoucherEntry(voucher.getVoucherid(), 1, voucherTemp.getCrsubjno(), voucherTemp.getCraccno(), 0D, Math.abs(voucherTemp.getTransamt()), voucherTemp.getSummary(), voucherTemp.getDrsubjno(), voucherTemp.getDraccno());
-      entry2 = new TVoucherEntry(voucher.getVoucherid(), 2, voucherTemp.getDrsubjno(), voucherTemp.getDraccno(), Math.abs(voucherTemp.getTransamt()), 0D, voucherTemp.getSummary(), voucherTemp.getCrsubjno(), voucherTemp.getCraccno());
+      entry1 = new TVoucherEntry(voucher.getVoucherid(), 1, voucherTemp.getCrsubjno(), null, 0D, Math.abs(voucherTemp.getTransamt()), voucherTemp.getSummary(), voucherTemp.getDrsubjno(), null);
+      entry2 = new TVoucherEntry(voucher.getVoucherid(), 2, voucherTemp.getDrsubjno(), null, Math.abs(voucherTemp.getTransamt()), 0D, voucherTemp.getSummary(), voucherTemp.getCrsubjno(), null);
     }
     voucherEntryDao.save(entry1);
     voucherEntryDao.save(entry2);
@@ -159,23 +159,23 @@
       }
     }
 
-    //新增商户插入商户余额表
-    List<AccnoBean> newShopaccList = shopaccDao.getNewShopacc();
-    if (!StringUtil.isEmpty(newShopaccList)) {
-      for (AccnoBean bean : newShopaccList) {
-        TShopaccbal shopaccbal = new TShopaccbal(bean.getAccno());
-        shopaccbalDao.save(shopaccbal);
-      }
-    }
-    if (shopaccDao.checkSettleShopacc().getExisted() > 0) {
-      throw new Exception("初始化数据错误:商户余额表数据没有包含所有有效的商户账户余额");
-    }
+//    //新增商户插入商户余额表
+//    List<String> newShopaccList = shopaccDao.getNewShopacc();
+//    if (!StringUtil.isEmpty(newShopaccList)) {
+//      for (String accno : newShopaccList) {
+//        TShopaccbal shopaccbal = new TShopaccbal(accno);
+//        shopaccbalDao.save(shopaccbal);
+//      }
+//    }
+//    if (shopaccDao.checkSettleShopacc().getExisted() > 0) {
+//      throw new Exception("初始化数据错误:商户余额表数据没有包含所有有效的商户账户余额");
+//    }
 
     //新增科目插入科目余额表（末级科目）
-    List<AccnoBean> newEndsubjectList = subjectDao.getNewSubject();
+    List<String> newEndsubjectList = subjectDao.getNewSubject();
     if (!StringUtil.isEmpty(newEndsubjectList)) {
-      for (AccnoBean bean : newEndsubjectList) {
-        TSubjectbal subjectbal = new TSubjectbal(bean.getAccno());
+      for (String subjno : newEndsubjectList) {
+        TSubjectbal subjectbal = new TSubjectbal(subjno);
         subjectbalDao.save(subjectbal);
       }
     }
@@ -189,36 +189,6 @@
       voucherDao.deleteUnpostVoucher();
     }
 
-    //充值凭证
-//    List<VoucherTemp> dpsList = dpsdtlDao.getVoucherData(String.valueOf(settledate));
-//    if (!StringUtil.isEmpty(dpsList)) {
-//      for (VoucherTemp dps : dpsList) {
-//        saveVoucher(dps);
-//      }
-//    }
-//
-//    List<VoucherTemp> dpsfeeList = dpsdtlDao.getFeeVoucherData(String.valueOf(settledate));
-//    if (!StringUtil.isEmpty(dpsfeeList)) {
-//      for (VoucherTemp dpsfee : dpsfeeList) {
-//        saveVoucher(dpsfee);
-//      }
-//    }
-//
-//    //消费凭证
-//    List<VoucherTemp> payList = transdtlDao.getFeeVoucherData(String.valueOf(settledate));
-//    if (!StringUtil.isEmpty(payList)) {
-//      for (VoucherTemp pay : payList) {
-//        saveVoucher(pay);
-//      }
-//    }
-//
-//    List<VoucherTemp> payfeeList = transdtlDao.getFeeVoucherData(String.valueOf(settledate));
-//    if (!StringUtil.isEmpty(payfeeList)) {
-//      for (VoucherTemp payfee : payfeeList) {
-//        saveVoucher(payfee);
-//      }
-//    }
-
     //用户交易凭证
     List<VoucherTemp> userList = debitCreditDtlDao.getVoucherData(String.valueOf(settledate));
     if (!StringUtil.isEmpty(userList)) {
@@ -249,37 +219,37 @@
       vouchernoCtlDao.save(vouchernoCtl);
     }
 
-    Map<String, Double> v_merchbaldict = new HashMap<String, Double>(0);
-    //根据商户昨天日结表生成当天日结表（交易前余额）， 新增商户添加记录（交易前余额为商户余额）
-    List<TShopaccday> lastShopaccdays = shopaccdayDao.getShopaccdayByAccdate(String.valueOf(lastsettday));
-    if (!StringUtil.isEmpty(lastShopaccdays)) {
-      for (TShopaccday lastday : lastShopaccdays) {
-        TShopaccday today = new TShopaccday(String.valueOf(settledate), lastday.getShopaccno(), periodYear, periodMonth, lastday.getBalance(), 0D, 0D, 0D);
-        shopaccdayDao.save(today);
-        v_merchbaldict.put(lastday.getShopaccno(), lastday.getBalance());
-      }
-    }
-    List<TShopaccbal> newShopbals = shopaccbalDao.getUnsettleShopacc(String.valueOf(lastsettday));
-    if (!StringUtil.isEmpty(newShopbals)) {
-      for (TShopaccbal newShopbal : newShopbals) {
-        TShopaccday today = new TShopaccday(String.valueOf(settledate), newShopbal.getShopaccno(), periodYear, periodMonth, newShopbal.getBeginbal(), 0D, 0D, 0D);
-        shopaccdayDao.save(today);
-        v_merchbaldict.put(newShopbal.getShopaccno(), newShopbal.getBeginbal());
-      }
-    }
-    List<MerchBean> merchBeanList = voucherDao.getShopVoucherByAccdate(settledate);
-    if (!StringUtil.isEmpty(merchBeanList)) {
-      for (MerchBean merch : merchBeanList) {
-        TShopaccday merchday = shopaccdayDao.getTShopaccdayById(String.valueOf(settledate), merch.getShopaccno());
-        if (null == merchday) {
-          throw new Exception("商户余额表无此商户账号[" + merch.getShopaccno() + "]");
-        }
-        merchday.setDramt(merch.getDramt() == null ? 0D : merch.getDramt());
-        merchday.setCramt(merch.getCramt() == null ? 0D : merch.getCramt());
-        shopaccdayDao.save(merchday);
-      }
-    }
-    shopaccdayDao.updateShopaccdayBalance(String.valueOf(settledate), systemUtilService.getSysdatetime().getHostdatetime()); //批量更新余额,商户日结表生成
+//    Map<String, Double> v_merchbaldict = new HashMap<String, Double>(0);
+//    //根据商户昨天日结表生成当天日结表（交易前余额）， 新增商户添加记录（交易前余额为商户余额）
+//    List<TShopaccday> lastShopaccdays = shopaccdayDao.getShopaccdayByAccdate(String.valueOf(lastsettday));
+//    if (!StringUtil.isEmpty(lastShopaccdays)) {
+//      for (TShopaccday lastday : lastShopaccdays) {
+//        TShopaccday today = new TShopaccday(String.valueOf(settledate), lastday.getShopaccno(), periodYear, periodMonth, lastday.getBalance(), 0D, 0D, 0D);
+//        shopaccdayDao.save(today);
+//        v_merchbaldict.put(lastday.getShopaccno(), lastday.getBalance());
+//      }
+//    }
+//    List<TShopaccbal> newShopbals = shopaccbalDao.getUnsettleShopacc(String.valueOf(lastsettday));
+//    if (!StringUtil.isEmpty(newShopbals)) {
+//      for (TShopaccbal newShopbal : newShopbals) {
+//        TShopaccday today = new TShopaccday(String.valueOf(settledate), newShopbal.getShopaccno(), periodYear, periodMonth, newShopbal.getBeginbal(), 0D, 0D, 0D);
+//        shopaccdayDao.save(today);
+//        v_merchbaldict.put(newShopbal.getShopaccno(), newShopbal.getBeginbal());
+//      }
+//    }
+//    List<MerchBean> merchBeanList = voucherDao.getShopVoucherByAccdate(settledate);
+//    if (!StringUtil.isEmpty(merchBeanList)) {
+//      for (MerchBean merch : merchBeanList) {
+//        TShopaccday merchday = shopaccdayDao.getTShopaccdayById(String.valueOf(settledate), merch.getShopaccno());
+//        if (null == merchday) {
+//          throw new Exception("商户余额表无此商户账号[" + merch.getShopaccno() + "]");
+//        }
+//        merchday.setDramt(merch.getDramt() == null ? 0D : merch.getDramt());
+//        merchday.setCramt(merch.getCramt() == null ? 0D : merch.getCramt());
+//        shopaccdayDao.save(merchday);
+//      }
+//    }
+//    shopaccdayDao.updateShopaccdayBalance(String.valueOf(settledate), systemUtilService.getSysdatetime().getHostdatetime()); //批量更新余额,商户日结表生成
 
     //根据科目昨天日结表生成当天日结表（交易前借贷方余额），新增末级科目插入记录（交易前余额为科目贷方余额）
     List<TSubjectday> lastSubjectDays = subjectdayDao.getAllByAccdate(String.valueOf(lastsettday));
@@ -296,17 +266,17 @@
         subjectdayDao.save(today);
       }
     }
-    List<AccnoBean> newFSubjnos = subjectDao.getNewSubjnos(String.valueOf(settledate)); //新增非末级科目
+    List<String> newFSubjnos = subjectDao.getNewSubjnos(String.valueOf(settledate)); //新增非末级科目
     if (!StringUtil.isEmpty(newFSubjnos)) {
-      for (AccnoBean bean : newFSubjnos) {
+      for (String subjno : newFSubjnos) {
         double beginDrbal = 0;
         double beginCrbal = 0;
-        MerchBean balInfo = subjectbalDao.getSubjectInfo(bean.getAccno()); //统计下级所有科目的交易前余额
+        MerchBean balInfo = subjectbalDao.getSubjectInfo(subjno); //统计下级所有科目的交易前余额
         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), bean.getAccno(), periodYear, periodMonth, beginDrbal, beginCrbal, 0D, 0D, 0D, 0D);
+        TSubjectday today = new TSubjectday(String.valueOf(settledate), subjno, periodYear, periodMonth, beginDrbal, beginCrbal, 0D, 0D, 0D, 0D);
         subjectdayDao.save(today);
       }
     }
@@ -360,23 +330,23 @@
     List<TVoucherEntry> entryList = voucherEntryDao.getVoucherEntryByVoucherdate(settledate);
     if (!StringUtil.isEmpty(entryList)) {
       for (TVoucherEntry vce : entryList) {
-        if (TradeDict.SUBJNO_SHOP.equals(vce.getSubjno())) {
-          //商户科目
-          Double befbal = v_merchbaldict.get(vce.getAccno());
-          if (null == befbal) throw new Exception("商户表商户账号[" + vce.getAccno() + "]不存在");
-          v_merchbaldict.put(vce.getAccno(), MoneyUtil.formatYuan(befbal + vce.getCramt() - vce.getDramt())); //更新余额
-          vce.setBalflag(2);
-          vce.setBalance(v_merchbaldict.get(vce.getAccno()));
-          if (!StringUtil.isEmpty(vce.getOppaccno())) {
-            vce.setOppname(shopaccDao.getShopname(vce.getOppaccno()).getAccname());
-          } else {
-            vce.setOppname(subjectDao.getSubjectname(vce.getOppsubjno()).getAccname());
-          }
-          voucherEntryDao.save(vce);
-          Double befMerchbal = v_subjbaldict.get(vce.getSubjno());
-          if (null == befMerchbal) throw new Exception("商户科目号[" + vce.getSubjno() + "]不存在");
-          v_subjbaldict.put(vce.getSubjno(), MoneyUtil.formatYuan(befMerchbal - vce.getDramt() + vce.getCramt())); //商户科目总余额更新
-        } else {
+//        if (TradeDict.SUBJNO_SHOP.equals(vce.getSubjno())) {
+//          //商户科目
+//          Double befbal = v_merchbaldict.get(vce.getAccno());
+//          if (null == befbal) throw new Exception("商户表商户账号[" + vce.getAccno() + "]不存在");
+//          v_merchbaldict.put(vce.getAccno(), MoneyUtil.formatYuan(befbal + vce.getCramt() - vce.getDramt())); //更新余额
+//          vce.setBalflag(2);
+//          vce.setBalance(v_merchbaldict.get(vce.getAccno()));
+//          if (!StringUtil.isEmpty(vce.getOppaccno())) {
+//            vce.setOppname(shopaccDao.getShopname(vce.getOppaccno()).getAccname());
+//          } else {
+//            vce.setOppname(subjectDao.getSubjectname(vce.getOppsubjno()).getAccname());
+//          }
+//          voucherEntryDao.save(vce);
+//          Double befMerchbal = v_subjbaldict.get(vce.getSubjno());
+//          if (null == befMerchbal) throw new Exception("商户科目号[" + vce.getSubjno() + "]不存在");
+//          v_subjbaldict.put(vce.getSubjno(), MoneyUtil.formatYuan(befMerchbal - vce.getDramt() + vce.getCramt())); //商户科目总余额更新
+//        } else {
           //其他科目
           Integer balflag = v_subjbalflagdict.get(vce.getSubjno());
           Double befbal = v_subjbaldict.get(vce.getSubjno());
@@ -388,28 +358,29 @@
           }
           vce.setBalflag(balflag);
           vce.setBalance(v_subjbaldict.get(vce.getSubjno()));
-          if (!StringUtil.isEmpty(vce.getOppaccno())) {
-            vce.setOppname(shopaccDao.getShopname(vce.getOppaccno()).getAccname());
-          } else {
-            vce.setOppname(subjectDao.getSubjectname(vce.getOppsubjno()).getAccname());
-          }
+//          if (!StringUtil.isEmpty(vce.getOppaccno())) {
+//            vce.setOppname(shopaccDao.getShopname(vce.getOppaccno()).getAccname());
+//          } else {
+            vce.setOppname(subjectDao.getSubjectname(vce.getOppsubjno()));
+//          }
           voucherEntryDao.save(vce);
-        }
+//        }
       }
     }
 
     //开始校验
-    //核算商户日结表商户余额 和凭证明细余额是否一致
-    for (String shopaccno : v_merchbaldict.keySet()) {
-      TShopaccday tShopaccday = shopaccdayDao.getTShopaccdayById(String.valueOf(settledate), shopaccno);
-      if (!MoneyUtil.moneyEqual(v_merchbaldict.get(shopaccno), tShopaccday.getBalance())) {
-        throw new Exception("结算后检查失败:商户余额不等,商户余额[" + tShopaccday.getBalance() + "]凭证商户余额[" + v_merchbaldict.get(shopaccno) + "]");
-      }
-      TShopaccbal tShopaccbal = shopaccbalDao.getOne(shopaccno);
-      tShopaccbal.setBalance(tShopaccday.getBalance());
-      tShopaccbal.setUpdtime(systemUtilService.getSysdatetime().getHostdatetime());
-      shopaccbalDao.save(tShopaccbal);
-    }
+    //核算商户日结表商户余额 和凭证明细余额是否一致 TODO(新商户收入校验逻辑)
+//    for (String shopaccno : v_merchbaldict.keySet()) {
+//      TShopaccday tShopaccday = shopaccdayDao.getTShopaccdayById(String.valueOf(settledate), shopaccno);
+//      if (!MoneyUtil.moneyEqual(v_merchbaldict.get(shopaccno), tShopaccday.getBalance())) {
+//        throw new Exception("结算后检查失败:商户余额不等,商户余额[" + tShopaccday.getBalance() + "]凭证商户余额[" + v_merchbaldict.get(shopaccno) + "]");
+//      }
+//      TShopaccbal tShopaccbal = shopaccbalDao.getOne(shopaccno);
+//      tShopaccbal.setBalance(tShopaccday.getBalance());
+//      tShopaccbal.setUpdtime(systemUtilService.getSysdatetime().getHostdatetime());
+//      shopaccbalDao.save(tShopaccbal);
+//    }
+
     //核算科目日结表科目余额和凭证明细余额是否一致
     for (String subjno : v_subjbaldict.keySet()) {
       TSubjectday tSubjectday = subjectdayDao.getSubjectDayById(String.valueOf(settledate), subjno);
@@ -426,14 +397,16 @@
       tSubjectbal.setUpdtime(systemUtilService.getSysdatetime().getHostdatetime());
       subjectbalDao.save(tSubjectbal);
     }
+
     //核对商户日结表余额表和科目日结表商户余额是否一致
-    TSubjectday shopSubjectday = subjectdayDao.getSubjectDayById(String.valueOf(settledate), TradeDict.SUBJNO_SHOP);
-    AmountBean merchbal = shopaccdayDao.getSumBalance(String.valueOf(settledate));
-    double shopSubbal = (shopSubjectday == null ? 0 : shopSubjectday.getCrbal());
-    double shopMerchbal = ((null == merchbal || null == merchbal.getAmount()) ? 0 : merchbal.getAmount());
-    if (!MoneyUtil.moneyEqual(shopSubbal, shopMerchbal)) {
-      throw new Exception("结算后检查失败:商户日结表和科目日结表期末余额不平衡,商户[" + shopMerchbal + "] 科目[" + shopSubbal + "]");
-    }
+//    TSubjectday shopSubjectday = subjectdayDao.getSubjectDayById(String.valueOf(settledate), TradeDict.SUBJNO_SHOP);
+//    AmountBean merchbal = shopaccdayDao.getSumBalance(String.valueOf(settledate));
+//    double shopSubbal = (shopSubjectday == null ? 0 : shopSubjectday.getCrbal());
+//    double shopMerchbal = ((null == merchbal || null == merchbal.getAmount()) ? 0 : merchbal.getAmount());
+//    if (!MoneyUtil.moneyEqual(shopSubbal, shopMerchbal)) {
+//      throw new Exception("结算后检查失败:商户日结表和科目日结表期末余额不平衡,商户[" + shopMerchbal + "] 科目[" + shopSubbal + "]");
+//    }
+
     //核算一级科目余额是否平衡
     FSubjectInfoBean allParentSubjbal = subjectdayDao.getAllParentSubjectSumInfo(String.valueOf(settledate));
     if (!MoneyUtil.moneyEqual(allParentSubjbal.getBegindrbal(), allParentSubjbal.getBegincrbal())) {
@@ -446,11 +419,11 @@
       throw new Exception("结算后检查失败:一级科目余额表期末额不平衡,借方[" + allParentSubjbal.getDrbal() + "]贷方[" + allParentSubjbal.getCrbal() + "]");
     }
     //校验科目余额表的balflag=1的总期末余额和balflag=2的总期末余额是否一致
-    AmountBean balflag_1_sumbal = subjectbalDao.getSumEndsubjectBalByEndflag(1);
-    AmountBean balflag_2_sumbal = subjectbalDao.getSumEndsubjectBalByEndflag(2);
+    Double balflag_1_sumbal = subjectbalDao.getSumEndsubjectBalByEndflag(1);
+    Double balflag_2_sumbal = subjectbalDao.getSumEndsubjectBalByEndflag(2);
     if (null == balflag_1_sumbal || null == balflag_1_sumbal) throw new Exception("结算后检查失败:科目余额表无数据");
-    if (!MoneyUtil.moneyEqual(balflag_1_sumbal.getAmount(), balflag_2_sumbal.getAmount())) {
-      throw new Exception("结算后检查失败:科目余额表期末余额不平衡,借方[" + balflag_1_sumbal.getAmount() + "],贷方[" + balflag_2_sumbal.getAmount() + "]");
+    if (!MoneyUtil.moneyEqual(balflag_1_sumbal, balflag_2_sumbal)) {
+      throw new Exception("结算后检查失败:科目余额表期末余额不平衡,借方[" + balflag_1_sumbal + "],贷方[" + balflag_2_sumbal + "]");
     }
     //TODO: 校验 账户余额汇总值和科目日结表值是否一致
 
@@ -475,10 +448,10 @@
 //    int prdmonth = settlectl.getPeriodMonth();
     int settday = settlectl.getSettledate();
 
-    List<AccnoBean> newShopList = shopaccDao.getNewAddShopacc(String.valueOf(settday));
+    List<String> newShopList = shopaccDao.getNewAddShopacc(String.valueOf(settday));
     if (!StringUtil.isEmpty(newShopList)) {
-      for (AccnoBean accno : newShopList) {
-        TShopaccbal shopBal = new TShopaccbal(accno.getAccno());
+      for (String accno : newShopList) {
+        TShopaccbal shopBal = new TShopaccbal(accno);
         shopaccbalDao.save(shopBal);
       }
     }
@@ -487,10 +460,10 @@
     }
 
     //新增科目插入科目余额表（末级科目）
-    List<AccnoBean> newEndsubjectList = subjectDao.getNewSubject();
+    List<String> newEndsubjectList = subjectDao.getNewSubject();
     if (!StringUtil.isEmpty(newEndsubjectList)) {
-      for (AccnoBean bean : newEndsubjectList) {
-        TSubjectbal subjectbal = new TSubjectbal(bean.getAccno());
+      for (String subjno : newEndsubjectList) {
+        TSubjectbal subjectbal = new TSubjectbal(subjno);
         subjectbalDao.save(subjectbal);
       }
     }
@@ -561,13 +534,14 @@
       }
 
       if (!StringUtil.isEmpty(entry.getOppaccno())) {
-        entry.setOppname(shopaccDao.getShopname(entry.getOppaccno()).getAccname());
+        entry.setOppname(shopaccDao.getShopname(entry.getOppaccno()));
       } else {
-        entry.setOppname(subjectDao.getSubjectname(entry.getOppsubjno()).getAccname());
+        entry.setOppname(subjectDao.getSubjectname(entry.getOppsubjno()));
       }
       voucherEntryDao.save(entry);
     }
 
     return true;
   }
+
 }
