fix(文档拆分): 列表查询优化

This commit is contained in:
yjz
2024-08-13 15:54:51 +08:00
parent adce28969d
commit 44ab15680f
2 changed files with 143 additions and 51 deletions
@@ -97,37 +97,20 @@
<select id="queryByPage" resultType="com.jero.modules.laws.documenttool.entity.DocumentSplitInfo"> <select id="queryByPage" resultType="com.jero.modules.laws.documenttool.entity.DocumentSplitInfo">
select * select *
from (select i.id as id, from (select id,
serial_number,
(CASE
WHEN length(s.standard_name) > 0 THEN s.standard_name
WHEN length(d.standard_name) > 0 THEN d.standard_name
ELSE title
END) title,
(CASE
WHEN length(s.id) > 0 THEN 1
WHEN length(d.id) > 0 THEN 3
ELSE ''
END) splitStandardSource,
file_type, file_type,
file_name, file_name,
split_status, split_status,
(IF(i.is_asms_import = '1' and u.id is null, i.author, concat(u.realname, '(', u.username, ')'))) as author, author,
i.create_time, create_time,
i.split_result, split_result,
u2.id createBy, create_by,
i.standard_id, standard_id,
i.del_flag, del_flag,
publish_before_id, publish_before_id,
file_id, file_id
(IF(u.realname IS NULL , i.author, u.realname)) as realname, from sar_file_split_info) t
u.username as username ${ew.customSqlSegment}
from sar_file_split_info i
left join laws_domestic_standard s on i.standard_id = s.id and s.del_flag = 0
left join laws_enterprise_standard d on i.standard_id = d.id and d.del_flag = 0
left join sys_user u on i.author = u.id
left join sys_user u2 on i.create_by = u2.username) t
${ew.customSqlSegment}
</select> </select>
<select id="queryDocumentSplitDetail" resultType="java.util.Map"> <select id="queryDocumentSplitDetail" resultType="java.util.Map">
@@ -29,13 +29,8 @@ import com.jero.modules.laws.documenttool.mapper.LawsDocumentSplitMapper;
import com.jero.modules.laws.documenttool.service.IDocumentSplitService; import com.jero.modules.laws.documenttool.service.IDocumentSplitService;
import com.jero.modules.laws.labeldatabase.entity.LawsLabelDatabase; import com.jero.modules.laws.labeldatabase.entity.LawsLabelDatabase;
import com.jero.modules.laws.labeldatabase.service.ILawsLabelDatabaseService; import com.jero.modules.laws.labeldatabase.service.ILawsLabelDatabaseService;
import com.jero.modules.laws.standard.entity.LawsNodeRelation; import com.jero.modules.laws.standard.entity.*;
import com.jero.modules.laws.standard.entity.LawsTreeNode; import com.jero.modules.laws.standard.service.*;
import com.jero.modules.laws.standard.entity.PartName;
import com.jero.modules.laws.standard.service.ILawsEnterpriseStandardService;
import com.jero.modules.laws.standard.service.ILawsNodeRelationService;
import com.jero.modules.laws.standard.service.ILawsPartNameService;
import com.jero.modules.laws.standard.service.ILawsTreeNodeService;
import com.jero.modules.split.entity.SarFileSplitInfoEO; import com.jero.modules.split.entity.SarFileSplitInfoEO;
import com.jero.modules.split.entity.SarFileSplitItemsValEO; import com.jero.modules.split.entity.SarFileSplitItemsValEO;
import com.jero.modules.split.entity.SarFileSplitMenuEO; import com.jero.modules.split.entity.SarFileSplitMenuEO;
@@ -120,6 +115,8 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService {
@Autowired @Autowired
private ISysDictItemService sysDictItemService; private ISysDictItemService sysDictItemService;
@Autowired @Autowired
private ILawsDomesticStandardService lawsDomesticStandardService;
@Autowired
private ILawsEnterpriseStandardService lawsEnterpriseStandardService; private ILawsEnterpriseStandardService lawsEnterpriseStandardService;
@Autowired @Autowired
private ILawsEnterpriseStandardLevelService lawsEnterpriseStandardLevelService; private ILawsEnterpriseStandardLevelService lawsEnterpriseStandardLevelService;
@@ -200,14 +197,78 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService {
public IPage<DocumentSplitInfo> queryByPage(DocumentSplitInfo documentSplitInfo, Integer pageNo, Integer pageSize) { public IPage<DocumentSplitInfo> queryByPage(DocumentSplitInfo documentSplitInfo, Integer pageNo, Integer pageSize) {
// 构建查询条件 // 构建查询条件
QueryWrapper<SarFileSplitInfoEO> queryWrapper = getSarFileSplitInfoEOQueryWrapper(documentSplitInfo); QueryWrapper<SarFileSplitInfoEO> queryWrapper = getSarFileSplitInfoEOQueryWrapper(documentSplitInfo);
return documentSplitMapper.queryByPage(new Page<>(pageNo, pageSize), queryWrapper); IPage<DocumentSplitInfo> documentSplitInfoIPage = documentSplitMapper.queryByPage(new Page<>(pageNo, pageSize), queryWrapper);
// 填充数据
setData(documentSplitInfoIPage.getRecords());
return documentSplitInfoIPage;
}
private void setData(List<DocumentSplitInfo> data) {
if (CollectionUtils.isEmpty(data)){
return;
}
// 获取标准信息
List<String> standardIds = data.stream().map(DocumentSplitInfo::getStandardId).collect(Collectors.toList());
List<LawsDomesticStandard> lawsDomesticStandardList = lawsDomesticStandardService.listByIds(standardIds);
List<LawsEnterpriseStandard> lawsEnterpriseStandardList = lawsEnterpriseStandardService.listByIds(standardIds);
Map<String, List<LawsDomesticStandard>> domesticMap = lawsDomesticStandardList.stream()
.collect(Collectors.groupingBy(LawsDomesticStandard::getId));
Map<String, List<LawsEnterpriseStandard>> enterpriseMap = lawsEnterpriseStandardList.stream()
.collect(Collectors.groupingBy(LawsEnterpriseStandard::getId));
// 获取人员信息
List<String> authorList = data.stream().map(DocumentSplitInfo::getAuthor).distinct().collect(Collectors.toList());
List<String> createByList = data.stream().map(DocumentSplitInfo::getCreateBy).distinct().collect(Collectors.toList());
List<SysUser> sysUserList = new ArrayList<>();
if (!CollectionUtils.isEmpty(authorList) || !CollectionUtils.isEmpty(createByList)){
sysUserList = sysUserService.list(
new LambdaQueryWrapper<SysUser>()
.in(!CollectionUtils.isEmpty(authorList), SysUser::getId, authorList)
.or().in(!CollectionUtils.isEmpty(createByList), SysUser::getUsername, createByList));
}
for (DocumentSplitInfo documentSplitInfo : data) {
String standardId = documentSplitInfo.getStandardId();
if (StringUtils.isNotBlank(standardId)){
if (domesticMap.containsKey(documentSplitInfo.getStandardId())){
if (!CollectionUtils.isEmpty(domesticMap.get(standardId))){
LawsDomesticStandard lawsDomesticStandard = domesticMap.get(standardId).get(0);
documentSplitInfo.setSerialNumber(lawsDomesticStandard.getStandardNumber());
documentSplitInfo.setTitle(lawsDomesticStandard.getStandardName());
}
documentSplitInfo.setSplitStandardSource("1");
}else if (enterpriseMap.containsKey(documentSplitInfo.getStandardId())){
if (!CollectionUtils.isEmpty(enterpriseMap.get(standardId))){
LawsEnterpriseStandard lawsEnterpriseStandard = enterpriseMap.get(standardId).get(0);
documentSplitInfo.setSerialNumber(lawsEnterpriseStandard.getStandardNumber());
documentSplitInfo.setTitle(lawsEnterpriseStandard.getStandardName());
}
documentSplitInfo.setSplitStandardSource("3");
}
}
if (!CollectionUtils.isEmpty(sysUserList)){
Optional<SysUser> first = sysUserList.stream()
.filter(v -> v.getUsername().equals(documentSplitInfo.getCreateBy())).findFirst();
first.ifPresent(v -> documentSplitInfo.setCreateBy(v.getId()));
Optional<SysUser> optionalSysUser = sysUserList.stream()
.filter(v -> v.getId().equals(documentSplitInfo.getAuthor())).findFirst();
optionalSysUser.ifPresent(v -> {
if (!"云平台".equals(documentSplitInfo.getAuthor())){
documentSplitInfo.setAuthor(v.calcNameWorkNo());
}
});
}
}
} }
@Override @Override
public List<DocumentSplitInfo> queryByList(DocumentSplitInfo documentSplitInfo) { public List<DocumentSplitInfo> queryByList(DocumentSplitInfo documentSplitInfo) {
// 构建查询条件 // 构建查询条件
QueryWrapper<SarFileSplitInfoEO> queryWrapper = getSarFileSplitInfoEOQueryWrapper(documentSplitInfo); QueryWrapper<SarFileSplitInfoEO> queryWrapper = getSarFileSplitInfoEOQueryWrapper(documentSplitInfo);
return documentSplitMapper.queryByPage(queryWrapper); List<DocumentSplitInfo> documentSplitInfos = documentSplitMapper.queryByPage(queryWrapper);
// 填充数据
setData(documentSplitInfos);
return documentSplitInfos;
} }
@Override @Override
@@ -1628,30 +1689,78 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService {
} }
@NotNull @NotNull
private static QueryWrapper<SarFileSplitInfoEO> getSarFileSplitInfoEOQueryWrapper(DocumentSplitInfo documentSplitInfo) { public QueryWrapper<SarFileSplitInfoEO> getSarFileSplitInfoEOQueryWrapper(DocumentSplitInfo documentSplitInfo) {
QueryWrapper<SarFileSplitInfoEO> queryWrapper = new QueryWrapper<>(); QueryWrapper<SarFileSplitInfoEO> queryWrapper = new QueryWrapper<>();
queryWrapper.eq(StringUtils.isNotBlank(documentSplitInfo.getId()), "id", documentSplitInfo.getId()); queryWrapper.eq(StringUtils.isNotBlank(documentSplitInfo.getId()), "id", documentSplitInfo.getId());
if (StringUtils.isNotBlank(documentSplitInfo.getIds())){
String[] ids = documentSplitInfo.getIds().split(",");
queryWrapper.in(StringUtils.isNotBlank(documentSplitInfo.getIds()), "id", Arrays.asList(ids));
}
// 标准编号/标准名称 // 标准编号/标准名称
if (StringUtils.isNotBlank(documentSplitInfo.getSerialNumberOrName())){ if (StringUtils.isNotBlank(documentSplitInfo.getSerialNumberOrName())) {
queryWrapper.and(qw -> qw List<LawsDomesticStandard> lawsDomesticStandardList = lawsDomesticStandardService.list(
.like("serial_number", documentSplitInfo.getSerialNumberOrName()) new LambdaQueryWrapper<LawsDomesticStandard>()
.or() .like(LawsDomesticStandard::getStandardNumber, documentSplitInfo.getSerialNumberOrName())
.like("title", documentSplitInfo.getSerialNumberOrName())); .or().like(LawsDomesticStandard::getStandardName, documentSplitInfo.getSerialNumberOrName()));
List<LawsEnterpriseStandard> lawsEnterpriseStandardList = lawsEnterpriseStandardService.list(
new LambdaQueryWrapper<LawsEnterpriseStandard>()
.like(LawsEnterpriseStandard::getStandardNumber, documentSplitInfo.getSerialNumberOrName())
.or().like(LawsEnterpriseStandard::getStandardName, documentSplitInfo.getSerialNumberOrName()));
List<String> standardIdList = lawsDomesticStandardList.stream().map(LawsDomesticStandard::getId).collect(Collectors.toList());
standardIdList.addAll(lawsEnterpriseStandardList.stream().map(LawsEnterpriseStandard::getId).collect(Collectors.toList()));
if (!standardIdList.isEmpty()) {
queryWrapper.in("standard_id", standardIdList);
} else {
queryWrapper.isNull("id");
}
} }
// 标准编号 // 标准编号
queryWrapper.like(StringUtils.isNotBlank(documentSplitInfo.getSerialNumber()), "serial_number", documentSplitInfo.getSerialNumber()); if (StringUtils.isNotBlank(documentSplitInfo.getSerialNumber())){
List<LawsDomesticStandard> lawsDomesticStandardList = lawsDomesticStandardService.list(
new LambdaQueryWrapper<LawsDomesticStandard>()
.like(LawsDomesticStandard::getStandardNumber, documentSplitInfo.getSerialNumber()));
List<LawsEnterpriseStandard> lawsEnterpriseStandardList = lawsEnterpriseStandardService.list(
new LambdaQueryWrapper<LawsEnterpriseStandard>()
.like(LawsEnterpriseStandard::getStandardNumber, documentSplitInfo.getSerialNumber()));
List<String> standardIdList = lawsDomesticStandardList.stream().map(LawsDomesticStandard::getId).collect(Collectors.toList());
standardIdList.addAll(lawsEnterpriseStandardList.stream().map(LawsEnterpriseStandard::getId).collect(Collectors.toList()));
if (!standardIdList.isEmpty()) {
queryWrapper.in("standard_id", standardIdList);
} else {
queryWrapper.isNull("id");
}
}
// 标准名称 // 标准名称
queryWrapper.like(StringUtils.isNotBlank(documentSplitInfo.getTitle()), "title", documentSplitInfo.getTitle()); if (StringUtils.isNotBlank(documentSplitInfo.getTitle())){
List<LawsDomesticStandard> lawsDomesticStandardList = lawsDomesticStandardService.list(
new LambdaQueryWrapper<LawsDomesticStandard>()
.like(LawsDomesticStandard::getStandardName, documentSplitInfo.getTitle()));
List<LawsEnterpriseStandard> lawsEnterpriseStandardList = lawsEnterpriseStandardService.list(
new LambdaQueryWrapper<LawsEnterpriseStandard>()
.like(LawsEnterpriseStandard::getStandardName, documentSplitInfo.getTitle()));
List<String> standardIdList = lawsDomesticStandardList.stream().map(LawsDomesticStandard::getId).collect(Collectors.toList());
standardIdList.addAll(lawsEnterpriseStandardList.stream().map(LawsEnterpriseStandard::getId).collect(Collectors.toList()));
if (!standardIdList.isEmpty()) {
queryWrapper.in("standard_id", standardIdList);
} else {
queryWrapper.isNull("id");
}
}
// 文本状态 // 文本状态
queryWrapper.eq(StringUtils.isNotBlank(documentSplitInfo.getFileType()), "file_type", documentSplitInfo.getFileType()); queryWrapper.eq(StringUtils.isNotBlank(documentSplitInfo.getFileType()), "file_type", documentSplitInfo.getFileType());
// 拆分状态 // 拆分状态
queryWrapper.eq(StringUtils.isNotBlank(documentSplitInfo.getSplitStatus()), SPLIT_STATUS, documentSplitInfo.getSplitStatus()); queryWrapper.eq(StringUtils.isNotBlank(documentSplitInfo.getSplitStatus()), SPLIT_STATUS, documentSplitInfo.getSplitStatus());
// 编辑人 // 编辑人
queryWrapper.like(StringUtils.isNotBlank(documentSplitInfo.getAuthor()), "realname", documentSplitInfo.getAuthor()); if (StringUtils.isNotBlank(documentSplitInfo.getAuthor())){
List<SysUser> sysUserList = sysUserService.list(new LambdaQueryWrapper<SysUser>().like(SysUser::getRealname, documentSplitInfo.getAuthor()));
List<String> sysUserIdList = sysUserList.stream().map(SysUser::getId).collect(Collectors.toList());
queryWrapper.and(qw ->
qw.in("author", sysUserIdList)
.or().eq("云平台".contains(documentSplitInfo.getAuthor()), "author", "云平台")
);
}
// 发布前id // 发布前id
if (StringUtils.isNotBlank(documentSplitInfo.getPublishBeforeId())){ if (StringUtils.isNotBlank(documentSplitInfo.getPublishBeforeId())){
queryWrapper.eq("publish_before_id", documentSplitInfo.getPublishBeforeId()); queryWrapper.eq("publish_before_id", documentSplitInfo.getPublishBeforeId());
@@ -1663,9 +1772,9 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService {
String roleIds = loginUser.getRoleIds(); String roleIds = loginUser.getRoleIds();
queryWrapper.and(qw -> queryWrapper.and(qw ->
qw.and(qwi -> qwi.eq(SPLIT_STATUS, DocumentSplitCommon.SPLIT_STATUS1) qw.and(qwi -> qwi.eq(SPLIT_STATUS, DocumentSplitCommon.SPLIT_STATUS1)
.eq("author", loginUser.calcNameWorkNo())) .eq("author", loginUser.getId()))
.or().eq(SPLIT_STATUS, DocumentSplitCommon.SPLIT_STATUS2) .or().eq(SPLIT_STATUS, DocumentSplitCommon.SPLIT_STATUS2)
.or().eq(roleIds.contains("admin"), "author", "云平台")); .or().eq(roleIds.contains("admin"), "author", "云平台"));
// 逻辑删除 // 逻辑删除
queryWrapper.eq("del_flag", 0); queryWrapper.eq("del_flag", 0);
// 排序 // 排序