日结修改
diff --git a/src/main/java/com/supwisdom/dlpay/consume/controller/TestAction.java b/src/main/java/com/supwisdom/dlpay/consume/controller/TestAction.java
index 4883502..a53e942 100644
--- a/src/main/java/com/supwisdom/dlpay/consume/controller/TestAction.java
+++ b/src/main/java/com/supwisdom/dlpay/consume/controller/TestAction.java
@@ -1,6 +1,7 @@
 package com.supwisdom.dlpay.consume.controller;
 
 import com.supwisdom.dlpay.consume.bean.BaseResp;
+import com.supwisdom.dlpay.consume.service.TestService;
 import com.supwisdom.dlpay.framework.data.SystemDateTime;
 import com.supwisdom.dlpay.framework.service.SystemUtilService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -12,11 +13,15 @@
 public class TestAction {
   @Autowired
   private SystemUtilService systemUtilService;
+  @Autowired
+  private TestService testService;
 
   @RequestMapping("/demo")
   public BaseResp test() {
     SystemDateTime dt = systemUtilService.getSysdatetime();
 
+    testService.doTest();
+
     BaseResp resp = new BaseResp();
     resp.setRetcode("0");
     resp.setRetmsg("OK");
diff --git a/src/main/java/com/supwisdom/dlpay/consume/domain/TDebitCreditDtlPK.java b/src/main/java/com/supwisdom/dlpay/consume/domain/TDebitCreditDtlPK.java
index 02e15e9..12254a8 100644
--- a/src/main/java/com/supwisdom/dlpay/consume/domain/TDebitCreditDtlPK.java
+++ b/src/main/java/com/supwisdom/dlpay/consume/domain/TDebitCreditDtlPK.java
@@ -2,8 +2,9 @@
 
 import javax.persistence.Column;
 import javax.persistence.Id;
+import java.io.Serializable;
 
-public class TDebitCreditDtlPK {
+public class TDebitCreditDtlPK implements Serializable {
   @Id
   @Column(name = "REFNO", nullable = false, length = 32)
   private String refno;
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 b6d95e8..5a80eab 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/SettleCtlDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/SettleCtlDao.java
@@ -14,6 +14,10 @@
   @Lock(value = LockModeType.PESSIMISTIC_FORCE_INCREMENT)
   TSettlectl findByBooksetno(Integer booksetno);
 
+  @Lock(value = LockModeType.PESSIMISTIC_FORCE_INCREMENT)
+  @Query(value = "from TSettlectl where booksetno=:booksetno ")
+  TSettlectl findByBooksetnoWithLock(@RequestParam("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);
 
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 e218b13..eac1aa2 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccDao.java
@@ -17,9 +17,12 @@
   @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();
 
-  @Query(value = "select count(t.*) as existed from TB_SHOPACCBAL 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.*) 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);
+
+  @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);
 }
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 7010d29..2bd91c0 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccbalDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/ShopaccbalDao.java
@@ -2,10 +2,12 @@
 
 import com.supwisdom.dlpay.framework.domain.TShopaccbal;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Lock;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
 import org.springframework.web.bind.annotation.RequestParam;
 
+import javax.persistence.LockModeType;
 import java.util.List;
 
 @Repository
@@ -14,4 +16,8 @@
   @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);
 
+  @Lock(LockModeType.PESSIMISTIC_FORCE_INCREMENT)
+  @Query(value = "from TShopaccbal where shopaccno=:shopaccno ")
+  TShopaccbal getTShopaccbalByIdWithLock(@RequestParam("shopaccno")String shopaccno);
+
 }
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 02d9e16..3aacfe3 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/SubjectbalDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/SubjectbalDao.java
@@ -5,10 +5,12 @@
 import com.supwisdom.dlpay.framework.data.SubjectInfoBean;
 import com.supwisdom.dlpay.framework.domain.TSubjectbal;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Lock;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
 import org.springframework.web.bind.annotation.RequestParam;
 
+import javax.persistence.LockModeType;
 import java.util.List;
 
 @Repository
@@ -25,4 +27,8 @@
 
   @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);
+
+  @Lock(LockModeType.PESSIMISTIC_FORCE_INCREMENT)
+  @Query("from TSubjectbal where subjno=:subjno ")
+  TSubjectbal getTSubjectbalBySubjnoWithLock(@RequestParam("subjno")String subjno);
 }
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 782e1b5..e9b3a37 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/TaskLockDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/TaskLockDao.java
@@ -17,6 +17,17 @@
   @Query("select a from TTaskLock a where a.taskcode=:taskcode")
   TTaskLock getTaskLockWithLock(@RequestParam("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)
   SystemDateTime getOracleDatetime();
+
+  @Query(value = " select to_char(sysdate,'yyyyMMddhh24miss')||to_char(SEQ_REFNO.nextval,'FM000000') as billno from dual ", nativeQuery = true)
+  String getOracleRefno();
+
+
+
+
+  //================= database=PG =================//
+  @Query(value = " select to_char(CURRENT_TIMESTAMP,'yyyyMMddhh24miss')||to_char(nextval('SEQ_REFNO'),'FM000000') as billno ", nativeQuery = true)
+  String getPgRefno();
 }
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 b670572..f331a6b 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/VoucherDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/VoucherDao.java
@@ -31,4 +31,8 @@
 
   @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);
+
+  @Lock(LockModeType.PESSIMISTIC_FORCE_INCREMENT)
+  @Query(value = "from TVoucher where voucherid=:voucherid ")
+  TVoucher findByVoucheridWithLock(@RequestParam("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 37e9c1e..2bb4664 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/dao/VoucherEntryDao.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/dao/VoucherEntryDao.java
@@ -3,10 +3,12 @@
 import com.supwisdom.dlpay.framework.domain.TVoucherEntry;
 import com.supwisdom.dlpay.framework.domain.TVoucherEntryPK;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Lock;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
 import org.springframework.web.bind.annotation.RequestParam;
 
+import javax.persistence.LockModeType;
 import java.util.List;
 
 @Repository
@@ -16,4 +18,8 @@
 
   @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);
+
+  @Lock(LockModeType.PESSIMISTIC_FORCE_INCREMENT)
+  @Query(value = "from TVoucherEntry t where t.voucherid=:voucherid ")
+  List<TVoucherEntry> getVoucherEntryByVoucherid(@RequestParam("voucherid")String voucherid);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/domain/TVouchernoCtl.java b/src/main/java/com/supwisdom/dlpay/framework/domain/TVouchernoCtl.java
index 44757b7..8b010c4 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/domain/TVouchernoCtl.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/domain/TVouchernoCtl.java
@@ -18,6 +18,15 @@
   @Column(name = "VOUCHERNO", nullable = false, precision = 9)
   private Integer voucherno;
 
+  public TVouchernoCtl() {
+  }
+
+  public TVouchernoCtl(Integer vouchertype, Integer periodMonth, Integer voucherno) {
+    this.vouchertype = vouchertype;
+    this.periodMonth = periodMonth;
+    this.voucherno = voucherno;
+  }
+
   public Integer getVouchertype() {
     return vouchertype;
   }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/service/DayendSettleService.java b/src/main/java/com/supwisdom/dlpay/framework/service/DayendSettleService.java
index 3891fc2..d3318f0 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/service/DayendSettleService.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/service/DayendSettleService.java
@@ -4,10 +4,16 @@
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
+/**
+ * 日终结算
+ * */
 public interface DayendSettleService {
   TSettleLog doCreateSettleLog();
   TSettleLog doUpdateSettleLog(TSettleLog log);
 
   @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
-  boolean doDayendSettle() throws Exception;
+  boolean doDayendSettle() throws Exception; //日结
+
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+  boolean doVoucherSettle(String voucherid) throws Exception; //指定凭证入账
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/service/DayendStatisticsService.java b/src/main/java/com/supwisdom/dlpay/framework/service/DayendStatisticsService.java
new file mode 100644
index 0000000..110f0e2
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/framework/service/DayendStatisticsService.java
@@ -0,0 +1,13 @@
+package com.supwisdom.dlpay.framework.service;
+
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 日终统计
+ * */
+public interface DayendStatisticsService {
+
+  @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
+  boolean doDayendStatistics() throws Exception; //日结后统计
+}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/service/SystemUtilService.java b/src/main/java/com/supwisdom/dlpay/framework/service/SystemUtilService.java
index ede550b..21d2793 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/service/SystemUtilService.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/service/SystemUtilService.java
@@ -7,13 +7,37 @@
 
 public interface SystemUtilService {
 
+  /**
+   * 取数据库日期
+   * */
   SystemDateTime getSysdatetime();
 
+  /**
+   * 更新任务表
+   * */
   @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
   TTaskLock updateTaskLock(TTaskLock lock);
 
+  /**
+   * 取任务表
+   * */
   @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
   TTaskLock doLockTask(String taskcode, Integer minRecover, String remark);
 
+  /**
+   * 获取记账日期
+   * */
+  String getAccdate();
+
+  /**
+   * 获取流水号
+   * */
+  String getRefno();
+
+  /**
+   * 按交易码取交易名称
+   */
+  String getTranscodeName(int transocde, String defaultValue);
+
 
 }
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 c4c2d09..e575ab8 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
@@ -138,8 +138,8 @@
 
   @Override
   public boolean doDayendSettle() throws Exception {
-    TSettlectl tSettlectl = settleCtlDao.findByBooksetno(1);
-    if (null == tSettlectl) {
+    TSettlectl tSettlectl = settleCtlDao.findByBooksetnoWithLock(1);
+    if (null == tSettlectl || null == tSettlectl.getBooksetno()) {
       throw new Exception("初始化错误,T_SETTLECTL 无初始化数据");
     }
     tSettlectl.setStatus(1); //结算标记
@@ -226,7 +226,7 @@
 
     //用户交易凭证
     List<VoucherTemp> userList = debitCreditDtlDao.getVoucherData(String.valueOf(settledate));
-    if(!StringUtil.isEmpty(userList)){
+    if (!StringUtil.isEmpty(userList)) {
       for (VoucherTemp temp : userList) {
         saveVoucher(temp);
       }
@@ -243,7 +243,7 @@
     }
     int voucherno = vouchernoCtl.getVoucherno();
     List<TVoucher> voucherList = voucherDao.getSettleVouchers();
-    if (StringUtil.isEmpty(voucherList)) {
+    if (!StringUtil.isEmpty(voucherList)) {
       for (TVoucher voucher : voucherList) {
         voucherno++;
         voucher.setVoucherno(voucherno);
@@ -257,7 +257,7 @@
     Map<String, Double> v_merchbaldict = new HashMap<String, Double>(0);
     //根据商户昨天日结表生成当天日结表(交易前余额), 新增商户添加记录(交易前余额为商户余额)
     List<TShopaccday> lastShopaccdays = shopaccdayDao.getShopaccdayByAccdate(String.valueOf(lastsettday));
-    if (StringUtil.isEmpty(lastShopaccdays)) {
+    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);
@@ -295,7 +295,7 @@
       }
     }
     List<TSubjectbal> newSubjectBals = subjectbalDao.getUnsettleSubjectbal(String.valueOf(lastsettday));
-    if (StringUtil.isEmpty(newSubjectBals)) {
+    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);
         subjectdayDao.save(today);
@@ -320,7 +320,7 @@
     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));
-    if (StringUtil.isEmpty(subjectList)) {
+    if (!StringUtil.isEmpty(subjectList)) {
       for (MerchBean bean : subjectList) {
         v_subjbaldict.put(bean.getShopaccno(), MoneyUtil.formatYuan(bean.getDramt() + bean.getCramt()));
       }
@@ -461,8 +461,118 @@
 
     //日切
     tSettlectl.setStatus(0); //清标记
-    tSettlectl.setSettledate(Integer.valueOf(DateUtil.getNewDay(String.valueOf(settledate),1)));
+    tSettlectl.setSettledate(Integer.valueOf(DateUtil.getNewDay(String.valueOf(settledate), 1)));
     tSettlectl.setUpdtime(systemUtilService.getSysdatetime().getHostdatetime());
     return true;
   }
+
+  @Override
+  public boolean doVoucherSettle(String voucherid) throws Exception {
+    if (StringUtil.isEmpty(voucherid)) throw new Exception("参数为空");
+
+    TSettlectl settlectl = settleCtlDao.findByBooksetno(1);
+    if (null == settlectl || null == settlectl.getBooksetno()) {
+      throw new Exception("系统初始化参数错误");
+    }
+
+//    int hostDate = Integer.valueOf(systemUtilService.getSysdatetime().getHostdatetime());
+//    int prdyear = settlectl.getPeriodYear();
+//    int prdmonth = settlectl.getPeriodMonth();
+    int settday = settlectl.getSettledate();
+
+    List<AccnoBean> newShopList = shopaccDao.getNewAddShopacc(String.valueOf(settday));
+    if (!StringUtil.isEmpty(newShopList)) {
+      for (AccnoBean accno : newShopList) {
+        TShopaccbal shopBal = new TShopaccbal(accno.getAccno());
+        shopaccbalDao.save(shopBal);
+      }
+    }
+    if (shopaccDao.checkSettleShopacc().getExisted() > 0) {
+      throw new Exception("初始化数据错误:商户余额表数据没有包含所有有效的商户账户余额");
+    }
+
+    //新增科目插入科目余额表(末级科目)
+    List<AccnoBean> newEndsubjectList = subjectDao.getNewSubject();
+    if (!StringUtil.isEmpty(newEndsubjectList)) {
+      for (AccnoBean bean : newEndsubjectList) {
+        TSubjectbal subjectbal = new TSubjectbal(bean.getAccno());
+        subjectbalDao.save(subjectbal);
+      }
+    }
+    if (subjectDao.checkSettleSubject().getExisted() > 0) {
+      throw new Exception("初始化数据错误:科目余额表数据没有包含所有的科目余额");
+    }
+
+    TVoucher voucher = voucherDao.findByVoucheridWithLock(voucherid);
+    List<TVoucherEntry> entryList = voucherEntryDao.getVoucherEntryByVoucherid(voucherid);
+    if (null == voucher) {
+      throw new Exception("凭证查询无记录");
+    } else if ("auto".equals(voucher.getSourcetype())) {
+      throw new Exception("该凭证不是手工录入凭证");
+    } else if (voucher.getCheckflag() != 1) {
+      throw new Exception("该凭证未审核");
+    } else if (StringUtil.isEmpty(voucher.getSummary())) {
+      throw new Exception("摘要不能为空");
+    } else if (voucher.getPostflag() == 1) {
+      throw new Exception("凭证已入账");
+    }
+
+    if (StringUtil.isEmpty(entryList)) {
+      throw new Exception("凭证无借贷明细!");
+    }
+
+    //凭证号
+    TVouchernoCtl vouchernoCtl = vouchernoCtlDao.getVoucherno();
+    if (null == vouchernoCtl) {
+      vouchernoCtl = new TVouchernoCtl(1, periodMonth, 0);
+      vouchernoCtlDao.save(vouchernoCtl);
+    }
+    int voucherno = vouchernoCtl.getVoucherno() + 1;
+    vouchernoCtl.setVoucherno(voucherno);
+    vouchernoCtlDao.save(vouchernoCtl);
+
+    voucher.setVoucherno(voucherno);
+    voucher.setPostflag(1);
+    voucherDao.save(voucher); //修改凭证表凭证号、入账标志
+
+    //明细
+    for (TVoucherEntry entry : entryList) {
+      if (TradeDict.SUBJNO_SHOP.equals(entry.getSubjno())) {
+        TShopaccbal tShopaccbal = shopaccbalDao.getTShopaccbalByIdWithLock(entry.getAccno());
+        if (null == tShopaccbal) {
+          throw new Exception("商户表商户账号[" + entry.getAccno() + "]不存在");
+        }
+        tShopaccbal.setBalance(tShopaccbal.getBeginbal() + entry.getCramt() - entry.getDramt());
+        shopaccbalDao.save(tShopaccbal);
+        entry.setBalflag(2);
+        entry.setBalance(tShopaccbal.getBalance());
+      } else {
+        TSubjectbal tSubjectbal = subjectbalDao.getTSubjectbalBySubjnoWithLock(entry.getSubjno());
+        TSubject subject = subjectDao.getOne(entry.getSubjno());
+        if (null == tSubjectbal || null == subject) {
+          throw new Exception("科目表科目号[" + entry.getSubjno() + "]不存在");
+        } else if (subject.getEndflag() != 1) {
+          throw new Exception("科目[" + entry.getSubjno() + "]非末级科目");
+        }
+        entry.setBalflag(subject.getBalflag());
+        if (subject.getBalflag() == 1) {
+          tSubjectbal.setDrbal(tSubjectbal.getDrbal() + entry.getDramt() - entry.getCramt());
+          entry.setBalance(tSubjectbal.getDrbal());
+        } else {
+          tSubjectbal.setCrbal(tSubjectbal.getCrbal() - entry.getDramt() + entry.getCramt());
+          entry.setBalance(tSubjectbal.getCrbal());
+        }
+        subjectbalDao.save(tSubjectbal);
+      }
+
+      if (!StringUtil.isEmpty(entry.getOppaccno())) {
+        entry.setOppname(shopaccDao.getShopname(entry.getOppaccno()).getAccname());
+      } else {
+        entry.setOppname(subjectDao.getSubjectname(entry.getOppsubjno()).getAccname());
+      }
+      voucherEntryDao.save(entry);
+    }
+
+    return true;
+  }
 }
diff --git a/src/main/java/com/supwisdom/dlpay/framework/service/impl/DayendStatisticsServiceImpl.java b/src/main/java/com/supwisdom/dlpay/framework/service/impl/DayendStatisticsServiceImpl.java
new file mode 100644
index 0000000..b7d5c1b
--- /dev/null
+++ b/src/main/java/com/supwisdom/dlpay/framework/service/impl/DayendStatisticsServiceImpl.java
@@ -0,0 +1,13 @@
+package com.supwisdom.dlpay.framework.service.impl;
+
+import com.supwisdom.dlpay.framework.service.DayendStatisticsService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class DayendStatisticsServiceImpl implements DayendStatisticsService {
+
+  @Override
+  public boolean doDayendStatistics() throws Exception {
+    return false;
+  }
+}
diff --git a/src/main/java/com/supwisdom/dlpay/framework/service/impl/SystemUtilServiceImpl.java b/src/main/java/com/supwisdom/dlpay/framework/service/impl/SystemUtilServiceImpl.java
index 863b206..b4b8b48 100644
--- a/src/main/java/com/supwisdom/dlpay/framework/service/impl/SystemUtilServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/framework/service/impl/SystemUtilServiceImpl.java
@@ -1,29 +1,35 @@
 package com.supwisdom.dlpay.framework.service.impl;
 
+import com.supwisdom.dlpay.framework.dao.SettleCtlDao;
 import com.supwisdom.dlpay.framework.dao.TaskLockDao;
+import com.supwisdom.dlpay.framework.dao.TranscodeDao;
 import com.supwisdom.dlpay.framework.data.SystemDateTime;
+import com.supwisdom.dlpay.framework.domain.TSettlectl;
 import com.supwisdom.dlpay.framework.domain.TTaskLock;
+import com.supwisdom.dlpay.framework.domain.TTranscode;
 import com.supwisdom.dlpay.framework.service.SystemUtilService;
 import com.supwisdom.dlpay.framework.util.DateUtil;
+import com.supwisdom.dlpay.framework.util.StringUtil;
+import org.apache.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
-
 @Service
 public class SystemUtilServiceImpl implements SystemUtilService {
-  @PersistenceContext
-  private EntityManager entityManager;
   @Autowired
   private TaskLockDao taskLockDao;
+  @Autowired
+  private SettleCtlDao settleCtlDao;
+  @Autowired
+  private TranscodeDao transcodeDao;
+
+  private static final Logger logger = Logger.getLogger(SystemUtilServiceImpl.class);
 
   /**
    * 获取oracle数据库时间
    */
   private SystemDateTime getOracleDatetime() {
-    SystemDateTime systemDateTime = taskLockDao.getOracleDatetime();
-    return systemDateTime;
+    return taskLockDao.getOracleDatetime();
   }
 
   @Override
@@ -42,7 +48,7 @@
     String hostdatetime = getSysdatetime().getHostdatetime(); //yyyyMMddHHmmss
     TTaskLock lock = taskLockDao.getTaskLockWithLock(taskcode);
     if (lock != null) {
-      if (lock.getTaskstatus().intValue() == 1 && DateUtil.compareDatetime(DateUtil.getNewTime(hostdatetime, -60 * minRecover), lock.getTasktime()) < 0) {
+      if (lock.getTaskstatus() == 1 && DateUtil.compareDatetime(DateUtil.getNewTime(hostdatetime, -60 * minRecover), lock.getTasktime()) < 0) {
         // 被锁,正在执行操作
         return null;
       } else {
@@ -61,4 +67,35 @@
     }
     return lock;
   }
+
+  @Override
+  public String getAccdate() {
+    String hostdate = getSysdatetime().getHostdate();
+    TSettlectl settlectl = settleCtlDao.getOne(1);
+    if (null != settlectl && null != settlectl.getSettledate()) {
+      if (Integer.valueOf(hostdate) < settlectl.getSettledate().intValue()) {
+        return settlectl.getSettledate().toString();
+      }
+    }
+    return hostdate;
+  }
+
+  private String getOracleRefno(){
+      return taskLockDao.getOracleRefno();
+  }
+
+  @Override
+  public String getRefno(){
+    return getOracleRefno();
+  }
+
+  @Override
+  public String getTranscodeName(int transocde, String defaultValue) {
+    TTranscode tTranscode = transcodeDao.getOne(transocde);
+    if (null != tTranscode && !StringUtil.isEmpty(tTranscode.getTransname())) {
+      return tTranscode.getTransname();
+    }
+    return defaultValue;
+  }
+
 }