From ab752ccec6ba00424c0f4bedc252a940706831e1 Mon Sep 17 00:00:00 2001 From: liyawei Date: Wed, 30 Mar 2022 17:24:04 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E6=A1=A3=E6=8B=86=E5=88=86=E6=9D=A1?= =?UTF-8?q?=E6=AC=BE-=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BussDocumentLibraryEOServiceImpl.java | 13 +- .../FileSplitItemsEOController.java | 240 ++++- .../split/mapper/FileSplitItemsEOMapper.java | 6 + .../mapper/SarFileSplitItemsValEOMapper.java | 2 + .../mapper/SarFileSplitMenuEOMapper.java | 3 +- .../mapper/xml/FileSplitItemsEOMapper.xml | 26 + .../mapper/xml/SarFileSplitItemsEOMapper.xml | 114 +-- .../xml/SarFileSplitItemsValEOMapper.xml | 29 +- .../mapper/xml/SarFileSplitMenuEOMapper.xml | 8 + .../service/IFileSplitItemsEOService.java | 35 +- .../impl/FileSplitItemsEOServiceImpl.java | 918 +++++++++++++++++- .../impl/SarFileSplitInfoServiceImpl.java | 15 + .../impl/SarFileSplitMenuEOServiceImpl.java | 16 +- 13 files changed, 1328 insertions(+), 97 deletions(-) diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/service/impl/BussDocumentLibraryEOServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/service/impl/BussDocumentLibraryEOServiceImpl.java index f2cf2b972..1284bc792 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/service/impl/BussDocumentLibraryEOServiceImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/document/service/impl/BussDocumentLibraryEOServiceImpl.java @@ -903,6 +903,7 @@ public class BussDocumentLibraryEOServiceImpl extends ServiceImpl page(@RequestBody Map parameter) throws Exception { @@ -39,17 +66,27 @@ public class FileSplitItemsEOController extends JeroController addSplitItems(@RequestBody Map parameter) { - List itemValEOList = (List) parameter.get("itemValEOList"); - if(CollectionUtils.isNotEmpty(itemValEOList)) { - List itemValEOListNew = new ArrayList<>(); - for (SarFileSplitItemsValEO itemsValEO : itemValEOList) { - itemsValEO.setItemContent(StringEscapeUtils.unescapeHtml4(itemsValEO.getItemContent())); - itemValEOListNew.add(itemsValEO); + List itemValEOList = (List) parameter.get("itemValEOList"); + if (CollectionUtils.isNotEmpty(itemValEOList)) { + List valEOList = new ArrayList<>(); + for (Object object : itemValEOList) { + String jsonStr = JSON.toJSONString(object); + SarFileSplitItemsValEO itemValEO = JSONObject.parseObject(jsonStr, SarFileSplitItemsValEO.class); + valEOList.add(itemValEO); + } + + if (CollectionUtils.isNotEmpty(valEOList)) { + List itemValEOListNew = new ArrayList<>(); + for (SarFileSplitItemsValEO itemsValEO : valEOList) { + itemsValEO.setItemContent(StringEscapeUtils.unescapeHtml4(itemsValEO.getItemContent())); + itemValEOListNew.add(itemsValEO); + } + parameter.put("itemValEOList", itemValEOListNew); } - parameter.put("itemValEOList",itemValEOListNew); } int resultCount = fileSplitItemsEOService.addItemContent(parameter); if (resultCount > 0) { @@ -59,17 +96,27 @@ public class FileSplitItemsEOController extends JeroController updateSplitItems(@RequestBody Map parameter) { - List itemValEOList = (List) parameter.get("itemValEOList"); - if(CollectionUtils.isNotEmpty(itemValEOList)) { - List itemValEOListNew = new ArrayList<>(); - for (SarFileSplitItemsValEO itemsValEO : itemValEOList) { - itemsValEO.setItemContent(StringEscapeUtils.unescapeHtml4(itemsValEO.getItemContent())); - itemValEOListNew.add(itemsValEO); + List itemValEOList = (List) parameter.get("itemValEOList"); + if (CollectionUtils.isNotEmpty(itemValEOList)) { + List valEOList = new ArrayList<>(); + for (Object object : itemValEOList) { + String jsonStr = JSON.toJSONString(object); + SarFileSplitItemsValEO itemValEO = JSONObject.parseObject(jsonStr, SarFileSplitItemsValEO.class); + valEOList.add(itemValEO); + } + + if (CollectionUtils.isNotEmpty(valEOList)) { + List itemValEOListNew = new ArrayList<>(); + for (SarFileSplitItemsValEO itemsValEO : valEOList) { + itemsValEO.setItemContent(StringEscapeUtils.unescapeHtml4(itemsValEO.getItemContent())); + itemValEOListNew.add(itemsValEO); + } + parameter.put("itemValEOList", itemValEOListNew); } - parameter.put("itemValEOList",itemValEOListNew); } int resultCount = fileSplitItemsEOService.updateItemContent(parameter); if (resultCount > 0) { @@ -79,6 +126,7 @@ public class FileSplitItemsEOController extends JeroController> judgeContaintChilds(String ids) { - Map result = fileSplitItemsEOService.judgeContaintChilds(ids); + @AutoLog(value = "批量设置表单中英文切换") + @ApiOperation(value="批量设置表单中英文切换", notes="批量设置表单中英文切换") + @GetMapping(value = "/getBatchSetForm") + public Result>> getBatchSetForm(@RequestParam(name = "flag") String flag, + @RequestParam(name = "cut") String cut) { + List> list = fileSplitItemsEOService.getBatchSetForm(flag, cut); + return Result.OK(list); + } + + @AutoLog(value = "文档拆分条款信息-判断包含子节点") + @ApiOperation(value = "文档拆分条款信息-判断包含子节点") + @GetMapping("/judgeContainChilds") + public Result> judgeContainChilds(String ids) { + Map result = fileSplitItemsEOService.judgeContainChilds(ids); return Result.OK(result); } + @AutoLog(value = "文档拆分条款信息-批量合并") + @ApiOperation(value = "文档拆分条款信息-批量合并") + @GetMapping("/batchMergeItems") + public Result> batchMergeItems(String ids) { + Map result = fileSplitItemsEOService.batchMergeItems(ids); + return Result.OK("合并成功", result); + } + + @AutoLog(value = "文档拆分条款信息-批量设置") + @ApiOperation(value = "文档拆分条款信息-批量设置") + @PostMapping("/batchSet") + public Result batchSet(@RequestBody Map parameter) { + int result = fileSplitItemsEOService.batchSet(parameter); // ids, technology_territory, function_territory, information_category + return Result.OK("设置成功", result); + } + + @AutoLog(value = "模板下载") + @ApiOperation(value = "模板下载") + @GetMapping(value = "/exportTemplate") + public void exportTemplate(@RequestParam(name = "cut") String cut, HttpServletResponse response, HttpServletRequest request) throws Exception { + fileSplitItemsEOService.exportTemplate(cut,response,request); + } + + @ApiOperation(value = "文档拆分条款信息-导出") + @GetMapping(value = "/exportSplitInfoZip") + public void exportSplitInfoZip(@RequestParam(value = "cut") String cut, + @RequestParam(value = "idList", required = false) String idList, + @RequestParam(value = "infoId") String infoId, + @RequestParam(value = "exportName", required = false) String exportName, + HttpServletResponse response, + HttpServletRequest request) { + fileSplitItemsEOService.exportSplitInfo(cut, idList, infoId, exportName, response, request); + } + + @AutoLog(value = "文档拆分条款信息-导入") + @ApiOperation(value = "文档拆分条款信息-导入") + @PostMapping(value = "/importSplitItems") + public Result importSplitItems( MultipartFile file, + @RequestParam(value = "cut") String cut, + @RequestParam(value = "menuId") String menuId, + @RequestParam(value = "infoId") String infoId) throws Exception { + //验证文件名是否合格 + /* 截取后缀名 */ + int pos = file.getOriginalFilename().lastIndexOf("."); + String str = file.getOriginalFilename().substring(pos+1).toLowerCase(); + String filenameorg = file.getOriginalFilename().substring(0,pos); + //判断上传文件必须是zip + // TODO 允许导入rar + if (!str.equals("zip")) { + return Result.error("请上传zip文件"); + } + String path = uploadpath + "/modal/"+filenameorg; + File saveDirectory = new File(path); + if(!saveDirectory.isDirectory()){ + saveDirectory.mkdir(); + } + FileUtils.copyInputStreamToFile(file.getInputStream(), new File(path +"/"+ file.getOriginalFilename())); + try{ + //解压缩 + String zipEntryName = FileUnZip.unZipFiles(path +"/"+ file.getOriginalFilename(),path); + // 数据相关处理, + // 1.获取其中的Excel, + List excelfilelist = FileUnZip.readExcelFile(zipEntryName); + if(excelfilelist.size()<1){ + //删除原上传文件 + FileUnZip.deleteDir(saveDirectory); + return Result.error("压缩包内没有上传Excel数据"); + } else if (excelfilelist.size()>1) { + //删除原上传文件 + FileUnZip.deleteDir(saveDirectory); + return Result.error("压缩包内有多个Excel数据源"); + } + File excelfile = excelfilelist.get(0); + // 导入参数设置,默认即可 + ImportParams params = new ImportParams(); + try { + // 导入表头 + String fields[] = {"条款号", "条款名称","条款内容","新车型实施日期", + "在产车实施日期","关联零部件","适用车型","引用标准","备注","关联文件"}; + params.setImportFields(fields); + List> result = new ArrayList<>(); + // 解析excel,并返回校验信息 + result = ExcelImportUtil.importExcel(excelfile, SarFileSplitItemsImportDto.class, params); + Long getExcelInfo = System.currentTimeMillis(); + //excel读取到的数据 + List> datas = result; + if(datas!=null &&!datas.isEmpty()){ + try { + //获取全部sheet页中表格 + XSSFWorkbook workbook=new XSSFWorkbook(new FileInputStream(excelfile)); + XSSFSheet sheet=null; + List getSheetTableList = new ArrayList(); + for (int i = 1; i < workbook.getNumberOfSheets(); i++) {//获取每个Sheet表 + sheet = workbook.getSheetAt(i); + SplitTableInfo splitTableInfo = new SplitTableInfo(); + splitTableInfo.setTableName(sheet.getSheetName()); + String tableHtml = POIReadExcelToHtml.readExcelToHtml(workbook,i,false); + splitTableInfo.setTableHtml(tableHtml); + getSheetTableList.add(splitTableInfo); + } + int i = 0 ; + List> datasUpdate = new ArrayList<>(); + //2019.05.14 当读取exceL出现空行过多时,空行数为20以上时中断读取,将数据清洗为新的list + for(Map sarStandImportDto :datas){ + if(i>20){ + break; + } + //判断此行数据是否全部为空 + if(checkObjAllFieldsIsNull(sarStandImportDto)){ + i++; + //是则不读取 + continue; + } + i = 0; + datasUpdate.add(sarStandImportDto); + } + String unzipfilepath = zipEntryName; + Result message = fileSplitItemsEOService.importSplitItems(datasUpdate,menuId,unzipfilepath,infoId,getSheetTableList); + //删除原上传文件 + FileUnZip.deleteDir(saveDirectory); + return message; + } catch (Exception e) { + //删除原上传文件 + FileUnZip.deleteDir(saveDirectory); + return Result.error(e.getMessage()); + } + }else{ + //删除原上传文件 + FileUnZip.deleteDir(saveDirectory); + return Result.error("没有可导入的数据,请检查!"); + } + } catch (NoSuchElementException e){ + FileUnZip.deleteDir(saveDirectory); + return Result.error("没有可导入的数据,请检查!"); + } catch (Exception e) { + //删除原上传文件 + FileUnZip.deleteDir(saveDirectory); + return Result.error( "读取失败,请严格按照模板文件导入数据"); + } + } catch (Exception e) { + //删除原上传文件 + FileUnZip.deleteDir(saveDirectory); + return Result.error("读取失败,请严格按照模板文件导入数据"); + } + } } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/mapper/FileSplitItemsEOMapper.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/mapper/FileSplitItemsEOMapper.java index e806986c7..e79b701d4 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/mapper/FileSplitItemsEOMapper.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/mapper/FileSplitItemsEOMapper.java @@ -52,7 +52,13 @@ public interface FileSplitItemsEOMapper extends BaseMapper List> queryByItemsIds(@Param("idList") List idList); + List> queryItemByIds(@Param("idList") List idList); + List> queryItemsByMenuId(@Param("menuId") String menuId); int deleteByItemsIdList(@Param("idList") List idList); + + List> queryByOrdersForExport(@Param("field") String field, + @Param("idList")List idList, + @Param("infoId") String infoId); } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/mapper/SarFileSplitItemsValEOMapper.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/mapper/SarFileSplitItemsValEOMapper.java index f8be34150..9268f3aad 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/mapper/SarFileSplitItemsValEOMapper.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/mapper/SarFileSplitItemsValEOMapper.java @@ -25,6 +25,8 @@ public interface SarFileSplitItemsValEOMapper extends BaseMapper list); + int updateForeach2(@Param("list") List list); + int deleteValByInfoIds(@Param("idList") List idList); int deleteValByitemIds(@Param("idList") List idList); diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/mapper/SarFileSplitMenuEOMapper.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/mapper/SarFileSplitMenuEOMapper.java index e21347122..4bbb0e050 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/mapper/SarFileSplitMenuEOMapper.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/mapper/SarFileSplitMenuEOMapper.java @@ -68,5 +68,6 @@ public interface SarFileSplitMenuEOMapper extends BaseMapper List queryByPage(SarFileSplitMenuEOPage page); - List getAllChildrenId(String menuId); + List selectBatchIds(@Param("idList") List idList); + } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/mapper/xml/FileSplitItemsEOMapper.xml b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/mapper/xml/FileSplitItemsEOMapper.xml index 62bb174e8..b22cdd8d7 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/mapper/xml/FileSplitItemsEOMapper.xml +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/mapper/xml/FileSplitItemsEOMapper.xml @@ -57,6 +57,18 @@ group by menu_id + + + + delete from SAR_FILE_SPLIT_ITEMS where id in @@ -64,4 +76,18 @@ #{item} + + diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/mapper/xml/SarFileSplitItemsEOMapper.xml b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/mapper/xml/SarFileSplitItemsEOMapper.xml index 178021192..80911708e 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/mapper/xml/SarFileSplitItemsEOMapper.xml +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/mapper/xml/SarFileSplitItemsEOMapper.xml @@ -39,9 +39,9 @@ - + - SAR_FILE_SPLIT_ITEMS.id, SAR_FILE_SPLIT_ITEMS.info_id, SAR_FILE_SPLIT_ITEMS.items_num, items_name, iterms_conditions, newcar_put_time, product_put_time, menu_id, function_territory, apply_arctic, reference_stand, information_category, relevance_file, SAR_FILE_SPLIT_ITEMS.technology_territory, SAR_FILE_SPLIT_ITEMS.valid_flag, SAR_FILE_SPLIT_ITEMS.creation_user, SAR_FILE_SPLIT_ITEMS.creation_time, SAR_FILE_SPLIT_ITEMS.modify_time, SAR_FILE_SPLIT_ITEMS.modify_user,SAR_FILE_SPLIT_ITEMS.iss_force + sar_file_split_items_0329.id, sar_file_split_items_0329.info_id, sar_file_split_items_0329.items_num, items_name, iterms_conditions, newcar_put_time, product_put_time, menu_id, function_territory, apply_arctic, reference_stand, information_category, relevance_file, sar_file_split_items_0329.technology_territory, sar_file_split_items_0329.valid_flag, sar_file_split_items_0329.creation_user, sar_file_split_items_0329.creation_time, sar_file_split_items_0329.modify_time, sar_file_split_items_0329.modify_user,sar_file_split_items_0329.iss_force @@ -49,37 +49,37 @@ where 1=1 - and SAR_FILE_SPLIT_ITEMS.id ${idOperator} #{id} + and sar_file_split_items_0329.id ${idOperator} #{id} - and SAR_FILE_SPLIT_ITEMS.info_id ${infoIdOperator} #{infoId} + and sar_file_split_items_0329.info_id ${infoIdOperator} #{infoId} - and SAR_FILE_SPLIT_ITEMS.items_num ${itemsNumOperator} #{itemsNum} + and sar_file_split_items_0329.items_num ${itemsNumOperator} #{itemsNum} - and SAR_FILE_SPLIT_ITEMS.items_name ${itemsNameOperator} #{itemsName} + and sar_file_split_items_0329.items_name ${itemsNameOperator} #{itemsName} - and SAR_FILE_SPLIT_ITEMS.iterms_conditions ${itermsConditionsOperator} #{itermsConditions} + and sar_file_split_items_0329.iterms_conditions ${itermsConditionsOperator} #{itermsConditions} - and SAR_FILE_SPLIT_ITEMS.newcar_put_time ${newcarPutTimeOperator} #{newcarPutTime} + and sar_file_split_items_0329.newcar_put_time ${newcarPutTimeOperator} #{newcarPutTime} - and SAR_FILE_SPLIT_ITEMS.newcar_put_time >= #{newcarPutTime1} + and sar_file_split_items_0329.newcar_put_time >= #{newcarPutTime1} - and SAR_FILE_SPLIT_ITEMS.newcar_put_time <= #{newcarPutTime2} + and sar_file_split_items_0329.newcar_put_time <= #{newcarPutTime2} - and SAR_FILE_SPLIT_ITEMS.product_put_time ${productPutTimeOperator} #{productPutTime} + and sar_file_split_items_0329.product_put_time ${productPutTimeOperator} #{productPutTime} - and SAR_FILE_SPLIT_ITEMS.product_put_time >= #{productPutTime1} + and sar_file_split_items_0329.product_put_time >= #{productPutTime1} - and SAR_FILE_SPLIT_ITEMS.product_put_time <= #{productPutTime2} + and sar_file_split_items_0329.product_put_time <= #{productPutTime2} and menu_id = #{sMenuId} @@ -100,34 +100,34 @@ and relevance_file ${relevanceFileOperator} #{relevanceFile} - and SAR_FILE_SPLIT_ITEMS.technology_territory ${technologyTerritoryOperator} #{technologyTerritory} + and sar_file_split_items_0329.technology_territory ${technologyTerritoryOperator} #{technologyTerritory} - and SAR_FILE_SPLIT_ITEMS.valid_flag ${validFlagOperator} #{validFlag} + and sar_file_split_items_0329.valid_flag ${validFlagOperator} #{validFlag} - and SAR_FILE_SPLIT_ITEMS.creation_user ${creationUserOperator} #{creationUser} + and sar_file_split_items_0329.creation_user ${creationUserOperator} #{creationUser} - and SAR_FILE_SPLIT_ITEMS.creation_time ${creationTimeOperator} #{creationTime} + and sar_file_split_items_0329.creation_time ${creationTimeOperator} #{creationTime} - and SAR_FILE_SPLIT_ITEMS.creation_time >= #{creationTime1} + and sar_file_split_items_0329.creation_time >= #{creationTime1} - and SAR_FILE_SPLIT_ITEMS.creation_time <= #{creationTime2} + and sar_file_split_items_0329.creation_time <= #{creationTime2} - and SAR_FILE_SPLIT_ITEMS.modify_time ${modifyTimeOperator} #{modifyTime} + and sar_file_split_items_0329.modify_time ${modifyTimeOperator} #{modifyTime} - and SAR_FILE_SPLIT_ITEMS.modify_time >= #{modifyTime1} + and sar_file_split_items_0329.modify_time >= #{modifyTime1} - and SAR_FILE_SPLIT_ITEMS.modify_time <= #{modifyTime2} + and sar_file_split_items_0329.modify_time <= #{modifyTime2} - and SAR_FILE_SPLIT_ITEMS.modify_user ${modifyUserOperator} #{modifyUser} + and sar_file_split_items_0329.modify_user ${modifyUserOperator} #{modifyUser} @@ -135,18 +135,18 @@ - insert into SAR_FILE_SPLIT_ITEMS() + insert into sar_file_split_items_0329() values (#{id, jdbcType=VARCHAR}, #{infoId, jdbcType=VARCHAR}, #{itemsNum, jdbcType=VARCHAR}, #{itemsName, jdbcType=VARCHAR}, #{itermsConditions, jdbcType=CLOB}, #{newcarPutTime, jdbcType=TIMESTAMP}, #{productPutTime, jdbcType=TIMESTAMP}, #{menuId, jdbcType=VARCHAR}, #{functionTerritory, jdbcType=VARCHAR}, #{applyArctic, jdbcType=VARCHAR}, #{referenceStand, jdbcType=VARCHAR}, #{informationCategory, jdbcType=VARCHAR}, #{relevanceFile, jdbcType=VARCHAR}, #{technologyTerritory, jdbcType=VARCHAR}, #{validFlag, jdbcType=INTEGER}, #{creationUser, jdbcType=VARCHAR}, #{creationTime, jdbcType=TIMESTAMP}, #{modifyTime, jdbcType=TIMESTAMP}, #{modifyUser, jdbcType=VARCHAR}) - insert into SAR_FILE_SPLIT_ITEMS + insert into sar_file_split_items_0329 id, info_id, @@ -195,7 +195,7 @@ - update SAR_FILE_SPLIT_ITEMS + update sar_file_split_items_0329 set info_id = #{infoId}, items_num = #{itemsNum}, items_name = #{itemsName}, @@ -219,7 +219,7 @@ - update SAR_FILE_SPLIT_ITEMS + update sar_file_split_items_0329 info_id = #{infoId}, @@ -288,27 +288,27 @@ where id = #{id} - + - delete from SAR_FILE_SPLIT_ITEMS + delete from sar_file_split_items_0329 where id = #{value} - + - + - select from SAR_FILE_SPLIT_ITEMS - left join SAR_FILE_SPLIT_MENU on SAR_FILE_SPLIT_ITEMS.MENU_ID = SAR_FILE_SPLIT_MENU.id - where SAR_FILE_SPLIT_ITEMS.valid_flag = '0' and menu_id in ( + select from sar_file_split_items_0329 + left join SAR_FILE_SPLIT_MENU on sar_file_split_items_0329.MENU_ID = SAR_FILE_SPLIT_MENU.id + where sar_file_split_items_0329.valid_flag = '0' and menu_id in ( SELECT m.id FROM SAR_FILE_SPLIT_MENU m,( SELECT ( @nodes := querySplitMenuChildren (#{menuId})) AS pids ) t WHERE @@ -426,7 +426,7 @@ - delete from SAR_FILE_SPLIT_ITEMS + delete from sar_file_split_items_0329 where id in #{item} @@ -443,14 +443,14 @@ + select * from SAR_FILE_SPLIT_MENU + where id in + + #{item} + + + diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/service/IFileSplitItemsEOService.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/service/IFileSplitItemsEOService.java index b844904d2..2ea6f4104 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/service/IFileSplitItemsEOService.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/service/IFileSplitItemsEOService.java @@ -2,8 +2,18 @@ package com.jero.modules.split.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; +import com.jero.common.api.vo.Result; +import com.jero.modules.split.common.SplitTableInfo; +import com.jero.modules.split.dto.FileSpiltValTableExportDto; +import com.jero.modules.split.dto.FileSplitValExportDto; +import com.jero.modules.split.dto.FileSplitValImgExportDto; import com.jero.modules.split.entity.SarFileSplitItemsEO; +import com.jero.modules.split.entity.SarFileSplitItemsValEO; +import com.jero.modules.split.page.SarFileSplitItemsEOPage; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; import java.util.List; import java.util.Map; @@ -25,8 +35,31 @@ public interface IFileSplitItemsEOService extends IService List> queryCondition(String flag, String cut); - Map judgeContaintChilds(String ids); + Map judgeContainChilds(String ids); Map selectByPrimaryKey(String id); + Map batchMergeItems(String ids); + + int batchSet(Map parameter); + + Result importSplitItems(List> list, String menuId, String filepath, String infoId, List getSheetTableList); + + void exportTemplate(String cut, HttpServletResponse response, HttpServletRequest request); + + List> getBatchSetForm(String flag, String cut); + + void filterMap(Map map); + + List> queryByOrdersForExport(String cut, String field, List idList, String infoId); + + void downLoadImgList(List allImgList,String fileNowPath) throws IOException; + + void exportSplitInfo(String cut, String idList, String infoId,String exportName, HttpServletResponse response, HttpServletRequest request); + + List combineItemValInfo(List getValList, + List allTableList, + List allImgList, + SarFileSplitItemsEOPage page); + } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/service/impl/FileSplitItemsEOServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/service/impl/FileSplitItemsEOServiceImpl.java index 3390fda82..4f932bff3 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/service/impl/FileSplitItemsEOServiceImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/service/impl/FileSplitItemsEOServiceImpl.java @@ -1,34 +1,72 @@ package com.jero.modules.split.service.impl; +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.ZipUtil; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.aliyuncs.utils.IOUtils; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.jero.common.api.vo.Result; import com.jero.common.constant.enums.CutEnum; import com.jero.common.constant.enums.ModuleEnum; import com.jero.common.constant.enums.YesOrNoEnum; +import com.jero.common.exception.JeroBootException; import com.jero.common.system.vo.LoginUser; import com.jero.generater.modules.online.cgform.entity.OnlCgformField; import com.jero.generater.modules.online.cgform.service.impl.OnlCgformFieldServiceImpl; import com.jero.modules.document.enums.FieldTypeEnum; +import com.jero.modules.lanswitch.service.ILanguageSwitchService; +import com.jero.modules.oss.entity.OSSFile; +import com.jero.modules.oss.service.IOSSFileService; +import com.jero.modules.split.common.ConvertHtml2Excel; +import com.jero.modules.split.common.ReadExcel; +import com.jero.modules.split.common.SplitTableInfo; +import com.jero.modules.split.dto.FileSpiltValTableExportDto; +import com.jero.modules.split.dto.FileSplitValExportDto; +import com.jero.modules.split.dto.FileSplitValImgExportDto; import com.jero.modules.split.entity.SarFileSplitItemsEO; import com.jero.modules.split.entity.SarFileSplitItemsValEO; import com.jero.modules.split.entity.SarFileSplitMenuEO; import com.jero.modules.split.mapper.FileSplitItemsEOMapper; import com.jero.modules.split.mapper.SarFileSplitItemsValEOMapper; import com.jero.modules.split.mapper.SarFileSplitMenuEOMapper; +import com.jero.modules.split.page.SarFileSplitItemsEOPage; +import com.jero.modules.split.page.SarFileSplitItemsTableEOPage; +import com.jero.modules.split.page.SarFileSplitItemsValEOPage; import com.jero.modules.split.service.IFileSplitItemsEOService; +import com.jero.modules.split.service.ISarFileSplitItemsValEOService; import com.jero.modules.system.entity.SysCategory; import com.jero.modules.system.entity.SysCategoryTreeVO; import com.jero.modules.system.entity.SysDictItem; import com.jero.modules.system.service.impl.SysCategoryServiceImpl; import com.jero.modules.system.service.impl.SysDictItemServiceImpl; import com.jero.modules.system.util.UserUtils; +import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.poi.common.usermodel.HyperlinkType; +import org.apache.poi.hssf.usermodel.*; +import org.apache.poi.hssf.util.HSSFColor; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.ss.util.CellRangeAddress; +import org.apache.poi.xssf.usermodel.XSSFCellStyle; +import org.apache.poi.xssf.usermodel.XSSFRichTextString; +import org.apache.poi.xssf.usermodel.XSSFSheet; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.shiro.SecurityUtils; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.nio.file.StandardOpenOption; import java.text.SimpleDateFormat; import java.util.*; import java.util.stream.Collectors; @@ -55,10 +93,26 @@ public class FileSplitItemsEOServiceImpl extends ServiceImpl parameter){ - List getValList = (List) parameter.get("itemValEOList"); + List itemValEOList = (List) parameter.get("itemValEOList"); + List getValList = new ArrayList<>(); + for(Object object : itemValEOList) { + String jsonStr = JSON.toJSONString(object); + SarFileSplitItemsValEO itemValEO = JSONObject.parseObject(jsonStr, SarFileSplitItemsValEO.class); + getValList.add(itemValEO); + } + String itemConditions = ""; String userId = UserUtils.getUserId(); String itemId = UUID.randomUUID().toString().replace("-", ""); @@ -74,8 +128,12 @@ public class FileSplitItemsEOServiceImpl extends ServiceImpl"; } else if ("IMG".equals(valEO.getType())) { -// valContent = ""; - valContent = valEO.getItemContent(); + String ossFileId = valEO.getItemContent(); + OSSFile ossFile = ossFileService.getById(ossFileId); + String url = ossFile.getUrl(); + String imgUrl = "uploadPath/" + url.substring(url.lastIndexOf("/")+1); + valContent = ""; +// valContent = valEO.getItemContent(); } else if ("TABLE".equals(valEO.getType())) { valContent = valEO.getItemContent(); } @@ -101,12 +159,22 @@ public class FileSplitItemsEOServiceImpl extends ServiceImpl parameter) { - List getValList = (List) parameter.get("itemValEOList"); + List itemValEOList = (List) parameter.get("itemValEOList"); + List getValList = new ArrayList<>(); + for(Object object : itemValEOList) { + String jsonStr = JSON.toJSONString(object); + SarFileSplitItemsValEO itemValEO = JSONObject.parseObject(jsonStr, SarFileSplitItemsValEO.class); + getValList.add(itemValEO); + } + String itemId = parameter.get("id").toString(); String itemConditions = ""; String userId = UserUtils.getUserId(); @@ -137,8 +205,8 @@ public class FileSplitItemsEOServiceImpl extends ServiceImpl"; } else if ("IMG".equals(valEO.getType())) { -// valContent = ""; - valContent = valEO.getItemContent(); + valContent = ""; +// valContent = valEO.getItemContent(); } else if ("TABLE".equals(valEO.getType())) { valContent = valEO.getItemContent(); } @@ -175,6 +243,15 @@ public class FileSplitItemsEOServiceImpl extends ServiceImpl judgeContaintChilds(String ids){ + public Map judgeContainChilds(String ids){ String[] itemIds = ids.split(","); Map result = new HashMap<>(); List idList = Arrays.asList(itemIds); @@ -440,6 +526,289 @@ public class FileSplitItemsEOServiceImpl extends ServiceImpl batchMergeItems(String ids) { + List oldItemIdList = Arrays.asList(ids.split(",")); + // 查询条款表单字段 + List formFieldList = onlCgformFieldService.getFieldList(ModuleEnum.FILE_SPLIT_ITEMS.getValue()); + if (formFieldList.size() != 0) { + //过滤出表单字段 + formFieldList = formFieldList.stream().filter(e -> YesOrNoEnum.YES.getValue().equals(String.valueOf(e.getIsShowForm()))).collect(Collectors.toList()); + } + // 查询所有要合并的条款 + List> oldItemMapList = dao.queryItemByIds(oldItemIdList); // 根据目录排序 升序 + Map firstItemMap = oldItemMapList.get(0); + // 查询所有目录 + List oldMenuIdList = oldItemMapList.stream().map(e->e.get("menu_id").toString()).distinct().collect(Collectors.toList()); + List oldMenuEOList = sarFileSplitMenuEOMapper.selectBatchIds(oldMenuIdList); + + SarFileSplitMenuEO newMenuEO = oldMenuEOList.stream() + .filter(e->e.getId().equals(firstItemMap.get("menu_id").toString())) + .collect(Collectors.toList()).get(0); + // 合并条款数据 + Map newItemMap = firstItemMap; + String newItemId = firstItemMap.get("id").toString(); + for (OnlCgformField onlCgformField : formFieldList){ + StringBuilder conditionSb = new StringBuilder(); + String fieldType = onlCgformField.getFieldShowType(); + String dbFieldName = onlCgformField.getDbFieldName(); + if (FieldTypeEnum.TEXT_STRING.getValue().equals(fieldType)) { + // 追加合并内容 + oldItemMapList.forEach(item -> { + if(ObjectUtils.isNotEmpty(item.get(dbFieldName))) { + conditionSb.append(item.get(dbFieldName).toString()); // TODO itmeCondition 有问题 + } + }); + } else if (FieldTypeEnum.PULL_SINGLE.getValue().equals(fieldType) + || FieldTypeEnum.PULL_MORE.getValue().equals(fieldType) + || FieldTypeEnum.TREE.getValue().equals(fieldType)) { + // 去重合并内容 + oldItemMapList.forEach(item -> { + if(ObjectUtils.isNotEmpty(item.get(dbFieldName))) { + conditionSb.append(",").append(item.get(dbFieldName).toString()); + } + }); // 合并 + if(ObjectUtils.isNotEmpty(conditionSb)){ + List conditionList = Arrays.asList(conditionSb.toString().split(",")); + conditionList = conditionList.stream().distinct().collect(Collectors.toList()); // 去重 + conditionSb.append(StringUtils.join(conditionList, ",")); + } + } + } + + // 删除合并前的条款及目录 + dao.deleteByItemsIdList(oldItemIdList); + // TODO 同一目录下有多个条款时 如何处理 + sarFileSplitMenuEOMapper.deleteByIdList(oldMenuIdList); + // 添加合并后的条款及目录 (新条款和新目录的id为第一条的) + newItemMap.remove("id"); + newItemMap.remove("creation_user"); + newItemMap.remove("creation_time"); + newItemMap.remove("modify_user"); + newItemMap.remove("modify_time"); + newItemMap.remove("sys_org_code"); + filterMap(newItemMap); + insertInfo(newItemMap, newItemId); + sarFileSplitMenuEOMapper.insertSelective(newMenuEO); + // 修改条目 关联的条款id和顺序 + List oldItemsValList = sarFileSplitItemsValEOMapper.queryItemsValByMenuId(oldItemIdList); + List newItemsValList = new ArrayList<>(); + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + int ind = 1; + for(String oldItemId : oldItemIdList){ + List updateItemsValList = oldItemsValList.stream() + .filter(e->oldItemId.equals(e.getItemId())) + .sorted(Comparator.comparing(SarFileSplitItemsValEO::getDisplaySeq)) + .collect(Collectors.toList()); + + for(SarFileSplitItemsValEO itemsVal : updateItemsValList){ + itemsVal.setItemId(newItemId); + itemsVal.setDisplaySeq(ind); + itemsVal.setModifyTime(new Date()); + itemsVal.setModifyUser(sysUser.getUsername()); + ind++; + + sarFileSplitItemsValEOMapper.updateByPrimaryKeySelective(itemsVal); + } + } +// sarFileSplitItemsValEOMapper.updateForeach2(newItemsValList); // TODO 待检验 + + return dao.selectByPrimaryKey(newItemId); + } + + @Override + public int batchSet(Map parameter) { + List itemIdList = Arrays.asList(parameter.get("ids").toString().split(",")); + parameter.remove("ids"); + int resultCount = 0; + for (String itemId : itemIdList) { + Map newItemMap = new HashMap<>(); + Map oldItemMap = dao.selectByPrimaryKey(itemId); + newItemMap.putAll(oldItemMap); + newItemMap.putAll(parameter); + + // 先删除 后新增 + dao.deleteByPrimaryKey(itemId); + + newItemMap.remove("id"); + newItemMap.remove("creation_user"); + newItemMap.remove("creation_time"); + newItemMap.remove("modify_user"); + newItemMap.remove("modify_time"); + newItemMap.remove("sys_org_code"); + filterMap(newItemMap); + insertInfo(newItemMap, itemId); + resultCount ++; + } + return resultCount; + } + + @Override + public Result importSplitItems(List> list, String menuId, String filepath, String infoId, List getSheetTableList) { + return null; + } + + /** + * 模板下载 + * + * @param response + * @param request + */ + @Override + public void exportTemplate(String cut, HttpServletResponse response, HttpServletRequest request) { + OutputStream os = null; + XSSFWorkbook workbook = new XSSFWorkbook(); + String fileOriName = "导入模板"; + String filePath = uploadpath + File.separator + fileOriName; + try { + List list = getWorkbookTitle(cut); + //创建临时文件夹 + File nowFile = new File(filePath); + if (nowFile.exists()) { + nowFile.delete(); + } + nowFile.mkdirs(); + XSSFSheet sheet = workbook.createSheet("文档拆分条款导入模板"); + sheet.setDefaultColumnWidth(16);//列宽 + XSSFCellStyle cellStyle = workbook.createCellStyle(); + cellStyle.setWrapText(true);//自动换行 + cellStyle.setVerticalAlignment(VerticalAlignment.CENTER); + + //合并单元格 + CellRangeAddress region1 = + new CellRangeAddress(1, 1, 0, Arrays.asList(list.get(0).split(",")).size() - 1); //参数1:起始行 参数2:终止行 参数3:起始列 参数4:终止列 + sheet.addMergedRegion(region1); + + for (int i = 0; i < 2; i++) { + //表头 + Row row = sheet.createRow(i);//开始创建标题行 + String exportFieldName = list.get(i); + if (i == 0) { + if (StringUtils.isNotBlank(exportFieldName)) { + String[] headerArr = exportFieldName.split(","); + for (int j = 0; j < headerArr.length; j++) { + row.createCell(j).setCellValue(headerArr[j]); + } + } + } else { + //说明 + short height = (short) (Integer.parseInt(list.get(2)) * 252); + row.setHeight((short) height); + Cell cell = row.createCell(0); + cell.setCellStyle(cellStyle); + cell.setCellValue(new XSSFRichTextString(list.get(i))); + } + + } + response.setHeader("Content-Disposition", + "attachment; filename=\"" + fileOriName + ".xlsx"); + response.setContentType("application/force-download"); + response.flushBuffer(); + os = response.getOutputStream(); + workbook.write(os); + } catch (Exception e) { + throw new JeroBootException("下载文件失败,请重试"); + } finally { + IOUtils.closeQuietly(os); + } + + } + + /** + * 获取模板下载的表头 + * + * @return + */ + private List getWorkbookTitle(String cut) { + // 查询新增表单字段 + List> addForm = languageSwitchService.getForm(ModuleEnum.FILE_SPLIT_ITEMS.getValue(), cut); + StringBuilder sb = new StringBuilder(); + List pullMoreList = new LinkedList<>();//多选字段 + List pullSingleList = new LinkedList<>();//单选字段 + List fileList = new LinkedList<>();//文件字段 + List textNumberList = new LinkedList<>();//数字输入框字段 + List textStringList = new LinkedList<>();//字符串输入框字段 + List dateSingleList = new LinkedList<>();//单选日期字段 + List dateMoreList = new LinkedList<>();//多选日期字段 + List standardList = new LinkedList<>();//标准选择字段 + for (Map map : addForm) { + if ("1".equals(map.get("field_must_input"))) { + sb.append("*" + map.get("db_field_txt") + ","); + } else { + sb.append(map.get("db_field_txt") + ","); + } + String fieldShowType = "field_show_type"; + //多选字段 + if (FieldTypeEnum.PULL_MORE.getValue().equals(map.get(fieldShowType))) { + pullMoreList.add((String) map.get("db_field_txt")); + } else if (FieldTypeEnum.PULL_SINGLE.getValue().equals(map.get(fieldShowType))) { + //单选字段 + pullSingleList.add((String) map.get("db_field_txt")); + } else if (FieldTypeEnum.FILE.getValue().equals(map.get(fieldShowType))) { + //文件字段 + fileList.add((String) map.get("db_field_txt")); + } else if (FieldTypeEnum.TEXT_NUMBER.getValue().equals(map.get(fieldShowType))) { + //数字输入框字段 + textNumberList.add((String) map.get("db_field_txt")); + } else if (FieldTypeEnum.TEXT_STRING.getValue().equals(map.get(fieldShowType))) { + //字符串输入框字段 + textStringList.add((String) map.get("db_field_txt")); + } else if (FieldTypeEnum.DATE_SINGLE.getValue().equals(map.get(fieldShowType))) { + //单选日期字段 + dateSingleList.add((String) map.get("db_field_txt")); + } else if (FieldTypeEnum.DATE_MORE.getValue().equals(map.get(fieldShowType))) { + //多选日期字段 + dateMoreList.add((String) map.get("db_field_txt")); + } else if (FieldTypeEnum.STANDARD.getValue().equals(map.get(fieldShowType))) { + //标准选择字段 + standardList.add((String) map.get("db_field_txt")); + } + } + String title = sb.substring(0, sb.length() - 1); + + //第二行 + StringBuilder sbTwo = new StringBuilder(); + sbTwo.append("填写说明\n" + "1.导入数据从第三行开始,第一行为表头,第二行为填写说明,第三行是正式数据\n" + "2.所有带*号的字段必须填写\n"); + int count = 3; + if (pullSingleList.size() != 0) { + //单选 + String pullSingle = StringUtils.join(pullSingleList, ",") + "字段是单选属性,必须和系统中的对应字段选项相匹配\n"; + sbTwo.append(count++ + "." + pullSingle); + } + + if (pullMoreList.size() != 0) { + //多选 + String pullMore = StringUtils.join(pullMoreList, ",") + "字段是多选属性,必须和系统中的对应字段选项相匹配,填写多个时采用英文或中文逗号分割\n"; + sbTwo.append(count++ + "." + pullMore); + } + if (dateSingleList.size() != 0) { + //单选日期 + String dateSingle = StringUtils.join(dateSingleList, ",") + "字段为日期,必须精确到日\n"; + sbTwo.append(count++ + "." + dateSingle); + } + if (textStringList.size() != 0) { + //输入框 + String textString = StringUtils.join(textStringList, ",") + "字段为文本,填写文本内容\n"; + sbTwo.append(count++ + "." + textString); + } + if (standardList.size() != 0) { + //标准选择 + String standard = StringUtils.join(standardList, ",") + "字段为标准号,填写多个时采用英文或中文逗号分割\n"; + sbTwo.append(count++ + "." + standard); + } + if (fileList.size() != 0) { + //文件 + String file = StringUtils.join(fileList, ",") + "字段为文件属性,填写时需要在本文件同级目录下以标准号为名称建立文件夹,并在文件夹下放置文件,假设在AAA标准号下放置了B.pdf,则应填写AAA/B.pdf\n"; + sbTwo.append(count++ + "." + file); + } + List list = new LinkedList<>(); + list.add(title); + list.add(sbTwo.toString()); + list.add(count + ""); + return list; + } + /** * 查询条件 * @@ -555,4 +924,539 @@ public class FileSplitItemsEOServiceImpl extends ServiceImpl> getBatchSetForm(String flag, String cut) { + List fieldList = onlCgformFieldService.getFieldList(flag); + if (fieldList.size() != 0) { + //过滤出搜索条件() + fieldList = fieldList.stream() + .filter(e -> YesOrNoEnum.YES.getValue().equals(String.valueOf(e.getIsShowForm())) + && (FieldTypeEnum.TREE.getValue().equals(e.getFieldShowType()) || FieldTypeEnum.PULL_SINGLE.getValue().equals(e.getFieldShowType()) + || FieldTypeEnum.PULL_MORE.getValue().equals(e.getFieldShowType()))) + .collect(Collectors.toList()); + } + //树形数据字典 + List sysCategoryTree = sysCategoryService.getSysCategoryTreeByCut(cut); // 查询所有 并以树结构返回 + + List> list = new ArrayList<>(); + for (OnlCgformField onlCgformField : fieldList) { + Map map = new HashMap<>(); + if (FieldTypeEnum.TREE.getValue().equals(onlCgformField.getFieldShowType())) { + List sysCategoryTreeVOList = sysCategoryTree.stream() + .filter(e -> onlCgformField.getDictId().equals(e.getDictId())) + .collect(Collectors.toList()); + map.put("tree", sysCategoryTreeVOList); // 树形结构字段 设置树形结构字段值 + } else { + map.put("tree", new ArrayList<>()); // 其他类型字段 该key为空 + } + + map.put("area", null);//展示区域。没用到 + map.put("field_show_type", onlCgformField.getFieldShowType());//类型(判断是下拉还是输入框,等等) + map.put("field_must_input", onlCgformField.getFieldMustInput());//是否必填 + map.put("dict_field", onlCgformField.getDictField()); //下拉类型的数据字典编码 + map.put("db_field_name", onlCgformField.getDbFieldName());//字段 + map.put("db_length", onlCgformField.getDbLength());//字段长度 + if (CutEnum.CN.getValue().equals(cut)) { + map.put("db_field_txt", onlCgformField.getDbFieldTxt());//字段中文名 + } else { + map.put("db_field_txt", onlCgformField.getDbFieldEnName());//字段英文名 + } + list.add(map); + } + return list; + } + + /** + * 过滤map中的值为 null的键值对 + * @param map + */ + @Override + public void filterMap(Map map){ + for(Map.Entry entity : map.entrySet()){ + if(ObjectUtils.isEmpty(entity.getValue())){ + entity.setValue(""); + } + } + } + + public List> queryByOrdersForExport(String cut, String field, List idList, String infoId){ + if (CollectionUtil.isEmpty(idList)) { + idList = null; + } + List> itemsDataForExport = dao.queryByOrdersForExport(field,idList, infoId); + // 查询条款表所有字段 + List fieldList = onlCgformFieldService.getFieldList(ModuleEnum.FILE_SPLIT_ITEMS.getValue()); + // 过滤导出字段 + if (fieldList.size() != 0) { + fieldList = fieldList.stream() + .filter(e -> YesOrNoEnum.YES.getValue().equals(String.valueOf(e.getIsShowForm())) || "条款内容".equals(e.getDbFieldTxt())) + .collect(Collectors.toList()); + } + //树形数据字典 + List categoryList = sysCategoryService.list(); + //过滤出树形字段 + List treeFieldList = fieldList.stream() + .filter(e -> FieldTypeEnum.TREE.getValue().equals(e.getFieldShowType())) + .collect(Collectors.toList()); + //数据字典 + List sysDictItems = sysDictItemServiceImpl.selectItemsAll(); + // 处理数据下拉框,树形结构数据及中英文切换 + for (Map record : itemsDataForExport) { + Map record1 = (Map) record; + for (Map.Entry entry : record1.entrySet()) { + List collect = fieldList.stream() + .filter(e -> entry.getKey().equals(e.getDictField()) && !FieldTypeEnum.TREE.getValue().equals(e.getFieldShowType())) + .collect(Collectors.toList()); + //下拉选处理数据字典 + dictItem(sysDictItems, entry, collect, cut); + treeDictItem(categoryList, entry, treeFieldList, cut); + } + } + return itemsDataForExport; + } + + public List combineItemValInfo(List getValList, List allTableList, List allImgList, SarFileSplitItemsEOPage page) { + int tableIndex = page.getTableIndex(); + int imgIndex = page.getImgIndex(); + List valContent = new ArrayList<>(); + if (getValList != null && !getValList.isEmpty()) { + String preType = ""; + for(SarFileSplitItemsValEO itemsValEO : getValList){ + String type = itemsValEO.getType(); + FileSplitValExportDto lastOne = new FileSplitValExportDto(); + lastOne.setValType(type); + if(preType.equals(type) && "TEXT".equals(type)) { + lastOne = valContent.get(valContent.size() - 1); + lastOne.setValContent(lastOne.getValContent()+itemsValEO.getItemContent() + "\n"); + valContent.set(valContent.size() - 1, lastOne); + } else if ("TEXT".equals(type)) { + lastOne.setValContent(lastOne.getValContent()+itemsValEO.getItemContent() + "\n"); + valContent.add(lastOne); + } else if ("TABLE".equals(type)) { + String tableName = String.valueOf(tableIndex); + lastOne.setValContent("tableSheet" + tableName); + //查询table信息 + SarFileSplitItemsTableEOPage tablePage = new SarFileSplitItemsTableEOPage(); + tablePage.setItemsValId(itemsValEO.getId()); + valContent.add(lastOne); +// List> tableList = combineTableList(itemsValEO); + FileSpiltValTableExportDto tableExportDto = new FileSpiltValTableExportDto(); + tableExportDto.setTableName("tableSheet" + tableName); +// tableExportDto.setTableEOList(tableList); + tableExportDto.setTableHtCon(itemsValEO.getItemContent()); + allTableList.add(tableExportDto); + tableIndex++; + page.setTableIndex(tableIndex); + } else if ("IMG".equals(type)) { + String imgContent = itemsValEO.getItemContent(); + String imgUUIndex = "img" + String.valueOf(imgIndex); + if (com.jero.modules.system.util.StringUtils.isNotEmpty(imgContent)){ + int pathIndex = imgContent.indexOf("src='uploadPath"); + if (pathIndex > -1 && imgContent.length()>(pathIndex+16)) { + String imgPath = imgContent.substring(pathIndex+16,imgContent.length()-2); + String imgName = imgUUIndex + "-" +imgPath.substring(imgPath.lastIndexOf("/")+1,imgPath.length()); + lastOne.setValContent(imgUUIndex+".png"); + valContent.add(lastOne); + FileSplitValImgExportDto fileSplitValImgExportDto = new FileSplitValImgExportDto(); + fileSplitValImgExportDto.setImgName(imgUUIndex+".png"); + if (com.jero.modules.system.util.StringUtils.isNotEmpty(itemsValEO.getImgName())) { + fileSplitValImgExportDto.setImgPath(itemsValEO.getImgName()); + } else { + fileSplitValImgExportDto.setImgPath(imgPath); + } + allImgList.add(fileSplitValImgExportDto); + imgIndex++; + page.setImgIndex(imgIndex); + } + } + } + preType = itemsValEO.getType(); + } + } + return valContent; + } + + + public void downLoadImgList(List allImgList, String fileNowPath) throws IOException { + for(FileSplitValImgExportDto imgExportDto : allImgList){ + String oldPath = uploadpath+ "/" + imgExportDto.getImgPath(); + String newPath = fileNowPath + "/" + imgExportDto.getImgName(); + File oldFile = new File(oldPath); + if (oldFile.exists()){ + copyFile1(oldPath, newPath); + } + } + + } + + public void copyFile1(String srcPath, String destPath) throws IOException { + BufferedInputStream bis = new BufferedInputStream(Files.newInputStream(Paths.get(srcPath))); + BufferedOutputStream bos = + new BufferedOutputStream(Files.newOutputStream(Paths.get(destPath), + StandardOpenOption.CREATE, + StandardOpenOption.TRUNCATE_EXISTING, + StandardOpenOption.WRITE)); + // 打开输入流 +// FileInputStream fis = new FileInputStream(srcPath); + // 打开输出流 +// FileOutputStream fos = new FileOutputStream(destPath); + // 读取和写入信息 + byte[] bytes = new byte[1024 * 1024]; + int len; + while ((len = bis.read(bytes)) > 0) { + bos.write(bytes, 0, len); + } + // 关闭流 先开后关 后开先关 + bos.close(); // 后开先关 + bis.close(); // 先开后关 + } + + @Override + public void exportSplitInfo(String cut, String idList, String infoId,String exportName, HttpServletResponse response, HttpServletRequest request) { + OutputStream os = null; + OutputStream excelOS = null; + HSSFWorkbook workbook = new HSSFWorkbook(); + String fileOriName = "拆分条款信息"; + if (org.apache.commons.lang.StringUtils.isNotEmpty(exportName)) { + fileOriName = exportName; + } + try{ + //创建临时文件夹 + String fileNowPath = uploadpath + "/tempZip/" + UUID.randomUUID().toString().replace("-","") + "/" + fileOriName; + File nowFile = new File(fileNowPath); + if (nowFile.exists()){ + nowFile.delete(); + } + nowFile.mkdirs(); + String fileName = fileOriName + ".xls"; + // 设置表格相关属性 + HSSFSheet sheetItems = workbook.createSheet("条款内容"); + String[] headers = getWorkbookTitleForExport(cut); // 获取表头 + HSSFCellStyle cellStyle =workbook.createCellStyle(); + cellStyle.setWrapText(true); +// cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); + cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); + HSSFCellStyle cellStyle1 =workbook.createCellStyle(); + cellStyle1.setAlignment(HSSFCellStyle.ALIGN_CENTER); + HSSFCellStyle cellStyleLink =workbook.createCellStyle(); + HSSFFont font = workbook.createFont(); + font.setColor(HSSFColor.LIGHT_BLUE.index); + cellStyleLink.setFont(font); + cellStyleLink.setWrapText(true); + + // 处理勾选导出相关字段 + List itemIdList = new ArrayList<>(); + SarFileSplitItemsEOPage page = new SarFileSplitItemsEOPage(); + page.setInfoId(infoId); + page.setOrderBy("SAR_FILE_SPLIT_MENU.display_seq asc"); + if (org.apache.commons.lang.StringUtils.isNotEmpty(idList)) { + String[] idArr = idList.split(","); + itemIdList = Arrays.asList(idArr); + page.setIdList(itemIdList); + } + // 查询需要导出的字段 + String field = getFieldForExport(); // 字符串形式 + List fieldList = Arrays.asList(field.split(",")); // list形式 + // 查询导出数据 + List> allItemsList = queryByOrdersForExport(cut, field, itemIdList, infoId); // id记得去掉 + + // 开始处理工作表 + List allTableList = new ArrayList<>(); // 存储表格数据 + List allImgList = new ArrayList<>(); // 存储文件数据 + int countMaxFile = 1; + if (allItemsList != null && !allItemsList.isEmpty()) { + for (Map itemsExportDto : allItemsList) { + SarFileSplitItemsValEOPage valEOPage = new SarFileSplitItemsValEOPage(); + valEOPage.setItemId(itemsExportDto.get("id").toString()); + valEOPage.setOrderBy("DISPLAY_SEQ,ID"); + List getValList = sarFileSplitItemsValEOService.queryByList(valEOPage); + List valContentList = combineItemValInfo(getValList,allTableList,allImgList,page); //TODO + itemsExportDto.put("itemValContent", valContentList); + } + } + // 在excel表中添加表头 + HSSFRow row = sheetItems.createRow(0); + sheetItems.setColumnWidth(0,10*256); + sheetItems.setColumnWidth(1,20*256); + sheetItems.setColumnWidth(2,100*256); + //导出目前只需要条款号、条款名称、条款内容 + +// sheetItems.setColumnWidth(3,20*256); +// sheetItems.setColumnWidth(4,20*256); +// sheetItems.setColumnWidth(5,20*256); +// sheetItems.setColumnWidth(6,20*256); +// sheetItems.setColumnWidth(7,20*256); +// sheetItems.setColumnWidth(8,20*256); +// sheetItems.setColumnWidth(9,40*256); + for (int i = 0; i < headers.length; i++) { + HSSFCell cell = row.createCell(i); + HSSFRichTextString text = new HSSFRichTextString(headers[i]); + cell.setCellValue(text); + cell.setCellStyle(cellStyle1); + } + //放文字内容 + int allRow = 0; + for(int rowNum = 0;rowNum < allItemsList.size(); rowNum++){ + Map exportDto = allItemsList.get(rowNum); + exportDto.remove("id"); // id 不导出 + List valList = (List) exportDto.get("itemValContent"); + int countFile = 0; + if(valList != null && !valList.isEmpty()){ // 如果有条目 + int startRow = allRow + 1; + for (int valRow=0;valRow -1) { + content = content.substring(0,content.lastIndexOf("\n")); + } + } + if("TABLE".equals(valList.get(valRow).getValType())){ + /* 连接跳转*/ + CreationHelper createHelper = workbook.getCreationHelper(); + Hyperlink hyperlink1 = createHelper.createHyperlink(HyperlinkType.DOCUMENT); + String tableName = "#\'"+ content + "\'!A1"; + hyperlink1.setAddress(tableName); + cell2.setHyperlink(hyperlink1);// 链接 + row1.getCell(cellNum).setCellStyle(cellStyleLink); + } else if ("IMG".equals(valList.get(valRow).getValType())) { + /* 连接跳转*/ + CreationHelper createHelper = workbook.getCreationHelper(); + Hyperlink hyperlink1 = createHelper.createHyperlink(HyperlinkType.FILE); + String imgName = content; + hyperlink1.setAddress(imgName); + cell2.setHyperlink(hyperlink1);// 链接 + row1.getCell(cellNum).setCellStyle(cellStyleLink); + } + cell2.setCellValue(content); + } + } +// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); +// if (exportDto.getNewcarPutTime() != null) { +// String time= sdf.format(exportDto.getNewcarPutTime()); +// row1.createCell(3).setCellValue(time); +// row1.getCell(3).setCellStyle(cellStyle); +// } +// if (exportDto.getProductPutTime() != null) { +// String time= sdf.format(exportDto.getProductPutTime()); +// row1.createCell(4).setCellValue(time); +// row1.getCell(4).setCellStyle(cellStyle); +// } +// row1.createCell(5).setCellValue(exportDto.getFunctionTerritory()); +// row1.getCell(5).setCellStyle(cellStyle); +// row1.createCell(6).setCellValue(exportDto.getApplyArctic()); +// row1.getCell(6).setCellStyle(cellStyle); +// row1.createCell(7).setCellValue(exportDto.getReferenceStand()); +// row1.getCell(7).setCellStyle(cellStyle); +// row1.createCell(8).setCellValue(exportDto.getTechnologyTerritory()); +// row1.getCell(8).setCellStyle(cellStyle); +// if (StringUtils.isNotEmpty(exportDto.getRelevanceFile())) { +// List fileList = attFileEOService.getMultiFileInfos(exportDto.getRelevanceFile()); +// if (fileList != null && !fileList.isEmpty()) { +// if (countMaxFile < fileList.size()) { +// countMaxFile = fileList.size(); +// } +// countFile = 0; +// for (AttFileEO attFileEO : fileList) { +// /* 连接跳转*/ +// String releFileName = attFileEO.getOldFileName(); +// CreationHelper createHelper = workbook.getCreationHelper(); +// Hyperlink hyperlink1 = createHelper.createHyperlink(HyperlinkType.URL); +//// String addr = new String(releFileName.getBytes(),"UTF-8"); +// hyperlink1.setAddress(releFileName); +// row1.createCell(9+countFile).setHyperlink(hyperlink1); +// row1.createCell(9+countFile).setCellValue(releFileName); +// row1.getCell(9+countFile).setCellStyle(cellStyleLink); +// countFile++; +// } +// allRelevFileList.addAll(fileList); +// } +// + } + if (allRow > startRow) { + sheetItems.addMergedRegion(new CellRangeAddress(startRow,allRow,0,0)); + sheetItems.addMergedRegion(new CellRangeAddress(startRow,allRow,1,1)); +// sheetItems.addMergedRegion(new CellRangeAddress(startRow,allRow,3,3)); +// sheetItems.addMergedRegion(new CellRangeAddress(startRow,allRow,4,4)); +// sheetItems.addMergedRegion(new CellRangeAddress(startRow,allRow,5,5)); +// sheetItems.addMergedRegion(new CellRangeAddress(startRow,allRow,6,6)); +// sheetItems.addMergedRegion(new CellRangeAddress(startRow,allRow,7,7)); +// sheetItems.addMergedRegion(new CellRangeAddress(startRow,allRow,8,8)); +// if (countFile > 0) { +// for (int i=0;i<=countFile;i++) { +// sheetItems.addMergedRegion(new CellRangeAddress(startRow,allRow,9+i,9+i)); +// } +// } + } + } else { + allRow++; + HSSFRow row1 = sheetItems.createRow(allRow); + for(int cellNum = 0; cellNum < fieldList.size(); cellNum++){ + if (!"iterms_conditions".equals(fieldList.get(cellNum)) && ObjectUtils.isNotEmpty(exportDto.get(fieldList.get(cellNum)))) { + row1.createCell(cellNum).setCellValue(exportDto.get(fieldList.get(cellNum)).toString()); + row1.getCell(cellNum).setCellStyle(cellStyle); + } else if ("iterms_conditions".equals(fieldList.get(cellNum))) { + row1.createCell(cellNum).setCellValue(""); + row1.getCell(cellNum).setCellStyle(cellStyle); + } + } +// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); +// if (exportDto.getNewcarPutTime() != null) { +// String time= sdf.format(exportDto.getNewcarPutTime()); +// row1.createCell(3).setCellValue(time); +// row1.getCell(3).setCellStyle(cellStyle); +// } +// if (exportDto.getProductPutTime() != null) { +// String time= sdf.format(exportDto.getProductPutTime()); +// row1.createCell(4).setCellValue(time); +// row1.getCell(4).setCellStyle(cellStyle); +// } +// row1.createCell(5).setCellValue(exportDto.getFunctionTerritory()); +// row1.getCell(5).setCellStyle(cellStyle); +// row1.createCell(6).setCellValue(exportDto.getApplyArctic()); +// row1.getCell(6).setCellStyle(cellStyle); +// row1.createCell(7).setCellValue(exportDto.getReferenceStand()); +// row1.getCell(7).setCellStyle(cellStyle); +// row1.createCell(8).setCellValue(exportDto.getTechnologyTerritory()); +// row1.getCell(8).setCellStyle(cellStyle); +// if (StringUtils.isNotEmpty(exportDto.getRelevanceFile())) { +// List fileList = attFileEOService.getMultiFileInfos(exportDto.getRelevanceFile()); +// if (fileList != null && !fileList.isEmpty()) { +// countFile = 0; +// for (AttFileEO attFileEO : fileList) { +// /* 连接跳转*/ +// String releFileName = attFileEO.getOldFileName(); +// CreationHelper createHelper = workbook.getCreationHelper(); +// Hyperlink hyperlink1 = createHelper.createHyperlink(HyperlinkType.URL); +//// String addr = new String(releFileName.getBytes(),"UTF-8"); +// hyperlink1.setAddress(releFileName); +// row1.createCell(9+countFile).setHyperlink(hyperlink1); +// row1.createCell(9+countFile).setCellValue(releFileName); +// row1.getCell(9+countFile).setCellStyle(cellStyleLink); +// countFile++; +// } +// allRelevFileList.addAll(fileList); +// } +// } + } + } + if (countMaxFile > 1) { + for (int i=1;i> rowtableList = tableExportDto.getTableEOList(); +// HSSFSheet sheetTable = workbook.createSheet(tableExportDto.getTableName()); + String tableName = tableExportDto.getTableName(); + String tableHtml = tableExportDto.getTableHtCon(); + if (org.apache.commons.lang.StringUtils.isNotEmpty(tableHtml) && tableHtml.indexOf("") < 0) { + if (tableHtml.indexOf("") < 0) { + tableHtml = tableHtml.replaceFirst("",""); + tableHtml = tableHtml.replaceFirst("",""); + } else { + tableHtml = tableHtml.replaceFirst("",""); + tableHtml = tableHtml.replaceFirst("",""); + } + } + String cnt = "\n"; + tableHtml = tableHtml.replaceAll("<[\\s]*?br[^>]*?>|<[\\s]*?\\/[\\s]*?br[\\s]*?>", cnt); + workbook = ConvertHtml2Excel.table2Excel(tableHtml,workbook,tableName); +// for (int r=0;r colTableList = rowtableList.get(r); +// HSSFRow tRow = sheetTable.createRow(colTableList.get(0).getRowNum()-1); +// for(int c=0;c fieldList = onlCgformFieldService.getFieldList(ModuleEnum.FILE_SPLIT_ITEMS.getValue()); + // 过滤出需要导出的字段 + fieldList = fieldList.stream() + .filter(e-> YesOrNoEnum.YES.getValue().equals(String.valueOf(e.getIsShowForm())) || "条款内容".equals(e.getDbFieldTxt())) + .sorted(Comparator.comparing(OnlCgformField::getOrderNum)) // 必须按顺序 才能导出时表头和数据一致 + .collect(Collectors.toList()); + List fieldForExport = new ArrayList<>(); + if (CutEnum.CN.getValue().equals(cut)){ + fieldForExport = fieldList.stream().map(OnlCgformField::getDbFieldTxt).collect(Collectors.toList()); + } else { + fieldForExport = fieldList.stream().map(OnlCgformField::getDbFieldEnName).collect(Collectors.toList()); + } + return StringUtils.join(fieldForExport, ",").split(","); + } + + /** + * 获取导出文件的表头对应的数据库字段 + * + * @return + */ + private String getFieldForExport() { + // 查询条款表所有字段 + List fieldList = onlCgformFieldService.getFieldList(ModuleEnum.FILE_SPLIT_ITEMS.getValue()); + List fields = fieldList.stream() + .filter(e-> YesOrNoEnum.YES.getValue().equals(String.valueOf(e.getIsShowForm())) || "条款内容".equals(e.getDbFieldTxt())) + .sorted(Comparator.comparing(OnlCgformField::getOrderNum)) // 必须按顺序 才能导出时表头和数据一致 + .map(OnlCgformField::getDbFieldName) + .collect(Collectors.toList()); + return StringUtils.join(fields, ","); + } + } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/service/impl/SarFileSplitInfoServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/service/impl/SarFileSplitInfoServiceImpl.java index 222a8823b..94a1169f4 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/service/impl/SarFileSplitInfoServiceImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/service/impl/SarFileSplitInfoServiceImpl.java @@ -2,12 +2,16 @@ package com.jero.modules.split.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.jero.modules.split.entity.SarFileSplitInfoEO; +import com.jero.modules.split.entity.SarFileSplitMenuEO; import com.jero.modules.split.mapper.SarFileSplitInfoMapper; +import com.jero.modules.split.mapper.SarFileSplitMenuEOMapper; import com.jero.modules.split.service.ISarFileSplitInfoService; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.Date; import java.util.List; +import java.util.UUID; /** * @Description: 文档拆分表 @@ -18,6 +22,8 @@ import java.util.List; @Service public class SarFileSplitInfoServiceImpl extends ServiceImpl implements ISarFileSplitInfoService { + @Autowired + private SarFileSplitMenuEOMapper sarFileSplitMenuEOMapper; /** * 保存 * @@ -30,6 +36,15 @@ public class SarFileSplitInfoServiceImpl extends ServiceImpl parameter = new HashMap<>(); parameter.put("items_num", sarFileSplitMenuEO.getName()); parameter.put("items_name", sarFileSplitMenuEO.getItemName()); + parameter.put("info_id", sarFileSplitMenuEO.getInfoId()); + parameter.put("menu_id", sarFileSplitMenuEO.getId()); String itemId = UUID.randomUUID().toString().replace("-", ""); fileSplitItemsEOService.insertInfo(parameter, itemId); // 之后的所有节点序号增加 SarFileSplitMenuEOPage page = new SarFileSplitMenuEOPage(); - page.setPId(sarFileSplitMenuEO.getPId()); +// page.setPId(sarFileSplitMenuEO.getPId()); + page.setInfoId(sarFileSplitMenuEO.getInfoId()); + page.setValidFlag("0"); + page.setOrderBy("display_seq asc"); List getList = dao.queryByList(page); if (getList != null && !getList.isEmpty()) { for(SarFileSplitMenuEO menu : getList){ Long olgSeq = menu.getDisplaySeq(); - if (olgSeq >= sarFileSplitMenuEO.getDisplaySeq()) { + if (olgSeq >= sarFileSplitMenuEO.getDisplaySeq() && !menu.getId().equals(sarFileSplitMenuEO.getId())) { menu.setDisplaySeq(olgSeq + 1); dao.updateByPrimaryKeySelective(menu); } @@ -410,6 +415,13 @@ public class SarFileSplitMenuEOServiceImpl extends ServiceImpl