From d98c519d9b22bb7b090830ea68735b75bbb33849 Mon Sep 17 00:00:00 2001 From: 许鹏程 <1821349743@qq.com> Date: 星期三, 28 八月 2024 10:26:19 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- src/main/java/com/product/file/service/DocumentService.java | 242 ++++++++++++++++++++++++++++++++++++----------- 1 files changed, 183 insertions(+), 59 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..f4c665f 100644 --- a/src/main/java/com/product/file/service/DocumentService.java +++ b/src/main/java/com/product/file/service/DocumentService.java @@ -6,7 +6,6 @@ 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.core.dao.BaseDao; import com.product.core.entity.DataTableEntity; import com.product.core.entity.FieldMetaEntity; @@ -17,6 +16,7 @@ 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; @@ -54,35 +54,43 @@ @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(","); + 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, uuid.length, true), uuid); + 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 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)); + 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 = fse.getString(CmnConst.FILE_NAME); - fieldSet.setValue(CmnConst.FILE_NAME, file_name); + 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); - 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); + fseDocument.setValue(CmnConst.FILE_TYPE, file_type); + //淇濆瓨鏁版嵁 + String documentUUID = baseDao.add(fseDocument); + + //鍒涘缓鏂囨。鐗堟湰鏁版嵁瀹瑰櫒 + 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); + + uuidList.add(documentUUID); fileNameList.add(file_name); } this.documentation(uuidList.toArray(), "鏂板", fileNameList.toArray(), null); @@ -133,16 +141,20 @@ 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)); + 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("FROM( \n"); + 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 = ?"); + 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; } @@ -371,12 +383,12 @@ sql.append(" and tricode_parent = ? "); //鍔犺浇鏂囦欢璺緞 DataTableEntity dataTableEntity = documentDirectoryService.getDirectoryStructure(fse); - object.put("PRODUCT_OA_directory_path", BaseUtil.dataTableEntityToJson(dataTableEntity)); + 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()); - object.put("PRODUCT_OA_directory_sub", BaseUtil.dataTableEntityToJson(data)); + object.put("product_oa_directory_sub", BaseUtil.dataTableEntityToJson(data)); baseDao.listInternationDataTable(data, null); return object; @@ -470,20 +482,122 @@ 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 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 { - 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); + 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()); + }else { - product_oa_document = baseDao.listTable("product_oa_document"); + 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()); + + } - - - return product_oa_document; + return product_oa_document; } @Override @@ -534,45 +648,55 @@ } @Override - public DataTableEntity getApplayFileSort() throws BaseException { + 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,s.show_name,t.created_utc_datetime,count(t.uuid) as applyCount"); + 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(" 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(" 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"); - DataTableEntity dataTableEntity = baseDao.listTable(sb.toString()); + DataTableEntity dataTableEntity = baseDao.listTable(sb.toString(),param.toArray()); return dataTableEntity; } @Override - public DataTableEntity getApplayUserSort() throws BaseException { + public DataTableEntity getApplyUserSort() throws BaseException { StringBuilder sb=new StringBuilder(); - sb.append(" SELECT a.borrower,a.show_name,a.applayCount,a.applayFileCount "); + List<String> param=new ArrayList<>(); + sb.append(" SELECT b.*,a.applayCount "); 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(" 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(" JOIN product_oa_document_borrow_sub b"); + sb.append(" left JOIN product_oa_document_borrow_sub b"); sb.append(" on b.borrow_uuid=w.uuid"); - sb.append(" JOIN product_oa_document t"); + sb.append(" left JOIN product_oa_document t"); sb.append(" on b.sub_uuid=t.uuid"); - sb.append(" JOIN product_sys_staffs s"); + 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"); - sb.append(" order by a.applayCount,a.applayFileCount asc"); - DataTableEntity dataTableEntity = baseDao.listTable(sb.toString()); + 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 getApplayInfo(FieldSetEntity fes) throws BaseException { + 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; -- Gitblit v1.9.2