Compare commits

...

8 Commits

Author SHA1 Message Date
review512jwy@163.com 6c21b23e42 Merge branch 'ppt-20260120' into jwy 1 month ago
review512jwy@163.com 23bc21c798 Merge branch 'zhc' into ppt-20260120 1 month ago
review512jwy@163.com edd1b08bf1 getTopCompanyId死循环 1 month ago
review512jwy@163.com 2f9e6e4a3b 收藏展示全部 1 month ago
review512jwy@163.com 04c65653b6 代码完善 1 month ago
review512jwy@163.com b0f65a9091 Merge branch 'zhc' into jwy 1 month ago
review512jwy@163.com c77a58b174 合并冲突 3 months ago
review512jwy@163.com 4f6f2b1581 getOverviewInfo改为物件层级 4 months ago
  1. 56
      dongjian-dashboard-back-common/src/main/java/com/dongjian/dashboard/back/common/config/DataSourceInterceptor.java
  2. 2
      dongjian-dashboard-back-dao/src/main/java/com/dongjian/dashboard/back/dao/ex/BasicUserMapperExt.java
  3. 3
      dongjian-dashboard-back-dao/src/main/java/com/dongjian/dashboard/back/dao/ex/LevelMapperExt.java
  4. 10
      dongjian-dashboard-back-dao/src/main/resources/mappers/ex/BasicUserMapperExt.xml
  5. 2
      dongjian-dashboard-back-dao/src/main/resources/mappers/ex/FavoritedDeviceMapperExt.xml
  6. 13
      dongjian-dashboard-back-dao/src/main/resources/mappers/ex/LevelMapperExt.xml
  7. 2
      dongjian-dashboard-back-dao/src/main/resources/mappers/ex/OverviewInfoMapperExt.xml
  8. 16
      dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/common/CommonOpt.java
  9. 4
      dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataBaStatusServiceImpl.java
  10. 3
      dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/OverviewServiceImpl.java

56
dongjian-dashboard-back-common/src/main/java/com/dongjian/dashboard/back/common/config/DataSourceInterceptor.java

@ -13,10 +13,7 @@ import com.dongjian.dashboard.back.common.Constants;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import java.util.ArrayList; import java.util.*;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicLong;
@ -57,23 +54,44 @@ public class DataSourceInterceptor implements HandlerInterceptor {
public long getTopCompanyId(String companyId) { public long getTopCompanyId(String companyId) {
String sql="SELECT " if (StringUtils.isBlank(companyId)) {
+ " bcom.id, bcom.parent_id parentId" throw new IllegalArgumentException("companyId不能为空");
+ " FROM data_center_aeon_admin.basic_company bcom " }
+ " WHERE bcom.flag != 1 and bcom.id = " + companyId;
AtomicLong parentId = new AtomicLong(0); return getTopCompanyIdInternal(Long.parseLong(companyId), new HashSet<>());
AtomicLong id = new AtomicLong(0); }
jdbcTemplate.query(sql,rs -> {
parentId.set(rs.getLong("parentId")); private long getTopCompanyIdInternal(Long companyId, Set<Long> visited) {
id.set(rs.getLong("id"));
}); // 防止循环引用
//Recursive logic if (!visited.add(companyId)) {
if (1 == parentId.get() || -1 == parentId.get()) { throw new IllegalStateException("检测到公司父子结构循环,companyId=" + companyId);
return id.get(); }
} else {
return getTopCompanyId(parentId.get()+""); String sql = """
SELECT id, parent_id
FROM data_center_aeon_admin.basic_company
WHERE flag != 1 AND id = ?
""";
List<Map<String, Object>> result = jdbcTemplate.queryForList(sql, companyId);
if (result.isEmpty()) {
throw new IllegalStateException("公司不存在,companyId=" + companyId);
} }
Map<String, Object> row = result.get(0);
Long parentId = row.get("parent_id") == null
? null
: ((Number) row.get("parent_id")).longValue();
// 顶级企业
if (parentId == null || parentId == 1 || parentId == -1) {
return companyId;
}
return getTopCompanyIdInternal(parentId, visited);
} }
/** /**

2
dongjian-dashboard-back-dao/src/main/java/com/dongjian/dashboard/back/dao/ex/BasicUserMapperExt.java

@ -23,4 +23,6 @@ public interface BasicUserMapperExt extends BasicUserMapper{
UserInfoVO getAccountInfo(Map<String, Object> paramMap); UserInfoVO getAccountInfo(Map<String, Object> paramMap);
Integer checkBuildingManager(Long userId); Integer checkBuildingManager(Long userId);
Integer checkLevelManager(Long userId);
} }

3
dongjian-dashboard-back-dao/src/main/java/com/dongjian/dashboard/back/dao/ex/LevelMapperExt.java

@ -4,6 +4,7 @@ import com.dongjian.dashboard.back.dto.level.LevelEntity;
import com.dongjian.dashboard.back.dto.level.LevelRelationEntity; import com.dongjian.dashboard.back.dto.level.LevelRelationEntity;
import com.dongjian.dashboard.back.dto.level.OptLevelParam; import com.dongjian.dashboard.back.dto.level.OptLevelParam;
import com.dongjian.dashboard.back.dto.level.PageLevelSearchParam; import com.dongjian.dashboard.back.dto.level.PageLevelSearchParam;
import com.dongjian.dashboard.back.vo.building.BindedBuildingVO;
import com.dongjian.dashboard.back.vo.level.LevelPageDTO; import com.dongjian.dashboard.back.vo.level.LevelPageDTO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
@ -32,4 +33,6 @@ public interface LevelMapperExt {
void deleteLevelRelationByIdList(@Param("param") LevelRelationEntity param, @Param("idList") List<Long> idList); void deleteLevelRelationByIdList(@Param("param") LevelRelationEntity param, @Param("idList") List<Long> idList);
List<LevelPageDTO> getListPage(PageLevelSearchParam pageSearchParam); List<LevelPageDTO> getListPage(PageLevelSearchParam pageSearchParam);
List<Long> getBoundBuilding(Long userId);
} }

10
dongjian-dashboard-back-dao/src/main/resources/mappers/ex/BasicUserMapperExt.xml

@ -115,4 +115,14 @@
WHERE rmr.menu_id = 52 AND br.flag != 1 AND rru.user_id = #{userId} WHERE rmr.menu_id = 52 AND br.flag != 1 AND rru.user_id = #{userId}
</select> </select>
<select id="checkLevelManager" resultType="java.lang.Integer">
SELECT
count(1)
FROM
data_center_aeon_admin.basic_role_user_relation rru
INNER JOIN data_center_aeon_admin.basic_role br ON br.id = rru.role_id
INNER JOIN data_center_aeon_admin.basic_role_menu_relation rmr ON br.id = rmr.role_id
WHERE rmr.menu_id = 88 AND br.flag != 1 AND rru.user_id = #{userId}
</select>
</mapper> </mapper>

2
dongjian-dashboard-back-dao/src/main/resources/mappers/ex/FavoritedDeviceMapperExt.xml

@ -20,7 +20,9 @@
WHERE WHERE
dinfo.flag != 1 AND basic_monitoring_asset.flag != 1 dinfo.flag != 1 AND basic_monitoring_asset.flag != 1
AND basic_space.flag != 1 AND basic_floor.flag != 1 AND basic_building.flag != 1 AND basic_space.flag != 1 AND basic_floor.flag != 1 AND basic_building.flag != 1
<if test="buildingId != null">
AND basic_building.building_id = #{buildingId} AND basic_building.building_id = #{buildingId}
</if>
AND dinfo.company_id IN <foreach collection="companyIdList" item="item" open="(" separator="," close=")">#{item}</foreach> AND dinfo.company_id IN <foreach collection="companyIdList" item="item" open="(" separator="," close=")">#{item}</foreach>
<if test="categoryIdList != null and categoryIdList.size() > 0"> <if test="categoryIdList != null and categoryIdList.size() > 0">
and ty.device_category_id in and ty.device_category_id in

13
dongjian-dashboard-back-dao/src/main/resources/mappers/ex/LevelMapperExt.xml

@ -180,4 +180,17 @@
order BY base.`id` desc order BY base.`id` desc
</select> </select>
<select id="getBoundBuilding" resultType="java.lang.Long">
SELECT
DISTINCT sb.building_id
FROM dashboard_level_role_user rl
INNER JOIN dashboard_level_role_object ro ON rl.level_role_id = ro.level_role_id
INNER JOIN dashboard_level_relation_branch_store brs ON ro.ref_type = 'BRANCH' AND ro.ref_id = brs.branch_id
INNER JOIN dashboard_level_relation_store_area sra ON brs.store_id = sra.store_id
INNER JOIN dashboard_level_relation_area_site ras ON sra.area_id = ras.area_id
INNER JOIN dashboard_level_relation_site_building sb ON ras.site_id = sb.site_id
INNER JOIN basic_building bb ON sb.building_id = bb.building_id
WHERE bb.flag = 0 AND rl.user_id = #{userId}
</select>
</mapper> </mapper>

2
dongjian-dashboard-back-dao/src/main/resources/mappers/ex/OverviewInfoMapperExt.xml

@ -26,7 +26,7 @@
</foreach> </foreach>
WHERE WHERE
bbuilding.company_id = #{companyId} AND bbuilding.flag = 0 AND basic_floor.flag = 0 AND basic_space.flag = 0 bbuilding.company_id = #{companyId} AND bbuilding.flag = 0 AND basic_floor.flag = 0 AND basic_space.flag = 0
AND basic_monitoring_asset.flag = 0 AND dinfo.flag = 0 AND basic_asset_class_big.flag = 0 AND basic_monitoring_asset.flag = 0 AND dinfo.flag = 0
AND ah.confirm_status = 0 AND ah.handle_status = 1 AND ah.confirm_status = 0 AND ah.handle_status = 1
</select> </select>

16
dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/common/CommonOpt.java

@ -71,6 +71,8 @@ public class CommonOpt {
@Autowired @Autowired
private UserBuildingRelationMapperExt userBuildingRelationMapperExt; private UserBuildingRelationMapperExt userBuildingRelationMapperExt;
@Autowired @Autowired
private LevelMapperExt levelMapperExt;
@Autowired
private DeviceRawdataRealtimeMapperExt deviceRawdataRealtimeMapperExt; private DeviceRawdataRealtimeMapperExt deviceRawdataRealtimeMapperExt;
@Autowired @Autowired
private DeviceInfoMapperExt deviceInfoMapperExt; private DeviceInfoMapperExt deviceInfoMapperExt;
@ -253,6 +255,20 @@ public class CommonOpt {
} }
} }
public List<Long> getBindLevelBuildingIdList(Long userId) {
Integer levelManager = basicUserMapperExt.checkLevelManager(userId);
if (levelManager > 0) {
return null;//null表示不限制, sql里面判定bindedBuildingList=null的话,就不限制楼宇
} else {
List<Long> bindedBuildingList = levelMapperExt.getBoundBuilding(userId);
if (CollectionUtils.isEmpty(bindedBuildingList)) {
return Collections.singletonList(-1L);//-1的话,表示没有绑定
} else {
return bindedBuildingList;
}
}
}
public List<String> getPreDay(int days) { public List<String> getPreDay(int days) {
// 日本时区 // 日本时区
ZoneId JST = Constants.ZONE_TOKYO; ZoneId JST = Constants.ZONE_TOKYO;

4
dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/DeviceDataBaStatusServiceImpl.java

@ -196,11 +196,7 @@ public class DeviceDataBaStatusServiceImpl implements DeviceDataBaStatusService
List<Object> yCommon = new ArrayList<>(); List<Object> yCommon = new ArrayList<>();
//** 获取昨日最新数据 **// //** 获取昨日最新数据 **//
String redisKey = Constants.REDIS_BA_STATUS_LATEST_VALUE + DateUtil.getYesterdayInJapan(); String redisKey = Constants.REDIS_BA_STATUS_LATEST_VALUE + DateUtil.getYesterdayInJapan();
boolean cacheExist = redisUtil.existsKey(redisKey);
Object cacheLastValue = redisUtil.HGet(redisKey, lineDataSearchParams.getDeviceId().toLowerCase()); Object cacheLastValue = redisUtil.HGet(redisKey, lineDataSearchParams.getDeviceId().toLowerCase());
if (null != cacheLastValue) { if (null != cacheLastValue) {
try { try {

3
dongjian-dashboard-back-service/src/main/java/com/dongjian/dashboard/back/service/impl/OverviewServiceImpl.java

@ -60,7 +60,7 @@ public class OverviewServiceImpl implements OverviewService {
public SimpleDataResponse<List<OverviewVO>> getOverviewInfo(Long userId, Long companyId, Integer languageType, Integer utcOffset) { public SimpleDataResponse<List<OverviewVO>> getOverviewInfo(Long userId, Long companyId, Integer languageType, Integer utcOffset) {
Map<String, Object> buildingMap = new HashMap<>(); Map<String, Object> buildingMap = new HashMap<>();
buildingMap.put("companyId", companyId); buildingMap.put("companyId", companyId);
buildingMap.put("bindBuildingIdList", commonOpt.getBindBuildingIdList(userId)); buildingMap.put("bindBuildingIdList", commonOpt.getBindLevelBuildingIdList(userId));
List<OverviewVO> buildingInfoList = overviewInfoMapperExt.getBuildingInfo(buildingMap); List<OverviewVO> buildingInfoList = overviewInfoMapperExt.getBuildingInfo(buildingMap);
@ -196,6 +196,7 @@ public class OverviewServiceImpl implements OverviewService {
// 分组监测点分类 // 分组监测点分类
List<OverviewVO.MonitoringPointCategoryAlarm> categoryAlarms = buildingInfos.stream() List<OverviewVO.MonitoringPointCategoryAlarm> categoryAlarms = buildingInfos.stream()
.filter(dto -> dto.getMonitoringPointCategoryId() != null)
.collect(Collectors.groupingBy(OverviewInfo::getMonitoringPointCategoryId)) .collect(Collectors.groupingBy(OverviewInfo::getMonitoringPointCategoryId))
.entrySet() .entrySet()
.stream() .stream()

Loading…
Cancel
Save