fix: 体系数据列表数据条数错误

This commit is contained in:
2023-11-16 18:10:10 +08:00
parent 8430e92b2b
commit 89246b42e5
7 changed files with 107 additions and 25 deletions
@@ -37,4 +37,5 @@ public interface SarBussStandMenuDao extends BaseMapper<SarBussStandMenu> {
int updateMenuidByMenuid (@Param("oldMenuid") String oldMenuid ,@Param("newMenuid") String newMenuid);
List<SarBussStandMenu> getESStandMenu();
}
@@ -2,6 +2,7 @@ package com.adc.da.slrs.sarMenuStandard.service.impl;
import com.adc.da.exception.AdcDaBaseException;
import com.adc.da.scheduled.dao.SarStandardInfoDao;
import com.adc.da.slrs.sarBussStandMenu.dao.SarBussStandMenuDao;
import com.adc.da.slrs.sarBussStandMenu.entity.SarBussStandMenu;
import com.adc.da.slrs.sarBussStandMenu.service.ISarBussStandMenuService;
import com.adc.da.slrs.sarBussionessStand.dao.SarBussionessStandDao;
@@ -74,7 +75,7 @@ public class SarMenuStandardNewServiceNewImpl extends ServiceImpl<SarMenuStandar
private ITsDicTypeService dicItemService;
@Resource
private ITsDictionaryService dicService;
private SarBussStandMenuDao sarBussStandMenuDao;
@Override
public String getTopMenu(SarMenuStandardNew sarMenuStandardNew){
@@ -171,18 +172,20 @@ public class SarMenuStandardNewServiceNewImpl extends ServiceImpl<SarMenuStandar
}
// 把所有关联表中的数据拉出来
// 国标
List<SarStandMenu> gbStandMenu = sarStandMenuDao.getGBStandMenu();
List<SarStandMenu> gbStandMenu = sarStandMenuDao.getGBStandMenu().stream().filter(item -> item.getStandId() != null).collect(Collectors.toList());
List<StandMenuRelation> gbRelations = BeanCopyUtils.copyBeanList(gbStandMenu, StandMenuRelation.class);
// 外标
List<SarStandMenu> fbStandMenu = sarStandMenuDao.getFBStandMenu();
List<SarStandMenu> fbStandMenu = sarStandMenuDao.getFBStandMenu().stream().filter(item -> item.getStandId() != null).collect(Collectors.toList());;
List<StandMenuRelation> fbRelations = BeanCopyUtils.copyBeanList(fbStandMenu, StandMenuRelation.class);
// 企标
LambdaQueryWrapper<SarBussStandMenu> bussWrapper = new LambdaQueryWrapper<>();
bussWrapper.apply("LENGTH(menu_id) > {0}", 30);
List<SarBussStandMenu> esStandMenu = sarBussStandMenuService.list(bussWrapper);
List<StandMenuRelation> esRelations = BeanCopyUtils.copyBeanList(esStandMenu, StandMenuRelation.class);
List<SarBussStandMenu> esStandMenu = sarBussStandMenuDao.getESStandMenu().stream().filter(item -> item.getBussStandId() != null).collect(Collectors.toList());
List<StandMenuRelation> esRelations = new ArrayList<>();
for (SarBussStandMenu s : esStandMenu) {
StandMenuRelation standMenuRelation = new StandMenuRelation(s.getBussStandId(), s.getMenuId());
esRelations.add(standMenuRelation);
}
// 计算每个节点的数值
TsResources.get(0).calculateAndSetCounts(gbRelations, fbRelations, esRelations, 0);
// 拼接返回
@@ -191,6 +194,7 @@ public class SarMenuStandardNewServiceNewImpl extends ServiceImpl<SarMenuStandar
@Override
public IPage<StandSystemDTO> standardSystemList(StandSystemDTO standSystemDTO) {
boolean select = standSystemDTO.getSelectIdList() != null;
String menuId = standSystemDTO.getMenuId();
// 校验menuId不能为空
if (StringUtils.isBlank(menuId)) {
@@ -207,13 +211,21 @@ public class SarMenuStandardNewServiceNewImpl extends ServiceImpl<SarMenuStandar
List<String> childIds = new ArrayList<>();
targetNode.collectChildIds(childIds);
standSystemDTO.setMenuIdList(childIds);
if (!select) {
standSystemDTO.setSelectIdList(targetNode.getGbStandIdList());
}
// 查国标
List<StandSystemDTO> gbList = sarStandMenuDao.getStandInfoSystemData(standSystemDTO, "INLAND");
Set<StandSystemDTO> gbList = new HashSet<>(sarStandMenuDao.getStandInfoSystemData(standSystemDTO, "INLAND"));
if (!select) {
standSystemDTO.setSelectIdList(targetNode.getFbStandIdList());
}
// 查外标
List<StandSystemDTO> fbList = sarStandMenuDao.getStandInfoSystemData(standSystemDTO, "FOREIGN");
Set<StandSystemDTO> fbList = new HashSet<>(sarStandMenuDao.getStandInfoSystemData(standSystemDTO, "FOREIGN"));
if (!select) {
standSystemDTO.setSelectIdList(targetNode.getEsStandIdList());
}
// 查企标
List<StandSystemDTO> esList = sarBussionessStandDao.getESSystemData(standSystemDTO);
Set<StandSystemDTO> esList = new HashSet<>(sarBussionessStandDao.getESSystemData(standSystemDTO));
// 数据转换后整合
List<StandSystemDTO> resultList = new ArrayList<>();
resultList.addAll(gbList);
@@ -145,15 +145,35 @@
</select>
<select id="getGBStandMenu" resultType="com.adc.da.slrs.sarStandMenu.entity.SarStandMenu">
select sm.MENU_ID, sm.STAND_ID from SAR_STAND_MENU AS sm
LEFT JOIN sar_standards_info AS stand ON sm.STAND_ID = stand.ID
where stand.STAND_TYPE = 'INLAND' AND LENGTH(sm.MENU_ID) > 30
select
DISTINCT
sms.ID AS menuId,
stand.ID as standId
from SAR_STAND_MENU AS sm
LEFT JOIN sar_standards_info AS stand ON sm.STAND_ID = stand.ID AND stand.VALID_FLAG = '0'
LEFT JOIN sar_menu_standard sms on sm.MENU_ID = sms.ID
where stand.STAND_TYPE = 'INLAND'
AND sms.MENU_NAME IS NOT NULL
AND LENGTH(sm.MENU_ID) > 30
AND sm.VALID_FLAG = '0'
AND sms.id in (select id from sar_menu_standard where valid_flag = 0)
group by stand.ID
</select>
<select id="getFBStandMenu" resultType="com.adc.da.slrs.sarStandMenu.entity.SarStandMenu">
select sm.MENU_ID, sm.STAND_ID from SAR_STAND_MENU AS sm
LEFT JOIN sar_standards_info AS stand ON sm.STAND_ID = stand.ID
where stand.STAND_TYPE = 'FOREIGN' AND LENGTH(sm.MENU_ID) > 30
select
DISTINCT
sms.ID AS menuId,
stand.ID as standId
from SAR_STAND_MENU AS sm
LEFT JOIN sar_standards_info AS stand ON sm.STAND_ID = stand.ID AND stand.VALID_FLAG = '0'
LEFT JOIN sar_menu_standard sms on sm.MENU_ID = sms.ID
where stand.STAND_TYPE = 'FOREIGN'
AND sms.MENU_NAME IS NOT NULL
AND LENGTH(sm.MENU_ID) > 30
AND sm.VALID_FLAG = '0'
AND sms.id in (select id from sar_menu_standard where valid_flag = 0)
group by stand.ID
</select>
<select id="getStandInfoSystemData" resultType="com.adc.da.slrs.sarMenuStandard.entity.StandSystemDTO">
@@ -173,12 +193,14 @@
WHEN gb.STAND_TYPE = 'INLAND' THEN 1
WHEN gb.STAND_TYPE = 'FOREIGN' THEN 2
END AS standTypeSort,
m.MENU_ID AS menuId
sms.ID AS menuId
FROM
`sar_standards_info` AS gb
LEFT JOIN `sar_stand_attr_info` AS gba ON gb.ID = gba.STAND_ID
LEFT JOIN `sar_stand_menu` AS m ON gb.ID = m.STAND_ID AND LENGTH(m.MENU_ID) > 30
WHERE 1 = 1
LEFT JOIN sar_menu_standard sms on m.MENU_ID = sms.ID
WHERE gb.VALID_FLAG = '0'
AND sms.id in (select id from sar_menu_standard where valid_flag = 0)
<!--国标/外标-->
<if test="param.standNo != null and param.standNo != ''">
AND gb.STAND_TYPE = #{dataSource}
@@ -233,6 +255,7 @@
#{item}
</foreach>
</if>
group by gb.ID
</select>
</mapper>
@@ -203,6 +203,24 @@
where buss_stand_id = #{bussStandId} and valid_flag=0
</select>
<select id="getESStandMenu" resultType="com.adc.da.slrs.sarBussStandMenu.entity.SarBussStandMenu">
select
DISTINCT
sms.ID AS menuId,
stand.ID AS bussStandId
from sar_buss_stand_menu AS sm
LEFT JOIN sar_bussioness_stand AS stand
ON sm.BUSS_STAND_ID = stand.ID AND
stand.VALID_FLAG = 0
LEFT JOIN sar_menu_standard sms on sm.MENU_ID = sms.ID
where LENGTH(sm.MENU_ID) > 30
AND sms.MENU_NAME IS NOT NULL
AND sm.VALID_FLAG = 0
AND sm.TREE_TYPE is null
AND sms.id in (select id from sar_menu_standard where valid_flag = 0)
group by stand.ID
</select>
<delete id="deleteByStandIdAndMenuId" parameterType="com.adc.da.slrs.sarBussStandMenu.entity.SarBussStandMenu">
delete from SAR_BUSS_STAND_MENU
where buss_stand_id = #{bussStandId, jdbcType=VARCHAR} and MENU_ID = #{menuId, jdbcType=VARCHAR}
@@ -1269,6 +1269,7 @@
<select id="getESSystemData" resultType="com.adc.da.slrs.sarMenuStandard.entity.StandSystemDTO">
SELECT
DISTINCT
es.ID AS standId,
es.STAND_CODE AS standNo,
es.STAND_NAME AS standName,
@@ -1279,7 +1280,7 @@
esa.QCDW AS dept,
esa.QCRBUSS AS draftUserName,
'ENTERPRISE' AS dataSource,
m.MENU_ID AS menuId,
sms.ID AS menuId,
3 AS standTypeSort,
CASE
when es.stand_code like concat('%', 'Q/FT A', '%') THEN 0
@@ -1304,8 +1305,13 @@
FROM
`sar_bussioness_stand` AS es
LEFT JOIN `sar_buss_stand_attr_info` AS esa ON es.ID = esa.STAND_ID
LEFT JOIN `sar_buss_stand_menu` AS m ON es.ID = m.BUSS_STAND_ID AND LENGTH(m.MENU_ID) > 30
LEFT JOIN `sar_buss_stand_menu` AS m ON es.ID = m.BUSS_STAND_ID
AND LENGTH(m.MENU_ID) > 30
AND m.TREE_TYPE is null
AND m.VALID_FLAG = 0
LEFT JOIN sar_menu_standard sms on m.MENU_ID = sms.ID
WHERE 1 = 1
AND sms.id in (select id from sar_menu_standard where valid_flag = 0)
<!--标准编号-->
<if test="param.standNo != null and param.standNo != ''">
AND es.STAND_CODE LIKE CONCAT('%',#{param.standNo},'%')
@@ -1351,5 +1357,6 @@
#{item}
</foreach>
</if>
group by es.ID
</select>
</mapper>
@@ -15,6 +15,7 @@ import lombok.experimental.Accessors;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
@@ -125,28 +126,44 @@ public class SarMenuStandard extends BaseEntity {
@TableField(exist = false)
private Integer esStandCount;
@TableField(exist = false)
private List<String> gbStandIdList;
@TableField(exist = false)
private List<String> fbStandIdList;
@TableField(exist = false)
private List<String> esStandIdList;
// 添加用于计算和设置关联关系数量的方法
// 添加用于计算和设置关联关系数量的方法
public void calculateAndSetCounts(List<StandMenuRelation> gbStandMenu, List<StandMenuRelation> fbStandMenu, List<StandMenuRelation> esStandMenu, Integer curLevel) {
this.gbStandIdList = new ArrayList<>();
this.fbStandIdList = new ArrayList<>();
this.esStandIdList = new ArrayList<>();
this.level = curLevel;
this.gbStandCount = countMatches(gbStandMenu, this.id);
this.fbStandCount = countMatches(fbStandMenu, this.id);
this.esStandCount = countMatches(esStandMenu, this.id);
this.gbStandCount = countMatches(gbStandMenu, this.id, gbStandIdList);
this.fbStandCount = countMatches(fbStandMenu, this.id, fbStandIdList);
this.esStandCount = countMatches(esStandMenu, this.id, esStandIdList);
for (SarMenuStandard child : children) {
child.calculateAndSetCounts(gbStandMenu, fbStandMenu, esStandMenu, curLevel + 1);
this.gbStandCount += child.gbStandCount;
this.gbStandIdList.addAll(child.gbStandIdList);
this.fbStandCount += child.fbStandCount;
this.fbStandIdList.addAll(child.fbStandIdList);
this.esStandCount += child.esStandCount;
this.esStandIdList.addAll(child.esStandIdList);
}
}
private int countMatches(List<StandMenuRelation> standMenuList, String menuId) {
private int countMatches(List<StandMenuRelation> standMenuList, String menuId, List<String> standIdList) {
int count = 0;
// 计算与menuId匹配的项的数量
for (StandMenuRelation standMenu : standMenuList) {
if (standMenu.getMenuId().equals(menuId)) {
count++;
standIdList.add(standMenu.getStandId());
}
}
return count;
@@ -1,12 +1,16 @@
package com.adc.da.sys.sarMenuStandard.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author: Mzaxd
* @Date: 2023/11/14 16:31
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class StandMenuRelation {
private String standId;