fix: 81788 国内海外标准--查询 零部件名称输入1进行查询,零部件字段没有值的也被查询出来了

This commit is contained in:
2024-02-05 16:29:24 +08:00
parent 66ac3a51f7
commit 615fe5b5df
@@ -1956,7 +1956,7 @@ public class LawsCommonServiceImpl implements ILawsCommonService {
String module = (String) parameterMap.get("module");
// 获取要操作的表名
String tableName = TableNameEnum.getTableName(module);
//查询条件
// 查询条件
StringBuilder selectCondition = new StringBuilder("where 1 = 1");
// 拼接多表关联查询条件
Set<String> idSet = new HashSet<>();
@@ -2018,13 +2018,18 @@ public class LawsCommonServiceImpl implements ILawsCommonService {
selectCondition.append(sql);
parameterMap.remove(FieldCommon.REFERENCED_STANDARD);
}
// 零部件名称
String partName = (String) parameterMap.get(FieldCommon.PART_NAME);
if (StrUtil.isNotBlank(partName)) {
String sql = getLawsPartNameStandardSql(tableName, partName);
selectCondition.append(sql);
parameterMap.remove(FieldCommon.PART_NAME);
}
// 分标委
String biddingCommittee = (String) parameterMap.get(FieldCommon.BIDDING_COMMITTEE);
if (StrUtil.isNotBlank(biddingCommittee)) {
LambdaQueryWrapper<LawsStandardization> standardizationWrapper = new LambdaQueryWrapper<>();
standardizationWrapper.eq(LawsStandardization::getPid, "0");
List<String> biddingCommitteeList = Arrays.asList(biddingCommittee.split(","));
LawsStandardization rootNode = lawsStandardizationService.getOne(standardizationWrapper);
standardizationWrapper.clear();
standardizationWrapper.eq(LawsStandardization::getPid, rootNode.getId());
@@ -2106,6 +2111,31 @@ public class LawsCommonServiceImpl implements ILawsCommonService {
return selectCondition.toString();
}
@NotNull
private String getLawsPartNameStandardSql(String tableName, String partName) {
LambdaQueryWrapper<PartName> partNameWrapper = new LambdaQueryWrapper<>();
partNameWrapper.like(PartName::getName, partName);
List<PartName> list = partNameService.list(partNameWrapper);
List<String> codeList = new ArrayList<>();
list.forEach(p -> codeList.add(p.getCode()));
if (codeList.isEmpty()) {
return ""; // 或者根据实际情况返回一个适当的条件,例如 "1=0" 使得查询结果为空
}
StringBuilder sql = new StringBuilder(" AND (");
for (int i = 0; i < codeList.size(); i++) {
sql.append("FIND_IN_SET('").append(codeList.get(i)).append("', ").append(tableName).append(".part_name)");
if (i < codeList.size() - 1) {
sql.append(" OR ");
}
}
sql.append(")");
return sql.toString();
}
private void getSysUserSql(String tableName, StringBuilder selectCondition, String key, String value) {
if (CharSequenceUtil.isNotBlank(value)) {
List<String> strData = Arrays.asList(value.split(","));