杜洪波
7 天以前 f423a12228518ca34b8e380b0515dd01ae91b02e
src/main/java/com/product/file/service/DocumentService.java
@@ -25,6 +25,7 @@
import org.springframework.stereotype.Component;
import java.util.*;
import java.util.stream.Collectors;
/**
 * Copyright lx
@@ -143,27 +144,24 @@
      StringBuffer sql = new StringBuffer();
      sql.append("SELECT \n");
      sql.append("  A.*,B.show_name name, \n");
      sql.append("  E.route_name,A.*,B.show_name name, \n");
      sql.append("  CONCAT(CONVERT(a.file_size / 1024, decimal(10,2)), 'KB') file_size_kb, \n");
      sql.append("  CASE WHEN D.document_uuid IS NOT NULL THEN '1' ELSE '0' END AS is_collection, \n");
      sql.append(" (SELECT case when COUNT(*)=0 then 1 else COUNT(*) end  FROM product_oa_document_history where product_oa_document_history.document_uuid=A.uuid) -1 history_count ");
      sql.append("FROM( \n");
      sql.append(" ,if(A.turn_button is null,'否','是') turn");
      sql.append(" FROM( \n");
      if ("!borrow".equals(directory_uuid)) {
         //借阅文件夹查询文件特殊处理
         sql.append("SELECT\n");
         sql.append("doc.*\n");
         sql.append("      FROM\n");
         sql.append("product_oa_directory dir\n");
         sql.append("JOIN product_oa_document doc ON dir.uuid = doc.uuid\n");
         sql.append("WHERE\n");
         sql.append("dir.directory_type = 1\n");
         sql.append("AND doc.attachments_uuid IN (\n");
         sql.append("      SELECT\n");
         sql.append("   sub_uuid\n");
         sql.append("      FROM\n");
         sql.append("   product_oa_document_borrow_sub\n");
         sql.append("      WHERE\n");
         sql.append("   borrow_uuid IN ( SELECT uuid FROM product_oa_document_borrow WHERE borrower = ? AND flow_flag=2))\n");
         sql.append("  SELECT\n");
         sql.append("    doc.*\n");
         sql.append("  FROM product_oa_document doc \n");
         sql.append("  JOIN product_oa_directory dir ON dir.uuid = doc.directory_uuid \n");
         sql.append("  WHERE dir.directory_type = 1\n");
         sql.append("  AND doc.attachments_uuid IN (\n");
         sql.append("    SELECT sub_uuid\n");
         sql.append("    FROM product_oa_document_borrow_sub\n");
         sql.append("    WHERE borrow_uuid IN ( SELECT uuid FROM product_oa_document_borrow WHERE borrower = ? AND flow_flag=2)\n");
         sql.append("  )\n");
         directory_uuid = SpringMVCContextHolder.getCurrentUserId();
      } else if ("!favorite".equals(directory_uuid)) {
         sql.append("SELECT\n");
@@ -182,7 +180,9 @@
      sql.append(")A \n");
      sql.append("LEFT JOIN product_sys_staffs B ON B.user_id = A.created_by \n");
      sql.append("LEFT JOIN product_sys_attachments C ON C.uuid = B.staff_avatar \n");
      sql.append("LEFT JOIN product_oa_document_collection D ON D.document_uuid = A.uuid AND D.created_by = ?");
      sql.append("LEFT JOIN product_oa_document_collection D ON D.document_uuid = A.uuid AND D.created_by = ? \n");
      sql.append("LEFT JOIN product_sys_function_buttons E ON E.uuid = A.turn_button ");
      DataTableEntity documentData = baseDao.listTable(sql.toString(), new String[]{directory_uuid, SpringMVCContextHolder.getCurrentUserId()},
            fieldSetEntity.getInteger(CmnConst.PAGESIZE), fieldSetEntity.getInteger(CmnConst.CPAGE));
      baseDao.listInternationDataTable(documentData, null);
@@ -321,51 +321,46 @@
   @Override
   public FieldSetEntity getButtonPermissions(FieldSetEntity fieldSetEntity) throws BaseException {
      String butt = "";
      String finalButtonPermissions = "";
      DataTableEntity dataTable = null;
      FieldSetEntity fse = new FieldSetEntity();
      fse.setTableName(CmnConst.PRODUCT_OA_DOCUMENT);
      if (StringUtils.equalsAny(fieldSetEntity.getString(CmnConst.DIRECTORY_UUID), "!borrow", "!favorite")) {
         // 收藏夹和借阅文件夹特殊处理
         dataTable = this.documentAll(fieldSetEntity);
         butt = "1,2";
         finalButtonPermissions = "1,2";
      } else if ("1".equals(fieldSetEntity.getString(CmnConst.DIRECTORY_TYPE))) {
         //获取的user_id
         Integer user_id = SpringMVCContextHolder.getCurrentUser().getUser_id();
         String key = "%," + user_id + ",%";
         //获取当前点击文件夹UUID
         String directory_uuid = fieldSetEntity.getString(CmnConst.DIRECTORY_UUID);
         //String key = "%,140,%";
         DataTableEntity dataTableEntity = new DataTableEntity();
         FieldSetEntity org = baseDao.getFieldSetByFilter(CmnConst.PRODUCT_OA_DIRECTORY_RIGHTS, "directory_uuid=?", new String[]{directory_uuid}, false);
         if (verifyOrgExist(org.getString("storage_uuid"))) {
            StringBuffer sql = new StringBuffer();
            sql.append(" SELECT  substring_index(substring_index(a.rigths,',',b.help_topic_id+1),',',-1) fun FROM  PRODUCT_OA_directory_rights a ")
                  .append(" INNER join   mysql.help_topic b on b.help_topic_id < (length(a.rigths) - length(replace(a.rigths,',',''))+1) ")
                  .append(" WHERE a.directory_uuid = ? ");
            dataTableEntity = baseDao.listTable(sql.toString(), new String[]{directory_uuid});
         }
         StringBuffer button = new StringBuffer();
         if (!BaseUtil.dataTableIsEmpty(dataTableEntity)) {
            for (int i = 0, length = dataTableEntity.getRows(); i < length; i++) {
               FieldSetEntity field = dataTableEntity.getFieldSetEntity(i);
               String fun = field.getString("fun");
               //权限1(查看),2(下载),3(新增上传),4(修改,重命名),5(删除),6(移动)
               button.append(fun).append(",");
               if ("1".equals(fun)) {
                  //有查看权限就加载列表
                  dataTable = this.documentAll(fieldSetEntity);
         // 获取点击文件夹的操作权限(如果当前文件夹没有配置权限,则递归上级目录权限)
         DataTableEntity dtOperationPermissions = recursionRole(directory_uuid);
         if (!BaseUtil.dataTableIsEmpty(dtOperationPermissions)) {
            String buttonPermissions = ",";
            for (int i = 0; i < dtOperationPermissions.getRows(); i++) {
               // 获取单条操作权限数据
               FieldSetEntity fseOperationPermissions = dtOperationPermissions.getFieldSetEntity(i);
               // 验证操作权限是否与当前操作人匹配成功
               if (verifyOrgExist(fseOperationPermissions.getString("storage_uuid"))) {
                  // 按钮权限拼接
                  buttonPermissions += fseOperationPermissions.getString("rigths") + ",";
               }
            }
         }
         if (!BaseUtil.strIsNull(button.toString())) {
            butt = button.substring(0, button.length() - 1);
            if (!BaseUtil.strIsNull(buttonPermissions)) {
               // 判断是否包含查看权限,包含查看权限则获取文件列表
//               if (buttonPermissions.contains(",1,")) {
                  dataTable = this.documentAll(fieldSetEntity);
//               }
               finalButtonPermissions = Arrays.stream(buttonPermissions.split(","))
                         .filter(s -> !s.isEmpty())
                         .distinct()
                         .collect(Collectors.joining(","));
            }
         }
      } else {
         dataTable = this.documentAll(fieldSetEntity);
      }
      Map<String, DataTableEntity> dataMap = MapUtils.newHashMap();
      fse.setValue("button", butt);
      fse.setValue("button", finalButtonPermissions);
      //加载文件路径
      DataTableEntity file_list;
      if (StringUtils.equalsAny(fieldSetEntity.getString(CmnConst.DIRECTORY_UUID), "!borrow", "!favorite")) {
@@ -391,6 +386,21 @@
      fse.setSubData(dataMap);
      return fse;
   }
   /**
    * 递归获取权限如果当前文档未配置权限就去递归查询父级权限
    * @param directory_uuid
    * @return
    */
   private DataTableEntity recursionRole(String directory_uuid){
      DataTableEntity dtOperationPermissions = baseDao.listTable(CmnConst.PRODUCT_OA_DIRECTORY_RIGHTS, "directory_uuid = ?", new Object[] {directory_uuid});
      if (BaseUtil.dataTableIsEmpty(dtOperationPermissions)) {
         FieldSetEntity fseDirectory = baseDao.getFieldSet(CmnConst.PRODUCT_OA_DIRECTORY, directory_uuid,false);
         FieldSetEntity fseDirectoryParent = baseDao.getFieldSetByFilter(CmnConst.PRODUCT_OA_DIRECTORY, "tricode=?",new String[]{fseDirectory.getString("tricode_parent")},false);
         dtOperationPermissions = recursionRole(fseDirectoryParent.getUUID());
      }
      return dtOperationPermissions;
   }
   @Override
@@ -634,24 +644,27 @@
   @Override
   public DataTableEntity getApplyDocument(FieldSetEntity fse) throws BaseException {
      DataTableEntity product_oa_document = new DataTableEntity();
      StringBuilder sb = new StringBuilder();
      sb.append(" select  d.*,f.show_name ");
      sb.append(" from product_oa_document d ");
      sb.append(" left join  product_sys_staffs f ");
      sb.append(" on d.created_by=f.user_id ");
      List<String> param = new ArrayList<>();
      if (!ObjectUtil.isNotEmpty(fse.getString("document_name"))) {
         product_oa_document = baseDao.listTable(sb.toString(), param.toArray());
      String sub_uuid = fse.getString("sub_uuid");
      String sub_uuid_replace = sub_uuid.replace("\"", "");
      String[] sub_uuid_split = sub_uuid_replace.split(",");
      String sub_uuids="";
      for (int i = 0; i < sub_uuid_split.length; i++) {
      } else {
         String document_name = fse.getString("document_name");
         sb.append(" where d.file_name like '%" + document_name + "%'");
         product_oa_document = baseDao.listTable(sb.toString(), param.toArray());
         if(i==sub_uuid_split.length-1){
            sub_uuids=sub_uuids+"\""+sub_uuid_split[i]+"\"";
         }else {
            sub_uuids=sub_uuids+"\""+sub_uuid_split[i]+"\",";
         }
      }
      return product_oa_document;
      List<String> param = new ArrayList<>();
      StringBuilder sb=new StringBuilder();
      sb.append(" SELECT a.*,f.show_name");
      sb.append(" FROM product_sys_attachments a  ");
      sb.append(" LEFT JOIN  product_sys_staffs f ");
      sb.append(" on a.created_by =f.user_id ");
      sb.append(" where a.uuid in ("+sub_uuids+")");
        DataTableEntity product_sys_attachments = baseDao.listTable(sb.toString(),param.toArray());
        return product_sys_attachments;
   }
   @Override
@@ -706,14 +719,14 @@
      StringBuilder sb = new StringBuilder();
      List<String> param = new ArrayList<>();
      sb.append(" SELECT b.* FROM (");
      sb.append(" SELECT t.uuid,t.file_name,t.file_size,s.show_name,t.created_utc_datetime,count(t.uuid) as applyCount");
      sb.append(" SELECT t.uuid,t.file_name,t.attachment_size as file_size,s.show_name,t.created_utc_datetime,count(t.uuid) as applyCount");
      sb.append(" FROM product_oa_document_borrow_sub b");
      sb.append(" JOIN product_oa_document t");
      sb.append(" JOIN product_sys_attachments t");
      sb.append(" on b.sub_uuid=t.uuid");
      sb.append(" JOIN product_sys_staffs s ");
      sb.append(" on t.created_by=s.user_id");
      sb.append(" group by t.file_name,t.uuid,s.show_name,t.created_utc_datetime,t.file_size");
      sb.append(" )b order by  b.applyCount asc");
      sb.append(" group by t.file_name,t.uuid,s.show_name,t.created_utc_datetime,t.attachment_size");
      sb.append(" )b order by  b.applyCount DESC");
      DataTableEntity dataTableEntity = baseDao.listTable(sb.toString(), param.toArray());
      return dataTableEntity;
   }
@@ -737,14 +750,14 @@
      sb.append(" FROM product_oa_document_borrow  w ");
      sb.append(" left JOIN product_oa_document_borrow_sub b");
      sb.append(" on b.borrow_uuid=w.uuid");
      sb.append(" left JOIN product_oa_document t");
      sb.append(" left JOIN product_sys_attachments t");
      sb.append(" on b.sub_uuid=t.uuid");
      sb.append(" left JOIN product_sys_staffs s");
      sb.append(" on w.borrower=s.user_id");
      sb.append(" GROUP BY w.borrower,s.show_name");
      sb.append(" )a )b");
      sb.append(" on a.borrower=b.borrower ");
      sb.append(" order by a.applayCount,b.applayFileCount asc");
      sb.append(" order by a.applayCount,b.applayFileCount DESC");
      DataTableEntity dataTableEntity = baseDao.listTable(sb.toString(), param.toArray());
      return dataTableEntity;
   }