From 51065db2a119ddde88c7e1a7c4b37d9ef622921e Mon Sep 17 00:00:00 2001
From: zm <2369059705qq.com>
Date: 星期五, 06 九月 2024 11:53:03 +0800
Subject: [PATCH] 归档按钮权限控制

---
 src/main/java/com/product/file/service/DocumentService.java | 1274 ++++++++++++++++++++++++++++++++++-----------------------
 1 files changed, 768 insertions(+), 506 deletions(-)

diff --git a/src/main/java/com/product/file/service/DocumentService.java b/src/main/java/com/product/file/service/DocumentService.java
index f5aa082..26ef4ca 100644
--- a/src/main/java/com/product/file/service/DocumentService.java
+++ b/src/main/java/com/product/file/service/DocumentService.java
@@ -6,7 +6,7 @@
 import com.product.common.collect.ListUtils;
 import com.product.common.collect.MapUtils;
 import com.product.common.lang.DateUtils;
-import com.product.core.config.Global;
+import com.product.common.lang.StringUtils;
 import com.product.core.dao.BaseDao;
 import com.product.core.entity.DataTableEntity;
 import com.product.core.entity.FieldMetaEntity;
@@ -17,16 +17,14 @@
 import com.product.core.spring.context.SpringMVCContextHolder;
 import com.product.core.transfer.Transactional;
 import com.product.file.config.CmnConst;
+import com.product.file.config.DocumentCode;
 import com.product.file.service.ide.IDocumentService;
 import com.product.module.sys.entity.SystemUser;
 import com.product.util.BaseUtil;
 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
@@ -40,541 +38,805 @@
 @Component
 public class DocumentService extends AbstractBaseService implements IDocumentService {
 
-    @Autowired
-    public BaseDao baseDao;
+	@Autowired
+	public BaseDao baseDao;
 
-    @Autowired
-    public DocumentService documentService;
+	@Autowired
+	public DocumentService documentService;
 
-    @Autowired
-    QueryFilterService queryFilterService;
+	@Autowired
+	QueryFilterService queryFilterService;
 
-    @Autowired
-    DocumentDirectoryService documentDirectoryService;
+	@Autowired
+	DocumentDirectoryService documentDirectoryService;
 
-    @Override
-    @Transactional
-    public String addDocument(FieldSetEntity fieldSetEntity) throws BaseException {
-        //鏂囦欢闄勪欢琛╱uid
-        String uuIds = fieldSetEntity.getString(CmnConst.ATTACHMENTS_UUID);
-        String directory_uuid = fieldSetEntity.getString(CmnConst.DIRECTORY_UUID);
-        String[] uuid = uuIds.split(",");
-        //鑾峰彇闄勪欢淇℃伅
-        DataTableEntity attachments = baseDao.listTable(CmnConst.PRODUCT_SYS_ATTACHMENTS, BaseUtil.buildQuestionMarkFilter(CmnConst.UUID, uuid.length, true), uuid);
-        List<String> uuidList = ListUtils.newArrayList();
-        List<String> fileNameList = ListUtils.newArrayList();
-        for (int i = 0, length = attachments.getRows(); i < length; i++) {
-            FieldSetEntity fieldSet = new FieldSetEntity();
-            fieldSet.setTableName(CmnConst.PRODUCT_OA_DOCUMENT);
-            FieldSetEntity fse = attachments.getFieldSetEntity(i);
-            //鏂囦欢鐩綍uuid
-            fieldSet.setValue(CmnConst.DIRECTORY_UUID, directory_uuid);
-            //鏂囦欢澶у皬
-            fieldSet.setValue(CmnConst.FILE_SIZE, fse.getString(CmnConst.ATTACHMENT_SIZE));
-            //鏂囦欢鍚嶇О
-            String file_name = fse.getString(CmnConst.FILE_NAME);
-            fieldSet.setValue(CmnConst.FILE_NAME, file_name);
-            //鏂囦欢绫诲瀷
-            String file_type = file_name.substring(file_name.lastIndexOf(".") + 1);
-            fieldSet.setValue(CmnConst.FILE_TYPE, file_type);
-            //闄勪欢uuid
-            fieldSet.setValue(CmnConst.ATTACHMENTS_UUID, fse.getString(CmnConst.UUID));
-            fieldSet.setValue(CmnConst.CREATED_BY, SpringMVCContextHolder.getCurrentUser().getUser_id());// 鍒涘缓浜�
-            fieldSet.setValue(CmnConst.CREATED_UTC_DATETIME, DateUtils.getDateTime());// 鍒涘缓鏃堕棿
-            String file_uuid = baseDao.add(fieldSet);
-            uuidList.add(file_uuid);
-            fileNameList.add(file_name);
-        }
-        this.documentation(uuidList.toArray(), "鏂板", fileNameList.toArray(), null);
-        return uuidList.toString();
-    }
+	@Override
+	@Transactional
+	public String addDocument(FieldSetEntity fse) throws BaseException {
+		//鑾峰彇闄勪欢鐩綍鍜岄檮浠秛uid
+		String directory_uuid = fse.getString(CmnConst.DIRECTORY_UUID);
+		String fileUUIDs = fse.getString(CmnConst.ATTACHMENTS_UUID);
+		String[] fileUUIDArray = fileUUIDs.split(",");
+		//鑾峰彇闄勪欢淇℃伅
+		DataTableEntity attachments = baseDao.listTable(CmnConst.PRODUCT_SYS_ATTACHMENTS, BaseUtil.buildQuestionMarkFilter(CmnConst.UUID, fileUUIDArray, true));
+		List<String> uuidList = ListUtils.newArrayList();
+		List<String> fileNameList = ListUtils.newArrayList();
+		//寰幆闄勪欢淇℃伅锛岀敓鎴愭枃妗d俊鎭�
+		for (int i = 0, length = attachments.getRows(); i < length; i++) {
+			FieldSetEntity attachment = attachments.getFieldSetEntity(i);
+			//鍒涘缓鏂囨。鏁版嵁瀹瑰櫒
+			FieldSetEntity fseDocument = new FieldSetEntity(CmnConst.PRODUCT_OA_DOCUMENT);
+			fseDocument.setValue(CmnConst.ATTACHMENTS_UUID, attachment.getUUID());
+			fseDocument.setValue(CmnConst.DIRECTORY_UUID, directory_uuid);
+			fseDocument.setValue(CmnConst.FILE_SIZE, attachment.getString(CmnConst.ATTACHMENT_SIZE));
+			fseDocument.setValue(CmnConst.CREATED_BY, SpringMVCContextHolder.getCurrentUser().getUser_id());
+			fseDocument.setValue(CmnConst.CREATED_UTC_DATETIME, DateUtils.getDateTime());
+			//鏂囦欢鍚嶇О
+			String file_name = attachment.getString(CmnConst.FILE_NAME);
+			fseDocument.setValue(CmnConst.FILE_NAME, file_name);
+			//鏂囦欢绫诲瀷
+			String file_type = file_name.substring(file_name.lastIndexOf(".") + 1);
+			fseDocument.setValue(CmnConst.FILE_TYPE, file_type);
+			//淇濆瓨鏁版嵁
+			String documentUUID = baseDao.add(fseDocument);
 
-    @Override
-    @Transactional
-    public boolean upDocumentName(FieldSetEntity fieldSetEntity) throws BaseException {
-        String uuid = fieldSetEntity.getString(CmnConst.UUID);
-        String file_name = fieldSetEntity.getString(CmnConst.FILE_NAME);
-        fieldSetEntity.setValue(CmnConst.UPDATED_BY, SpringMVCContextHolder.getCurrentUser().getUser_id());// 淇敼浜�
-        fieldSetEntity.setValue(CmnConst.UPDATED_UTC_DATETIME, DateUtils.getDateTime());// 淇敼鏃堕棿
-        FieldSetEntity fie = baseDao.getFieldSetEntity(CmnConst.PRODUCT_OA_DOCUMENT, uuid, false);
-        String name = fie.getString(CmnConst.FILE_NAME);
-        //姣忔淇敼閮戒翰绌哄凡璇讳汉鍛�
-        fieldSetEntity.setValue(CmnConst.READ_NUM, "");
-        boolean flag = baseDao.update(fieldSetEntity);
-        this.documentRepeatOrder(new Object[]{uuid}, "閲嶅懡鍚�", new Object[]{name}, new Object[]{file_name});
-        return flag;
-    }
+			//鍒涘缓鏂囨。鐗堟湰鏁版嵁瀹瑰櫒
+			FieldSetEntity fseDocumentHistory = new FieldSetEntity(CmnConst.PRODUCT_OA_DOCUMENT_HISTORY);
+			BaseUtil.createCreatorAndCreationTime(fseDocumentHistory);
+			fseDocumentHistory.setValue("document_uuid", documentUUID);
+			fseDocumentHistory.setValue("attachment_uuid", attachment.getUUID());
+			fseDocumentHistory.setValue("version_number", "v1");
+			baseDao.add(fseDocumentHistory);
 
-    /**
-     * 闇�瑕佹壒閲忓垹闄�
-     *
-     * @param fieldSetEntity
-     * @return
-     * @throws BaseException
-     */
-    @Override
-    @Transactional
-    public boolean delDocument(FieldSetEntity fieldSetEntity) throws BaseException {
-        String uuids = fieldSetEntity.getString(CmnConst.UUID);
-        String file_names = fieldSetEntity.getString(CmnConst.FILE_NAME);
-        String[] file_name = file_names.split(",");
-        String[] uuid = uuids.split(",");
-        boolean flag = baseDao.delete(CmnConst.PRODUCT_OA_DOCUMENT, uuid);
-        this.documentation(uuid, "鍒犻櫎", file_name, null);
-        return flag;
-    }
+			uuidList.add(documentUUID);
+			fileNameList.add(file_name);
+		}
+		this.documentation(uuidList.toArray(), "鏂板", fileNameList.toArray(), null);
+		return uuidList.toString();
+	}
 
-    @Override
-    public DataTableEntity documentAll(FieldSetEntity fieldSetEntity) throws BaseException {
-        //鏂囨。鐩綍uuid
-        String directory_uuid = fieldSetEntity.getString(CmnConst.DIRECTORY_UUID);
-        String queryFilter = queryFilterService.getQueryFilter(fieldSetEntity);
-        if (!BaseUtil.strIsNull(queryFilter)) {
-            queryFilter = " AND " + queryFilter;
-        }
-        StringBuffer sql = new StringBuffer();
-        sql.append(" SELECT ")
-                .append(" a.*,CONCAT(CONVERT(a.file_size / 1024, decimal(10,2)), 'KB') file_size_kb,b.show_name name")
-                //    .append(" concat(c.attachment_domain,'/',c.attachment_container,'/',c.module_uuid,'/',c.attachment_title,?) path ")
-                .append(" FROM ")
-                .append(" (SELECT * FROM PRODUCT_OA_document WHERE directory_uuid = ? ")
-                .append(queryFilter)
-                .append(" ) a LEFT JOIN product_sys_staffs b ON a.created_by = b.user_id ")
-                .append(" LEFT JOIN product_sys_attachments c ON b.staff_avatar=c.uuid ");
-        String sostoken = Global.getSystemConfig("upload.key", "");
-        DataTableEntity documentData = baseDao.listTable(sql.toString(), new String[]{directory_uuid}, fieldSetEntity.getInteger(CmnConst.PAGESIZE), fieldSetEntity.getInteger(CmnConst.CPAGE));
-        baseDao.listInternationDataTable(documentData, null);
-        return documentData;
-    }
+	@Override
+	@Transactional
+	public boolean upDocumentName(FieldSetEntity fieldSetEntity) throws BaseException {
+		String uuid = fieldSetEntity.getString(CmnConst.UUID);
+		String file_name = fieldSetEntity.getString(CmnConst.FILE_NAME);
+		fieldSetEntity.setValue(CmnConst.UPDATED_BY, SpringMVCContextHolder.getCurrentUser().getUser_id());// 淇敼浜�
+		fieldSetEntity.setValue(CmnConst.UPDATED_UTC_DATETIME, DateUtils.getDateTime());// 淇敼鏃堕棿
+		FieldSetEntity fie = baseDao.getFieldSetEntity(CmnConst.PRODUCT_OA_DOCUMENT, uuid, false);
+		String name = fie.getString(CmnConst.FILE_NAME);
+		//姣忔淇敼閮戒翰绌哄凡璇讳汉鍛�
+		fieldSetEntity.setValue(CmnConst.READ_NUM, "");
+		boolean flag = baseDao.update(fieldSetEntity);
+		this.documentRepeatOrder(new Object[]{uuid}, "閲嶅懡鍚�", new Object[]{name}, new Object[]{file_name});
+		return flag;
+	}
 
-    @Override
-    public FieldSetEntity documentInfo(FieldSetEntity fieldSetEntity) throws BaseException {
-        String uuid = fieldSetEntity.getString(CmnConst.UUID);
-        FieldSetEntity fieldSet = baseDao.getFieldSetEntity(CmnConst.PRODUCT_OA_DOCUMENT, uuid, true);
-        String file_name = fieldSet.getString(CmnConst.FILE_NAME);
-        String user_ids = fieldSetEntity.getString(CmnConst.USER_IDS);
-        String read = fieldSetEntity.getString(CmnConst.READ_NUM);
-        if (!BaseUtil.strIsNull(user_ids)) {
-            fieldSetEntity.setValue(CmnConst.REQUIRED_NUMBER, user_ids.split(",").length);
-            fieldSetEntity.setValue(CmnConst.READ_NUM, read.split(",").length);
-        }
-        this.documentation(new Object[]{uuid}, "鏌ョ湅", new Object[]{file_name}, null);
-        return fieldSet;
-    }
+	/**
+	 * 闇�瑕佹壒閲忓垹闄�
+	 *
+	 * @param fieldSetEntity
+	 * @return
+	 * @throws BaseException
+	 */
+	@Override
+	@Transactional
+	public boolean delDocument(FieldSetEntity fieldSetEntity) throws BaseException {
+		String uuids = fieldSetEntity.getString(CmnConst.UUID);
+		String file_names = fieldSetEntity.getString(CmnConst.FILE_NAME);
+		String[] file_name = file_names.split(",");
+		String[] uuid = uuids.split(",");
+		boolean flag = baseDao.delete(CmnConst.PRODUCT_OA_DOCUMENT, uuid);
+		this.documentation(uuid, "鍒犻櫎", file_name, null);
+		return flag;
+	}
 
-    @Override
-    public void documentation(Object[] uuid, String opetype, Object[] file_name, String file_directory) throws BaseException {
-        //鑾峰彇鏂囦欢淇℃伅瀛樺叆鏃ュ織琛�
-        SystemUser user = SpringMVCContextHolder.getCurrentUser();
-        DataTableEntity dataTableEntity = new DataTableEntity();
-        FieldMetaEntity fieldMeta = new FieldMetaEntity();
-        fieldMeta.setTableName(new String[]{CmnConst.PRODUCT_OA_DOCUMENT_LOG});
-        dataTableEntity.setMeta(fieldMeta);
-        for (int i = 0; i < uuid.length; i++) {
-            FieldSetEntity fieldSetEntity = new FieldSetEntity();
-            fieldSetEntity.setTableName(CmnConst.PRODUCT_OA_DOCUMENT_LOG);
-            fieldSetEntity.setMeta(fieldMeta);
-            fieldSetEntity.setValue(CmnConst.DOCUMENT_UUID, uuid[i]);
-            //fieldSetEntity.setValue(CmnConst.RECORD,record);
-            fieldSetEntity.setValue(CmnConst.OPETYPE, opetype);
-            fieldSetEntity.setValue(CmnConst.OPE_DOCUMENT, file_name[i]);
-            StringBuffer state = new StringBuffer();
-            state.append(opetype)
-                    .append("浜哰")
-                    .append(file_name[i])
-                    .append("]");
-            if (!BaseUtil.strIsNull(file_directory)) {
-                state.append("鍒�").append(file_directory).append("鐩綍涓�");
-            }
-            fieldSetEntity.setValue(CmnConst.STATE, state.toString()); //璇存槑
-            fieldSetEntity.setValue(CmnConst.CREATED_BY, user.getUser_id());// 鍒涘缓浜�
-            fieldSetEntity.setValue(CmnConst.CREATED_UTC_DATETIME, DateUtils.getDateTime());// 鍒涘缓鏃堕棿
-            dataTableEntity.addFieldSetEntity(fieldSetEntity);
-        }
-        baseDao.add(dataTableEntity);
-    }
+	@Override
+	public DataTableEntity documentAll(FieldSetEntity fieldSetEntity) throws BaseException {
+		//鏂囨。鐩綍uuid
+		String directory_uuid = fieldSetEntity.getString(CmnConst.DIRECTORY_UUID);
+		String queryFilter = queryFilterService.getQueryFilter(fieldSetEntity);
+		if (!BaseUtil.strIsNull(queryFilter)) {
+			queryFilter = " AND " + queryFilter;
+		}
+		// file_name created_by  created_utc_datetime
 
-    @Override
-    public void documentRepeatOrder(Object[] uuid, String opetype, Object[] file_name, Object[] newFile_name) throws BaseException {
-        //鑾峰彇鏂囦欢淇℃伅瀛樺叆鏃ュ織琛�
-        SystemUser user = SpringMVCContextHolder.getCurrentUser();
-        DataTableEntity dataTableEntity = new DataTableEntity();
-        FieldMetaEntity fieldMeta = new FieldMetaEntity();
-        fieldMeta.setTableName(new String[]{CmnConst.PRODUCT_OA_DOCUMENT_LOG});
-        dataTableEntity.setMeta(fieldMeta);
-        for (int i = 0; i < uuid.length; i++) {
-            FieldSetEntity fieldSetEntity = new FieldSetEntity();
-            fieldSetEntity.setTableName(CmnConst.PRODUCT_OA_DOCUMENT_LOG);
-            fieldSetEntity.setMeta(fieldMeta);
-            fieldSetEntity.setValue(CmnConst.DOCUMENT_UUID, uuid[i]);
-            //fieldSetEntity.setValue(CmnConst.RECORD,record);
-            fieldSetEntity.setValue(CmnConst.OPETYPE, opetype);
-            fieldSetEntity.setValue(CmnConst.OPE_DOCUMENT, file_name[i]);
-            StringBuffer state = new StringBuffer();
-            state.append("鎶奫")
-                    .append(file_name[i])
-                    .append("]")
-                    .append(opetype)
-                    .append("涓篬")
-                    .append(newFile_name[i])
-                    .append("]");
-            fieldSetEntity.setValue(CmnConst.STATE, state.toString()); //璇存槑
-            fieldSetEntity.setValue(CmnConst.CREATED_BY, user.getUser_id());// 鍒涘缓浜�
-            fieldSetEntity.setValue(CmnConst.CREATED_UTC_DATETIME, DateUtils.getDateTime());// 鍒涘缓鏃堕棿
-            dataTableEntity.addFieldSetEntity(fieldSetEntity);
-        }
-        baseDao.add(dataTableEntity);
-    }
+		StringBuffer sql = new StringBuffer();
 
-    public boolean verifyOrgExist(String org) {
-        Integer user_id = SpringMVCContextHolder.getCurrentUser().getUser_id();
-        String code = SpringMVCContextHolder.getCurrentUser().getCurrentStaff().getString("tricode");
-        //鑾峰彇鎵�鏈変笂绾х紪鐮�
-        String[] superior_code = new String[code.split("-").length - 1];
-        for (int i = 0; i < code.split("-").length - 1; i++) {
-            superior_code[i] = code.substring(0, code.length() - ((i + 1) * 4));
-        }
-        String this_user = String.valueOf(user_id);
-        SpringMVCContextHolder.getCurrentUser().getLanguageCode();
-        String[][] orgArr = BaseUtil.decomposesMultipleTypeValues(org);
-        String[] user = orgArr[3];
-        if (null != user) {
-            for (int i = 0; i < user.length; i++) {
-                if (this_user.equals(user[i])) {
-                    return true;
-                }
-            }
-        }
-        String[] level = orgArr[0];
-        String[] dept = orgArr[1];
-        // List<String> list = Arrays.asList(a);  --OK
-        // List<String> list = Arrays.asList("A","B","C"); --OK
-        // list.add("F"); --UnsupportedOperationException
-        // list.remove("A"); --UnsupportedOperationException
-        // list.set(1,"javaee");--OK (鍥犱负鏄妸鏁扮粍杞负闆嗗悎锛屽叾鏈川杩樻槸鏁扮粍锛屾暟缁勯暱搴﹀浐瀹氫笉鍙橈紝浣嗗唴瀹瑰彲浠ユ敼鍙�)
-        // 缁撹锛氳櫧鐒跺彲浠ユ妸鏁扮粍杞负闆嗗悎锛屼絾鏄泦鍚堥暱搴︿笉鑳芥敼鍙�
-        List list = new ArrayList();
-        ;
-        if (null != level) {
-            list.addAll(Arrays.asList(level));
-        }
-        if (null != dept) {
-            list.addAll(Arrays.asList(dept));
-        }
-        String[] level_dept = new String[list.size()];
-        list.toArray(level_dept);
+		sql.append("SELECT \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(" ,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");
+			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");
+		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_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);
+		return documentData;
+	}
+
+	@Override
+	public FieldSetEntity documentInfo(FieldSetEntity fieldSetEntity) throws BaseException {
+		String uuid = fieldSetEntity.getString(CmnConst.UUID);
+		FieldSetEntity fieldSet = baseDao.getFieldSetEntity(CmnConst.PRODUCT_OA_DOCUMENT, uuid, true);
+		String file_name = fieldSet.getString(CmnConst.FILE_NAME);
+		String user_ids = fieldSetEntity.getString(CmnConst.USER_IDS);
+		String read = fieldSetEntity.getString(CmnConst.READ_NUM);
+		if (!BaseUtil.strIsNull(user_ids)) {
+			fieldSetEntity.setValue(CmnConst.REQUIRED_NUMBER, user_ids.split(",").length);
+			fieldSetEntity.setValue(CmnConst.READ_NUM, read.split(",").length);
+		}
+		this.documentation(new Object[]{uuid}, "鏌ョ湅", new Object[]{file_name}, null);
+		return fieldSet;
+	}
+
+	@Override
+	public void documentation(Object[] uuid, String opetype, Object[] file_name, String file_directory) throws BaseException {
+		//鑾峰彇鏂囦欢淇℃伅瀛樺叆鏃ュ織琛�
+		SystemUser user = SpringMVCContextHolder.getCurrentUser();
+		DataTableEntity dataTableEntity = new DataTableEntity();
+		FieldMetaEntity fieldMeta = new FieldMetaEntity();
+		fieldMeta.setTableName(new String[]{CmnConst.PRODUCT_OA_DOCUMENT_LOG});
+		dataTableEntity.setMeta(fieldMeta);
+		for (int i = 0; i < uuid.length; i++) {
+			FieldSetEntity fieldSetEntity = new FieldSetEntity();
+			fieldSetEntity.setTableName(CmnConst.PRODUCT_OA_DOCUMENT_LOG);
+			fieldSetEntity.setMeta(fieldMeta);
+			fieldSetEntity.setValue(CmnConst.DOCUMENT_UUID, uuid[i]);
+			//fieldSetEntity.setValue(CmnConst.RECORD,record);
+			fieldSetEntity.setValue(CmnConst.OPETYPE, opetype);
+			fieldSetEntity.setValue(CmnConst.OPE_DOCUMENT, file_name[i]);
+			StringBuffer state = new StringBuffer();
+			state.append(opetype)
+					.append("浜哰")
+					.append(file_name[i])
+					.append("]");
+			if (!BaseUtil.strIsNull(file_directory)) {
+				state.append("鍒�").append(file_directory).append("鐩綍涓�");
+			}
+			fieldSetEntity.setValue(CmnConst.STATE, state.toString()); //璇存槑
+			fieldSetEntity.setValue(CmnConst.CREATED_BY, user.getUser_id());// 鍒涘缓浜�
+			fieldSetEntity.setValue(CmnConst.CREATED_UTC_DATETIME, DateUtils.getDateTime());// 鍒涘缓鏃堕棿
+			dataTableEntity.addFieldSetEntity(fieldSetEntity);
+		}
+		baseDao.add(dataTableEntity);
+	}
+
+	@Override
+	public void documentRepeatOrder(Object[] uuid, String opetype, Object[] file_name, Object[] newFile_name) throws BaseException {
+		//鑾峰彇鏂囦欢淇℃伅瀛樺叆鏃ュ織琛�
+		SystemUser user = SpringMVCContextHolder.getCurrentUser();
+		DataTableEntity dataTableEntity = new DataTableEntity();
+		FieldMetaEntity fieldMeta = new FieldMetaEntity();
+		fieldMeta.setTableName(new String[]{CmnConst.PRODUCT_OA_DOCUMENT_LOG});
+		dataTableEntity.setMeta(fieldMeta);
+		for (int i = 0; i < uuid.length; i++) {
+			FieldSetEntity fieldSetEntity = new FieldSetEntity();
+			fieldSetEntity.setTableName(CmnConst.PRODUCT_OA_DOCUMENT_LOG);
+			fieldSetEntity.setMeta(fieldMeta);
+			fieldSetEntity.setValue(CmnConst.DOCUMENT_UUID, uuid[i]);
+			//fieldSetEntity.setValue(CmnConst.RECORD,record);
+			fieldSetEntity.setValue(CmnConst.OPETYPE, opetype);
+			fieldSetEntity.setValue(CmnConst.OPE_DOCUMENT, file_name[i]);
+			StringBuffer state = new StringBuffer();
+			state.append("鎶奫")
+					.append(file_name[i])
+					.append("]")
+					.append(opetype)
+					.append("涓篬")
+					.append(newFile_name[i])
+					.append("]");
+			fieldSetEntity.setValue(CmnConst.STATE, state.toString()); //璇存槑
+			fieldSetEntity.setValue(CmnConst.CREATED_BY, user.getUser_id());// 鍒涘缓浜�
+			fieldSetEntity.setValue(CmnConst.CREATED_UTC_DATETIME, DateUtils.getDateTime());// 鍒涘缓鏃堕棿
+			dataTableEntity.addFieldSetEntity(fieldSetEntity);
+		}
+		baseDao.add(dataTableEntity);
+	}
+
+	public boolean verifyOrgExist(String org) {
+		Integer user_id = SpringMVCContextHolder.getCurrentUser().getUser_id();
+		String code = SpringMVCContextHolder.getCurrentUser().getCurrentStaff().getString("tricode");
+		//鑾峰彇鎵�鏈変笂绾х紪鐮�
+		String[] superior_code = new String[code.split("-").length - 1];
+		for (int i = 0; i < code.split("-").length - 1; i++) {
+			superior_code[i] = code.substring(0, code.length() - ((i + 1) * 4));
+		}
+		String this_user = String.valueOf(user_id);
+		SpringMVCContextHolder.getCurrentUser().getLanguageCode();
+		String[][] orgArr = BaseUtil.decomposesMultipleTypeValues(org);
+		String[] user = orgArr[3];
+		if (null != user) {
+			for (int i = 0; i < user.length; i++) {
+				if (this_user.equals(user[i])) {
+					return true;
+				}
+			}
+		}
+		String[] level = orgArr[0];
+		String[] dept = orgArr[1];
+		// List<String> list = Arrays.asList(a);  --OK
+		// List<String> list = Arrays.asList("A","B","C"); --OK
+		// list.add("F"); --UnsupportedOperationException
+		// list.remove("A"); --UnsupportedOperationException
+		// list.set(1,"javaee");--OK (鍥犱负鏄妸鏁扮粍杞负闆嗗悎锛屽叾鏈川杩樻槸鏁扮粍锛屾暟缁勯暱搴﹀浐瀹氫笉鍙橈紝浣嗗唴瀹瑰彲浠ユ敼鍙�)
+		// 缁撹锛氳櫧鐒跺彲浠ユ妸鏁扮粍杞负闆嗗悎锛屼絾鏄泦鍚堥暱搴︿笉鑳芥敼鍙�
+		List list = new ArrayList();
+		;
+		if (null != level) {
+			list.addAll(Arrays.asList(level));
+		}
+		if (null != dept) {
+			list.addAll(Arrays.asList(dept));
+		}
+		String[] level_dept = new String[list.size()];
+		list.toArray(level_dept);
 
 
-        String[] post = orgArr[2];
-        if (level_dept.length != 0) {
-            DataTableEntity org_level_uuid = baseDao.listTable(CmnConst.TABLE_PRODUCT_SYS_ORG_LEVELS, BaseUtil.buildQuestionMarkFilter("uuid", level_dept, true) + " and " + BaseUtil.buildQuestionMarkFilter("org_level_code", superior_code, true), new String[]{});
-            if (org_level_uuid.getRows() > 0) return true;
-        }
-        if (null != post) {
-            DataTableEntity post_uuid = baseDao.listTable(CmnConst.PRODUCT_SYS_STAFFS, BaseUtil.buildQuestionMarkFilter("job_post_uuid", post, true) + " and user_id=?", new String[]{this_user});
-            if (post_uuid.getRows() > 0) return true;
-        }
-        return false;
-    }
+		String[] post = orgArr[2];
+		if (level_dept.length != 0) {
+			DataTableEntity org_level_uuid = baseDao.listTable(CmnConst.TABLE_PRODUCT_SYS_ORG_LEVELS, BaseUtil.buildQuestionMarkFilter("uuid", level_dept, true) + " and " + BaseUtil.buildQuestionMarkFilter("org_level_code", superior_code, true), new String[]{});
+			if (org_level_uuid.getRows() > 0) return true;
+		}
+		if (null != post) {
+			DataTableEntity post_uuid = baseDao.listTable(CmnConst.PRODUCT_SYS_STAFFS, BaseUtil.buildQuestionMarkFilter("job_post_uuid", post, true) + " and user_id=?", new String[]{this_user});
+			if (post_uuid.getRows() > 0) return true;
+		}
+		return false;
+	}
 
-    @Override
-    public FieldSetEntity getButtonPermissions(FieldSetEntity fieldSetEntity) throws BaseException {
-        String butt = "";
-        DataTableEntity dataTable = null;
-        FieldSetEntity fse = new FieldSetEntity();
-        fse.setTableName(CmnConst.PRODUCT_OA_DOCUMENT);
-        if ("1".equals(fieldSetEntity.getString(CmnConst.DIRECTORY_TYPE))) {
-            //鑾峰彇鐨剈ser_id
-            Integer user_id = SpringMVCContextHolder.getCurrentUser().getUser_id();
-            String key = "%," + user_id + ",%";
-            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);
-                    }
-                }
-            }
-            if (!BaseUtil.strIsNull(button.toString())) {
-                butt = button.substring(0, button.length() - 1);
-            }
-        } else {
-            dataTable = this.documentAll(fieldSetEntity);
-        }
-        Map<String, DataTableEntity> dataMap = MapUtils.newHashMap();
-        fse.setValue("button", butt);
-        //鍔犺浇鏂囦欢璺緞
-        DataTableEntity file_list = documentDirectoryService.getDirectoryStructure(fieldSetEntity);
-        dataMap.put("file_list", file_list);
-        if (BaseUtil.dataTableIsEmpty(dataTable) || dataTable.getSqle() == null) {
-            fse.setValue(CmnConst.PAGESIZE, 0);
-            fse.setValue(CmnConst.CPAGE, 0);
-            fse.setValue("total", 0);
-        } else {
-            dataMap.put("dataTable", dataTable);
-            fse.setValue(CmnConst.PAGESIZE, dataTable.getSqle().getPsize());
-            fse.setValue(CmnConst.CPAGE, dataTable.getSqle().getPindex());
-            fse.setValue("total", dataTable.getSqle().getTotalCount());
-        }
-        fse.setSubData(dataMap);
+	@Override
+	public FieldSetEntity getButtonPermissions(FieldSetEntity fieldSetEntity) throws BaseException {
+		String butt = "";
+		DataTableEntity dataTable = null;
+		FieldSetEntity fse = new FieldSetEntity();
+		fse.setTableName(CmnConst.PRODUCT_OA_DOCUMENT);
+		if (StringUtils.equalsAny(fieldSetEntity.getString(CmnConst.DIRECTORY_UUID), "!borrow", "!favorite")) {
+			// 鏀惰棌澶瑰拰鍊熼槄鏂囦欢澶圭壒娈婂鐞�
 
-        return fse;
-    }
+			dataTable = this.documentAll(fieldSetEntity);
+			butt = "1,2";
+		} else if ("1".equals(fieldSetEntity.getString(CmnConst.DIRECTORY_TYPE))) {
+			//鑾峰彇鐨剈ser_id
+			Integer user_id = SpringMVCContextHolder.getCurrentUser().getUser_id();
+			String key = "%," + user_id + ",%";
+			String directory_uuid = fieldSetEntity.getString(CmnConst.DIRECTORY_UUID);
+			//String key = "%,140,%";
+			DataTableEntity dataTableEntity = new DataTableEntity();
 
-    @Override
-    public JSONObject popBoxGetFileDirectory(FieldSetEntity fse) throws BaseException {
-        //鏂囦欢鐩綍uuid
-        String directory_uuid = fse.getString(CmnConst.DIRECTORY_UUID);
-        String type = fse.getString(CmnConst.DIRECTORY_TYPE);
-        List<Object> param = ListUtils.newArrayList();
-        SystemUser user = SpringMVCContextHolder.getCurrentUser();
-        StringBuffer sql = new StringBuffer();
-        //1涓哄叕鍙告枃浠剁洰褰�
-        if ("1".equals(type)) {
-            //String staffId = user.getCurrentStaff().getString("staff_id");
-            sql.append(" select a.* from PRODUCT_OA_directory a  ")
-                    .append(" LEFT JOIN (  SELECT a.directory_uuid FROM PRODUCT_OA_directory_rights a  LEFT JOIN product_sys_organizational_structure_storage b ")
-                    .append(" on a.storage_uuid = b.uuid WHERE a.rigths like '%3%' AND CONCAT(',',b.staff_ids,',') like ? GROUP BY ")
-                    .append(" a.directory_uuid) b ON a.uuid = b.directory_uuid  where a.directory_type = 1  and a.org_level_uuid = ? ");
-            String staffId = "%" + user.getCurrentStaff().getString("staff_id") + "%";
-            param.add(staffId);
-            param.add(user.getOrg_level_uuid());
-            //param.add("%,140,%");
-        } else {
-            sql.append(" select * from PRODUCT_OA_directory where directory_type = 2 AND created_by = ? ");
-            param.add(user.getUser_id());
-        }
-        JSONObject object = new JSONObject();
-        //directory_uuid涓虹┖灏辨槸鏈�夋嫨鏂囦欢鐩綍  鑾峰彇褰撳墠鏍圭洰褰曞垪琛�
-        if (BaseUtil.strIsNull(directory_uuid)) {
-            sql.append(" and directory_tier = 1 ");
-            //涓嶄负绌哄氨鑾峰彇閫夋嫨鏂囦欢鐩綍
-        } else {
-            String triCode = fse.getString(CmnConst.TRICODE);
-            param.add(triCode);
-            sql.append(" and tricode_parent = ? ");
-            //鍔犺浇鏂囦欢璺緞
-            DataTableEntity dataTableEntity = documentDirectoryService.getDirectoryStructure(fse);
-            object.put("PRODUCT_OA_directory_path", BaseUtil.dataTableEntityToJson(dataTableEntity));
-        }
-        //sql.append(" GROUP BY tricode,tricode_parent,directory_name");
-        DataTableEntity data = baseDao.listTable(sql.toString(), param.toArray());
+			FieldSetEntity org = recursionRole(directory_uuid);
+			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[]{org.getString("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);
+					}
+				}
+			}
+			if (!BaseUtil.strIsNull(button.toString())) {
+				butt = button.substring(0, button.length() - 1);
+			}
+		} else {
+			dataTable = this.documentAll(fieldSetEntity);
+		}
+		Map<String, DataTableEntity> dataMap = MapUtils.newHashMap();
+		fse.setValue("button", butt);
+		//鍔犺浇鏂囦欢璺緞
+		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);
+			fse.setValue(CmnConst.CPAGE, 0);
+			fse.setValue("total", 0);
+		} else {
+			dataMap.put("dataTable", dataTable);
+			fse.setValue(CmnConst.PAGESIZE, dataTable.getSqle().getPsize());
+			fse.setValue(CmnConst.CPAGE, dataTable.getSqle().getPindex());
+			fse.setValue("total", dataTable.getSqle().getTotalCount());
+		}
+		fse.setSubData(dataMap);
 
-        object.put("PRODUCT_OA_directory_sub", BaseUtil.dataTableEntityToJson(data));
-        baseDao.listInternationDataTable(data, null);
+		return fse;
+	}
 
-        return object;
-    }
+	/**
+	 * 閫掑綊鑾峰彇鏉冮檺濡傛灉褰撳墠鏂囨。鏈厤缃潈闄愬氨鍘婚�掑綊鏌ヨ鐖剁骇鏉冮檺
+	 * @param directory_uuid
+	 * @return
+	 */
+	private FieldSetEntity recursionRole(String directory_uuid){
+		FieldSetEntity org = baseDao.getFieldSetByFilter(CmnConst.PRODUCT_OA_DIRECTORY_RIGHTS, "directory_uuid=?", new String[]{directory_uuid}, false);
+		if (FieldSetEntity.isEmpty(org)&&!StringUtils.isEmpty(directory_uuid)){
+			FieldSetEntity directoryFs = baseDao.getFieldSet(CmnConst.PRODUCT_OA_DIRECTORY, directory_uuid,false);
+			FieldSetEntity parentFs = baseDao.getFieldSetByFilter(CmnConst.PRODUCT_OA_DIRECTORY, "tricode=?",new String[]{directoryFs.getString("tricode_parent")},false);
+			org=recursionRole(parentFs.getUUID());
+		}
+		return org;
+	}
 
-    @Override
-    @Transactional
-    public void downloadFile(FieldSetEntity fieldSetEntity) throws BaseException {
-        String uuid = fieldSetEntity.getString(CmnConst.UUID);
-        FieldSetEntity fieldSet = baseDao.getFieldSetEntity(CmnConst.PRODUCT_OA_DOCUMENT, uuid, false);
-        String file_name = fieldSet.getString(CmnConst.FILE_NAME);
-        this.documentation(new String[]{uuid}, "涓嬭浇", new String[]{file_name}, null);
-        this.markRead(fieldSet);
-    }
+	@Override
+	public JSONObject popBoxGetFileDirectory(FieldSetEntity fse) throws BaseException {
+		//鏂囦欢鐩綍uuid
+		String directory_uuid = fse.getString(CmnConst.DIRECTORY_UUID);
+		String type = fse.getString(CmnConst.DIRECTORY_TYPE);
+		List<Object> param = ListUtils.newArrayList();
+		SystemUser user = SpringMVCContextHolder.getCurrentUser();
+		StringBuffer sql = new StringBuffer();
+		//1涓哄叕鍙告枃浠剁洰褰�
+		if ("1".equals(type)) {
+			//String staffId = user.getCurrentStaff().getString("staff_id");
+			sql.append(" select a.* from PRODUCT_OA_directory a  ")
+					.append(" LEFT JOIN (  SELECT a.directory_uuid FROM PRODUCT_OA_directory_rights a  LEFT JOIN product_sys_organizational_structure_storage b ")
+					.append(" on a.storage_uuid = b.uuid WHERE a.rigths like '%3%' AND CONCAT(',',b.staff_ids,',') like ? GROUP BY ")
+					.append(" a.directory_uuid) b ON a.uuid = b.directory_uuid  where a.directory_type = 1  and a.org_level_uuid = ? ");
+			String staffId = "%" + user.getCurrentStaff().getString("staff_id") + "%";
+			param.add(staffId);
+			param.add(user.getOrg_level_uuid());
+			//param.add("%,140,%");
+		} else {
+			sql.append(" select * from PRODUCT_OA_directory where directory_type = 2 AND created_by = ? ");
+			param.add(user.getUser_id());
+		}
+		JSONObject object = new JSONObject();
+		//directory_uuid涓虹┖灏辨槸鏈�夋嫨鏂囦欢鐩綍  鑾峰彇褰撳墠鏍圭洰褰曞垪琛�
+		if (BaseUtil.strIsNull(directory_uuid)) {
+			sql.append(" and directory_tier = 1 ");
+			//涓嶄负绌哄氨鑾峰彇閫夋嫨鏂囦欢鐩綍
+		} else {
+			String triCode = fse.getString(CmnConst.TRICODE);
+			param.add(triCode);
+			sql.append(" and tricode_parent = ? ");
+			//鍔犺浇鏂囦欢璺緞
+			DataTableEntity dataTableEntity = documentDirectoryService.getDirectoryStructure(fse);
+			object.put("product_oa_directory_path", BaseUtil.dataTableEntityToJson(dataTableEntity));
+		}
+		//sql.append(" GROUP BY tricode,tricode_parent,directory_name");
+		DataTableEntity data = baseDao.listTable(sql.toString(), param.toArray());
 
-    @Override
-    public void markRead(FieldSetEntity fieldSetEntity) throws BaseException {
+		object.put("product_oa_directory_sub", BaseUtil.dataTableEntityToJson(data));
+		baseDao.listInternationDataTable(data, null);
 
-        //鑾峰彇蹇呰浜哄憳ID闆�
-        String user_ids = fieldSetEntity.getString(CmnConst.USER_IDS);
-        String read = fieldSetEntity.getString(CmnConst.READ_NUM);
-        SystemUser user = SpringMVCContextHolder.getCurrentUser();
-        user_ids = "," + user_ids + ",";
-        String rawRead = "," + read + ",";
-        String userId = "," + user.getUser_id() + ",";
-        //濡傛灉鍖呭惈鐢ㄦ埛ID
-        if (BaseUtil.strIsNull(read)) {
-            fieldSetEntity.setValue(CmnConst.READ_NUM, user.getUser_id());
-            baseDao.update(fieldSetEntity);
-        } else {
-            if (user_ids.contains(userId) && !rawRead.contains(userId)) {
-                read = read + "," + user.getUser_id();
-                fieldSetEntity.setValue(CmnConst.READ_NUM, read);
-                baseDao.update(fieldSetEntity);
-            }
-        }
-    }
+		return object;
+	}
 
-    /**
-     * 绉诲姩锛堟枃浠舵壒閲忕Щ鍔級6
-     *
-     * @param
-     * @return
-     * @throws BaseException
-     */
-    @Override
-    @Transactional
-    public boolean fileMoveTo(FieldSetEntity fse) throws BaseException {
-        String directory_uuid = fse.getString(CmnConst.DIRECTORY_UUID);
-        Integer directory_type = fse.getInteger(CmnConst.DIRECTORY_TYPE);
-        Integer row = 0;
-        //1涓哄叕鍙告枃浠跺す
-        if (directory_type == 1) {
-            StringBuffer sql = new StringBuffer();
-            sql.append(" SELECT * FROM PRODUCT_OA_directory_rights  ")
-                    .append(" WHERE directory_uuid = ? ")
-                    .append(" AND rigths like '%3%' AND concat(',',storage_uuid,',') like ? ");//3涓烘柊澧�
-            String user_id = String.valueOf(SpringMVCContextHolder.getCurrentUser().getUser_id());
-            user_id = "%," + user_id + ",%";
-            DataTableEntity dataTableEntity = baseDao.listTable(sql.toString(), new String[]{directory_uuid, user_id});
-            row = dataTableEntity.getRows();
-        }
-        //1涓轰釜浜烘枃浠跺す
-        if (directory_type == 2 || row > 0) {
-            FieldSetEntity fieldSetEntity = baseDao.getFieldSetEntity(CmnConst.PRODUCT_OA_DIRECTORY, directory_uuid, false);
-            //鑾峰彇绉诲姩鍒扮殑鐩綍鍚�
-            String directory_name = fieldSetEntity.getString(CmnConst.DIRECTORY_NAME);
-            String uuids = fse.getString(CmnConst.UUID);
-            String[] uuid = uuids.split(",");
-            DataTableEntity dataTable = baseDao.listTable(CmnConst.PRODUCT_OA_DOCUMENT, BaseUtil.buildQuestionMarkFilter(CmnConst.UUID, uuid.length, true), uuid);
-            List<String> uuidList = ListUtils.newArrayList();
-            List<String> fileNameList = ListUtils.newArrayList();
-            for (int i = 0, length = dataTable.getRows(); i < length; i++) {
-                uuidList.add(dataTable.getFieldSetEntity(i).getString(CmnConst.UUID));
-                fileNameList.add(dataTable.getFieldSetEntity(i).getString(CmnConst.FILE_NAME));
-            }
+	@Override
+	@Transactional
+	public void downloadFile(FieldSetEntity fieldSetEntity) throws BaseException {
+		String uuid = fieldSetEntity.getString(CmnConst.UUID);
+		FieldSetEntity fieldSet = baseDao.getFieldSetEntity(CmnConst.PRODUCT_OA_DOCUMENT, uuid, false);
+		String file_name = fieldSet.getString(CmnConst.FILE_NAME);
+		this.documentation(new String[]{uuid}, "涓嬭浇", new String[]{file_name}, null);
+		this.markRead(fieldSet);
+	}
 
-            String params = directory_uuid + "," + uuids;
-            String[] param = params.split(",");
-            boolean flag = baseDao.executeUpdate("UPDATE PRODUCT_OA_document SET directory_uuid = ? WHERE " + BaseUtil.buildQuestionMarkFilter(CmnConst.UUID, uuid.length, true), param);
-            this.documentation(uuidList.toArray(), "绉诲姩", fileNameList.toArray(), directory_name);
-            return flag;
-        } else {
-            return false;
-        }
-    }
+	@Override
+	public void markRead(FieldSetEntity fieldSetEntity) throws BaseException {
 
-    @Override
-    public DataTableEntity getDocumentLog(FieldSetEntity fieldSetEntity) throws BaseException {
-        return baseDao.listTable("SELECT CONCAT(b.show_name, a.state) log,a.created_utc_datetime FROM PRODUCT_OA_document_log a LEFT JOIN product_sys_staffs b on a.created_by = b.user_id WHERE document_uuid = ? ORDER BY a.created_utc_datetime DESC",
-                new String[]{fieldSetEntity.getString(CmnConst.DOCUMENT_UUID)}, fieldSetEntity.getInteger(CmnConst.PAGESIZE), fieldSetEntity.getInteger(CmnConst.CPAGE));
-    }
+		//鑾峰彇蹇呰浜哄憳ID闆�
+		String user_ids = fieldSetEntity.getString(CmnConst.USER_IDS);
+		String read = fieldSetEntity.getString(CmnConst.READ_NUM);
+		SystemUser user = SpringMVCContextHolder.getCurrentUser();
+		user_ids = "," + user_ids + ",";
+		String rawRead = "," + read + ",";
+		String userId = "," + user.getUser_id() + ",";
+		//濡傛灉鍖呭惈鐢ㄦ埛ID
+		if (BaseUtil.strIsNull(read)) {
+			fieldSetEntity.setValue(CmnConst.READ_NUM, user.getUser_id());
+			baseDao.update(fieldSetEntity);
+		} else {
+			if (user_ids.contains(userId) && !rawRead.contains(userId)) {
+				read = read + "," + user.getUser_id();
+				fieldSetEntity.setValue(CmnConst.READ_NUM, read);
+				baseDao.update(fieldSetEntity);
+			}
+		}
+	}
 
-    @Override
-    public DataTableEntity getApplyDocument(FieldSetEntity fse) throws BaseException {
+	/**
+	 * 绉诲姩锛堟枃浠舵壒閲忕Щ鍔級6
+	 *
+	 * @param
+	 * @return
+	 * @throws BaseException
+	 */
+	@Override
+	@Transactional
+	public boolean fileMoveTo(FieldSetEntity fse) throws BaseException {
+		String directory_uuid = fse.getString(CmnConst.DIRECTORY_UUID);
+		Integer directory_type = fse.getInteger(CmnConst.DIRECTORY_TYPE);
+		Integer row = 0;
+		//1涓哄叕鍙告枃浠跺す
+		if (directory_type == 1) {
+			StringBuffer sql = new StringBuffer();
+			sql.append(" SELECT * FROM PRODUCT_OA_directory_rights  ")
+					.append(" WHERE directory_uuid = ? ")
+					.append(" AND rigths like '%3%' AND concat(',',storage_uuid,',') like ? ");//3涓烘柊澧�
+			String user_id = String.valueOf(SpringMVCContextHolder.getCurrentUser().getUser_id());
+			user_id = "%," + user_id + ",%";
+			DataTableEntity dataTableEntity = baseDao.listTable(sql.toString(), new String[]{directory_uuid, user_id});
+			row = dataTableEntity.getRows();
+		}
+		//1涓轰釜浜烘枃浠跺す
+		if (directory_type == 2 || row > 0) {
+			FieldSetEntity fieldSetEntity = baseDao.getFieldSetEntity(CmnConst.PRODUCT_OA_DIRECTORY, directory_uuid, false);
+			//鑾峰彇绉诲姩鍒扮殑鐩綍鍚�
+			String directory_name = fieldSetEntity.getString(CmnConst.DIRECTORY_NAME);
+			String uuids = fse.getString(CmnConst.UUID);
+			String[] uuid = uuids.split(",");
+			DataTableEntity dataTable = baseDao.listTable(CmnConst.PRODUCT_OA_DOCUMENT, BaseUtil.buildQuestionMarkFilter(CmnConst.UUID, uuid.length, true), uuid);
+			List<String> uuidList = ListUtils.newArrayList();
+			List<String> fileNameList = ListUtils.newArrayList();
+			for (int i = 0, length = dataTable.getRows(); i < length; i++) {
+				uuidList.add(dataTable.getFieldSetEntity(i).getString(CmnConst.UUID));
+				fileNameList.add(dataTable.getFieldSetEntity(i).getString(CmnConst.FILE_NAME));
+			}
 
-        DataTableEntity product_oa_document;
-        if(ObjectUtil.isNotEmpty(fse.getString("document_name"))){
-            String document_name = fse.getString("document_name");
-            String filter="file_name like '%"+document_name+"'%";
-            product_oa_document = baseDao.listTable("product_oa_document",filter);
-        }else {
-            product_oa_document = baseDao.listTable("product_oa_document");
-        }
+			String params = directory_uuid + "," + uuids;
+			String[] param = params.split(",");
+			boolean flag = baseDao.executeUpdate("UPDATE PRODUCT_OA_document SET directory_uuid = ? WHERE " + BaseUtil.buildQuestionMarkFilter(CmnConst.UUID, uuid.length, true), param);
+			this.documentation(uuidList.toArray(), "绉诲姩", fileNameList.toArray(), directory_name);
+			return flag;
+		} else {
+			return false;
+		}
+	}
+
+	@Override
+	public DataTableEntity getDocumentLog(FieldSetEntity fieldSetEntity) throws BaseException {
+		return baseDao.listTable("SELECT CONCAT(b.show_name, a.state) log,a.created_utc_datetime FROM PRODUCT_OA_document_log a LEFT JOIN product_sys_staffs b on a.created_by = b.user_id WHERE document_uuid = ? ORDER BY a.created_utc_datetime DESC",
+				new String[]{fieldSetEntity.getString(CmnConst.DOCUMENT_UUID)}, fieldSetEntity.getInteger(CmnConst.PAGESIZE), fieldSetEntity.getInteger(CmnConst.CPAGE));
+	}
+
+	/**
+	 * 鏂囨。鏀惰棌
+	 *
+	 * @param fse
+	 * @return
+	 */
+	public String documentCollection(FieldSetEntity fse) {
+		BaseUtil.createCreatorAndCreationTime(fse);
+		fse.setValue("document_collector", SpringMVCContextHolder.getCurrentUserId());
+		return baseDao.add(fse);
+	}
+
+	/**
+	 * 鏂囨。鍙栨秷鏀惰棌
+	 *
+	 * @param documentUUID
+	 * @return
+	 */
+	public boolean documentCancelCollection(String documentUUID) {
+		return baseDao.delete(CmnConst.PRODUCT_OA_DOCUMENT_COLLECTION, "document_uuid = ? AND document_collector = ?", new Object[]{documentUUID, SpringMVCContextHolder.getCurrentUserId()});
+	}
+
+	/**
+	 * 鏌ヨ鏂囨。鍘嗗彶鐗堟湰
+	 *
+	 * @param documentUUID
+	 * @return
+	 */
+	public DataTableEntity findDocumentHistory(String documentUUID) {
+		StringBuilder sql = new StringBuilder();
+		sql.append("SELECT A.*,B.file_name\n");
+		sql.append("FROM product_oa_document_history A \n");
+		sql.append("LEFT JOIN product_oa_document B ON B.uuid = A.document_uuid \n");
+		sql.append("WHERE A.document_uuid = ?\n");
+		sql.append("ORDER BY A.version_number");
+		return baseDao.listTable(sql.toString(), new Object[]{documentUUID});
+	}
+
+	/**
+	 * 鏂囨。鏈�鏂扮増鏈繚瀛�
+	 *
+	 * @param fse
+	 * @return
+	 */
+	@Transactional
+	public boolean documentSaveNewVersion(FieldSetEntity fse) {
+		// 鑾峰彇鏂囨。鏁版嵁鍜屾渶澶х紪鍙�
+		StringBuilder sql = new StringBuilder();
+		sql.append("SELECT A.*, IFNULL(B.max_version_number, '0')AS max_version_number \n");
+		sql.append("FROM product_oa_document A \n");
+		sql.append("LEFT JOIN ( \n");
+		sql.append("    SELECT document_uuid, MAX(version_number) AS max_version_number \n");
+		sql.append("    FROM product_oa_document_history B \n");
+		sql.append("	WHERE document_uuid = ? \n");
+		sql.append("    GROUP BY document_uuid \n");
+		sql.append(") B ON B.document_uuid = A.uuid \n");
+		sql.append("WHERE uuid = ? \n");
+		String documentUuid = fse.getString("document_uuid");
+		FieldSetEntity fseDocument = baseDao.getFieldSetEntityBySQL(sql.toString(), new Object[]{documentUuid, documentUuid}, false);
+		if (fseDocument == null) {
+			throw new BaseException(DocumentCode.DOCUMENT_DATA_NO_EXIST.getValue(), DocumentCode.DOCUMENT_DATA_NO_EXIST.getText());
+		}
+
+		String attachmentUuid = fse.getString("attachment_uuid");
+		FieldSetEntity fieldSetEntity = baseDao.getFieldSetEntity(CmnConst.PRODUCT_SYS_ATTACHMENTS, attachmentUuid, false);
+		fseDocument.setValue("file_size", fieldSetEntity.getString(CmnConst.ATTACHMENT_SIZE));
+		fseDocument.setValue("file_name", fieldSetEntity.getString("file_name"));
+		fseDocument.setValue("attachments_uuid", attachmentUuid);
+		fseDocument.setValue("latest_version", fseDocument.getInteger("max_version_number") + 1);
+
+		baseDao.saveFieldSetEntity(fseDocument);
+
+		// 鍒涘缓鏂囨。鎿嶄綔鏃ュ織淇℃伅
+		FieldSetEntity fseDocumentLog = new FieldSetEntity(CmnConst.PRODUCT_OA_DOCUMENT_LOG);
+		BaseUtil.createCreatorAndCreationTime(fseDocumentLog);
+		fseDocumentLog.setValue("document_uuid", documentUuid);
+		fseDocumentLog.setValue("opetype", "鏂板");
+		fseDocumentLog.setValue("ope_document", fieldSetEntity.getString("file_name"));
+		fseDocumentLog.setValue("state", "鏂板浜哰" + fieldSetEntity.getString("file_name") + "]鏈�鏂扮増鏈�");
+
+		//鍒涘缓鏂囨。鐗堟湰鏁版嵁瀹瑰櫒
+		FieldSetEntity fseDocumentHistory = new FieldSetEntity(CmnConst.PRODUCT_OA_DOCUMENT_HISTORY);
+		BaseUtil.createCreatorAndCreationTime(fseDocumentHistory);
+		fseDocumentHistory.setValue("document_uuid", documentUuid);
+		fseDocumentHistory.setValue("attachment_uuid", attachmentUuid);
+		fseDocumentHistory.setValue("version_number", fseDocument.getObject("latest_version"));
+		return baseDao.saveFieldSetEntity(fseDocumentHistory);
+	}
+
+	/**
+	 * 鏂囨。鐗堟湰+1
+	 *
+	 * @param originNumber
+	 * @return
+	 */
+	public String versionNUmberAddne(String originNumber) {
+		String numberStr = originNumber.substring(1); // 鍘绘帀鍓嶇紑"v"
+		int number = Integer.parseInt(numberStr); // 灏嗗瓧绗︿覆杞�
+		// 鏁板瓧鍔犱竴
+		number += 1;
+
+		// 閲嶆柊鏋勫缓瀛楃涓诧紙杩欓噷鎴戜滑鍋囪鍓嶇紑鎬绘槸"v"锛�
+		return "v" + number;
+	}
+
+	@Override
+	public DataTableEntity getApplyDocument(FieldSetEntity fse) throws BaseException {
+
+		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++) {
+
+			if(i==sub_uuid_split.length-1){
+				sub_uuids=sub_uuids+"\""+sub_uuid_split[i]+"\"";
+			}else {
+				sub_uuids=sub_uuids+"\""+sub_uuid_split[i]+"\",";
+			}
+		}
+		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
+	public void addOrUpdateApplyDocument(FieldSetEntity fse) throws BaseException {
+
+		String[] attachment = new String[0];
+		if (ObjectUtil.isNotEmpty(fse.getString("uuid"))) {
+			UUID uuid = UUID.randomUUID();
+			fse.setValue("uuid", uuid);
+			baseDao.add(fse);
+
+			if (ObjectUtil.isNotEmpty(fse.getString("attachment_uuid"))) {
+				String attachment_uuid = fse.getString("attachment_uuid");
+				attachment = attachment_uuid.split(",");
+			}
+			for (int i = 0; i < attachment.length; i++) {
+				FieldSetEntity fieldSetEntity = new FieldSetEntity();
+				fieldSetEntity.setTableName("product_oa_document_borrow_sub");
+				fieldSetEntity.setValue("borrow_uuid", uuid);
+				fieldSetEntity.setValue("sub_uuid", attachment[i]);
+
+			}
+
+		} else {
+			String uuid = fse.getString("uuid");
+			String filter = "borrow_uuid='" + uuid + "'";
+			//鍒犻櫎鍘熸潵闄勪欢淇℃伅
+			baseDao.delete("product_oa_document_borrow_sub", filter, new Object[]{});
+			baseDao.update(fse);
+			if (ObjectUtil.isNotEmpty(fse.getString("attachment_uuid"))) {
+				String attachment_uuid = fse.getString("attachment_uuid");
+				attachment = attachment_uuid.split(",");
+			}
+
+			//閲嶆柊璺熸柊闄勪欢淇℃伅
+			for (int i = 0; i < attachment.length; i++) {
+				FieldSetEntity fieldSetEntity = new FieldSetEntity();
+				fieldSetEntity.setTableName("product_oa_document_borrow_sub");
+				fieldSetEntity.setValue("borrow_uuid", uuid);
+				fieldSetEntity.setValue("sub_uuid", attachment[i]);
+				baseDao.add(fieldSetEntity);
+
+			}
 
 
-        return product_oa_document;
-    }
+		}
 
-    @Override
-    public void addOrUpdateApplyDocument(FieldSetEntity fse) throws BaseException {
+	}
 
-        String[] attachment = new String[0];
-        if(ObjectUtil.isNotEmpty(fse.getString("uuid"))){
-            UUID uuid = UUID.randomUUID();
-            fse.setValue("uuid",uuid);
-            baseDao.add(fse);
+	@Override
+	public DataTableEntity getApplyFileSort() throws BaseException {
+		StringBuilder sb = new StringBuilder();
+		List<String> param = new ArrayList<>();
+		sb.append(" SELECT b.* FROM (");
+		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_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.attachment_size");
+		sb.append(" )b order by  b.applyCount asc");
+		DataTableEntity dataTableEntity = baseDao.listTable(sb.toString(), param.toArray());
+		return dataTableEntity;
+	}
 
-            if(ObjectUtil.isNotEmpty(fse.getString("attachment_uuid"))){
-                String attachment_uuid = fse.getString("attachment_uuid");
-                attachment= attachment_uuid.split(",");
-            }
-            for (int i = 0; i < attachment.length; i++) {
-                FieldSetEntity fieldSetEntity = new FieldSetEntity();
-                fieldSetEntity.setTableName("product_oa_document_borrow_sub");
-                fieldSetEntity.setValue("borrow_uuid",uuid);
-                fieldSetEntity.setValue("sub_uuid",attachment[i]);
+	@Override
+	public DataTableEntity getApplyUserSort() throws BaseException {
+		StringBuilder sb = new StringBuilder();
+		List<String> param = new ArrayList<>();
+		sb.append(" SELECT b.*,a.applayCount ");
+		sb.append(" FROM (");
+		sb.append(" SELECT borrower,count(borrower) as applayCount");
+		sb.append(" FROM product_oa_document_borrow ");
+		sb.append(" group by borrower");
+		sb.append(" ) a LEFT JOIN ");
+		sb.append(" (");
+		sb.append(" SELECT a.borrower,a.show_name,a.applayFileCount ");
+		sb.append(" FROM (");
+		sb.append(" SELECT w.borrower,s.show_name,");
+		sb.append(" count( borrower )  AS applayCount,");
+		sb.append(" count(sub_uuid) as applayFileCount ");
+		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_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");
+		DataTableEntity dataTableEntity = baseDao.listTable(sb.toString(), param.toArray());
+		return dataTableEntity;
+	}
 
-            }
+	@Override
+	public FieldSetEntity getApplyInfo(FieldSetEntity fes) throws BaseException {
+		String uuid = fes.getString("uuid");
+		FieldSetEntity product_oa_document_borrow = baseDao.getFieldSetEntity("product_oa_document_borrow", uuid, false);
+		return product_oa_document_borrow;
+	}
 
-        }else {
-            String uuid = fse.getString("uuid");
-            String filter="borrow_uuid='"+uuid+"'";
-            //鍒犻櫎鍘熸潵闄勪欢淇℃伅
-            baseDao.delete("product_oa_document_borrow_sub",filter,new Object[]{});
-            baseDao.update(fse);
-            if(ObjectUtil.isNotEmpty(fse.getString("attachment_uuid"))){
-                String attachment_uuid = fse.getString("attachment_uuid");
-                attachment= attachment_uuid.split(",");
-            }
+	public Map<String, String> isPermission(String documentUuid) {
+		//	楠岃瘉鏂囨。鏉冮檺
+		if (StringUtils.isEmpty(documentUuid)) {
+			throw new BaseException(DocumentCode.DOCUMENT_FORM_NODATA);
+		}
 
-            //閲嶆柊璺熸柊闄勪欢淇℃伅
-            for (int i = 0; i < attachment.length; i++) {
-                FieldSetEntity fieldSetEntity = new FieldSetEntity();
-                fieldSetEntity.setTableName("product_oa_document_borrow_sub");
-                fieldSetEntity.setValue("borrow_uuid",uuid);
-                fieldSetEntity.setValue("sub_uuid",attachment[i]);
-                baseDao.add(fieldSetEntity);
+		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");
+				}
+			}
+		}
 
-
-        }
-
-    }
-
-    @Override
-    public DataTableEntity getApplayFileSort() throws BaseException {
-        StringBuilder sb=new StringBuilder();
-        sb.append(" SELECT b.* FROM (");
-        sb.append(" SELECT t.uuid,t.file_name,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(" 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");
-        sb.append(" )b order by  b.applyCount asc");
-        DataTableEntity dataTableEntity = baseDao.listTable(sb.toString());
-        return dataTableEntity;
-    }
-
-    @Override
-    public DataTableEntity getApplayUserSort() throws BaseException {
-        StringBuilder sb=new StringBuilder();
-        sb.append(" SELECT a.borrower,a.show_name,a.applayCount,a.applayFileCount ");
-        sb.append(" FROM (");
-        sb.append(" SELECT w.borrower,");
-        sb.append(" (select   count(borrower)  from  product_oa_document_borrow group by borrower ) as  applayCount,");
-        sb.append(" count(sub_uuid) as applayFileCount ");
-        sb.append(" FROM product_oa_document_borrow  w ");
-        sb.append(" JOIN product_oa_document_borrow_sub b");
-        sb.append(" on b.borrow_uuid=w.uuid");
-        sb.append(" JOIN product_oa_document t");
-        sb.append(" on b.sub_uuid=t.uuid");
-        sb.append(" 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");
-        sb.append(" order by a.applayCount,a.applayFileCount asc");
-        DataTableEntity dataTableEntity = baseDao.listTable(sb.toString());
-        return dataTableEntity;
-    }
-
-    @Override
-    public FieldSetEntity getApplayInfo(FieldSetEntity fes) throws BaseException {
-        String uuid = fes.getString("uuid");
-        FieldSetEntity product_oa_document_borrow = baseDao.getFieldSetEntity("product_oa_document_borrow", uuid, false);
-        return product_oa_document_borrow;
-    }
+		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;
+	}
+	public DataTableEntity getFileItemize(FieldSetEntity fes) throws BaseException {
+		DataTableEntity dt = baseDao.listTable("SELECT b.classify_name,COUNT(1) number FROM product_oa_document a LEFT JOIN product_oa_document_classify_config b  on  a.business_classify_uuid=b.uuid\n" +
+				"where classify_name is not null GROUP BY b.classify_name ORDER BY COUNT(1)",new String[]{});
+		for (int i = 0; i <dt.getRows() ; i++) {
+			dt.setFieldValue(i,"ranking",i+1);
+		}
+		return dt;
+	}
 }

--
Gitblit v1.9.2