|
|
@ -5,6 +5,7 @@ import cn.hutool.http.HttpResponse; |
|
|
|
import com.alibaba.fastjson.JSON; |
|
|
|
import com.alibaba.fastjson.JSON; |
|
|
|
import com.alibaba.fastjson.JSONArray; |
|
|
|
import com.alibaba.fastjson.JSONArray; |
|
|
|
import com.alibaba.fastjson.JSONObject; |
|
|
|
import com.alibaba.fastjson.JSONObject; |
|
|
|
|
|
|
|
import com.google.common.util.concurrent.ThreadFactoryBuilder; |
|
|
|
import com.hnac.hzims.bigmodel.configuration.BigModelInvokeUrl; |
|
|
|
import com.hnac.hzims.bigmodel.configuration.BigModelInvokeUrl; |
|
|
|
import com.hnac.hzims.bigmodel.entity.FunctionEntity; |
|
|
|
import com.hnac.hzims.bigmodel.entity.FunctionEntity; |
|
|
|
import com.hnac.hzims.bigmodel.function.service.IFunctionService; |
|
|
|
import com.hnac.hzims.bigmodel.function.service.IFunctionService; |
|
|
@ -14,19 +15,26 @@ import com.hnac.hzims.bigmodel.interactive.service.IInteractiveService; |
|
|
|
import com.hnac.hzims.bigmodel.interactive.service.IJumpPageService; |
|
|
|
import com.hnac.hzims.bigmodel.interactive.service.IJumpPageService; |
|
|
|
import com.hnac.hzims.bigmodel.interactive.service.IParamsService; |
|
|
|
import com.hnac.hzims.bigmodel.interactive.service.IParamsService; |
|
|
|
import com.hnac.hzims.bigmodel.interactive.vo.AnswerVO; |
|
|
|
import com.hnac.hzims.bigmodel.interactive.vo.AnswerVO; |
|
|
|
|
|
|
|
import com.hnac.hzims.equipment.feign.IEmInfoClient; |
|
|
|
|
|
|
|
import com.hnac.hzims.equipment.vo.EminfoAndEmParamVo; |
|
|
|
|
|
|
|
import com.hnac.hzims.equipment.vo.RideDeviceVo; |
|
|
|
import com.hnac.hzims.operational.fill.feign.IGenerateClient; |
|
|
|
import com.hnac.hzims.operational.fill.feign.IGenerateClient; |
|
|
|
|
|
|
|
import com.hnac.hzims.operational.main.constant.HomePageConstant; |
|
|
|
import com.hnac.hzims.operational.station.entity.StationEntity; |
|
|
|
import com.hnac.hzims.operational.station.entity.StationEntity; |
|
|
|
import com.hnac.hzims.operational.station.feign.IStationClient; |
|
|
|
import com.hnac.hzims.operational.station.feign.IStationClient; |
|
|
|
|
|
|
|
import com.hnac.hzinfo.datasearch.analyse.IAnalyseDataSearchClient; |
|
|
|
|
|
|
|
import com.hnac.hzinfo.datasearch.analyse.po.AnalyseCodeByAnalyseDataPO; |
|
|
|
|
|
|
|
import com.hnac.hzinfo.datasearch.analyse.po.AnalyzeDataConditionPO; |
|
|
|
|
|
|
|
import com.hnac.hzinfo.datasearch.analyse.vo.AnalyseDataTaosVO; |
|
|
|
|
|
|
|
import com.hnac.hzinfo.datasearch.analyse.vo.AnalyzeDataConditionVO; |
|
|
|
import com.xxl.job.core.log.XxlJobLogger; |
|
|
|
import com.xxl.job.core.log.XxlJobLogger; |
|
|
|
import lombok.RequiredArgsConstructor; |
|
|
|
import lombok.RequiredArgsConstructor; |
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
|
|
|
|
import org.apache.commons.collections4.MapUtils; |
|
|
|
import org.springblade.core.log.exception.ServiceException; |
|
|
|
import org.springblade.core.log.exception.ServiceException; |
|
|
|
import org.springblade.core.log.logger.BladeLogger; |
|
|
|
import org.springblade.core.log.logger.BladeLogger; |
|
|
|
import org.springblade.core.tool.api.R; |
|
|
|
import org.springblade.core.tool.api.R; |
|
|
|
import org.springblade.core.tool.utils.CollectionUtil; |
|
|
|
import org.springblade.core.tool.utils.*; |
|
|
|
import org.springblade.core.tool.utils.Func; |
|
|
|
|
|
|
|
import org.springblade.core.tool.utils.ObjectUtil; |
|
|
|
|
|
|
|
import org.springblade.core.tool.utils.StringUtil; |
|
|
|
|
|
|
|
import org.springblade.system.dto.ControlDTO; |
|
|
|
import org.springblade.system.dto.ControlDTO; |
|
|
|
import org.springblade.system.dto.DeptStationDTO; |
|
|
|
import org.springblade.system.dto.DeptStationDTO; |
|
|
|
import org.springblade.system.feign.IDeptClient; |
|
|
|
import org.springblade.system.feign.IDeptClient; |
|
|
@ -38,7 +46,10 @@ import org.springframework.stereotype.Service; |
|
|
|
import org.springframework.util.Assert; |
|
|
|
import org.springframework.util.Assert; |
|
|
|
|
|
|
|
|
|
|
|
import javax.servlet.http.HttpServletResponse; |
|
|
|
import javax.servlet.http.HttpServletResponse; |
|
|
|
|
|
|
|
import java.time.LocalDateTime; |
|
|
|
|
|
|
|
import java.time.format.DateTimeFormatter; |
|
|
|
import java.util.*; |
|
|
|
import java.util.*; |
|
|
|
|
|
|
|
import java.util.concurrent.*; |
|
|
|
import java.util.stream.Collectors; |
|
|
|
import java.util.stream.Collectors; |
|
|
|
|
|
|
|
|
|
|
|
import static com.hnac.hzims.bigmodel.interactive.constants.FunctionConstants.TypeEnum; |
|
|
|
import static com.hnac.hzims.bigmodel.interactive.constants.FunctionConstants.TypeEnum; |
|
|
@ -55,6 +66,8 @@ public class InteractiveServiceImpl implements IInteractiveService { |
|
|
|
|
|
|
|
|
|
|
|
private final BladeLogger logger; |
|
|
|
private final BladeLogger logger; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private final IEmInfoClient deviceClient; |
|
|
|
|
|
|
|
|
|
|
|
private final IRemoteClient remoteClient; |
|
|
|
private final IRemoteClient remoteClient; |
|
|
|
|
|
|
|
|
|
|
|
private final IStationClient stationClient; |
|
|
|
private final IStationClient stationClient; |
|
|
@ -73,8 +86,12 @@ public class InteractiveServiceImpl implements IInteractiveService { |
|
|
|
|
|
|
|
|
|
|
|
private final RedisTemplate redisTemplate; |
|
|
|
private final RedisTemplate redisTemplate; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private final IAnalyseDataSearchClient analyseDataSearchClient; |
|
|
|
|
|
|
|
|
|
|
|
private final ExtraResolveStrategyService extraResolveStrategyService; |
|
|
|
private final ExtraResolveStrategyService extraResolveStrategyService; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static final ExecutorService pool = new ThreadPoolExecutor(10, 10, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(1024), new ThreadFactoryBuilder().setNameFormat("station-device-generate-%d").build(), new ThreadPoolExecutor.CallerRunsPolicy()); |
|
|
|
|
|
|
|
|
|
|
|
@Value("${fdp.host}") |
|
|
|
@Value("${fdp.host}") |
|
|
|
private String fdpHost; |
|
|
|
private String fdpHost; |
|
|
|
|
|
|
|
|
|
|
@ -303,9 +320,78 @@ public class InteractiveServiceImpl implements IInteractiveService { |
|
|
|
double fill = generateClient.stationGenerateByTime(stationId,startTime,endTime); |
|
|
|
double fill = generateClient.stationGenerateByTime(stationId,startTime,endTime); |
|
|
|
|
|
|
|
|
|
|
|
// 步骤3.查询设备
|
|
|
|
// 步骤3.查询设备
|
|
|
|
|
|
|
|
List<RideDeviceVo> devices = deviceClient.rideDevices(Collections.singletonList(station.getData().getRefDept())); |
|
|
|
|
|
|
|
if(CollectionUtil.isEmpty(devices)){ |
|
|
|
|
|
|
|
return fill; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 步骤4.遍历设备查询发电量
|
|
|
|
// 步骤4.遍历设备查询发电量
|
|
|
|
|
|
|
|
// 监控线程执行完后返回结果
|
|
|
|
|
|
|
|
CountDownLatch countDownLatch = new CountDownLatch(devices.size()); |
|
|
|
|
|
|
|
List<Double> deviceGenerate = new CopyOnWriteArrayList(); |
|
|
|
|
|
|
|
for(RideDeviceVo device : devices){ |
|
|
|
|
|
|
|
pool.submit(()->{ |
|
|
|
|
|
|
|
deviceGenerate.add(this.periodTargetFloat(startTime,endTime,5,6,device.getNumber(),device.getRide(), HomePageConstant.HYDROPOWER_GENERATE_POWER)); |
|
|
|
|
|
|
|
}); |
|
|
|
|
|
|
|
countDownLatch.countDown(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
//所有模板数据获取完成后释放锁
|
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
countDownLatch.await(); |
|
|
|
|
|
|
|
} catch (InterruptedException e) { |
|
|
|
|
|
|
|
e.printStackTrace(); |
|
|
|
|
|
|
|
Thread.currentThread().interrupt(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return fill + deviceGenerate.stream().mapToDouble(Double::doubleValue).sum(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return fill; |
|
|
|
/*** |
|
|
|
|
|
|
|
* 指标数据列表查询 |
|
|
|
|
|
|
|
* @param startTime 开始时间 |
|
|
|
|
|
|
|
* @param endTime 结束时间 |
|
|
|
|
|
|
|
* @param accessRules 取数规则 : 0=最早值 1=最大值 2=最小值 3=平均值 4=和值 5=差值 6=最新值 |
|
|
|
|
|
|
|
* @param cycleType 间隔周期 : 0-> 秒 1-> 分 2-> 小时 3->天 4-> 周 5-> 月 6-> 年 |
|
|
|
|
|
|
|
* @param deviceCode 设备编号 |
|
|
|
|
|
|
|
* @param ride 配电比 |
|
|
|
|
|
|
|
* @param signages 指标 |
|
|
|
|
|
|
|
* @return |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
private Double periodTargetFloat(String startTime, String endTime, Integer accessRules, Integer cycleType, String deviceCode,Double ride,String signages) { |
|
|
|
|
|
|
|
AnalyseCodeByAnalyseDataPO po = new AnalyseCodeByAnalyseDataPO(); |
|
|
|
|
|
|
|
List<AnalyzeDataConditionPO> signboardConditions = new ArrayList<>(); |
|
|
|
|
|
|
|
AnalyzeDataConditionPO analyzeDataConditionPO = new AnalyzeDataConditionPO(); |
|
|
|
|
|
|
|
analyzeDataConditionPO.setFull(1); |
|
|
|
|
|
|
|
po.setDeviceCode(deviceCode); |
|
|
|
|
|
|
|
analyzeDataConditionPO.setSignages(signages); |
|
|
|
|
|
|
|
analyzeDataConditionPO.setKeepFigures(2); |
|
|
|
|
|
|
|
analyzeDataConditionPO.setAccessRules(accessRules); |
|
|
|
|
|
|
|
analyzeDataConditionPO.setSaveTimeType(cycleType); |
|
|
|
|
|
|
|
// 间隔
|
|
|
|
|
|
|
|
analyzeDataConditionPO.setTimeInterval(1); |
|
|
|
|
|
|
|
analyzeDataConditionPO.setBeginTime(LocalDateTime.parse(DateUtil.format(new Date(), startTime), DateTimeFormatter.ofPattern(DateUtil.PATTERN_DATETIME))); |
|
|
|
|
|
|
|
analyzeDataConditionPO.setEndTime(LocalDateTime.parse(DateUtil.format(new Date(), endTime), DateTimeFormatter.ofPattern(DateUtil.PATTERN_DATETIME))); |
|
|
|
|
|
|
|
signboardConditions.add(analyzeDataConditionPO); |
|
|
|
|
|
|
|
po.setSignboardConditions(signboardConditions); |
|
|
|
|
|
|
|
R<List<AnalyzeDataConditionVO>> result = analyseDataSearchClient.getAnalyzeDataByAnalyzeCodeAndSignages(po); |
|
|
|
|
|
|
|
if (!result.isSuccess() || CollectionUtil.isEmpty(result.getData())) { |
|
|
|
|
|
|
|
return 0.0; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
List<AnalyzeDataConditionVO> records = result.getData(); |
|
|
|
|
|
|
|
if(CollectionUtil.isEmpty(records)){ |
|
|
|
|
|
|
|
return 0.0; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
AnalyzeDataConditionVO analyzeDataConditionVO = records.get(0); |
|
|
|
|
|
|
|
if (ObjectUtil.isEmpty(analyzeDataConditionVO)) { |
|
|
|
|
|
|
|
return 0.0; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
List<AnalyseDataTaosVO> analyseDataTaosVOList = analyzeDataConditionVO.getList(); |
|
|
|
|
|
|
|
if (CollectionUtil.isEmpty(analyseDataTaosVOList)) { |
|
|
|
|
|
|
|
return 0.0; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
AnalyseDataTaosVO analyseDataTaosVO = analyzeDataConditionVO.getList().get(0); |
|
|
|
|
|
|
|
if (ObjectUtil.isEmpty(analyseDataTaosVO) || StringUtil.isBlank(analyseDataTaosVO.getVal())) { |
|
|
|
|
|
|
|
return 0.0; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return Double.parseDouble(analyseDataTaosVO.getVal()) * ride; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|