liuchanglan 4 years ago
parent
commit
91a8560f0b
64 changed files with 1174 additions and 289 deletions
  1. 19 0
      README.md
  2. 19 0
      src/main/java/com/gz/common/DataGlobalVariable.java
  3. 1 3
      src/main/java/com/gz/controller/archive/ArchiveController.java
  4. 8 1
      src/main/java/com/gz/controller/archive/ArchiveFileController.java
  5. 2 1
      src/main/java/com/gz/controller/archive/SecondaryArchiveController.java
  6. 7 6
      src/main/java/com/gz/controller/statistics/SelectStatisticsController.java
  7. 3 3
      src/main/java/com/gz/controller/system/AdminController.java
  8. 21 2
      src/main/java/com/gz/controller/system/DeptController.java
  9. 2 2
      src/main/java/com/gz/core/BaseDTO.java
  10. 2 2
      src/main/java/com/gz/core/UUIDBaseDTO.java
  11. 1 1
      src/main/java/com/gz/dto/borrow/ArchiveBorrowDTO.java
  12. 2 1
      src/main/java/com/gz/dto/system/AdminDTO.java
  13. 1 1
      src/main/java/com/gz/dto/system/LogDTO.java
  14. 5 4
      src/main/java/com/gz/filter/AuthFilter.java
  15. 7 1
      src/main/java/com/gz/jwt/JwtPayload.java
  16. 6 0
      src/main/java/com/gz/mapper/archive/ArchiveFileMapper.java
  17. 4 1
      src/main/java/com/gz/mapper/archive/ArchiveMapper.java
  18. 5 6
      src/main/java/com/gz/mapper/statistics/SelectStatisticsMapper.java
  19. 4 4
      src/main/java/com/gz/mapper/welcome/StatisticsMapper.java
  20. 13 0
      src/main/java/com/gz/rvo/archive/ArchiveFileRVO.java
  21. 3 1
      src/main/java/com/gz/rvo/borrow/AuditInfoRVO.java
  22. 10 1
      src/main/java/com/gz/service/archive/ArchiveFileService.java
  23. 2 1
      src/main/java/com/gz/service/archive/SecondaryArchiveService.java
  24. 15 4
      src/main/java/com/gz/service/archive/impl/ArchiveFileServiceImpl.java
  25. 55 2
      src/main/java/com/gz/service/archive/impl/ArchiveServiceImpl.java
  26. 17 2
      src/main/java/com/gz/service/archive/impl/SecondaryArchiveServiceImpl.java
  27. 2 2
      src/main/java/com/gz/service/borrow/impl/ArchiveBorrowServiceImpl.java
  28. 4 3
      src/main/java/com/gz/service/statistics/SelectStatisticsService.java
  29. 64 7
      src/main/java/com/gz/service/statistics/impl/SelectStatisticsServiceImpl.java
  30. 3 3
      src/main/java/com/gz/service/system/AdminService.java
  31. 11 2
      src/main/java/com/gz/service/system/DeptService.java
  32. 3 3
      src/main/java/com/gz/service/system/impl/AdminServiceImpl.java
  33. 30 23
      src/main/java/com/gz/service/system/impl/AuthServiceImpl.java
  34. 43 4
      src/main/java/com/gz/service/system/impl/DeptServiceImpl.java
  35. 1 1
      src/main/java/com/gz/service/welcome/impl/StatisticsServiceImpl.java
  36. 19 0
      src/main/java/com/gz/utils/ObjectUtils.java
  37. 2 2
      src/main/java/com/gz/utils/PasswordUtils.java
  38. 13 0
      src/main/java/com/gz/vo/archive/AgainSearchVO.java
  39. 13 0
      src/main/java/com/gz/vo/archive/SearchArchiveVO.java
  40. 15 0
      src/main/java/com/gz/vo/archive/SecondaryArchiveInsertVO.java
  41. 1 1
      src/main/java/com/gz/vo/borrow/SearchBorrowVO.java
  42. 24 0
      src/main/java/com/gz/vo/statistics/StatisticsVO.java
  43. 6 0
      src/main/java/com/gz/vo/system/AdminVO.java
  44. 3 2
      src/main/resources/mapper/archiveBorrowMapper.xml
  45. 15 0
      src/main/resources/mapper/archiveFileMapper.xml
  46. 75 40
      src/main/resources/mapper/archiveMapper.xml
  47. 101 0
      src/main/resources/mapper/selectStatisticsMapper.xml
  48. 2 2
      src/main/resources/mapper/statisticsMapper.xml
  49. 1 1
      src/main/resources/static/index.html
  50. 2 2
      src/main/resources/static/js/lay-module/request/http.js
  51. 5 1
      src/main/resources/static/js/lay-module/treetable-lay/treetable.js
  52. 2 2
      src/main/resources/static/login.html
  53. 72 25
      src/main/resources/static/page/admin/edit.html
  54. 8 2
      src/main/resources/static/page/archive/editSecondary.html
  55. 18 13
      src/main/resources/static/page/archive/fileList.html
  56. 25 19
      src/main/resources/static/page/archive/list.html
  57. 95 0
      src/main/resources/static/page/archive/show.html
  58. 1 1
      src/main/resources/static/page/auditList/audit.html
  59. 9 2
      src/main/resources/static/page/borrow/reserve.html
  60. 35 53
      src/main/resources/static/page/dept/edit.html
  61. 6 6
      src/main/resources/static/page/dept/list.html
  62. 71 6
      src/main/resources/static/page/statistics/archiveStatistics.html
  63. 67 2
      src/main/resources/static/page/statistics/archiveYearStatistics.html
  64. 73 9
      src/main/resources/static/page/statistics/borrowStatistics.html

+ 19 - 0
README.md

@@ -0,0 +1,19 @@
+# 国土档案
+
+## 1.环境信息
++ dev 开发环境
++ test 测试环境
+
+## 2.服务器信息
+
++ ### Mysql服务器
+    #### 16h32g 500g Centos7.8
+    * ip `66.1.21.157`
+    * 用户名 `root`
+    * 密码 ` Jda!2t456`
+
++ ### 应用服务器
+  #### 16h32g 1000g Centos7.8
+    * ip `66.1.21.158`
+    * 用户名 `root`
+    * 密码 ` Jda!2t456`

+ 19 - 0
src/main/java/com/gz/common/DataGlobalVariable.java

@@ -7,9 +7,15 @@ package com.gz.common;
  */
  */
 public class DataGlobalVariable {
 public class DataGlobalVariable {
 
 
+
+    /** ---------------------用户相关 ------------------------*/
+
+
     /** 用户激活状态码*/
     /** 用户激活状态码*/
     public static final Integer USER_STATUS_DISABLE = 1;
     public static final Integer USER_STATUS_DISABLE = 1;
 
 
+    /** ---------------------日志相关 ------------------------*/
+
     /** 操作日志的code*/
     /** 操作日志的code*/
     public static final String OPERATE_LOG_CODE = "OPERATION_LOG";
     public static final String OPERATE_LOG_CODE = "OPERATION_LOG";
 
 
@@ -19,6 +25,9 @@ public class DataGlobalVariable {
     /** 登录日志的code*/
     /** 登录日志的code*/
     public static final String LOGIN_LOG_CODE = "LOGIN_LOG";
     public static final String LOGIN_LOG_CODE = "LOGIN_LOG";
 
 
+    /** ---------------------档号生成相关 ------------------------*/
+
+
     /** 文书档案 生成档号 FOMAT 全宗号-档案门类代码年度-保管期限-机构代码-件号 */
     /** 文书档案 生成档号 FOMAT 全宗号-档案门类代码年度-保管期限-机构代码-件号 */
     public static final String WS_DH_FOMAT = "%s-WS%s-%s-0000-%s";
     public static final String WS_DH_FOMAT = "%s-WS%s-%s-0000-%s";
 
 
@@ -43,6 +52,9 @@ public class DataGlobalVariable {
     /** 融媒体档案 生成档号 FOMAT 全宗号-目录号-档案门类代码·属类代码-保管期限-件号*/
     /** 融媒体档案 生成档号 FOMAT 全宗号-目录号-档案门类代码·属类代码-保管期限-件号*/
     public static final String MT_DH_FOMAT = "%s-%s-MT·%s-%s-%s";
     public static final String MT_DH_FOMAT = "%s-%s-MT·%s-%s-%s";
 
 
+    /** ---------------------权限控制相关 ------------------------*/
+
+
     /** 菜单权限类型*/
     /** 菜单权限类型*/
     public static final Integer ROLE_TYPE_MENU = 0;
     public static final Integer ROLE_TYPE_MENU = 0;
     /** 档案树权限类型*/
     /** 档案树权限类型*/
@@ -56,4 +68,11 @@ public class DataGlobalVariable {
     public static final String MQ_X_DEAD_LETTER_EXCHANGE_KEY = "x-dead-letter-exchange";
     public static final String MQ_X_DEAD_LETTER_EXCHANGE_KEY = "x-dead-letter-exchange";
     public static final String MQ_X_DEAD_LETTER_ROUTING_KEY = "x-dead-letter-routing-key";
     public static final String MQ_X_DEAD_LETTER_ROUTING_KEY = "x-dead-letter-routing-key";
     public static final String MQ_X_MESSAGE_TTL = "x-message-ttl";
     public static final String MQ_X_MESSAGE_TTL = "x-message-ttl";
+
+    /** ---------------------档案检索相关 ------------------------*/
+
+    public static final String SEARCH_SQL_KEY = "searchArchiveSql";
+
+    /** ---------------------统计相关 ------------------------*/
+    public static final String STATISTICS_ML_CODE_KEY_FOMAT = "STATISTICS_CODE_%s";
 }
 }

+ 1 - 3
src/main/java/com/gz/controller/archive/ArchiveController.java

@@ -28,9 +28,7 @@ public class ArchiveController {
     private ArchiveService service;
     private ArchiveService service;
 
 
     @PostMapping("insert")
     @PostMapping("insert")
-    Integer insert(@RequestBody InsertArchiveVO vo) throws Exception {
-        return service.insert(vo);
-    }
+    Integer insert(@RequestBody InsertArchiveVO vo) throws Exception { return service.insert(vo); }
 
 
     @DeleteMapping("delete")
     @DeleteMapping("delete")
     Integer delete(Integer id) {
     Integer delete(Integer id) {

+ 8 - 1
src/main/java/com/gz/controller/archive/ArchiveFileController.java

@@ -3,6 +3,7 @@ package com.gz.controller.archive;
 import com.github.pagehelper.PageInfo;
 import com.github.pagehelper.PageInfo;
 import com.gz.core.exception.BusinessException;
 import com.gz.core.exception.BusinessException;
 import com.gz.dto.system.ArchiveFileDTO;
 import com.gz.dto.system.ArchiveFileDTO;
+import com.gz.rvo.archive.ArchiveFileRVO;
 import com.gz.service.archive.ArchiveFileService;
 import com.gz.service.archive.ArchiveFileService;
 import com.gz.vo.archive.SearchArchiveFileVO;
 import com.gz.vo.archive.SearchArchiveFileVO;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
@@ -10,6 +11,7 @@ import org.springframework.web.multipart.MultipartFile;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
 import java.io.IOException;
 import java.io.IOException;
+import java.util.List;
 
 
 /**
 /**
  * 文档附件控制器
  * 文档附件控制器
@@ -35,7 +37,12 @@ public class ArchiveFileController {
     }
     }
 
 
     @GetMapping("selectByPage")
     @GetMapping("selectByPage")
-    PageInfo<ArchiveFileDTO> selectByPage(SearchArchiveFileVO vo) {
+    PageInfo<ArchiveFileRVO> selectByPage(SearchArchiveFileVO vo) {
         return archiveFileService.selectByPage(vo);
         return archiveFileService.selectByPage(vo);
     }
     }
+
+    @GetMapping("selectByArchiveId")
+    List<ArchiveFileRVO> selectByArchiveId(SearchArchiveFileVO vo){
+        return archiveFileService.selectByArchiveId(vo);
+    }
 }
 }

+ 2 - 1
src/main/java/com/gz/controller/archive/SecondaryArchiveController.java

@@ -5,6 +5,7 @@ import com.gz.dto.archive.ArchiveDTO;
 import com.gz.dto.archive.SecondaryArchiveDTO;
 import com.gz.dto.archive.SecondaryArchiveDTO;
 import com.gz.service.archive.SecondaryArchiveService;
 import com.gz.service.archive.SecondaryArchiveService;
 import com.gz.vo.PageVO;
 import com.gz.vo.PageVO;
+import com.gz.vo.archive.SecondaryArchiveInsertVO;
 import com.gz.vo.archive.SecondaryArchiveVO;
 import com.gz.vo.archive.SecondaryArchiveVO;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 
 
@@ -28,7 +29,7 @@ public class SecondaryArchiveController {
      * @since 2020/9/4 14:46
      * @since 2020/9/4 14:46
      */
      */
     @PostMapping("insert")
     @PostMapping("insert")
-    Integer insert(@RequestBody SecondaryArchiveDTO dto) throws Exception{
+    Integer insert(@RequestBody SecondaryArchiveInsertVO dto) throws Exception{
         return service.insert(dto);
         return service.insert(dto);
     }
     }
 
 

+ 7 - 6
src/main/java/com/gz/controller/statistics/SelectStatisticsController.java

@@ -5,6 +5,7 @@ import com.gz.rvo.statistics.ArchiveStatisticsRVO;
 import com.gz.rvo.statistics.ArchiveYearStatisticsRVO;
 import com.gz.rvo.statistics.ArchiveYearStatisticsRVO;
 import com.gz.rvo.statistics.BorrowStatisticsRVO;
 import com.gz.rvo.statistics.BorrowStatisticsRVO;
 import com.gz.service.statistics.SelectStatisticsService;
 import com.gz.service.statistics.SelectStatisticsService;
+import com.gz.vo.statistics.StatisticsVO;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.bind.annotation.RestController;
@@ -25,17 +26,17 @@ public class SelectStatisticsController {
     private SelectStatisticsService service;
     private SelectStatisticsService service;
 
 
     @GetMapping("selectStatisticsByType")
     @GetMapping("selectStatisticsByType")
-    List<ArchiveStatisticsRVO> selectStatisticsByType(){
-        return service.selectStatisticsByType();
+    List<ArchiveStatisticsRVO> selectStatisticsByType(StatisticsVO vo){
+        return service.selectStatisticsByType(vo);
     }
     }
 
 
     @GetMapping("selectArchiveYearStatistics")
     @GetMapping("selectArchiveYearStatistics")
-    public List<ArchiveYearStatisticsRVO> selectArchiveYearStatistics() {
-        return service.selectArchiveYearStatistics();
+    public List<ArchiveYearStatisticsRVO> selectArchiveYearStatistics(StatisticsVO vo) {
+        return service.selectArchiveYearStatistics(vo);
     }
     }
 
 
     @GetMapping("selectBorrowStatistics")
     @GetMapping("selectBorrowStatistics")
-    List<BorrowStatisticsRVO> selectBorrowStatistics(){
-        return service.selectBorrowStatistics();
+    List<BorrowStatisticsRVO> selectBorrowStatistics(StatisticsVO vo){
+        return service.selectBorrowStatistics(vo);
     }
     }
 }
 }

+ 3 - 3
src/main/java/com/gz/controller/system/AdminController.java

@@ -68,19 +68,19 @@ public class AdminController {
 
 
     @GetMapping("selectByPrimaryKey")
     @GetMapping("selectByPrimaryKey")
     @TraceLog(module = "管理员管理",business = "查询管理员详细信息")
     @TraceLog(module = "管理员管理",business = "查询管理员详细信息")
-    public AdminDTO selectByPrimaryKey(Integer id){
+    public AdminDTO selectByPrimaryKey(String id){
         return adminService.selectByPrimaryKey(id);
         return adminService.selectByPrimaryKey(id);
     }
     }
 
 
     @PostMapping("updateStatus")
     @PostMapping("updateStatus")
     @TraceLog(module = "管理员管理",business = "修改管理员状态")
     @TraceLog(module = "管理员管理",business = "修改管理员状态")
-    Integer updateStatus(@RequestBody Integer id){
+    Integer updateStatus(@RequestBody String id){
         return adminService.updateStatus(id);
         return adminService.updateStatus(id);
     }
     }
 
 
     @PostMapping("resetPassword")
     @PostMapping("resetPassword")
     @TraceLog(module = "管理员管理",business = "重置管理员密码")
     @TraceLog(module = "管理员管理",business = "重置管理员密码")
-    Integer resetPassword(@RequestBody Integer id){
+    Integer resetPassword(@RequestBody String id){
         return adminService.resetPassword(id);
         return adminService.resetPassword(id);
     }
     }
 
 

+ 21 - 2
src/main/java/com/gz/controller/system/DeptController.java

@@ -1,7 +1,10 @@
 package com.gz.controller.system;
 package com.gz.controller.system;
 
 
+import cn.hutool.core.lang.tree.Tree;
+import com.github.pagehelper.PageInfo;
 import com.gz.dto.system.DeptDTO;
 import com.gz.dto.system.DeptDTO;
 import com.gz.service.system.DeptService;
 import com.gz.service.system.DeptService;
+import com.gz.vo.PageVO;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
@@ -24,12 +27,12 @@ public class DeptController {
     }
     }
 
 
     @DeleteMapping("delete")
     @DeleteMapping("delete")
-    Integer delete(Integer id) {
+    Integer delete(String id) {
         return deptService.delete(id);
         return deptService.delete(id);
     }
     }
 
 
     @PostMapping("update")
     @PostMapping("update")
-    Integer update(DeptDTO dto) {
+    Integer update(@RequestBody DeptDTO dto) {
         return deptService.update(dto);
         return deptService.update(dto);
     }
     }
 
 
@@ -37,4 +40,20 @@ public class DeptController {
     List<DeptDTO> selectAll() {
     List<DeptDTO> selectAll() {
         return deptService.selectAll();
         return deptService.selectAll();
     }
     }
+
+    @GetMapping("selectTree")
+    List<Tree<String>> selectTree(){
+        return deptService.selectTree();
+    }
+
+
+    @GetMapping("selectByPage")
+    PageInfo<DeptDTO> selectByPage(PageVO vo){
+        return deptService.selectByPage(vo);
+    }
+
+    @GetMapping("selectByPrimaryKey")
+    DeptDTO selectByPrimaryKey(String id){
+        return deptService.selectByPrimaryKey(id);
+    }
 }
 }

+ 2 - 2
src/main/java/com/gz/core/BaseDTO.java

@@ -35,12 +35,12 @@ public class BaseDTO {
      * 创建人
      * 创建人
      */
      */
     @Column(name = "created")
     @Column(name = "created")
-    private Integer created;
+    private String created;
     /**
     /**
      * 修改人
      * 修改人
      */
      */
     @Column(name = "updated")
     @Column(name = "updated")
-    private Integer updated;
+    private String updated;
 
 
     /**
     /**
      * @description 逻辑删除
      * @description 逻辑删除

+ 2 - 2
src/main/java/com/gz/core/UUIDBaseDTO.java

@@ -39,12 +39,12 @@ public class UUIDBaseDTO {
      * 创建人
      * 创建人
      */
      */
     @Column(name = "created")
     @Column(name = "created")
-    private Integer created;
+    private String created;
     /**
     /**
      * 修改人
      * 修改人
      */
      */
     @Column(name = "updated")
     @Column(name = "updated")
-    private Integer updated;
+    private String updated;
 
 
     /**
     /**
      * @description 逻辑删除
      * @description 逻辑删除

+ 1 - 1
src/main/java/com/gz/dto/borrow/ArchiveBorrowDTO.java

@@ -17,7 +17,7 @@ public class ArchiveBorrowDTO extends BaseDTO {
     private Integer archiveId;
     private Integer archiveId;
 
 
     // 借阅的用户id
     // 借阅的用户id
-    private Integer adminId;
+    private String adminId;
 
 
     // 备注
     // 备注
     private String remarks;
     private String remarks;

+ 2 - 1
src/main/java/com/gz/dto/system/AdminDTO.java

@@ -1,6 +1,7 @@
 package com.gz.dto.system;
 package com.gz.dto.system;
 
 
 import com.gz.core.BaseDTO;
 import com.gz.core.BaseDTO;
+import com.gz.core.UUIDBaseDTO;
 import lombok.Data;
 import lombok.Data;
 
 
 import javax.persistence.Table;
 import javax.persistence.Table;
@@ -12,7 +13,7 @@ import javax.persistence.Table;
  */
  */
 @Data
 @Data
 @Table(name = "tab_admin")
 @Table(name = "tab_admin")
-public class AdminDTO extends BaseDTO {
+public class AdminDTO extends UUIDBaseDTO {
     // 管理员姓名
     // 管理员姓名
     private String adminName;
     private String adminName;
 
 

+ 1 - 1
src/main/java/com/gz/dto/system/LogDTO.java

@@ -38,7 +38,7 @@ public class LogDTO {
     private String execIp;
     private String execIp;
 
 
     // 操作人
     // 操作人
-    private Integer execBy;
+    private String execBy;
 
 
     private String execTime;
     private String execTime;
 }
 }

+ 5 - 4
src/main/java/com/gz/filter/AuthFilter.java

@@ -89,23 +89,24 @@ public class AuthFilter implements Filter {
                     log.warn("token验证失败,禁止访问");
                     log.warn("token验证失败,禁止访问");
                     ResponseResult result = new ResponseResult(ResponseEnum.TOKEN_EXPIRED);
                     ResponseResult result = new ResponseResult(ResponseEnum.TOKEN_EXPIRED);
                     writer.println(JSON.toJSONString(result));
                     writer.println(JSON.toJSONString(result));
-                } catch (JWTDecodeException e){
+                } catch (JWTDecodeException e) {
                     PrintWriter writer = servletResponse.getWriter();
                     PrintWriter writer = servletResponse.getWriter();
                     log.warn("token验证失败,禁止访问");
                     log.warn("token验证失败,禁止访问");
                     ResponseResult result = new ResponseResult(ResponseEnum.ILLEGAL_TOKEN);
                     ResponseResult result = new ResponseResult(ResponseEnum.ILLEGAL_TOKEN);
                     writer.println(JSON.toJSONString(result));
                     writer.println(JSON.toJSONString(result));
                 }
                 }
                 // 验证成功
                 // 验证成功
-                if (verifier){
+                if (verifier) {
                     // 根据token获取载体
                     // 根据token获取载体
                     JwtPayload jwtPayload = JwtUtils.decrypt(token);
                     JwtPayload jwtPayload = JwtUtils.decrypt(token);
+                    log.info("部门:{},用户:{},正在操作:{},用户id:{},部门id:{}", jwtPayload.getDeptName(), jwtPayload.getAdminName(), url, jwtPayload.getId(), jwtPayload.getDeptId());
                     // 放到请求中
                     // 放到请求中
                     req.setAttribute(JwtConfig.HEADER_AUTHORIZATION_USER, jwtPayload);
                     req.setAttribute(JwtConfig.HEADER_AUTHORIZATION_USER, jwtPayload);
-                    log.info("token验证成功");
+//                    log.info("token验证成功");
                     filterChain.doFilter(servletRequest, servletResponse);
                     filterChain.doFilter(servletRequest, servletResponse);
                 }
                 }
             }
             }
-            log.info("请求的url:{},请求的Token{}", url, token);
+//            log.info("请求的url:{},请求的Token{}", url, token);
         }
         }
     }
     }
 }
 }

+ 7 - 1
src/main/java/com/gz/jwt/JwtPayload.java

@@ -12,7 +12,7 @@ import lombok.Data;
 public class JwtPayload {
 public class JwtPayload {
 
 
     /** 用户 Id */
     /** 用户 Id */
-    private Integer id;
+    private String id;
 
 
     /** 用户名 */
     /** 用户名 */
     private String account;
     private String account;
@@ -23,4 +23,10 @@ public class JwtPayload {
     /** 权限id*/
     /** 权限id*/
     private Integer roleId;
     private Integer roleId;
 
 
+    /** 部门id*/
+    private String deptId;
+
+    /** 部门名称*/
+    private String deptName;
+
 }
 }

+ 6 - 0
src/main/java/com/gz/mapper/archive/ArchiveFileMapper.java

@@ -1,7 +1,13 @@
 package com.gz.mapper.archive;
 package com.gz.mapper.archive;
 
 
 import com.gz.dto.system.ArchiveFileDTO;
 import com.gz.dto.system.ArchiveFileDTO;
+import com.gz.rvo.archive.ArchiveFileRVO;
+import com.gz.vo.archive.SearchArchiveFileVO;
 import tk.mybatis.mapper.common.Mapper;
 import tk.mybatis.mapper.common.Mapper;
 
 
+import java.util.List;
+
 public interface ArchiveFileMapper extends Mapper<ArchiveFileDTO> {
 public interface ArchiveFileMapper extends Mapper<ArchiveFileDTO> {
+
+    List<ArchiveFileRVO> selectFileAndJnml(SearchArchiveFileVO vo);
 }
 }

+ 4 - 1
src/main/java/com/gz/mapper/archive/ArchiveMapper.java

@@ -3,6 +3,7 @@ package com.gz.mapper.archive;
 import com.gz.dto.archive.ArchiveDTO;
 import com.gz.dto.archive.ArchiveDTO;
 import com.gz.rvo.archive.ArchiveRVO;
 import com.gz.rvo.archive.ArchiveRVO;
 import com.gz.rvo.borrow.ArchiveBorrowListRVO;
 import com.gz.rvo.borrow.ArchiveBorrowListRVO;
+import com.gz.vo.archive.AgainSearchVO;
 import com.gz.vo.archive.SearchArchiveVO;
 import com.gz.vo.archive.SearchArchiveVO;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.Select;
@@ -19,6 +20,8 @@ public interface ArchiveMapper extends Mapper<ArchiveDTO> {
 
 
     List<ArchiveRVO> searchList(SearchArchiveVO vo);
     List<ArchiveRVO> searchList(SearchArchiveVO vo);
 
 
+    List<ArchiveRVO> againSearchList(AgainSearchVO vo);
+
     /**
     /**
      * @description 查询当前件号
      * @description 查询当前件号
      * @author LiuChangLan
      * @author LiuChangLan
@@ -34,5 +37,5 @@ public interface ArchiveMapper extends Mapper<ArchiveDTO> {
 
 
     List<ArchiveDTO> selectRoleAll(Integer roleId);
     List<ArchiveDTO> selectRoleAll(Integer roleId);
 
 
-    ArchiveDTO selectByRolePrimaryKey(Integer RoleId, Object id);
+    ArchiveDTO selectByRolePrimaryKey(Integer roleId, Object id);
 }
 }

File diff suppressed because it is too large
+ 5 - 6
src/main/java/com/gz/mapper/statistics/SelectStatisticsMapper.java


+ 4 - 4
src/main/java/com/gz/mapper/welcome/StatisticsMapper.java

@@ -41,28 +41,28 @@ public interface StatisticsMapper {
      * @author LiuChangLan
      * @author LiuChangLan
      * @since 2021/3/2 11:50
      * @since 2021/3/2 11:50
      */
      */
-    List<BorrowRecordRVO> selectMyWaitReturnRecord(Integer userId);
+    List<BorrowRecordRVO> selectMyWaitReturnRecord(String userId);
 
 
     /**
     /**
      * @description 查询我的三天内到期的记录
      * @description 查询我的三天内到期的记录
      * @author LiuChangLan
      * @author LiuChangLan
      * @since 2021/3/2 11:50
      * @since 2021/3/2 11:50
      */
      */
-    List<BorrowRecordRVO> selectMyDueSoonRecord(Integer userId);
+    List<BorrowRecordRVO> selectMyDueSoonRecord(String userId);
 
 
     /**
     /**
      * @description 查询借阅历史数量
      * @description 查询借阅历史数量
      * @author LiuChangLan
      * @author LiuChangLan
      * @since 2021/3/2 12:50
      * @since 2021/3/2 12:50
      */
      */
-    Integer selectMyHistoryBorrowCount(Integer userId);
+    Integer selectMyHistoryBorrowCount(String userId);
 
 
     /**
     /**
      * @description 申请未处理数量
      * @description 申请未处理数量
      * @author LiuChangLan
      * @author LiuChangLan
      * @since 2021/3/2 12:51
      * @since 2021/3/2 12:51
      */
      */
-    Integer selectRuditNotHandleCount(Integer userId);
+    Integer selectRuditNotHandleCount(String userId);
 
 
 
 
     /**
     /**

+ 13 - 0
src/main/java/com/gz/rvo/archive/ArchiveFileRVO.java

@@ -0,0 +1,13 @@
+package com.gz.rvo.archive;
+
+import com.gz.dto.system.ArchiveFileDTO;
+import lombok.Data;
+
+/**
+ * @author LiuchangLan
+ * @date 2021/3/10 14:52
+ */
+@Data
+public class ArchiveFileRVO extends ArchiveFileDTO {
+    private String jnml;
+}

+ 3 - 1
src/main/java/com/gz/rvo/borrow/AuditInfoRVO.java

@@ -31,9 +31,11 @@ public class AuditInfoRVO {
     // 备注
     // 备注
     private String remarks;
     private String remarks;
     // 附件下载地址
     // 附件下载地址
-    private String serverFilePath;
+    private String filePath;
     // 附件名称
     // 附件名称
     private String originalFileName;
     private String originalFileName;
     // 利用目的
     // 利用目的
     private String usePurpose;
     private String usePurpose;
+    // 文件名
+    private String fileName;
 }
 }

+ 10 - 1
src/main/java/com/gz/service/archive/ArchiveFileService.java

@@ -3,10 +3,12 @@ package com.gz.service.archive;
 import com.github.pagehelper.PageInfo;
 import com.github.pagehelper.PageInfo;
 import com.gz.core.exception.BusinessException;
 import com.gz.core.exception.BusinessException;
 import com.gz.dto.system.ArchiveFileDTO;
 import com.gz.dto.system.ArchiveFileDTO;
+import com.gz.rvo.archive.ArchiveFileRVO;
 import com.gz.vo.archive.SearchArchiveFileVO;
 import com.gz.vo.archive.SearchArchiveFileVO;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartFile;
 
 
 import java.io.IOException;
 import java.io.IOException;
+import java.util.List;
 
 
 public interface ArchiveFileService {
 public interface ArchiveFileService {
 
 
@@ -31,5 +33,12 @@ public interface ArchiveFileService {
      * @since 2021/2/25 17:09
      * @since 2021/2/25 17:09
      * @param vo
      * @param vo
      */
      */
-    PageInfo<ArchiveFileDTO> selectByPage(SearchArchiveFileVO vo);
+    PageInfo<ArchiveFileRVO> selectByPage(SearchArchiveFileVO vo);
+
+    /**
+     * @description 查询档案文件
+     * @author LiuChangLan
+     * @since 2021/3/11 12:24
+     */
+    List<ArchiveFileRVO> selectByArchiveId(SearchArchiveFileVO vo);
 }
 }

+ 2 - 1
src/main/java/com/gz/service/archive/SecondaryArchiveService.java

@@ -4,6 +4,7 @@ import com.github.pagehelper.PageInfo;
 import com.gz.dto.archive.ArchiveDTO;
 import com.gz.dto.archive.ArchiveDTO;
 import com.gz.dto.archive.SecondaryArchiveDTO;
 import com.gz.dto.archive.SecondaryArchiveDTO;
 import com.gz.vo.PageVO;
 import com.gz.vo.PageVO;
+import com.gz.vo.archive.SecondaryArchiveInsertVO;
 import com.gz.vo.archive.SecondaryArchiveVO;
 import com.gz.vo.archive.SecondaryArchiveVO;
 import com.sun.javafx.image.IntPixelGetter;
 import com.sun.javafx.image.IntPixelGetter;
 
 
@@ -15,7 +16,7 @@ public interface SecondaryArchiveService {
      * @author LiuChangLan
      * @author LiuChangLan
      * @since 2020/9/4 14:46
      * @since 2020/9/4 14:46
      */
      */
-    Integer insert(SecondaryArchiveDTO dto) throws Exception;
+    Integer insert(SecondaryArchiveInsertVO dto) throws Exception;
 
 
     /**
     /**
      * @description 删
      * @description 删

+ 15 - 4
src/main/java/com/gz/service/archive/impl/ArchiveFileServiceImpl.java

@@ -12,6 +12,7 @@ import com.gz.dto.archive.ArchiveDTO;
 import com.gz.dto.system.ArchiveFileDTO;
 import com.gz.dto.system.ArchiveFileDTO;
 import com.gz.mapper.archive.ArchiveFileMapper;
 import com.gz.mapper.archive.ArchiveFileMapper;
 import com.gz.mapper.archive.ArchiveMapper;
 import com.gz.mapper.archive.ArchiveMapper;
+import com.gz.rvo.archive.ArchiveFileRVO;
 import com.gz.service.archive.ArchiveFileService;
 import com.gz.service.archive.ArchiveFileService;
 import com.gz.utils.JwtUtils;
 import com.gz.utils.JwtUtils;
 import com.gz.vo.archive.SearchArchiveFileVO;
 import com.gz.vo.archive.SearchArchiveFileVO;
@@ -28,6 +29,7 @@ import sun.text.resources.cldr.yav.FormatData_yav;
 import javax.annotation.Resource;
 import javax.annotation.Resource;
 import java.io.File;
 import java.io.File;
 import java.io.IOException;
 import java.io.IOException;
+import java.util.List;
 
 
 /**
 /**
  * @author LiuchangLan
  * @author LiuchangLan
@@ -77,7 +79,11 @@ public class ArchiveFileServiceImpl implements ArchiveFileService {
 //                serverFileUploadPath = String.format(FileUploadConfig.ARCHIVE_UPLOAD_PATH_PDF_FOMAT, archiveDTO.getGdnd(), archiveDTO.getQzh(), archiveDTO.getBgqx(), archiveDTO.getGdnd(), fileFormat);
 //                serverFileUploadPath = String.format(FileUploadConfig.ARCHIVE_UPLOAD_PATH_PDF_FOMAT, archiveDTO.getGdnd(), archiveDTO.getQzh(), archiveDTO.getBgqx(), archiveDTO.getGdnd(), fileFormat);
                     serverFileUploadPath = "/" + archiveDTO.getQzh() + "/" + archiveDTO.getGdnd() + "/" + archiveDTO.getMl() + "/" + archiveDTO.getBgqx() + "/" + archiveDTO.getDh() + "/pdf";
                     serverFileUploadPath = "/" + archiveDTO.getQzh() + "/" + archiveDTO.getGdnd() + "/" + archiveDTO.getMl() + "/" + archiveDTO.getBgqx() + "/" + archiveDTO.getDh() + "/pdf";
                     // pdf文件名为档号
                     // pdf文件名为档号
-                    fn = String.format("%s.%s", archiveDTO.getDh(), fileFormat.toLowerCase());
+                    if (secondaryArchiveId != null){
+                        fn = String.format("%s_%s.%s", archiveDTO.getDh(),secondaryArchiveId, fileFormat.toLowerCase());
+                    }else {
+                        fn = String.format("%s.%s", archiveDTO.getDh(), fileFormat.toLowerCase());
+                    }
                     break;
                     break;
                 case "TIF":
                 case "TIF":
                     // tif文件名为页码 无法通过后台生成 读取上传文件的名称
                     // tif文件名为页码 无法通过后台生成 读取上传文件的名称
@@ -111,6 +117,7 @@ public class ArchiveFileServiceImpl implements ArchiveFileService {
         archiveFileDTO.setOriginalFileName(fileName);
         archiveFileDTO.setOriginalFileName(fileName);
         archiveFileDTO.setFileName(fn);
         archiveFileDTO.setFileName(fn);
         archiveFileDTO.setFileSize(file.getSize());
         archiveFileDTO.setFileSize(file.getSize());
+        archiveFileDTO.setSecondaryArchiveId(secondaryArchiveId);
         archiveFileDTO.setFileType(fileType);
         archiveFileDTO.setFileType(fileType);
         archiveFileDTO.setFilePath(serverFileUploadPath);
         archiveFileDTO.setFilePath(serverFileUploadPath);
         archiveFileDTO.setCreated(JwtUtils.getCurrentUserJwtPayload().getId());
         archiveFileDTO.setCreated(JwtUtils.getCurrentUserJwtPayload().getId());
@@ -142,9 +149,13 @@ public class ArchiveFileServiceImpl implements ArchiveFileService {
     }
     }
 
 
     @Override
     @Override
-    public PageInfo<ArchiveFileDTO> selectByPage(SearchArchiveFileVO vo) {
+    public PageInfo<ArchiveFileRVO> selectByPage(SearchArchiveFileVO vo) {
         PageHelper.startPage(vo.getPageNum(), vo.getPageSize());
         PageHelper.startPage(vo.getPageNum(), vo.getPageSize());
-        ArchiveFileDTO archiveFileDTO = BeanUtil.copyProperties(vo, ArchiveFileDTO.class);
-        return new PageInfo<>(archiveFileMapper.select(archiveFileDTO));
+        return new PageInfo<>(archiveFileMapper.selectFileAndJnml(vo));
+    }
+
+    @Override
+    public List<ArchiveFileRVO> selectByArchiveId(SearchArchiveFileVO vo) {
+        return archiveFileMapper.selectFileAndJnml(vo);
     }
     }
 }
 }

+ 55 - 2
src/main/java/com/gz/service/archive/impl/ArchiveServiceImpl.java

@@ -1,10 +1,12 @@
 package com.gz.service.archive.impl;
 package com.gz.service.archive.impl;
 
 
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.date.DateField;
 import cn.hutool.core.date.DateField;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.poi.excel.ExcelReader;
 import cn.hutool.poi.excel.ExcelReader;
 import cn.hutool.poi.excel.ExcelUtil;
 import cn.hutool.poi.excel.ExcelUtil;
+import com.alibaba.fastjson.JSONObject;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.github.pagehelper.PageInfo;
 import com.gz.common.DataGlobalVariable;
 import com.gz.common.DataGlobalVariable;
@@ -19,16 +21,25 @@ import com.gz.service.archive.ArchiveService;
 import com.gz.service.system.ArchivesTreeService;
 import com.gz.service.system.ArchivesTreeService;
 import com.gz.utils.ExcelUtils;
 import com.gz.utils.ExcelUtils;
 import com.gz.utils.JwtUtils;
 import com.gz.utils.JwtUtils;
+import com.gz.utils.ObjectUtils;
 import com.gz.vo.PageVO;
 import com.gz.vo.PageVO;
+import com.gz.vo.archive.AgainSearchVO;
 import com.gz.vo.archive.GenerateDhVO;
 import com.gz.vo.archive.GenerateDhVO;
 import com.gz.vo.archive.InsertArchiveVO;
 import com.gz.vo.archive.InsertArchiveVO;
 import com.gz.vo.archive.SearchArchiveVO;
 import com.gz.vo.archive.SearchArchiveVO;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.ibatis.mapping.BoundSql;
+import org.apache.ibatis.mapping.ParameterMapping;
+import org.apache.ibatis.session.SqlSessionFactory;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartFile;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
 import java.io.IOException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStream;
 import java.util.List;
 import java.util.List;
@@ -48,6 +59,12 @@ public class ArchiveServiceImpl implements ArchiveService {
     @Resource
     @Resource
     private ArchivesTreeService archivesTreeService;
     private ArchivesTreeService archivesTreeService;
 
 
+    @Autowired
+    private HttpServletRequest request;
+
+    @Autowired
+    private SqlSessionFactory sqlSessionFactory;
+
 
 
     @Override
     @Override
     public Integer insert(InsertArchiveVO vo) throws Exception {
     public Integer insert(InsertArchiveVO vo) throws Exception {
@@ -87,9 +104,45 @@ public class ArchiveServiceImpl implements ArchiveService {
                 }
                 }
             }
             }
         }
         }
-        log.info(sql);
+        HttpSession session = request.getSession();
         vo.setSql(sql);
         vo.setSql(sql);
-        return new PageInfo<>(mapper.searchList(vo));
+        PageInfo<ArchiveRVO> result = new PageInfo<>();
+        String searchSql = null;
+        if (vo.isAgain()) {
+            // 读取上一次执行的sql
+            String searchArchiveSql = String.valueOf(session.getAttribute(DataGlobalVariable.SEARCH_SQL_KEY));
+            // 封装二次搜索条件
+            AgainSearchVO againSearchVO = BeanUtil.copyProperties(vo, AgainSearchVO.class);
+            // 存入条件
+            againSearchVO.setSearchSql(searchArchiveSql);
+            result = new PageInfo<>(mapper.againSearchList(againSearchVO));
+            // 结果中检索
+            searchSql = getSql("com.gz.mapper.archive.ArchiveMapper.againSearchList", againSearchVO);
+        } else {
+            // 正常检索
+            searchSql = getSql("com.gz.mapper.archive.ArchiveMapper.searchList", vo);
+            result = new PageInfo<>(mapper.searchList(vo));
+        }
+        log.debug("本次检索sql:{}", searchSql);
+        // 缓存本次执行的sql
+        session.setAttribute(DataGlobalVariable.SEARCH_SQL_KEY, searchSql);
+        return result;
+
+    }
+
+    private String getSql(String javaMethodAddress, Object param) {
+        Map<String, Object> stringObjectMap = ObjectUtils.objToMap(param);
+        BoundSql boundSql = sqlSessionFactory.getConfiguration()
+                .getMappedStatement(javaMethodAddress).getBoundSql(param);
+
+
+        String sql = boundSql.getSql();
+        List<ParameterMapping> parameterMappings = boundSql.getParameterMappings();
+        for (int i = 0; i < parameterMappings.size(); i++) {
+            sql = sql.replaceFirst("\\?", String.format("'%s'", stringObjectMap.get(parameterMappings.get(i).getProperty())));
+        }
+//        log.info("获取运行的sql:{}",sql);
+        return sql;
     }
     }
 
 
     @Override
     @Override

+ 17 - 2
src/main/java/com/gz/service/archive/impl/SecondaryArchiveServiceImpl.java

@@ -3,15 +3,19 @@ package com.gz.service.archive.impl;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.bean.BeanUtil;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.github.pagehelper.PageInfo;
+import com.gz.core.annotation.TraceLog;
 import com.gz.dto.archive.SecondaryArchiveDTO;
 import com.gz.dto.archive.SecondaryArchiveDTO;
 import com.gz.mapper.archive.SecondaryArchiveMapper;
 import com.gz.mapper.archive.SecondaryArchiveMapper;
 import com.gz.rvo.archive.ArchiveRVO;
 import com.gz.rvo.archive.ArchiveRVO;
+import com.gz.service.archive.ArchiveFileService;
 import com.gz.service.archive.SecondaryArchiveService;
 import com.gz.service.archive.SecondaryArchiveService;
 import com.gz.utils.JwtUtils;
 import com.gz.utils.JwtUtils;
 import com.gz.vo.PageVO;
 import com.gz.vo.PageVO;
+import com.gz.vo.archive.SecondaryArchiveInsertVO;
 import com.gz.vo.archive.SecondaryArchiveVO;
 import com.gz.vo.archive.SecondaryArchiveVO;
 import org.apache.catalina.webresources.JarWarResource;
 import org.apache.catalina.webresources.JarWarResource;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
 import java.util.List;
 import java.util.List;
@@ -25,10 +29,21 @@ public class SecondaryArchiveServiceImpl implements SecondaryArchiveService {
 
 
     @Resource
     @Resource
     private SecondaryArchiveMapper secondaryArchiveMapper;
     private SecondaryArchiveMapper secondaryArchiveMapper;
+
+    @Resource
+    private ArchiveFileService archiveFileService;
+
     @Override
     @Override
-    public Integer insert(SecondaryArchiveDTO dto) throws Exception {
+    @Transactional
+    public Integer insert(SecondaryArchiveInsertVO dto) throws Exception {
         dto.setCreated(JwtUtils.getCurrentUserJwtPayload().getId());
         dto.setCreated(JwtUtils.getCurrentUserJwtPayload().getId());
-        return secondaryArchiveMapper.insertSelective(dto);
+        // 插入
+        Integer i = secondaryArchiveMapper.insertSelective(dto);
+        // 上传附件
+        if (dto.getFile() != null){
+            archiveFileService.upload(dto.getFile(),dto.getArchiveId(),0,dto.getArchiveId());
+        }
+        return i;
     }
     }
 
 
     @Override
     @Override

+ 2 - 2
src/main/java/com/gz/service/borrow/impl/ArchiveBorrowServiceImpl.java

@@ -46,8 +46,8 @@ public class ArchiveBorrowServiceImpl implements ArchiveBorrowService {
     public Integer borrow(ArchiveBorrowDTO dto) throws Exception {
     public Integer borrow(ArchiveBorrowDTO dto) throws Exception {
         ArchiveBorrowDTO selectBorrowParam = new ArchiveBorrowDTO();
         ArchiveBorrowDTO selectBorrowParam = new ArchiveBorrowDTO();
         selectBorrowParam.setArchiveId(dto.getArchiveId());
         selectBorrowParam.setArchiveId(dto.getArchiveId());
-        if (dto.getAdminId() != null){
-            // 用户选择了用户 借阅人就是选择的用户
+        if (dto.getAdminId() != null && !"".equals(dto.getAdminId())){
+            // 借阅登记
             dto.setAuditStatus(2);
             dto.setAuditStatus(2);
         }else {
         }else {
             // 未选择用户 默认当前登录用户
             // 未选择用户 默认当前登录用户

+ 4 - 3
src/main/java/com/gz/service/statistics/SelectStatisticsService.java

@@ -4,6 +4,7 @@ import cn.hutool.core.lang.tree.Tree;
 import com.gz.rvo.statistics.ArchiveStatisticsRVO;
 import com.gz.rvo.statistics.ArchiveStatisticsRVO;
 import com.gz.rvo.statistics.ArchiveYearStatisticsRVO;
 import com.gz.rvo.statistics.ArchiveYearStatisticsRVO;
 import com.gz.rvo.statistics.BorrowStatisticsRVO;
 import com.gz.rvo.statistics.BorrowStatisticsRVO;
+import com.gz.vo.statistics.StatisticsVO;
 
 
 import java.util.List;
 import java.util.List;
 
 
@@ -14,9 +15,9 @@ import java.util.List;
  */
  */
 public interface SelectStatisticsService {
 public interface SelectStatisticsService {
 
 
-    List<ArchiveStatisticsRVO> selectStatisticsByType();
+    List<ArchiveStatisticsRVO> selectStatisticsByType(StatisticsVO vo);
 
 
-    List<ArchiveYearStatisticsRVO> selectArchiveYearStatistics();
+    List<ArchiveYearStatisticsRVO> selectArchiveYearStatistics(StatisticsVO vo);
 
 
-    List<BorrowStatisticsRVO> selectBorrowStatistics();
+    List<BorrowStatisticsRVO> selectBorrowStatistics(StatisticsVO vo);
 }
 }

+ 64 - 7
src/main/java/com/gz/service/statistics/impl/SelectStatisticsServiceImpl.java

@@ -3,6 +3,8 @@ package com.gz.service.statistics.impl;
 import cn.hutool.core.lang.tree.Tree;
 import cn.hutool.core.lang.tree.Tree;
 import cn.hutool.core.lang.tree.TreeNodeConfig;
 import cn.hutool.core.lang.tree.TreeNodeConfig;
 import cn.hutool.core.lang.tree.TreeUtil;
 import cn.hutool.core.lang.tree.TreeUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.gz.common.DataGlobalVariable;
 import com.gz.dto.system.ArchivesTreeDTO;
 import com.gz.dto.system.ArchivesTreeDTO;
 import com.gz.mapper.statistics.SelectStatisticsMapper;
 import com.gz.mapper.statistics.SelectStatisticsMapper;
 import com.gz.mapper.system.ArchivesTreeMapper;
 import com.gz.mapper.system.ArchivesTreeMapper;
@@ -10,13 +12,23 @@ import com.gz.rvo.statistics.ArchiveStatisticsRVO;
 import com.gz.rvo.statistics.ArchiveYearStatisticsRVO;
 import com.gz.rvo.statistics.ArchiveYearStatisticsRVO;
 import com.gz.rvo.statistics.BorrowStatisticsRVO;
 import com.gz.rvo.statistics.BorrowStatisticsRVO;
 import com.gz.service.statistics.SelectStatisticsService;
 import com.gz.service.statistics.SelectStatisticsService;
+import com.gz.service.system.ArchivesTreeService;
+import com.gz.vo.statistics.StatisticsVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
+import javax.persistence.Id;
 import java.util.List;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
 
 
 /**
 /**
  * 查询统计Service 实现
  * 查询统计Service 实现
+ *
  * @author LiuchangLan
  * @author LiuchangLan
  * @date 2021/3/8 14:59
  * @date 2021/3/8 14:59
  */
  */
@@ -26,12 +38,25 @@ public class SelectStatisticsServiceImpl implements SelectStatisticsService {
     @Resource
     @Resource
     private SelectStatisticsMapper selectStatisticsMapper;
     private SelectStatisticsMapper selectStatisticsMapper;
 
 
+    @Resource
+    private ArchivesTreeService archivesTreeService;
+
+    @Autowired
+    private StringRedisTemplate stringRedisTemplate;
+
     @Override
     @Override
-    public List<ArchiveStatisticsRVO> selectStatisticsByType() {
+    public List<ArchiveStatisticsRVO> selectStatisticsByType(StatisticsVO vo) {
+        if (vo.getMl() != null) {
+            vo.setMlCodes(getMl(vo.getMl()));
+        }
+        if (!StringUtils.isEmpty(vo.getTime())) {
+            vo.setStartTime(vo.getTime().split(" - ")[0]);
+            vo.setEndTime(vo.getTime().split(" - ")[1]);
+        }
         // 统计结果
         // 统计结果
-        List<ArchiveStatisticsRVO> tree = selectStatisticsMapper.selectArchiveStatistics();
+        List<ArchiveStatisticsRVO> tree = selectStatisticsMapper.selectArchiveStatistics(vo);
         tree.forEach(e -> {
         tree.forEach(e -> {
-            if (e.getParentId() == -1){
+            if (e.getParentId() == -1) {
                 for (ArchiveStatisticsRVO node : tree) {
                 for (ArchiveStatisticsRVO node : tree) {
                     Integer archiveCount = 0;
                     Integer archiveCount = 0;
                     Integer fileCount = 0;
                     Integer fileCount = 0;
@@ -48,12 +73,44 @@ public class SelectStatisticsServiceImpl implements SelectStatisticsService {
     }
     }
 
 
     @Override
     @Override
-    public List<ArchiveYearStatisticsRVO> selectArchiveYearStatistics() {
-        return selectStatisticsMapper.selectArchiveYearStatistics();
+    public List<ArchiveYearStatisticsRVO> selectArchiveYearStatistics(StatisticsVO vo) {
+        if (vo.getMl() != null) {
+            vo.setMlCodes(getMl(vo.getMl()));
+        }
+        if (!StringUtils.isEmpty(vo.getTime())) {
+            vo.setStartTime(vo.getTime().split(" - ")[0]);
+            vo.setEndTime(vo.getTime().split(" - ")[1]);
+        }
+        return selectStatisticsMapper.selectArchiveYearStatistics(vo);
     }
     }
 
 
     @Override
     @Override
-    public List<BorrowStatisticsRVO> selectBorrowStatistics() {
-        return selectStatisticsMapper.selectBorrowStatistics();
+    public List<BorrowStatisticsRVO> selectBorrowStatistics(StatisticsVO vo) {
+        if (vo.getMl() != null) {
+            vo.setMlCodes(getMl(vo.getMl()));
+        }
+        if (!StringUtils.isEmpty(vo.getTime())) {
+            vo.setStartTime(vo.getTime().split(" - ")[0]);
+            vo.setEndTime(vo.getTime().split(" - ")[1]);
+        }
+        return selectStatisticsMapper.selectBorrowStatistics(vo);
+    }
+
+    private List<String> getMl(Integer id) {
+        String key = String.format(DataGlobalVariable.STATISTICS_ML_CODE_KEY_FOMAT, id);
+        String listString = stringRedisTemplate.opsForValue().get(key);
+        if (StringUtils.isEmpty(listString)) {
+            ArchivesTreeDTO dto = archivesTreeService.selectByPrimaryKey(id);
+            List<String> collect = archivesTreeService.selectChildById(id).stream().map(ArchivesTreeDTO::getCode).collect(Collectors.toList());
+            if (dto.getParentId() == -1) {
+                collect.add(archivesTreeService.selectByPrimaryKey(id).getCode());
+            } else {
+                collect.add(archivesTreeService.selectParentByCode(dto.getCode()).getCode());
+            }
+            stringRedisTemplate.opsForValue().set(key, JSONObject.toJSONString(collect), 1L, TimeUnit.DAYS);
+            return collect;
+        } else {
+            return JSONObject.parseObject(listString, List.class);
+        }
     }
     }
 }
 }

+ 3 - 3
src/main/java/com/gz/service/system/AdminService.java

@@ -41,21 +41,21 @@ public interface AdminService {
      * @author LiuChangLan
      * @author LiuChangLan
      * @since 2020/9/4 15:05
      * @since 2020/9/4 15:05
      */
      */
-    AdminDTO selectByPrimaryKey(Integer id);
+    AdminDTO selectByPrimaryKey(String id);
 
 
     /**
     /**
      * @description 修改状态
      * @description 修改状态
      * @author LiuChangLan
      * @author LiuChangLan
      * @since 2020/9/22 11:38
      * @since 2020/9/22 11:38
      */
      */
-    Integer updateStatus(Integer id);
+    Integer updateStatus(String id);
 
 
     /**
     /**
      * @description 重置密码
      * @description 重置密码
      * @author LiuChangLan
      * @author LiuChangLan
      * @since 2021/2/19 17:13
      * @since 2021/2/19 17:13
      */
      */
-    Integer resetPassword(Integer id);
+    Integer resetPassword(String id);
 
 
     /**
     /**
      * @description 查询所有用户
      * @description 查询所有用户

+ 11 - 2
src/main/java/com/gz/service/system/DeptService.java

@@ -1,7 +1,9 @@
 package com.gz.service.system;
 package com.gz.service.system;
 
 
 import cn.hutool.core.lang.tree.Tree;
 import cn.hutool.core.lang.tree.Tree;
+import com.github.pagehelper.PageInfo;
 import com.gz.dto.system.DeptDTO;
 import com.gz.dto.system.DeptDTO;
+import com.gz.vo.PageVO;
 
 
 import java.util.List;
 import java.util.List;
 
 
@@ -24,7 +26,7 @@ public interface DeptService {
      * @author LiuChangLan
      * @author LiuChangLan
      * @since 2020/9/4 14:46
      * @since 2020/9/4 14:46
      */
      */
-    Integer delete(Integer id);
+    Integer delete(String id);
 
 
     /**
     /**
      * @description 改
      * @description 改
@@ -45,7 +47,7 @@ public interface DeptService {
      * @author LiuChangLan
      * @author LiuChangLan
      * @since 2020/9/4 16:36
      * @since 2020/9/4 16:36
      */
      */
-    DeptDTO selectByPrimaryKey(Integer id);
+    DeptDTO selectByPrimaryKey(String id);
 
 
     /**
     /**
      * @description 查询列表(根据排序)
      * @description 查询列表(根据排序)
@@ -60,4 +62,11 @@ public interface DeptService {
      * @since 2021/2/23 16:34
      * @since 2021/2/23 16:34
      */
      */
     List<Tree<String>> selectTree();
     List<Tree<String>> selectTree();
+
+    /**
+     * @description 查询分页
+     * @author LiuChangLan
+     * @since 2021/3/9 17:20
+     */
+    PageInfo<DeptDTO> selectByPage(PageVO vo);
  }
  }

+ 3 - 3
src/main/java/com/gz/service/system/impl/AdminServiceImpl.java

@@ -68,14 +68,14 @@ public class AdminServiceImpl implements AdminService {
     }
     }
 
 
     @Override
     @Override
-    public AdminDTO selectByPrimaryKey(Integer id) {
+    public AdminDTO selectByPrimaryKey(String id) {
         AdminDTO adminDTO = new AdminDTO();
         AdminDTO adminDTO = new AdminDTO();
         adminDTO.setId(id);
         adminDTO.setId(id);
         return adminMapper.selectOne(adminDTO);
         return adminMapper.selectOne(adminDTO);
     }
     }
 
 
     @Override
     @Override
-    public Integer updateStatus(Integer id) {
+    public Integer updateStatus(String id) {
         AdminDTO adminDTOd = new AdminDTO();
         AdminDTO adminDTOd = new AdminDTO();
         adminDTOd.setId(id);
         adminDTOd.setId(id);
         AdminDTO adminDTO = adminMapper.selectOne(adminDTOd);
         AdminDTO adminDTO = adminMapper.selectOne(adminDTOd);
@@ -88,7 +88,7 @@ public class AdminServiceImpl implements AdminService {
     }
     }
 
 
     @Override
     @Override
-    public Integer resetPassword(Integer id) {
+    public Integer resetPassword(String id) {
         AdminDTO adminDTO = selectByPrimaryKey(id);
         AdminDTO adminDTO = selectByPrimaryKey(id);
         // 盐
         // 盐
         adminDTO.setSalt(IdUtil.simpleUUID());
         adminDTO.setSalt(IdUtil.simpleUUID());

+ 30 - 23
src/main/java/com/gz/service/system/impl/AuthServiceImpl.java

@@ -13,11 +13,13 @@ import com.gz.common.DataGlobalVariable;
 import com.gz.core.exception.BusinessException;
 import com.gz.core.exception.BusinessException;
 import com.gz.core.exception.CustomExceptionEnum;
 import com.gz.core.exception.CustomExceptionEnum;
 import com.gz.dto.system.AdminDTO;
 import com.gz.dto.system.AdminDTO;
+import com.gz.dto.system.DeptDTO;
 import com.gz.dto.system.LogDTO;
 import com.gz.dto.system.LogDTO;
 import com.gz.dto.system.MenuDTO;
 import com.gz.dto.system.MenuDTO;
 import com.gz.jwt.JwtConfig;
 import com.gz.jwt.JwtConfig;
 import com.gz.jwt.JwtPayload;
 import com.gz.jwt.JwtPayload;
 import com.gz.mapper.system.AdminMapper;
 import com.gz.mapper.system.AdminMapper;
+import com.gz.mapper.system.DeptMapper;
 import com.gz.mapper.system.LogMapper;
 import com.gz.mapper.system.LogMapper;
 import com.gz.mapper.system.MenuMapper;
 import com.gz.mapper.system.MenuMapper;
 import com.gz.rvo.system.InitialHomeRVO;
 import com.gz.rvo.system.InitialHomeRVO;
@@ -43,6 +45,7 @@ import java.util.concurrent.TimeUnit;
 
 
 /**
 /**
  * 身份验证Service
  * 身份验证Service
+ *
  * @author LiuchangLan
  * @author LiuchangLan
  * @date 2021/1/28 12:55
  * @date 2021/1/28 12:55
  */
  */
@@ -65,6 +68,9 @@ public class AuthServiceImpl implements AuthService {
     @Resource
     @Resource
     private LogMapper logMapper;
     private LogMapper logMapper;
 
 
+    @Resource
+    private DeptMapper deptMapper;
+
     @Override
     @Override
     public LoginRVO login(LoginVO vo) {
     public LoginRVO login(LoginVO vo) {
         // 后台存储的验证码
         // 后台存储的验证码
@@ -78,7 +84,7 @@ public class AuthServiceImpl implements AuthService {
         param.setAccount(vo.getAccount());
         param.setAccount(vo.getAccount());
         AdminDTO loginDTO = adminMapper.selectOne(param);
         AdminDTO loginDTO = adminMapper.selectOne(param);
         // 用户名没查到
         // 用户名没查到
-        if (loginDTO == null){
+        if (loginDTO == null) {
             throw new BusinessException(CustomExceptionEnum.ACCOUNT_OR_PASSWORD_INCORRECT);
             throw new BusinessException(CustomExceptionEnum.ACCOUNT_OR_PASSWORD_INCORRECT);
         }
         }
 
 
@@ -88,11 +94,12 @@ public class AuthServiceImpl implements AuthService {
             throw new BusinessException(CustomExceptionEnum.ACCOUNT_DISABLE);
             throw new BusinessException(CustomExceptionEnum.ACCOUNT_DISABLE);
         }
         }
         // 密码不正确
         // 密码不正确
-        if (!PasswordUtils.verification(vo.getPassword(), loginDTO.getSalt(), loginDTO.getPassword())){
+        if (!PasswordUtils.verification(vo.getPassword(), loginDTO.getSalt(), loginDTO.getPassword())) {
             throw new BusinessException(CustomExceptionEnum.ACCOUNT_OR_PASSWORD_INCORRECT);
             throw new BusinessException(CustomExceptionEnum.ACCOUNT_OR_PASSWORD_INCORRECT);
         }
         }
+        DeptDTO deptDTO = deptMapper.selectByPrimaryKey(loginDTO.getDeptId());
         // 生成jwt载体
         // 生成jwt载体
-        JwtPayload jwtPayload = new JwtPayload(loginDTO.getId(), loginDTO.getAccount(), loginDTO.getAdminName(),loginDTO.getRoleId());
+        JwtPayload jwtPayload = new JwtPayload(loginDTO.getId(), loginDTO.getAccount(), loginDTO.getAdminName(), loginDTO.getRoleId(), loginDTO.getDeptId(), deptDTO.getDeptName());
         // token
         // token
         String token = JwtUtils.createToken(jwtPayload, JwtConfig.ACCESS_TOKEN_EFFECTIVE);
         String token = JwtUtils.createToken(jwtPayload, JwtConfig.ACCESS_TOKEN_EFFECTIVE);
         // refreshToken
         // refreshToken
@@ -106,15 +113,15 @@ public class AuthServiceImpl implements AuthService {
         // refresh token 设置过期时间
         // refresh token 设置过期时间
         stringRedisTemplate.expire(refreshTokenKey, JwtConfig.REFRESH_TOKEN_EXPIRE_TIME, TimeUnit.SECONDS);
         stringRedisTemplate.expire(refreshTokenKey, JwtConfig.REFRESH_TOKEN_EXPIRE_TIME, TimeUnit.SECONDS);
         // 记录登录日志
         // 记录登录日志
-        logMapper.insertSelective(new LogDTO(DataGlobalVariable.LOGIN_LOG_CODE,"系统管理","登录","com.gz.controller.system.login",null,null, RequestUtils.getIpAddress(request),null,null));
-        log.info("账号:{}  密码:{} 登录成功",vo.getAccount(),vo.getPassword());
+        logMapper.insertSelective(new LogDTO(DataGlobalVariable.LOGIN_LOG_CODE, "系统管理", "登录", "com.gz.controller.system.login", null, null, RequestUtils.getIpAddress(request), null, null));
+        log.info("账号:{}  密码:{} 登录成功", vo.getAccount(), vo.getPassword());
         return new LoginRVO(token, refreshToken, System.currentTimeMillis());
         return new LoginRVO(token, refreshToken, System.currentTimeMillis());
     }
     }
 
 
     @Override
     @Override
     public LoginRVO refreshToken(String refreshToken) {
     public LoginRVO refreshToken(String refreshToken) {
         String refreshTokenKey = String.format(JwtConfig.REFRESH_TOKEN_KEY_FORMAT, refreshToken);
         String refreshTokenKey = String.format(JwtConfig.REFRESH_TOKEN_KEY_FORMAT, refreshToken);
-        String payload = (String)stringRedisTemplate.opsForHash().get(refreshTokenKey, JwtConfig.REDIS_JWT_PAYLOAD_KEY);
+        String payload = (String) stringRedisTemplate.opsForHash().get(refreshTokenKey, JwtConfig.REDIS_JWT_PAYLOAD_KEY);
 
 
         if (StringUtils.isEmpty(payload)) { // refreshtoken 已经过期
         if (StringUtils.isEmpty(payload)) { // refreshtoken 已经过期
             throw new BusinessException(CustomExceptionEnum.LOGIN_TIMEOUT);
             throw new BusinessException(CustomExceptionEnum.LOGIN_TIMEOUT);
@@ -123,7 +130,7 @@ public class AuthServiceImpl implements AuthService {
         JwtPayload JwtPayload = JSONObject.parseObject(payload, JwtPayload.class);
         JwtPayload JwtPayload = JSONObject.parseObject(payload, JwtPayload.class);
         String newAccessToken = JwtUtils.createToken(JwtPayload, JwtConfig.ACCESS_TOKEN_EFFECTIVE);
         String newAccessToken = JwtUtils.createToken(JwtPayload, JwtConfig.ACCESS_TOKEN_EFFECTIVE);
 
 
-        String oldAccessToken = (String)stringRedisTemplate.opsForHash().get(refreshTokenKey, JwtConfig.REDIS_JWT_TOKEN_KEY);
+        String oldAccessToken = (String) stringRedisTemplate.opsForHash().get(refreshTokenKey, JwtConfig.REDIS_JWT_TOKEN_KEY);
         stringRedisTemplate.opsForHash().put(refreshTokenKey, JwtConfig.REDIS_JWT_TOKEN_KEY, newAccessToken);
         stringRedisTemplate.opsForHash().put(refreshTokenKey, JwtConfig.REDIS_JWT_TOKEN_KEY, newAccessToken);
 
 
         // 旧 token 放入黑名单,防止超过 10s 后被再次使用
         // 旧 token 放入黑名单,防止超过 10s 后被再次使用
@@ -131,7 +138,7 @@ public class AuthServiceImpl implements AuthService {
         stringRedisTemplate.opsForValue()
         stringRedisTemplate.opsForValue()
                 .set(blacklistKey, oldAccessToken, JwtConfig.ACCESS_TOKEN_EFFECTIVE, TimeUnit.SECONDS);
                 .set(blacklistKey, oldAccessToken, JwtConfig.ACCESS_TOKEN_EFFECTIVE, TimeUnit.SECONDS);
 
 
-        return new LoginRVO(newAccessToken,refreshToken,System.currentTimeMillis());
+        return new LoginRVO(newAccessToken, refreshToken, System.currentTimeMillis());
     }
     }
 
 
 
 
@@ -146,7 +153,7 @@ public class AuthServiceImpl implements AuthService {
     @Override
     @Override
     public void logout(String refreshToken) {
     public void logout(String refreshToken) {
         String refreshTokenKey = String.format(JwtConfig.REFRESH_TOKEN_KEY_FORMAT, refreshToken);
         String refreshTokenKey = String.format(JwtConfig.REFRESH_TOKEN_KEY_FORMAT, refreshToken);
-        String oldAccessToken = (String)stringRedisTemplate.opsForHash().get(refreshTokenKey, JwtConfig.REDIS_JWT_TOKEN_KEY);
+        String oldAccessToken = (String) stringRedisTemplate.opsForHash().get(refreshTokenKey, JwtConfig.REDIS_JWT_TOKEN_KEY);
         if (!StringUtils.isEmpty(oldAccessToken)) {
         if (!StringUtils.isEmpty(oldAccessToken)) {
             // 旧 token 放入黑名单,防止再次被调用
             // 旧 token 放入黑名单,防止再次被调用
             String blacklistKey = String.format(JwtConfig.BLACKLIST_KEY_FORMAT, oldAccessToken); // 被黑名单的 key
             String blacklistKey = String.format(JwtConfig.BLACKLIST_KEY_FORMAT, oldAccessToken); // 被黑名单的 key
@@ -161,12 +168,12 @@ public class AuthServiceImpl implements AuthService {
     public InitialHomeRVO getLoginMenus() {
     public InitialHomeRVO getLoginMenus() {
         InitialHomeRVO initialHomeRVO = new InitialHomeRVO();
         InitialHomeRVO initialHomeRVO = new InitialHomeRVO();
         // 设置首页信息
         // 设置首页信息
-        initialHomeRVO.getHomeInfo().put("title","首页");
-        initialHomeRVO.getHomeInfo().put("href","page/home/welcome.html?t=1");
+        initialHomeRVO.getHomeInfo().put("title", "首页");
+        initialHomeRVO.getHomeInfo().put("href", "page/home/welcome.html?t=1");
         // logo信息
         // logo信息
-        initialHomeRVO.getLogoInfo().put("title","档案管理");
-        initialHomeRVO.getLogoInfo().put("image","images/logo.png");
-        initialHomeRVO.getLogoInfo().put("href","");
+        initialHomeRVO.getLogoInfo().put("title", "南京市规划和自然资源局-综合档案数字化信息系统");
+        initialHomeRVO.getLogoInfo().put("image", "images/logo.png");
+        initialHomeRVO.getLogoInfo().put("href", "");
 
 
         // 获取所有菜单
         // 获取所有菜单
         List<MenuDTO> menusOrder = menuMapper.getRoleMenu(JwtUtils.getCurrentUserJwtPayload().getRoleId());
         List<MenuDTO> menusOrder = menuMapper.getRoleMenu(JwtUtils.getCurrentUserJwtPayload().getRoleId());
@@ -185,8 +192,8 @@ public class AuthServiceImpl implements AuthService {
                     tree.setId(treeNode.getId().toString());
                     tree.setId(treeNode.getId().toString());
                     tree.setParentId(treeNode.getParentId().toString());
                     tree.setParentId(treeNode.getParentId().toString());
                     tree.setName(treeNode.getTitle());
                     tree.setName(treeNode.getTitle());
-                    tree.putExtra("href",treeNode.getHref());
-                    tree.putExtra("icon",treeNode.getIcon());
+                    tree.putExtra("href", treeNode.getHref());
+                    tree.putExtra("icon", treeNode.getIcon());
                 });
                 });
         initialHomeRVO.setMenuInfo(treeNodes);
         initialHomeRVO.setMenuInfo(treeNodes);
 
 
@@ -196,13 +203,13 @@ public class AuthServiceImpl implements AuthService {
 
 
     @Override
     @Override
     public Integer updatePassword(UpdatePasswordVO vo) throws BusinessException {
     public Integer updatePassword(UpdatePasswordVO vo) throws BusinessException {
-        Integer id = JwtUtils.getCurrentUserJwtPayload().getId();
+        String id = JwtUtils.getCurrentUserJwtPayload().getId();
         AdminDTO adminDTO = adminMapper.selectByPrimaryKey(id);
         AdminDTO adminDTO = adminMapper.selectByPrimaryKey(id);
         String salt = adminDTO.getSalt();
         String salt = adminDTO.getSalt();
         String password = adminDTO.getPassword();
         String password = adminDTO.getPassword();
 
 
         // 密码不正确
         // 密码不正确
-        if (!PasswordUtils.verification(vo.getOldPassword(),salt,password)) {
+        if (!PasswordUtils.verification(vo.getOldPassword(), salt, password)) {
             throw new BusinessException(CustomExceptionEnum.PASSWORD_NO_INCORRECT);
             throw new BusinessException(CustomExceptionEnum.PASSWORD_NO_INCORRECT);
         }
         }
 
 
@@ -217,7 +224,7 @@ public class AuthServiceImpl implements AuthService {
 
 
     @Override
     @Override
     public List<MenuDTO> getLoginButtons(Integer menuId) {
     public List<MenuDTO> getLoginButtons(Integer menuId) {
-        return menuMapper.getRoleButtle(JwtUtils.getCurrentUserJwtPayload().getRoleId(),menuId);
+        return menuMapper.getRoleButtle(JwtUtils.getCurrentUserJwtPayload().getRoleId(), menuId);
     }
     }
 
 
     @Override
     @Override
@@ -228,17 +235,17 @@ public class AuthServiceImpl implements AuthService {
             HttpSession session = request.getSession();
             HttpSession session = request.getSession();
 //            lineCaptcha = CaptchaUtil.createLineCaptcha(200, 100);
 //            lineCaptcha = CaptchaUtil.createLineCaptcha(200, 100);
             circleCaptcha = CaptchaUtil.createCircleCaptcha(200, 100, 4, 20);
             circleCaptcha = CaptchaUtil.createCircleCaptcha(200, 100, 4, 20);
-            session.setAttribute("captcha",circleCaptcha.getCode());
-            log.info("生成验证码:{}",circleCaptcha.getCode());
+            session.setAttribute("captcha", circleCaptcha.getCode());
+            log.info("生成验证码:{}", circleCaptcha.getCode());
         } catch (Exception e) {
         } catch (Exception e) {
-            throw new BusinessException(500,"生成验证码失败");
+            throw new BusinessException(500, "生成验证码失败");
         }
         }
         return "data:image/jpg;base64," + circleCaptcha.getImageBase64();
         return "data:image/jpg;base64," + circleCaptcha.getImageBase64();
     }
     }
 
 
     @Override
     @Override
     public AdminDTO currLoginAdmin() {
     public AdminDTO currLoginAdmin() {
-        Integer id = JwtUtils.getCurrentUserJwtPayload().getId();
+        String id = JwtUtils.getCurrentUserJwtPayload().getId();
         return adminMapper.selectByPrimaryKey(id);
         return adminMapper.selectByPrimaryKey(id);
     }
     }
 }
 }

+ 43 - 4
src/main/java/com/gz/service/system/impl/DeptServiceImpl.java

@@ -1,10 +1,17 @@
 package com.gz.service.system.impl;
 package com.gz.service.system.impl;
 
 
 import cn.hutool.core.lang.tree.Tree;
 import cn.hutool.core.lang.tree.Tree;
+import cn.hutool.core.lang.tree.TreeNodeConfig;
+import cn.hutool.core.lang.tree.TreeUtil;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
 import com.gz.dto.system.ArchivesTreeDTO;
 import com.gz.dto.system.ArchivesTreeDTO;
 import com.gz.dto.system.DeptDTO;
 import com.gz.dto.system.DeptDTO;
 import com.gz.mapper.system.DeptMapper;
 import com.gz.mapper.system.DeptMapper;
 import com.gz.service.system.DeptService;
 import com.gz.service.system.DeptService;
+import com.gz.utils.JwtUtils;
+import com.gz.vo.PageVO;
+import org.apache.catalina.webresources.JarWarResource;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
 import tk.mybatis.mapper.entity.Example;
 import tk.mybatis.mapper.entity.Example;
 
 
@@ -23,16 +30,18 @@ public class DeptServiceImpl implements DeptService {
 
 
     @Override
     @Override
     public Integer insert(DeptDTO dto) {
     public Integer insert(DeptDTO dto) {
+        dto.setCreated(JwtUtils.getCurrentUserJwtPayload().getId());
         return mapper.insertSelective(dto);
         return mapper.insertSelective(dto);
     }
     }
 
 
     @Override
     @Override
-    public Integer delete(Integer id) {
+    public Integer delete(String id) {
         return mapper.deleteByPrimaryKey(id);
         return mapper.deleteByPrimaryKey(id);
     }
     }
 
 
     @Override
     @Override
     public Integer update(DeptDTO dto) {
     public Integer update(DeptDTO dto) {
+        dto.setUpdated(JwtUtils.getCurrentUserJwtPayload().getId());
         return mapper.updateByPrimaryKeySelective(dto);
         return mapper.updateByPrimaryKeySelective(dto);
     }
     }
 
 
@@ -40,11 +49,18 @@ public class DeptServiceImpl implements DeptService {
     public List<DeptDTO> selectAll() {
     public List<DeptDTO> selectAll() {
         Example example = new Example(DeptDTO.class);
         Example example = new Example(DeptDTO.class);
         example.setOrderByClause("dept_order ASC");
         example.setOrderByClause("dept_order ASC");
-        return mapper.selectByExample(example);
+        List<DeptDTO> deptDTOS = mapper.selectByExample(example);
+
+        deptDTOS.forEach(e -> {
+            if (e.getParentId() == null) {
+                e.setParentId("null");
+            }
+        });
+        return deptDTOS;
     }
     }
 
 
     @Override
     @Override
-    public DeptDTO selectByPrimaryKey(Integer id) {
+    public DeptDTO selectByPrimaryKey(String id) {
         return mapper.selectByPrimaryKey(id);
         return mapper.selectByPrimaryKey(id);
     }
     }
 
 
@@ -57,6 +73,29 @@ public class DeptServiceImpl implements DeptService {
 
 
     @Override
     @Override
     public List<Tree<String>> selectTree() {
     public List<Tree<String>> selectTree() {
-        return null;
+        List<DeptDTO> deptDTOS = this.selectAll();
+        //配置
+        TreeNodeConfig treeNodeConfig = new TreeNodeConfig();
+        // 自定义属性名 都要默认值的
+        treeNodeConfig.setIdKey("id");
+        // 最大递归深度
+        treeNodeConfig.setDeep(3);
+
+        //转换器
+        List<Tree<String>> treeNodes = TreeUtil.build(deptDTOS, "null", treeNodeConfig,
+                (treeNode, tree) -> {
+                    tree.setId(treeNode.getId());
+                    tree.setParentId(treeNode.getParentId());
+                    tree.setName(treeNode.getDeptName());
+                    tree.putExtra("title", treeNode.getDeptName());
+                    tree.putExtra("spread", true);
+                });
+        return treeNodes;
+    }
+
+    @Override
+    public PageInfo<DeptDTO> selectByPage(PageVO vo) {
+        PageHelper.startPage(vo.getPageNum(), vo.getPageSize());
+        return new PageInfo<>(this.selectAll());
     }
     }
 }
 }

+ 1 - 1
src/main/java/com/gz/service/welcome/impl/StatisticsServiceImpl.java

@@ -149,7 +149,7 @@ public class StatisticsServiceImpl implements StatisticsService {
 
 
     @Override
     @Override
     public JSONObject selectMyCount() {
     public JSONObject selectMyCount() {
-        Integer userId = JwtUtils.getCurrentUserJwtPayload().getId();
+        String userId = JwtUtils.getCurrentUserJwtPayload().getId();
         JSONObject result = new JSONObject();
         JSONObject result = new JSONObject();
         // 到期未归还
         // 到期未归还
         result.put("waitReturnCount", statisticsMapper.selectMyWaitReturnRecord(userId).size());
         result.put("waitReturnCount", statisticsMapper.selectMyWaitReturnRecord(userId).size());

+ 19 - 0
src/main/java/com/gz/utils/ObjectUtils.java

@@ -0,0 +1,19 @@
+package com.gz.utils;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+
+import java.util.Map;
+
+/**
+ * @author LiuchangLan
+ * @date 2021/3/9 19:14
+ */
+public class ObjectUtils {
+
+    public static Map<String,Object> objToMap(Object obj){
+        String json = JSON.toJSONString(obj);
+        Map map = JSONObject.parseObject(json, Map.class);
+        return map;
+    }
+}

+ 2 - 2
src/main/java/com/gz/utils/PasswordUtils.java

@@ -23,7 +23,7 @@ public class PasswordUtils {
         String password = "123456";
         String password = "123456";
         String salt = IdUtil.simpleUUID();
         String salt = IdUtil.simpleUUID();
 
 
-        System.out.println(encryption(password,salt));
-        System.out.println(salt);
+        System.out.println("密码:" + encryption(password,salt));
+        System.out.println("盐" + salt);
     }
     }
 }
 }

+ 13 - 0
src/main/java/com/gz/vo/archive/AgainSearchVO.java

@@ -0,0 +1,13 @@
+package com.gz.vo.archive;
+
+import lombok.Data;
+
+/**
+ * @author LiuchangLan
+ * @date 2021/3/9 18:57
+ */
+@Data
+public class AgainSearchVO extends SearchArchiveVO{
+    // 之前搜索的sql
+    private String searchSql;
+}

+ 13 - 0
src/main/java/com/gz/vo/archive/SearchArchiveVO.java

@@ -38,4 +38,17 @@ public class SearchArchiveVO extends PageVO {
     private String sql;
     private String sql;
 
 
     private Integer roleId;
     private Integer roleId;
+
+    private String gdnd;
+
+    // 结果中检索
+    private boolean again;
+
+    public boolean getAgain(){
+        return this.again;
+    }
+
+    public boolean isAgain(){
+        return this.again;
+    }
 }
 }

+ 15 - 0
src/main/java/com/gz/vo/archive/SecondaryArchiveInsertVO.java

@@ -0,0 +1,15 @@
+package com.gz.vo.archive;
+
+import com.gz.dto.archive.SecondaryArchiveDTO;
+import lombok.Data;
+import org.springframework.web.multipart.MultipartFile;
+
+/**
+ * @author LiuchangLan
+ * @date 2021/3/10 14:33
+ */
+@Data
+public class SecondaryArchiveInsertVO extends SecondaryArchiveDTO {
+    // 附件
+    private MultipartFile file;
+}

+ 1 - 1
src/main/java/com/gz/vo/borrow/SearchBorrowVO.java

@@ -18,5 +18,5 @@ public class SearchBorrowVO extends PageVO {
     // 结束时间
     // 结束时间
     private String endTime;
     private String endTime;
     // 管理id
     // 管理id
-    private Integer adminId;
+    private String adminId;
 }
 }

+ 24 - 0
src/main/java/com/gz/vo/statistics/StatisticsVO.java

@@ -0,0 +1,24 @@
+package com.gz.vo.statistics;
+
+import lombok.Data;
+import lombok.Getter;
+
+import java.util.List;
+
+/**
+ * @author LiuchangLan
+ * @date 2021/3/11 10:03
+ */
+@Data
+public class StatisticsVO {
+    // 门类
+    private Integer ml;
+    // 时间
+    private String time;
+    // 开始时间
+    private String startTime;
+    // 结束时间
+    private String endTime;
+    // 门类code
+    private List<String> mlCodes;
+}

+ 6 - 0
src/main/java/com/gz/vo/system/AdminVO.java

@@ -9,4 +9,10 @@ import lombok.Data;
  */
  */
 @Data
 @Data
 public class AdminVO extends PageVO {
 public class AdminVO extends PageVO {
+
+    // 管理员姓名
+    private String adminName;
+
+    // 手机号
+    private String phone;
 }
 }

+ 3 - 2
src/main/resources/mapper/archiveBorrowMapper.xml

@@ -51,14 +51,15 @@
             ab.borrow_type,
             ab.borrow_type,
             ad.phone,
             ad.phone,
             f.original_file_name,
             f.original_file_name,
-            f.server_file_path
+            f.file_path,
+            f.file_name
         FROM
         FROM
             `tab_archive_borrow` ab
             `tab_archive_borrow` ab
                 LEFT JOIN tab_archives a
                 LEFT JOIN tab_archives a
                           ON ab.archive_id = a.id
                           ON ab.archive_id = a.id
                 LEFT JOIN tab_admin ad
                 LEFT JOIN tab_admin ad
                           ON ab.admin_id = ad.id
                           ON ab.admin_id = ad.id
-                LEFT JOIN tab_file f
+                LEFT JOIN tab_archive_file f
                           ON ab.relevant_certification = f.id
                           ON ab.relevant_certification = f.id
         WHERE a.deleted = 0
         WHERE a.deleted = 0
           AND ab.deleted = 0
           AND ab.deleted = 0

+ 15 - 0
src/main/resources/mapper/archiveFileMapper.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gz.mapper.archive.ArchiveFileMapper">
+
+    <select id="selectFileAndJnml" resultType="com.gz.rvo.archive.ArchiveFileRVO" parameterType="com.gz.vo.archive.SearchArchiveFileVO">
+        SELECT af.*,sa.tm jnml FROM `tab_archive_file` af left join tab_secondary_archive sa on af.secondary_archive_id = sa.id
+    <where>
+        <if test="archiveId != null and archiveId != ''">
+            AND af.archive_id = #{archiveId}
+        </if>
+        AND file_type = 0
+    </where>
+    </select>
+
+</mapper>

+ 75 - 40
src/main/resources/mapper/archiveMapper.xml

@@ -19,10 +19,11 @@
             tab_archives_tree atr
             tab_archives_tree atr
             LEFT JOIN tab_menu_role tmr ON atr.id = tmr.menu_id
             LEFT JOIN tab_menu_role tmr ON atr.id = tmr.menu_id
             WHERE
             WHERE
-            tmr.role_id =  ${roleId}
+            tmr.role_id = #{roleId}
             AND tmr.role_type = 1
             AND tmr.role_type = 1
             )
             )
-            and mj in (select d.dict_code from tab_dict d left join tab_menu_role mr on d.id = mr.menu_id where mr.role_id =  ${roleId} and mr.role_type = 2 )
+            and mj in (select d.dict_code from tab_dict d left join tab_menu_role mr on d.id = mr.menu_id where
+            mr.role_id = #{roleId} and mr.role_type = 2 )
             <if test="dh != null and dh != ''">
             <if test="dh != null and dh != ''">
                 AND a.dh = #{dh}
                 AND a.dh = #{dh}
             </if>
             </if>
@@ -38,18 +39,55 @@
             <if test="mj != null and mj != ''">
             <if test="mj != null and mj != ''">
                 AND a.mj = #{mj}
                 AND a.mj = #{mj}
             </if>
             </if>
+            <if test="gdnd != null and gdnd != ''">
+                AND a.gdnd = #{gdnd}
+            </if>
             <if test="ztc != null and ztc != ''">
             <if test="ztc != null and ztc != ''">
-                AND a.ztc = #{ztc}
+                AND (a.ztc like concat(concat('%',#{ztc}),'%') OR a.tm like concat(concat('%',#{ztc}),'%'))
             </if>
             </if>
             <if test="sql != null and sql != ''">
             <if test="sql != null and sql != ''">
                 ${sql}
                 ${sql}
             </if>
             </if>
         </where>
         </where>
         order by create_time desc
         order by create_time desc
+    </select>
 
 
 
 
+    <select id="againSearchList" resultType="com.gz.rvo.archive.ArchiveRVO"
+            parameterType="com.gz.vo.archive.SearchArchiveVO">
+        SELECT
+        a.*
+        FROM (${searchSql}) a
+        <where>
+            <if test="dh != null and dh != ''">
+                AND a.dh = #{dh}
+            </if>
+            <if test="mlh != null and mlh != ''">
+                AND a.mlh = #{mlh}
+            </if>
+            <if test="ml != null and ml != ''">
+                AND a.ml = #{ml}
+            </if>
+            <if test="bgqx != null and bgqx != ''">
+                AND a.bgqx = #{bgqx}
+            </if>
+            <if test="gdnd != null and gdnd != ''">
+                AND a.gdnd = #{gdnd}
+            </if>
+            <if test="mj != null and mj != ''">
+                AND a.mj = #{mj}
+            </if>
+            <if test="ztc != null and ztc != ''">
+                AND (a.ztc like concat(concat('%',#{ztc}),'%') OR a.tm like concat(concat('%',#{ztc}),'%'))
+            </if>
+            <if test="sql != null and sql != ''">
+                ${sql}
+            </if>
+        </where>
+        order by create_time desc
     </select>
     </select>
 
 
+
     <select id="selectBorrowList" resultType="com.gz.rvo.borrow.ArchiveBorrowListRVO" parameterType="int">
     <select id="selectBorrowList" resultType="com.gz.rvo.borrow.ArchiveBorrowListRVO" parameterType="int">
         <![CDATA[
         <![CDATA[
         SELECT IF
         SELECT IF
@@ -67,16 +105,17 @@
         FROM tab_archives a
         FROM tab_archives a
         WHERE a.deleted = 0
         WHERE a.deleted = 0
           and a.ml IN (
           and a.ml IN (
-            SELECT
-                `code`
-            FROM
-                tab_archives_tree atr
-                    LEFT JOIN tab_menu_role tmr ON atr.id = tmr.menu_id
-            WHERE
-                tmr.role_id =  ${roleId}
+            SELECT `code`
+            FROM tab_archives_tree atr
+                     LEFT JOIN tab_menu_role tmr ON atr.id = tmr.menu_id
+            WHERE tmr.role_id = #{roleId}
               AND tmr.role_type = 1
               AND tmr.role_type = 1
         )
         )
-          and a.mj in (select d.dict_code from tab_dict d left join tab_menu_role mr on d.id = mr.menu_id where mr.role_id =  ${roleId} and mr.role_type = 2 )
+          and a.mj in (select d.dict_code
+                       from tab_dict d
+                                left join tab_menu_role mr on d.id = mr.menu_id
+                       where mr.role_id = #{roleId}
+                         and mr.role_type = 2)
         ]]>
         ]]>
     </select>
     </select>
 
 
@@ -89,45 +128,41 @@
     </select>
     </select>
 
 
     <select id="selectRoleAll" resultType="com.gz.dto.archive.ArchiveDTO" parameterType="int">
     <select id="selectRoleAll" resultType="com.gz.dto.archive.ArchiveDTO" parameterType="int">
-        SELECT
-            *
-        FROM
-            tab_archives
-        WHERE
-            deleted = 0
+        SELECT *
+        FROM tab_archives
+        WHERE deleted = 0
           and ml IN (
           and ml IN (
-            SELECT
-                `code`
-            FROM
-                tab_archives_tree atr
-                    LEFT JOIN tab_menu_role tmr ON atr.id = tmr.menu_id
-            WHERE
-                tmr.role_id = ${roleId}
+            SELECT `code`
+            FROM tab_archives_tree atr
+                     LEFT JOIN tab_menu_role tmr ON atr.id = tmr.menu_id
+            WHERE tmr.role_id = #{roleId}
               AND tmr.role_type = 1
               AND tmr.role_type = 1
         )
         )
-          and mj in (select d.dict_code from tab_dict d left join tab_menu_role mr on d.id = mr.menu_id where mr.role_id = ${roleId} and mr.role_type = 2 )
+          and mj in (select d.dict_code
+                     from tab_dict d
+                              left join tab_menu_role mr on d.id = mr.menu_id
+                     where mr.role_id = #{roleId}
+                       and mr.role_type = 2)
         order by create_time desc
         order by create_time desc
     </select>
     </select>
 
 
     <select id="selectByRolePrimaryKey" resultType="com.gz.dto.archive.ArchiveDTO" parameterType="int">
     <select id="selectByRolePrimaryKey" resultType="com.gz.dto.archive.ArchiveDTO" parameterType="int">
-        SELECT
-            *
-        FROM
-            tab_archives
-        WHERE
-            deleted = 0
-            and id = #{id}
+        SELECT *
+        FROM tab_archives
+        WHERE deleted = 0
+          and id = #{id}
           and ml IN (
           and ml IN (
-            SELECT
-                `code`
-            FROM
-                tab_archives_tree atr
-                    LEFT JOIN tab_menu_role tmr ON atr.id = tmr.menu_id
-            WHERE
-                tmr.role_id = 8
+            SELECT `code`
+            FROM tab_archives_tree atr
+                     LEFT JOIN tab_menu_role tmr ON atr.id = tmr.menu_id
+            WHERE tmr.role_id = #{roleId}
               AND tmr.role_type = 1
               AND tmr.role_type = 1
         )
         )
-          and mj in (select d.dict_code from tab_dict d left join tab_menu_role mr on d.id = mr.menu_id where mr.role_id = 8 and mr.role_type = 2 )
+          and mj in (select d.dict_code
+                     from tab_dict d
+                              left join tab_menu_role mr on d.id = mr.menu_id
+                     where mr.role_id = #{roleId}
+                       and mr.role_type = 2)
         order by create_time desc
         order by create_time desc
     </select>
     </select>
 </mapper>
 </mapper>

+ 101 - 0
src/main/resources/mapper/selectStatisticsMapper.xml

@@ -0,0 +1,101 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
+<mapper namespace="com.gz.mapper.statistics.SelectStatisticsMapper">
+
+
+    <select id="selectArchiveStatistics" resultType="com.gz.rvo.statistics.ArchiveStatisticsRVO">
+        SELECT atr.title, atr.id, atr.`code`, atr.parent_id
+             , (
+            SELECT count(id)
+            FROM tab_archives a
+            WHERE atr.`code` = a.ml
+              AND a.deleted = 0
+            <if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
+                AND a.create_time BETWEEN #{startTime} AND #{endTime}
+            </if>
+        ) AS archive_count
+             , (
+            SELECT count(af.id)
+            FROM tab_archives a
+                     LEFT JOIN tab_archive_file af ON a.id = af.archive_id
+            WHERE atr.`code` = a.ml
+              AND a.deleted = 0
+              AND af.deleted = 0
+            <if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
+                AND af.create_time BETWEEN #{startTime} AND #{endTime}
+            </if>
+        ) AS file_count
+        FROM tab_archives_tree atr
+        WHERE atr.deleted = 0
+        <if test="mlCodes != null and mlCodes.size > 0">
+            AND atr.code in
+            <foreach collection="mlCodes" item="item" index="index" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
+    </select>
+
+    <select id="selectArchiveYearStatistics" resultType="com.gz.rvo.statistics.ArchiveYearStatisticsRVO">
+        SELECT a1.gdnd
+             , (
+            SELECT count(a.id)
+            FROM tab_archives a
+            WHERE a1.`gdnd` = a.gdnd
+              AND a.deleted = 0
+        ) AS archive_count
+             , (
+            SELECT count(af.id)
+            FROM tab_archives a
+                     LEFT JOIN tab_archive_file af ON a.id = af.archive_id
+            WHERE a1.`gdnd` = a.gdnd
+              AND a.deleted = 0
+              AND af.deleted = 0
+        ) AS file_count
+        FROM tab_archives a1
+        <where>
+            <if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
+                AND a1.gdnd BETWEEN #{startTime} AND #{endTime}
+            </if>
+            <if test="mlCodes != null and mlCodes.size > 0">
+                AND a1.ml in
+                <foreach collection="mlCodes" item="item" index="index" open="(" close=")" separator=",">
+                    #{item}
+                </foreach>
+            </if>
+        </where>
+        GROUP BY a1.gdnd
+    </select>
+
+    <select id="selectBorrowStatistics" resultType="com.gz.rvo.statistics.BorrowStatisticsRVO">
+        SELECT (
+            SELECT max(ab1.create_time)
+            FROM tab_archive_borrow ab1
+            WHERE ab.archive_id = ab1.archive_id
+              AND ab1.deleted = 0
+        ) AS create_time, ab.return_time, ab.estimate_return_time, a.tm, a.dh
+             , IF(ata.parent_id = -1, ata.title, (
+            SELECT title
+            FROM tab_archives_tree ata1
+            WHERE ata1.id = ata.parent_id
+              AND ata1.deleted = 0
+        )) AS ml
+             , count(ab.id) AS borrow_count
+        FROM tab_archive_borrow ab
+                 LEFT JOIN tab_archives a ON ab.archive_id = a.id
+                 LEFT JOIN tab_archives_tree ata ON a.ml = ata.CODE
+        WHERE ab.deleted = 0
+          AND a.deleted = 0
+          AND ata.deleted = 0
+          <if test="startTime != null and startTime != '' and endTime != null and endTime != ''">
+              AND ab.create_time BETWEEN #{startTime} AND #{endTime}
+          </if>
+          <if test="mlCodes != null and mlCodes.size > 0">
+              AND a.ml in
+              <foreach collection="mlCodes" item="item" index="index" open="(" close=")" separator=",">
+                  #{item}
+              </foreach>
+          </if>
+        GROUP BY ab.archive_id
+    </select>
+
+</mapper>

+ 2 - 2
src/main/resources/mapper/statisticsMapper.xml

@@ -104,12 +104,12 @@
     </select>
     </select>
 
 
 
 
-    <select id="selectMyHistoryBorrowCount" resultType="java.lang.Integer">
+    <select id="selectMyHistoryBorrowCount" resultType="string">
         select count(id) from tab_archive_borrow where created = #{userId} and deleted = 0
         select count(id) from tab_archive_borrow where created = #{userId} and deleted = 0
     </select>
     </select>
 
 
 
 
-    <select id="selectRuditNotHandleCount" resultType="java.lang.Integer">
+    <select id="selectRuditNotHandleCount" resultType="string">
         select count(id) from tab_archive_borrow where created = #{userId} and deleted = 0 and audit_status = 0
         select count(id) from tab_archive_borrow where created = #{userId} and deleted = 0 and audit_status = 0
     </select>
     </select>
 
 

+ 1 - 1
src/main/resources/static/index.html

@@ -2,7 +2,7 @@
 <html>
 <html>
 <head>
 <head>
     <meta charset="utf-8">
     <meta charset="utf-8">
-    <title>南京市规划和自然资源局档案管理系统</title>
+    <title>南京市规划和自然资源局-综合档案数字化信息系统</title>
     <meta name="keywords" content="layuimini,layui,layui模板,layui后台,后台模板,admin,admin模板,layui mini">
     <meta name="keywords" content="layuimini,layui,layui模板,layui后台,后台模板,admin,admin模板,layui mini">
     <meta name="description" content="南京市规划和自然资源局档案管理系统">
     <meta name="description" content="南京市规划和自然资源局档案管理系统">
     <meta name="renderer" content="webkit">
     <meta name="renderer" content="webkit">

+ 2 - 2
src/main/resources/static/js/lay-module/request/http.js

@@ -8,7 +8,7 @@ layui.define(['jquery', 'layer'], function (exports) {
         requestUrl = 'http://' + host + '/';
         requestUrl = 'http://' + host + '/';
 
 
     let ajax = function (method, type, data, async, callback) {
     let ajax = function (method, type, data, async, callback) {
-        // var loading = layer.load(0, {shade: [0.3, '#000']});
+        var loading = layer.load(0, {shade: [0.3, '#000']});
         let headers = {
         let headers = {
             accessToken: (layui.data('auth').data ? layui.data('auth').data.accessToken : '') || ''
             accessToken: (layui.data('auth').data ? layui.data('auth').data.accessToken : '') || ''
         }
         }
@@ -31,7 +31,7 @@ layui.define(['jquery', 'layer'], function (exports) {
             headers: headers,
             headers: headers,
             data: data,
             data: data,
             success: function (res) {
             success: function (res) {
-                // layer.close(loading);
+                layer.close(loading);
                 if (res.code === 200) {
                 if (res.code === 200) {
                     callback(res)
                     callback(res)
                 } else if (res.code == 303) {
                 } else if (res.code == 303) {

+ 5 - 1
src/main/resources/static/js/lay-module/treetable-lay/treetable.js

@@ -16,6 +16,11 @@ layui.define(['layer', 'table','http'], function (exports) {
                 treetable.init(param, param.data);
                 treetable.init(param, param.data);
             } else {
             } else {
                 http.get(param.url,param.where,true,function (res) {
                 http.get(param.url,param.where,true,function (res) {
+                    // res.data.forEach(e => {
+                    //     if (e.parentId == null){
+                    //         e.parentId = 'null'
+                    //     }
+                    // })
                     treetable.init(param, res.data);
                     treetable.init(param, res.data);
                 })
                 })
                 // $.getJSON(param.url, param.where, function (res) {
                 // $.getJSON(param.url, param.where, function (res) {
@@ -61,7 +66,6 @@ layui.define(['layer', 'table','http'], function (exports) {
                 }
                 }
             };
             };
             sort(param.treeSpid, tNodes);
             sort(param.treeSpid, tNodes);
-
             // 重写参数
             // 重写参数
             param.url = undefined;
             param.url = undefined;
             param.data = mData;
             param.data = mData;

+ 2 - 2
src/main/resources/static/login.html

@@ -127,7 +127,7 @@
                 <div class="layui-form-item">
                 <div class="layui-form-item">
                     <label class="layui-icon layui-icon-username"></label>
                     <label class="layui-icon layui-icon-username"></label>
                     <input type="text" name="account" lay-verify="required|account" placeholder="用户名或者邮箱"
                     <input type="text" name="account" lay-verify="required|account" placeholder="用户名或者邮箱"
-                           autocomplete="off" class="layui-input" value="admin">
+                           autocomplete="off" class="layui-input" value="liuchanglan">
                 </div>
                 </div>
                 <div class="layui-form-item">
                 <div class="layui-form-item">
                     <label class="layui-icon layui-icon-password"></label>
                     <label class="layui-icon layui-icon-password"></label>
@@ -137,7 +137,7 @@
                 <div class="layui-form-item">
                 <div class="layui-form-item">
                     <label class="layui-icon layui-icon-vercode"></label>
                     <label class="layui-icon layui-icon-vercode"></label>
                     <input type="text" name="captcha" lay-verify="required|captcha" placeholder="图形验证码"
                     <input type="text" name="captcha" lay-verify="required|captcha" placeholder="图形验证码"
-                           autocomplete="off" class="layui-input verification captcha" value="">
+                           autocomplete="off" class="layui-input verification captcha" value="a">
                     <div class="captcha-img" style="cursor:pointer">
                     <div class="captcha-img" style="cursor:pointer">
                         <img id="captchaPic">
                         <img id="captchaPic">
                     </div>
                     </div>

+ 72 - 25
src/main/resources/static/page/admin/edit.html

@@ -21,7 +21,8 @@
         <div class="layui-input-block">
         <div class="layui-input-block">
             <input type="hidden" name="id" id="id" value="" class="layui-input">
             <input type="hidden" name="id" id="id" value="" class="layui-input">
             <input type="hidden" name="password" id="password" value="123456" class="layui-input">
             <input type="hidden" name="password" id="password" value="123456" class="layui-input">
-            <input type="text" name="account" id="account" lay-verify="required|username" lay-reqtext="登录名不能为空" placeholder="请输入登录名"
+            <input type="text" name="account" id="account" lay-verify="required|username" lay-reqtext="登录名不能为空"
+                   placeholder="请输入登录名"
                    value="" class="layui-input">
                    value="" class="layui-input">
         </div>
         </div>
     </div>
     </div>
@@ -29,23 +30,33 @@
     <div class="layui-form-item">
     <div class="layui-form-item">
         <label class="layui-form-label required">用户名</label>
         <label class="layui-form-label required">用户名</label>
         <div class="layui-input-block">
         <div class="layui-input-block">
-        <input type="text" name="adminName" lay-verify="required" lay-reqtext="用户名不能为空" placeholder="请输入用户名"
-               value="" class="layui-input">
+            <input type="text" name="adminName" lay-verify="required" lay-reqtext="用户名不能为空" placeholder="请输入用户名"
+                   value="" class="layui-input">
         </div>
         </div>
     </div>
     </div>
 
 
+
+    <div class="layui-form-item">
+        <label class="layui-form-label required">部门</label>
+        <div class="layui-input-block">
+            <input type="text" id="deptId" name="deptId" lay-filter="deptId" class="layui-input">
+        </div>
+    </div>
+
+
     <div class="layui-form-item">
     <div class="layui-form-item">
         <label class="layui-form-label required">手机号</label>
         <label class="layui-form-label required">手机号</label>
         <div class="layui-input-block">
         <div class="layui-input-block">
-        <input type="text" name="phone" lay-verify="phone" lay-reqtext="手机号不能为空" placeholder="请输入手机号"
-               value="" class="layui-input">
+            <input type="text" name="phone" lay-verify="phone" lay-reqtext="手机号不能为空" placeholder="请输入手机号"
+                   value="" class="layui-input">
         </div>
         </div>
     </div>
     </div>
 
 
     <div class="layui-form-item">
     <div class="layui-form-item">
         <label class="layui-form-label required">身份证号</label>
         <label class="layui-form-label required">身份证号</label>
         <div class="layui-input-block">
         <div class="layui-input-block">
-            <input type="text" name="idCard" lay-verify="idCard" lay-verify="identity" lay-reqtext="身份证号不能为空" placeholder="请输入身份证号"
+            <input type="text" name="idCard" lay-verify="idCard" lay-verify="identity" lay-reqtext="身份证号不能为空"
+                   placeholder="请输入身份证号"
                    value="" class="layui-input">
                    value="" class="layui-input">
         </div>
         </div>
     </div>
     </div>
@@ -54,8 +65,8 @@
     <div class="layui-form-item">
     <div class="layui-form-item">
         <label class="layui-form-label required">邮箱</label>
         <label class="layui-form-label required">邮箱</label>
         <div class="layui-input-block">
         <div class="layui-input-block">
-        <input type="text" name="email" lay-verify="email" lay-reqtext="邮箱不能为空" placeholder="请输入邮箱"
-               value="" class="layui-input">
+            <input type="text" name="email" lay-verify="email" lay-reqtext="邮箱不能为空" placeholder="请输入邮箱"
+                   value="" class="layui-input">
         </div>
         </div>
     </div>
     </div>
 
 
@@ -73,7 +84,6 @@
     </div>
     </div>
 
 
 
 
-
     <div class="layui-form-item">
     <div class="layui-form-item">
         <div class="layui-input-block">
         <div class="layui-input-block">
             <button class="layui-btn layui-btn-normal" lay-submit lay-filter="saveBtn">确认保存</button>
             <button class="layui-btn layui-btn-normal" lay-submit lay-filter="saveBtn">确认保存</button>
@@ -84,37 +94,73 @@
 <script src="../../lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
 <script src="../../lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
 <script src="../../js/lay-config.js?v=1.0.4" charset="utf-8"></script>
 <script src="../../js/lay-config.js?v=1.0.4" charset="utf-8"></script>
 <script>
 <script>
-    layui.use(['form','http'], function () {
+    layui.use(['form', 'http', 'treeSelect'], function () {
         /**变-------------------------------量-------------------------------定-------------------------------义*/
         /**变-------------------------------量-------------------------------定-------------------------------义*/
         var form = layui.form,
         var form = layui.form,
             layer = layui.layer,
             layer = layui.layer,
             http = layui.http,
             http = layui.http,
+            treeSelect = layui.treeSelect,
             $ = layui.$;
             $ = layui.$;
         let id = $('#id').val()
         let id = $('#id').val()
+        let deptId = ''
 
 
         /**方-------------------------------法-------------------------------定-------------------------------义*/
         /**方-------------------------------法-------------------------------定-------------------------------义*/
 
 
-        //保存方法
+            //保存方法
         let save = function (data) {
         let save = function (data) {
-            http.post('borrow/archiveBorrow/',data,true,function (res) {
-                if (res.code == 200){
-                    let index = layer.alert('保存成功!', {
-                        title: id == '' ? '添加':'修改' + '信息'
-                    }, function () {
-                        // 关闭弹出层
-                        layer.close(index);
-                        let iframeIndex = parent.layer.getFrameIndex(window.name);
-                        parent.layer.close(iframeIndex);
-                    });
+                http.post('borrow/archiveBorrow/', data, true, function (res) {
+                    if (res.code == 200) {
+                        let index = layer.alert('保存成功!', {
+                            title: id == '' ? '添加' : '修改' + '信息'
+                        }, function () {
+                            // 关闭弹出层
+                            layer.close(index);
+                            let iframeIndex = parent.layer.getFrameIndex(window.name);
+                            parent.layer.close(iframeIndex);
+                        });
+                    }
+                })
+            }
+
+
+        let initDept = function () {
+            treeSelect.render({
+                // 选择器
+                elem: '#deptId',
+                // 数据
+                data: 'system/dept/selectTree',
+                // 异步加载方式:get/post,默认get
+                type: 'get',
+                // 占位符
+                placeholder: '请选择部门',
+                // 是否开启搜索功能:true/false,默认false
+                search: true,
+                // 一些可定制的样式
+                style: {
+                    folder: {
+                        enable: true
+                    },
+                    line: {
+                        enable: true
+                    }
+                },
+                success: function (res) {
+                    if (deptId != null) {
+                        if (id != '' && deptId != '') {
+                            treeSelect.checkNode('deptId', deptId);
+                        }
+                    }
                 }
                 }
-            })
+            });
         }
         }
 
 
+
         // 加载数据
         // 加载数据
         let initData = function () {
         let initData = function () {
-            if(id != ''){
-                $("#account").prop('readonly','readonly')
-                http.get('system/admin/selectByPrimaryKey',{id: id},true,function (res) {
+            if (id != '') {
+                $("#account").prop('readonly', 'readonly')
+                http.get('system/admin/selectByPrimaryKey', {id: id}, false, function (res) {
+                    deptId = res.data.deptId
                     form.val("addPaper", res.data);
                     form.val("addPaper", res.data);
                     form.render();
                     form.render();
                 })
                 })
@@ -134,6 +180,7 @@
 
 
         initSelect()
         initSelect()
         initData()
         initData()
+        initDept()
 
 
         //监听提交
         //监听提交
         form.on('submit(saveBtn)', function (data) {
         form.on('submit(saveBtn)', function (data) {

+ 8 - 2
src/main/resources/static/page/archive/editSecondary.html

@@ -74,12 +74,18 @@
         </div>
         </div>
     </div>
     </div>
 
 
+    <div class="layui-form-item">
+        <label class="layui-form-label">文件:</label>
+        <div class="layui-input-block" style="">
+            <button type="button" class="layui-btn layui-btn-normal" id="test8">选择文件</button>
+            <button class="layui-hide" id="uploadBtn"></button>
+        </div>
+    </div>
 
 
     <div class="layui-form-item">
     <div class="layui-form-item">
         <label class="layui-form-label">备注:</label>
         <label class="layui-form-label">备注:</label>
         <div class="layui-input-block" style="">
         <div class="layui-input-block" style="">
-            <textarea class="layui-textarea" name="bz" placeholder="请输入备注">
-            </textarea>
+            <textarea class="layui-textarea" name="bz" placeholder="请输入备注"></textarea>
         </div>
         </div>
     </div>
     </div>
 
 

+ 18 - 13
src/main/resources/static/page/archive/fileList.html

@@ -17,15 +17,15 @@
                         <input type="hidden" id="fileType" name="fileType" class="layui-input">
                         <input type="hidden" id="fileType" name="fileType" class="layui-input">
                     </div>
                     </div>
                     <div class="layui-inline">
                     <div class="layui-inline">
-<!--                        <button id="upload" class="layui-btn icon-btn"><i-->
-<!--                                class="layui-icon"></i>上传-->
-<!--                        </button>-->
+                        <!--                        <button id="upload" class="layui-btn icon-btn"><i-->
+                        <!--                                class="layui-icon"></i>上传-->
+                        <!--                        </button>-->
                     </div>
                     </div>
-<!--                    <div class="layui-inline">-->
-<!--                        <button id="btnSearch" lay-submit lay-filter="search" class="layui-btn icon-btn"><i-->
-<!--                                class="layui-icon"></i>搜索-->
-<!--                        </button>-->
-<!--                    </div>-->
+                    <!--                    <div class="layui-inline">-->
+                    <!--                        <button id="btnSearch" lay-submit lay-filter="search" class="layui-btn icon-btn"><i-->
+                    <!--                                class="layui-icon"></i>搜索-->
+                    <!--                        </button>-->
+                    <!--                    </div>-->
                 </div>
                 </div>
             </div>
             </div>
             <table class="layui-hide" id="user-table" lay-filter="table"></table>
             <table class="layui-hide" id="user-table" lay-filter="table"></table>
@@ -37,7 +37,7 @@
 <!--  头部工具栏  -->
 <!--  头部工具栏  -->
 <script type="text/html" id="toolbar">
 <script type="text/html" id="toolbar">
     <!--    <button class="layui-btn layui-btn-sm" lay-event="upload" id="upload">上传</button>-->
     <!--    <button class="layui-btn layui-btn-sm" lay-event="upload" id="upload">上传</button>-->
-<!--    <a class="layui-btn layui-btn-sm" lay-even="aaa" >上传</a>-->
+    <!--    <a class="layui-btn layui-btn-sm" lay-even="aaa" >上传</a>-->
     <a class="layui-btn layui-btn-sm" lay-event="upload">上传</a>
     <a class="layui-btn layui-btn-sm" lay-event="upload">上传</a>
 
 
 </script>
 </script>
@@ -102,6 +102,11 @@
                         // {field: 'originalFileName', title: '原文件名'},
                         // {field: 'originalFileName', title: '原文件名'},
                         {field: 'fileName', title: '文件名'},
                         {field: 'fileName', title: '文件名'},
                         {
                         {
+                            field: 'jnml', title: '卷内目录', templet: function (rv) {
+                                return rv.jnml ? rv.jnml : '无'
+                            }
+                        },
+                        {
                             field: 'fileSize', title: '文件大小',
                             field: 'fileSize', title: '文件大小',
                             templet: function (rv) {
                             templet: function (rv) {
                                 let size = rv.fileSize
                                 let size = rv.fileSize
@@ -168,7 +173,7 @@
 
 
 
 
         let openPDF = function (data) {
         let openPDF = function (data) {
-            if (data.fileName.substring(data.fileName.indexOf('.') + 1) == 'pdf'){
+            if (data.fileName.substring(data.fileName.indexOf('.') + 1) == 'pdf') {
                 layer.open({
                 layer.open({
                     type: 2,
                     type: 2,
                     area: ['100%', '100%'],
                     area: ['100%', '100%'],
@@ -176,8 +181,8 @@
                     maxmin: true,
                     maxmin: true,
                     content: data.filePath + '/' + data.fileName
                     content: data.filePath + '/' + data.fileName
                 });
                 });
-            }else {
-                layer.msg('只支持预览pdf格式文件',{
+            } else {
+                layer.msg('只支持预览pdf格式文件', {
                     icon: 2
                     icon: 2
                 })
                 })
             }
             }
@@ -202,7 +207,7 @@
 
 
         table.on('toolbar(table)', function (obj) {
         table.on('toolbar(table)', function (obj) {
             let data = obj.data;
             let data = obj.data;
-            switch (obj.event){
+            switch (obj.event) {
                 case 'upload':
                 case 'upload':
                     openUpload();
                     openUpload();
                     break;
                     break;

+ 25 - 19
src/main/resources/static/page/archive/list.html

@@ -172,16 +172,16 @@
         // 加载组织架构
         // 加载组织架构
         let loadTree = function () {
         let loadTree = function () {
             http.get('system/archivesTree/selectTree', {}, false, function (res) {
             http.get('system/archivesTree/selectTree', {}, false, function (res) {
-                // res.data.unshift({
-                //     id: '',
-                //     parentId: "-1",
-                //     title: "全部",
-                //     spread: true
-                // })
-                // parentId = res.data[0].parentId
-                // deptId = res.data[0].id
-                searchParam.ml = res.data[0].code
-                searchParam.mlId = res.data[0].id
+                res.data.unshift({
+                    id: '',
+                    parentId: "-1",
+                    title: "全部",
+                    spread: true
+                })
+                searchParam.ml = ''
+                searchParam.mlId = ''
+                // searchParam.ml = res.data[0].code
+                // searchParam.mlId = res.data[0].id
                 //基本演示
                 //基本演示
                 tree.render({
                 tree.render({
                     elem: '#tree'
                     elem: '#tree'
@@ -464,11 +464,10 @@
                 maxmin: true,
                 maxmin: true,
                 shadeClose: true,
                 shadeClose: true,
                 area: ['100%', '100%'],
                 area: ['100%', '100%'],
-                content: './editPage.html',
+                content: './show.html',
                 success: function (layero, index) {
                 success: function (layero, index) {
                     var body = layer.getChildFrame('body', index);
                     var body = layer.getChildFrame('body', index);
-                    body.find("#id").val(id);
-                    body.find("#showAll").val('true');
+                    body.find("#archive_id").val(id);
                 },
                 },
                 end: function () {
                 end: function () {
                     renderTable()
                     renderTable()
@@ -570,18 +569,25 @@
             }
             }
         })
         })
 
 
-        form.on('submit(search)', function (data) {
+        form.on('submit(resultSearch)', function (data) {
+            searchParam.dh = data.field.dh
+            searchParam.mlh = data.field.mlh
+            searchParam.bgqx = data.field.bgqx
+            searchParam.gdnd = data.field.gdnd
+            searchParam.mj = data.field.mj
+            searchParam.ztc = data.field.ztc
+            searchParam.again = true
+            renderTable()
+        })
 
 
-            // if (data.field.dh)
-            //     if (data.field.mlh)
-            //         if (data.field.bgqx)
-            //             if (data.field.mj)
-            //                 if (data.field.gjz)
+        form.on('submit(search)', function (data) {
             searchParam.dh = data.field.dh
             searchParam.dh = data.field.dh
             searchParam.mlh = data.field.mlh
             searchParam.mlh = data.field.mlh
             searchParam.bgqx = data.field.bgqx
             searchParam.bgqx = data.field.bgqx
+            searchParam.gdnd = data.field.gdnd
             searchParam.mj = data.field.mj
             searchParam.mj = data.field.mj
             searchParam.ztc = data.field.ztc
             searchParam.ztc = data.field.ztc
+            searchParam.again = false
             renderTable()
             renderTable()
         })
         })
     });
     });

+ 95 - 0
src/main/resources/static/page/archive/show.html

@@ -0,0 +1,95 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <title>layui</title>
+    <link rel="stylesheet" href="../../lib/layui-v2.5.5/css/layui.css" media="all">
+    <link rel="stylesheet" href="../../css/public.css" media="all">
+    <link rel="stylesheet" href="../../lib/font-awesome-4.7.0/css/font-awesome.min.css" media="all">
+    <style>
+        body {
+            background-color: #ffffff;
+        }
+
+        #file_list li {
+            line-height: 40px;
+            height: 40px;
+            /*border: 1px solid red;*/
+        }
+
+
+        #file_list li a {
+            display: inline-block;
+            width: 100%;
+            height: 100%;
+            box-sizing: border-box;
+            color: #fff;
+            cursor: pointer;
+            padding: 0 30px;
+        }
+    </style>
+</head>
+<body>
+<div class="layui-fluid" style="height: 100%">
+    <div class="layui-row">
+        <div class="layui-col-md2">
+            <ul id="file_list" class="layui-bg-black" style="height: calc(96vh);">
+                <input id="archive_id" name="archive_id" type="hidden">
+            </ul>
+        </div>
+        <div class="layui-col-md10">
+            <iframe src=""
+                    frameborder="0" id="pdf_show" style="width: 100%; height: calc(96vh);"></iframe>
+        </div>
+    </div>
+</div>
+<script src="../../lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
+<script src="../../js/lay-config.js?v=1.0.4" charset="utf-8"></script>
+<script>
+    layui.use(['http'], function () {
+        let http = layui.http,
+            $ = layui.$
+        ;
+        let archive_id = $("#archive_id").val()
+
+        $(document).on('click', 'li>a', function () {
+            $("#file_list").children("li").removeClass("layui-bg-green")
+            let li = $(this).parent("li")
+            li.addClass("layui-bg-green")
+            let pef_src = $(this).attr('pdf_src')
+            $("#pdf_show").prop('src', pef_src)
+        });
+
+        let initData = () => {
+            let html = ""
+            http.get('archive/archiveFile/selectByArchiveId', {
+                archiveId: archive_id,
+                fileType: 0
+            }, true, res => {
+                if (res.code == 200){
+                    if (res.data.length == 0){
+                        layui.layer.msg('无文件无法预览,即将自动关闭',{icon: 2},function (){
+                            // 关闭弹出层
+                            let iframeIndex = parent.layer.getFrameIndex(window.name);
+                            parent.layer.close(iframeIndex);
+                        })
+                        return
+                    }
+                    for (let i = 0; i < res.data.length; i++) {
+                        let item = res.data[i]
+                        if (i == 0){
+                            html += '<li class="layui-bg-green"><a pdf_src="' + item.filePath + '/' + item.fileName + '">' + (item.jnml?item.jnml:'档案文件') + '</a></li>'
+                            $("#pdf_show").prop('src', item.filePath + '/' + item.fileName)
+                        }else {
+                            html += '<li><a pdf_src="' + item.filePath + '/' + item.fileName + '">' + (item.jnml?item.jnml:'档案文件') + '</a></li>'
+                        }
+                    }
+                    $("#file_list").append(html)
+                }
+            })
+        }
+        initData()
+    })
+</script>
+</body>
+</html>

+ 1 - 1
src/main/resources/static/page/auditList/audit.html

@@ -185,7 +185,7 @@
                     $("#phone").text(res.data.phone == null ? '无' : res.data.phone)
                     $("#phone").text(res.data.phone == null ? '无' : res.data.phone)
                     let fjHtml = '无'
                     let fjHtml = '无'
                     if (res.data.originalFileName) {
                     if (res.data.originalFileName) {
-                        fjHtml = '<a style="color: #2D8CF0" target="_blank" href="' + res.data.serverFilePath + '">' + res.data.originalFileName + '</a>'
+                        fjHtml = '<a style="color: #2D8CF0" target="_blank" href="' + res.data.filePath +'/' +  res.data.fileName + '">' + res.data.originalFileName + '</a>'
                     }
                     }
                     $("#fj").html(fjHtml)
                     $("#fj").html(fjHtml)
                     // form.val("addDict", res.data);
                     // form.val("addDict", res.data);

+ 9 - 2
src/main/resources/static/page/borrow/reserve.html

@@ -137,7 +137,7 @@
             http.get('system/admin/selectAll', {}, false, function (res) {
             http.get('system/admin/selectAll', {}, false, function (res) {
                 let html = '';
                 let html = '';
                 for (let i in res.data) {
                 for (let i in res.data) {
-                    html += '<option value="' + res.data[i].id + '">' + res.data[i].adminName + "(" + res.data[i].idCard + ")" +'</option>'
+                    html += '<option value="' + res.data[i].id + '">' + res.data[i].adminName + "(" + res.data[i].idCard + ")" + '</option>'
                 }
                 }
                 $("#adminId").append(html)
                 $("#adminId").append(html)
                 form.render();//菜单渲染 把内容加载进去
                 form.render();//菜单渲染 把内容加载进去
@@ -180,9 +180,16 @@
             //指定允许上传的文件类型
             //指定允许上传的文件类型
             upload.render({
             upload.render({
                 elem: '#upload'
                 elem: '#upload'
-                , url: http.requestUrl + 'system/file/upload' //改成您自己的上传接口
+                , url: http.requestUrl + 'archive/archiveFile/upload' //改成您自己的上传接口
                 , headers: {
                 , headers: {
                     accessToken: (layui.data('auth').data ? layui.data('auth').data.accessToken : '') || ''
                     accessToken: (layui.data('auth').data ? layui.data('auth').data.accessToken : '') || ''
+                }, data: {
+                    archiveId: () => {
+                        return archiveId
+                    },
+                    fileType: () => {
+                        return 1
+                    }
                 }
                 }
                 , multiple: true
                 , multiple: true
                 , auto: true
                 , auto: true

+ 35 - 53
src/main/resources/static/page/dept/edit.html

@@ -15,29 +15,20 @@
 <body>
 <body>
 <div class="layui-form layuimini-form" lay-filter="addDict">
 <div class="layui-form layuimini-form" lay-filter="addDict">
     <div class="layui-form-item">
     <div class="layui-form-item">
-        <label class="layui-form-label required">门名称</label>
+        <label class="layui-form-label required">门名称</label>
         <div class="layui-input-block">
         <div class="layui-input-block">
             <input type="hidden" name="id" id="id" class="layui-input">
             <input type="hidden" name="id" id="id" class="layui-input">
-            <input type="text" name="title" lay-verify="required" lay-reqtext="门类名称不能为空" placeholder="请输入门类名称" value="" class="layui-input">
+            <input type="text" name="deptName" lay-verify="required" lay-reqtext="部门名称不能为空" placeholder="请输入部门名称"
+                   value="" class="layui-input">
         </div>
         </div>
     </div>
     </div>
 
 
-
     <div class="layui-form-item">
     <div class="layui-form-item">
-        <label class="layui-form-label required">门类代码</label>
+        <label class="layui-form-label required">上级部门</label>
         <div class="layui-input-block">
         <div class="layui-input-block">
-            <input type="text" name="code" placeholder="请输入门类代码" value="" lay-verify="" lay-reqtext="门类代码不能为空" class="layui-input">
-        </div>
-    </div>
-
-
-
-    <div class="layui-form-item">
-        <label class="layui-form-label">父级门类</label>
-        <div class="layui-input-block">
-<!--            <select name="parentId" id="parentId" lay-filter="parentId">-->
-<!--                <option value="-1">请选择父级菜单</option>-->
-<!--            </select>-->
+            <!--            <select name="parentId" id="parentId" lay-filter="parentId">-->
+            <!--                <option value="-1">请选择父级菜单</option>-->
+            <!--            </select>-->
             <input type="text" id="parentId" name="parentId" lay-filter="parentId" class="layui-input">
             <input type="text" id="parentId" name="parentId" lay-filter="parentId" class="layui-input">
         </div>
         </div>
     </div>
     </div>
@@ -45,7 +36,7 @@
     <div class="layui-form-item">
     <div class="layui-form-item">
         <label class="layui-form-label">排序</label>
         <label class="layui-form-label">排序</label>
         <div class="layui-input-block">
         <div class="layui-input-block">
-            <input type="number" name="sort" class="layui-input" lay-verify="" lay-reqtext="排序不能为空">
+            <input type="number" name="deptOrder" class="layui-input" lay-verify="">
         </div>
         </div>
     </div>
     </div>
 
 
@@ -60,7 +51,7 @@
 <script src="../../js/lay-config.js?v=1.0.4" charset="utf-8"></script>
 <script src="../../js/lay-config.js?v=1.0.4" charset="utf-8"></script>
 <script>
 <script>
 
 
-    layui.use(['form','http','iconPickerFa','treeSelect'], function () {
+    layui.use(['form', 'http', 'iconPickerFa', 'treeSelect'], function () {
         /**变-------------------------------量-------------------------------定-------------------------------义*/
         /**变-------------------------------量-------------------------------定-------------------------------义*/
         var form = layui.form,
         var form = layui.form,
             layer = layui.layer,
             layer = layui.layer,
@@ -70,47 +61,39 @@
         let id = $('#id').val()
         let id = $('#id').val()
         let parentId;
         let parentId;
         /**方-------------------------------法-------------------------------定-------------------------------义*/
         /**方-------------------------------法-------------------------------定-------------------------------义*/
-        // 保存方法
+            // 保存方法
         let save = function (data) {
         let save = function (data) {
                 var selectedNodes = treeSelect.zTree('parentId').getSelectedNodes();
                 var selectedNodes = treeSelect.zTree('parentId').getSelectedNodes();
-                if (selectedNodes.length > 0){
+                if (selectedNodes.length > 0) {
                     data.parentId = selectedNodes[0].id
                     data.parentId = selectedNodes[0].id
-                }else {
-                    data.parentId = -1
-                }
-            http.post(id == '' ? 'system/archivesTree/insert': 'system/archivesTree/update',data,true,function (res) {
-                if (res.code == 200){
-                    let index = layer.alert('保存成功!', {
-                        title: id == '' ? '添加':'修改' + '信息'
-                    }, function () {
-                        // 关闭弹出层
-                        layer.close(index);
-                        let iframeIndex = parent.layer.getFrameIndex(window.name);
-                        parent.layer.close(iframeIndex);
-                    });
+                } else {
+                    data.parentId = null
                 }
                 }
-            })
-        }
+                http.post(id == '' ? 'system/dept/insert' : 'system/dept/update', data, true, function (res) {
+                    if (res.code == 200) {
+                        let index = layer.alert('保存成功!', {
+                            title: id == '' ? '添加' : '修改' + '信息'
+                        }, function () {
+                            // 关闭弹出层
+                            layer.close(index);
+                            let iframeIndex = parent.layer.getFrameIndex(window.name);
+                            parent.layer.close(iframeIndex);
+                        });
+                    }
+                })
+            }
 
 
         // 加载下拉框
         // 加载下拉框
         let loadDictSelect = function () {
         let loadDictSelect = function () {
-            // http.get('/system/menu/select',null,false,function (res) {
-            //     let html = ''
-            //     for (let index in res.data) {
-            //         html += '<option value="'+res.data[index].id+'">'+res.data[index].title+'</option>'
-            //     }
-            //     $('#parentId').append(html)
-            //     form.render();//菜单渲染 把内容加载进去
-            // })
             treeSelect.render({
             treeSelect.render({
                 // 选择器
                 // 选择器
                 elem: '#parentId',
                 elem: '#parentId',
                 // 数据
                 // 数据
-                data: 'system/archivesTree/selectTree',
+                data: 'system/dept/selectTree',
                 // 异步加载方式:get/post,默认get
                 // 异步加载方式:get/post,默认get
                 type: 'get',
                 type: 'get',
                 // 占位符
                 // 占位符
-                placeholder: '请选择父节点',
+                placeholder: '请选择上级部门',
                 // 是否开启搜索功能:true/false,默认false
                 // 是否开启搜索功能:true/false,默认false
                 search: true,
                 search: true,
                 // 一些可定制的样式
                 // 一些可定制的样式
@@ -123,8 +106,10 @@
                     }
                     }
                 },
                 },
                 success: function (res) {
                 success: function (res) {
-                    if(id != '' && parentId != '' && parentId != -1){
-                        treeSelect.checkNode('parentId', parentId);
+                    if (parentId != null) {
+                        if (id != '' && parentId != '' && parentId != -1) {
+                            treeSelect.checkNode('parentId', parentId);
+                        }
                     }
                     }
                 }
                 }
             });
             });
@@ -132,10 +117,10 @@
 
 
         // 加载数据
         // 加载数据
         let initData = function () {
         let initData = function () {
-            if(id != ''){
-                http.get('/system/archivesTree/selectByPrimaryKey',{
+            if (id != '') {
+                http.get('/system/dept/selectByPrimaryKey', {
                     id: id
                     id: id
-                },false,function (res) {
+                }, false, function (res) {
                     form.val("addDict", res.data);
                     form.val("addDict", res.data);
                     parentId = res.data.parentId
                     parentId = res.data.parentId
                     form.render();
                     form.render();
@@ -148,9 +133,6 @@
         loadDictSelect()
         loadDictSelect()
         //监听提交
         //监听提交
         form.on('submit(saveBtn)', function (data) {
         form.on('submit(saveBtn)', function (data) {
-            let icon = 'fa '
-            icon += data.field.icon
-            data.field.icon = icon
             save(data.field)
             save(data.field)
         });
         });
 
 

+ 6 - 6
src/main/resources/static/page/dept/list.html

@@ -41,14 +41,14 @@
         treetable = layui.treetable;
         treetable = layui.treetable;
 
 
         /**方-------------------------------法-------------------------------定-------------------------------义*/
         /**方-------------------------------法-------------------------------定-------------------------------义*/
-        http.getRoleButton(153)
+        http.getRoleButton(184)
         // 加载表格数据
         // 加载表格数据
         let renderTable = function () {
         let renderTable = function () {
             // 渲染表格
             // 渲染表格
             layer.load(2);
             layer.load(2);
             treetable.render({
             treetable.render({
                 treeColIndex: 1,
                 treeColIndex: 1,
-                treeSpid: -1,
+                treeSpid: 'null',
                 treeIdName: 'id',
                 treeIdName: 'id',
                 treePidName: 'parentId',
                 treePidName: 'parentId',
                 toolbar: '#toolbar',
                 toolbar: '#toolbar',
@@ -57,8 +57,8 @@
                 page: false,
                 page: false,
                 cols: [[
                 cols: [[
                     {type: 'numbers'},
                     {type: 'numbers'},
-                    {field: 'id',  title: '部门名称'},
-                    // {field: 'code', title: '代码'},
+                    {field: 'deptName',  title: '名称'},
+                    {field: 'deptOrder',  title: '排序'},
                     {templet: '#operating', width: 300, align: 'center', title: '操作'}
                     {templet: '#operating', width: 300, align: 'center', title: '操作'}
                 ]],
                 ]],
                 done: function () {
                 done: function () {
@@ -81,7 +81,7 @@
         //添加方法
         //添加方法
         let addDict = function () {
         let addDict = function () {
             var index = layer.open({
             var index = layer.open({
-                title: '添加',
+                title: '添加部门',
                 type: 2,
                 type: 2,
                 shade: 0.2,
                 shade: 0.2,
                 maxmin:true,
                 maxmin:true,
@@ -118,7 +118,7 @@
         //修改方法
         //修改方法
         let updateDict = function (id) {
         let updateDict = function (id) {
             layer.open({
             layer.open({
-                title: '修改菜单',
+                title: '修改部门',
                 type: 2,
                 type: 2,
                 shade: 0.2,
                 shade: 0.2,
                 maxmin:true,
                 maxmin:true,

+ 71 - 6
src/main/resources/static/page/statistics/archiveStatistics.html

@@ -12,6 +12,23 @@
 <div class="layuimini-container">
 <div class="layuimini-container">
     <div class="layuimini-main">
     <div class="layuimini-main">
         <div>
         <div>
+            <div class="layui-form toolbar">
+                <div class="layui-form-item">
+                    <div class="layui-form-item">
+                        <div class="layui-inline" style="width: 300px;">
+                            <input name="time" id="time" class="layui-input" placeholder="请选择统计时间段" readonly>
+                        </div>
+                        <div class="layui-inline">
+                            <input type="text" name="ml" lay-filter="ml" id="ml" class="layui-input">
+                        </div>
+                        <div class="layui-inline">
+                            <button id="btnSearch" lay-submit lay-filter="search" class="layui-btn icon-btn"><i
+                                    class="layui-icon"></i>搜索
+                            </button>
+                        </div>
+                    </div>
+                </div>
+            </div>
             <table class="layui-hide" id="table" lay-filter="table"></table>
             <table class="layui-hide" id="table" lay-filter="table"></table>
         </div>
         </div>
     </div>
     </div>
@@ -21,7 +38,42 @@
 <script src="../../lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
 <script src="../../lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
 <script src="../../js/lay-config.js?v=1.0.4" charset="utf-8"></script>
 <script src="../../js/lay-config.js?v=1.0.4" charset="utf-8"></script>
 <script>
 <script>
-    layui.use(['treetable', 'http'], function () {
+    layui.use(['treetable', 'http', 'treeSelect', 'laydate', 'form'], function () {
+        let searchParam = {}
+
+        // 加载日期控件
+        layui.laydate.render({
+            elem: '#time',
+            type: 'datetime',
+            trigger: 'click',
+            range: true
+            // value: new Date()
+        });
+
+        // 加载树形下拉框控件
+        layui.treeSelect.render({
+            // 选择器
+            elem: '#ml',
+            // 数据
+            data: 'system/archivesTree/selectTree',
+            // 异步加载方式:get/post,默认get
+            type: 'get',
+            // 占位符
+            placeholder: '请选择门类',
+            // 是否开启搜索功能:true/false,默认false
+            search: true,
+            // 一些可定制的样式
+            style: {
+                folder: {
+                    enable: true
+                },
+                line: {
+                    enable: true
+                }
+            }
+        });
+
+
         let renderTable = function () {
         let renderTable = function () {
             layui.treetable.render({
             layui.treetable.render({
                 treeColIndex: 1,
                 treeColIndex: 1,
@@ -32,12 +84,13 @@
                 elem: '#table',
                 elem: '#table',
                 url: 'statistics/selectStatisticsByType',
                 url: 'statistics/selectStatisticsByType',
                 page: false,
                 page: false,
+                where: searchParam,
                 cols: [[
                 cols: [[
                     {type: 'numbers'},
                     {type: 'numbers'},
-                    {field: 'title',  title: '门类/属类'},
-                    {field: 'title',  title: '编码'},
-                    {field: 'archiveCount',  title: '归档案卷数'},
-                    {field: 'fileCount',  title: '归档文件数'},
+                    {field: 'title', title: '门类/属类'},
+                    {field: 'title', title: '编码'},
+                    {field: 'archiveCount', title: '归档案卷数'},
+                    {field: 'fileCount', title: '归档文件数'},
                     // {templet: '#operating', width: 120, align: 'center', title: '操作'}
                     // {templet: '#operating', width: 120, align: 'center', title: '操作'}
                 ]],
                 ]],
                 done: function () {
                 done: function () {
@@ -45,11 +98,23 @@
                     layer.closeAll('loading');
                     layer.closeAll('loading');
                 }
                 }
             });
             });
-
         }
         }
 
 
 
 
         renderTable()
         renderTable()
 
 
+
+        layui.form.on('submit(search)', function (data) {
+            searchParam = data.field
+            var selectedNodes = layui.treeSelect.zTree('ml').getSelectedNodes();
+            if (selectedNodes.length > 0) {
+                searchParam.ml = selectedNodes[0].id
+            } else {
+                searchParam.ml = null
+            }
+            renderTable()
+        })
+
+
     })
     })
 </script>
 </script>

+ 67 - 2
src/main/resources/static/page/statistics/archiveYearStatistics.html

@@ -12,6 +12,23 @@
 <div class="layuimini-container">
 <div class="layuimini-container">
     <div class="layuimini-main">
     <div class="layuimini-main">
         <div>
         <div>
+            <div class="layui-form toolbar">
+                <div class="layui-form-item">
+                    <div class="layui-form-item">
+                        <div class="layui-inline" style="width: 300px;">
+                            <input name="time" id="time" class="layui-input" placeholder="请选择统计时间段" readonly>
+                        </div>
+                        <div class="layui-inline">
+                            <input type="text" name="ml" lay-filter="ml" id="ml" class="layui-input">
+                        </div>
+                        <div class="layui-inline">
+                            <button id="btnSearch" lay-submit lay-filter="search" class="layui-btn icon-btn"><i
+                                    class="layui-icon"></i>搜索
+                            </button>
+                        </div>
+                    </div>
+                </div>
+            </div>
             <table class="layui-hide" id="table" lay-filter="table"></table>
             <table class="layui-hide" id="table" lay-filter="table"></table>
         </div>
         </div>
     </div>
     </div>
@@ -21,7 +38,42 @@
 <script src="../../lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
 <script src="../../lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
 <script src="../../js/lay-config.js?v=1.0.4" charset="utf-8"></script>
 <script src="../../js/lay-config.js?v=1.0.4" charset="utf-8"></script>
 <script>
 <script>
-    layui.use(['table', 'http'], function () {
+    layui.use(['table', 'http', 'treeSelect', 'laydate', 'form'], function () {
+        let searchParam = {}
+
+        layui.laydate.render({
+            elem: '#time',
+            type: 'year',
+            trigger: 'click',
+            range: true
+            // value: new Date()
+        });
+
+
+        // 加载下拉框
+        layui.treeSelect.render({
+            // 选择器
+            elem: '#ml',
+            // 数据
+            data: 'system/archivesTree/selectTree',
+            // 异步加载方式:get/post,默认get
+            type: 'get',
+            // 占位符
+            placeholder: '请选择门类',
+            // 是否开启搜索功能:true/false,默认false
+            search: true,
+            // 一些可定制的样式
+            style: {
+                folder: {
+                    enable: true
+                },
+                line: {
+                    enable: true
+                }
+            }
+        });
+
+
         let renderTable = function () {
         let renderTable = function () {
             // 加载表格数据
             // 加载表格数据
             layui.table.render({
             layui.table.render({
@@ -31,6 +83,7 @@
                 limit: 15,
                 limit: 15,
                 limits: [15, 30, 45, 60],
                 limits: [15, 30, 45, 60],
                 page: false,
                 page: false,
+                where: searchParam,
                 request: {
                 request: {
                     pageName: 'pageNum',
                     pageName: 'pageNum',
                     limitName: 'pageSize'
                     limitName: 'pageSize'
@@ -46,7 +99,7 @@
                         "data": res.data
                         "data": res.data
                     }
                     }
                 },
                 },
-                done: function(res, curr, count) {
+                done: function (res, curr, count) {
                     // $('th').css({'background-color': '#1aa094', 'color': '#fff','font-weight':'bold'})
                     // $('th').css({'background-color': '#1aa094', 'color': '#fff','font-weight':'bold'})
                 },
                 },
                 cols: [[
                 cols: [[
@@ -61,5 +114,17 @@
 
 
         renderTable()
         renderTable()
 
 
+        layui.form.on('submit(search)', function (data) {
+            searchParam = data.field
+            var selectedNodes = layui.treeSelect.zTree('ml').getSelectedNodes();
+            if (selectedNodes.length > 0) {
+                searchParam.ml = selectedNodes[0].id
+            } else {
+                searchParam.ml = null
+            }
+            renderTable()
+        })
+
+
     })
     })
 </script>
 </script>

+ 73 - 9
src/main/resources/static/page/statistics/borrowStatistics.html

@@ -12,6 +12,23 @@
 <div class="layuimini-container">
 <div class="layuimini-container">
     <div class="layuimini-main">
     <div class="layuimini-main">
         <div>
         <div>
+            <div class="layui-form toolbar">
+                <div class="layui-form-item">
+                    <div class="layui-form-item">
+                        <div class="layui-inline" style="width: 300px;">
+                            <input name="time" id="time" class="layui-input" placeholder="请选择统计时间段" readonly>
+                        </div>
+                        <div class="layui-inline">
+                            <input type="text" name="ml" lay-filter="ml" id="ml" class="layui-input">
+                        </div>
+                        <div class="layui-inline">
+                            <button id="btnSearch" lay-submit lay-filter="search" class="layui-btn icon-btn"><i
+                                    class="layui-icon"></i>搜索
+                            </button>
+                        </div>
+                    </div>
+                </div>
+            </div>
             <table class="layui-hide" id="table" lay-filter="table"></table>
             <table class="layui-hide" id="table" lay-filter="table"></table>
         </div>
         </div>
     </div>
     </div>
@@ -21,7 +38,42 @@
 <script src="../../lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
 <script src="../../lib/layui-v2.5.5/layui.js" charset="utf-8"></script>
 <script src="../../js/lay-config.js?v=1.0.4" charset="utf-8"></script>
 <script src="../../js/lay-config.js?v=1.0.4" charset="utf-8"></script>
 <script>
 <script>
-    layui.use(['treetable', 'http'], function () {
+    layui.use(['treetable', 'http', 'laydate', 'form', 'treeSelect'], function () {
+
+        let searchParam = {}
+
+        layui.laydate.render({
+            elem: '#time',
+            type: 'datetime',
+            trigger: 'click',
+            range: true
+            // value: new Date()
+        });
+
+        // 加载下拉框
+        layui.treeSelect.render({
+            // 选择器
+            elem: '#ml',
+            // 数据
+            data: 'system/archivesTree/selectTree',
+            // 异步加载方式:get/post,默认get
+            type: 'get',
+            // 占位符
+            placeholder: '请选择门类',
+            // 是否开启搜索功能:true/false,默认false
+            search: true,
+            // 一些可定制的样式
+            style: {
+                folder: {
+                    enable: true
+                },
+                line: {
+                    enable: true
+                }
+            }
+        });
+
+
         let renderTable = function () {
         let renderTable = function () {
 
 
             layui.table.render({
             layui.table.render({
@@ -35,6 +87,7 @@
                     pageName: 'pageNum',
                     pageName: 'pageNum',
                     limitName: 'pageSize'
                     limitName: 'pageSize'
                 },
                 },
+                where: searchParam,
                 response: {
                 response: {
                     statusCode: 200 //重新规定成功的状态码为 200,table 组件默认为 0
                     statusCode: 200 //重新规定成功的状态码为 200,table 组件默认为 0
                 },
                 },
@@ -46,27 +99,38 @@
                         "data": res.data
                         "data": res.data
                     }
                     }
                 },
                 },
-                done: function(res, curr, count) {
+                done: function (res, curr, count) {
                     // $('th').css({'background-color': '#1aa094', 'color': '#fff','font-weight':'bold'})
                     // $('th').css({'background-color': '#1aa094', 'color': '#fff','font-weight':'bold'})
                 },
                 },
                 cols: [[
                 cols: [[
                     {type: 'numbers'},
                     {type: 'numbers'},
-                    {field: 'dh',  title: '档号'},
-                    {field: 'tm',  title: '题名'},
-                    {field: 'tm',  title: '题名'},
-                    {field: 'ml',  title: '门类/属类'},
-                    {field: 'createTime',  title: '最后借阅时间'},
+                    {field: 'dh', title: '档号'},
+                    {field: 'tm', title: '题名'},
+                    {field: 'tm', title: '题名'},
+                    {field: 'ml', title: '门类/属类'},
+                    {field: 'createTime', title: '最后借阅时间'},
                     // {field: 'estimateReturnTime',  title: '预计归还时间'},
                     // {field: 'estimateReturnTime',  title: '预计归还时间'},
                     // {field: 'returnTime',  title: '实际归还时间'},
                     // {field: 'returnTime',  title: '实际归还时间'},
-                    {field: 'borrowCount',  title: '借阅次数'},
+                    {field: 'borrowCount', title: '借阅次数'},
                     // {templet: '#operating', align: 'center', title: '操作', width: 300}
                     // {templet: '#operating', align: 'center', title: '操作', width: 300}
                 ]]
                 ]]
             });
             });
 
 
         }
         }
 
 
-
         renderTable()
         renderTable()
 
 
+
+        layui.form.on('submit(search)', function (data) {
+            searchParam = data.field
+            var selectedNodes = layui.treeSelect.zTree('ml').getSelectedNodes();
+            if (selectedNodes.length > 0) {
+                searchParam.ml = selectedNodes[0].id
+            } else {
+                searchParam.ml = null
+            }
+            renderTable()
+        })
+
     })
     })
 </script>
 </script>