fix(文档拆分): 列表查询优化
This commit is contained in:
+9
-26
@@ -97,36 +97,19 @@
|
||||
|
||||
<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
|
||||
file_id
|
||||
from sar_file_split_info) t
|
||||
${ew.customSqlSegment}
|
||||
</select>
|
||||
|
||||
|
||||
+129
-11
@@ -39,8 +39,10 @@ import com.jero.modules.laws.enterprise.service.EnterpriseStandardAuthDeptServic
|
||||
import com.jero.modules.laws.enterprise.service.EnterpriseStandardAuthUserService;
|
||||
import com.jero.modules.laws.labeldatabase.entity.LawsLabelDatabase;
|
||||
import com.jero.modules.laws.labeldatabase.service.ILawsLabelDatabaseService;
|
||||
import com.jero.modules.laws.standard.entity.LawsDomesticStandard;
|
||||
import com.jero.modules.laws.standard.entity.LawsEnterpriseStandard;
|
||||
import com.jero.modules.laws.standard.entity.PartName;
|
||||
import com.jero.modules.laws.standard.service.ILawsDomesticStandardService;
|
||||
import com.jero.modules.laws.standard.service.ILawsEnterpriseStandardService;
|
||||
import com.jero.modules.laws.standard.service.PartNameService;
|
||||
import com.jero.modules.split.entity.SarFileSplitInfoEO;
|
||||
@@ -124,6 +126,7 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService {
|
||||
private final ISysDictService sysDictService;
|
||||
private final ISysDictItemService sysDictItemService;
|
||||
private final ILawsEnterpriseStandardService lawsEnterpriseStandardService;
|
||||
private final ILawsDomesticStandardService lawsDomesticStandardService;
|
||||
private final ILawsEnterpriseStandardLevelService lawsEnterpriseStandardLevelService;
|
||||
private final EnterpriseStandardAuthUserService enterpriseStandardAuthUserService;
|
||||
private final ISysUserService sysUserService;
|
||||
@@ -155,6 +158,7 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService {
|
||||
ISysDictService sysDictService,
|
||||
ISysDictItemService sysDictItemService,
|
||||
ILawsEnterpriseStandardService lawsEnterpriseStandardService,
|
||||
ILawsDomesticStandardService lawsDomesticStandardService,
|
||||
ILawsEnterpriseStandardLevelService lawsEnterpriseStandardLevelService,
|
||||
EnterpriseStandardAuthUserService enterpriseStandardAuthUserService,
|
||||
ISysUserService sysUserService,
|
||||
@@ -175,6 +179,7 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService {
|
||||
this.sysDictService = sysDictService;
|
||||
this.sysDictItemService = sysDictItemService;
|
||||
this.lawsEnterpriseStandardService = lawsEnterpriseStandardService;
|
||||
this.lawsDomesticStandardService = lawsDomesticStandardService;
|
||||
this.lawsEnterpriseStandardLevelService = lawsEnterpriseStandardLevelService;
|
||||
this.enterpriseStandardAuthUserService = enterpriseStandardAuthUserService;
|
||||
this.sysUserService = sysUserService;
|
||||
@@ -201,7 +206,68 @@ 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
|
||||
@@ -1657,26 +1723,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.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());
|
||||
@@ -1688,7 +1806,7 @@ 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", "云平台"));
|
||||
// 逻辑删除
|
||||
|
||||
Reference in New Issue
Block a user