From baf6cdced0ecc2c0ff75fcd4d86e649a06a7be52 Mon Sep 17 00:00:00 2001 From: wangzhijiang <1358525938@qq.com> Date: Tue, 20 Feb 2024 10:56:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E5=88=9D=E5=A7=8B=E5=8C=96?= =?UTF-8?q?=E6=8F=90=E4=BA=A4=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/DirectoryComparator.java | 43 + .../common/DocumentSplitCommon.java | 98 ++ .../controller/DocumentSplitController.java | 404 +++++ .../documenttool/entity/BaseEntity.java | 64 + .../entity/DocumentSplitInfo.java | 102 ++ .../entity/LawsDocumentSplit.java | 140 ++ .../entity/LawsDocumentSplitView.java | 34 + .../entity/SarFileSplitItemsVal.java | 84 + .../documenttool/entity/SarFileSplitMenu.java | 83 + .../documenttool/entity/SplitFileInfo.java | 73 + .../factory/ConditionMapFactory.java | 44 + .../handler/AbstractConditionBase.java | 48 + .../handler/impl/DateManyConditionImpl.java | 83 + .../handler/impl/DateSingleConditionImpl.java | 53 + .../handler/impl/InConditionImpl.java | 45 + .../handler/impl/LikeConditionImpl.java | 34 + .../handler/impl/UniversalImpl.java | 21 + .../mapper/DocumentSplitMapper.java | 212 +++ .../mapper/LawsDocumentSplitMapper.java | 12 + .../mapper/xml/DocumentSplitMapper.xml | 275 ++++ .../service/IDocumentSplitService.java | 208 +++ .../impl/DocumentSplitServiceImpl.java | 1390 +++++++++++++++++ 22 files changed, 3550 insertions(+) create mode 100644 byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/common/DirectoryComparator.java create mode 100644 byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/common/DocumentSplitCommon.java create mode 100644 byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/controller/DocumentSplitController.java create mode 100644 byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/entity/BaseEntity.java create mode 100644 byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/entity/DocumentSplitInfo.java create mode 100644 byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/entity/LawsDocumentSplit.java create mode 100644 byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/entity/LawsDocumentSplitView.java create mode 100644 byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/entity/SarFileSplitItemsVal.java create mode 100644 byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/entity/SarFileSplitMenu.java create mode 100644 byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/entity/SplitFileInfo.java create mode 100644 byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/factory/ConditionMapFactory.java create mode 100644 byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/handler/AbstractConditionBase.java create mode 100644 byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/handler/impl/DateManyConditionImpl.java create mode 100644 byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/handler/impl/DateSingleConditionImpl.java create mode 100644 byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/handler/impl/InConditionImpl.java create mode 100644 byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/handler/impl/LikeConditionImpl.java create mode 100644 byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/handler/impl/UniversalImpl.java create mode 100644 byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/mapper/DocumentSplitMapper.java create mode 100644 byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/mapper/LawsDocumentSplitMapper.java create mode 100644 byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/mapper/xml/DocumentSplitMapper.xml create mode 100644 byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/service/IDocumentSplitService.java create mode 100644 byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/service/impl/DocumentSplitServiceImpl.java diff --git a/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/common/DirectoryComparator.java b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/common/DirectoryComparator.java new file mode 100644 index 0000000..40e4642 --- /dev/null +++ b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/common/DirectoryComparator.java @@ -0,0 +1,43 @@ +package com.jero.modules.documenttool.common; + +import java.util.Comparator; +import java.util.Map; + +/** + * @ClassName: DirectoryComparator + * @Description: + * @Author: yjz + * @Date: 2023-11-03 11:24 + * @Version: 1.0 + **/ +public class DirectoryComparator implements Comparator> { + public int compare(Map dir1, Map dir2) { + String sortNumber1 = (String) dir1.get("item_num"); + String sortNumber2 = (String) dir2.get("item_num"); + + String[] parts1 = sortNumber1.split("\\."); + String[] parts2 = sortNumber2.split("\\."); + + int i = 0; + while (i < parts1.length && i < parts2.length) { + int part1 = tryParseInt(parts1[i]); + int part2 = tryParseInt(parts2[i]); + + if (part1 != part2) { + return part1 - part2; + } + + i++; + } + + return parts1.length - parts2.length; + } + + private int tryParseInt(String str) { + try { + return Integer.parseInt(str); + } catch(NumberFormatException e) { + return str.hashCode(); + } + } +} diff --git a/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/common/DocumentSplitCommon.java b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/common/DocumentSplitCommon.java new file mode 100644 index 0000000..417c9d5 --- /dev/null +++ b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/common/DocumentSplitCommon.java @@ -0,0 +1,98 @@ +package com.jero.modules.documenttool.common; + +/** + * @Author: yjz + * @Date: 2023/10/13/11:46 + * @Description: + */ +public class DocumentSplitCommon { + private DocumentSplitCommon(){ + } + /** + * 是否null + */ + public static final String IF_NULL_BEGIN = " IFNULL( "; + /** + * 是否null + */ + public static final String IF_NULL_END = " ,'') "; + /** + * 日期格式化 + */ + public static final String DATE_FORMAT_BEGIN = " date_format( "; + /** + * 日期格式化 + */ + public static final String DATE_FORMAT_END = " , '%Y-%m-%d') "; + /** + * 字符转日期 + */ + public static final String STR_TO_DATE_BEGIN = "str_to_date("; + /** + * between + */ + public static final String BETWEEN = "between "; + /** + * 模糊匹配 + */ + public static final String CONCAT_LIKE_BEGIN = " concat('%', '"; + /** + * 模糊匹配 + */ + public static final String CONCAT_LIKE_END = "', '%') "; + /** + * 包含 + */ + public static final String INSTR_BEGIN = " instr("; + /** + * and + */ + public static final String AND = " and "; + /** + * or + */ + public static final String OR = " or "; + /** + * in + */ + public static final String IN = " in "; + /** + * like + */ + public static final String LIKE = " like "; + /** + * >= + */ + public static final String GT = " >= "; + /** + * <= + */ + public static final String LT = " <= "; + /** + * 翻译后缀 + */ + public static final String DIC_TEXT = "_dictText"; + /** + * 条目类型 TEXT:文本, IMG:图片, TABLE:表格, INTERPRETATION:解读 + */ + public static final String TEXT = "TEXT"; + /** + * 条目类型 TEXT:文本, IMG:图片, TABLE:表格, INTERPRETATION:解读 + */ + public static final String IMG = "IMG"; + /** + * 条目类型 TEXT:文本, IMG:图片, TABLE:表格, INTERPRETATION:解读 + */ + public static final String TABLE = "TABLE"; + /** + * 拆分状态 1:编辑中 2:已发布 + */ + public static final String SPLIT_STATUS1 = "1"; + /** + * 拆分状态 1:编辑中 2:已发布 + */ + public static final String SPLIT_STATUS2 = "2"; + public static final String INTERPRETATION = "interpretation"; + public static final String MEG_DEL = "删除成功!"; + public static final String MEG_DEL_BATCH = "批量删除成功!"; +} diff --git a/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/controller/DocumentSplitController.java b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/controller/DocumentSplitController.java new file mode 100644 index 0000000..8d124a1 --- /dev/null +++ b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/controller/DocumentSplitController.java @@ -0,0 +1,404 @@ +package com.jero.modules.documenttool.controller; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; +import com.github.xiaoymin.knife4j.annotations.ApiSupport; +import com.jero.common.api.vo.Result; +import com.jero.common.api.vo.ResultCommon; +import com.jero.common.aspect.annotation.AutoLog; +import com.jero.common.exception.JeroBootException; +import com.jero.common.util.MessageUtils; +import com.jero.modules.documenttool.entity.DocumentSplitInfo; +import com.jero.modules.documenttool.entity.LawsDocumentSplitView; +import com.jero.modules.documenttool.entity.SplitFileInfo; +import com.jero.modules.documenttool.service.IDocumentSplitService; +import com.jero.modules.split.entity.SarFileSplitInfoEO; +import com.jero.modules.split.entity.SarFileSplitItemsValEO; +import com.jero.modules.split.entity.SarFileSplitMenuEO; +import com.jero.modules.split.service.ISarFileSplitInfoService; +import com.jero.modules.system.vo.IdMapBody; +import com.jero.modules.system.vo.IdsMapBody; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.ss.formula.functions.T; +import org.springframework.context.annotation.Lazy; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Map; + +/** + * @Author: yjz + * @Date: 2023/10/12/23:03 + * @Description: 标准拆分 + */ + +@Api(tags="标准拆分") +@ApiSupport(order = 302) +@RestController +@RequestMapping("/laws/DocumentTool/documentSplit") +@Slf4j +public class DocumentSplitController { + + private final IDocumentSplitService documentSplitService; + private final ISarFileSplitInfoService sarFileSplitInfoService; + + public DocumentSplitController(IDocumentSplitService documentSplitService, + @Lazy ISarFileSplitInfoService sarFileSplitInfoService){ + this.documentSplitService = documentSplitService; + this.sarFileSplitInfoService = sarFileSplitInfoService; + } + + /** + * 标准拆分-分页列表查询 + * + * @return + */ + @AutoLog(value = "标准拆分-分页列表查询") + @ApiOperation(value="标准拆分-分页列表查询", notes="标准拆分-分页列表查询") + @GetMapping(value = "/queryByPage") + @ApiOperationSupport(order = 1) + public Result> queryByPage(DocumentSplitInfo documentSplitInfo, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize) { + return Result.OK(documentSplitService.queryByPage(documentSplitInfo, pageNo, pageSize)); + } + + /** + * 标准拆分-拆分已入库文本 + * + * @return + */ + @AutoLog(value = "标准拆分-拆分已入库文本分页列表查询") + @ApiOperation(value="标准拆分-拆分已入库文本分页列表查询", notes="标准拆分-拆分已入库文本分页列表查询") + @GetMapping(value = "/querySplitFileInfoByPage") + @ApiOperationSupport(order = 2) + public Result> querySplitFileInfoByPage(SplitFileInfo splitFileInfo, + @RequestParam(name="pageNo", defaultValue="1") Integer pageNo, + @RequestParam(name="pageSize", defaultValue="10") Integer pageSize) { + return Result.OK(documentSplitService.querySplitFileInfoByPage(splitFileInfo, pageNo, pageSize)); + } + + /** + * 标准拆分-查看 + * + * @return + */ + @AutoLog(value = "标准拆分-查看") + @ApiOperation(value="标准拆分-查看", notes="标准拆分-查看") + @PostMapping(value = "/queryView") + @ApiOperationSupport(order = 3) + public Result queryView(@RequestBody @ApiParam("标签管理") Map parameter) { + return Result.OK(documentSplitService.queryView(parameter)); + } + + /** + * 标准拆分-通过标准拆分id查询目录树形结构 + * + * @return + */ + @AutoLog(value = "标准拆分-通过标准拆分id查询目录树形结构") + @ApiOperation(value="标准拆分-通过标准拆分id查询目录树形结构", notes="标准拆分-通过标准拆分id查询目录树形结构") + @GetMapping(value = "/queryTreeMenuByInfoId") + @ApiOperationSupport(order = 4) + public Result> queryTreeMenuByInfoId(@ApiParam("标准拆分id") String infoId) { + return Result.OK(documentSplitService.queryTreeMenuByInfoId(infoId)); + } + + /** + * 更改权限 + * + * @param documentSplitInfo + * @return + */ + @AutoLog(value = "标准拆分-更改权限") + @ApiOperation(value="标准拆分-更改权限", notes="标准拆分-更改权限") + @PostMapping(value = "/updatePermissions") + @ApiOperationSupport(order = 5) + public Result updatePermissions(@Validated @RequestBody DocumentSplitInfo documentSplitInfo) { + documentSplitService.updatePermissions(documentSplitInfo); + return Result.OK(MessageUtils.getMessage(ResultCommon.OK)); + } + + /** + * 拆分 + * + * @param sarFileSplitInfoEO + * @return + */ + @AutoLog(value = "标准拆分-拆分") + @ApiOperation(value="标准拆分-拆分", notes="标准拆分-拆分") + @PostMapping(value = "/split") + @ApiOperationSupport(order = 6) + public Result split(@Validated @RequestBody SarFileSplitInfoEO sarFileSplitInfoEO) { + documentSplitService.add(sarFileSplitInfoEO); + return Result.OK(MessageUtils.getMessage(ResultCommon.OK)); + } + + /** + * 发布 + * + * @param parameter + * @return + */ + @AutoLog(value = "标准拆分-发布") + @ApiOperation(value="标准拆分-发布", notes="标准拆分-发布") + @PostMapping(value = "/publish") + @ApiOperationSupport(order = 7) + public Result publish(@RequestBody @ApiParam("标签管理") Map parameter) { + documentSplitService.publish(parameter); + return Result.OK(MessageUtils.getMessage(ResultCommon.OK)); + } + + /** + * 撤回 + * + * @param parameter + * @return + */ + @AutoLog(value = "标准拆分-撤回") + @ApiOperation(value="标准拆分-撤回", notes="标准拆分-撤回") + @PostMapping(value = "/revocation") + @ApiOperationSupport(order = 8) + public Result revocation(@RequestBody @ApiParam("标签管理") Map parameter) { + documentSplitService.revocation(parameter); + return Result.OK(MessageUtils.getMessage(ResultCommon.OK)); + } + + /** + * 通过id删除 + * + * @return + */ + @AutoLog(value = "标准拆分-通过id删除") + @ApiOperation(value="标准拆分-通过id删除", notes="标准拆分-通过id删除") + @PostMapping(value = "/delete") + @ApiOperationSupport(order = 9) + public Result delete(@RequestBody IdMapBody map){ + if (StringUtils.isBlank(map.getId())) { + return Result.error("请选择数据!"); + } + documentSplitService.isHorizontalOverstep(map.getId()); + documentSplitService.checkOutOperation(Collections.singletonList(map.getId())); + sarFileSplitInfoService.deleteById(map.getId()); + return Result.OK(MessageUtils.getMessage(ResultCommon.SUCCESSFULLY_DELETED)); + } + + /** + * 批量删除 + * + * @return + */ + @AutoLog(value = "标准拆分-批量删除") + @ApiOperation(value="标准拆分-批量删除", notes="标准拆分-批量删除") + @PostMapping(value = "/deleteBatch") + @ApiOperationSupport(order = 10) + public Result deleteBatch(@RequestBody IdsMapBody map) { + if (StringUtils.isBlank(map.getIds())) { + return Result.error("请选择数据!"); + } + List list = Arrays.asList(map.getIds().split(",")); + documentSplitService.isHorizontalOverstep(map.getIds()); + documentSplitService.checkOutOperation(list); + sarFileSplitInfoService.deleteByIds(list); + return Result.OK(MessageUtils.getMessage(ResultCommon.SUCCESSFULLY_DELETED_IN_BULK)); + } + + /** + * 标准拆分详情-分页列表查询 + * @param parameter + * @return + */ + @AutoLog(value = "标准拆分详情-分页列表查询") + @ApiOperation(value = "标准拆分详情-分页列表查询") + @PostMapping("/queryDocumentSplitDetail") + @ApiOperationSupport(order = 11) + public Result>> queryDocumentSplitDetail(@RequestBody @ApiParam("标签管理") Map parameter) { + try { + IPage> data = documentSplitService.queryDocumentSplitDetail(parameter); + return Result.OK(data); + } catch (JeroBootException e){ + return Result.error(e.getMessage()); + } catch (Exception e){ + return Result.error(MessageUtils.getMessage(ResultCommon.ERROR)); + } + } + + /** + * 标准拆分详情-根据id查询 + * @param id + * @return + */ + @AutoLog(value = "标准拆分详情-根据id查询") + @ApiOperation(value = "标准拆分详情-根据id查询") + @GetMapping("/queryDocumentSplitDetailById") + @ApiOperationSupport(order = 12) + public Result> queryDocumentSplitDetailById(String id) { + return Result.OK(documentSplitService.queryDocumentSplitDetailById(id)); + } + + /** + * 标准拆分详情-条目信息列表 + * @param id + * @return + */ + @AutoLog(value = "标准拆分详情-条目信息列表") + @ApiOperation(value = "标准拆分详情-条目信息列表") + @GetMapping("/queryItemsValList") + @ApiOperationSupport(order = 12) + public Result> queryItemsValList(String id) { + return Result.OK(documentSplitService.queryItemsValList(id)); + } + + /** + * 标准拆分详情-条文解读列表 + * @param id + * @return + */ + @AutoLog(value = "标准拆分详情-条文解读列表") + @ApiOperation(value = "标准拆分详情-条文解读列表") + @GetMapping("/queryInterpretationArticlesList") + @ApiOperationSupport(order = 13) + public Result> queryInterpretationArticlesList(String id) { + return Result.OK(documentSplitService.queryInterpretationArticlesList(id)); + } + + /** + * 标准拆分详情-编辑 + * @param parameter + * @return + */ + @AutoLog(value = "标准拆分详情-编辑") + @ApiOperation(value = "标准拆分详情-编辑") + @PostMapping("/editDocumentSplitDetail") + @ApiOperationSupport(order = 14) + public Result editDocumentSplitDetail(@RequestBody @ApiParam("标签管理") Map parameter) { + documentSplitService.editDocumentSplitDetail(parameter); + return Result.OK(MessageUtils.getMessage(ResultCommon.OK)); + } + + /** + * 标准拆分详情-批量编辑 + * @param parameter + * @return + */ + @AutoLog(value = "标准拆分详情-批量编辑") + @ApiOperation(value = "标准拆分详情-批量编辑") + @PostMapping("/editBatchDocumentSplitDetail") + @ApiOperationSupport(order = 15) + public Result editBatchDocumentSplitDetail(@RequestBody @ApiParam("标签管理") Map parameter) { + try { + documentSplitService.editBatchDocumentSplitDetail(parameter); + return Result.OK(MessageUtils.getMessage(ResultCommon.OK)); + } catch (JeroBootException e){ + return Result.error(e.getMessage()); + } catch (Exception e){ + return Result.error(MessageUtils.getMessage(ResultCommon.ERROR)); + } + } + + /** + * 标准拆分详情-删除 + * + * @return + */ + @AutoLog(value = "标准拆分详情-删除") + @ApiOperation(value="标准拆分详情-删除", notes="标准拆分详情-删除") + @PostMapping(value = "/deleteDocumentSplitDetail") + @ApiOperationSupport(order = 16) + public Result deleteDocumentSplitDetail(@RequestBody Map parameter) { + documentSplitService.deleteDocumentSplitDetail(parameter); + return Result.OK(MessageUtils.getMessage(ResultCommon.OK)); + } + + /** + * 标准拆分详情-批量删除 + * + * @return + */ + @AutoLog(value = "标准拆分详情-批量删除") + @ApiOperation(value="标准拆分详情-批量删除", notes="标准拆分详情-批量删除") + @PostMapping(value = "/deleteBatchDocumentSplitDetail") + @ApiOperationSupport(order = 17) + public Result deleteBatchDocumentSplitDetail(@RequestBody Map parameter) { + documentSplitService.deleteBatchDocumentSplitDetail(parameter); + return Result.OK(MessageUtils.getMessage(ResultCommon.OK)); + } + + /** + * 标准拆分详情-合并条款 + * @param parameter + * @return + */ + @AutoLog(value = "标准拆分详情-合并条款") + @ApiOperation(value = "标准拆分详情-合并条款") + @PostMapping("/mergeDocumentSplitDetail") + @ApiOperationSupport(order = 18) + public Result mergeDocumentSplitDetail(@RequestBody @ApiParam("标签管理") Map parameter) { + documentSplitService.mergeDocumentSplitDetail(parameter); + return Result.OK(MessageUtils.getMessage(ResultCommon.OK)); + } + + /** + * 标准拆分详情-复制 + * @param id + * @return + */ + @AutoLog(value = "标准拆分详情-复制") + @ApiOperation(value = "标准拆分详情-复制") + @GetMapping("/copyDocumentSplitDetail") + @ApiOperationSupport(order = 19) + public Result copyDocumentSplitDetail(String id) { + documentSplitService.copyDocumentSplitDetail(id); + return Result.OK(MessageUtils.getMessage(ResultCommon.OK)); + } + + /** + * 标准拆分详情-批量复制 + * @param ids + * @return + */ + @AutoLog(value = "标准拆分详情-批量复制") + @ApiOperation(value = "标准拆分详情-批量复制") + @GetMapping("/copyBatchDocumentSplitDetail") + @ApiOperationSupport(order = 20) + public Result copyBatchDocumentSplitDetail(String ids) { + documentSplitService.copyBatchDocumentSplitDetail(ids); + return Result.OK(MessageUtils.getMessage(ResultCommon.OK)); + } + + + + /** + * 标准拆分详情-模板下载 + * @param request + * @param response + */ + @AutoLog(value = "标准拆分详情-模板下载") + @ApiOperation(value = "标准拆分详情-模板下载") + @GetMapping("/downloadImportTemplate") + @ApiOperationSupport(order = 21) + public void downloadImportTemplate(HttpServletRequest request, HttpServletResponse response) { + documentSplitService.downloadImportTemplate(request, response); + } + + /** + * 标准拆分详情-导出 + * @param request + * @param response + * @AutoLog(value = "标准拆分详情-导出") + * @ApiOperation(value = "标准拆分详情-导出") + * @GetMapping("/exportDocumentSplitDetail") + * public void exportDocumentSplitDetail(@RequestBody Map parameter, HttpServletRequest request, HttpServletResponse response) { + * documentSplitService.exportDocumentSplitDetail(parameter, request, response); + * } + */ +} diff --git a/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/entity/BaseEntity.java b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/entity/BaseEntity.java new file mode 100644 index 0000000..4792095 --- /dev/null +++ b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/entity/BaseEntity.java @@ -0,0 +1,64 @@ +package com.jero.modules.documenttool.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableLogic; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.jero.common.aspect.annotation.Dict; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; + +/** + * @Description: Entity基类 + * @Author: yjz + */ +@Data +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +public class BaseEntity implements Serializable { + private static final long serialVersionUID = 1L; + + /** ID */ + @TableId(type = IdType.ASSIGN_ID) + @ApiModelProperty(value = "ID") + private String id; + /** 创建人 */ + @ApiModelProperty(value = "创建人") +// @Excel(name = "创建人", width = 15) + @Dict(dictTable = "sys_user", dicCode = "username", dicText = "realname") + private String createBy; + /** 创建人 翻译 */ + @ApiModelProperty(value = "创建人 翻译") + @TableField(exist = false) + private String createByDictText; + /** 创建时间 */ + @ApiModelProperty(value = "创建时间") +// @Excel(name = "创建时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private java.util.Date createTime; + /** 更新人 */ + @ApiModelProperty(value = "更新人") +// @Excel(name = "更新人", width = 15) + @Dict(dictTable = "sys_user", dicCode = "username", dicText = "realname") + private String updateBy; + /** 更新人 翻译 */ + @ApiModelProperty(value = "更新人 翻译") + @TableField(exist = false) + private String updateByDictText; + /** 更新时间 */ + @ApiModelProperty(value = "更新时间") +// @Excel(name = "更新时间", width = 20, format = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private java.util.Date updateTime; + /** 逻辑删除 */ + @TableLogic + private Integer delFlag; +} diff --git a/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/entity/DocumentSplitInfo.java b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/entity/DocumentSplitInfo.java new file mode 100644 index 0000000..fbc0825 --- /dev/null +++ b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/entity/DocumentSplitInfo.java @@ -0,0 +1,102 @@ +package com.jero.modules.documenttool.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.jero.common.aspect.annotation.Dict; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.jeecgframework.poi.excel.annotation.Excel; + +/** + * @Author: yjz + * @Date: 2023/10/12/23:03 + * @Description: 文档拆分 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class DocumentSplitInfo extends BaseEntity { + /**所属部门*/ + @ApiModelProperty(value = "所属部门") + private String sysOrgCode; + /**标准号*/ + @Excel(name = "标准号", width = 15) + @ApiModelProperty(value = "标准号") + private String serialNumber; + + /**标准名称*/ + @Excel(name = "标准名称", width = 15) + @ApiModelProperty(value = "标准名称") + private String title; + + /**英文标题*/ + @Excel(name = "英文标题", width = 15) + @ApiModelProperty(value = "英文标题") + private String titleEn; + + /**文件状态*/ + @Excel(name = "文件状态", width = 15, dicCode = "file_type") + @Dict(dicCode = "process_manuscript") + private String fileType; + + /**文件名称*/ + @Excel(name = "文件名称", width = 15) + @ApiModelProperty(value = "文件名称") + private String fileName; + + /**拆分状态(1:编辑中 2:已发布)*/ + @Excel(name = "拆分状态", width = 15) + @ApiModelProperty(value = "拆分状态(1:编辑中 2:已发布)") + @Dict(dicCode = "split_status") + private String splitStatus; + + /**编辑人*/ + @Excel(name = "编辑人", width = 15) + @ApiModelProperty(value = "编辑人") + private String author; + + // 拆分时间 父类createTime + + /**拆分结果*/ + @Excel(name = "拆分结果", width = 15) + @ApiModelProperty(value = "拆分结果") + private String splitResult; + + /**文件id*/ + @Excel(name = "文件id", width = 15) + @ApiModelProperty(value = "文件id") + private String fileId; + + /**文档库关联id*/ + @Excel(name = "文档库关联id", width = 15) + @ApiModelProperty(value = "文档库关联id") + private String connectId; + + /**标准关联id*/ + @Excel(name = "标准关联id", width = 15) + @ApiModelProperty(value = "标准关联id") + private String standardId; + + /**发布前id*/ + @Excel(name = "发布前id", width = 15) + @ApiModelProperty(value = "发布前id") + private String publishBeforeId; + + @TableField(exist = false) + private String cut; + + /**ids 搜索用*/ + @ApiModelProperty(value = "标ids 搜索用") + @TableField(exist = false) + private String ids; + + /**标准编号/标准名称 搜索用*/ + @ApiModelProperty(value = "标准编号/标准名称 搜索用") + @TableField(exist = false) + private String serialNumberOrName; + + /**标准标识(1:国内,3:企业)*/ + @ApiModelProperty(value = "标准标识(1:国内,3:企业)") + @TableField(exist = false) + @Dict(dicCode = "split_standard_source") + private String splitStandardSource; +} diff --git a/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/entity/LawsDocumentSplit.java b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/entity/LawsDocumentSplit.java new file mode 100644 index 0000000..3e7ff00 --- /dev/null +++ b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/entity/LawsDocumentSplit.java @@ -0,0 +1,140 @@ +package com.jero.modules.documenttool.entity; + +import com.baomidou.mybatisplus.annotation.TableName; +import io.swagger.annotations.*; +import io.swagger.annotations.ApiModel; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; + +/** + * @Author: yjz + * @Date: 2023/10/15/19:34 + * @Description: + */ +@Data +@TableName("laws_document_split") +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +@ApiModel(value="laws_document_split对象", description="文档拆分") +public class LawsDocumentSplit extends BaseEntity { + /** + * 条文号 + */ + @ApiModelProperty("条文号") + private String itemNum; + + /** + * 条文标题 + */ + @ApiModelProperty("条文标题") + private String itemTitle; + + /** + * 条文内容 + */ + @ApiModelProperty("条文内容") + private String itemContent; + + /** + * 展示顺序 + */ + @ApiModelProperty("展示顺序") + private String sortNumber; + + /** + * 拆分目录id + */ + @ApiModelProperty("拆分目录id") + private String menuId; + + /** + * 技术领域 + */ + @ApiModelProperty("技术领域") + private String technicalField; + + /** + * 信息类别 + */ + @ApiModelProperty("信息类别") + private String infoType; + + /** + * 法规要求类型 + */ + @ApiModelProperty("法规要求类型") + private String lawsRequireType; + + /** + * 功能分类 + */ + @ApiModelProperty("功能分类") + private String functionClassification; + + /** + * 功能专业 + */ + @ApiModelProperty("功能专业") + private String functionProfessional; + + /** + * 功能分组编码 + */ + @ApiModelProperty("功能分组编码") + private String functionGroupCode; + + /** + * 功能分组名称 + */ + @ApiModelProperty("功能分组名称") + private String functionGroupName; + + /** + * 新认证实施时间 + */ + @ApiModelProperty("新认证实施时间") + private String newCerImplementDate; + + /** + * 已认证实施时间 + */ + @ApiModelProperty("已认证实施时间") + private String cerImplementDate; + + /** + * 新注册实施时间 + */ + @ApiModelProperty("新注册实施时间") + private String newRegisterImplementDate; + + /** + * 适用车型 + */ + @ApiModelProperty("适用车型") + private String applications; + + /** + * 动力类型 + */ + @ApiModelProperty("动力类型") + private String dynamicType; + + /** + * 适用零部件 + */ + @ApiModelProperty("适用零部件") + private String applicableComponents; + + /** + * 条文解读 + */ + @ApiModelProperty("条文解读") + private String interpretationArticles; + + /** + * 拆分信息记录id + */ + @ApiModelProperty("拆分信息记录id") + private String infoId; +} diff --git a/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/entity/LawsDocumentSplitView.java b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/entity/LawsDocumentSplitView.java new file mode 100644 index 0000000..d0dc971 --- /dev/null +++ b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/entity/LawsDocumentSplitView.java @@ -0,0 +1,34 @@ +package com.jero.modules.documenttool.entity; + +import com.jero.modules.split.entity.SarFileSplitMenuEO; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.List; +import java.util.Map; + +/** + * @Author: yjz + * @Date: 2023/10/18/18:01 + * @Description: + */ +@Data +public class LawsDocumentSplitView { + /** + * 文档拆分信息 + */ + @ApiModelProperty(value = "文档拆分信息") + private DocumentSplitInfo documentSplitInfo; + + /** + * 目录 + */ + @ApiModelProperty(value = "目录") + private List sarFileSplitMenuEO; + + /** + * 文档拆分详情信息 + */ + @ApiModelProperty(value = "文档拆分详情信息") + private List> documentSplitDetail; +} diff --git a/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/entity/SarFileSplitItemsVal.java b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/entity/SarFileSplitItemsVal.java new file mode 100644 index 0000000..7ecdcca --- /dev/null +++ b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/entity/SarFileSplitItemsVal.java @@ -0,0 +1,84 @@ +package com.jero.modules.documenttool.entity; + +import io.swagger.annotations.*; +import lombok.Data; + +import java.util.Date; +import java.io.Serializable; + +/** + * 条目信息 + * + * @author yjz + * @since 2023-10-19 00:07:32 + */ +@Data +public class SarFileSplitItemsVal implements Serializable { + private static final long serialVersionUID = -57474928779384395L; + /** + * 主键 + */ + @ApiModelProperty("主键") + private String id; + /** + * 所属部门 + */ + @ApiModelProperty("所属部门") + private String sysOrgCode; + /** + * 条款id + */ + @ApiModelProperty("条款id") + private String itemId; + /** + * 类型 + */ + @ApiModelProperty("类型") + private String type; + /** + * 条目内容 + */ + @ApiModelProperty("条目内容") + private String itemContent; + /** + * 排序 + */ + @ApiModelProperty("排序") + private Integer displaySeq; + /** + * 是否有效 + */ + @ApiModelProperty("是否有效") + private Integer validFlag; + /** + * 图片 + */ + @ApiModelProperty("图片") + private String imgName; + /** + * 用于前端数组排序 + */ + @ApiModelProperty("用于前端数组排序") + private Integer indexItem; + /** + * 创建日期 + */ + @ApiModelProperty("创建日期") + private Date creationTime; + /** + * 更新人 + */ + @ApiModelProperty("更新人") + private String modifyUser; + /** + * 更新日期 + */ + @ApiModelProperty("更新日期") + private Date modifyTime; + /** + * 创建人 + */ + @ApiModelProperty("创建人") + private String creationUser; +} + diff --git a/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/entity/SarFileSplitMenu.java b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/entity/SarFileSplitMenu.java new file mode 100644 index 0000000..e696116 --- /dev/null +++ b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/entity/SarFileSplitMenu.java @@ -0,0 +1,83 @@ +package com.jero.modules.documenttool.entity; + +import io.swagger.annotations.*; +import lombok.Data; + +import java.util.Date; +import java.io.Serializable; + +/** + * 目录 + * + * @author yjz + * @since 2023-10-18 22:21:48 + */ +@Data +public class SarFileSplitMenu implements Serializable { + private static final long serialVersionUID = 214967115522705210L; + /** + * 主键 + */ + @ApiModelProperty("主键") + private String id; + /** + * 所属部门 + */ + @ApiModelProperty("所属部门") + private String sysOrgCode; + /** + * 信息记录表id + */ + @ApiModelProperty("信息记录表id") + private String infoId; + /** + * 目录名称 + */ + @ApiModelProperty("目录名称") + private String name; + /** + * 父节点id + */ + @ApiModelProperty("父节点id") + private String parentId; + /** + * 排序序号 + */ + @ApiModelProperty("排序序号") + private Integer displaySeq; + /** + * 是否有效 + */ + @ApiModelProperty("是否有效") + private Integer validFlag; + /** + * 备注 + */ + @ApiModelProperty("备注") + private String remarks; + /** + * 条款名称 + */ + @ApiModelProperty("条款名称") + private String itemName; + /** + * 创建人 + */ + @ApiModelProperty("创建人") + private String creationUser; + /** + * 创建日期 + */ + @ApiModelProperty("创建日期") + private Date creationTime; + /** + * 更新人 + */ + @ApiModelProperty("更新人") + private String modifyUser; + /** + * 更新日期 + */ + private Date modifyTime; +} + diff --git a/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/entity/SplitFileInfo.java b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/entity/SplitFileInfo.java new file mode 100644 index 0000000..3b24af5 --- /dev/null +++ b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/entity/SplitFileInfo.java @@ -0,0 +1,73 @@ +package com.jero.modules.documenttool.entity; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.jero.common.aspect.annotation.Dict; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.jeecgframework.poi.excel.annotation.Excel; + +import java.util.Date; + +/** + * @ClassName: SplitFileInfo + * @Description: + * @Author: yjz + * @Date: 2023-11-14 11:29 + * @Version: 1.0 + **/ +@Data +public class SplitFileInfo { + @Excel(name = "id") + @ApiModelProperty(value = "id") + private String id; + + @Excel(name = "文件名称") + @ApiModelProperty(value = "文件名称") + private String fileName; + + @Excel(name = "文件地址") + @ApiModelProperty(value = "文件地址") + private String url; + + @Excel(name = "标准文件类型") + @Dict(dicCode = "process_manuscript") + @ApiModelProperty(value = "标准文件类型") + private String standardFileType; + + @ApiModelProperty(value = "标准id") + @Excel(name = "标准id") + private String standardId; + + @ApiModelProperty(value = "标准编号") + @Excel(name = "标准编号") + private String standardNo; + + @ApiModelProperty(value = "创建人") + @Excel(name = "创建人") + private String createBy; + + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") + @ApiModelProperty(value = "创建日期") + private Date createTime; + + @ApiModelProperty(value = "更新人") + private String updateBy; + + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd") + @ApiModelProperty(value = "更新日期") + private Date updateTime; + + @TableField(exist = false) + @ApiModelProperty(value = "来源") + @Dict(dicCode = "standard_source") + private String origin; + + @TableField(exist = false) + @ApiModelProperty(value = "标准号") + private String standardNumber; + + @TableField(exist = false) + @ApiModelProperty(value = "标准名称") + private String standardName; +} diff --git a/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/factory/ConditionMapFactory.java b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/factory/ConditionMapFactory.java new file mode 100644 index 0000000..93c199b --- /dev/null +++ b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/factory/ConditionMapFactory.java @@ -0,0 +1,44 @@ +package com.jero.modules.documenttool.factory; + +import com.jero.modules.documenttool.handler.AbstractConditionBase; +import org.apache.commons.lang3.StringUtils; + +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +/** + * @Author: yjz + * @Date: 2023/10/13/17:03 + * @Description: 工厂设计模式 + */ +public class ConditionMapFactory { + private ConditionMapFactory(){ + } + + /** + * 静态map容器 + */ + private static Map strategyMap = new HashMap<>(); + + /** + * 获取对应实现类 + * @param key:键 + * @return AbstractConditionBase:具体实现类 + */ + public static AbstractConditionBase getInvokeStrategy(String key){ + return strategyMap.get(key); + } + + /** + * 注册到工厂方法 + * @param key:键 + * @param abstractConditionBase:具体实现类 + */ + public static void register(String key, AbstractConditionBase abstractConditionBase){ + if (StringUtils.isEmpty(key) || Objects.isNull(abstractConditionBase)){ + return; + } + strategyMap.put(key, abstractConditionBase); + } +} diff --git a/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/handler/AbstractConditionBase.java b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/handler/AbstractConditionBase.java new file mode 100644 index 0000000..e013ad6 --- /dev/null +++ b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/handler/AbstractConditionBase.java @@ -0,0 +1,48 @@ +package com.jero.modules.documenttool.handler; + +import com.jero.common.system.vo.LoginUser; +import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.SecurityUtils; + +import java.text.SimpleDateFormat; +import java.util.Date; + +/** + * @Author: yjz + * @Date: 2023/10/13/17:01 + * @Description: 抽象类 + */ +@Slf4j +public abstract class AbstractConditionBase { + + private static final String EXPLAIN = "抽象类"; + /** + * 构建查询条件 + * @return 拼接完成的sql + */ + public String buildCondition(String fieldName, String value){ + log.info("{}构建查询条件字段名:{}, 参数值{}", EXPLAIN, fieldName, value); + return ""; + } + + /** + * 构建修改字段 + * @return 拼接完成的sql + */ + public String buildUpdate(String fieldName, String value){ + log.info("{}构建修改字段字段名:{}, 参数值{}", EXPLAIN, fieldName, value); + return ""; + } + + /** + * 更新人、更新时间填充 + * @return + */ + public String getUpdateByAndUpdateTime() { +// LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); +// SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); +// return " update_by = " + "'" + sysUser.getUsername() + "'" + "," + +// "update_time = " + FieldCommon.STR_TO_DATE_PREFIX + dateFormat.format(new Date()) + "','%Y-%m-%d %H:%i:%s')"; + return ""; + } +} diff --git a/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/handler/impl/DateManyConditionImpl.java b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/handler/impl/DateManyConditionImpl.java new file mode 100644 index 0000000..f581471 --- /dev/null +++ b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/handler/impl/DateManyConditionImpl.java @@ -0,0 +1,83 @@ +package com.jero.modules.documenttool.handler.impl; + +import com.jero.modules.documenttool.common.DocumentSplitCommon; +import com.jero.modules.documenttool.factory.ConditionMapFactory; +import com.jero.modules.documenttool.handler.AbstractConditionBase; +import com.jero.modules.tag.enums.LawsFieldTypeEnum; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + +/** + * @Author: yjz + * @Date: 2023/10/13/17:05 + * @Description: 多日期查询 + */ + +@Component +public class DateManyConditionImpl extends AbstractConditionBase { + + /** + * 实现逻辑,多日期字符串字段(存储时前端从小到大排好序(必须)) + * 逗号拆分获取首位和末尾日期,来分别匹配是否符合查询参数的两个日期区间 + * 实现sql参考:(代码拼接中加入了date_format来格式化日期) + * select + * epr.* + * from + * event_plan_record epr + * where + * substring_index('epr.realStartTime', ',', 1) BETWEEN #{startDate} AND #{endDate} + * or substring_index('epr.realStartTime', ',', -1) BETWEEN #{startDate} AND #{endDate} + * or #{startDate} BETWEEN substring_index('epr.realStartTime', ',', 1) AND substring_index('epr.realStartTime', ',', -1) + * or #{endDate} BETWEEN substring_index('epr.realStartTime', ',', 1) AND substring_index('epr.realStartTime', ',', -1) + * @param fieldName + * @param value + * @return + */ + @Override + public String buildCondition(String fieldName, String value){ + // 多日期查询 + String substringBegin = "SUBSTRING_INDEX("; + String substringEndFirst = ", ',', 1)"; + String substringEndLast = ", ',', -1)"; + String dateMany = DocumentSplitCommon.AND; + if (value.contains(",")) { + // 范围查询 + String[] split = value.split(","); + dateMany += "("; + String startDate = DocumentSplitCommon.DATE_FORMAT_BEGIN + "'" + split[0] + "'" + DocumentSplitCommon.DATE_FORMAT_END; + String endDate = DocumentSplitCommon.DATE_FORMAT_BEGIN + "'" + split[1] + "'" + DocumentSplitCommon.DATE_FORMAT_END; + dateMany += "(" + + DocumentSplitCommon.DATE_FORMAT_BEGIN + substringBegin + fieldName + substringEndFirst + DocumentSplitCommon.DATE_FORMAT_END + DocumentSplitCommon.BETWEEN + startDate + DocumentSplitCommon.AND + endDate + + ")" + + DocumentSplitCommon.OR + + "(" + + DocumentSplitCommon.DATE_FORMAT_BEGIN + substringBegin + fieldName + substringEndLast + DocumentSplitCommon.DATE_FORMAT_END + DocumentSplitCommon.BETWEEN + startDate + DocumentSplitCommon.AND + endDate + + ")" + + DocumentSplitCommon.OR + + "(" + + startDate + DocumentSplitCommon.BETWEEN + DocumentSplitCommon.DATE_FORMAT_BEGIN + substringBegin + fieldName + substringEndFirst + DocumentSplitCommon.DATE_FORMAT_END + DocumentSplitCommon.AND + DocumentSplitCommon.DATE_FORMAT_BEGIN + substringBegin + fieldName + substringEndLast + DocumentSplitCommon.DATE_FORMAT_END + + ")" + + DocumentSplitCommon.OR + + "(" + + endDate + DocumentSplitCommon.BETWEEN + DocumentSplitCommon.DATE_FORMAT_BEGIN + substringBegin + fieldName + substringEndFirst + DocumentSplitCommon.DATE_FORMAT_END + DocumentSplitCommon.AND + DocumentSplitCommon.DATE_FORMAT_BEGIN + substringBegin + fieldName + substringEndLast + DocumentSplitCommon.DATE_FORMAT_END + + ")" + ")"; + } else { + dateMany += fieldName + DocumentSplitCommon.LIKE + DocumentSplitCommon.CONCAT_LIKE_BEGIN + value + DocumentSplitCommon.CONCAT_LIKE_END; + } + return dateMany; + } + + @Override + public String buildUpdate(String fieldName, String value){ + return fieldName + " = " + "'" + value +"'"; + } + + /** + * 初始化注册到工厂 + */ + @PostConstruct + private void register(){ + ConditionMapFactory.register(LawsFieldTypeEnum.DATE_MANY.getValue(), this); + } +} diff --git a/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/handler/impl/DateSingleConditionImpl.java b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/handler/impl/DateSingleConditionImpl.java new file mode 100644 index 0000000..d1176d1 --- /dev/null +++ b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/handler/impl/DateSingleConditionImpl.java @@ -0,0 +1,53 @@ +package com.jero.modules.documenttool.handler.impl; + +import com.jero.modules.documenttool.common.DocumentSplitCommon; +import com.jero.modules.documenttool.factory.ConditionMapFactory; +import com.jero.modules.documenttool.handler.AbstractConditionBase; +import com.jero.modules.tag.enums.LawsFieldTypeEnum; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + +/** + * @Author: yjz + * @Date: 2023/10/13/17:05 + * @Description: 单日期查询 + */ + +@Component +public class DateSingleConditionImpl extends AbstractConditionBase { + + @Override + public String buildCondition(String fieldName, String value){ + // 单日期查询 + String dateSingle = DocumentSplitCommon.AND; + if (value.contains(",")) { + // 范围查询 + String[] split = value.split(","); + String startDate = split[0]; + String endDate = split[1]; + dateSingle += + DocumentSplitCommon.DATE_FORMAT_BEGIN + fieldName + DocumentSplitCommon.DATE_FORMAT_END + DocumentSplitCommon.GT + "'" + startDate + "'" + + DocumentSplitCommon.AND + + DocumentSplitCommon.DATE_FORMAT_BEGIN + fieldName + DocumentSplitCommon.DATE_FORMAT_END + DocumentSplitCommon.LT + "'" + endDate + "'"; + } else { + // 等值查询 + dateSingle += DocumentSplitCommon.DATE_FORMAT_BEGIN + fieldName + DocumentSplitCommon.DATE_FORMAT_END + "='" + value + "'"; + } + return dateSingle; + } + + @Override + public String buildUpdate(String fieldName, String value){ +// return fieldName + " = " + "'" + FieldCommon.STR_TO_DATE_PREFIX + value + FieldCommon.STR_TO_DATE_SUFFIX +"'"; + return ""; + } + + /** + * 初始化注册到工厂 + */ + @PostConstruct + private void register(){ + ConditionMapFactory.register(LawsFieldTypeEnum.DATE_SINGLE.getValue(), this); + } +} diff --git a/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/handler/impl/InConditionImpl.java b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/handler/impl/InConditionImpl.java new file mode 100644 index 0000000..4cf6cdf --- /dev/null +++ b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/handler/impl/InConditionImpl.java @@ -0,0 +1,45 @@ +package com.jero.modules.documenttool.handler.impl; + +import com.jero.modules.documenttool.common.DocumentSplitCommon; +import com.jero.modules.documenttool.handler.AbstractConditionBase; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import java.util.Arrays; +import java.util.List; + +/** + * @Author: yjz + * @Date: 2023/10/13/17:05 + * @Description: 下拉框查询 + */ + +@Component +public class InConditionImpl extends AbstractConditionBase { + + @Override + public String buildCondition(String fieldName, String value){ + // 下拉框查询 + StringBuilder in = new StringBuilder(); + in.append(DocumentSplitCommon.AND).append("(("); + List list = Arrays.asList(value.split(",")); + for (String s : list) { + in.append(DocumentSplitCommon.INSTR_BEGIN).append(fieldName).append(",").append("'").append(s).append("'").append(")"); + if (list.indexOf(s) != list.size() -1){ + in.append(DocumentSplitCommon.OR); + } + } + in.append("))"); + return in.toString(); + } + + /** + * 初始化注册到工厂 + */ + @PostConstruct + private void register(){ +// for (String item : FieldCommon.TYPE_LIKE_IN) { +// ConditionMapFactory.register(item, this); +// } + } +} diff --git a/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/handler/impl/LikeConditionImpl.java b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/handler/impl/LikeConditionImpl.java new file mode 100644 index 0000000..63df439 --- /dev/null +++ b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/handler/impl/LikeConditionImpl.java @@ -0,0 +1,34 @@ +package com.jero.modules.documenttool.handler.impl; + +import com.jero.modules.documenttool.common.DocumentSplitCommon; +import com.jero.modules.documenttool.handler.AbstractConditionBase; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + +/** + * @Author: yjz + * @Date: 2023/10/13/17:04 + * @Description: 模糊查询 + */ + +@Component +public class LikeConditionImpl extends AbstractConditionBase { + + @Override + public String buildCondition(String fieldName, String value){ + // 模糊查询 + return DocumentSplitCommon.AND + fieldName + DocumentSplitCommon.LIKE + + DocumentSplitCommon.CONCAT_LIKE_BEGIN + value + DocumentSplitCommon.CONCAT_LIKE_END; + } + + /** + * 初始化注册到工厂 + */ + @PostConstruct + private void register(){ +// for (String item : FieldCommon.TYPE_LIKE) { +// ConditionMapFactory.register(item, this); +// } + } +} diff --git a/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/handler/impl/UniversalImpl.java b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/handler/impl/UniversalImpl.java new file mode 100644 index 0000000..9b0b967 --- /dev/null +++ b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/handler/impl/UniversalImpl.java @@ -0,0 +1,21 @@ +package com.jero.modules.documenttool.handler.impl; + +import com.jero.modules.documenttool.handler.AbstractConditionBase; +import lombok.extern.slf4j.Slf4j; + +/** + * @Author: yjz + * @Date: 2023/10/15/15:19 + * @Description: 普通 + */ +@Slf4j +public class UniversalImpl extends AbstractConditionBase { + public UniversalImpl(){ + log.info(""); + } + + @Override + public String buildUpdate(String fieldName, String value){ + return fieldName + " = " + "'" + value + "'"; + } +} diff --git a/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/mapper/DocumentSplitMapper.java b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/mapper/DocumentSplitMapper.java new file mode 100644 index 0000000..b522e17 --- /dev/null +++ b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/mapper/DocumentSplitMapper.java @@ -0,0 +1,212 @@ +package com.jero.modules.documenttool.mapper; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.jero.modules.documenttool.entity.*; +import com.jero.modules.split.entity.SarFileSplitInfoEO; +import com.jero.modules.split.entity.SarFileSplitItemsEO; +import com.jero.modules.split.entity.SarFileSplitItemsValEO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Author: yjz + * @Date: 2023/10/12/23:03 + * @Description: 文档拆分 + */ +public interface DocumentSplitMapper { + /** + * 文档拆分-分页列表查询 + * @param page + * @param queryWrapper + * @return + */ + IPage queryByPage(Page page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); + + /** + * 文档拆分-列表查询 + * @param queryWrapper + * @return + */ + List queryByPage(@Param(Constants.WRAPPER) QueryWrapper queryWrapper); + + /** + * 文档拆分详情-分页列表查询 + * @param mapPage + * @param selectColumn + * @param selectCondition + * @return + */ + IPage> queryDocumentSplitDetail(Page> mapPage, @Param("selectColumn") String selectColumn, @Param("selectCondition") String selectCondition); + + /** + * 文档拆分详情-列表查询 + * @param selectColumn + * @param selectCondition + * @return + */ + List> queryDocumentSplitDetail(@Param("selectColumn") String selectColumn, @Param("selectCondition") String selectCondition); + + /** + * 文档拆分详情-编辑 + * @param updateSet + * @param updateCondition + * @return int + */ + int editDocumentSplitDetail(@Param("updateSet") String updateSet, @Param("updateCondition") String updateCondition); + + /** + * 条目查询根据itemId集合 + * @param itemIdList + * @return + */ + List queryItemsValByItemIds(@Param("itemIdList") List itemIdList); + + /** + * 条目查询根据itemId + * @param itemId + * @return + */ + List queryItemsValByItemId(@Param("itemId") String itemId, @Param("type") String type); + + /** + * 条目删除根据itemId + * @param itemId + * @return + */ + int deleteItemsValByItemId(@Param("itemId") String itemId, @Param("type") String type); + + /** + * 目录删除根据menuId集合 + * @param menuIdList + */ + int sarFileSplitMenuDeleteByIdList(@Param("menuIdList") List menuIdList); + + /** + * 文档拆分详情-删除 + * @param id + */ + int deleteDocumentSplitDetail(@Param("id") String id); + + /** + * 文档拆分详情-批量删除 + * @param updateCondition + */ + int deleteBatchDocumentSplitDetail(@Param("updateCondition") String updateCondition); + + /** + * 条目批量新增 + * @param valList + * @return + */ + int addBatchItemsVal(@Param("valList") List valList); + + /** + * 文档拆分详情通过id查询 + * @param id + */ + Map queryLawsDocumentSplitById(@Param("id") String id); + + /** + * 文档拆分详情通过id范围查询 + * @param id + */ + Map queryLawsDocumentSplitInId(@Param("idList") String id); + + /** + * 文档拆分详情-新增 + * @param insertField + * @param insertValue + * @return + */ + int insertLawsDocumentSplit(@Param("insertField") String insertField, @Param("insertValue") List insertValue); + + /** + * 条目批量删除根据itemId + * @param itemIds + */ + int deleteItemsValByItemIds(@Param("itemIds") String itemIds, @Param("type") String type); + + /** + * 文档拆分根据id查询 + * @param id + */ + DocumentSplitInfo queryDocumentSplitInfoById(@Param("id") String id); + + /** + * 文档拆分新增 + * @param newInfo + */ + int insertDocumentSplitInfo(DocumentSplitInfo newInfo); + + /** + * 目录根据id查询 + * @param infoId + * @return + */ + List querySarFileSplitMenuByInfoId(@Param("infoId") String infoId); + + /** + * 目录批量新增 + * @param oldMenuList + * @return + */ + int insertBatchSarFileSplitMenuByInfoId(@Param("entities") List oldMenuList); + + /** + * 文档拆分详情根据infoid查询 + * @param infoId + * @return + */ + List> queryLawsDocumentSplitByInfoId(@Param("infoId") String infoId); + + /** + * 条目信息根据itemId查询 + * @param itemId + * @return + */ + List querySarFileSplitItemsValByItemId(@Param("itemId") String itemId); + + /** + * 条目信息批量新增 + * @param sarFileSplitItemsVal + */ + int insertSarFileSplitItemsVal(@Param("entities") List sarFileSplitItemsVal); + + /** + * 文档拆分详情根据id查询 + * @param id + * @return + */ + Map queryDocumentSplitDetailById(String id); + + /** + * 文档拆分-拆分已入库文本分页列表查询 + * @param queryWrapper + * @param page + * @return + */ + IPage querySplitFileInfoByPage(@Param(Constants.WRAPPER) QueryWrapper queryWrapper, IPage page); + + /** + * 条文表-根据id集合查询 + * @param listMapIdList + */ + List querySarFileSplitItemsByIds(@Param("idList") List listMapIdList); + + /** + * 文档拆分详情通过idList范围查询 + * @param idList + */ + List queryLawsDocumentSplitInIds(List idList); + + /** + * 文档拆分详情-查询menuId分组数量 + * @param infoId + */ + List queryLawsDocumentSplitGroupByMenuId(@Param("infoId") String infoId); +} diff --git a/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/mapper/LawsDocumentSplitMapper.java b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/mapper/LawsDocumentSplitMapper.java new file mode 100644 index 0000000..4882b26 --- /dev/null +++ b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/mapper/LawsDocumentSplitMapper.java @@ -0,0 +1,12 @@ +package com.jero.modules.documenttool.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.jero.modules.documenttool.entity.LawsDocumentSplit; + +/** + * @Author: yjz + * @Date: 2023/10/15/19:32 + * @Description: + */ +public interface LawsDocumentSplitMapper extends BaseMapper { +} diff --git a/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/mapper/xml/DocumentSplitMapper.xml b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/mapper/xml/DocumentSplitMapper.xml new file mode 100644 index 0000000..bc8bda4 --- /dev/null +++ b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/mapper/xml/DocumentSplitMapper.xml @@ -0,0 +1,275 @@ + + + + + + insert into SAR_FILE_SPLIT_ITEMS_VAL + (id, type, item_id, valid_flag, creation_user, creation_time, modify_time, modify_user, display_seq, img_name, item_content, index_item) + values + ( + #{item.id, jdbcType=VARCHAR}, #{item.type, jdbcType=VARCHAR}, + #{item.itemId, jdbcType=VARCHAR}, + #{item.validFlag, jdbcType=INTEGER}, #{item.creationUser, jdbcType=VARCHAR}, + #{item.creationTime, jdbcType=TIMESTAMP}, #{item.modifyTime, jdbcType=TIMESTAMP}, + #{item.modifyUser, jdbcType=VARCHAR}, #{item.displaySeq, jdbcType=INTEGER}, + #{item.imgName, jdbcType=INTEGER}, + #{item.itemContent, jdbcType=CLOB}, + #{item.indexItem, jdbcType=INTEGER}) + + + + + insert into laws_document_split(${insertField}) + values + + #{value} + + + + + insert into sar_file_split_info(id, create_by, create_time, update_by, update_time, sys_org_code, serial_number, title, file_type, file_name, split_result, file_id, connect_id, title_en, author, split_status, standard_id, del_flag, publish_before_id) + values (#{id}, #{createBy}, #{createTime}, #{updateBy}, #{updateTime}, #{sysOrgCode}, #{serialNumber}, #{title}, #{fileType}, #{fileName}, #{splitResult}, #{fileId}, #{connectId}, #{titleEn}, #{author}, #{splitStatus}, #{standardId}, #{delFlag}, #{publishBeforeId}) + + + + insert into sar_file_split_menu(id, sys_org_code, info_id, name, parent_id, display_seq, valid_flag, remarks, item_name, creation_user, creation_time, modify_user, modify_time) + values + + (#{entity.id}, #{entity.sysOrgCode}, #{entity.infoId}, #{entity.name}, #{entity.parentId}, #{entity.displaySeq}, #{entity.validFlag}, #{entity.remarks}, #{entity.itemName}, #{entity.creationUser}, #{entity.creationTime}, #{entity.modifyUser}, #{entity.modifyTime}) + + + + + insert into sar_file_split_items_val(id, sys_org_code, item_id, type, item_content, display_seq, valid_flag, img_name, index_item, creation_time, modify_user, modify_time, creation_user) + values + + (#{entity.id}, #{entity.sysOrgCode}, #{entity.itemId}, #{entity.type}, #{entity.itemContent}, #{entity.displaySeq}, #{entity.validFlag}, #{entity.imgName}, #{entity.indexItem}, #{entity.creationTime}, #{entity.modifyUser}, #{entity.modifyTime}, #{entity.creationUser}) + + + + + delete from SAR_FILE_SPLIT_MENU + where id in + + #{item} + + + + + delete from laws_document_split + where id = #{id} + + + + delete from laws_document_split + where ${updateCondition} + + + + delete from sar_file_split_items_val + where item_id = #{itemId} + + + and type = #{type} + + + and type ]]> 'interpretation' + + + + + + delete from sar_file_split_items_val + where item_id in + + #{item} + + + + + and type = #{type} + + + and type ]]> 'interpretation' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + UPDATE laws_document_split + SET ${updateSet} + WHERE ${updateCondition} + + diff --git a/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/service/IDocumentSplitService.java b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/service/IDocumentSplitService.java new file mode 100644 index 0000000..b6acf2c --- /dev/null +++ b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/service/IDocumentSplitService.java @@ -0,0 +1,208 @@ +package com.jero.modules.documenttool.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.jero.modules.documenttool.entity.DocumentSplitInfo; +import com.jero.modules.documenttool.entity.LawsDocumentSplitView; +import com.jero.modules.documenttool.entity.SplitFileInfo; +import com.jero.modules.split.entity.SarFileSplitInfoEO; +import com.jero.modules.split.entity.SarFileSplitItemsValEO; +import com.jero.modules.split.entity.SarFileSplitMenuEO; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.List; +import java.util.Map; + +/** + * @Author: yjz + * @Date: 2023/10/12/23:03 + * @Description: 文档拆分 + */ +public interface IDocumentSplitService { + + /** + * 文档拆分-分页列表查询 + * @param documentSplitInfo + * @param pageNo + * @param pageSize + * @return + */ + IPage queryByPage(DocumentSplitInfo documentSplitInfo, Integer pageNo, Integer pageSize); + + /** + * 文档拆分-列表查询 + * @param documentSplitInfo + * @return + */ + List queryByList(DocumentSplitInfo documentSplitInfo); + + /** + * 文档拆分-更改权限 + * @param documentSplitInfo + */ + void updatePermissions(DocumentSplitInfo documentSplitInfo); + + /** + * 判断操作权限 + * @param ids + */ + void checkOutOperation(List ids); + + /** + * 文档拆分详情-分页列表查询 + * @param parameter + * @return + */ + IPage> queryDocumentSplitDetail(Map parameter); + + /** + * 文档拆分详情-列表查询 + * @param parameter + * @return + */ + List> queryDocumentSplitDetailByList(Map parameter); + + /** + * 文档拆分-拆分 + * @param sarFileSplitInfoEO + */ + void add(SarFileSplitInfoEO sarFileSplitInfoEO); + + /** + * 拆分文档保存 + * @param sarFileSplitInfoEO + */ + void saveDocumentSplitInfo(SarFileSplitInfoEO sarFileSplitInfoEO); + + /** + * 企标权限校验 + * @param sarFileSplitInfoEO + */ + void enterpriseCheck(SarFileSplitInfoEO sarFileSplitInfoEO); + + /** + * 唯一性校验 + */ + void uniqueCheck(SarFileSplitInfoEO sarFileSplitInfoEO); + + /** + * 文档拆分详情-编辑 + * @param parameter + */ + void editDocumentSplitDetail(Map parameter); + + /** + * 文档拆分详情-批量编辑 + * @param parameter + */ + void editBatchDocumentSplitDetail(Map parameter); + + /** + * 文档拆分详情-合并条款 + * @param parameter + */ + void mergeDocumentSplitDetail(Map parameter); + + /** + * 文档拆分详情-删除 + * @param parameter + */ + void deleteDocumentSplitDetail(Map parameter); + + /** + * 文档拆分详情-批量删除 + * @param parameter + */ + void deleteBatchDocumentSplitDetail(Map parameter); + + /** + * 文档拆分详情-复制 + * @param id + */ + void copyDocumentSplitDetail(String id); + + /** + * 文档拆分详情-批量复制 + * @param ids + */ + void copyBatchDocumentSplitDetail(String ids); + + /** + * 文档拆分详情-条目信息列表 + * @param itemId + * @return + */ + List queryItemsValList(String itemId); + + /** + * 文档拆分详情-根据id查询 + * @param id + * @return + */ + Map queryDocumentSplitDetailById(String id); + + /** + * 文档拆分详情-模板下载 + * @param request + * @param response + */ + void downloadImportTemplate(HttpServletRequest request, HttpServletResponse response); + + /** + * 文档拆分详情-条文解读列表 + * @param itemId + * @return + */ + List queryInterpretationArticlesList(String itemId); + + /** + * 文档拆分-查看 + * @param parameter + * @return + */ + LawsDocumentSplitView queryView(Map parameter); + + /** + * 文档拆分-发布 + * @param parameter + * @return + */ + void publish(Map parameter); + + /** + * 文档拆分-撤回 + * @param parameter + */ + void revocation(Map parameter); + + /** + * 文档拆分详情-导出 + * @param request + * @param response + */ + void exportDocumentSplitDetail(Map parameter, HttpServletRequest request, HttpServletResponse response); + + /** + * 文档拆分-拆分已入库文本分页列表查询 + * @param splitFileInfo + * @param pageNo + * @param pageSize + * @return + */ + IPage querySplitFileInfoByPage(SplitFileInfo splitFileInfo, Integer pageNo, Integer pageSize); + + /** + * 文档拆分-通过文档拆分id查询目录树形结构 + * @param infoId + * @return + */ + List queryTreeMenuByInfoId(String infoId); + + /** + * 文档拆分-是否水平越权 + * @return + */ + void isHorizontalOverstep(String ids); + + +} diff --git a/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/service/impl/DocumentSplitServiceImpl.java b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/service/impl/DocumentSplitServiceImpl.java new file mode 100644 index 0000000..bb0addb --- /dev/null +++ b/byd-structuredplugins-serve/laws-modules/src/main/java/com/jero/modules/documenttool/service/impl/DocumentSplitServiceImpl.java @@ -0,0 +1,1390 @@ +package com.jero.modules.documenttool.service.impl; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.text.CharSequenceUtil; +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.jero.common.constant.enums.LanguageEnum; +import com.jero.common.constant.enums.YesOrNoEnum; +import com.jero.common.exception.JeroBootException; +import com.jero.common.system.vo.LoginUser; +import com.jero.common.util.FileUtils; +import com.jero.common.util.MessageUtils; +import com.jero.common.util.UUIDUtils; +import com.jero.common.util.ZipUtil; +import com.jero.modules.documenttool.common.DocumentSplitCommon; +import com.jero.modules.documenttool.entity.*; +import com.jero.modules.documenttool.factory.ConditionMapFactory; +import com.jero.modules.documenttool.handler.impl.DateManyConditionImpl; +import com.jero.modules.documenttool.handler.impl.UniversalImpl; +import com.jero.modules.documenttool.mapper.DocumentSplitMapper; +import com.jero.modules.documenttool.mapper.LawsDocumentSplitMapper; +import com.jero.modules.documenttool.service.IDocumentSplitService; +import com.jero.modules.split.entity.SarFileSplitInfoEO; +import com.jero.modules.split.entity.SarFileSplitItemsValEO; +import com.jero.modules.split.entity.SarFileSplitMenuEO; +import com.jero.modules.split.enums.SplitEnum; +import com.jero.modules.split.enums.SplitFileTypeTypeEnum; +import com.jero.modules.split.mapper.SarFileSplitItemsValEOMapper; +import com.jero.modules.split.page.SarFileSplitMenuEOPage; +import com.jero.modules.split.service.ISarFileSplitInfoService; +import com.jero.modules.split.service.ISarFileSplitMenuEOService; +import com.jero.modules.split.service.impl.FileSpiltService; +import com.jero.modules.sys.entity.LawsEnterpriseStandardLevel; +import com.jero.modules.sys.entity.LawsGrade; +import com.jero.modules.sys.service.ILawsEnterpriseStandardLevelService; +import com.jero.modules.sys.service.ILawsGradeService; +import com.jero.modules.system.entity.SysDict; +import com.jero.modules.system.entity.SysDictItem; +import com.jero.modules.system.entity.SysUser; +import com.jero.modules.system.model.DepartIdModel; +import com.jero.modules.system.service.ISysDictItemService; +import com.jero.modules.system.service.ISysDictService; +import com.jero.modules.system.service.ISysUserDepartService; +import com.jero.modules.system.service.ISysUserService; +import com.jero.modules.tag.entity.LawsTag; +import com.jero.modules.tag.enums.LawsFieldTypeEnum; +import com.jero.modules.tag.enums.TableNameEnum; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.poi.hssf.usermodel.HSSFDataFormat; +import org.apache.poi.ss.usermodel.*; +import org.apache.poi.ss.util.CellRangeAddress; +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.BeanUtils; +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.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.concurrent.atomic.AtomicReference; +import java.util.stream.Collectors; + +/** + * @Author: yjz + * @Date: 2023/10/12/23:03 + * @Description: 文档拆分 + */ +@Service +@Transactional +@Slf4j +public class DocumentSplitServiceImpl implements IDocumentSplitService { + private final DocumentSplitMapper documentSplitMapper; + private final ISarFileSplitInfoService sarFileSplitInfoService; + private final FileSpiltService fileSpiltService; + private final ISarFileSplitMenuEOService sarFileSplitMenuEOService; + private final LawsDocumentSplitMapper lawsDocumentSplitMapper; + private final SarFileSplitItemsValEOMapper sarFileSplitItemsValEOMapper; + private final ISysDictService sysDictService; + private final ISysDictItemService sysDictItemService; + private final ILawsEnterpriseStandardLevelService lawsEnterpriseStandardLevelService; + private final ISysUserService sysUserService; + private final ISysUserDepartService sysUserDepartService; + private final ILawsGradeService lawsGradeService; + private static final String INFO_ID = "info_id"; + private static final String ID = "id"; + private static final String IDS = "ids"; + private static final String ITEM_NUM = "item_num"; + private static final String ITEM_TITLE = "item_title"; + private static final String ITEM_CONTENT = "item_content"; + private static final String INTERPRETATION_ARTICLES = "interpretation_articles"; + private static final String INTERPRETATION_ARTICLES_LIST = "interpretationArticlesList"; + private static final String MENU_ID = "menu_id"; + private static final String CREATE_TIME = "create_time"; + private static final String SPLIT_STATUS = "split_status"; + public DocumentSplitServiceImpl(DocumentSplitMapper documentSplitMapper, + ISarFileSplitInfoService sarFileSplitInfoService, + FileSpiltService fileSpiltService, + ISarFileSplitMenuEOService sarFileSplitMenuEOService, + LawsDocumentSplitMapper lawsDocumentSplitMapper, + SarFileSplitItemsValEOMapper sarFileSplitItemsValEOMapper, + ISysDictService sysDictService, + ISysDictItemService sysDictItemService, + ILawsEnterpriseStandardLevelService lawsEnterpriseStandardLevelService, + ISysUserService sysUserService, + ISysUserDepartService sysUserDepartService, + ILawsGradeService lawsGradeService) { + this.documentSplitMapper = documentSplitMapper; + this.sarFileSplitInfoService = sarFileSplitInfoService; + this.fileSpiltService = fileSpiltService; + this.sarFileSplitMenuEOService = sarFileSplitMenuEOService; + this.lawsDocumentSplitMapper = lawsDocumentSplitMapper; + this.sarFileSplitItemsValEOMapper = sarFileSplitItemsValEOMapper; + this.sysDictService = sysDictService; + this.sysDictItemService = sysDictItemService; + this.lawsEnterpriseStandardLevelService = lawsEnterpriseStandardLevelService; + this.sysUserService = sysUserService; + this.sysUserDepartService = sysUserDepartService; + this.lawsGradeService = lawsGradeService; + } + + @Value("${jero.path.exportExcelTempPath}") + private String exportExcelTempPath; + @Value("#{'${adminRoleCode}'.split(',')}") + private List adminRoleCodeList; + + @Override + public IPage queryByPage(DocumentSplitInfo documentSplitInfo, Integer pageNo, Integer pageSize) { + // 构建查询条件 + QueryWrapper queryWrapper = getSarFileSplitInfoEOQueryWrapper(documentSplitInfo); + return documentSplitMapper.queryByPage(new Page<>(pageNo, pageSize), queryWrapper); + } + + @Override + public List queryByList(DocumentSplitInfo documentSplitInfo) { + // 构建查询条件 + QueryWrapper queryWrapper = getSarFileSplitInfoEOQueryWrapper(documentSplitInfo); + return documentSplitMapper.queryByPage(queryWrapper); + } + + @Override + public void updatePermissions(DocumentSplitInfo documentSplitInfo) { + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + List ids; + // 获取id集合 + if (StringUtils.isNotBlank(documentSplitInfo.getIds())){ + ids = Arrays.asList(documentSplitInfo.getIds().split(",")); + }else { + List documentSplitInfos = queryByList(documentSplitInfo); + ids = documentSplitInfos.stream().map(DocumentSplitInfo::getId).collect(Collectors.toList()); + } + + // 水平越权 + isHorizontalOverstep(String.join(",", ids)); + + updateWrapper.in(SarFileSplitInfoEO::getId, ids); + SysUser sysUser = sysUserService.getById(documentSplitInfo.getCreateBy()); + updateWrapper.set(SarFileSplitInfoEO::getAuthor, documentSplitInfo.getCreateBy()); + updateWrapper.set(SarFileSplitInfoEO::getCreateBy, sysUser.getUsername()); + sarFileSplitInfoService.update(updateWrapper); + } + + /** + * 判断操作权限 + * @param ids + */ + @Override + public void checkOutOperation(List ids) { + // 登陆人信息 + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + if (sysUser.getRoleIds().contains("admin")){ + return; + } + List sarFileSplitInfoEOS = sarFileSplitInfoService.listByIds(ids); + for (SarFileSplitInfoEO sarFileSplitInfoEO : sarFileSplitInfoEOS) { + String createBy = sarFileSplitInfoEO.getCreateBy(); + String author = sarFileSplitInfoEO.getAuthor(); + if (!sysUser.getUsername().equals(createBy) || !sysUser.getId().equals(author)){ + if(LanguageEnum.CN.getValue().equals(MessageUtils.getLanguage().getValue())) { + throw new JeroBootException("只能删除有操作权限的数据!"); + }else{ + throw new JeroBootException("You can delete only the data that you have permission to operate!"); + } + } + } + } + + @Override + public IPage> queryDocumentSplitDetail(Map parameter) { +// isHorizontalOverstep(parameter.get(INFO_ID).toString()); +// // 查询全部字段列表 +// List fieldList = lawsCommonMapper.getFieldList(TableNameEnum.DOCUMENT_SPLIT.getTableName()); +// // 列表展示字段 +// List fieldListSelect = fieldList.stream().filter(v -> YesOrNoEnum.YES.getValue() +// .equals(String.valueOf(v.getIsShowList()))).collect(Collectors.toList()); +// // 搜索条件展示字段 +// List fieldListCondition = fieldList.stream().filter(v -> YesOrNoEnum.YES.getValue() +// .equals(String.valueOf(v.getIsQuery()))).collect(Collectors.toList()); +// + // 分页参数 + int pageNo = Integer.parseInt((String) parameter.get("pageNo")); + int pageSize = Integer.parseInt((String) parameter.get("pageSize")); +// +// // sql查询列字段拼接 +// String selectColumn = getSelectColumn(fieldListSelect); +// // sql where条件拼接 +// String selectCondition = getSelectCondition(parameter, fieldListCondition); +// // 排序 +// selectCondition = orderBy(parameter, selectCondition, fieldListSelect); + String selectColumn = "*"; + String selectCondition = "order by create_time desc"; + // 查询数据 + IPage> mapIPage = documentSplitMapper.queryDocumentSplitDetail(new Page<>(pageNo, pageSize), selectColumn, selectCondition); +// // 翻译 +// dicTranslate(mapIPage.getRecords(), fieldListSelect); +// return mapIPage; + return mapIPage; + } + + private String orderBy(Map parameter, String selectCondition, List fieldListSelect) { + StringBuilder sb = new StringBuilder(selectCondition); + if (parameter.containsKey("column")){ + sb.append(" order by "); + String column = (String) parameter.get("column"); + String order = (String) parameter.get("order"); + // 匹配参数和字段 + Optional lawsTag = fieldListSelect.stream().filter(o -> column.equals(o.getDbFieldName())).findFirst(); + lawsTag.ifPresent(l -> { + // 多日期特殊处理 + if (LawsFieldTypeEnum.DATE_MANY.getValue().equals(l.getFieldShowType())){ + sb.append(DocumentSplitCommon.STR_TO_DATE_BEGIN + "substring_index(") + .append(l.getDbFieldName()).append(", ',', -1)").append(",'%Y-%m-%d')"); + }else { + sb.append(column); + } + }); + sb.append(" ").append(order); + }else { + // 默认排序 + sb.append(" order by display_seq asc, sort_number is null, sort_number asc"); + } + return sb.toString(); + } + + @Override + public List> queryDocumentSplitDetailByList(Map parameter) { +// // 查询全部字段列表 +// List fieldList = lawsCommonMapper.getFieldList(TableNameEnum.DOCUMENT_SPLIT.getTableName()); +// // 列表展示字段 +// List fieldListSelect = fieldList.stream().filter(v -> YesOrNoEnum.YES.getValue() +// .equals(String.valueOf(v.getIsShowList()))).collect(Collectors.toList()); +// // 搜索条件展示字段 +// List fieldListCondition = fieldList.stream().filter(v -> YesOrNoEnum.YES.getValue() +// .equals(String.valueOf(v.getIsQuery()))).collect(Collectors.toList()); +// +// // sql查询列字段拼接 +// String selectColumn = getSelectColumn(fieldListSelect); +// // sql where条件拼接 +// String selectCondition = getSelectCondition(parameter, fieldListCondition); +// // 排序 +// selectCondition = orderBy(parameter, selectCondition, fieldListSelect); +// // 查询数据 +// List> list = documentSplitMapper.queryDocumentSplitDetail(selectColumn, selectCondition); +// // 翻译 +// dicTranslate(list, fieldListSelect); +// return list; + return null; + } + + + private void specialTranslate(Map map) { +// // 零部件翻译 +// if (map.containsKey("applicable_components")){ +// String applicableComponents = (String) map.get("applicable_components"); +// List partNames = partNameService.queryEcho(applicableComponents); +// map.put("applicable_components_dictText", partNames.stream().map(PartName::getName).collect(Collectors.joining(","))); +// } +// // 属性标识翻译 +// if (map.containsKey("property_tag")){ +// String propertyTag = (String) map.get("property_tag"); +// List lawsLabelDatabases = lawsLabelDatabaseService.queryByCodes(propertyTag); +// map.put("property_tag_dictText", lawsLabelDatabases.stream().map(LawsLabelDatabase::getName).collect(Collectors.joining(","))); +// } + } + + private void setDicText(Map map, String dbFieldName, SysDict sysDict) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() + .eq(SysDictItem::getDictId, sysDict.getId()) + .in(SysDictItem::getItemValue, Arrays.asList(map.get(dbFieldName).toString().split(","))); + // 字典值查询 + List list = sysDictItemService.list(queryWrapper); + if(!list.isEmpty()){ + List itemTextList = list.stream().map(SysDictItem::getItemText).collect(Collectors.toList()); + map.put(dbFieldName + DocumentSplitCommon.DIC_TEXT, String.join(",", itemTextList)); + } + } + + @Override + public void add(SarFileSplitInfoEO sarFileSplitInfoEO) { + // 企标权限校验 + enterpriseCheck(sarFileSplitInfoEO); + // 唯一校验 + uniqueCheck(sarFileSplitInfoEO); + // 保存文本拆分数据 + saveDocumentSplitInfo(sarFileSplitInfoEO); + //拆分 + int count = fileSpiltService.fileCHN(sarFileSplitInfoEO, SplitFileTypeTypeEnum.GBT); + + if(count == -1){ + if(LanguageEnum.CN.getValue().equals(MessageUtils.getLanguage().getValue())) { + throw new JeroBootException("文档格式错误,请检查文档内容!"); + }else{ + throw new JeroBootException("The document format is wrong. Please check the document content!"); + } + } + } + + @Override + public void enterpriseCheck(SarFileSplitInfoEO sarFileSplitInfoEO) { + // 登陆人信息 + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + // 管理员有所有企标的权限 + List roleIdList = Arrays.asList(sysUser.getRoleIds().split(",")); + Collection intersection = CollectionUtils.intersection(adminRoleCodeList, roleIdList); + if (!intersection.isEmpty()){ + // 有权限 + return; + } + // 企标 +// LawsEnterpriseStandard lawsEnterpriseStandard = lawsEnterpriseStandardService.getOne( +// new LambdaQueryWrapper() +// .eq(LawsEnterpriseStandard::getStandardNumber, sarFileSplitInfoEO.getSerialNumber())); +// if (!Objects.isNull(lawsEnterpriseStandard)){ +// String id = lawsEnterpriseStandard.getId(); +// if (StringUtils.isBlank(sarFileSplitInfoEO.getStandardId())){ +// sarFileSplitInfoEO.setStandardId(id); +// } +// // 登陆人所在部门 +// List departIdModels = sysUserDepartService.queryDepartIdsOfUser(sysUser.getId()); +// List departIds = departIdModels.stream().map(DepartIdModel::getKey).collect(Collectors.toList()); +// List departNames = departIdModels.stream().map(DepartIdModel::getTitle).collect(Collectors.toList()); +// +// // 查询临时授权人员 +// Date date = new Date(); +// LambdaQueryWrapper authUserWrapper = new LambdaQueryWrapper<>(); +// authUserWrapper.eq(EnterpriseStandardAuthUser::getStandardId, id); +// authUserWrapper.eq(EnterpriseStandardAuthUser::getAuthUser, sysUser.getId()); +// authUserWrapper.ge(EnterpriseStandardAuthUser::getAuthExpireDate, date); +// List authUserList = enterpriseStandardAuthUserService.list(authUserWrapper); +// +// // 查询授权部门-和临时授权部门 +// LambdaQueryWrapper tempAuthDeptWrapper = new LambdaQueryWrapper<>(); +// tempAuthDeptWrapper.eq(EnterpriseStandardAuthDept::getStandardId, id); +// tempAuthDeptWrapper.in(CollUtil.isNotEmpty(departIds), EnterpriseStandardAuthDept::getAuthDept, departIds); +// tempAuthDeptWrapper.isNotNull(EnterpriseStandardAuthDept::getAuthExpireDate); +// tempAuthDeptWrapper.isNotNull(EnterpriseStandardAuthDept::getAuthDept); +// List tempAuthDeptList = enterpriseStandardAuthDeptService.list(tempAuthDeptWrapper); +// if (!tempAuthDeptList.isEmpty()){ +// // 有权限 +// return; +// } +// tempAuthDeptWrapper.ge(EnterpriseStandardAuthDept::getAuthExpireDate, date); +// List authDeptExpireDateList = enterpriseStandardAuthDeptService.list(tempAuthDeptWrapper); +// if (!authDeptExpireDateList.isEmpty()){ +// // 有权限 +// return; +// } +// +// // 查询授权部门 +// LambdaQueryWrapper authDeptWrapper = new LambdaQueryWrapper<>(); +// authDeptWrapper.eq(EnterpriseStandardAuthDept::getStandardId, id); +// authDeptWrapper.isNull(EnterpriseStandardAuthDept::getAuthExpireDate); +// List authDeptList = enterpriseStandardAuthDeptService.list(authDeptWrapper); +// +// // 企标级别授权的部门 +// List standardLevelList = lawsEnterpriseStandardLevelService.list(); +// LawsGrade one = lawsGradeService.getOne(new LambdaQueryWrapper().eq(LawsGrade::getLevel, 1), false); +// LawsGrade two = lawsGradeService.getOne(new LambdaQueryWrapper().eq(LawsGrade::getLevel, 2), false); +// List levelOneDeptIds = standardLevelList.stream().filter(l -> l.getGradeId().equals(one.getId())) +// .map(LawsEnterpriseStandardLevel::getDeptId).collect(Collectors.toList()); +// List levelTwoDeptIds = standardLevelList.stream().filter(l -> l.getGradeId().equals(two.getId())) +// .map(LawsEnterpriseStandardLevel::getDeptId).collect(Collectors.toList()); +// +// Set curAuthSet = authDeptList.stream() +// .filter(e -> e.getAuthDept() != null) +// .filter(e -> CharSequenceUtil.isNotEmpty(e.getAuthDept())) +// .filter(e -> e.getStandardId().equals(id)) +// .filter(e -> !e.getAuthDept().equals(lawsEnterpriseStandard.getMainDraftingUnit())) +// .collect(Collectors.toSet()); +// // 临时权限 +// if (authUserList.stream().map(EnterpriseStandardAuthUser::getStandardId).collect(Collectors.toList()).contains(id)) { +// // 有权限 +// return; +// } +// // 等级分类 +// String gradeClassification = lawsEnterpriseStandard.getGradeClassification(); +// // 创建人可以看 +// if (sysUser.getUsername().equals(lawsEnterpriseStandard.getCreateBy())) { +// // 有权限 +// return; +// } +// +// // 全公司可以看 +// if ("1".equals(gradeClassification)) { +// // 有权限 +// return; +// } +// // 授权部门 +// if (!curAuthSet.isEmpty()) { +// // 如果授权部门不等于0 +// if (curAuthSet.stream().map(EnterpriseStandardAuthDept::getAuthDept).anyMatch(departIds::contains)) { +// // 有权限 +// return; +// } +// } else { +// // 企标等级分类级别可查看部门 +// if ("2".equals(gradeClassification)) { +// if (levelOneDeptIds.stream().anyMatch(departIds::contains)) { +// // 有权限 +// return; +// } +// } +// if ("3".equals(gradeClassification)) { +// if (levelTwoDeptIds.stream().anyMatch(departIds::contains)) { +// // 有权限 +// return; +// } +// } +// if ("4".equals(gradeClassification)) { +// // 主起草部门有企标的查看权限 +// if (!departNames.isEmpty() && departNames.contains(lawsEnterpriseStandard.getMainDraftingUnit())) { +// // 有权限 +// return; +// } +// } +// } +// // 无权限 +// noAccess(); +// } + } + + private void noAccess() { + if(LanguageEnum.CN.equals(MessageUtils.getLanguage())) { + throw new JeroBootException("无权限!"); + }else{ + throw new JeroBootException("No access!"); + } + } + + @Override + public void editDocumentSplitDetail(Map parameter) { +// // 水平越权 +// isHorizontalOverstep((String) parameter.get(INFO_ID)); +// // 处理map参数null值转为“” +// mapValueNullToString(parameter); +// // 查询全部字段列表 +// List fieldList = lawsCommonMapper.getFieldList(TableNameEnum.DOCUMENT_SPLIT.getTableName()); +// // 编辑页展示的字段 +// fieldList = fieldList.stream().filter(v -> YesOrNoEnum.YES.getInteger() +// .equals(v.getIsShowFormCreate())).collect(Collectors.toList()); +// List finalFieldList = fieldList; +// StringBuilder updateSet = new StringBuilder(); +// // 条目信息 +// List valList = JSON.parseArray(JSON.toJSONString(parameter.get("itemValEOList")), SarFileSplitItemsValEO.class); +// parameter.remove("itemValEOList"); +// // 条文解读 +// List articlesList = JSON.parseArray(JSON.toJSONString(parameter.get(INTERPRETATION_ARTICLES_LIST)), SarFileSplitItemsValEO.class); +// parameter.remove(INTERPRETATION_ARTICLES_LIST); +// +// parameter.forEach((k, v) ->{ +// // 条文内容拼接 +// if (ITEM_CONTENT.equals(k)){ +// v = itemContentJoin(valList, (String) parameter.get(ID)); +// } +// // 条文解读 +// if (INTERPRETATION_ARTICLES.equals(k)){ +// v = articlesJoin(articlesList, (String) parameter.get(ID)); +// } +// // 修改字段 +// String updateValue = getUpdateValue(finalFieldList, k, (String) v); +// if (StringUtils.isNotBlank(updateValue)){ +// updateSet.append(updateValue).append(","); +// } +// }); +// // 更新人和更新时间 +// String updateByAndUpdateTime = new UniversalImpl().getUpdateByAndUpdateTime(); +// updateSet.insert(0, updateByAndUpdateTime + ","); +// updateSet.deleteCharAt(updateSet.length() - 1); +// // where条件 +// String updateCondition = "id = '" + parameter.get(ID) + "'"; +// documentSplitMapper.editDocumentSplitDetail(updateSet.toString(), updateCondition); +// +// //条文解读更新 +// // 删除旧数据 +// documentSplitMapper.deleteItemsValByItemId((String) parameter.get(ID), DocumentSplitCommon.INTERPRETATION); +// if (!Objects.isNull(articlesList) && !articlesList.isEmpty()){ +// // 添加新数据 +// documentSplitMapper.addBatchItemsVal(articlesList); +// } +// +// // 条目信息更新 +// // 删除旧数据 +// documentSplitMapper.deleteItemsValByItemId((String) parameter.get(ID), ""); +// if (!Objects.isNull(valList) && !valList.isEmpty()){ +// // 添加新数据 +// documentSplitMapper.addBatchItemsVal(valList); +// } + } + + private void mapValueNullToString(Map parameter) { + if (parameter!= null){ + parameter.forEach((k, v) ->{ + if (Objects.isNull(v)){ + parameter.put(k, ""); + } + }); + } + } + + private String articlesJoin(List articlesList, String itemId) { + StringBuilder valContent = new StringBuilder(); + int index = 0; + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + if (!Objects.isNull(articlesList) && !articlesList.isEmpty()){ + for (SarFileSplitItemsValEO sarFileSplitItemsValEO : articlesList) { + index ++; + valContent.append("

").append(sarFileSplitItemsValEO.getItemContent()).append("

"); + sarFileSplitItemsValEO.setId(UUIDUtils.randomUUID20()); + sarFileSplitItemsValEO.setItemId(itemId); + sarFileSplitItemsValEO.setType(DocumentSplitCommon.INTERPRETATION); + sarFileSplitItemsValEO.setDisplaySeq(index); + sarFileSplitItemsValEO.setValidFlag(0); + sarFileSplitItemsValEO.setCreationTime(new Date()); + sarFileSplitItemsValEO.setModifyTime(new Date()); + sarFileSplitItemsValEO.setCreationUser(sysUser.getId()); + sarFileSplitItemsValEO.setModifyUser(sysUser.getId()); + } + } + return valContent.toString(); + } + + private String itemContentJoin(List valList, String itemId) { + StringBuilder valContent = new StringBuilder(); + if (!Objects.isNull(valList) && !valList.isEmpty()){ + int index = 0; + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + for (SarFileSplitItemsValEO sarFileSplitItemsValEO : valList) { + // 条文内容拼接 + if (DocumentSplitCommon.TEXT.equals(sarFileSplitItemsValEO.getType())) { + valContent.append("

").append(sarFileSplitItemsValEO.getItemContent()).append("

"); + } else if (DocumentSplitCommon.IMG.equals(sarFileSplitItemsValEO.getType())) { + valContent.append(""); + } else if (DocumentSplitCommon.TABLE.equals(sarFileSplitItemsValEO.getType())) { + valContent.append(sarFileSplitItemsValEO.getItemContent()); + } + + // 条目信息 + index += 1; + sarFileSplitItemsValEO.setId(UUIDUtils.randomUUID20()); + sarFileSplitItemsValEO.setItemId(itemId); + sarFileSplitItemsValEO.setDisplaySeq(index); + sarFileSplitItemsValEO.setValidFlag(0); + sarFileSplitItemsValEO.setCreationTime(new Date()); + sarFileSplitItemsValEO.setModifyTime(new Date()); + sarFileSplitItemsValEO.setCreationUser(sysUser.getId()); + sarFileSplitItemsValEO.setModifyUser(sysUser.getId()); + } + } + return valContent.toString(); + } + + @NotNull + private static String getUpdateValue(List finalFieldList, String k, String v) { + // 匹配参数和字段 + Optional lawsTag = finalFieldList.stream().filter(o -> k.equals(o.getDbFieldName())).findFirst(); + AtomicReference sql = new AtomicReference<>(""); + lawsTag.ifPresent(l -> { + // 构建修改字段 + if (LawsFieldTypeEnum.DATE_MANY.getValue().equals(l.getFieldShowType())){ + // 多日期 + sql.set(new DateManyConditionImpl().buildUpdate(l.getDbFieldName(), v)); + }else { + sql.set(new UniversalImpl().buildUpdate(l.getDbFieldName(), v)); + } + }); + // 修改数据 + return sql.get(); + } + + @Override + public void editBatchDocumentSplitDetail(Map parameter) { +// // 水平越权 +// List lawsDocumentSplitList = documentSplitMapper.queryLawsDocumentSplitInIds(Arrays.asList(((String) parameter.get("ids")).split(","))); +// isHorizontalOverstep(lawsDocumentSplitList.get(0).getInfoId()); +// +// mapValueNullToString(parameter); +// // 查询全部字段列表 +// List fieldList = lawsCommonMapper.getFieldList(TableNameEnum.DOCUMENT_SPLIT.getTableName()); +// // 编辑页展示的字段 +// fieldList = fieldList.stream().filter(v -> YesOrNoEnum.YES.getInteger() +// .equals(v.getIsShowFormCreate())).collect(Collectors.toList()); +// List finalFieldList = fieldList; +// StringBuilder updateSet = new StringBuilder(); +// +// // 条文解读 +// List articlesList = JSON.parseArray(JSON.toJSONString(parameter.get(INTERPRETATION_ARTICLES_LIST)), SarFileSplitItemsValEO.class); +// parameter.remove(INTERPRETATION_ARTICLES_LIST); +// +// parameter.forEach((k, v) -> { +// // 条文解读 +// if (INTERPRETATION_ARTICLES.equals(k)){ +// v = articlesJoin(articlesList, (String) parameter.get(ID)); +// } +// // 修改字段 +// String updateValue = getUpdateValue(finalFieldList, k, (String) v); +// if (StringUtils.isNotBlank(updateValue)){ +// updateSet.append(updateValue).append(","); +// } +// }); +// // 更新人和更新时间 +// String updateByAndUpdateTime = new UniversalImpl().getUpdateByAndUpdateTime(); +// updateSet.insert(0, updateByAndUpdateTime + ","); +// updateSet.deleteCharAt(updateSet.length() - 1); +// // where条件 +// String updateCondition = ""; +// if (parameter.containsKey("ids")){ +// String ids = (String) parameter.get("ids"); +// List list = Arrays.asList(ids.split(",")); +// updateCondition = "id in ('" + String.join("','", list) + "')"; +// }else { +// String infoId = (String) parameter.get(INFO_ID); +// updateCondition = "info_id = " + "'" + infoId + "'"; +// } +// documentSplitMapper.editDocumentSplitDetail(updateSet.toString(), updateCondition); +// +// // 条文解读更新 +// // 删除旧数据 +// documentSplitMapper.deleteItemsValByItemIds((String) parameter.get("ids"), DocumentSplitCommon.INTERPRETATION); +// if (!Objects.isNull(articlesList) && !articlesList.isEmpty()){ +// // 添加新数据 +// documentSplitMapper.addBatchItemsVal(articlesList); +// } + } + + @Override + public void mergeDocumentSplitDetail(Map parameter) { +// // 查询全部字段列表 +// List fieldList = lawsCommonMapper.getFieldList(TableNameEnum.DOCUMENT_SPLIT.getTableName()); +// // 列表展示字段 +// List fieldListSelect = fieldList.stream().filter(v -> YesOrNoEnum.YES.getValue() +// .equals(String.valueOf(v.getIsShowList()))).collect(Collectors.toList()); +// // sql查询列字段拼接 +// String selectColumn = getSelectColumn(fieldListSelect); +// // 勾选数据ids +// String ids = (String) parameter.get(IDS); +// List idList = Arrays.asList(ids.split(",")); +// // sql where条件拼接 +// String selectCondition = "where del_flag = 0 and s.id in ('" + String.join("','", idList) + "')"; +// // 排序 +// StringBuilder strSelectCondition = new StringBuilder(selectCondition); +// // 查询数据 +// List> listMap = documentSplitMapper.queryDocumentSplitDetail(selectColumn, strSelectCondition.toString()); +// +// // 水平越权 +// List listMapIdList = listMap.stream().map(v -> v.get(ID).toString()).collect(Collectors.toList()); +// List lawsDocumentSplitList = documentSplitMapper.queryLawsDocumentSplitInIds(listMapIdList); +// isHorizontalOverstep(lawsDocumentSplitList.get(0).getInfoId()); +// +// // 排序(根据条文号) +// listMap.sort(new DirectoryComparator()); +// // 第一条数据 +// Map firstData = listMap.get(0); +// listMap.remove(0); +// // 合并数据(条文标题、条文内容) +// String title = firstData.get(ITEM_TITLE) + " " + mergeData(listMap, ITEM_TITLE); +// String content = firstData.get(ITEM_CONTENT) + mergeData(listMap, ITEM_CONTENT); +// String updateByAndUpdateTime = new UniversalImpl().getUpdateByAndUpdateTime(); +// String updateSet = updateByAndUpdateTime + +// "," + ITEM_TITLE + " = " + "' "+ title + "'" + +// "," + ITEM_CONTENT + " = " + "'" + content + "'"; +// String updateCondition = "id = " + "'" + firstData.get(ID) + "'"; +// // 修改数据 +// documentSplitMapper.editDocumentSplitDetail(updateSet, updateCondition); +// List otherIds = listMap.stream().map(v -> (String)v.get(ID)).collect(Collectors.toList()); +// // 删除旧数据 +// lawsDocumentSplitMapper.deleteBatchIds(otherIds); +// +// // 目录更新 +// List menuIdList = listMap.stream() +// .filter(v -> !Objects.equals(v.get(MENU_ID), firstData.get(MENU_ID))) +// .map(v -> (String) v.get(MENU_ID)) +// .distinct() +// .collect(Collectors.toList()); +// +// if (!menuIdList.isEmpty()){ +// // 判断被合并条款之前有没有复制过,复制过则不删除相关目录 +// List lawsDocumentSplits = documentSplitMapper.queryLawsDocumentSplitInIds(Collections.singletonList((String) firstData.get(ID))); +// List menuIds = documentSplitMapper.queryLawsDocumentSplitGroupByMenuId(lawsDocumentSplits.get(0).getInfoId()); +// if (CollectionUtils.isNotEmpty(menuIds)){ +// menuIdList = menuIdList.stream().filter(v -> !menuIds.contains(v)).collect(Collectors.toList()); +// } +// if (!menuIdList.isEmpty()){ +// // 删除旧数据 +// documentSplitMapper.sarFileSplitMenuDeleteByIdList(menuIdList); +// } +// } +// +// // 修改条目 +// ArrayList sarFileSplitItemsValEOSList = new ArrayList<>(); +// // 查询旧数据 +// for (Map map : listMap) { +// String id = (String) map.get(ID); +// sarFileSplitItemsValEOSList.addAll(documentSplitMapper.queryItemsValByItemId(id, "")); +// } +// List sarFileSplitItemsValEOS = documentSplitMapper.queryItemsValByItemId((String) firstData.get(ID), ""); +// // 第一条数据信息的最大的排序字段值 +// Optional sarFileSplitItemsValEOOptional = sarFileSplitItemsValEOS.stream().sorted(Comparator.comparing(v -> Integer.valueOf(String.valueOf(v.getDisplaySeq())))).findFirst(); +// sarFileSplitItemsValEOOptional.ifPresent(v ->{ +// // 排序字段 +// Integer displaySeq = v.getDisplaySeq(); +// LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); +// for (SarFileSplitItemsValEO fileSplitItemsValEO : sarFileSplitItemsValEOSList) { +// displaySeq += 1; +// fileSplitItemsValEO.setItemId(v.getItemId()); +// fileSplitItemsValEO.setDisplaySeq(displaySeq); +// fileSplitItemsValEO.setModifyTime(new Date()); +// fileSplitItemsValEO.setModifyUser(sysUser.getUsername()); +// // 修改数据 +// sarFileSplitItemsValEOMapper.updateByPrimaryKeySelective(fileSplitItemsValEO); +// } +// } ); + } + + @Override + public void deleteDocumentSplitDetail(Map parameter) { + String id = (String) parameter.get(ID); + // 水平越权 + Map map = documentSplitMapper.queryLawsDocumentSplitInId(id); + isHorizontalOverstep(map.get(INFO_ID).toString()); + // 删除文档拆分详情数据 + documentSplitMapper.deleteDocumentSplitDetail(id); + + /** + * // 获取原始据信息 + * Map documentSplitDetail = documentSplitMapper.queryDocumentSplitDetailById(id); + * String menuId = (String) documentSplitDetail.get(MENU_ID); + * // 删除对应目录 + * documentSplitMapper.sarFileSplitMenuDeleteByIdList(Collections.singletonList(menuId)); + */ + + //删除对应条目信息 + // 条款解读 + documentSplitMapper.deleteItemsValByItemId(id, DocumentSplitCommon.INTERPRETATION); + // 条文内容 + documentSplitMapper.deleteItemsValByItemId(id, ""); + } + + @Override + public void deleteBatchDocumentSplitDetail(Map parameter) { + if (parameter.containsKey(IDS)){ + String ids = (String) parameter.get(IDS); + String[] list = ids.split(","); + for (String id : list) { + Map map = new HashMap<>(); + map.put(ID, id); + deleteDocumentSplitDetail(map); + } + } + } + + @Override + public void copyDocumentSplitDetail(String id) { + LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + // 查询数据 + Map resultMap = documentSplitMapper.queryLawsDocumentSplitById(id); + // 水平越权 + isHorizontalOverstep(resultMap.get(INFO_ID).toString()); + // 字段名 + StringBuilder fieldsBuilder = new StringBuilder(); + // 字段值 + List valuesList = new ArrayList<>(); + Date date = new Date(); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + String format = dateFormat.format(date); + String newItemValId = UUID.randomUUID().toString().replace("-", ""); + resultMap.put(ID, newItemValId); + resultMap.put("create_by", loginUser.getUsername()); + resultMap.put(CREATE_TIME, format); + resultMap.put("update_by", loginUser.getUsername()); + resultMap.put("update_time", format); + // 字段名和值 + manageData(resultMap, fieldsBuilder, valuesList); + documentSplitMapper.insertLawsDocumentSplit(fieldsBuilder.toString(), valuesList); + } + + @Override + public void copyBatchDocumentSplitDetail(String ids) { + String[] idsArr = ids.split(","); + for (String id : idsArr) { + copyDocumentSplitDetail(id); + } + } + + @Override + public List queryItemsValList(String itemId) { + List sarFileSplitItemsValEOS = documentSplitMapper.queryItemsValByItemId(itemId, ""); + if (!Objects.isNull(sarFileSplitItemsValEOS) && !sarFileSplitItemsValEOS.isEmpty()){ + for (SarFileSplitItemsValEO sarFileSplitItemsValEO : sarFileSplitItemsValEOS) { + String imgPath = sarFileSplitItemsValEO.getItemContent(); + if (DocumentSplitCommon.IMG.equals(sarFileSplitItemsValEO.getType()) && org.apache.commons.lang.StringUtils.isNotEmpty(imgPath)) { + String imgName = imgPath.substring(imgPath.lastIndexOf("/") + 1); + sarFileSplitItemsValEO.setImgName(imgName); + } + } + } + return sarFileSplitItemsValEOS; + } + + @Override + public Map queryDocumentSplitDetailById(String id) { + Map map = documentSplitMapper.queryLawsDocumentSplitById(id); + // 零部件翻译 + specialTranslate(map); + return map; + } + + @Override + public void downloadImportTemplate(HttpServletRequest request, HttpServletResponse response) { + // 水平越权 + isHorizontalOverstep(request.getParameter("infoId")); + + try (Workbook workbook = new XSSFWorkbook()){ + String fileName = "拆分导入模版下载.xlsx"; + // sheet页 + XSSFSheet sheet = (XSSFSheet) workbook.createSheet("拆分导入模版"); + // 列宽 + sheet.setDefaultColumnWidth(16); + // 创建第一行 + Row headerRow = sheet.createRow(0); + // 创建表头信息 + String[] titleArr = {"条文号", "条文标题", "条文内容"}; + + //样式 + CellStyle cellStyle = workbook.createCellStyle(); + // 水平、垂直居中 + cellStyle.setAlignment(HorizontalAlignment.CENTER); + cellStyle.setVerticalAlignment(VerticalAlignment.CENTER); + // 文本格式 + cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("@")); + + for (int i = 0; i < titleArr.length; i++) { + // 创建列 + Cell cell = headerRow.createCell(i); + cell.setCellValue(titleArr[i]); + cell.setCellStyle(cellStyle); + } + + // 创建第二行 + Row headerRowTwo = sheet.createRow(1); + // 填充说明 + Cell cell = headerRowTwo.createCell(0); + String explain = "模版说明:\n" + + "1.条文号不能为空\n" + + "2.仅支持zip格式文件夹\n" + + "3.条文内容如果导入表格类型,表格的名称需要与sheet页名称保持一致"; + + CellStyle cellStyleTwo = workbook.createCellStyle(); + cellStyleTwo.setWrapText(true); + cell.setCellStyle(cellStyleTwo); + // 行高 + headerRowTwo.setHeight((short) 1500); + cell.setCellValue(new XSSFRichTextString(explain)); + // 合并单元格(参数说明:起始行,结束行,起始列,结束列) + CellRangeAddress region = new CellRangeAddress(1, 1, 0, 2); + sheet.addMergedRegion(region); + + // excel临时保存到本地并在同级创建文件夹 + String replacePath = exportExcelTempPath.replace("exportExcelTemp", "拆分导入模版下载"); + generateExcel(workbook, fileName, replacePath); + + // 生成zip文件返回文件流 + ZipUtil.toZip(replacePath, response.getOutputStream(), response, true); + + //删除指定文件夹 + FileUtils.deleteFolders(replacePath); + }catch (Exception e){ + throw new JeroBootException("下载文件失败!"); + } + } + + /** + * private static void returnOutPutStream(HttpServletResponse response, String fileName, String zipPath) throws IOException { + * ServletOutputStream outputStream = null; + * try (InputStream in = Files.newInputStream(Paths.get(zipPath));){ + * response.reset(); + * response.setContentType("application/ostet-stream"); + * response.setHeader("content-type", "application/octet-stream"); + * response.setContentType("application/octet-stream"); + * response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + new String((fileName + ".zip").getBytes("GB2312"), StandardCharsets.ISO_8859_1)); + * response.setCharacterEncoding("UTF-8"); + * outputStream = response.getOutputStream(); + * //创建存放文件内容的数组 + * byte[] buff = new byte[1024]; + * //所读取的内容使用n来接收 + * int n; + * //当没有读取完时,继续读取,循环 + * while ((n = in.read(buff)) != -1) { + * //将字节数组的数据全部写入到输出流中 + * outputStream.write(buff, 0, n); + * } + * //强制将缓存区的数据进行输出 + * outputStream.println(); + * } + * outputStream.close(); + * } + * + */ + + private void generateExcel(Workbook workbook, String fileName, String replacePath) throws IOException { + File saveFile = new File(replacePath); + // 导出路径 没有则创建 + if (!saveFile.exists()) { + saveFile.mkdirs(); + } + // 生成excel文件路径 + String excelPath = replacePath + File.separator + fileName; + // 写出excel文件 + try (FileOutputStream fos = new FileOutputStream(excelPath)){ + workbook.write(fos); + }catch (Exception e){ + throw new JeroBootException(e.getMessage()); + } + } + + @Override + public List queryInterpretationArticlesList(String itemId) { + return documentSplitMapper.queryItemsValByItemId(itemId, DocumentSplitCommon.INTERPRETATION); + } + + @Override + public LawsDocumentSplitView queryView(Map parameter) { + LawsDocumentSplitView lawsDocumentSplitView = new LawsDocumentSplitView(); + String id = (String) parameter.get(ID); + // 水平越权 + isHorizontalOverstep(id); + // 文档拆分信息 + DocumentSplitInfo documentSplitInfo = new DocumentSplitInfo(); + documentSplitInfo.setId(id); + if (parameter.containsKey("publishBeforeId")){ + documentSplitInfo.setPublishBeforeId((String) parameter.get("publishBeforeId")); + } + List documentSplitInfos = queryByList(documentSplitInfo); + lawsDocumentSplitView.setDocumentSplitInfo(documentSplitInfos.get(0)); + + // 目录 + SarFileSplitMenuEOPage splitMenuEOPage = new SarFileSplitMenuEOPage(); + splitMenuEOPage.setValidFlag("0"); + splitMenuEOPage.setOrderBy("display_seq"); + splitMenuEOPage.setInfoId(id); + List sarFileSplitMenuEOS = sarFileSplitMenuEOService.queryByList(splitMenuEOPage); + // 不需要总目录层级 + lawsDocumentSplitView.setSarFileSplitMenuEO(sarFileSplitMenuEOS.get(0).getChildren()); + + // 文档拆分详情 + parameter.remove(ID); + parameter.put(INFO_ID, id); + List> documentSplitDetailByList = queryDocumentSplitDetailByList(parameter); + lawsDocumentSplitView.setDocumentSplitDetail(documentSplitDetailByList); + return lawsDocumentSplitView; + } + + @Override + public void publish(Map parameter) { + String id = (String) parameter.get(ID); + // 水平越权 + isHorizontalOverstep(id); + // 文档拆分信息(旧) + DocumentSplitInfo oldInfo = documentSplitMapper.queryDocumentSplitInfoById(id); + // 判断是否发布过 + SarFileSplitInfoEO sarFileSplitInfoEO = sarFileSplitInfoService.getOne( + new QueryWrapper().lambda() + .eq(SarFileSplitInfoEO::getPublishBeforeId, id)); + if (!Objects.isNull(sarFileSplitInfoEO)){ + // 删除旧发布数据 + sarFileSplitInfoService.deleteById(sarFileSplitInfoEO.getId()); + } + + // 修改发布状态 + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(SarFileSplitInfoEO::getId, oldInfo.getId()); + updateWrapper.set(SarFileSplitInfoEO::getSplitStatus, DocumentSplitCommon.SPLIT_STATUS2); + sarFileSplitInfoService.update(updateWrapper); + // 文档拆分信息(新) + DocumentSplitInfo newInfo = new DocumentSplitInfo(); + BeanUtils.copyProperties(oldInfo, newInfo); + String uuId = UUID.randomUUID().toString().replace("-", ""); + newInfo.setId(uuId); + newInfo.setSplitStatus(DocumentSplitCommon.SPLIT_STATUS2); + newInfo.setPublishBeforeId(oldInfo.getId()); + // 新增数据 + documentSplitMapper.insertDocumentSplitInfo(newInfo); + + // 目录(旧) + List oldMenuList = documentSplitMapper.querySarFileSplitMenuByInfoId(id); + List oldMenuIdList = new ArrayList<>(); + List newMenuIdList = new ArrayList<>(); + for (SarFileSplitMenu sarFileSplitMenu : oldMenuList) { + oldMenuIdList.add(sarFileSplitMenu.getId()); + String newId = UUID.randomUUID().toString().replace("-", ""); + newMenuIdList.add(newId); + + // 父子级关系处理 + oldMenuList.stream() + .filter(v -> Objects.equals(sarFileSplitMenu.getId(), v.getParentId())) + .map(v -> { + v.setParentId(newId); + return v; + }) + .forEach(v -> log.info(v.getParentId())); + + sarFileSplitMenu.setId(newId); + sarFileSplitMenu.setInfoId(newInfo.getId()); + } + // 新增数据 + documentSplitMapper.insertBatchSarFileSplitMenuByInfoId(oldMenuList); + + // 文档拆分详情(旧) + List> oldLawsDocumentSplitList = documentSplitMapper.queryLawsDocumentSplitByInfoId(id); + /** + * List oldLawsDocumentSplitIdList = new ArrayList<>(); + * List newLawsDocumentSplitIdList = new ArrayList<>(); + */ + for (Map map : oldLawsDocumentSplitList) { + String oldId = (String) map.get(ID); + /** + * oldLawsDocumentSplitIdList.add(oldId); + */ + String newId = UUID.randomUUID().toString().replace("-", ""); + map.put(ID, newId); + /** + * newLawsDocumentSplitIdList.add(newId); + */ + map.put(INFO_ID, newInfo.getId()); + + // 旧目录id替换 + Optional optionalS = oldMenuIdList.stream().filter(v -> v.equals(map.get(MENU_ID))).findFirst(); + optionalS.ifPresent(v -> { + int index = oldMenuIdList.indexOf(v); + map.put(MENU_ID, newMenuIdList.get(index)); + }); + + List keyList = new ArrayList<>(map.keySet()); + List valueList = map.values().stream().map(o -> (String.valueOf(o))).collect(Collectors.toList()); + // 新增数据 + String insertField = String.join(",", keyList); + documentSplitMapper.insertLawsDocumentSplit(insertField, valueList); + + // 条目信息(旧) + List sarFileSplitItemsVal = documentSplitMapper.querySarFileSplitItemsValByItemId(oldId); + for (SarFileSplitItemsVal fileSplitItemsVal : sarFileSplitItemsVal) { + fileSplitItemsVal.setId(UUID.randomUUID().toString().replace("-", "")); + fileSplitItemsVal.setItemId(newId); + } + // 新增数据 + if (!sarFileSplitItemsVal.isEmpty()){ + documentSplitMapper.insertSarFileSplitItemsVal(sarFileSplitItemsVal); + } + } + } + + @Override + public void revocation(Map parameter) { + String id = (String) parameter.get(ID); + // 水平越权 + isHorizontalOverstep(id); + // 文档拆分信息 + DocumentSplitInfo oldInfo = documentSplitMapper.queryDocumentSplitInfoById(id); + // 修改发布状态 + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); + updateWrapper.eq(SarFileSplitInfoEO::getId, oldInfo.getId()); + updateWrapper.set(SarFileSplitInfoEO::getSplitStatus, DocumentSplitCommon.SPLIT_STATUS1); + sarFileSplitInfoService.update(updateWrapper); + } + + @Override + public void exportDocumentSplitDetail(Map parameter, HttpServletRequest request, HttpServletResponse response) { + try (Workbook workbook = new XSSFWorkbook()){ + // 文档拆分详情数据 + List> mapList = queryDocumentSplitDetailByList(parameter); + // 创建工作簿 + + // 创建sheet页 + Sheet sheet = workbook.createSheet("条文内容"); + // 字段名 + List keyList = new ArrayList<>(); + if(!Objects.isNull(mapList) && !mapList.isEmpty()){ + Map map = mapList.get(0); + keyList = map.entrySet().stream().map(Map.Entry::getKey).collect(Collectors.toList()); + } + + // 样式1 + CellStyle cellStyleOne = workbook.createCellStyle(); + cellStyleOne.setWrapText(true); + cellStyleOne.setVerticalAlignment(VerticalAlignment.CENTER); + // 样式2 + CellStyle cellStyleTwo = workbook.createCellStyle(); + cellStyleTwo.setWrapText(true); + cellStyleTwo.setAlignment(HorizontalAlignment.CENTER); + // 样式3 + CellStyle cellStyleThree = workbook.createCellStyle(); + Font font = workbook.createFont(); + font.setColor(IndexedColors.LIGHT_BLUE.getIndex()); + cellStyleThree.setWrapText(true); + cellStyleThree.setVerticalAlignment(VerticalAlignment.CENTER); + + // 设置表头 + Row row = sheet.createRow(0); + for (int i = 0; i < keyList.size(); i++) { + // 创建列,应用样式 + Cell cell = row.createCell(i); + cell.setCellValue(new XSSFRichTextString(keyList.get(i))); + cell.setCellStyle(cellStyleOne); + + if("条文内容".equals(keyList.get(i))) { + sheet.setColumnWidth(i, 80 * 256); + } else { + sheet.setColumnWidth(i, 20 * 256); + } + } + }catch (Exception e){ + throw new JeroBootException("导出失败!"); + } + } + + @Override + public IPage querySplitFileInfoByPage(SplitFileInfo splitFileInfo, Integer pageNo, Integer pageSize) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(StringUtils.isNotBlank(splitFileInfo.getOrigin()), "origin", splitFileInfo.getOrigin()); + queryWrapper.like(StringUtils.isNotBlank(splitFileInfo.getStandardNumber()), "standard_number", splitFileInfo.getStandardNumber()); + queryWrapper.like(StringUtils.isNotBlank(splitFileInfo.getStandardName()), "standard_name", splitFileInfo.getStandardName()); + queryWrapper.like(StringUtils.isNotBlank(splitFileInfo.getStandardFileType()), "standard_file_type", splitFileInfo.getStandardFileType()); + queryWrapper.likeLeft("file_name", ".docx"); + queryWrapper.isNotNull("o.standard_id"); + queryWrapper.orderByDesc(CREATE_TIME); + return documentSplitMapper.querySplitFileInfoByPage(queryWrapper, new Page<>(pageNo, pageSize)); + } + + @Override + public List queryTreeMenuByInfoId(String infoId) { + // 水平越权 + isHorizontalOverstep(String.join(",", infoId)); + // 目录 + SarFileSplitMenuEOPage splitMenuEOPage = new SarFileSplitMenuEOPage(); + splitMenuEOPage.setValidFlag("0"); + splitMenuEOPage.setOrderBy("display_seq"); + splitMenuEOPage.setInfoId(infoId); + List sarFileSplitMenuEOS = sarFileSplitMenuEOService.queryByList(splitMenuEOPage); + + if (!sarFileSplitMenuEOS.isEmpty() && !Objects.isNull(sarFileSplitMenuEOS.get(0).getChildren())){ + return sarFileSplitMenuEOS.get(0).getChildren(); + } + return new ArrayList<>(); + } + + @Override + public void isHorizontalOverstep(String ids) { + LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + // 未发布的只有自己可见,发布的数据所有人可见 + String roleIds = loginUser.getRoleIds(); + QueryWrapper queryWrapper = new QueryWrapper<>(); + List idList = Arrays.asList(ids.split(",")); + queryWrapper.in("id", idList); + queryWrapper.isNull("publish_before_id"); + queryWrapper.and(qw -> + qw.and(qwi -> qwi.eq(SPLIT_STATUS, DocumentSplitCommon.SPLIT_STATUS1) + .eq("author", loginUser.getId())) + .or().eq(SPLIT_STATUS, DocumentSplitCommon.SPLIT_STATUS2) + .or().eq(roleIds.contains("admin"), "author", "云平台")); + int count = sarFileSplitInfoService.count(queryWrapper); + if (count <= 0 || count!= idList.size()) { + if(LanguageEnum.CN.equals(MessageUtils.getLanguage())) { + throw new JeroBootException("无权限!"); + }else{ + throw new JeroBootException("No access!"); + } + } + } + + private void manageData(Map resultMap, StringBuilder fieldsBuilder, List valuesList) { + // 所有key(字段名) + resultMap.forEach((k, v) -> { + fieldsBuilder.append(k).append(","); + valuesList.add(v.toString()); + }); + fieldsBuilder.deleteCharAt(fieldsBuilder.length() - 1); + } + + + private String mergeData(List> listMap, String key) { + StringBuilder stringBuilder = new StringBuilder(); + for (Map map : listMap) { + String content = (String) map.get(key); + stringBuilder.append(content); + } + return stringBuilder.toString(); + } + + @Override + public void saveDocumentSplitInfo(SarFileSplitInfoEO sarFileSplitInfoEO) { + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + Date now = new Date(); + String infoId = UUID.randomUUID().toString().replace("-", ""); + sarFileSplitInfoEO.setId(infoId); + sarFileSplitInfoEO.setSplitResult("成功"); + sarFileSplitInfoEO.setSplitStatus(SplitEnum.SPLIT_STATUS1.getValue()); + sarFileSplitInfoEO.setAuthor(sysUser.getId()); + sarFileSplitInfoEO.setCreateTime(now); + sarFileSplitInfoEO.setUpdateTime(now); + sarFileSplitInfoService.save(sarFileSplitInfoEO); + } + + @Override + public void uniqueCheck(SarFileSplitInfoEO sarFileSplitInfoEO) { + // 文件状态 + 标准号唯一,每个文件状态的标准只能拆分一次 + DocumentSplitInfo documentSplitInfo = new DocumentSplitInfo(); + documentSplitInfo.setSerialNumber(sarFileSplitInfoEO.getSerialNumber()); + documentSplitInfo.setFileType(sarFileSplitInfoEO.getFileType()); + List list = queryByList(documentSplitInfo); + if(!list.isEmpty()){ + if(LanguageEnum.CN.equals(MessageUtils.getLanguage())) { + throw new JeroBootException("每个文件类型只能拆分一次!"); + }else{ + throw new JeroBootException("Each file type can only be split once!"); + } + } + } + + private String getSelectColumn(List fieldListSelect) { + StringBuilder selectColumn = new StringBuilder(); + selectColumn.append("s.id"); + selectColumn.append(",").append(MENU_ID); + for (LawsTag lawsTag : fieldListSelect) { + selectColumn.append(","); + selectColumn.append(DocumentSplitCommon.IF_NULL_BEGIN); + // 日期字段需要格式化 + if (LawsFieldTypeEnum.DATE_SINGLE.getValue().equals(lawsTag.getDbFieldName())){ + selectColumn.append(DocumentSplitCommon.DATE_FORMAT_BEGIN) + .append(lawsTag.getDbFieldName()) + .append(DocumentSplitCommon.DATE_FORMAT_END); + }else { + // 普通字段直接拼接 + selectColumn.append(lawsTag.getDbFieldName()); + } + selectColumn.append(DocumentSplitCommon.IF_NULL_END); + // 别名 + selectColumn.append(" as ").append(lawsTag.getDbFieldName()); + } + return selectColumn.toString(); + } + + private String getSelectCondition(Map parameter, List fieldListCondition) { + // 拼接查询条件 + StringBuilder selectCondition = new StringBuilder("where del_flag = 0"); + // 非动态查询条件 + defaultCondition(parameter, selectCondition); + // 动态查询字段 + dynamicStateCondition(parameter, fieldListCondition, selectCondition); + return selectCondition.toString(); + } + + private void dynamicStateCondition(Map parameter, List fieldListCondition, StringBuilder selectCondition) { + parameter.forEach((k, v) -> { + // 匹配参数和字段 + Optional lawsTag = fieldListCondition.stream().filter(o -> k.equals(o.getDbFieldName())).findFirst(); + lawsTag.ifPresent(l -> { + // 构建查询条件 (工厂 + 策略 设计模式) + String sqlCondition = ConditionMapFactory.getInvokeStrategy(l.getFieldShowType()).buildCondition(l.getDbFieldName(), (String) v); + selectCondition.append(sqlCondition); + }); + }); + } + + private void defaultCondition(Map parameter, StringBuilder selectCondition) { + if (parameter.containsKey(ID)){ + selectCondition.append(" and s.id = '").append(parameter.get(ID)).append("'"); + parameter.remove(ID); + } + if (parameter.containsKey(INFO_ID)){ + selectCondition.append(" and s.info_id = '").append(parameter.get(INFO_ID)).append("'"); + parameter.remove(INFO_ID); + } + if (parameter.containsKey(ITEM_NUM)){ + selectCondition.append(" and item_num = '").append(parameter.get(ITEM_NUM)).append("'"); + parameter.remove(ITEM_NUM); + } + if (parameter.containsKey(ITEM_TITLE)){ + // 模糊匹配 + selectCondition.append(likeCondition(ITEM_TITLE, (String) parameter.get(ITEM_TITLE))); + parameter.remove(ITEM_TITLE); + } + if (parameter.containsKey(ITEM_CONTENT)){ + // 模糊匹配 + selectCondition.append(likeCondition(ITEM_CONTENT, (String) parameter.get(ITEM_CONTENT))); + parameter.remove(ITEM_CONTENT); + } + // 树节点搜索 + if (parameter.containsKey(MENU_ID)){ + // 查询此节点下的所有子节点 + SarFileSplitMenuEO sarFileSplitMenuEO = new SarFileSplitMenuEO(); + sarFileSplitMenuEO.setId( (String) parameter.get(MENU_ID)); + List sarFileSplitMenuEOS = sarFileSplitMenuEOService.queryAllChildrenById(sarFileSplitMenuEO); + if (!sarFileSplitMenuEOS.isEmpty()){ + String menuIds= sarFileSplitMenuEOS.stream() + .map(SarFileSplitMenuEO::getId) + .collect(Collectors.joining("','")); + // in查询 + selectCondition.append(" and s.menu_id" + " in('").append(menuIds).append("')"); + parameter.remove(MENU_ID); + } + } + } + + /** + * 模糊查询 + * @param fieldName + * @param value + * @return 返回数据样例 and fieldName like '%value%' + */ + private String likeCondition(String fieldName, String value) { + return DocumentSplitCommon.AND + fieldName + DocumentSplitCommon.LIKE + + DocumentSplitCommon.CONCAT_LIKE_BEGIN + value + DocumentSplitCommon.CONCAT_LIKE_END; + } + + @NotNull + private static QueryWrapper getSarFileSplitInfoEOQueryWrapper(DocumentSplitInfo documentSplitInfo) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq(StringUtils.isNotBlank(documentSplitInfo.getId()), "id", documentSplitInfo.getId()); + // 标准编号/标准名称 + if (StringUtils.isNotBlank(documentSplitInfo.getSerialNumberOrName())){ + queryWrapper.and(qw -> qw + .like("serial_number", documentSplitInfo.getSerialNumberOrName()) + .or() + .like("title", documentSplitInfo.getSerialNumberOrName())); + } + // 标准编号 + queryWrapper.like(StringUtils.isNotBlank(documentSplitInfo.getSerialNumber()), "serial_number", documentSplitInfo.getSerialNumber()); + // 标准名称 + queryWrapper.like(StringUtils.isNotBlank(documentSplitInfo.getTitle()), "title", documentSplitInfo.getTitle()); + // 文本状态 + queryWrapper.eq(StringUtils.isNotBlank(documentSplitInfo.getFileType()), "file_type", documentSplitInfo.getFileType()); + // 拆分状态 + queryWrapper.eq(StringUtils.isNotBlank(documentSplitInfo.getSplitStatus()), SPLIT_STATUS, documentSplitInfo.getSplitStatus()); + // 编辑人 + queryWrapper.like(StringUtils.isNotBlank(documentSplitInfo.getAuthor()), "realname", documentSplitInfo.getAuthor()); + // 发布前id + if (StringUtils.isNotBlank(documentSplitInfo.getPublishBeforeId())){ + queryWrapper.eq("publish_before_id", documentSplitInfo.getPublishBeforeId()); + }else { + queryWrapper.isNull("publish_before_id"); + } +// LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); +// // 未发布的只有自己可见,发布的数据所有人可见 +// String roleIds = loginUser.getRoleIds(); +// queryWrapper.and(qw -> +// qw.and(qwi -> qwi.eq(SPLIT_STATUS, DocumentSplitCommon.SPLIT_STATUS1) +// .eq("author", loginUser.calcNameWorkNo())) +// .or().eq(SPLIT_STATUS, DocumentSplitCommon.SPLIT_STATUS2) +// .or().eq(roleIds.contains("admin"), "author", "云平台")); + // 逻辑删除 + queryWrapper.eq("del_flag", 0); + // 排序 + queryWrapper.orderByDesc(CREATE_TIME); + return queryWrapper; + } +}