许鹏程
2024-08-29 a442684c5dab265ecd8f5d9de3276ed8e88eda7c
src/main/java/com/product/file/service/DocumentService.java
@@ -6,6 +6,7 @@
import com.product.common.collect.ListUtils;
import com.product.common.collect.MapUtils;
import com.product.common.lang.DateUtils;
import com.product.common.lang.StringUtils;
import com.product.core.dao.BaseDao;
import com.product.core.entity.DataTableEntity;
import com.product.core.entity.FieldMetaEntity;
@@ -23,10 +24,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.*;
/**
 * Copyright lx
@@ -140,14 +138,46 @@
        if (!BaseUtil.strIsNull(queryFilter)) {
            queryFilter = " AND " + queryFilter;
        }
      // file_name created_by  created_utc_datetime
        StringBuffer sql = new StringBuffer();
        sql.append("SELECT \n");
        sql.append("  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("  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");
      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");
         directory_uuid = SpringMVCContextHolder.getCurrentUserId();
      } else if ("!favorite".equals(directory_uuid)) {
         sql.append("SELECT\n");
         sql.append("doc.*\n");
         sql.append("         FROM\n");
         sql.append("product_oa_document_collection collect\n");
         sql.append("JOIN product_oa_document doc ON collect.document_uuid = doc.uuid\n");
         sql.append("where document_collector=?\n");
         directory_uuid = SpringMVCContextHolder.getCurrentUserId();
      } else {
        sql.append("  SELECT * FROM product_oa_document \n");
        sql.append("  WHERE directory_uuid = ? \n");
      }
        sql.append(queryFilter);
        sql.append(")A \n");
        sql.append("LEFT JOIN product_sys_staffs B ON B.user_id = A.created_by \n");
@@ -295,7 +325,12 @@
        DataTableEntity dataTable = null;
        FieldSetEntity fse = new FieldSetEntity();
        fse.setTableName(CmnConst.PRODUCT_OA_DOCUMENT);
        if ("1".equals(fieldSetEntity.getString(CmnConst.DIRECTORY_TYPE))) {
      if (StringUtils.equalsAny(fieldSetEntity.getString(CmnConst.DIRECTORY_UUID), "!borrow", "!favorite")) {
         // 收藏夹和借阅文件夹特殊处理
         dataTable = this.documentAll(fieldSetEntity);
         butt = "1,2";
      } else if ("1".equals(fieldSetEntity.getString(CmnConst.DIRECTORY_TYPE))) {
            //获取的user_id
            Integer user_id = SpringMVCContextHolder.getCurrentUser().getUser_id();
            String key = "%," + user_id + ",%";
@@ -332,7 +367,16 @@
        Map<String, DataTableEntity> dataMap = MapUtils.newHashMap();
        fse.setValue("button", butt);
        //加载文件路径
        DataTableEntity file_list = documentDirectoryService.getDirectoryStructure(fieldSetEntity);
      DataTableEntity file_list;
      if (StringUtils.equalsAny(fieldSetEntity.getString(CmnConst.DIRECTORY_UUID), "!borrow", "!favorite")) {
         file_list = new DataTableEntity();
         FieldSetEntity ff = new FieldSetEntity("product_oa_directory");
         ff.setValue("uuid", fieldSetEntity.getString(CmnConst.DIRECTORY_UUID));
         ff.setValue("directory_name", "!borrow".equals(fieldSetEntity.getString(CmnConst.DIRECTORY_UUID)) ? "借阅文件夹" : "收藏夹");
         file_list.addFieldSetEntity(ff);
      } else {
         file_list = documentDirectoryService.getDirectoryStructure(fieldSetEntity);
      }
        dataMap.put("file_list", file_list);
        if (BaseUtil.dataTableIsEmpty(dataTable) || dataTable.getSqle() == null) {
            fse.setValue(CmnConst.PAGESIZE, 0);
@@ -484,6 +528,7 @@
    /**
     *    文档收藏
    *
     * @param fse
     * @return
     */
@@ -495,6 +540,7 @@
    /**
     *    文档取消收藏
    *
     * @param documentUUID
     * @return
     */
@@ -709,4 +755,58 @@
        FieldSetEntity product_oa_document_borrow = baseDao.getFieldSetEntity("product_oa_document_borrow", uuid, false);
        return product_oa_document_borrow;
    }
   public Map<String, String> isPermission(String documentUuid) {
      //   验证文档权限
      if (StringUtils.isEmpty(documentUuid)) {
         throw new BaseException(DocumentCode.DOCUMENT_FORM_NODATA);
      }
      String[] docuemnts = documentUuid.split(",");
      //查询借阅记录
      DataTableEntity dt = baseDao.listTable(" SELECT 1 isPermission,sub_uuid document_uuid from product_oa_document_borrow_sub where borrow_uuid in" +
                  " (select uuid from product_oa_document_borrow where start_time>=now() and end_time<=now() and  borrower=? and flow_flag=2) and " + BaseUtil.buildQuestionMarkFilter("sub_uuid", docuemnts, true),
            new Object[]{SpringMVCContextHolder.getCurrentUserId()});
      Map<String, String> permission = new HashMap<>();
      if (!DataTableEntity.isEmpty(dt)) {
         for (int i = 0; i < dt.getRows(); i++) {
            String docUuid = dt.getString(i, "document_uuid");
            if (dt.getBoolean(i, "isPermission")) {
               permission.put(docUuid, "1");
            }
         }
      }
      StringBuilder sql = new StringBuilder();
      sql.append("SELECT\n");
      sql.append("document.uuid document_uuid,\n");
      sql.append("rights.*\n");
      sql.append("      FROM\n");
      sql.append("product_oa_document document\n");
      sql.append("JOIN product_oa_directory dir ON dir.uuid = document.directory_uuid\n");
      sql.append("JOIN product_oa_directory_rights rights ON dir.uuid = rights.directory_uuid\n");
      sql.append("WHERE\n");
      sql.append("dir.directory_type = 1\n");
      sql.append("AND rights.rigths LIKE '%1%'\n");
      sql.append(" and ").append(BaseUtil.buildQuestionMarkFilter("document.uuid", docuemnts.length, true));
      dt = baseDao.listTable(sql.toString(), docuemnts);
      if (!DataTableEntity.isEmpty(dt)) {
         for (int i = 0; i < dt.getRows(); i++) {
            String docUuid = dt.getString(i, "document_uuid");
            String storage_uuid = dt.getString(i, "storage_uuid");
            if (verifyOrgExist(storage_uuid)) {
               String rights = permission.get(docUuid);
               if (StringUtils.isEmpty(rights)) {
                  rights = "1";
               }
               if (rights.indexOf("2") == -1 && StringUtils.indexOf(dt.getString(i, "rigths"), "2") != -1) {
                  rights += ",2";
               }
               permission.put(docUuid, rights);
            }
         }
      }
      return permission;
   }
}