diff --git a/jero-boot-modules/src/main/java/com/jero/modules/laws/common/mapper/CommonMapper.java b/jero-boot-modules/src/main/java/com/jero/modules/laws/common/mapper/CommonMapper.java new file mode 100644 index 00000000..e567c33f --- /dev/null +++ b/jero-boot-modules/src/main/java/com/jero/modules/laws/common/mapper/CommonMapper.java @@ -0,0 +1,31 @@ +package com.jero.modules.laws.common.mapper; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.jero.modules.tag.entity.LawsTag; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.data.repository.query.Param; + +import java.util.List; +import java.util.Map; + +/** + * @Author: liao + * @Date: 2023/8/23 16:49 + * @Description: 通用 + */ +@Mapper +public interface CommonMapper { + + /** + * @Author: liao + * @Date: 2023/8/23 17:02 + * @Description: 根据表名获取该表全部字段 + **/ + List getFieldList(@Param("tableName") String tableName); + + IPage> getInfoPage(@org.apache.ibatis.annotations.Param("page") IPage> page, + @org.apache.ibatis.annotations.Param("table") String table, + @org.apache.ibatis.annotations.Param("field") String field, + @org.apache.ibatis.annotations.Param("condition") String condition); + +} diff --git a/jero-boot-modules/src/main/java/com/jero/modules/laws/common/mapper/xml/CommonMapper.xml b/jero-boot-modules/src/main/java/com/jero/modules/laws/common/mapper/xml/CommonMapper.xml new file mode 100644 index 00000000..bdb8e552 --- /dev/null +++ b/jero-boot-modules/src/main/java/com/jero/modules/laws/common/mapper/xml/CommonMapper.xml @@ -0,0 +1,18 @@ + + + + + + + + + \ No newline at end of file diff --git a/jero-boot-modules/src/main/java/com/jero/modules/laws/common/service/ICommonService.java b/jero-boot-modules/src/main/java/com/jero/modules/laws/common/service/ICommonService.java new file mode 100644 index 00000000..b323cbf1 --- /dev/null +++ b/jero-boot-modules/src/main/java/com/jero/modules/laws/common/service/ICommonService.java @@ -0,0 +1,21 @@ +package com.jero.modules.laws.common.service; + +import com.baomidou.mybatisplus.core.metadata.IPage; + +import java.util.Map; + +/** + * @Author: liao + * @Date: 2023/8/23 16:54 + * @Description: 通用 + */ +public interface ICommonService { + + /** + * @Author: liao + * @Date: 2023/8/23 16:56 + * @Description: 通用分页查询 + **/ + IPage> getCommonPage(Map parameterMap); + +} diff --git a/jero-boot-modules/src/main/java/com/jero/modules/laws/common/service/impl/CommonServiceImpl.java b/jero-boot-modules/src/main/java/com/jero/modules/laws/common/service/impl/CommonServiceImpl.java new file mode 100644 index 00000000..cccaeb09 --- /dev/null +++ b/jero-boot-modules/src/main/java/com/jero/modules/laws/common/service/impl/CommonServiceImpl.java @@ -0,0 +1,204 @@ +package com.jero.modules.laws.common.service.impl; + +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.util.MessageUtils; +import com.jero.modules.document.enums.FieldTypeEnum; +import com.jero.modules.laws.common.mapper.CommonMapper; +import com.jero.modules.laws.common.service.ICommonService; +import com.jero.modules.tag.entity.LawsTag; +import com.jero.modules.tag.enums.FileTableIdEnum; +import com.spire.ms.System.Collections.ArrayList; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + * @Author: liao + * @Date: 2023/8/23 16:54 + * @Description: 通用 + */ +@Component +public class CommonServiceImpl implements ICommonService { + + @Autowired + private CommonMapper commonMapper; + + /** + * @Author: liao + * @Date: 2023/8/23 16:57 + * @Description: 通用分页查询 + **/ + @Override + public IPage> getCommonPage(Map parameterMap) { + // 获取操作模块 + String module = parameterMap.get("module").toString(); + // 获取要操作的表名 + String tableName = FileTableIdEnum.getTableName(module); + // 获取操作语言 + LanguageEnum language = MessageUtils.getLanguage(); + // 获取分页参数 + Integer pageNo = Integer.valueOf(parameterMap.get("pageNo").toString()); + Integer pageSize = Integer.valueOf(parameterMap.get("pageSize").toString()); + IPage> page = new Page<>(pageNo, pageSize); + // 封装查询返回字段 + String selectField = getSelectField(parameterMap, tableName); + // 封装查询条件 + String selectCondition = getSelectCondition(parameterMap, tableName); + // 获取分页查询结果 + IPage> infoPage = commonMapper.getInfoPage(page, tableName, selectField, selectCondition); + // 对一些字段做翻译(如文件ids、树型选择ids) + return infoPage; + } + + /** + * @Author: liao + * @Date: 2023/8/23 17:10 + * @Description: 封装查询返回字段 + **/ + private String getSelectField(Map parameterMap, String tableName) { + // 获取全部字段 + List fieldList = commonMapper.getFieldList(tableName); + // 筛选出查询列表显示的字段 + fieldList = fieldList.stream().filter(lawsTag -> YesOrNoEnum.YES.getValue() + .equals(lawsTag.getIsShowList().toString())).collect(Collectors.toList()); + // 筛选获取日期类型字段 + List dateFieldList = fieldList.stream().filter(lawsTag -> FieldTypeEnum.DATE_SINGLE + .equals(lawsTag.getFieldShowType())).collect(Collectors.toList()) + .stream().map(LawsTag::getDbFieldName).collect(Collectors.toList()); + // 获取全部的字段列表 + List tempFieldList = fieldList.stream().map(LawsTag::getDbFieldName).collect(Collectors.toList()); + // 创建一个新的用于返回的字段列表 + List selectFieldList = new ArrayList(); + // 查询主键 + selectFieldList.add("id"); + tempFieldList.forEach(tempField -> { + String endField; + // 对日期格式和普通格式做处理 + if (dateFieldList.contains(tempField)) { + // 如果是日期格式 + String newField = "date_format(" + tempField + ", '%Y-%m-%d')"; + endField = "case when " + newField + " is null then \"\" else " + newField + " end " + tempField; + selectFieldList.add(endField); + } else { + // 如果是普通格式 + endField = "case when " + tempField + " is null then \"\" else " + tempField + " end " + tempField; + selectFieldList.add(endField); + } + }); + return StringUtils.join(selectFieldList, ","); + } + + /** + * @Author: liao + * @Date: 2023/8/23 17:16 + * @Description: 封装查询条件 + **/ + private String getSelectCondition(Map parameterMap, String tableName) { + // 获取全部字段 + List fieldList = commonMapper.getFieldList(tableName); + // 筛选出用于查询的字段 + fieldList = fieldList.stream().filter(lawsTag -> YesOrNoEnum.YES.getValue() + .equals(lawsTag.getIsQuery().toString())).collect(Collectors.toList()); + //查询条件 + StringBuilder selectCondition = new StringBuilder("where 1 = 1"); + // 删除pageNo和pageSize,不参与条件查询 + parameterMap.remove("pageNo"); + parameterMap.remove("pageSize"); + // 查询条件处理 + for (Map.Entry entryMap : parameterMap.entrySet()) { + String key = entryMap.getKey(); + String value = ""; + if (!Objects.isNull(entryMap.getValue())) { + value = entryMap.getValue().toString(); + } + // 如果value不为null和"",则拼接查询条件 + if (StringUtils.isNotBlank(value)) { + jointSelectCondition(fieldList, selectCondition, key, value); + } + } + //处理列表表头排序 + if (StringUtils.isNotBlank((String) parameterMap.get("orderByField"))) { + selectCondition.append(" order by " + parameterMap.get("orderByField")); + orderBySort(parameterMap, selectCondition); + } else { + selectCondition.append(" order by create_time desc"); + } + return selectCondition.toString(); + } + + /** + * @Author: liao + * @Date: 2023/8/22 11:41 + * @Description: 给拼装的查询条件排序 + **/ + private void orderBySort(Map parameter, StringBuilder conditionSb) { + if ("1".equals(parameter.get("orderBy"))) { + conditionSb.append(" asc");//正序 + } else if ("2".equals(parameter.get("orderBy"))) { + conditionSb.append(" desc");//倒序 + } + } + + /** + * @Author: liao + * @Date: 2023/8/23 17:57 + * @Description: 组装单个查询条件 + **/ + private void jointSelectCondition(List fieldList, StringBuilder selectCondition, String key, String value) { + for (LawsTag lawsTag : fieldList) { + // 获取字段名 + String dbFieldName = lawsTag.getDbFieldName(); + if (Objects.equals(key, dbFieldName)) { + // 获取字段类型 + String fieldShowType = lawsTag.getFieldShowType(); + if (FieldTypeEnum.TEXT_STRING.getValue().equals(fieldShowType) + || FieldTypeEnum.TEXT_NUMBER.getValue().equals(fieldShowType) + || FieldTypeEnum.STANDARD.getValue().equals(fieldShowType)) { + if (value.contains("%")) { + // 字段内容可能包含%,是转义字符,做一下处理 + value = value.replace("%", "/%"); + } + selectCondition.append(" and " + key + " like concat(concat('%','" + value + "'),'%')"); + } else if (FieldTypeEnum.PULL_SINGLE.getValue().equals(fieldShowType) + || FieldTypeEnum.PULL_MORE.getValue().equals(fieldShowType) + || FieldTypeEnum.TREE.getValue().equals(fieldShowType)) { + StringBuilder valueSb = new StringBuilder(); + StringBuilder condition = new StringBuilder(); + for (String valueTemp : value.split(",")) { + valueSb.append("'" + valueTemp + "',"); + condition.append(" or " + key + " like binary concat(concat('%','" + valueTemp + "'),'%')"); + } + condition.append(")"); + String substring = valueSb.substring(0, valueSb.length() - 1); + //下拉单选或下拉多选 + selectCondition.append(" and (" + key + " in(" + substring + ")" + condition); + + } else if (FieldTypeEnum.DATE_SINGLE.getValue().equals(fieldShowType)) { + //日期(区分单日期还时间范围) + if (value.contains(",")) { + selectCondition.append(" and " + "date_format(" + key + ",'%Y-%m-%d') >= '" + value.split(",")[0] + "'" + + " and " + "date_format(" + key + ",'%Y-%m-%d') <= '" + value.split(",")[1] + "'"); + } else { + selectCondition.append(" and " + "date_format(" + key + ",'%Y-%m-%d') = '" + value + "'"); + } + } else if (FieldTypeEnum.PERSON.getValue().equals(fieldShowType)) { + if (value.contains("%")) { + // 字段内容可能包含%,是转义字符,做一下处理 + value = value.replace("%", "/%"); + } + selectCondition.append(" and " + key + " like concat(concat('%','" + value + "'),'%')"); + } + } + } + } + +} diff --git a/jero-boot-modules/src/main/java/com/jero/modules/laws/component/SearchComponent.java b/jero-boot-modules/src/main/java/com/jero/modules/laws/component/SearchComponent.java deleted file mode 100644 index ba058d76..00000000 --- a/jero-boot-modules/src/main/java/com/jero/modules/laws/component/SearchComponent.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.jero.modules.laws.component; - -import org.springframework.stereotype.Component; - -/** - * @Author: liao - * @Date: 2023/8/22 16:25 - * @Description: 查询组件 - */ -@Component -public class SearchComponent { - -} diff --git a/jero-boot-modules/src/main/java/com/jero/modules/laws/regulation/controller/LawsBasicInfoController.java b/jero-boot-modules/src/main/java/com/jero/modules/laws/regulation/controller/LawsBasicInfoController.java index 6d25918c..ea77c6f4 100644 --- a/jero-boot-modules/src/main/java/com/jero/modules/laws/regulation/controller/LawsBasicInfoController.java +++ b/jero-boot-modules/src/main/java/com/jero/modules/laws/regulation/controller/LawsBasicInfoController.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.jero.common.api.vo.Result; import com.jero.common.aspect.annotation.AutoLog; import com.jero.common.system.base.controller.JeroController; +import com.jero.modules.laws.common.service.ICommonService; import com.jero.modules.laws.regulation.entity.LawsBasicInfo; import com.jero.modules.laws.regulation.service.ILawsBasicInfoService; import io.swagger.annotations.Api; @@ -67,4 +68,12 @@ public class LawsBasicInfoController extends JeroController>> getCommon(@RequestBody Map parameter) { + return Result.OK(commonService.getCommonPage(parameter)); + } + } diff --git a/jero-boot-modules/src/main/java/com/jero/modules/laws/regulation/service/impl/LawsBasicInfoServiceImpl.java b/jero-boot-modules/src/main/java/com/jero/modules/laws/regulation/service/impl/LawsBasicInfoServiceImpl.java index ef9c8a90..62caa04d 100644 --- a/jero-boot-modules/src/main/java/com/jero/modules/laws/regulation/service/impl/LawsBasicInfoServiceImpl.java +++ b/jero-boot-modules/src/main/java/com/jero/modules/laws/regulation/service/impl/LawsBasicInfoServiceImpl.java @@ -419,7 +419,9 @@ public class LawsBasicInfoServiceImpl extends ServiceImpl