yang_shj
9 months ago
8 changed files with 72 additions and 3238 deletions
@ -1,54 +0,0 @@
|
||||
package com.hnac.hzims.operational.main.controller; |
||||
|
||||
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; |
||||
import com.hnac.hzims.operational.main.service.IAppHomeService; |
||||
import com.hnac.hzims.operational.main.vo.AppStationAreaVo; |
||||
import com.hnac.hzims.operational.main.vo.AppAreaDutyVo; |
||||
import com.hnac.hzims.operational.main.vo.AppStationVo; |
||||
import io.swagger.annotations.Api; |
||||
import io.swagger.annotations.ApiOperation; |
||||
import io.swagger.annotations.ApiParam; |
||||
import lombok.AllArgsConstructor; |
||||
import org.springblade.core.boot.ctrl.BladeController; |
||||
import org.springblade.core.log.annotation.ApiLog; |
||||
import org.springblade.core.tool.api.R; |
||||
import org.springframework.web.bind.annotation.GetMapping; |
||||
import org.springframework.web.bind.annotation.RequestMapping; |
||||
import org.springframework.web.bind.annotation.RestController; |
||||
|
||||
import java.util.List; |
||||
|
||||
@RestController |
||||
@RequestMapping("/appHome") |
||||
@Api(value = "app首页", tags = "app-首页") |
||||
@AllArgsConstructor |
||||
public class AppHomeController extends BladeController { |
||||
|
||||
private final IAppHomeService appService; |
||||
|
||||
|
||||
|
||||
@ApiLog |
||||
@ApiOperation("app首页-站点") |
||||
@GetMapping("/appStation") |
||||
@ApiOperationSupport(order = 1) |
||||
public R<List<AppStationVo>> appStation(@ApiParam(value = "区域机构ID") Long deptId) { |
||||
return R.data(appService.appStation(deptId)); |
||||
} |
||||
|
||||
@ApiLog |
||||
@ApiOperation("app首页-站点列表数据") |
||||
@GetMapping("/appStationList") |
||||
@ApiOperationSupport(order = 2) |
||||
public R<List<AppStationAreaVo>> appStationList(@ApiParam(value = "机构ID") Long deptId) { |
||||
return R.data(appService.appStationList(deptId)); |
||||
} |
||||
|
||||
@ApiLog |
||||
@ApiOperation("app首页-当班数据") |
||||
@GetMapping("/getDutyData") |
||||
@ApiOperationSupport(order = 3) |
||||
public R<List<AppAreaDutyVo>> getDutyData(@ApiParam(value = "区域机构ID") Long deptId) { |
||||
return R.data(appService.getDutyData(deptId)); |
||||
} |
||||
} |
@ -1,137 +0,0 @@
|
||||
package com.hnac.hzims.operational.main.controller; |
||||
|
||||
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; |
||||
import com.hnac.hzims.common.logs.annotation.OperationAnnotation; |
||||
import com.hnac.hzims.common.logs.enums.BusinessType; |
||||
import com.hnac.hzims.common.logs.enums.OperatorType; |
||||
import com.hnac.hzims.operational.main.service.IHomePageService; |
||||
import com.hnac.hzims.operational.main.vo.*; |
||||
import io.swagger.annotations.Api; |
||||
import io.swagger.annotations.ApiOperation; |
||||
import io.swagger.annotations.ApiParam; |
||||
import lombok.AllArgsConstructor; |
||||
import org.springblade.core.boot.ctrl.BladeController; |
||||
import org.springblade.core.log.annotation.ApiLog; |
||||
import org.springblade.core.tool.api.R; |
||||
import org.springframework.web.bind.annotation.GetMapping; |
||||
import org.springframework.web.bind.annotation.RequestMapping; |
||||
import org.springframework.web.bind.annotation.RestController; |
||||
|
||||
import javax.validation.constraints.NotNull; |
||||
import java.util.List; |
||||
import java.util.Map; |
||||
|
||||
/** |
||||
* @author ysj |
||||
*/ |
||||
@RestController |
||||
@RequestMapping("/homePage") |
||||
@Api(value = "水电站-首页", tags = "水电站-首页") |
||||
@AllArgsConstructor |
||||
public class HomePageController extends BladeController { |
||||
|
||||
@NotNull |
||||
private final IHomePageService homePageService; |
||||
|
||||
@ApiLog |
||||
@ApiOperation("服务厂站统计") |
||||
@GetMapping("/stationCensus") |
||||
@ApiOperationSupport(order = 1) |
||||
public R<List<OldStationCountVo>> stationCount(@ApiParam(value = "站点服务类型:1、云服务站点; 2、代运维服务站点", required = true) Integer serveType, Long deptId) { |
||||
List<OldStationCountVo> stationList = homePageService.getStationCount(deptId,serveType); |
||||
return R.data(stationList); |
||||
} |
||||
|
||||
@ApiLog |
||||
@ApiOperation("关键指标:水电站、风电站、光伏站") |
||||
@GetMapping("/powerStation") |
||||
@ApiOperationSupport(order = 2) |
||||
public R<List<PowerTargetVo>> powerStation(@ApiParam(value = "站点服务类型:1、云服务站点; 2、代运维服务站点", required = true)Integer serveType,Long deptId) { |
||||
List<PowerTargetVo> powerTargetVoList = homePageService.powerTarget(serveType,deptId); |
||||
return R.data(powerTargetVoList); |
||||
} |
||||
|
||||
@ApiLog |
||||
@ApiOperation("关键指标:储能站、水利") |
||||
@GetMapping("/storageConservancy") |
||||
@ApiOperationSupport(order = 3) |
||||
public R<List<StorageConservancyVo>> storageConservancy(@ApiParam(value = "站点服务类型:1、云服务站点; 2、代运维服务站点", required = true) Integer serveType,Long deptId) { |
||||
List<StorageConservancyVo> crucialTargetVoList = homePageService.storageConservancy(serveType,deptId); |
||||
return R.data(crucialTargetVoList); |
||||
} |
||||
|
||||
@ApiLog |
||||
@ApiOperation("关键指标:暂定其他站") |
||||
@GetMapping("/waterAffairs") |
||||
@ApiOperationSupport(order = 4) |
||||
public R<OtherStationVo> waterAffairs(@ApiParam(value = "站点服务类型:1、云服务站点; 2、代运维服务站点", required = true) Integer serveType,Long deptId) { |
||||
OtherStationVo waterAffairsVoList = homePageService.otherStation(serveType,deptId); |
||||
return R.data(waterAffairsVoList); |
||||
} |
||||
|
||||
@ApiLog |
||||
@ApiOperation("水电站数据获取") |
||||
@GetMapping("/getHydropowerData") |
||||
@ApiOperationSupport(order = 5) |
||||
public R<List<OldHydropowerScoreVo>> getHydropowerData(@ApiParam(value = "区域id", required = true) Long deptId) { |
||||
List<OldHydropowerScoreVo> hydropowerScoreVoList = homePageService.getHydropowerData(deptId); |
||||
return R.data(hydropowerScoreVoList); |
||||
} |
||||
|
||||
|
||||
@ApiLog |
||||
@ApiOperation("年计划发电完成趋势") |
||||
@GetMapping("/planAactualTrend") |
||||
// @OperationAnnotation(moduleName = "演示大屏",title = "演示大屏", operatorType = OperatorType.MOBILE,
|
||||
// businessType = BusinessType.GENCODE,action = "年计划发电完成趋势")
|
||||
@ApiOperationSupport(order = 6) |
||||
public R<List<PowerMonthVo>> planActualTrend(@ApiParam(value = "区域机构ID") Long deptId) { |
||||
return R.data(homePageService.planActualTrend(deptId)); |
||||
} |
||||
|
||||
|
||||
|
||||
@ApiLog |
||||
@ApiOperation("计划发电趋势") |
||||
@GetMapping("/planGenerationTrend") |
||||
@ApiOperationSupport(order = 7) |
||||
public R<Map<Long, List<PlanGenerationTrendVo>>> planGenerationTrend(@ApiParam(value = "区域机构ID") Long deptId) { |
||||
return homePageService.planGenerationTrend(deptId, 0, 2); |
||||
} |
||||
|
||||
@ApiLog |
||||
@ApiOperation("区域发电占比") |
||||
@GetMapping("/areaGenerationMakeUp") |
||||
@ApiOperationSupport(order = 9) |
||||
public R<Map<Long, List<AreaGenerationMakeUpVo>>> areaGenerationMakeUp(@ApiParam(value = "区域机构ID") Long deptId) { |
||||
return homePageService.areaGenerationMakeUp(deptId, 0, 2); |
||||
} |
||||
|
||||
|
||||
@ApiLog |
||||
@ApiOperation("统计") |
||||
@GetMapping("/getCount") |
||||
@ApiOperationSupport(order = 10) |
||||
public R<Map<Long, List<HomePageCountVo>>> getCount(@ApiParam(value = "区域机构ID") Long deptId) { |
||||
return homePageService.getCount(deptId, 0, 2); |
||||
} |
||||
|
||||
|
||||
@ApiLog |
||||
@ApiOperation("获取区域") |
||||
@GetMapping("/getArea") |
||||
@ApiOperationSupport(order = 11) |
||||
public R<List<AreaVo>> getArea(@ApiParam(value = "区域机构ID") Long deptId) { |
||||
return homePageService.getArea(deptId); |
||||
} |
||||
|
||||
|
||||
@ApiLog |
||||
@ApiOperation("站点首页") |
||||
@GetMapping("/stationHome") |
||||
@ApiOperationSupport(order = 11) |
||||
public R<List<AreaVo>> homeStation(@ApiParam(value = "区域机构ID") Long deptId) { |
||||
return R.data(homePageService.homeStation(deptId)); |
||||
} |
||||
|
||||
} |
@ -1,34 +0,0 @@
|
||||
package com.hnac.hzims.operational.main.service; |
||||
|
||||
import com.hnac.hzims.operational.main.vo.AppStationAreaVo; |
||||
import com.hnac.hzims.operational.main.vo.AppAreaDutyVo; |
||||
import com.hnac.hzims.operational.main.vo.AppStationVo; |
||||
|
||||
import java.util.List; |
||||
|
||||
/** |
||||
* APP首页接口 |
||||
* @author ysj |
||||
*/ |
||||
public interface IAppHomeService { |
||||
|
||||
/** |
||||
* 获取App首页站点列表 |
||||
* @param deptId |
||||
* @return |
||||
*/ |
||||
List<AppStationVo> appStation(Long deptId); |
||||
|
||||
/** |
||||
* 获取app首页-站点列表数据 |
||||
* @param deptId |
||||
* @return |
||||
*/ |
||||
List<AppStationAreaVo> appStationList(Long deptId); |
||||
|
||||
/** |
||||
* app首页-当班数据 |
||||
* @return |
||||
*/ |
||||
List<AppAreaDutyVo> getDutyData(Long deptId); |
||||
} |
@ -1,50 +0,0 @@
|
||||
package com.hnac.hzims.operational.main.service; |
||||
|
||||
import com.hnac.hzims.operational.main.vo.*; |
||||
import org.springblade.core.tool.api.R; |
||||
import org.springblade.system.entity.Dept; |
||||
|
||||
import java.util.List; |
||||
import java.util.Map; |
||||
|
||||
public interface IHomePageService { |
||||
|
||||
// 水电站加载数据
|
||||
void loadHydropower(String param, Integer serveType); |
||||
|
||||
// 近年发电量数据
|
||||
void loadPowerData(String param,List<Integer> types, Integer serveType, int yearCount); |
||||
|
||||
List<String> getMonthList(int year, int endMoth,boolean nextMon); |
||||
|
||||
List<OldStationCountVo> getStationCount(Long deptId, Integer serveType); |
||||
|
||||
List<PowerTargetVo> powerTarget(Integer serveType,Long deptId); |
||||
|
||||
List<StorageConservancyVo> storageConservancy(Integer serveType,Long deptId); |
||||
|
||||
OtherStationVo otherStation(Integer serveType,Long deptId); |
||||
|
||||
R<Map<Long,List<PlanGenerationTrendVo>>> planGenerationTrend(Long deptId,Integer stationType,Integer serveType); |
||||
|
||||
|
||||
R<Map<Long,List<AreaGenerationMakeUpVo>>> areaGenerationMakeUp(Long deptId,Integer stationType,Integer serveType); |
||||
|
||||
List<OldHydropowerScoreVo> getHydropowerData(Long deptId); |
||||
|
||||
R<Map<Long,List<HomePageCountVo>>> getCount(Long deptId,Integer stationType,Integer serveType); |
||||
|
||||
Map<Long, List<Long>> getDepartMap(Long deptId); |
||||
|
||||
R<List<AreaVo>> getArea(Long depeId); |
||||
|
||||
List<Long> getChildDept(List<Dept> departList, Long deptId,List<Long> list); |
||||
|
||||
List<Dept> getChildArea(List<Dept> departList, Long deptId,List<Dept> list); |
||||
|
||||
List<PowerMonthVo> planActualTrend(Long deptId); |
||||
|
||||
List<AreaVo> homeStation(Long deptId); |
||||
|
||||
boolean compareDate(String date); |
||||
} |
@ -1,755 +0,0 @@
|
||||
package com.hnac.hzims.operational.main.service.impl; |
||||
|
||||
import com.alibaba.fastjson.JSONObject; |
||||
import com.alibaba.fastjson.TypeReference; |
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
||||
import com.google.common.util.concurrent.ThreadFactoryBuilder; |
||||
import com.hnac.hzims.equipment.entity.PlanGenerationEntity; |
||||
import com.hnac.hzims.equipment.vo.EminfoAndEmParamVo; |
||||
import com.hnac.hzims.hzimsweather.response.weather.Daily; |
||||
import com.hnac.hzims.hzimsweather.response.weather.HeWeatherWeatherDailyResponse; |
||||
import com.hnac.hzims.operational.access.constants.AccessConstants; |
||||
import com.hnac.hzims.operational.access.entity.OperAccessTaskEntity; |
||||
import com.hnac.hzims.operational.access.service.IOperAccessTaskService; |
||||
import com.hnac.hzims.operational.defect.constants.TreatMethodConstant; |
||||
import com.hnac.hzims.operational.defect.entity.OperPhenomenonEntity; |
||||
import com.hnac.hzims.operational.defect.service.IOperPhenomenonService; |
||||
import com.hnac.hzims.operational.duty.service.IImsDutyMainService; |
||||
import com.hnac.hzims.operational.duty.vo.DutyMainInfoVo; |
||||
import com.hnac.hzims.operational.main.constant.HomePageConstant; |
||||
import com.hnac.hzims.operational.main.service.AreaService; |
||||
import com.hnac.hzims.operational.main.service.IAppHomeService; |
||||
import com.hnac.hzims.operational.main.service.IMainSystemMonitoringService; |
||||
import com.hnac.hzims.operational.main.service.IWeatherService; |
||||
import com.hnac.hzims.operational.main.vo.*; |
||||
import com.hnac.hzims.operational.maintenance.constants.MaintenanceConstant; |
||||
import com.hnac.hzims.operational.maintenance.entity.OperMaintenanceTaskEntity; |
||||
import com.hnac.hzims.operational.maintenance.service.IOperMaintenanceTaskService; |
||||
import com.hnac.hzims.operational.station.entity.StationEntity; |
||||
import com.hnac.hzims.operational.station.service.IStationAttributeService; |
||||
import com.hnac.hzims.operational.station.service.IStationService; |
||||
import com.hnac.hzinfo.datasearch.soe.domian.SoeData; |
||||
import com.hnac.hzinfo.inspect.task.feign.IInspectTaskReportClient; |
||||
import com.hnac.hzinfo.inspect.task.vo.DutyInspectTaskVO; |
||||
import lombok.RequiredArgsConstructor; |
||||
import org.apache.commons.collections4.MapUtils; |
||||
import org.springblade.core.tool.api.R; |
||||
import org.springblade.core.tool.utils.CollectionUtil; |
||||
import org.springblade.core.tool.utils.DateUtil; |
||||
import org.springblade.core.tool.utils.ObjectUtil; |
||||
import org.springblade.core.tool.utils.StringUtil; |
||||
import org.springblade.system.entity.Dept; |
||||
import org.springblade.system.feign.ISysClient; |
||||
import org.springblade.system.user.cache.UserCache; |
||||
import org.springblade.system.user.entity.User; |
||||
import org.springframework.beans.factory.annotation.Value; |
||||
import org.springframework.data.redis.core.RedisTemplate; |
||||
import org.springframework.stereotype.Service; |
||||
|
||||
import java.math.BigDecimal; |
||||
import java.math.RoundingMode; |
||||
import java.time.Duration; |
||||
import java.time.LocalDateTime; |
||||
import java.time.ZoneId; |
||||
import java.time.format.DateTimeFormatter; |
||||
import java.util.*; |
||||
import java.util.concurrent.*; |
||||
import java.util.stream.Collectors; |
||||
|
||||
/** |
||||
* APP首页实现类 |
||||
* @author ysj |
||||
*/ |
||||
@Service |
||||
@RequiredArgsConstructor |
||||
public class AppHomeServiceImpl implements IAppHomeService { |
||||
|
||||
private final AreaService areaService; |
||||
|
||||
private final IStationService stationService; |
||||
|
||||
private final IImsDutyMainService dutyMainService; |
||||
|
||||
private final IOperPhenomenonService phenomenonService; |
||||
|
||||
private final IOperAccessTaskService accessTaskService; |
||||
|
||||
private final IMainSystemMonitoringService mainService; |
||||
|
||||
private final IStationAttributeService attributeService; |
||||
|
||||
private final IOperMaintenanceTaskService maintenanceTaskService; |
||||
|
||||
private final IInspectTaskReportClient inspectTaskReportClient; |
||||
|
||||
private final ISysClient sysClient; |
||||
|
||||
private final IWeatherService weatherService; |
||||
|
||||
private final RedisTemplate redisTemplate; |
||||
|
||||
// 线程数量
|
||||
private final static int POOL_QUANTITY = 5; |
||||
|
||||
@Value("${hzims.operation.realIdKey}") |
||||
public String real_id_key; |
||||
|
||||
private final static String LOAD_HYDROPOWER_UNIT_REAL_KEY = "hzims:operation:loadhydropowerunit:real:key"; |
||||
|
||||
private final static String LOAD_HYDROPOWER_UNIT_TARGET_KEY = "hzims:operation:loadhydropowerunit:target:key"; |
||||
|
||||
private final static String KEY_INDICATORS_INFO = "hzims:operation:key:indicators:info"; |
||||
|
||||
/** |
||||
* app首页-站点 |
||||
* @param deptId |
||||
* @return |
||||
*/ |
||||
@Override |
||||
public List<AppStationVo> appStation(Long deptId) { |
||||
// 用户权限机构
|
||||
R<List<Dept>> R = sysClient.getDeptByCurrentUser(); |
||||
if(!R.isSuccess() && CollectionUtil.isEmpty(R.getData())){ |
||||
return null; |
||||
} |
||||
// 设备信息
|
||||
List<EminfoAndEmParamVo> emList = mainService.getEmInfoList(); |
||||
if(CollectionUtil.isEmpty(emList)){ |
||||
return null; |
||||
} |
||||
// 站点列表
|
||||
List<StationEntity> list = stationService.getStationList(R.getData(),deptId,Collections.singletonList(HomePageConstant.HYDROPOWER),null,true); |
||||
if(CollectionUtil.isEmpty(list)){ |
||||
return null; |
||||
} |
||||
// 站点缓存列表
|
||||
KeyIndicatorsVo keyIndicatorsVo = (KeyIndicatorsVo) redisTemplate.opsForValue().get(KEY_INDICATORS_INFO); |
||||
// 监测点单位
|
||||
Map<String,String> unitMap = this.attributeService.getPointUnit(); |
||||
// 站点遍历
|
||||
List<AppStationVo> result = new ArrayList<>(); |
||||
list.forEach(station -> { |
||||
if(null == station.getRefDept()){ |
||||
return; |
||||
} |
||||
AppStationVo vo = new AppStationVo(); |
||||
vo.setDeptId(station.getRefDept()); |
||||
vo.setDeptName(station.getName()); |
||||
vo.setDay(0L); |
||||
// 投运时间计算安全运行天数
|
||||
if (ObjectUtil.isNotEmpty(station.getCommissionTime())) { |
||||
Duration dur = Duration.between(station.getCommissionTime(), LocalDateTime.now()); |
||||
vo.setDay(dur.toDays()); |
||||
} |
||||
// 天气温度
|
||||
this.getWeather(station,vo); |
||||
// 站点告警列表
|
||||
List<SoeData> alertList = this.getStationAlert(station.getId(),keyIndicatorsVo); |
||||
if(CollectionUtil.isNotEmpty(alertList)){ |
||||
vo.setAlertList(alertList); |
||||
} |
||||
// 遍历监测点数据
|
||||
List<EmShowVo> stationEmList = getEmShowList(emList.stream().filter(o->station.getCreateDept().equals(o.getCreateDept())).collect(Collectors.toList()),unitMap); |
||||
if(CollectionUtil.isEmpty(stationEmList)){ |
||||
vo.setInstalledCapacity(0.0); |
||||
vo.setActivePower(0.0); |
||||
vo.setUsrRate(0.0); |
||||
result.add(vo); |
||||
return; |
||||
} |
||||
// 设备
|
||||
vo.setList(stationEmList); |
||||
// 总装机容量
|
||||
double installedCapacity = stationEmList.stream().filter(o-> null != o.getInstalledCapacity()).mapToDouble(EmShowVo::getInstalledCapacity).sum(); |
||||
vo.setInstalledCapacity(installedCapacity); |
||||
// 总有功功率
|
||||
double activePower = stationEmList.stream().filter(o->StringUtil.isNotBlank(o.getActivePower())).mapToDouble(o->Float.parseFloat(o.getActivePower())).sum(); |
||||
vo.setActivePower(activePower); |
||||
// 总有功率单位
|
||||
List<String> unit = stationEmList.stream().filter(o->StringUtil.isNotBlank(o.getPowerUnit())).map(EmShowVo::getPowerUnit).collect(Collectors.toList()); |
||||
if(CollectionUtil.isNotEmpty(unit)){ |
||||
vo.setPowerUnit(unit.get(0)); |
||||
} else { |
||||
vo.setPowerUnit("kW"); |
||||
} |
||||
if(installedCapacity <= 0){ |
||||
vo.setUsrRate(0.0); |
||||
}else{ |
||||
double usrRate = BigDecimal.valueOf(activePower / installedCapacity * 100).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); |
||||
vo.setUsrRate(usrRate); |
||||
} |
||||
result.add(vo); |
||||
}); |
||||
return result; |
||||
} |
||||
|
||||
/** |
||||
* 获取展示设备列表 |
||||
* @param valid |
||||
* @return |
||||
*/ |
||||
private List<EmShowVo> getEmShowList(List<EminfoAndEmParamVo> valid,Map<String,String> unitMap) { |
||||
if(CollectionUtil.isEmpty(valid)){ |
||||
return null; |
||||
} |
||||
// readId,value
|
||||
String json = (String) redisTemplate.opsForValue().get(real_id_key); |
||||
Map<String, String> map = null; |
||||
if (StringUtil.isNotBlank(json)) { |
||||
map = JSONObject.parseObject(json, new TypeReference<Map<String, String>>() {}); |
||||
} |
||||
// 展示设备(有功功率)
|
||||
List<EmShowVo> list = getActiveList(map,valid,unitMap); |
||||
// 设备监测点集合
|
||||
List<String> onOffList = valid.stream().filter(o->MapUtils.isNotEmpty(o.getPoint()) && StringUtil.isNotBlank(o.getPoint().get(HomePageConstant.ACTIVE_POWER))). |
||||
map(o->o.getPoint().get(HomePageConstant.JOINT_RELAY)).collect(Collectors.toList()); |
||||
if(CollectionUtil.isEmpty(onOffList) || MapUtils.isEmpty(map)){ |
||||
return list; |
||||
} |
||||
// 展示设备(开关机状态)
|
||||
for(EmShowVo em : list){ |
||||
em.setOnOff(false); |
||||
if (MapUtils.isEmpty(em.getPoint()) || StringUtil.isEmpty(em.getPoint().get(HomePageConstant.JOINT_RELAY))) { |
||||
continue; |
||||
} |
||||
String realId = em.getPoint().get(HomePageConstant.JOINT_RELAY); |
||||
String value = map.get(realId); |
||||
if(StringUtil.isBlank(value)){ |
||||
continue; |
||||
} |
||||
if (value.contains("1") || "1.0".equals(value)) { |
||||
em.setOnOff(true); |
||||
} |
||||
} |
||||
return list; |
||||
|
||||
} |
||||
|
||||
/** |
||||
* 获取有功功率展示设备 |
||||
* @param valid |
||||
* @return |
||||
*/ |
||||
private List<EmShowVo> getActiveList(Map<String, String> map,List<EminfoAndEmParamVo> valid,Map<String,String> unitMap) { |
||||
List<String> realIds = valid.stream().filter(o->MapUtils.isNotEmpty(o.getPoint()) && StringUtil.isNotBlank(o.getPoint().get(HomePageConstant.ACTIVE_POWER))). |
||||
map(o->o.getPoint().get(HomePageConstant.ACTIVE_POWER)).collect(Collectors.toList()); |
||||
if (CollectionUtil.isEmpty(realIds) || MapUtils.isEmpty(map)) { |
||||
return getEmShowVos(valid); |
||||
} |
||||
// 遍历设备
|
||||
List<EmShowVo> emShowVoList = new ArrayList<>(); |
||||
valid.forEach(em -> { |
||||
EmShowVo emShowVo = new EmShowVo(); |
||||
emShowVo.setDeptId(em.getCreateDept()); |
||||
emShowVo.setCode(em.getEmCode()); |
||||
emShowVo.setName(em.getName()); |
||||
emShowVo.setPoint(em.getPoint()); |
||||
emShowVo.setOnOff(false); |
||||
emShowVo.setOrd(em.getOrd()); |
||||
emShowVo.setInstalledCapacity(em.getInstalledCapacity()); |
||||
// 有功功率
|
||||
if (MapUtils.isEmpty(em.getPoint())) { |
||||
emShowVo.setActivePower("0"); |
||||
emShowVoList.add(emShowVo); |
||||
return; |
||||
} |
||||
String realId = em.getPoint().get(HomePageConstant.ACTIVE_POWER); |
||||
if(StringUtil.isEmpty(realId)){ |
||||
emShowVo.setActivePower("0"); |
||||
emShowVoList.add(emShowVo); |
||||
return; |
||||
} |
||||
// websocket 中取realId的value值
|
||||
String value = map.get(realId); |
||||
if(StringUtil.isEmpty(value)){ |
||||
emShowVo.setActivePower("0"); |
||||
emShowVoList.add(emShowVo); |
||||
return; |
||||
} |
||||
emShowVo.setActivePower(value); |
||||
// 单位设置
|
||||
if(MapUtils.isNotEmpty(unitMap)){ |
||||
String unit = unitMap.get(em.getId()+HomePageConstant.CONCAT_P); |
||||
if(StringUtil.isNotBlank(unit)) { |
||||
emShowVo.setPowerUnit(unit); |
||||
} else { |
||||
emShowVo.setPowerUnit("kW"); |
||||
} |
||||
} else { |
||||
emShowVo.setPowerUnit("kW"); |
||||
} |
||||
emShowVoList.add(emShowVo); |
||||
}); |
||||
return emShowVoList.stream().sorted(Comparator.comparing(EmShowVo::getOrd)).collect(Collectors.toList()); |
||||
} |
||||
|
||||
/** |
||||
* 默认设备展示信息 |
||||
* @param valid |
||||
* @return |
||||
*/ |
||||
private List<EmShowVo> getEmShowVos(List<EminfoAndEmParamVo> valid) { |
||||
return valid.stream().map(o -> { |
||||
EmShowVo emShowVo = new EmShowVo(); |
||||
emShowVo.setDeptId(o.getCreateDept()); |
||||
emShowVo.setCode(o.getEmCode()); |
||||
emShowVo.setName(o.getName()); |
||||
emShowVo.setInstalledCapacity(o.getInstalledCapacity()); |
||||
emShowVo.setActivePower("0"); |
||||
emShowVo.setPoint(o.getPoint()); |
||||
emShowVo.setOnOff(false); |
||||
return emShowVo; |
||||
}).collect(Collectors.toList()); |
||||
} |
||||
|
||||
/** |
||||
* 获取温度 |
||||
* @param station |
||||
* @return |
||||
*/ |
||||
private void getWeather(StationEntity station,AppStationVo vo) { |
||||
Map<String, HeWeatherWeatherDailyResponse> weekWeather = this.weatherService.getWeekWeather(Collections.singletonList(station.getCode())); |
||||
if(MapUtils.isEmpty(weekWeather)) { |
||||
return; |
||||
} |
||||
List<Daily> list = weekWeather.get(station.getCode()).getDaily(); |
||||
if (CollectionUtil.isEmpty(list)) { |
||||
return; |
||||
|
||||
} |
||||
vo.setTempMin(list.get(0).getTempMin()); |
||||
vo.setTempMax(list.get(0).getTempMax()); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* 获取站点告警列表 |
||||
* @param stationId |
||||
* @return |
||||
*/ |
||||
public List<SoeData> getStationAlert(Long stationId,KeyIndicatorsVo keyIndicatorsVo) { |
||||
if(ObjectUtil.isEmpty(keyIndicatorsVo) || null == stationId){ |
||||
return null; |
||||
} |
||||
List<PowerStationTotalVo> powerStationTotalVoList = keyIndicatorsVo.getPowerStationTotalVoList(); |
||||
if(CollectionUtil.isEmpty(powerStationTotalVoList)){ |
||||
return null; |
||||
} |
||||
List<PowerStationTotalVo> stationAlertList = powerStationTotalVoList.stream().filter(o->stationId.equals(o.getStationId())).collect(Collectors.toList()); |
||||
if(CollectionUtil.isEmpty(stationAlertList)){ |
||||
return null; |
||||
} |
||||
return stationAlertList.get(0).getAlertList(); |
||||
} |
||||
|
||||
/** |
||||
* app首页-站点列表数据 |
||||
* @param deptId |
||||
* @return |
||||
*/ |
||||
@Override |
||||
public List<AppStationAreaVo> appStationList(Long deptId) { |
||||
// 获取区域或者站点map结构
|
||||
Map<Dept,List<StationEntity>> map = areaService.areaOrStaion(deptId,Collections.singletonList(HomePageConstant.HYDROPOWER),true); |
||||
if(MapUtils.isEmpty(map)){ |
||||
return null; |
||||
} |
||||
// 获取站点计划发电量集合
|
||||
//List<PlanGenerationEntity> planPowerList = sideHustleService.getStaionPlanPower(map);
|
||||
// 获取设备指标数据列表
|
||||
List<HydropowerUnitTargetVo> targetList = (List<HydropowerUnitTargetVo>) redisTemplate.opsForValue().get(LOAD_HYDROPOWER_UNIT_TARGET_KEY); |
||||
// 获取设备实时数据
|
||||
List<HydropowerUnitRealVo> realList = (List<HydropowerUnitRealVo>) redisTemplate.opsForValue().get(LOAD_HYDROPOWER_UNIT_REAL_KEY); |
||||
// 响应结果
|
||||
List<AppStationAreaVo> result = new ArrayList<>(); |
||||
map.forEach((key,value)->{ |
||||
AppStationAreaVo vo = new AppStationAreaVo(); |
||||
List<AppStationTargetVo> children = new ArrayList<>(); |
||||
value.forEach(item->{ |
||||
AppStationTargetVo response = new AppStationTargetVo(); |
||||
response.setDeptId(item.getRefDept()); |
||||
response.setDeptName(item.getName()); |
||||
// 站点年计划发电量
|
||||
//float planPowerYear = this.getPlanPowerYear(planPowerList,item.getCode());
|
||||
response.setPlanPowerYear(0f); |
||||
// 站点发电完成率
|
||||
double powerRate = this.getPowerRate(targetList,item.getCreateDept(),0f); |
||||
response.setPowerRate(powerRate); |
||||
// 设备总数
|
||||
int deviceSum = this.getDeviceSum(realList,item.getCreateDept(),false); |
||||
response.setDeviceSum(deviceSum); |
||||
// 设备开机数
|
||||
int deviceRunSum = this.getDeviceSum(realList,item.getCreateDept(),true); |
||||
response.setDeviceRunSum(deviceRunSum); |
||||
// 实时负荷
|
||||
float realPowerSum = this.getRealPowerSum(realList,item.getCreateDept()); |
||||
response.setRealPowerSum(realPowerSum); |
||||
// 负荷单位
|
||||
String unit = this.getPowerUnit(realList,item.getCreateDept()); |
||||
response.setRealPowerUnit(unit); |
||||
children.add(response); |
||||
}); |
||||
vo.setList(children); |
||||
vo.setDeptId(key.getId()); |
||||
vo.setDeptName(key.getDeptName()); |
||||
result.add(vo); |
||||
}); |
||||
return result; |
||||
} |
||||
|
||||
/** |
||||
* 获取站点年计划发电量 |
||||
* @param list |
||||
* @param code |
||||
* @return |
||||
*/ |
||||
private float getPlanPowerYear(List<PlanGenerationEntity> list, String code) { |
||||
if(CollectionUtil.isEmpty(list)){ |
||||
return 0f; |
||||
} |
||||
return (float) list.stream().filter(o->code.equals(o.getStationId())).mapToDouble(PlanGenerationEntity::getPlanGeneration).sum(); |
||||
} |
||||
|
||||
/** |
||||
* 站点发电完成率 |
||||
* @param list |
||||
* @param createDept |
||||
* @return |
||||
*/ |
||||
private double getPowerRate(List<HydropowerUnitTargetVo> list, Long createDept ,float planPowerYear) { |
||||
if(CollectionUtil.isEmpty(list) || ObjectUtil.isEmpty(createDept)){ |
||||
return 0.0; |
||||
} |
||||
if(Math.abs(planPowerYear) <= 0){ |
||||
return 0.0; |
||||
} |
||||
double power = list.stream().filter(o->createDept.equals(o.getDeptId())).mapToDouble(HydropowerUnitTargetVo::getPowerYear).sum(); |
||||
if(Math.abs(power) <= 0){ |
||||
return 0.0; |
||||
} |
||||
return BigDecimal.valueOf((float) power / planPowerYear * 100).setScale(2, RoundingMode.HALF_UP).doubleValue(); |
||||
} |
||||
|
||||
/** |
||||
* 设备总数 |
||||
* @param list |
||||
* @param createDept |
||||
* @return |
||||
*/ |
||||
private int getDeviceSum(List<HydropowerUnitRealVo> list, Long createDept,boolean isRun) { |
||||
if(CollectionUtil.isEmpty(list)){ |
||||
return 0; |
||||
} |
||||
if(isRun){ |
||||
return (int) list.stream().filter(o->createDept.equals(o.getDeptId()) && HomePageConstant.OFF.equals(o.getState())).count(); |
||||
} |
||||
return (int) list.stream().filter(o->createDept.equals(o.getDeptId())).count(); |
||||
} |
||||
|
||||
/** |
||||
* 实时负荷 |
||||
* @param list |
||||
* @param createDept |
||||
* @return |
||||
*/ |
||||
private float getRealPowerSum(List<HydropowerUnitRealVo> list, Long createDept) { |
||||
if(CollectionUtil.isEmpty(list)){ |
||||
return 0; |
||||
} |
||||
return (float) list.stream().filter(o->createDept.equals(o.getDeptId())).mapToDouble(o->Double.valueOf(o.getActivePower())).sum(); |
||||
} |
||||
|
||||
/** |
||||
* 负荷单位 |
||||
* @param list |
||||
* @param createDept |
||||
* @return |
||||
*/ |
||||
private String getPowerUnit(List<HydropowerUnitRealVo> list, Long createDept) { |
||||
if(CollectionUtil.isEmpty(list)){ |
||||
return "kW"; |
||||
} |
||||
List<String> units = list.stream().filter(o->createDept.equals(o.getDeptId())).map(HydropowerUnitRealVo::getPowerUnit).collect(Collectors.toList()); |
||||
if(CollectionUtil.isEmpty(units)){ |
||||
return "kW"; |
||||
|
||||
} |
||||
return units.get(0); |
||||
} |
||||
|
||||
|
||||
/** |
||||
* app首页-当班数据 |
||||
* @return |
||||
*/ |
||||
@Override |
||||
public List<AppAreaDutyVo> getDutyData(Long deptId) { |
||||
// 获取当班列表数据
|
||||
List<DutyMainInfoVo> list = this.dutyMainService.getDutyDataV2(deptId); |
||||
if(CollectionUtil.isEmpty(list)){ |
||||
return null; |
||||
} |
||||
// 响应数据
|
||||
return list.stream().map(duty->{ |
||||
AppAreaDutyVo item = new AppAreaDutyVo(); |
||||
// 班组基础数据设置
|
||||
this.settingBase(duty,item); |
||||
// 开始时间、结束时间
|
||||
LocalDateTime localDateTime = LocalDateTime.ofInstant(duty.getDutyDate().toInstant(), ZoneId.systemDefault()); |
||||
LocalDateTime startDate = localDateTime.withHour(duty.getStartTime().getHours()).withMinute(duty.getStartTime().getMinutes()).withSecond(00); |
||||
//LocalDateTime endDate = localDateTime.withHour(duty.getEndTime().getHours()).withMinute(duty.getEndTime().getMinutes()).withSecond(00);
|
||||
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(DateUtil.PATTERN_DATETIME); |
||||
String start = dtf.format(startDate); |
||||
String end = dtf.format(LocalDateTime.now()); |
||||
List<Long> deptList = Collections.singletonList(duty.getCreateDept()); |
||||
// 使用多线程处理数据
|
||||
ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNameFormat("duty_data-pool-%d").build(); |
||||
ExecutorService pool = new ThreadPoolExecutor(5, 5, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy()); |
||||
CountDownLatch countDownLatch = new CountDownLatch(POOL_QUANTITY); |
||||
// 下一班组
|
||||
pool.execute(()-> { |
||||
this.getNextDuty(item,duty.getId()); |
||||
countDownLatch.countDown(); |
||||
}); |
||||
// 缺陷
|
||||
pool.execute(()-> { |
||||
this.getDutyDefect(item,startDate,null); |
||||
countDownLatch.countDown(); |
||||
}); |
||||
// 巡检
|
||||
pool.execute(()-> { |
||||
this.getInspectionTask(item,start,end,deptList); |
||||
countDownLatch.countDown(); |
||||
}); |
||||
// 维护
|
||||
pool.execute(()-> { |
||||
this.getMaintenanceTask(item,start,end,deptList); |
||||
countDownLatch.countDown(); |
||||
}); |
||||
// 检修
|
||||
pool.execute(()-> { |
||||
this.getOverhaulTask(item,start,end,deptList); |
||||
countDownLatch.countDown(); |
||||
}); |
||||
// 等待所有线程执行完成
|
||||
try { |
||||
countDownLatch.await(); |
||||
} catch (InterruptedException e) { |
||||
e.printStackTrace(); |
||||
Thread.currentThread().interrupt(); |
||||
} |
||||
pool.shutdown(); |
||||
// 任务完成率
|
||||
int taskSum = item.getDefectSum() + item.getInspectionTaskCount() + item.getMaintenanceTaskCount() + item.getOverhaulTaskCount(); |
||||
int finishSum = item.getSolvedCount() + item.getInspectionTaskFinishCount() + item.getMaintenanceTaskFinishCount() + item.getOverhaulTaskFinishCount(); |
||||
if(Math.abs(taskSum) <= 0){ |
||||
item.setTaskRate(0.0); |
||||
}else{ |
||||
double taskRate = BigDecimal.valueOf((double)finishSum / (double)taskSum * 100).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); |
||||
item.setTaskRate(taskRate); |
||||
} |
||||
return item; |
||||
}).collect(Collectors.toList()); |
||||
} |
||||
|
||||
/** |
||||
* 班组基础数据设置 |
||||
* @param duty |
||||
* @param item |
||||
*/ |
||||
private void settingBase(DutyMainInfoVo duty, AppAreaDutyVo item) { |
||||
item.setShift(duty.getClassName()); |
||||
item.setTeam(duty.getGroupName()); |
||||
// 班组负责人
|
||||
String managerName = this.getManagerName(duty.getManagerId()); |
||||
item.setTeamLeader(managerName); |
||||
// 班组成员
|
||||
String classMember = this.getClassMemberName(duty.getDutyPersonIds(),duty.getManagerId()); |
||||
item.setClassMember(classMember); |
||||
} |
||||
|
||||
|
||||
|
||||
/** |
||||
* 获取下一班组数据 |
||||
* @param item |
||||
* |
||||
* @param id |
||||
*/ |
||||
private void getNextDuty(AppAreaDutyVo item, Long id) { |
||||
DutyMainInfoVo nextDuty = this.dutyMainService.getNextDutyDataV2(id); |
||||
if(ObjectUtil.isEmpty(nextDuty) || ObjectUtil.isEmpty(nextDuty.getId())){ |
||||
return; |
||||
} |
||||
item.setNextShift(nextDuty.getClassName()); |
||||
item.setNextTeam(nextDuty.getGroupName()); |
||||
// 下一班组负责人
|
||||
String managerName = this.getManagerName(nextDuty.getManagerId()); |
||||
item.setNextTeamLeader(managerName); |
||||
// 下一班组成员
|
||||
String classMember = this.getClassMemberName(nextDuty.getDutyPersonIds(),nextDuty.getManagerId()); |
||||
item.setNextClassMember(classMember); |
||||
} |
||||
|
||||
/** |
||||
* 获取巡检任务数量 |
||||
* @param item |
||||
* @param startDate |
||||
* @param endDate |
||||
*/ |
||||
private void getInspectionTask(AppAreaDutyVo item, String startDate, String endDate, List<Long> deptList) { |
||||
item.setInspectionTaskCount(0); |
||||
item.setInspectionTaskFinishCount(0); |
||||
item.setNotInspectionTaskCount(0); |
||||
// 查询当班巡检任务
|
||||
Map<String, Object> params = new HashMap<>(); |
||||
params.put("startDate",startDate); |
||||
params.put("endDate",endDate); |
||||
params.put("deptList",deptList); |
||||
R<DutyInspectTaskVO> response = inspectTaskReportClient.getDutyInspectTask(params); |
||||
if(!response.isSuccess() || ObjectUtil.isEmpty(response.getData())){ |
||||
return; |
||||
} |
||||
// 赋值
|
||||
item.setInspectionTaskCount(response.getData().getInspectTaskSum()); |
||||
item.setInspectionTaskFinishCount(response.getData().getInspectTaskFinish()); |
||||
item.setNotInspectionTaskCount(response.getData().getNotExecuteTaskCount()); |
||||
} |
||||
|
||||
/** |
||||
* 获取当班日常维护数据 |
||||
* @param item |
||||
* @param start |
||||
* @param end |
||||
* @param deptList |
||||
*/ |
||||
private void getMaintenanceTask(AppAreaDutyVo item, String start, String end, List<Long> deptList) { |
||||
item.setMaintenanceTaskCount(0); |
||||
item.setMaintenanceTaskFinishCount(0); |
||||
item.setNotMaintenanceTaskCount(0); |
||||
// 查询当班日常维护任务
|
||||
List<OperMaintenanceTaskEntity> list = maintenanceTaskService.getMaintenanceTask(start, end, deptList); |
||||
if(CollectionUtil.isEmpty(list)){ |
||||
return; |
||||
} |
||||
// 总数
|
||||
item.setMaintenanceTaskCount(list.size()); |
||||
// 完成数
|
||||
int maintenanceTaskFinishCount = (int) list.stream().filter(o-> MaintenanceConstant.TASK_STATUS_5 == o.getStatus()).count(); |
||||
item.setMaintenanceTaskFinishCount(maintenanceTaskFinishCount); |
||||
// 未完成数
|
||||
int notMaintenanceTaskCount = list.size() - maintenanceTaskFinishCount; |
||||
item.setNotMaintenanceTaskCount(notMaintenanceTaskCount); |
||||
} |
||||
|
||||
/** |
||||
* 获取检修任务数量 |
||||
* @param item |
||||
* @param start |
||||
* @param end |
||||
* @param deptList |
||||
*/ |
||||
private void getOverhaulTask(AppAreaDutyVo item, String start, String end, List<Long> deptList) { |
||||
item.setOverhaulTaskCount(0); |
||||
item.setNotOverhaulTaskCount(0); |
||||
item.setOverhaulTaskFinishCount(0); |
||||
// 查询当班检修任务
|
||||
List<OperAccessTaskEntity> list = accessTaskService.getAccessTask(start, end, deptList); |
||||
if(CollectionUtil.isEmpty(list)){ |
||||
return; |
||||
} |
||||
// 总数
|
||||
item.setOverhaulTaskCount(list.size()); |
||||
// 完成数
|
||||
int overhaulTaskFinishCount = (int) list.stream().filter(o-> AccessConstants.ACCESS_TASK_STATUS_4 == o.getStatus()).count(); |
||||
item.setOverhaulTaskFinishCount(overhaulTaskFinishCount); |
||||
// 未开始数
|
||||
int notOverhaulTaskCount = (int) list.stream().filter(o-> AccessConstants.ACCESS_TASK_STATUS_0 == o.getStatus()).count(); |
||||
item.setNotOverhaulTaskCount(notOverhaulTaskCount); |
||||
} |
||||
|
||||
/** |
||||
* 获取当班缺陷数据 |
||||
* @param item |
||||
* @param startTime |
||||
* @param endTime |
||||
*/ |
||||
private void getDutyDefect(AppAreaDutyVo item, LocalDateTime startTime, LocalDateTime endTime) { |
||||
LambdaQueryWrapper<OperPhenomenonEntity> wrapper = Wrappers.lambdaQuery(); |
||||
wrapper.ge(OperPhenomenonEntity::getCreateTime,startTime); |
||||
//wrapper.le(OperPhenomenonEntity::getCreateTime,endTime);
|
||||
wrapper.eq(OperPhenomenonEntity::getIsDefect, TreatMethodConstant.IS_DEFECT); |
||||
wrapper.eq(OperPhenomenonEntity::getDiscriminateStatus,TreatMethodConstant.AUTO_SCREENED); |
||||
// 查询现象
|
||||
List<OperPhenomenonEntity> list = phenomenonService.list(wrapper); |
||||
if(CollectionUtil.isEmpty(list)){ |
||||
item.setUnsolvedCount(0); |
||||
item.setSolvedCount(0); |
||||
item.setDefectSum(0); |
||||
item.setSeriousCount(0); |
||||
item.setDefectRate(0.0); |
||||
return; |
||||
} |
||||
// 缺陷总数
|
||||
int defectSum = list.size(); |
||||
item.setDefectSum(defectSum); |
||||
// 缺陷已解决数量
|
||||
int solvedCount = (int) list.stream().filter(o->TreatMethodConstant.CONCLUSION_COMPLETED.equals(o.getConclusionStatus())).count(); |
||||
item.setSolvedCount(solvedCount); |
||||
// 缺陷未解决数量
|
||||
int unsolvedCount = list.size() - solvedCount; |
||||
item.setUnsolvedCount(unsolvedCount); |
||||
// 缺陷严重数量
|
||||
int seriousCount = (int) list.stream().filter(o-> TreatMethodConstant.CLASS_I_DEFECT.toString().equals(o.getDefectLevel())).count(); |
||||
item.setSeriousCount(seriousCount); |
||||
// 消缺率
|
||||
double defectRate = BigDecimal.valueOf((double) solvedCount / (double)list.size() * 100).setScale(2, RoundingMode.HALF_UP).doubleValue(); |
||||
item.setDefectRate(defectRate); |
||||
} |
||||
|
||||
/** |
||||
* 获取班组负责人 |
||||
* @param managerId |
||||
* @return |
||||
*/ |
||||
private String getManagerName(String managerId) { |
||||
if(StringUtil.isBlank(managerId)){ |
||||
return ""; |
||||
} |
||||
User user = UserCache.getUser(Long.valueOf(managerId)); |
||||
if (ObjectUtil.isEmpty(user)) { |
||||
return ""; |
||||
} |
||||
return user.getName(); |
||||
} |
||||
|
||||
/** |
||||
* 获取班组成员 |
||||
* @param personIds |
||||
* @param managerId |
||||
* @return |
||||
*/ |
||||
private String getClassMemberName(String personIds,String managerId) { |
||||
if(StringUtil.isBlank(personIds)){ |
||||
return ""; |
||||
} |
||||
StringBuilder builder = new StringBuilder(); |
||||
// 遍历成员
|
||||
for (String item : personIds.split("\\^")) { |
||||
if (item.equals(managerId)) { |
||||
continue; |
||||
} |
||||
User user = UserCache.getUser(Long.valueOf(item)); |
||||
if (ObjectUtil.isEmpty(user)) { |
||||
continue; |
||||
} |
||||
builder.append(user.getName()).append(","); |
||||
} |
||||
if(builder.length() <= 0){ |
||||
return ""; |
||||
} |
||||
return builder.substring(0,builder.toString().length() - 1); |
||||
} |
||||
|
||||
} |
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue