diff --git a/src/main/java/com/supwisdom/dlpay/doorlist/service/DoorlistMgrService.java b/src/main/java/com/supwisdom/dlpay/doorlist/service/DoorlistMgrService.java
index e2cad0e..fd7af24 100644
--- a/src/main/java/com/supwisdom/dlpay/doorlist/service/DoorlistMgrService.java
+++ b/src/main/java/com/supwisdom/dlpay/doorlist/service/DoorlistMgrService.java
@@ -3,34 +3,44 @@
 import com.supwisdom.dlpay.ncmgr.domain.TNcAllottime;
 import com.supwisdom.dlpay.ncmgr.domain.TNcCardlist;
 import com.supwisdom.dlpay.system.page.Pagination;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 
 public interface DoorlistMgrService {
     //根据设备编号和物理卡号和时间周id获取名单
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public TNcCardlist getNcCardlist(int deviceid,String cardphyid,String timeid);
 
     //批量保存设备名单
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public boolean batchSaveCardList(List<TNcCardlist> tNcCardlists);
 
     //批量保存名单分配设备和时间
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public boolean batchSaveAllotTime(List<TNcAllottime> tNcAllottimes);
 
     //根据查询条件分页获取系统管理员权限下所有名单
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public Pagination getSystemCardList(String devname, String custname, String cardno, String syncstatus, String regionid, String allocatStartDate,String allocatEndDate,
                                          String operflag, int pageNo, int pageSize);
 
     //根据查询条件分页获取区域管理员权限下所有名单
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public Pagination getOperatorCardList(String devname, String custname, String cardno, String syncstatus, String regionid, String allocatStartDate,String allocatEndDate,
                                           String operflag, int pageNo, int pageSize,String operRegionid);
 
     //根据查询条件分页获取楼栋管理员权限下所有名单
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public Pagination getBuildingOperCardList(String devname, String custname, String cardno, String syncstatus, String allocatStartDate,String allocatEndDate,
                                               String operflag, int pageNo, int pageSize,String operid);
 
     //根据id查询下发设备名单
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public TNcCardlist getNcCardlistById(String id);
 
     //修改设备人员名单
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public boolean updateNcCardlist(TNcCardlist bean);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/doorlist/service/impl/DoorlistMgrServiceImpl.java b/src/main/java/com/supwisdom/dlpay/doorlist/service/impl/DoorlistMgrServiceImpl.java
index 5ce1f9f..207f817 100644
--- a/src/main/java/com/supwisdom/dlpay/doorlist/service/impl/DoorlistMgrServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/doorlist/service/impl/DoorlistMgrServiceImpl.java
@@ -8,6 +8,8 @@
 import com.supwisdom.dlpay.system.page.Pagination;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 
@@ -18,11 +20,13 @@
     @Autowired
     NcAllottimeDao ncAllottimeDao;
 
+
     @Override
     public TNcCardlist getNcCardlist(int deviceid, String cardphyid, String timeid) {
         return ncCardListDao.getNcCardlist(deviceid, cardphyid, timeid);
     }
 
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     @Override
     public boolean batchSaveCardList(List<TNcCardlist> tNcCardlists) {
         boolean flag = true;
diff --git a/src/main/java/com/supwisdom/dlpay/mainservice/dao/impl/CardListDaoImpl.java b/src/main/java/com/supwisdom/dlpay/mainservice/dao/impl/CardListDaoImpl.java
index e99f2cc..eeb91fc 100644
--- a/src/main/java/com/supwisdom/dlpay/mainservice/dao/impl/CardListDaoImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/mainservice/dao/impl/CardListDaoImpl.java
@@ -627,7 +627,7 @@
         return 0;
     }
 
-    @Transactional(readOnly = true)
+    @Transactional
     @Override
     public List<TDoorcardlstInfo> getSystemCardListMap( String allocatStartDate, String allocatEndDate, String devname, String custname, String cardno, String syncflag, String operflag, String buildingid,String regionid) {
         try {
diff --git a/src/main/java/com/supwisdom/dlpay/mainservice/domain/TCard.java b/src/main/java/com/supwisdom/dlpay/mainservice/domain/TCard.java
index 271a76e..4f28641 100644
--- a/src/main/java/com/supwisdom/dlpay/mainservice/domain/TCard.java
+++ b/src/main/java/com/supwisdom/dlpay/mainservice/domain/TCard.java
@@ -8,7 +8,8 @@
  * TCard entity. @author MyEclipse Persistence Tools
  */
 @Entity
-@Table(name = "T_CARD")
+@Table(name = "T_CARD",
+		indexes = {@Index(name = "idx_card_cardno",columnList = "cardno",unique = true)})
 public class TCard implements java.io.Serializable {
 
 	// Fields
diff --git a/src/main/java/com/supwisdom/dlpay/mainservice/domain/TDoordtl.java b/src/main/java/com/supwisdom/dlpay/mainservice/domain/TDoordtl.java
index f63ac1d..8e5c62e 100644
--- a/src/main/java/com/supwisdom/dlpay/mainservice/domain/TDoordtl.java
+++ b/src/main/java/com/supwisdom/dlpay/mainservice/domain/TDoordtl.java
@@ -6,7 +6,8 @@
  * TDoordtl entity. @author MyEclipse Persistence Tools
  */
 @Entity
-@Table(name = "T_DOORDTL")
+@Table(name = "T_DOORDTL",
+		indexes = {@Index(name = "idx_dtl_date", columnList = "transdate")})
 public class TDoordtl implements java.io.Serializable {
 
 	// Fields
diff --git a/src/main/java/com/supwisdom/dlpay/mainservice/service/WebInterfaceService.java b/src/main/java/com/supwisdom/dlpay/mainservice/service/WebInterfaceService.java
index 4840416..0e75b4c 100644
--- a/src/main/java/com/supwisdom/dlpay/mainservice/service/WebInterfaceService.java
+++ b/src/main/java/com/supwisdom/dlpay/mainservice/service/WebInterfaceService.java
@@ -7,70 +7,86 @@
 import com.supwisdom.dlpay.mainservice.domain.TCustomer;
 import com.supwisdom.dlpay.mainservice.domain.TKey;
 import com.supwisdom.dlpay.system.page.Pagination;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 
 public interface WebInterfaceService {
 
     //获取所有厂商
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<TKey> getAllKeys() throws Exception;
 
 
     /*cardlist*********************/
 
     //根据查询条件分页获取所有设备内名单信息
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public Pagination getSystemCardListFrSearch(String allocatStartDate, String allocatEndDate,
                                              String devname, String custname, String cardno, String syncflag,String operflag, String buildingid,String regionid, int pageNo, int pageSize);
 
     //根据查询条件分页获取管理员权限的设备内名单信息
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public Pagination getOperatorCardListFrSearch(String allocatStartDate, String allocatEndDate,
                                                   String devname, String custname, String cardno, String syncflag,String operflag, String buildingid,String regionid, int pageNo, int pageSize,String operRegionid);
 
     //根据查询条件分页获取楼栋管理员权限下的设备内名单信息
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public Pagination getBuildingOperCardListFrSearch(String allocatStartDate, String allocatEndDate,
                                                       String devname, String custname, String cardno, String syncflag,String operflag, String buildingid,String operid, int pageNo, int pageSize);
 
 
     //根据查询条件获取系统管理员所有导出表单信息
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class},readOnly = true)
     public List<TDoorcardlstInfo> getSystemCardListMap( String allocatStartDate, String allocatEndDate,
                                                     String devname, String custname, String cardno, String syncflag, String operflag, String buildingid,String regionid);
 
     //根据查询条件获取区域管理员所有导出表单信息
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class},readOnly = true)
     public List<TDoorcardlstInfo> getOperatorCardListMap( String allocatStartDate, String allocatEndDate,
                                                        String devname, String custname, String cardno, String syncflag, String operflag, String buildingid,String regionid,String operRegionid);
 
     //根据查询条件获取楼栋管理员所有导出表单信息
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class},readOnly = true)
     public List<TDoorcardlstInfo> getBuildingOperCardListMap( String allocatStartDate, String allocatEndDate,
                                                           String devname, String custname, String cardno, String syncflag, String operflag, String buildingid,String operid);
 
     //根据名单编号将已同步的名单修改为未同步使其重新同步
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public void updateDoorcardlstToNoWithIds (List<Long> listIds);
 
 
     /*doordtl******************/
 
     //根据查询条件获取所有导出Excel数据
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<TDoordtlInfo> findSystemExportExcelDoordtl(String startTranDate, String endTranDate, String startTranTime, String endTranTime, String cardno,
                                                      String custname, String buildingid, String regionid, String devname, String streamstatus);
 
     //根据查询条件获取管理员权限的Excel数据
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<TDoordtlInfo> findOperatorExportExcelDoordtl(String startTranDate, String endTranDate, String startTranTime, String endTranTime, String cardno,
                                                              String custname, String buildingid, String regionid, String devname, String streamstatus,String operRegionid);
 
     //根据查询条件获取楼栋管理员权限的Excel数据
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<TDoordtlInfo> findBuildingOperExportExcelDoorDtl(String startTranDate, String endTranDate, String startTranTime, String endTranTime, String cardno,
                                                                      String custname, String buildingid,String devname, String streamstatus,String operid);
 
     //根据查询条件获取系统管理员流水数据
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public Pagination findSystemTDoordtl(String startTranDate, String endTranDate, String startTranTime, String endTranTime, String cardno,
                                          String custname, String buildingid, String devname, String streamstatus, int pageNo, int pageSize,String regionid);
 
     //根据查询条件获取区域管理员权限相应流水数据
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public Pagination findOperatorTDoordtl(
             String startTranDate, String endTranDate, String startTranTime, String endTranTime, String cardno,
             String custname, String buildingid, String devname, String streamstatus, int pageNo, int pageSize,String regionid,String operRegionid);
 
     //根据查询条件获取楼栋管理员权限相应流水数据
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public Pagination findBuildingOperTDoordtl(
             String startTranDate, String endTranDate, String startTranTime, String endTranTime, String cardno,
             String custname, String buildingid, String devname, String streamstatus, int pageNo, int pageSize,String operid);
@@ -79,20 +95,25 @@
     /*customer*********************/
 
     //根据卡号和银行卡号查询是否存在customer
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public TCustomer findCustomerByNo(String cardno,String bankcardno);
 
     //保存客户
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public boolean saveCustomer(TCustomer bean);
 
     //根据查询条件获取所有要下发的客户
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<TCustomerInfo> getAllTCustomerList(String perName, String cardno, String bankcardno);
 
 
     /*card************************/
 
     //根据客户id获取其卡信息
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public TCard findCardByCustid(String custid);
 
     //保存卡信息
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public boolean saveCard(TCard bean);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/ncmgr/domain/TBuilding.java b/src/main/java/com/supwisdom/dlpay/ncmgr/domain/TBuilding.java
index 2552c41..c9391ae 100644
--- a/src/main/java/com/supwisdom/dlpay/ncmgr/domain/TBuilding.java
+++ b/src/main/java/com/supwisdom/dlpay/ncmgr/domain/TBuilding.java
@@ -1,15 +1,13 @@
 package com.supwisdom.dlpay.ncmgr.domain;
 
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import javax.persistence.*;
 
 /**
  * TBuilding entity. @author MyEclipse Persistence Tools
  */
 @Entity
-@Table(name = "T_BUILDING")
+@Table(name = "T_BUILDING",
+	indexes = {@Index(name = "idx_building_id",columnList = "buildingid",unique = true)})
 public class TBuilding implements java.io.Serializable {
 
 	// Fields
diff --git a/src/main/java/com/supwisdom/dlpay/ncmgr/domain/TNcDevice.java b/src/main/java/com/supwisdom/dlpay/ncmgr/domain/TNcDevice.java
index 807d168..8ba75db 100644
--- a/src/main/java/com/supwisdom/dlpay/ncmgr/domain/TNcDevice.java
+++ b/src/main/java/com/supwisdom/dlpay/ncmgr/domain/TNcDevice.java
@@ -2,16 +2,16 @@
 
 import cn.afterturn.easypoi.excel.annotation.Excel;
 
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import javax.persistence.*;
 
 /**
  * TNcDevice entity. @author MyEclipse Persistence Tools
  */
 @Entity
-@Table(name = "T_NC_DEVICE")
+@Table(name = "T_NC_DEVICE",
+		indexes = {@Index(name = "idx_nc_dev_phyid", columnList = "devphyid"),
+				@Index(name = "idx_nc_dev_devid",columnList = "deviceid",unique = true)}
+					)
 public class TNcDevice implements java.io.Serializable {
 
 	// Fields
diff --git a/src/main/java/com/supwisdom/dlpay/ncmgr/service/NcService.java b/src/main/java/com/supwisdom/dlpay/ncmgr/service/NcService.java
index f07ecdc..831c84f 100644
--- a/src/main/java/com/supwisdom/dlpay/ncmgr/service/NcService.java
+++ b/src/main/java/com/supwisdom/dlpay/ncmgr/service/NcService.java
@@ -4,206 +4,274 @@
 import com.supwisdom.dlpay.ncmgr.domain.*;
 import com.supwisdom.dlpay.system.domain.TRegion;
 import com.supwisdom.dlpay.system.page.Pagination;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 import java.util.Map;
 
 public interface NcService {
     //根据查询条件分页获取所有设备
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public Pagination getSystemNcDeviceWithPage(String devname, int pageNo, int pageSize, Map map, String buildingid,String regionid, String devtype);
 
     //根据查询条件分页获取管理员设备---
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public Pagination getOperatorNcDeviceWithPage(String devname,int pageNo,int pageSize, String buildingid,String regionid,String devtype,String operRegionid);
 
     //根据查询条件分页获取楼栋管理员设备 ---regionid为空
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public Pagination getBuildingOperNcDeviceWithPage(String devname,int pageNo,int pageSize,String buildingid,String devtype,String operid);
 
     //获取所有楼栋信息
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<TBuilding> getAllBuilding();
 
     //获取所有区域信息
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<TRegion> getAllRegion();
 
     //根据楼栋id获取楼栋信息
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public TBuilding getBuidingById(String id);
 
     //根据设备类型获取所有设备
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<TNcDevice> getSystemDevByType(String type);
 
     //根据设备类型获取操作员权限设备
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<TNcDevice> getOperatorDevByType(String type,String regionid);
 
     //根据设备类型获取楼栋管理员权限设备
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<TNcDevice> getBuildingOperDevByType(String type,String operid);
 
     //根据设备id获取设备
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public TNcDevice findDevById(int id);
 
     //验证设备名称
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public TNcDevice validDevName(int devid,String devname);
 
     //验证设备物理编号
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public TNcDevice validDevPhyid(int devid,String devPhyid);
 
     //验证读头号
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public TNcDevice validDevNo(int fdevid,int devno,int devid);
 
     //修改设备
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public boolean updateDevice(TNcDevice bean);
 
     //获取设备最大主键
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public int getMaxId();
 
     //保存设备
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public boolean saveDevice(TNcDevice bean);
 
     //根据设备编号获取设备及父设备信息
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public TNcDevice getDevInfoByDevid(int devid);
 
     //根据控制器设备编号获取其读头设备列表
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<TNcDevice> getDevListByfDevid(int devid);
 
     //根据设备编号删除设备
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public void delDevById(int devid);
 
     //根据设备编号查询是否绑定时间周
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public boolean getDevWeekByDevid(int devid);
 
     //设备名单清空(获取清空所用名单)
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public TNcCardlist getCleanList(int devid);
 
     //保存同步名单信息
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public boolean saveCardlist(TNcCardlist bean);
 
     //设备名单重下(修改该设备已同步名单为未同步)
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public void updateForListReload(int devid);
 
     //根据楼栋id获取设备
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public TNcDevice getDevByBuildingid(String buildingid);
 
     //获取系统管理员权限下所有可以分配的设备
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<TDoordevInfo> getSystemDevList(String devname,String regionid,String buildingid);
 
     //获取区域管理员权限下所有可以分配的设备
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<TDoordevInfo> getOperatorDevList(String devname,String regionid,String buildingid,String operRegionid);
 
     //获取楼栋管理员权限下所有可以分配的设备
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<TDoordevInfo> getBuildingOperDevList(String devname,String regionid,String buildingid,String operid);
 
     //根据查询条件分页获取所有时间段信息
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public Pagination getNcTimeWithPage(String time,int pageNo, int pageSize,Map map);
 
     //根据时间段
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<String> getTimegrpIdById(int id);
 
     //根据时间段id删除时间段
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public boolean delTimeByTimeId(int id);
 
     //DevWeek数据所有版本号+1
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public boolean updListVersion();
 
     //根据时间段id获取时间段信息
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public TNcTime findByTimeId(int id);
 
     //根据时间段名称获取时间段信息
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public TNcTime findByTimeName(String name);
 
     //获取时间段最大主键
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public int getMaxTimeId();
 
     //保存时间段
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public boolean saveTime(TNcTime bean);
 
     //根据id和名称获取时间段信息
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public TNcTime findByIdAndName(int id, String name);
 
     //修改时间段
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public boolean updateTime(TNcTime bean);
 
     //根据查询条件分页获取时间组
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public Pagination getNcTimeGrpWithPage(String time,int pageNo, int pageSize,Map map);
 
     //获取所有时间段
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<TNcTime> findAllNcTime();
 
     //根据id获取时间组信息
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public TNcTimegrp findByTimeGrpId(int id);
 
     //根据时间组名称获取时间组信息
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public TNcTimegrp findByTimeGrpName(String name);
 
     //获取时间组最大id主键
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public int getMaxTimeGrpId();
 
     //保存时间组
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public boolean saveTimegrp(TNcTimegrp bean);
 
     //根据id和名称查询时间组是否存在
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public TNcTimegrp findByGrpIdAndName(int id,String name);
 
     //修改时间组
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public boolean updateTimegrp(TNcTimegrp bean);
 
     //根据时间组id查询此时间组是否被时间周使用
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<String> getWeekTimeById(int id);
 
     //根据id删除时间组
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public boolean delByGrpId(int id);
 
     //根据查询条件分页获取时间周
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public Pagination getNcWeekTimeWithPage(String time,int pageNo, int pageSize,Map map);
 
     //获取所有时间组
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<TNcTimegrp> findAllNcTimeGrp();
 
     //根据id获取时间周信息
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public TNcWeektime findByWeekTimeId(int id);
 
     //根据名称获取时间周信息
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public TNcWeektime findByWeekTimeName(String name);
 
     //获取最大时间周id 只支持3-15
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public int getMaxWeekId();
 
     //保存时间周
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public boolean saveWeektime(TNcWeektime bean);
 
     //根据id和名称查询时间周是否存在
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public TNcWeektime findByWeekIdAndName(int id,String name);
 
     //修改时间周
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public boolean updateWeektime(TNcWeektime bean);
 
     //根据时间周id查询设备绑定时间周情况
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List getDevWeekByWeekid(int id);
 
     //根据id删除时间周
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public boolean delByWeekId(int id);
 
     //根据查询条件分页获取设备绑定时间周信息
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public Pagination getNcDevWeekWithPage(int weekid,String devname,int pageNo, int pageSize,Map map);
 
     //获取所有时间周
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<TNcWeektime> findAllNcWeekTime();
 
     //根据设备编号和时间周id删除对应设备时间周
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public void delDevWeekById(int devid,int weekid);
 
     //获取最大设备时间周版本
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public int findMaxDevWeekVersion();
 
     //根据时间周id删除设备绑定的时间周
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public void deleteDevWeekByWeekId(int weekId);
 
     //保存设备时间周
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public boolean saveDevWeek(TNcDevweek devweek);
 
     //根据id查询已选取此时间周的设备
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<TNcDevweek> findChosenDev(int weekId);
 
     //获取所有设备
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<TNcDevice> findAllNcDevices();
 
     //获取管理员权限下的设备
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<TNcDevice> findOperatorDevices(String operRegionid);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/system/dao/impl/DictionaryDaoImpl.java b/src/main/java/com/supwisdom/dlpay/system/dao/impl/DictionaryDaoImpl.java
index 4655310..87c8077 100644
--- a/src/main/java/com/supwisdom/dlpay/system/dao/impl/DictionaryDaoImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/system/dao/impl/DictionaryDaoImpl.java
@@ -6,6 +6,7 @@
 import com.supwisdom.dlpay.system.domain.TDictionaryId;
 import com.supwisdom.dlpay.system.page.Pagination;
 import org.hibernate.transform.Transformers;
+import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
@@ -120,7 +121,6 @@
 
     @Transactional
     @Override
-    //@Cacheable(cacheNames = "dicationary_cache", key = "#p0")
     public List<TDictionaryId> findTDictionaryByType(int type) {
         String sql = "select bean.id from TDictionary bean where bean.id.dicttype=?1";
         Query query = entityManager.createQuery(sql,TDictionaryId.class);
diff --git a/src/main/java/com/supwisdom/dlpay/system/domain/TRegion.java b/src/main/java/com/supwisdom/dlpay/system/domain/TRegion.java
index 7513f94..449e79e 100644
--- a/src/main/java/com/supwisdom/dlpay/system/domain/TRegion.java
+++ b/src/main/java/com/supwisdom/dlpay/system/domain/TRegion.java
@@ -1,12 +1,10 @@
 package com.supwisdom.dlpay.system.domain;
 
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
+import javax.persistence.*;
 
 @Entity
-@Table(name = "TB_REGION")
+@Table(name = "TB_REGION",
+    indexes = {@Index(name = "idx_region_id",columnList = "regionid",unique = true)})
 public class TRegion {
     private String regionid;
     private String address;
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/SystemService.java b/src/main/java/com/supwisdom/dlpay/system/service/SystemService.java
index ff84e30..d486fbd 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/SystemService.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/SystemService.java
@@ -6,133 +6,176 @@
 import com.supwisdom.dlpay.system.bean.RegionZTreeNodes;
 import com.supwisdom.dlpay.system.domain.*;
 import com.supwisdom.dlpay.system.page.Pagination;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.List;
 
 public interface SystemService {
 
     //根据查询条件分页查询字典
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public Pagination findDictionary(String dicttype, String dictcaption, Integer pageNo, Integer pageSize);
 
     //获取所有字典类型
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<DictionaryType> findDictionaryType();
 
     //保存字典值
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public boolean saveDictionary(String dicttype, String dicttypename, String dictval, String dictcaption);
 
     //根据类型获取字典值
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<TDictionaryId> findTDictionaryByType(int type);
 
     //根据管理员属性获取其能分配的管理员属性 sql中字典type固定为1
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<TDictionaryId> findOpertypes(String opertype);
 
     //根据类型和值获取字典值
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<TDictionaryId> findByType(int type, String dicVal);
 
     //修改字典值
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public TDictionary updateDictionary(String dicttype, String dicttypename, String dictval, String dictcaption, String oriengaltype, String oriengalval);
 
 
     //根据查询条件分页获取所有区域
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public Pagination getSystemRegionList(String regionname,int pageNo,int pageSize);
 
     //根据查询条件以及管理员区域分页获取区域
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public Pagination getOperatorRegionList(String regionname,String regionid,int pageNo,int pageSize);
 
     //根据区域id查询楼栋
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<TBuilding> getBuildingByRegionId(String regionid);
 
     //根据区域id查询楼栋管理员权限下楼栋
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<TBuilding> getBuildingOperBuildingByRegionId(String regionid,String operid);
 
     //根据id删除区域--修改状态flag为0
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public boolean deleteRegionById(String regionid);
 
     //根据id获取区域
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public TRegion getRegionById(String regionid);
 
     //根据id获取所有状态的区域---查重使用
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public TRegion getRegionAllFlagById(String regionid);
 
     //根据区域id获取其权限下所有区域
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<TRegion> getRegionListById(String regionid);
 
     //根据区域id获取其下级所有区域
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<TRegion> getLowRegionListById(String regionid);
 
     //根据区域级别获取其上一级级别的所有区域
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<TRegion> getRegionListByLevel(int level);
 
     //根据区域级别获取其权限下上一级级别的区域
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<TRegion> getOperRegionListByLevel(int level,String regionid);
 
     //获取所有区域
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<TRegion> getAllRegions();
 
     //根据名称获取区域
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public TRegion getRegionByName(String regionname);
 
     //保存区域
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public boolean saveRegion(TRegion bean);
 
     //根据id和名称获取非本id的相同名称区域
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public TRegion getRegionByNameAndId(String regionname,String regionid);
 
     //修改区域
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public boolean updateRegion(TRegion bean);
 
     //获取区域树形数据
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<RegionZTreeNodes> getAllRegionTreeList();
 
 
     //根据查询条件分页获取所有楼栋
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public Pagination getSystemBuildingList(String regionid,String buildingname,int pageNo,int pageSize);
 
     //根据查询条件分页获取区域管理员权限下所有楼栋
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public Pagination getOperatorBuildingList(String operRegionid,String regionid,String buildingname,int pageNo,int pageSize);
 
     //分页获取楼栋管理员权限内楼栋
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public Pagination getBuildingOperBuildingList(String regionid,String buildingname,String operid,int pageNo,int pageSize);
 
     //根据id获取楼栋信息
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public TBuilding getBuildingById(String buildingid);
 
     //根据名称获取楼栋信息
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public TBuilding getBuildingByName(String buildingname);
 
     //保存楼栋
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public boolean saveBuilding(TBuilding bean);
 
     //根据id和名称获取非本id的相同名称楼栋
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public TBuilding getBuildingByNameAndId(String buildingname,String buildingid);
 
     //修改楼栋
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public boolean updateBuilding(TBuilding bean);
 
     //根据id删除楼栋---修改flag为D
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public boolean delBuilding(String buildingid);
 
     //获取所有要分配的楼栋
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<AllotBuildingBean> findSystemAllotBuildingList();
 
     //获取操作员权限下要分配的楼栋
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<AllotBuildingBean> findOperatorAllotBuildingList(String operRegionid);
 
     //获取已经分配过的楼栋
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<AllotBuildingBean> findBuildingInOper(String operid);
 
     //根据操作员id删除所有分配的楼栋
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public boolean deleteOperBuildingByOperid(String operid);
 
     //保存操作员分配的楼栋
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public boolean saveOperBuilding(TOperbuilding bean);
 
     //获取所有楼栋信息
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<TBuilding> getAllBuildings();
 
     //获取区域管理员权限下的所有楼栋信息
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<TBuilding> getOperatorBuildings(String regionid);
 
     //获取楼栋管理员权限下的楼栋
+    @Transactional(propagation = Propagation.REQUIRED,rollbackFor = {Exception.class})
     public List<TBuilding> getBuildingOperBuildings(String operid);
 }
diff --git a/src/main/java/com/supwisdom/dlpay/system/service/impl/SystemServiceImpl.java b/src/main/java/com/supwisdom/dlpay/system/service/impl/SystemServiceImpl.java
index 3cbe761..e6f818e 100644
--- a/src/main/java/com/supwisdom/dlpay/system/service/impl/SystemServiceImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/system/service/impl/SystemServiceImpl.java
@@ -11,6 +11,8 @@
 import com.supwisdom.dlpay.system.page.Pagination;
 import com.supwisdom.dlpay.system.service.SystemService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
@@ -38,6 +40,7 @@
     }
 
     @Override
+    @CacheEvict(cacheNames = "dicationary_cache", key = "#p0")
     public boolean saveDictionary(String dicttype, String dicttypename, String dictval, String dictcaption) {
         TDictionary tDictionary = new TDictionary();
         TDictionaryId tDictionaryId = new TDictionaryId();
@@ -51,11 +54,13 @@
     }
 
     @Override
+    @Cacheable(cacheNames = "dicationary_cache", key = "#p0")
     public List<TDictionaryId> findTDictionaryByType(int type) {
         return dictionaryDao.findTDictionaryByType(type);
     }
 
     @Override
+    @Cacheable(cacheNames = "opertypes_cache", key = "#p0")
     public List<TDictionaryId> findOpertypes(String opertype) {
         return dictionaryDao.findOpertypes(opertype);
     }
@@ -66,6 +71,7 @@
     }
 
     @Override
+    @CacheEvict(cacheNames = "dicationary_cache", key = "#p0")
     public TDictionary updateDictionary(String dicttype, String dicttypename, String dictval, String dictcaption, String oriengaltype, String oriengalval) {
         return dictionaryDao.updateDictionary(dicttype, dicttypename, dictval, dictcaption, oriengaltype, oriengalval);
     }
diff --git a/src/main/resources/templates/system/role/func.html b/src/main/resources/templates/system/role/func.html
index fff2149..48d6dff 100755
--- a/src/main/resources/templates/system/role/func.html
+++ b/src/main/resources/templates/system/role/func.html
@@ -34,7 +34,6 @@
         admin.dgo('[[@{/role/func}]]', {
             roleId: func,
         }, function (data) {
-            debugger
             layer.closeAll('loading');
             if (data.code == 200) {
                 initTree(data.node);
