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 *
from (select i.id as 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,
from (select id,
file_type,
file_name,
split_status,
(IF(i.is_asms_import = '1' and u.id is null, i.author, concat(u.realname, '(', u.username, ')'))) as author,
i.create_time,
i.split_result,
u2.id createBy,
i.standard_id,
i.del_flag,
author,
create_time,
split_result,
create_by,
standard_id,
del_flag,
publish_before_id,
file_id,
(IF(u.realname IS NULL , i.author, u.realname)) as realname,
u.username as username
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}
file_id
from sar_file_split_info) t
${ew.customSqlSegment}
</select>
<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.labeldatabase.entity.LawsLabelDatabase;
import com.jero.modules.laws.labeldatabase.service.ILawsLabelDatabaseService;
import com.jero.modules.laws.standard.entity.LawsNodeRelation;
import com.jero.modules.laws.standard.entity.LawsTreeNode;
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.laws.standard.entity.*;
import com.jero.modules.laws.standard.service.*;
import com.jero.modules.split.entity.SarFileSplitInfoEO;
import com.jero.modules.split.entity.SarFileSplitItemsValEO;
import com.jero.modules.split.entity.SarFileSplitMenuEO;
@@ -120,6 +115,8 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService {
@Autowired
private ISysDictItemService sysDictItemService;
@Autowired
private ILawsDomesticStandardService lawsDomesticStandardService;
@Autowired
private ILawsEnterpriseStandardService lawsEnterpriseStandardService;
@Autowired
private ILawsEnterpriseStandardLevelService lawsEnterpriseStandardLevelService;
@@ -200,14 +197,78 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService {
public IPage<DocumentSplitInfo> queryByPage(DocumentSplitInfo documentSplitInfo, Integer pageNo, Integer pageSize) {
// 构建查询条件
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
public List<DocumentSplitInfo> queryByList(DocumentSplitInfo documentSplitInfo) {
// 构建查询条件
QueryWrapper<SarFileSplitInfoEO> queryWrapper = getSarFileSplitInfoEOQueryWrapper(documentSplitInfo);
return documentSplitMapper.queryByPage(queryWrapper);
List<DocumentSplitInfo> documentSplitInfos = documentSplitMapper.queryByPage(queryWrapper);
// 填充数据
setData(documentSplitInfos);
return documentSplitInfos;
}
@Override
@@ -1628,30 +1689,78 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService {
}
@NotNull
private static QueryWrapper<SarFileSplitInfoEO> getSarFileSplitInfoEOQueryWrapper(DocumentSplitInfo documentSplitInfo) {
public QueryWrapper<SarFileSplitInfoEO> getSarFileSplitInfoEOQueryWrapper(DocumentSplitInfo documentSplitInfo) {
QueryWrapper<SarFileSplitInfoEO> queryWrapper = new QueryWrapper<>();
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())){
queryWrapper.and(qw -> qw
.like("serial_number", documentSplitInfo.getSerialNumberOrName())
.or()
.like("title", documentSplitInfo.getSerialNumberOrName()));
if (StringUtils.isNotBlank(documentSplitInfo.getSerialNumberOrName())) {
List<LawsDomesticStandard> lawsDomesticStandardList = lawsDomesticStandardService.list(
new LambdaQueryWrapper<LawsDomesticStandard>()
.like(LawsDomesticStandard::getStandardNumber, 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.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
if (StringUtils.isNotBlank(documentSplitInfo.getPublishBeforeId())){
queryWrapper.eq("publish_before_id", documentSplitInfo.getPublishBeforeId());
@@ -1663,9 +1772,9 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService {
String roleIds = loginUser.getRoleIds();
queryWrapper.and(qw ->
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(roleIds.contains("admin"), "author", "云平台"));
.or().eq(roleIds.contains("admin"), "author", "云平台"));
// 逻辑删除
queryWrapper.eq("del_flag", 0);
// 排序