Browse Source

修改客户提出问题
修改生产环境rabbitmq地址

liuchanglan 4 years ago
parent
commit
33e1c7f5be
40 changed files with 718 additions and 219 deletions
  1. 4 1
      README.md
  2. 9 5
      src/main/java/com/gz/common/DataGlobalVariable.java
  3. 6 0
      src/main/java/com/gz/config/MountArchiveFileConfig.java
  4. 38 0
      src/main/java/com/gz/controller/RabbitMqTestController.java
  5. 2 23
      src/main/java/com/gz/controller/system/AdminController.java
  6. 11 0
      src/main/java/com/gz/controller/system/RoleController.java
  7. 4 2
      src/main/java/com/gz/core/exception/CustomExceptionEnum.java
  8. 3 1
      src/main/java/com/gz/dto/archive/SecondaryArchiveDTO.java
  9. 2 0
      src/main/java/com/gz/dto/system/DeptDTO.java
  10. 29 5
      src/main/java/com/gz/job/MountArchiveFileJob.java
  11. 5 0
      src/main/java/com/gz/mapper/system/AdminMapper.java
  12. 15 0
      src/main/java/com/gz/service/archive/impl/ArchiveFileServiceImpl.java
  13. 138 33
      src/main/java/com/gz/service/archive/impl/ArchiveServiceImpl.java
  14. 25 7
      src/main/java/com/gz/service/system/RoleService.java
  15. 9 10
      src/main/java/com/gz/service/system/impl/AdminServiceImpl.java
  16. 39 2
      src/main/java/com/gz/service/system/impl/AuthServiceImpl.java
  17. 45 7
      src/main/java/com/gz/service/system/impl/RoleServiceImpl.java
  18. 5 0
      src/main/java/com/gz/vo/archive/SearchArchiveVO.java
  19. 1 1
      src/main/java/com/gz/vo/rabbitmq/OcrEtlVO.java
  20. 6 0
      src/main/java/com/gz/vo/system/AdminVO.java
  21. 1 0
      src/main/java/com/gz/vo/system/RoleMenuVO.java
  22. 2 2
      src/main/resources/application-dev.yml
  23. 2 2
      src/main/resources/application-prod.yml
  24. 5 5
      src/main/resources/application-test.yml
  25. 1 1
      src/main/resources/application.yml
  26. 25 11
      src/main/resources/mapper/adminMapper.xml
  27. 1 0
      src/main/resources/mapper/archiveFileMapper.xml
  28. 8 2
      src/main/resources/mapper/archiveMapper.xml
  29. 1 1
      src/main/resources/mapper/archivesTreeMapper.xml
  30. 6 3
      src/main/resources/static/js/lay-module/request/http.js
  31. 142 50
      src/main/resources/static/page/admin/list.html
  32. 6 1
      src/main/resources/static/page/archive/list.html
  33. 39 12
      src/main/resources/static/page/archive/show.html
  34. 9 5
      src/main/resources/static/page/borrow/list.html
  35. 21 0
      src/main/resources/static/page/dept/edit.html
  36. 10 10
      src/main/resources/static/page/menu/addMenu.html
  37. 6 6
      src/main/resources/static/page/menu/menuList.html
  38. 36 9
      src/main/resources/static/page/role/editRole.html
  39. BIN
      src/main/resources/static/template/导入模板.xlsx
  40. 1 2
      src/main/resources/static/updatePassword.html

+ 4 - 1
README.md

@@ -40,7 +40,7 @@ ______
 > ##### 配置:16h32g 1000g Centos7.8
 > * ip `66.1.21.158`
 > * 用户名 `root`
-> * 密码 ` Jda!2t456`
+> * 密码 `Jda!2t456`
 
 > ##### JAVA8:
 > * 位置:`/data/jdk1.8.0_231`
@@ -49,6 +49,9 @@ ______
 > * 其他文件存放目录:`/data/file`
 > * 运行命令 `nohup java -jar XXX.jar > out.log 2>&1 &`
 > * 日志目录:`/data/logs`
+> 
+> #### RabbitMQ
+> * 
 
 ______
 

+ 9 - 5
src/main/java/com/gz/common/DataGlobalVariable.java

@@ -25,17 +25,13 @@ public class DataGlobalVariable {
     /** 登录日志的code*/
     public static final String LOGIN_LOG_CODE = "LOGIN_LOG";
 
-    /** ---------------------档号生成相关 ------------------------*/
-
-
+    /** ---------------------档号相关 ------------------------*/
     /** 文书档案 生成档号 FOMAT 全宗号-档案门类代码年度-保管期限-机构代码-件号 */
     public static final String WS_DH_FOMAT = "%s-WS%s-%s-0000-%s";
 
     /** 会计档案 生成档号 FOMAT 全宗号-(目录号)-档案门类代码年度--核算单位代号-(保管期限)-案卷号*/
     public static final String KU_DH_FOMAT = "%s-(%s)-KU%s-%s-(%s)-%s";
 
-
-
     /** 科技档案 生成档号 FOMAT 全宗号-目录号-档案门类代码·属类代码-保管期限-项目代号/设备代号--案卷号*/
     public static final String KJ_DH_FOMAT = "%s-%s-KJ·%s-%s-%s-%s";
 
@@ -53,6 +49,12 @@ public class DataGlobalVariable {
 
     /** 融媒体档案 生成档号 FOMAT 全宗号-目录号-档案门类代码·属类代码-保管期限-件号*/
     public static final String MT_DH_FOMAT = "%s-%s-MT·%s-%s-%s";
+    /** ---------------------档案导入相关 ------------------------*/
+
+    /** 档案目录导入解析key */
+    public static final String IMPORT_ARCHIVE_SESSION_KEY_FOMAT = "ARCHIVE_%s";
+    /** 二级目录导入解析Key*/
+    public static final String IMPORT_SECONDARY_ARCHIVE_SESSION_KEY_FOMAT = "SECONDARY_ARCHIVE_%s";
 
     /** ---------------------权限控制相关 ------------------------*/
 
@@ -63,6 +65,8 @@ public class DataGlobalVariable {
     public static final Integer ROLE_TYPE_ARCHIVE_TREE = 1;
     /** 密集权限*/
     public static final Integer ROLE_TYPE_MIJI = 2;
+    /** 文档查看权限*/
+    public static final Integer ARCHIVE_SHOW = 3;
 
     /** ---------------------消息队列相关 ------------------------*/
     public static final String MQ_SEND_SUCCESS = "0";

+ 6 - 0
src/main/java/com/gz/config/MountArchiveFileConfig.java

@@ -54,6 +54,12 @@ public class MountArchiveFileConfig {
     /** 错误文件key*/
     public static final String ERROR_FILE_PATH_KEY = "error_file_path";
 
+
+    /** ---------------------专业档案 档号规则---------------------*/
+
+    /** 专业档案-卷内目录档号正则表达式*/
+    public static final String ZY_DH_RE = ".*-.*-ZY·.[DC|GH|BH|ZF|DJ]+-[D10|D30|Y]+-.{5}-.{4}";
+
     @Value("${mount-archive.scan-base-path}")
     public void setArchiveFileRootDirectory(String scanBasePath) {
         log.info("待挂接文件扫描根目录:{}",scanBasePath);

File diff suppressed because it is too large
+ 38 - 0
src/main/java/com/gz/controller/RabbitMqTestController.java


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

@@ -22,45 +22,24 @@ public class AdminController {
     @Resource
     private AdminService adminService;
 
-
-    /**
-     * @description 增
-     * @author LiuChangLan
-     * @since 2020/9/4 14:46
-     */
     @PostMapping("insert")
     @TraceLog(module = "管理员管理",business = "新增管理员")
     public Integer insert(@RequestBody AdminDTO adminDTO){
         return adminService.insert(adminDTO);
     }
 
-    /**
-     * @description 删
-     * @author LiuChangLan
-     * @since 2020/9/4 14:46
-     */
     @DeleteMapping("delete")
     @TraceLog(module = "管理员管理",business = "删除管理员")
     public Integer delete( Integer id){
         return adminService.delete(id);
     }
 
-    /**
-     * @description 改
-     * @author LiuChangLan
-     * @since 2020/9/4 14:46
-     */
     @PostMapping("update")
     @TraceLog(module = "管理员管理",business = "修改管理员")
     public Integer update(@RequestBody AdminDTO adminDTO){
         return adminService.update(adminDTO);
     }
 
-    /**
-     * @description 查(分页)
-     * @author LiuChangLan
-     * @since 2020/9/4 14:46
-     */
     @GetMapping("select")
     @TraceLog(module = "管理员管理",business = "查询管理员列表")
     public PageInfo<AdminDTO> select(AdminVO adminVO){
@@ -73,9 +52,9 @@ public class AdminController {
         return adminService.selectByPrimaryKey(id);
     }
 
-    @PostMapping("updateStatus")
+    @GetMapping("updateStatus")
     @TraceLog(module = "管理员管理",business = "修改管理员状态")
-    Integer updateStatus(@RequestBody String id){
+    Integer updateStatus(String id){
         return adminService.updateStatus(id);
     }
 

+ 11 - 0
src/main/java/com/gz/controller/system/RoleController.java

@@ -1,6 +1,7 @@
 package com.gz.controller.system;
 
 import cn.hutool.core.lang.tree.Tree;
+import cn.hutool.json.JSONObject;
 import com.github.pagehelper.PageInfo;
 import com.gz.core.annotation.TraceLog;
 import com.gz.dto.system.RoleDTO;
@@ -110,4 +111,14 @@ public class RoleController {
         return roleService.selectAllRole();
     }
 
+    /**
+     * @description 获取文档查询权限
+     * @author LiuChangLan
+     * @since 2021/3/31 14:39
+     */
+    @GetMapping("selectShowArchive")
+    List<JSONObject> selectShowArchive(Integer roleId){
+        return roleService.selectShowArchive(roleId);
+    }
+
 }

+ 4 - 2
src/main/java/com/gz/core/exception/CustomExceptionEnum.java

@@ -22,6 +22,7 @@ public enum CustomExceptionEnum implements CustomResponsInterface {
     PASSWORD_NO_INCORRECT(1006, "密码不正确"),
     GENERATE_DH_ERROR(1007, "档号生成失败"),
     UPLOAD_ARCHIVE_FILE_TYPE_ERROR(1008, "档案附件暂只支持PDF、TIF"),
+    ACCOUNT_NOT_ROLE(1009,"当前账号未设置权限,请联系管理员"),
 
 
     ORIGINAL_SCRIPT_NO_EXISTS(1009, "原件已被借阅"),
@@ -29,9 +30,10 @@ public enum CustomExceptionEnum implements CustomResponsInterface {
 
 
     ARCHIVE_DATA_NOT_EXISTS(1100, "归档数据不存在"),
-    DEL_ORIGINAL_FILE_ERROR(1101,"删除原文件失败")
+    DEL_ORIGINAL_FILE_ERROR(1101, "删除原文件失败"),
 
-    ;
+
+    NO_ROLE(1200, "无权限");
 
 
     private final Integer code;

+ 3 - 1
src/main/java/com/gz/dto/archive/SecondaryArchiveDTO.java

@@ -13,6 +13,8 @@ import javax.persistence.Table;
 @Data
 @Table(name = "tab_secondary_archive")
 public class SecondaryArchiveDTO extends BaseDTO {
+    // 档号
+    private String dh;
     // 文档id
     private Integer archiveId;
 
@@ -26,7 +28,7 @@ public class SecondaryArchiveDTO extends BaseDTO {
     private String wh;
 
     // 页号
-    private Integer yh;
+    private String yh;
 
     // 备注
     private String bz;

+ 2 - 0
src/main/java/com/gz/dto/system/DeptDTO.java

@@ -23,4 +23,6 @@ public class DeptDTO extends UUIDBaseDTO {
     private String parentId;
     // 部门排序
     private Integer deptOrder;
+    // 权限id
+    private Integer roleId;
 }

+ 29 - 5
src/main/java/com/gz/job/MountArchiveFileJob.java

@@ -2,16 +2,21 @@ package com.gz.job;
 
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.ReUtil;
 import com.gz.config.FileUploadConfig;
 import com.gz.config.MountArchiveFileConfig;
 import com.gz.core.exception.BusinessException;
 import com.gz.core.exception.CustomExceptionEnum;
 import com.gz.dto.archive.ArchiveDTO;
+import com.gz.dto.archive.SecondaryArchiveDTO;
 import com.gz.dto.system.ArchiveFileDTO;
+import com.gz.dto.system.ArchivesTreeDTO;
 import com.gz.mapper.archive.ArchiveFileMapper;
 import com.gz.mapper.archive.ArchiveMapper;
+import com.gz.mapper.archive.SecondaryArchiveMapper;
+import com.gz.mapper.system.ArchivesTreeMapper;
 import lombok.extern.slf4j.Slf4j;
-import org.springframework.context.annotation.Profile;
 import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.stereotype.Component;
 
@@ -33,13 +38,19 @@ public class MountArchiveFileJob {
     private ArchiveMapper archiveMapper;
 
     @Resource
+    private SecondaryArchiveMapper secondaryArchiveMapper;
+
+    @Resource
+    private ArchivesTreeMapper archivesTreeMapper;
+
+    @Resource
     private ArchiveFileMapper archiveFileMapper;
 
     @Resource
     private StringRedisTemplate stringRedisTemplate;
 
     @PostConstruct
-    public void HandelePDFJob() {
+    public void handelPDFJob() {
         log.info("[归档任务]初始化PDF文件归档任务线程");
         // 另一个线程启动 监听队列
         new Thread(() -> {
@@ -59,12 +70,22 @@ public class MountArchiveFileJob {
                             // 判断是否在错误队列 错误队列跳过
                             if (!stringRedisTemplate.hasKey(key)) {
                                 ArchiveDTO archiveDTO = new ArchiveDTO();
-                                archiveDTO.setDh(dh);
-                                archiveDTO = archiveMapper.selectOne(archiveDTO);
+                                SecondaryArchiveDTO secondaryArchiveDTO = new SecondaryArchiveDTO();
+                                // 专业档案卷内目录 档号正则
+                                if (ReUtil.isMatch(MountArchiveFileConfig.ZY_DH_RE, dh)) {
+                                    secondaryArchiveDTO.setDh(dh);
+                                    secondaryArchiveDTO = secondaryArchiveMapper.selectOne(secondaryArchiveDTO);
+                                    archiveDTO = archiveMapper.selectByPrimaryKey(secondaryArchiveDTO.getArchiveId());
+                                } else {
+                                    archiveDTO.setDh(dh);
+                                    archiveDTO = archiveMapper.selectOne(archiveDTO);
+                                }
                                 if (archiveDTO == null) {
                                     throw new BusinessException(CustomExceptionEnum.ARCHIVE_DATA_NOT_EXISTS);
                                 }
-                                String finallyPath = "/" + archiveDTO.getQzh() + "/" + archiveDTO.getGdnd() + "/" + archiveDTO.getMl() + "/" + archiveDTO.getBgqx() + "/" + archiveDTO.getDh() + "/pdf/";
+                                ArchivesTreeDTO parentMl = archivesTreeMapper.selectParentByCode(archiveDTO.getMl());
+                                String mlDirectory = (parentMl == null) ? archiveDTO.getMl() : parentMl.getCode() + "/" + archiveDTO.getMl();
+                                String finallyPath = "/" + archiveDTO.getQzh() + "/" + archiveDTO.getGdnd() + "/" + mlDirectory + "/" + archiveDTO.getBgqx() + "/" + archiveDTO.getDh() + "/pdf/";
                                 FileUtil.copy(pdf, new File(FileUploadConfig.ARCHIVE_FILE_ROOT_DIRECTORY + finallyPath + name), false);
                                 log.debug("复制文件:[{}]成功", name);
                                 // 删除扫描成功文件
@@ -73,6 +94,9 @@ public class MountArchiveFileJob {
                                 }
                                 ArchiveFileDTO archiveFileDTO = new ArchiveFileDTO();
                                 archiveFileDTO.setArchiveId(archiveDTO.getId());
+                                if (ObjectUtil.isNotNull(secondaryArchiveDTO)) {
+                                    archiveFileDTO.setSecondaryArchiveId(secondaryArchiveDTO.getId());
+                                }
                                 archiveFileDTO.setFileName(pdf.getName());
                                 archiveFileDTO.setOriginalFileName(pdf.getName());
                                 archiveFileDTO.setFileSize(FileUtil.size(pdf));

+ 5 - 0
src/main/java/com/gz/mapper/system/AdminMapper.java

@@ -2,8 +2,11 @@ package com.gz.mapper.system;
 
 import com.gz.dto.system.AdminDTO;
 import com.gz.rvo.system.AdminRVO;
+import com.gz.vo.system.AdminVO;
 import tk.mybatis.mapper.common.Mapper;
 
+import java.util.List;
+
 /**
  * 系统管理员Mapper
  * @author LiuchangLan
@@ -11,4 +14,6 @@ import tk.mybatis.mapper.common.Mapper;
  */
 public interface AdminMapper extends Mapper<AdminDTO> {
     AdminRVO selectByPrimaryKeyDept(String id);
+
+    List<AdminDTO> selectByPage(AdminVO vo);
 }

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

@@ -5,13 +5,16 @@ import cn.hutool.core.util.IdUtil;
 import com.alibaba.fastjson.JSON;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+import com.gz.common.DataGlobalVariable;
 import com.gz.config.FileUploadConfig;
 import com.gz.core.exception.BusinessException;
 import com.gz.core.exception.CustomExceptionEnum;
 import com.gz.dto.archive.ArchiveDTO;
 import com.gz.dto.system.ArchiveFileDTO;
+import com.gz.dto.system.MenuRoleDTO;
 import com.gz.mapper.archive.ArchiveFileMapper;
 import com.gz.mapper.archive.ArchiveMapper;
+import com.gz.mapper.system.MenuRoleMapper;
 import com.gz.rvo.archive.ArchiveFileRVO;
 import com.gz.service.archive.ArchiveFileService;
 import com.gz.utils.JwtUtils;
@@ -23,6 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.multipart.MultipartFile;
 import sun.text.resources.cldr.yav.FormatData_yav;
 
@@ -47,6 +51,10 @@ public class ArchiveFileServiceImpl implements ArchiveFileService {
     @Autowired
     private RabbitTemplate rabbitTemplate;
 
+    @Resource
+    private MenuRoleMapper menuRoleMapper;
+
+
     @Value("${rabbitmq.data-exchange}")
     private String dataExchangeName;
 
@@ -58,6 +66,7 @@ public class ArchiveFileServiceImpl implements ArchiveFileService {
 
 
     @Override
+    @Transactional
     public ArchiveFileDTO upload(MultipartFile file, Integer archiveId, Integer fileType,Integer secondaryArchiveId) throws BusinessException, IOException {
         if (file.isEmpty()) {
             throw new BusinessException(CustomExceptionEnum.File_NOT_EXISTS);
@@ -157,6 +166,12 @@ public class ArchiveFileServiceImpl implements ArchiveFileService {
 
     @Override
     public List<ArchiveFileRVO> selectByArchiveId(SearchArchiveFileVO vo) {
+        MenuRoleDTO param = new MenuRoleDTO();
+        param.setRoleId(JwtUtils.getCurrentUserJwtPayload().getRoleId());
+        param.setRoleType(DataGlobalVariable.ARCHIVE_SHOW);
+        if (menuRoleMapper.select(param).stream().filter(i -> i.getMenuId() == 2).count() <= 0) {
+            throw new BusinessException(CustomExceptionEnum.NO_ROLE);
+        }
         return archiveFileMapper.selectFileAndJnml(vo);
     }
 }

+ 138 - 33
src/main/java/com/gz/service/archive/impl/ArchiveServiceImpl.java

@@ -14,8 +14,13 @@ import com.gz.common.DataGlobalVariable;
 import com.gz.core.exception.BusinessException;
 import com.gz.core.exception.CustomExceptionEnum;
 import com.gz.dto.archive.ArchiveDTO;
+import com.gz.dto.archive.SecondaryArchiveDTO;
+import com.gz.dto.archive.SecondaryArchiveDTO;
 import com.gz.dto.system.ArchivesTreeDTO;
+import com.gz.dto.system.MenuRoleDTO;
 import com.gz.mapper.archive.ArchiveMapper;
+import com.gz.mapper.archive.SecondaryArchiveMapper;
+import com.gz.mapper.system.MenuRoleMapper;
 import com.gz.rvo.archive.ArchiveRVO;
 import com.gz.rvo.borrow.ArchiveBorrowListRVO;
 import com.gz.service.archive.ArchiveService;
@@ -60,6 +65,9 @@ public class ArchiveServiceImpl implements ArchiveService {
     private ArchiveMapper mapper;
 
     @Resource
+    private SecondaryArchiveMapper secondaryArchiveMapper;
+
+    @Resource
     private ArchivesTreeService archivesTreeService;
 
     @Autowired
@@ -71,6 +79,9 @@ public class ArchiveServiceImpl implements ArchiveService {
     @Resource
     private StringRedisTemplate stringRedisTemplate;
 
+    @Resource
+    private MenuRoleMapper menuRoleMapper;
+
 
     @Override
     public Integer insert(InsertArchiveVO vo) throws Exception {
@@ -225,7 +236,7 @@ public class ArchiveServiceImpl implements ArchiveService {
     public String generateDh(GenerateDhVO vo) {
         String jh = String.format("%05d", vo.getJh());
         ArchivesTreeDTO dto = archivesTreeService.selectParentByCode(vo.getSl());
-        if (dto != null){
+        if (dto != null) {
             vo.setMl(dto.getCode());
         }
 
@@ -253,20 +264,20 @@ public class ArchiveServiceImpl implements ArchiveService {
         }
     }
 
-    @Override
-    public List<ArchiveDTO> importExcel(MultipartFile file) throws IOException {
-        InputStream inputStream = file.getInputStream();
+    /**
+     * @description 导入档案目录
+     * @author LiuChangLan
+     * @since 2021/4/9 9:28
+     */
+    private List<ArchiveDTO> importArchive(InputStream inputStream) {
         ExcelReader reader = ExcelUtil.getReader(inputStream, 0);
         List<List<Object>> rows = reader.read();
         List<ArchiveDTO> result = new ArrayList<>();
         for (int i = 1; i < rows.size(); i++) {
-            if (i == 1123){
-                System.out.println(1);
-            }
             try {
                 List<Object> row = rows.get(i);
                 ArchiveDTO dto = new ArchiveDTO();
-                dto.setMl("WS");
+                dto.setMl(ExcelUtils.getExcelCellStringValue(row, 29));
                 dto.setDagdm(ExcelUtils.getExcelCellStringValue(row, 0));
                 dto.setDh(ExcelUtils.getExcelCellStringValue(row, 1));
                 dto.setQzh(ExcelUtils.getExcelCellStringValue(row, 2));
@@ -274,22 +285,38 @@ public class ArchiveServiceImpl implements ArchiveService {
                 dto.setMj(ExcelUtils.getExcelCellStringValue(row, 4));
                 dto.setBgqx(ExcelUtils.getExcelCellStringValue(row, 5));
                 // TODO: 2021/2/25 机构代号 6 馆编号 7
-                dto.setJh(ExcelUtils.getExcelCellIntegerValue(row,7));
+                dto.setJh(ExcelUtils.getExcelCellIntegerValue(row, 7));
                 dto.setZtsl(ExcelUtils.getExcelCellIntegerValue(row, 8));
                 dto.setWjbh(ExcelUtils.getExcelCellStringValue(row, 9));
-                DateTime wjxcsj = DateUtil.parse(ExcelUtils.getExcelCellStringValue(row, 10), "yyyyMMdd");
+                DateTime wjxcsj = null;
+                if ("WS".equals(dto.getMl())) {
+                    wjxcsj = DateUtil.parse(ExcelUtils.getExcelCellStringValue(row, 10), "yyyyMMdd");
+                } else {
+                    wjxcsj = DateUtil.parse(ExcelUtils.getExcelCellStringValue(row, 10), "yyyyMM");
+                }
                 dto.setWjxcsj(DateUtil.formatDate(wjxcsj));
-                String wjdqsj = "";
-                switch (dto.getBgqx()) {
-                    case "005":
-                    case "D10":
-                        wjdqsj = DateUtil.formatDate(DateUtil.offset(wjxcsj, DateField.YEAR, 10));
-                        break;
-                    case "004":
-                    case "D30":
-                        wjdqsj = DateUtil.formatDate(DateUtil.offset(wjxcsj, DateField.YEAR, 30));
-                        break;
+                String wjdqsj = ExcelUtils.getExcelCellStringValue(row, 30);
+                if (StrUtil.isEmpty(wjdqsj)) {
+                    switch (dto.getBgqx()) {
+                        case "005":
+                        case "D10":
+                            wjdqsj = DateUtil.formatDate(DateUtil.offset(wjxcsj, DateField.YEAR, 10));
+                            break;
+                        case "004":
+                        case "D30":
+                            wjdqsj = DateUtil.formatDate(DateUtil.offset(wjxcsj, DateField.YEAR, 30));
+                            break;
+                    }
+                } else {
+                    DateTime wjdqsjDate = null;
+                    if ("WS".equals(dto.getMl())) {
+                        wjdqsjDate = DateUtil.parse(wjdqsj, "yyyyMMdd");
+                    } else {
+                        wjdqsjDate = DateUtil.parse(wjdqsj, "yyyyMM");
+                    }
+                    dto.setWjdqsj(DateUtil.formatDate(wjdqsjDate));
                 }
+
                 dto.setWjdqsj(wjdqsj);
                 dto.setZrz(ExcelUtils.getExcelCellStringValue(row, 11));
                 dto.setTm(ExcelUtils.getExcelCellStringValue(row, 12));
@@ -308,36 +335,114 @@ public class ArchiveServiceImpl implements ArchiveService {
                 dto.setFlh(ExcelUtils.getExcelCellStringValue(row, 25));
                 dto.setZtc(ExcelUtils.getExcelCellStringValue(row, 26));
                 dto.setQwbs(ExcelUtils.getExcelCellStringValue(row, 27));
-                dto.setMj("NABU");
+                dto.setMlh(ExcelUtils.getExcelCellStringValue(row, 28));
+//                dto.setMj("NABU");
                 result.add(dto);
             } catch (Exception e) {
-                throw new BusinessException(500, String.format("导入出错,错误位置:%s行,错误原因:%s", (i + 1), e.getMessage()));
+                throw new BusinessException(500, String.format("【档案目录】解析出错,错误位置:%s行,错误原因:%s", (i + 1), e.getMessage()));
             }
         }
-        stringRedisTemplate.opsForValue().set(request.getSession().getId(), JSONObject.toJSONString(result), 1L, TimeUnit.HOURS);
-        log.info("成功解析:[{}],共有{}条数据", file.getOriginalFilename(), result.size());
+        String redisKey = String.format(DataGlobalVariable.IMPORT_ARCHIVE_SESSION_KEY_FOMAT, request.getSession().getId());
+        stringRedisTemplate.opsForValue().set(redisKey, JSONObject.toJSONString(result), 1L, TimeUnit.HOURS);
+        log.info("【档案目录】成功解析,共有{}条档案目录数据", result.size());
+        return result;
+    }
+
+    /**
+     * @description 导入二级目录
+     * @author LiuChangLan
+     * @since 2021/4/9 9:31
+     */
+    private List<SecondaryArchiveDTO> importSecondaryArchive(InputStream inputStream) {
+        ExcelReader reader = ExcelUtil.getReader(inputStream, 1);
+        List<List<Object>> rows = reader.read();
+        List<SecondaryArchiveDTO> result = new ArrayList<>();
+        for (int i = 1; i < rows.size(); i++) {
+            try {
+                List<Object> row = rows.get(i);
+                SecondaryArchiveDTO dto = new SecondaryArchiveDTO();
+                // 档号Str
+                dto.setDh(ExcelUtils.getExcelCellStringValue(row, 0));
+                // 顺序号
+                dto.setSxh(ExcelUtils.getExcelCellIntegerValue(row, 1));
+                // 文号
+                dto.setWh(ExcelUtils.getExcelCellStringValue(row, 2));
+                // 责任者
+                dto.setZrz(ExcelUtils.getExcelCellStringValue(row, 3));
+                // 题名
+                dto.setTm(ExcelUtils.getExcelCellStringValue(row, 4));
+                // 日期
+                if (StrUtil.isEmpty(ExcelUtils.getExcelCellStringValue(row, 5))) {
+                    dto.setRq("");
+                } else {
+                    DateTime rq = DateUtil.parse(ExcelUtils.getExcelCellStringValue(row, 5), "yyyyMMdd");
+                    dto.setRq(DateUtil.formatDate(rq));
+                }
+                // 页号
+                dto.setYh(ExcelUtils.getExcelCellStringValue(row, 6));
+                // 备注
+                dto.setBz(ExcelUtils.getExcelCellStringValue(row, 7));
+                result.add(dto);
+            } catch (Exception e) {
+                throw new BusinessException(500, String.format("【卷内目录】解析出错,错误位置:%s行,错误原因:%s", (i + 1), e.getMessage()));
+            }
+        }
+        String redisKey = String.format(DataGlobalVariable.IMPORT_SECONDARY_ARCHIVE_SESSION_KEY_FOMAT, request.getSession().getId());
+        stringRedisTemplate.opsForValue().set(redisKey, JSONObject.toJSONString(result), 1L, TimeUnit.HOURS);
+        log.info("【卷内目录】成功解析,共有{}条档案目录数据", result.size());
         return result;
     }
 
     @Override
+    public List<ArchiveDTO> importExcel(MultipartFile file) throws IOException {
+        List<ArchiveDTO> archiveDTOS = importArchive(file.getInputStream());
+        importSecondaryArchive(file.getInputStream());
+        return archiveDTOS;
+    }
+
+    @Override
     public ArchiveRVO selectByPrimaryKeyText(Integer id) {
+        MenuRoleDTO param = new MenuRoleDTO();
+        param.setRoleId(JwtUtils.getCurrentUserJwtPayload().getRoleId());
+        param.setRoleType(DataGlobalVariable.ARCHIVE_SHOW);
+        if (menuRoleMapper.select(param).stream().filter(i -> i.getMenuId() == 1).count() <= 0) {
+            throw new BusinessException(CustomExceptionEnum.NO_ROLE);
+        }
+
         return mapper.selectByPrimaryKeyText(id);
     }
 
     @Override
     @Transactional
     public Integer confirmImport() {
-        Integer count = 0;
-        String s = stringRedisTemplate.opsForValue().get(request.getSession().getId());
-        if (StrUtil.isEmpty(s)){
-            throw new BusinessException(500,"请先上传文件");
+        Integer archiveCount = 0;
+        Integer secondaryArchiveCount = 0;
+        String archiveRedisKey = String.format(DataGlobalVariable.IMPORT_ARCHIVE_SESSION_KEY_FOMAT, request.getSession().getId());
+        String secondaryArchiveRedisKey = String.format(DataGlobalVariable.IMPORT_SECONDARY_ARCHIVE_SESSION_KEY_FOMAT, request.getSession().getId());
+        // 读取缓存中的档案数据
+        String archiveJsonStr = stringRedisTemplate.opsForValue().get(archiveRedisKey);
+        // 读取缓存中的卷内目录数据
+        String secondaryArchiveJsonStr = stringRedisTemplate.opsForValue().get(secondaryArchiveRedisKey);
+        if (StrUtil.isEmpty(archiveJsonStr)) {
+            throw new BusinessException(500, "请先上传文件");
         }
-        List<ArchiveDTO> archiveDTOS = JSONObject.parseArray(s, ArchiveDTO.class);
+        List<ArchiveDTO> archiveDTOS = JSONObject.parseArray(archiveJsonStr, ArchiveDTO.class);
+        List<SecondaryArchiveDTO> secondaryArchiveDTOs = JSONObject.parseArray(secondaryArchiveJsonStr, SecondaryArchiveDTO.class);
         for (ArchiveDTO archiveDTO : archiveDTOS) {
-            count += mapper.insertSelective(archiveDTO);
+            archiveCount += mapper.insertSelective(archiveDTO);
+            stringRedisTemplate.opsForValue().set(archiveDTO.getDh(), String.valueOf(archiveDTO.getId()), 1L, TimeUnit.DAYS);
+        }
+        for (SecondaryArchiveDTO dto : secondaryArchiveDTOs) {
+            String dh = dto.getDh();
+            String archiveDh = dh.substring(0, dh.lastIndexOf("-"));
+            int archiveId = Integer.parseInt(stringRedisTemplate.opsForValue().get(archiveDh));
+            dto.setArchiveId(archiveId);
+            secondaryArchiveCount += secondaryArchiveMapper.insertSelective(dto);
         }
-        log.info("确定导入{}条数据",count);
-        stringRedisTemplate.delete(request.getSession().getId());
-        return count;
+        log.info("【档案目录】确定导入{}条数据", archiveCount);
+        log.info("【卷内目录】确定导入{}条数据", secondaryArchiveCount);
+        stringRedisTemplate.delete(archiveRedisKey);
+        stringRedisTemplate.delete(secondaryArchiveRedisKey);
+        return archiveCount;
     }
 }

+ 25 - 7
src/main/java/com/gz/service/system/RoleService.java

@@ -1,6 +1,7 @@
 package com.gz.service.system;
 
 import cn.hutool.core.lang.tree.Tree;
+import cn.hutool.json.JSONObject;
 import com.github.pagehelper.PageInfo;
 import com.gz.dto.system.RoleDTO;
 import com.gz.vo.system.RoleMenuVO;
@@ -15,46 +16,63 @@ public interface RoleService {
      * @author LiuChangLan
      * @since 2020/9/4 14:46
      */
-    public Integer insert(RoleDTO roleDTO);
+    Integer insert(RoleDTO roleDTO);
 
     /**
      * @description 删
      * @author LiuChangLan
      * @since 2020/9/4 14:46
      */
-    public Integer delete(Integer id);
+    Integer delete(Integer id);
 
     /**
      * @description 改
      * @author LiuChangLan
      * @since 2020/9/4 14:46
      */
-    public Integer update(RoleDTO roleDTO);
+    Integer update(RoleDTO roleDTO);
 
     /**
      * @description 查(给分页参数查分页 没给查全部)
      * @author LiuChangLan
      * @since 2020/9/4 14:46
      */
-    public PageInfo<RoleDTO> select(RoleVO roleVO);
+    PageInfo<RoleDTO> select(RoleVO roleVO);
 
     /**
      * @description 根据主键查询
      * @author LiuChangLan
      * @since 2020/9/4 16:35
      */
-    public RoleDTO selectByPrimaryKey(Integer id);
+    RoleDTO selectByPrimaryKey(Integer id);
 
     /**
      * @description 设置权限
      * @author LiuChangLan
      * @since 2020/9/22 9:51
      */
-    public Integer setRole(RoleMenuVO vo);
+    Integer setRole(RoleMenuVO vo);
 
 
-    public List<Tree<String>> selectRoleList(Integer roleId);
+    /**
+     * @description 查询权限树
+     * @author LiuChangLan
+     * @since 2021/3/31 13:50
+     */
+    List<Tree<String>> selectRoleList(Integer roleId);
 
+    /**
+     * @description 查询所有权限
+     * @author LiuChangLan
+     * @since 2021/3/31 13:50
+     */
     List<RoleDTO> selectAllRole();
 
+    /**
+     * @description 查询档案信息权限
+     * @author LiuChangLan
+     * @since 2021/3/31 14:31
+     */
+    List<JSONObject> selectShowArchive(Integer roleId);
+
 }

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

@@ -3,10 +3,12 @@ package com.gz.service.system.impl;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.StrUtil;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.gz.common.DataGlobalVariable;
 import com.gz.dto.system.AdminDTO;
+import com.gz.dto.system.DeptDTO;
 import com.gz.mapper.system.AdminMapper;
 import com.gz.rvo.system.AdminRVO;
 import com.gz.service.system.AdminService;
@@ -15,6 +17,7 @@ import com.gz.utils.PasswordUtils;
 import com.gz.vo.system.AdminVO;
 import org.springframework.stereotype.Service;
 import sun.net.util.IPAddressUtil;
+import tk.mybatis.mapper.entity.Example;
 
 import javax.annotation.Resource;
 import java.util.List;
@@ -59,13 +62,11 @@ public class AdminServiceImpl implements AdminService {
     @Override
     public PageInfo<AdminDTO> select(AdminVO adminVO) {
         // 包含分页参数执行分页
-        if (adminVO.getPageNum() != null && adminVO.getPageSize() != null){
-            PageHelper.startPage(adminVO.getPageNum(),adminVO.getPageSize());
+        if (adminVO.getPageNum() != null && adminVO.getPageSize() != null) {
+            PageHelper.startPage(adminVO.getPageNum(), adminVO.getPageSize());
         }
-        // 查询条件转换
-        AdminDTO adminDTO = BeanUtil.copyProperties(adminVO, AdminDTO.class);
         // 查询未删除的数据
-        return new PageInfo<>(adminMapper.select(adminDTO));
+        return new PageInfo<>(adminMapper.selectByPage(adminVO));
     }
 
     @Override
@@ -77,12 +78,10 @@ public class AdminServiceImpl implements AdminService {
 
     @Override
     public Integer updateStatus(String id) {
-        AdminDTO adminDTOd = new AdminDTO();
-        adminDTOd.setId(id);
-        AdminDTO adminDTO = adminMapper.selectOne(adminDTOd);
-        if (adminDTO.getStatus().equals(0)){
+        AdminDTO adminDTO = adminMapper.selectByPrimaryKey(id);
+        if (adminDTO.getStatus().equals(0)) {
             adminDTO.setStatus(1);
-        }else {
+        } else {
             adminDTO.setStatus(0);
         }
         return adminMapper.updateByPrimaryKeySelective(adminDTO);

+ 39 - 2
src/main/java/com/gz/service/system/impl/AuthServiceImpl.java

@@ -8,6 +8,7 @@ import cn.hutool.core.lang.tree.Tree;
 import cn.hutool.core.lang.tree.TreeNodeConfig;
 import cn.hutool.core.lang.tree.TreeUtil;
 import cn.hutool.core.util.IdUtil;
+import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSONObject;
 import com.gz.common.DataGlobalVariable;
 import com.gz.core.exception.BusinessException;
@@ -76,11 +77,32 @@ public class AuthServiceImpl implements AuthService {
     @Resource
     private AdminService adminService;
 
+
+    private Integer getRoleId(String deptId) {
+        if (StrUtil.isEmpty(deptId)){
+            return null;
+        }
+        // 查询部门权限
+        DeptDTO deptDTO = deptMapper.selectByPrimaryKey(deptId);
+        if (deptDTO.getRoleId() == null) {
+            // 当前部门未设置权限
+            if (deptDTO.getParentId() != null) {
+                // 有父级部门  查询父级别部门权限
+                return getRoleId(deptDTO.getParentId());
+            } else {
+                // 无父级部门
+                return deptDTO.getRoleId();
+            }
+        } else {
+            return deptDTO.getRoleId();
+        }
+    }
+
     @Override
     public LoginRVO login(LoginVO vo) {
         // 后台存储的验证码
         String serverCaptcha = String.valueOf(request.getSession().getAttribute("captcha"));
-        if (!vo.getCaptcha().equals(serverCaptcha)){
+        if (!vo.getCaptcha().equals(serverCaptcha)) {
             throw new BusinessException(CustomExceptionEnum.CAPTCHA_ERROR);
         }
         // 查询用户参数
@@ -103,8 +125,23 @@ public class AuthServiceImpl implements AuthService {
             throw new BusinessException(CustomExceptionEnum.ACCOUNT_OR_PASSWORD_INCORRECT);
         }
         DeptDTO deptDTO = deptMapper.selectByPrimaryKey(loginDTO.getDeptId());
+        // 用户设置的权限
+        Integer roleId = loginDTO.getRoleId();
+        // 登录用户未设置权限
+        if (roleId == null) {
+            // 获取部门权限
+            roleId = deptDTO.getRoleId();
+            // 当前部门也未设置权限
+            if (roleId == null) {
+                roleId = this.getRoleId(deptDTO.getParentId());
+            }
+            if (roleId == null) {
+                throw new BusinessException(CustomExceptionEnum.ACCOUNT_NOT_ROLE);
+            }
+        }
+
         // 生成jwt载体
-        JwtPayload jwtPayload = new JwtPayload(loginDTO.getId(), loginDTO.getAccount(), loginDTO.getAdminName(), loginDTO.getRoleId(), loginDTO.getDeptId(), deptDTO.getDeptName());
+        JwtPayload jwtPayload = new JwtPayload(loginDTO.getId(), loginDTO.getAccount(), loginDTO.getAdminName(), roleId, loginDTO.getDeptId(), deptDTO.getDeptName());
         // token
         String token = JwtUtils.createToken(jwtPayload, JwtConfig.ACCESS_TOKEN_EFFECTIVE);
         // refreshToken

+ 45 - 7
src/main/java/com/gz/service/system/impl/RoleServiceImpl.java

@@ -5,6 +5,8 @@ import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.lang.tree.Tree;
 import cn.hutool.core.lang.tree.TreeNodeConfig;
 import cn.hutool.core.lang.tree.TreeUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONObject;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.gz.common.DataGlobalVariable;
@@ -22,6 +24,8 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.sql.Struct;
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -87,9 +91,12 @@ public class RoleServiceImpl implements RoleService {
         String[] menuIds = vo.getMenuIds().split(",");
         String[] archiveTreeIds = vo.getArchiveTrees().split(",");
         String[] mijiIds = vo.getMjCodes().split(",");
+        String[] archiveShow = vo.getArchiveShow().split(",");
         // 删除已有的权限
         Integer i = menuRoleMapper.deleteByRoleId(vo.getRoleId());
-        if (vo.getMenuIds() != null && !"".equals(vo.getMenuIds())) {
+
+        /** 菜单权限控制*/
+        if (StrUtil.isNotEmpty(vo.getMenuIds())) {
             for (String menuId : menuIds) {
                 MenuRoleDTO menuRoleDTO = new MenuRoleDTO();
                 menuRoleDTO.setRoleId(vo.getRoleId());
@@ -98,8 +105,8 @@ public class RoleServiceImpl implements RoleService {
                 i = menuRoleMapper.insert(menuRoleDTO);
             }
         }
-
-        if (vo.getArchiveTrees() != null && !"".equals(vo.getArchiveTrees())) {
+        /** 档案树权限控制*/
+        if (StrUtil.isNotEmpty(vo.getArchiveTrees())) {
             for (String archiveTreeId : archiveTreeIds) {
                 MenuRoleDTO menuRoleDTO = new MenuRoleDTO();
                 menuRoleDTO.setRoleId(vo.getRoleId());
@@ -109,8 +116,8 @@ public class RoleServiceImpl implements RoleService {
             }
         }
 
-
-        if (vo.getMjCodes() != null && !"".equals(vo.getMjCodes())) {
+        /** 密级权限控制*/
+        if (StrUtil.isNotEmpty(vo.getMjCodes())) {
             for (String mijiId : mijiIds) {
                 MenuRoleDTO menuRoleDTO = new MenuRoleDTO();
                 menuRoleDTO.setRoleId(vo.getRoleId());
@@ -119,6 +126,16 @@ public class RoleServiceImpl implements RoleService {
                 i = menuRoleMapper.insert(menuRoleDTO);
             }
         }
+        /** 档案详情和文件权限控制*/
+        if (StrUtil.isNotEmpty(vo.getArchiveShow())) {
+            for (String s : archiveShow) {
+                MenuRoleDTO menuRoleDTO = new MenuRoleDTO();
+                menuRoleDTO.setRoleId(vo.getRoleId());
+                menuRoleDTO.setMenuId(Integer.parseInt(s));
+                menuRoleDTO.setRoleType(DataGlobalVariable.ARCHIVE_SHOW);
+                i = menuRoleMapper.insert(menuRoleDTO);
+            }
+        }
 
         return i;
     }
@@ -168,7 +185,28 @@ public class RoleServiceImpl implements RoleService {
 
     @Override
     public List<RoleDTO> selectAllRole() {
-        RoleDTO roleDTO = new RoleDTO();
-        return roleMapper.select(roleDTO);
+        return roleMapper.selectAll();
+    }
+
+    @Override
+    public List<JSONObject> selectShowArchive(Integer roleId) {
+        List<JSONObject> result = new ArrayList<>();
+        result.add(new JSONObject().put("title", "详情").put("id", 1));
+        result.add(new JSONObject().put("title", "文件").put("id", 2));
+        MenuRoleDTO menuRoleDTO = new MenuRoleDTO();
+        menuRoleDTO.setRoleType(DataGlobalVariable.ARCHIVE_SHOW);
+        menuRoleDTO.setRoleId(roleId);
+        List<MenuRoleDTO> select = menuRoleMapper.select(menuRoleDTO);
+        a:
+        for (int i = 0; i < result.size(); i++) {
+            for (MenuRoleDTO roleDTO : select) {
+                if (result.get(i).get("id", Integer.class).equals(roleDTO.getMenuId())) {
+                    result.get(i).put("checked", true);
+                    continue a;
+                }
+            }
+        }
+
+        return result;
     }
 }

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

@@ -22,6 +22,9 @@ public class SearchArchiveVO extends PageVO {
     // 门类code
     private String ml;
 
+    // 文号 文件编号
+    private String wjbh;
+
     // 保管期限code
     private String bgqx;
 
@@ -31,6 +34,8 @@ public class SearchArchiveVO extends PageVO {
     // 关键字
     private String ztc;
 
+
+
     // 高级搜索参数
     private Map<String, Object> params;
 

+ 1 - 1
src/main/java/com/gz/vo/rabbitmq/OcrEtlVO.java

@@ -12,6 +12,6 @@ public class OcrEtlVO extends ArchiveDTO {
     // 文件路径
     private String fileUrl;
 
-    // 卷内目录分类
+    // 卷内目录id
     private Integer secondaryArchiveId;
 }

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

@@ -13,6 +13,12 @@ public class AdminVO extends PageVO {
     // 管理员姓名
     private String adminName;
 
+    // 登录名
+    private String account;
+
     // 手机号
     private String phone;
+
+    // 部门id
+    private String dept;
 }

+ 1 - 0
src/main/java/com/gz/vo/system/RoleMenuVO.java

@@ -13,5 +13,6 @@ public class RoleMenuVO {
     private String menuIds;
     private String mjCodes;
     private String archiveTrees;
+    private String archiveShow;
 
 }

+ 2 - 2
src/main/resources/application-dev.yml

@@ -1,5 +1,5 @@
 server:
-  port: 9092
+  port: 9093
 spring:
   resources:
     static-locations: classpath:/static,classpath:/public,classpath:/resources,classpath:/META-INF/resources,file:${upload-file.file-root-directory},file:${upload-file.archive-file-root-directory}
@@ -91,7 +91,7 @@ spring:
           max-attempts: 5 # 重试次数
           initial-interval: 5000
 upload-file:
-  server-file-url-prefix: http://127.0.0.1:${server.port}
+  server-file-url-prefix: http://examdasfda.cn.utools.club
   file-root-directory: E:\cache
   archive-file-root-directory: E:\cache\archive
 logging:

+ 2 - 2
src/main/resources/application-prod.yml

@@ -78,10 +78,10 @@ spring:
     # 连接超时时间(毫秒)
     timeout: 30000
   rabbitmq:
-    host: 47.97.217.112
+    host: 127.0.0.1
     port: 5672
     username: admin
-    password: admin
+    password: MjmaAH4lg5o84XXj
     listener:
       simple:
         acknowledge-mode: manual

+ 5 - 5
src/main/resources/application-test.yml

@@ -1,5 +1,5 @@
 server:
-  port: 9091
+  port: 9093
 spring:
   resources:
     static-locations: classpath:/static,classpath:/public,classpath:/resources,classpath:/META-INF/resources,file:${upload-file.file-root-directory},file:${upload-file.archive-file-root-directory}
@@ -91,11 +91,11 @@ spring:
           max-attempts: 5 # 重试次数
           initial-interval: 5000
 upload-file:
-  server-file-url-prefix: http://175.24.29.29:${server.port}
-  file-root-directory: /home/archive-file
-  archive-file-root-directory: /home/file
+  server-file-url-prefix: http://66.1.21.158:${server.port}
+  file-root-directory: /data/file
+  archive-file-root-directory: /data/file/archive_file
 logging:
   file:
     path: /data/logs
 mount-archive:
-  scan-base-path: /home/挂档根目录
+  scan-base-path: /data/挂档根目录

+ 1 - 1
src/main/resources/application.yml

@@ -22,7 +22,7 @@ auth:
     # 进行登录验证的地址
     force-urls: /**
     # 跳过验证地址
-    skip-urls: /,/**/*.pdf,/**/*.png,/**/*.jpg,/**/*.html,/**/*.ico,/**/*.css,/**/*.gif,/**/*.js,/webSocket/**,/**/*.woff2,/**/*.less,/system/auth/login,/system/auth/refreshToken,/system/auth/generatePictureCaptcha,/template/*.xlsx
+    skip-urls: /,/**/*.pdf,/**/*.png,/**/*.jpg,/**/*.html,/**/*.ico,/**/*.css,/**/*.gif,/**/*.js,/webSocket/**,/**/*.woff2,/**/*.less,/system/auth/login,/system/auth/refreshToken,/system/auth/generatePictureCaptcha,/template/*.xlsx,/rabbit/test
 rabbitmq:
   # 数据交换机
   data-exchange: ARCHIVE_DATA_EXCHANGE

+ 25 - 11
src/main/resources/mapper/adminMapper.xml

@@ -3,16 +3,30 @@
 <mapper namespace="com.gz.mapper.system.AdminMapper">
 
     <select id="selectByPrimaryKeyDept" resultType="com.gz.rvo.system.AdminRVO">
-        SELECT
-            a.*,
-            IF
-                ( d.parent_id IS NULL, d.dept_name,concat(concat((SELECT c.dept_name FROM tab_dept c WHERE c.id = d.parent_id),'-'),d.dept_name)) dept_name
-        FROM
-            tab_admin a
-                LEFT JOIN tab_dept d ON a.dept_id = d.id
-        WHERE
-            a.id = #{id}
-          AND  a.deleted = 0
+        SELECT a.*,
+               IF
+                   (d.parent_id IS NULL, d.dept_name,
+                    concat(concat((SELECT c.dept_name FROM tab_dept c WHERE c.id = d.parent_id), '-'),
+                           d.dept_name)) dept_name
+        FROM tab_admin a
+                 LEFT JOIN tab_dept d ON a.dept_id = d.id
+        WHERE a.id = #{id}
+          AND a.deleted = 0
           AND d.deleted = 0
-          </select>
+    </select>
+
+    <select id="selectByPage" resultType="com.gz.dto.system.AdminDTO" parameterType="com.gz.vo.system.AdminVO">
+        select * from tab_admin
+        <where>
+            <if test="adminName != null and adminName != ''">
+                and admin_name like concat('%',concat(#{adminName},'%'))
+            </if>
+            <if test="account != null and account != ''">
+                and account like concat('%',concat(#{account},'%'))
+            </if>
+            <if test="dept != null and dept != ''">
+                and dept_id in (select d.id from tab_dept d where d.id = #{dept} or parent_id = #{dept})
+            </if>
+        </where>
+    </select>
 </mapper>

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

@@ -11,6 +11,7 @@
         AND file_type = 0
         AND af.deleted = 0
     </where>
+        ORDER BY sa.sxh asc
     </select>
 
 </mapper>

+ 8 - 2
src/main/resources/mapper/archiveMapper.xml

@@ -30,6 +30,9 @@
             <if test="mlh != null and mlh != ''">
                 AND a.mlh = #{mlh}
             </if>
+            <if test="wjbh != null and wjbh != ''">
+                AND a.wjbh like concat(concat('%',#{wjbh}),'%')
+            </if>
             <if test="ml != null and ml != ''">
                 AND a.ml = #{ml}
             </if>
@@ -67,6 +70,9 @@
             <if test="mlh != null and mlh != ''">
                 AND a.mlh = #{mlh}
             </if>
+            <if test="wjbh != null and wjbh != ''">
+                AND a.wjbh like concat(concat('%',#{wjbh}),'%')
+            </if>
             <if test="ml != null and ml != ''">
                 AND a.ml = #{ml}
             </if>
@@ -179,8 +185,8 @@
                                concat((SELECT c.title FROM tab_archives_tree c WHERE c.id = atr.parent_id), '-'),
                                atr.title
                            )
-                   )       mlText,
-               d.dict_name mjText,
+                   )        mlText,
+               d.dict_name  mjText,
                d1.dict_name bgqxText,
                a.*
         FROM tab_archives a

+ 1 - 1
src/main/resources/mapper/archivesTreeMapper.xml

@@ -16,7 +16,7 @@
         WHERE
             mr.role_type = 1
           AND mr.role_id = #{roleId}
-        group by tat.code
+<!--        group by tat.code-->
         order by tat.sort
     </select>
 </mapper>

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

@@ -17,16 +17,16 @@ layui.define(['jquery', 'layer'], function (exports) {
 
         let processData = true // 告诉jquery不要处理发送的数据
         let contentType = false
-        switch (type){
+        switch (type) {
             case "GET":
                 headers['Content-Type'] = 'application/json;charset=utf-8;'
                 break;
             case "POST":
-                if (data instanceof FormData){
+                if (data instanceof FormData) {
                     // headers['Content-Type'] = 'application/x-www-form-urlencoded'
                     processData = false
                     contentType = false
-                }else {
+                } else {
                     data = JSON.stringify(data)
                     headers['Content-Type'] = 'application/json;charset=utf-8;'
                 }
@@ -64,6 +64,8 @@ layui.define(['jquery', 'layer'], function (exports) {
                 } else if (res.code == 303) {
                     // 过期需要刷新Token
                     refreshToken(method, type, dataObj, async, callback)
+                } else if (res.code == 1200) {
+                    callback(res)
                 } else {
                     layer.msg(res.msg, {
                         icon: 2,
@@ -78,6 +80,7 @@ layui.define(['jquery', 'layer'], function (exports) {
                             window.location.href = 'login.html'
                         }
                     });
+                    callback(res)
                 }
             },
             error: function (e) {

+ 142 - 50
src/main/resources/static/page/admin/list.html

@@ -9,8 +9,32 @@
 <body>
 <div class="layuimini-container">
     <div class="layuimini-main">
+        <div style="float: left;width: 15%;overflow-y:scroll;height: 800px">
+            <div id="tree"></div>
+        </div>
         <div>
-            <table class="layui-hide" id="paper-table" lay-filter="paper-table"></table>
+            <div style="float: left;width: 85%;">
+
+                <div class="layui-form toolbar">
+                    <div class="layui-form-item">
+                        <div class="layui-inline">
+                            <input type="text" id="adminName" name="adminName" lay-filter="adminName"
+                                   placeholder="请输入姓名"
+                                   class="layui-input">
+                        </div>
+                        <div class="layui-inline">
+                            <input type="text" id="account" name="account" lay-filter="account" placeholder="请输入登录名"
+                                   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>
+                <table class="layui-hide" id="paper-table" lay-filter="paper-table"></table>
+            </div>
         </div>
     </div>
 </div>
@@ -29,70 +53,130 @@
 <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(['table', 'http', 'form'], function () {
+    layui.use(['table', 'http', 'form', 'tree'], function () {
         /**变-------------------------------量-------------------------------定-------------------------------义*/
 
         var table = layui.table,
             http = layui.http,
             form = layui.form,
+            tree = layui.tree,
             $ = layui.jquery;
 
         let curr = 1;
+
+        let searchParam = {}
         /**方-------------------------------法-------------------------------定-------------------------------义*/
         http.getRoleButton(39)
         //数据加载方法
         let renderTable = function () {
-                // 加载表格数据
-                table.render({
-                    elem: '#paper-table',
-                    url: 'system/admin/select',
-                    toolbar: '#toolbar', //开启头部工具栏,并为其绑定左侧模板
-                    defaultToolbar: ['filter', 'exports', 'print'],
-                    title: '用户数据表',
-                    limit: 15,
-                    limits: [15, 30, 45, 60],
-                    page: {
-                        curr: curr
-                    },
-                    request: {
-                        pageName: 'pageNum',
-                        limitName: 'pageSize'
-                    },
-                    response: {
-                        statusCode: 200 //重新规定成功的状态码为 200,table 组件默认为 0
-                    },
-                    parseData: function (res) {
-                        return {
-                            "code": res.code,
-                            "msg": res.msg,
-                            "count": res.data.total,
-                            "data": res.data.list
+            // 加载表格数据
+            table.render({
+                elem: '#paper-table',
+                url: 'system/admin/select',
+                toolbar: '#toolbar', //开启头部工具栏,并为其绑定左侧模板
+                defaultToolbar: ['filter', 'exports', 'print'],
+                title: '用户数据表',
+                limit: 15,
+                limits: [15, 30, 45, 60],
+                page: {
+                    curr: curr
+                },
+                request: {
+                    pageName: 'pageNum',
+                    limitName: 'pageSize'
+                },
+                where: searchParam,
+                response: {
+                    statusCode: 200 //重新规定成功的状态码为 200,table 组件默认为 0
+                },
+                parseData: function (res) {
+                    return {
+                        "code": res.code,
+                        "msg": res.msg,
+                        "count": res.data.total,
+                        "data": res.data.list
+                    }
+                },
+                done: function (res, curr1, count) {
+                    curr = curr1
+                    // $('th').css({'background-color': '#1aa094', 'color': '#fff','font-weight':'bold'})
+                },
+                cols: [[
+                    // {type: 'checkbox', fixed: 'left'}
+                    {type: 'numbers'},
+                    {field: 'adminName', title: '姓名'},
+                    {field: 'account', title: '登录名'},
+                    {field: 'idCard', title: '身份证号'},
+                    {field: 'email', title: '邮箱'},
+                    {field: 'phone', title: '手机'},
+                    {field: 'createTime', title: '创建时间'},
+                    {
+                        field: 'status', title: '用户状态',
+                        templet: function (rv) {
+                            return '<input type="checkbox" value="' + rv.id + '" name="status" ' + (rv.status == 0 ? 'checked' : '') + ' lay-skin="switch" lay-filter="switchTest" lay-text="正常|禁用">'
                         }
                     },
-                    done: function(res, curr1, count) {
-                        curr = curr1
-                        // $('th').css({'background-color': '#1aa094', 'color': '#fff','font-weight':'bold'})
-                    },
-                    cols: [[
-                        // {type: 'checkbox', fixed: 'left'}
-                        {type: 'numbers'},
-                        {field: 'adminName', title: '用户名'},
-                        {field: 'account', title: '登录名'},
-                        {field: 'idCard', title: '身份证号'},
-                        {field: 'email', title: '邮箱'},
-                        {field: 'phone', title: '手机'},
-                        {field: 'createTime', title: '创建时间'},
-                        {
-                            field: 'status', title: '用户状态',
-                            templet: function (rv) {
-                                return '<input type="checkbox" value="' + rv.id + '" name="status" ' + (rv.status == 0 ? 'checked' : '') + ' lay-skin="switch" lay-filter="switchTest" lay-text="正常|禁用">'
+                    {templet: '#operating', align: 'center', title: '操作', width: 300}
+                ]]
+            });
+
+        }
+
+        // 加载组织架构
+        let loadTree = function () {
+            http.get('system/dept/selectTree', {}, false, function (res) {
+                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({
+                    elem: '#tree'
+                    , data: res.data
+                    , showCheckbox: false  //是否显示复选框
+                    , onlyIconControl: true
+                    , id: 'tree'
+                    , isJump: true //是否允许点击节点时弹出新窗口跳转
+                    , click: function (obj) {
+                        //节点高亮
+                        var nodes = document.getElementsByClassName("layui-tree-txt");
+                        for (var i = 0; i < nodes.length; i++) {
+                            if (nodes[i].innerHTML === obj.data.title) {
+                                if (nodes[i].style.color === 'red') {
+                                    // 当前节点已经选中 跳过
+                                    return
+                                }
+                                nodes[i].style.color = "red"
+                            } else {
+                                nodes[i].style.color = "#555"
                             }
-                        },
-                        {templet: '#operating', align: 'center', title: '操作', width: 300}
-                    ]]
+                        }
+                        var data = obj.data;  //获取当前点击的节点数据
+                        if (searchParam.title != '全部') {
+                            searchParam.dept = data.id
+                        }
+                        renderTable()
+                    }
                 });
+                // 设置默认第一项红色
+                var nodes = document.getElementsByClassName("layui-tree-txt");
+                for (var i = 0; i < nodes.length; i++) {
+                    if (nodes[i].innerHTML === res.data[0].title)
+                        nodes[i].style.color = "red";
+                    else
+                        nodes[i].style.color = "#555";
+                }
+            })
+        }
+
+        loadTree()
 
-            }
 
         //添加方法
         let addPaper = function () {
@@ -173,7 +257,7 @@
 
         let resetPassword = function (id) {
             layer.confirm('确定要将密码重置为123456吗?', function (index) {
-                http.post('system/admin/resetPassword', id.toString(), true, function (res) {
+                http.post('system/admin/resetPassword', id, true, function (res) {
                     if (res.code == 200) {
                         layer.msg('重置成功', {
                             icon: 1,
@@ -220,8 +304,16 @@
             }
         })
 
+        form.on('submit(search)', function (data) {
+            searchParam.adminName = data.field.adminName
+            searchParam.account = data.field.account
+            renderTable()
+        })
+
         form.on('switch(switchTest)', function (obj) {
-            http.post('system/admin/updateStatus', this.value, true, function (res) {
+            http.get('system/admin/updateStatus', {
+                id: obj.value
+            }, true, function (res) {
                 if (res.code == 200) {
                     layer.msg('修改成功')
                 }

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

@@ -27,6 +27,9 @@
                     <div class="layui-inline">
                         <input type="text" id="dh" name="dh" lay-filter="dh" placeholder="请输入档号" class="layui-input">
                     </div>
+                    <div class="layui-inline">
+                        <input type="text" id="wjbh" name="wjbh" lay-filter="wjbh" placeholder="请输入文号" class="layui-input">
+                    </div>
                     <div class="layui-inline" style="width: 100px;">
                         <input type="text" id="gdnd" name="gdnd" lay-filter="gdnd" placeholder="归档年度"
                                class="layui-input">
@@ -331,7 +334,7 @@
                     var body = layer.getChildFrame('body', index);
                 },
                 end: function () {
-                    // renderTable()
+                    renderTable()
                 }
             });
         }
@@ -627,6 +630,7 @@
             searchParam.gdnd = data.field.gdnd
             searchParam.mj = data.field.mj
             searchParam.ztc = data.field.ztc
+            searchParam.wjbh = data.field.wjbh
             searchParam.again = true
             renderTable()
         })
@@ -638,6 +642,7 @@
             searchParam.gdnd = data.field.gdnd
             searchParam.mj = data.field.mj
             searchParam.ztc = data.field.ztc
+            searchParam.wjbh = data.field.wjbh
             searchParam.again = false
             $("#resultSearch").show()
             renderTable()

+ 39 - 12
src/main/resources/static/page/archive/show.html

@@ -25,7 +25,12 @@
             box-sizing: border-box;
             color: #fff;
             cursor: pointer;
-            padding: 0 30px;
+            padding: 0 10px;
+            word-break: keep-all;
+            white-space: nowrap;
+            overflow: hidden;
+            text-overflow: ellipsis;
+            font-size: 12px;
         }
 
         table tr td, th {
@@ -53,7 +58,7 @@
 
 <div class="layui-tab layui-tab-brief" lay-filter="docDemoTabBrief">
     <ul class="layui-tab-title">
-        <li class="layui-this">档案信息</li>
+        <li class="layui-this" lay-id="0">档案信息</li>
         <li id="file_tab_list">文件预览</li>
     </ul>
     <div class="layui-tab-content" style="height: 100px;">
@@ -99,11 +104,11 @@
             <div class="layui-fluid" style="height: 100%">
                 <div class="layui-row">
                     <div class="layui-col-md2" id="files">
-                        <ul id="file_list" class="layui-bg-black" style="height: calc(96vh);">
+                        <ul id="file_list" class="layui-bg-black" style="height: calc(90vh);">
                         </ul>
                     </div>
                     <div class="layui-col-md10" id="pdf_yl">
-                        <iframe src="" frameborder="0" id="pdf_show" style="width: 100%; height: calc(96vh);"></iframe>
+                        <iframe src="" frameborder="0" id="pdf_show" style="width: 100%; height: calc(90vh);"></iframe>
                     </div>
                 </div>
             </div>
@@ -134,6 +139,8 @@
             return;
         }
 
+        let isShowFile = true;
+
 
         $(document).on('click', 'li>a', function () {
             $("#file_list").children("li").removeClass("layui-bg-green")
@@ -170,13 +177,16 @@
                     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>'
+                            html += '<li class="layui-bg-green"><a title="' + (i + 1) + '、' + (item.jnml ? item.jnml : '档案文件') + '" pdf_src="' + item.filePath + '/' + item.fileName + '">' + (i + 1) + '、' + (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>'
+                            html += '<li><a title="' + (i + 1) + '、' + (item.jnml ? item.jnml : '档案文件') + '" pdf_src="' + item.filePath + '/' + item.fileName + '">' + (i + 1) + '、' + (item.jnml ? item.jnml : '档案文件') + '</a></li>'
                         }
                     }
                     $("#file_list").append(html)
+                } else {
+                    // $("#file_tab_list").hide()
+                    isShowFile = false
                 }
             })
         }
@@ -185,6 +195,7 @@
             http.get('archive/archive/selectByPrimaryKeyText', {
                 id: archive_id
             }, false, res => {
+                console.log(res)
                 if (res.code == 200) {
                     $("#dh").text(res.data.dh ? res.data.dh : '无');
                     $("#tm").text(res.data.tm ? res.data.tm : '无');
@@ -196,18 +207,34 @@
                     $("#zrz").text(res.data.zrz ? res.data.zrz : '无');
                     $("#nrgs").text(res.data.nrgs ? res.data.nrgs : '无');
                     $("#remarks").text(res.data.bz ? res.data.bz : '无');
+                } else {
+                    layer.msg('您当前没有权限查看该档案,请联系管理员。', {
+                        icon: 2,
+                    }, function () {
+                        // 关闭弹出层
+                        let iframeIndex = parent.layer.getFrameIndex(window.name);
+                        parent.layer.close(iframeIndex);
+                    })
                 }
             })
         }
         initData()
-        initFile()
-
 
+        initFile()
         element.on('tab(docDemoTabBrief)', function (data) {
-            // let index = data.index;
-            // if (index == 1){
-            //
-            // }
+            let index = data.index;
+            if (index == 1) {
+                if (!isShowFile) {
+                    element.tabChange('docDemoTabBrief', '0');
+                    layer.msg('您当前没有权限查看该档案文件,请联系管理员。', {
+                        icon: 2,
+                    }, function () {
+                        // // 关闭弹出层
+                        // let iframeIndex = parent.layer.getFrameIndex(window.name);
+                        // parent.layer.close(iframeIndex);
+                    })
+                }
+            }
         });
     })
 </script>

+ 9 - 5
src/main/resources/static/page/borrow/list.html

@@ -280,7 +280,11 @@
                     {type: 'numbers'},
                     {field: 'dh', title: '档号', width: 240, sort: true},
                     {field: 'jh', title: '件号', width: 80, sort: true},
-                    {field: 'tm', title: '题名', width: 700},
+                    {
+                        field: 'tm', title: '题名', width: 700, event: 'tm', templet: function (rv) {
+                            return '<a style="color: cornflowerblue;text-decoration: underline" href="#">' + rv.tm + '</a>'
+                        }
+                    },
                     {field: 'gdnd', title: '归档年度', width: 120, sort: true},
                     {field: 'zrz', title: '责任者', width: 120},
                     {field: 'mjText', title: '密级', width: 80},
@@ -473,13 +477,13 @@
                 maxmin: true,
                 shadeClose: true,
                 area: ['100%', '100%'],
-                content: '../archive/show.html',
+                content: '../archive/show.html' + '?id=' + id,
                 success: function (layero, index) {
-                    var body = layer.getChildFrame('body', index);
-                    body.find("#archive_id").val(id);
+                    // var body = layer.getChildFrame('body', index);
+                    // body.find("#archive_id").val(id);
                 },
                 end: function () {
-                    renderTable()
+                    // renderTable()
                 }
             });
         }

+ 21 - 0
src/main/resources/static/page/dept/edit.html

@@ -34,6 +34,15 @@
     </div>
 
     <div class="layui-form-item">
+        <label class="layui-form-label required">权限</label>
+        <div class="layui-input-block">
+            <select name="roleId" id="roleId">
+                <option value="">请选择</option>
+            </select>
+        </div>
+    </div>
+
+    <div class="layui-form-item">
         <label class="layui-form-label">排序</label>
         <div class="layui-input-block">
             <input type="number" name="deptOrder" class="layui-input" lay-verify="">
@@ -127,8 +136,20 @@
                 })
             }
         }
+
+        let initSelect = function () {
+            http.get('system/role/selectAllRole', {}, false, function (res) {
+                let html = '';
+                for (let i in res.data) {
+                    html += '<option value="' + res.data[i].id + '">' + res.data[i].roleName + '</option>'
+                }
+                $("#roleId").append(html)
+                form.render();//菜单渲染 把内容加载进去
+            })
+        }
         /**事-------------------------------件-------------------------------绑-------------------------------定*/
 
+        initSelect()
         initData()
         loadDictSelect()
         //监听提交

+ 10 - 10
src/main/resources/static/page/menu/addMenu.html

@@ -45,13 +45,13 @@
         </div>
     </div>
 
-    <div class="layui-form-item">
-        <label class="layui-form-label">菜单图标</label>
-        <div class="layui-input-block">
-            <input type="text" id="selectIcon" name="icon" lay-filter="iconPicker" lay-verify="" lay-reqtext="菜单图标不能为空"
-                   class="hide">
-        </div>
-    </div>
+<!--    <div class="layui-form-item">-->
+<!--        <label class="layui-form-label">菜单图标</label>-->
+<!--        <div class="layui-input-block">-->
+<!--            <input type="text" id="selectIcon" name="icon" lay-filter="iconPicker" lay-verify="" lay-reqtext="菜单图标不能为空"-->
+<!--                   class="hide">-->
+<!--        </div>-->
+<!--    </div>-->
 
     <div class="layui-form-item">
         <label class="layui-form-label">菜单地址</label>
@@ -192,9 +192,9 @@
         loadDictSelect()
         //监听提交
         form.on('submit(saveBtn)', function (data) {
-            let icon = 'fa '
-            icon += data.field.icon
-            data.field.icon = icon
+            // let icon = 'fa '
+            // icon += data.field.icon
+            // data.field.icon = icon
             save(data.field)
         });
 

+ 6 - 6
src/main/resources/static/page/menu/menuList.html

@@ -58,12 +58,12 @@
                 cols: [[
                     {type: 'numbers'},
                     {field: 'title',  title: '菜单标题'},
-                    {
-                        field: 'icon', title: '菜单图标',
-                        templet: function (rv) {
-                            return '<i class="'+rv.icon+'"></i> '
-                        }
-                    },
+                    // {
+                    //     field: 'icon', title: '菜单图标',
+                    //     templet: function (rv) {
+                    //         return '<i class="'+rv.icon+'"></i> '
+                    //     }
+                    // },
                     {field: 'href', title: '菜单地址'},
                     {field: 'sort', title: '排序'},
                     {

+ 36 - 9
src/main/resources/static/page/role/editRole.html

@@ -19,7 +19,7 @@
 <div class="layuimini-container" style="width: 80%;margin: 0 auto">
     <div class="layui-form layuimini-form" lay-filter="addPaper">
         <div class="layui-row layui-col-space30">
-            <div class="layui-col-md4">
+            <div class="layui-col-md3">
                 <div class="layui-card">
                     <div class="layui-card-header"><i class="layui-icon layui-icon-menu-fill"></i>菜单权限</div>
                     <div class="layui-card-body">
@@ -27,7 +27,7 @@
                     </div>
                 </div>
             </div>
-            <div class="layui-col-md4">
+            <div class="layui-col-md3">
                 <div class="layui-card">
                     <div class="layui-card-header"><i class="layui-icon layui-icon-tree"></i>档案树权限</div>
                     <div class="layui-card-body">
@@ -35,7 +35,7 @@
                     </div>
                 </div>
             </div>
-            <div class="layui-col-md4">
+            <div class="layui-col-md3">
                 <div class="layui-card">
                     <div class="layui-card-header"><i class="layui-icon layui-icon-camera"></i>密级权限</div>
                     <div class="layui-card-body">
@@ -43,15 +43,24 @@
                     </div>
                 </div>
             </div>
+            <div class="layui-col-md3">
+                <div class="layui-card">
+                    <div class="layui-card-header"><i class="layui-icon layui-icon-camera"></i>档案权限</div>
+                    <div class="layui-card-body">
+                        <div id="archive-role"></div>
+                    </div>
+                </div>
+            </div>
+
         </div>
     </div>
 </div>
-    <div class="layui-form-item">
-        <div class="layui-input-block">
-            <button class="layui-btn layui-btn-normal" lay-submit lay-filter="saveBtn">确认保存</button>
-        </div>
+<div class="layui-form-item">
+    <div class="layui-input-block">
+        <button class="layui-btn layui-btn-normal" lay-submit lay-filter="saveBtn">确认保存</button>
     </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>
@@ -121,14 +130,32 @@
             })
         }
 
+        let initArchive = () => {
+            http.get('system/role/selectShowArchive', {roleId: id}, true, res => {
+               if (res.code == 200){
+                   tree.render({
+                       elem: '#archive-role'
+                       , data: res.data
+                       , showCheckbox: true  //是否显示复选框
+                       , id: 'archive-role'
+                   });
+               }
+            })
+
+        }
+
+        initArchive()
+
         //保存方法
         let save = function () {
             let data = {
                 roleId: id,
                 menuIds: getChecked_list(tree.getChecked("menu-role")),
                 mjCodes: getChecked_list(tree.getChecked("miji-role")),
-                archiveTrees: getChecked_list(tree.getChecked("archive-tree-role"))
+                archiveTrees: getChecked_list(tree.getChecked("archive-tree-role")),
+                archiveShow: getChecked_list(tree.getChecked("archive-role"))
             }
+            console.log(data)
             http.post('system/role/setRole', data, true, function (res) {
                 if (res.code == 200) {
                     let index = layer.alert('保存成功!', {
@@ -141,7 +168,7 @@
                     });
                 }
             })
-        }
+    }
 
         /**事-------------------------------件-------------------------------绑-------------------------------定*/
 

BIN
src/main/resources/static/template/导入模板.xlsx


+ 1 - 2
src/main/resources/static/updatePassword.html

@@ -65,8 +65,7 @@
         // 自定义校验规则
         form.verify({
             pass: [
-                /^[\S]{6,12}$/
-                , '密码必须6到12位,且不能出现空格'
+                /[\S]+/, "密码不能为空"
             ]
             , content: function (value) {
                 layedit.sync(editIndex);