From 85155d5a6409e1a20bf9c86a44046ff8678b4936 Mon Sep 17 00:00:00 2001 From: yjz <3131811435@qq.com> Date: Fri, 13 Oct 2023 17:46:08 +0800 Subject: [PATCH] =?UTF-8?q?refactor(=E6=96=87=E6=A1=A3=E6=8B=86=E5=88=86):?= =?UTF-8?q?=20=E6=96=87=E6=A1=A3=E6=8B=86=E5=88=86=E8=AF=A6=E6=83=85?= =?UTF-8?q?=E9=A1=B5=E5=88=97=E8=A1=A8=E6=9F=A5=E8=AF=A2=E3=80=81=E5=B7=A5?= =?UTF-8?q?=E5=8E=82+=E7=AD=96=E7=95=A5,=E9=87=8D=E6=9E=84=E5=8A=A8?= =?UTF-8?q?=E6=80=81=E5=88=97=E3=80=81=E5=8A=A8=E6=80=81=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/DocumentSplitCommon.java | 51 +++++ .../controller/DocumentSplitController.java | 27 ++- .../factory/ConditionMapFactory.java | 44 ++++ .../handler/AbstractConditionBase.java | 21 ++ .../handler/impl/DateManyConditionImpl.java | 58 +++++ .../handler/impl/DateSingleConditionImpl.java | 47 ++++ .../handler/impl/InConditionImpl.java | 44 ++++ .../handler/impl/LikeConditionImpl.java | 36 +++ .../mapper/DocumentSplitMapper.java | 9 + .../mapper/xml/DocumentSplitMapper.xml | 8 + .../service/IDocumentSplitService.java | 17 +- .../impl/DocumentSplitServiceImpl.java | 205 +++++++++++++++++- 12 files changed, 560 insertions(+), 7 deletions(-) create mode 100644 laws-modules/src/main/java/com/jero/modules/laws/documenttool/common/DocumentSplitCommon.java create mode 100644 laws-modules/src/main/java/com/jero/modules/laws/documenttool/factory/ConditionMapFactory.java create mode 100644 laws-modules/src/main/java/com/jero/modules/laws/documenttool/handler/AbstractConditionBase.java create mode 100644 laws-modules/src/main/java/com/jero/modules/laws/documenttool/handler/impl/DateManyConditionImpl.java create mode 100644 laws-modules/src/main/java/com/jero/modules/laws/documenttool/handler/impl/DateSingleConditionImpl.java create mode 100644 laws-modules/src/main/java/com/jero/modules/laws/documenttool/handler/impl/InConditionImpl.java create mode 100644 laws-modules/src/main/java/com/jero/modules/laws/documenttool/handler/impl/LikeConditionImpl.java diff --git a/laws-modules/src/main/java/com/jero/modules/laws/documenttool/common/DocumentSplitCommon.java b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/common/DocumentSplitCommon.java new file mode 100644 index 00000000..d06c8707 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/common/DocumentSplitCommon.java @@ -0,0 +1,51 @@ +package com.jero.modules.laws.documenttool.common; + +/** + * @Author: 31318 + * @Date: 2023/10/13/11:46 + * @Description: + */ +public class DocumentSplitCommon { + private DocumentSplitCommon(){ + } + /** + * 日期格式化 + */ + public static final String DATE_FORMAT_BEGIN = " date_format( "; + /** + * 日期格式化 + */ + public static final String DATE_FORMAT_END = " , '%Y-%m-%d') "; + /** + * 模糊匹配 + */ + public static final String CONCAT_LIKE_BEGIN = " concat('%', ' "; + /** + * 模糊匹配 + */ + public static final String CONCAT_LIKE_END = " ', '%') "; + /** + * 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 = " <= "; +} diff --git a/laws-modules/src/main/java/com/jero/modules/laws/documenttool/controller/DocumentSplitController.java b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/controller/DocumentSplitController.java index e91bfab9..dd24a8eb 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/documenttool/controller/DocumentSplitController.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/controller/DocumentSplitController.java @@ -5,6 +5,7 @@ import com.jero.common.api.vo.Result; import com.jero.common.aspect.annotation.AutoLog; import com.jero.modules.laws.documenttool.entity.DocumentSplitInfo; import com.jero.modules.laws.documenttool.service.IDocumentSplitService; +import com.jero.modules.split.entity.SarFileSplitInfoEO; import com.jero.modules.split.service.ISarFileSplitInfoService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -15,6 +16,7 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.Arrays; +import java.util.Map; /** * @Author: yjz @@ -63,12 +65,27 @@ public class DocumentSplitController { documentSplitService.updatePermissions(documentSplitInfo); return Result.OK("操作成功!"); } + + /** + * 拆分 + * + * @param sarFileSplitInfoEO + * @return Result + */ + @AutoLog(value = "文档拆分-拆分") + @ApiOperation(value="文档拆分-拆分", notes="文档拆分-拆分") + @PostMapping(value = "/split") + public Result split(@Validated @RequestBody SarFileSplitInfoEO sarFileSplitInfoEO) { + documentSplitService.add(sarFileSplitInfoEO); + return Result.OK("操作成功!"); + } + /** * 通过id删除 * * @return Result */ - @AutoLog(value = "文档拆分-通过id删除Y") + @AutoLog(value = "文档拆分-通过id删除") @ApiOperation(value="文档拆分-通过id删除", notes="文档拆分-通过id删除") @PostMapping(value = "/delete") public Result delete(@RequestParam(name="id",required=true) String id) { @@ -81,7 +98,7 @@ public class DocumentSplitController { * * @return Result */ - @AutoLog(value = "文档拆分-批量删除Y") + @AutoLog(value = "文档拆分-批量删除") @ApiOperation(value="文档拆分-批量删除", notes="文档拆分-批量删除") @PostMapping(value = "/deleteBatch") public Result deleteBatch(@RequestParam(name="ids",required=true) String ids) { @@ -89,4 +106,10 @@ public class DocumentSplitController { return Result.OK("批量删除成功!"); } + @AutoLog(value = "文档拆分详情-分页列表查询") + @ApiOperation(value = "文档拆分详情-分页列表查询") + @PostMapping("/queryDocumentSplitDetail") + public Result>> queryDocumentSplitDetail(@RequestBody Map parameter) { + return Result.OK(documentSplitService.queryDocumentSplitDetail(parameter)); + } } diff --git a/laws-modules/src/main/java/com/jero/modules/laws/documenttool/factory/ConditionMapFactory.java b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/factory/ConditionMapFactory.java new file mode 100644 index 00000000..8c8be9cd --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/factory/ConditionMapFactory.java @@ -0,0 +1,44 @@ +package com.jero.modules.laws.documenttool.factory; + +import com.jero.modules.laws.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/laws-modules/src/main/java/com/jero/modules/laws/documenttool/handler/AbstractConditionBase.java b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/handler/AbstractConditionBase.java new file mode 100644 index 00000000..b2d155af --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/handler/AbstractConditionBase.java @@ -0,0 +1,21 @@ +package com.jero.modules.laws.documenttool.handler; + +import lombok.extern.slf4j.Slf4j; + +/** + * @Author: yjz + * @Date: 2023/10/13/17:01 + * @Description: 抽象类 + */ +@Slf4j +public class AbstractConditionBase { + + /** + * 构建查询条件 + * @return 拼接完成的sql + */ + public String buildCondition(String fieldName, String value){ + log.info("字段名:{}, 参数值{}", fieldName, value); + return ""; + } +} diff --git a/laws-modules/src/main/java/com/jero/modules/laws/documenttool/handler/impl/DateManyConditionImpl.java b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/handler/impl/DateManyConditionImpl.java new file mode 100644 index 00000000..5f1f1ed6 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/handler/impl/DateManyConditionImpl.java @@ -0,0 +1,58 @@ +package com.jero.modules.laws.documenttool.handler.impl; + +import com.jero.modules.laws.documenttool.common.DocumentSplitCommon; +import com.jero.modules.laws.documenttool.factory.ConditionMapFactory; +import com.jero.modules.laws.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 { + + @Override + public String buildCondition(String fieldName, String value){ + // 多日期查询 + String substringBegin = "SUBSTRING_INDEX("; + String substringEnd = ", ',', 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 + substringEnd + DocumentSplitCommon.DATE_FORMAT_END + DocumentSplitCommon.GT + startDate + + DocumentSplitCommon.AND + + DocumentSplitCommon.DATE_FORMAT_BEGIN + substringBegin + fieldName + substringEnd + DocumentSplitCommon.DATE_FORMAT_END + DocumentSplitCommon.LT + endDate + ")" + + DocumentSplitCommon.OR + "(" + + DocumentSplitCommon.DATE_FORMAT_BEGIN + substringBegin + fieldName + substringEnd + DocumentSplitCommon.DATE_FORMAT_END + DocumentSplitCommon.GT + startDate + + DocumentSplitCommon.AND + + DocumentSplitCommon.DATE_FORMAT_BEGIN + substringBegin + fieldName + substringEnd + DocumentSplitCommon.DATE_FORMAT_END + DocumentSplitCommon.LT + endDate + ")" + + DocumentSplitCommon.OR + "(" + + DocumentSplitCommon.DATE_FORMAT_BEGIN + substringBegin + fieldName + ", ',', -1)" + DocumentSplitCommon.DATE_FORMAT_END + DocumentSplitCommon.GT + startDate + + DocumentSplitCommon.AND + + DocumentSplitCommon.DATE_FORMAT_BEGIN + substringBegin + fieldName + ", ',', -1)" + DocumentSplitCommon.DATE_FORMAT_END + DocumentSplitCommon.LT + endDate + "))"; + + } else { + dateMany += fieldName + DocumentSplitCommon.LIKE + DocumentSplitCommon.CONCAT_LIKE_BEGIN + value + DocumentSplitCommon.CONCAT_LIKE_END; + } + return dateMany; + } + + /** + * 初始化注册到工厂 + */ + @PostConstruct + private void register(){ + ConditionMapFactory.register(LawsFieldTypeEnum.DATE_MANY.getValue(), this); + } +} diff --git a/laws-modules/src/main/java/com/jero/modules/laws/documenttool/handler/impl/DateSingleConditionImpl.java b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/handler/impl/DateSingleConditionImpl.java new file mode 100644 index 00000000..87d52404 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/handler/impl/DateSingleConditionImpl.java @@ -0,0 +1,47 @@ +package com.jero.modules.laws.documenttool.handler.impl; + +import com.jero.modules.laws.documenttool.common.DocumentSplitCommon; +import com.jero.modules.laws.documenttool.factory.ConditionMapFactory; +import com.jero.modules.laws.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; + } + + /** + * 初始化注册到工厂 + */ + @PostConstruct + private void register(){ + ConditionMapFactory.register(LawsFieldTypeEnum.DATE_SINGLE.getValue(), this); + } +} diff --git a/laws-modules/src/main/java/com/jero/modules/laws/documenttool/handler/impl/InConditionImpl.java b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/handler/impl/InConditionImpl.java new file mode 100644 index 00000000..b9d659c5 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/handler/impl/InConditionImpl.java @@ -0,0 +1,44 @@ +package com.jero.modules.laws.documenttool.handler.impl; + +import com.jero.modules.laws.common.constant.FieldCommon; +import com.jero.modules.laws.documenttool.common.DocumentSplitCommon; +import com.jero.modules.laws.documenttool.factory.ConditionMapFactory; +import com.jero.modules.laws.documenttool.handler.AbstractConditionBase; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + +/** + * @Author: yjz + * @Date: 2023/10/13/17:05 + * @Description: in查询 + */ + +@Component +public class InConditionImpl extends AbstractConditionBase { + + @Override + public String buildCondition(String fieldName, String value){ + // in查询 + StringBuilder in = new StringBuilder(); + in.append(DocumentSplitCommon.AND).append(fieldName).append(DocumentSplitCommon.IN).append("("); + for (String s : value.split(",")) { + in.append("'").append(s).append("'"); + if (value.indexOf(s) != value.length() -1){ + in.append(","); + } + } + in.append(")"); + return in.toString(); + } + + /** + * 初始化注册到工厂 + */ + @PostConstruct + private void register(){ + for (String item : FieldCommon.TYPE_LIKE_IN) { + ConditionMapFactory.register(item, this); + } + } +} diff --git a/laws-modules/src/main/java/com/jero/modules/laws/documenttool/handler/impl/LikeConditionImpl.java b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/handler/impl/LikeConditionImpl.java new file mode 100644 index 00000000..b97485a8 --- /dev/null +++ b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/handler/impl/LikeConditionImpl.java @@ -0,0 +1,36 @@ +package com.jero.modules.laws.documenttool.handler.impl; + +import com.jero.modules.laws.common.constant.FieldCommon; +import com.jero.modules.laws.documenttool.common.DocumentSplitCommon; +import com.jero.modules.laws.documenttool.factory.ConditionMapFactory; +import com.jero.modules.laws.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/laws-modules/src/main/java/com/jero/modules/laws/documenttool/mapper/DocumentSplitMapper.java b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/mapper/DocumentSplitMapper.java index ab9a1bad..104b16fd 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/documenttool/mapper/DocumentSplitMapper.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/mapper/DocumentSplitMapper.java @@ -9,6 +9,7 @@ import com.jero.modules.split.entity.SarFileSplitInfoEO; import org.apache.ibatis.annotations.Param; import java.util.List; +import java.util.Map; /** * @Author: yjz @@ -31,4 +32,12 @@ public interface DocumentSplitMapper { */ 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); } diff --git a/laws-modules/src/main/java/com/jero/modules/laws/documenttool/mapper/xml/DocumentSplitMapper.xml b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/mapper/xml/DocumentSplitMapper.xml index ba8b6917..31e2d5e3 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/documenttool/mapper/xml/DocumentSplitMapper.xml +++ b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/mapper/xml/DocumentSplitMapper.xml @@ -24,4 +24,12 @@ left join sys_user u on i.author = u.id) t ${ew.customSqlSegment} + + diff --git a/laws-modules/src/main/java/com/jero/modules/laws/documenttool/service/IDocumentSplitService.java b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/service/IDocumentSplitService.java index 3b1fdf89..bb0f121f 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/documenttool/service/IDocumentSplitService.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/service/IDocumentSplitService.java @@ -2,8 +2,10 @@ package com.jero.modules.laws.documenttool.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.jero.modules.laws.documenttool.entity.DocumentSplitInfo; +import com.jero.modules.split.entity.SarFileSplitInfoEO; import java.util.List; +import java.util.Map; /** * @Author: yjz @@ -29,8 +31,21 @@ public interface IDocumentSplitService { List queryByList(DocumentSplitInfo documentSplitInfo); /** - * 更改权限 + * 文档拆分-更改权限 * @param documentSplitInfo */ void updatePermissions(DocumentSplitInfo documentSplitInfo); + + /** + * 文档拆分详情-分页列表查询 + * @param parameter + * @return + */ + IPage> queryDocumentSplitDetail(Map parameter); + + /** + * 文档拆分-拆分 + * @param sarFileSplitInfoEO + */ + void add(SarFileSplitInfoEO sarFileSplitInfoEO); } diff --git a/laws-modules/src/main/java/com/jero/modules/laws/documenttool/service/impl/DocumentSplitServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/service/impl/DocumentSplitServiceImpl.java index adbeb989..693dee5a 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/documenttool/service/impl/DocumentSplitServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/documenttool/service/impl/DocumentSplitServiceImpl.java @@ -4,18 +4,34 @@ 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.MessageUtils; +import com.jero.modules.laws.common.mapper.LawsCommonMapper; +import com.jero.modules.laws.documenttool.common.DocumentSplitCommon; import com.jero.modules.laws.documenttool.entity.DocumentSplitInfo; +import com.jero.modules.laws.documenttool.factory.ConditionMapFactory; import com.jero.modules.laws.documenttool.mapper.DocumentSplitMapper; import com.jero.modules.laws.documenttool.service.IDocumentSplitService; import com.jero.modules.split.entity.SarFileSplitInfoEO; +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.service.ISarFileSplitInfoService; +import com.jero.modules.split.service.ISarFileSplitMenuEOService; +import com.jero.modules.split.service.impl.FileSpiltService; +import com.jero.modules.tag.entity.LawsTag; +import com.jero.modules.tag.enums.LawsFieldTypeEnum; +import com.jero.modules.tag.enums.TableNameEnum; import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.SecurityUtils; import org.jetbrains.annotations.NotNull; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.Arrays; -import java.util.List; +import java.util.*; import java.util.stream.Collectors; /** @@ -28,11 +44,23 @@ import java.util.stream.Collectors; public class DocumentSplitServiceImpl implements IDocumentSplitService { private final DocumentSplitMapper documentSplitMapper; private final ISarFileSplitInfoService sarFileSplitInfoService; - + private final LawsCommonMapper lawsCommonMapper; + private final FileSpiltService fileSpiltService; + private final ISarFileSplitMenuEOService sarFileSplitMenuEOService; + private static final String INFO_ID = "infoId"; + private static final String ITEM_NUM = "itemNum"; + private static final String ITEM_TITLE = "itemTitle"; + private static final String ITEM_CONTENT = "itemContent"; + private static final String MENU_ID = "menuId"; public DocumentSplitServiceImpl(DocumentSplitMapper documentSplitMapper, - ISarFileSplitInfoService sarFileSplitInfoService) { + ISarFileSplitInfoService sarFileSplitInfoService, + LawsCommonMapper lawsCommonMapper, + FileSpiltService fileSpiltService, ISarFileSplitMenuEOService sarFileSplitMenuEOService) { this.documentSplitMapper = documentSplitMapper; this.sarFileSplitInfoService = sarFileSplitInfoService; + this.lawsCommonMapper = lawsCommonMapper; + this.fileSpiltService = fileSpiltService; + this.sarFileSplitMenuEOService = sarFileSplitMenuEOService; } @Override @@ -66,6 +94,171 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService { sarFileSplitInfoService.update(updateWrapper); } + @Override + public IPage> queryDocumentSplitDetail(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()); + + // 分页参数 + Integer pageNo = (Integer) parameter.get("pageNo"); + Integer pageSize =(Integer) parameter.get("pageSize"); + + // sql查询列字段拼接 + String selectColumn = getSelectColumn(fieldListSelect); + // sql where条件拼接 + String selectCondition = getSelectCondition(parameter, fieldListCondition); + + // 查询数据 + return documentSplitMapper.queryDocumentSplitDetail(new Page<>(pageNo, pageSize), selectColumn, selectCondition); + } + + @Override + public void add(SarFileSplitInfoEO sarFileSplitInfoEO) { + // 唯一校验 + uniqueCheck(sarFileSplitInfoEO); + // 保存文本拆分数据 + saveDocumentSplitInfo(sarFileSplitInfoEO); + //拆分 + int count = fileSpiltService.fileCHN(sarFileSplitInfoEO, SplitFileTypeTypeEnum.GBT); + + if(count == -1){ + if(LanguageEnum.CN.equals(MessageUtils.getLanguage())) { + throw new JeroBootException("文档格式错误,请检查文档内容!"); + }else{ + throw new JeroBootException("The document format is wrong. Please check the document content!"); + } + } + } + + private 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); + } + + private 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("Non-repeatable split file status plus standard number the same data!"); + } + } + } + + private String getSelectColumn(List fieldListSelect) { + StringBuilder selectColumn = new StringBuilder(); + selectColumn.append("s.id"); + for (LawsTag lawsTag : fieldListSelect) { + selectColumn.append(","); + // 日期字段需要格式化 + 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(" 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); + // 排序 + orderBy(selectCondition); + return selectCondition.toString(); + } + + private void orderBy(StringBuilder selectCondition) { + selectCondition.append(" order by display_seq asc, sort_number is null, sort_number asc"); + } + + 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.getDbFieldName()).buildCondition(l.getDbFieldName(), (String) v); + selectCondition.append(sqlCondition); + }); + }); + } + + private void defaultCondition(Map parameter, StringBuilder selectCondition) { + 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<>(); @@ -76,6 +269,10 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService { .or() .like("title", documentSplitInfo.getSerialNumberOrName())); } + // 标准编号 + queryWrapper.eq(StringUtils.isNotBlank(documentSplitInfo.getSerialNumber()), "serial_number", StringUtils.isNotBlank(documentSplitInfo.getSerialNumber())); + // 文本状态 + queryWrapper.eq(StringUtils.isNotBlank(documentSplitInfo.getFileType()), "file_type", StringUtils.isNotBlank(documentSplitInfo.getFileType())); // 拆分状态 queryWrapper.eq(StringUtils.isNotBlank(documentSplitInfo.getSplitStatus()), "split_status", documentSplitInfo.getSplitStatus()); // 编辑人