From a3771fc40fc1c36307cf84cdc6a0179bd22bf6ef Mon Sep 17 00:00:00 2001 From: liwen Date: Mon, 22 Jul 2024 15:01:53 +0800 Subject: [PATCH 01/12] =?UTF-8?q?fix:=20=E8=A7=A3=E5=86=B3=E8=BD=A6?= =?UTF-8?q?=E8=BE=86=E9=87=8C=E7=A8=8B=E7=BB=9F=E8=AE=A1=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98=EF=BC=88=E7=BC=BA=E5=B0=91=E6=8E=88?= =?UTF-8?q?=E6=9D=83=E5=AD=97=E6=AE=B5=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/hnac/hzims/safeproduct/mapper/CarMapper.xml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/mapper/CarMapper.xml b/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/mapper/CarMapper.xml index 61bea9f..82c6fae 100644 --- a/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/mapper/CarMapper.xml +++ b/hzims-service/safeproduct/src/main/java/com/hnac/hzims/safeproduct/mapper/CarMapper.xml @@ -4,7 +4,7 @@ SELECT - t1.unit, t1.car_brand, t1.plate_number, DATE_FORMAT(t2.end_time, '%m') as dateTime, sum(t2.miles) as miles + t1.unit, t1.car_brand, t1.plate_number, DATE_FORMAT(t2.end_time, '%m') as dateTime, sum(t2.miles) as miles, + t1.create_user, t1.create_dept FROM hzims_car t1 LEFT JOIN hzims_car_used_record t2 ON t1.id = t2.car_id From c74dea48bc0852ff36c23618558463ad89038f84 Mon Sep 17 00:00:00 2001 From: yang_shj <1069818635@QQ.com> Date: Tue, 23 Jul 2024 16:43:48 +0800 Subject: [PATCH 02/12] =?UTF-8?q?#=E6=96=B0=E7=89=88=E8=BF=913=E5=B9=B4?= =?UTF-8?q?=E5=8F=91=E7=94=B5=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scheduled/GenerationScheduledTask.java | 14 ++++++ .../operation/home/ObtainGenerationService.java | 4 ++ .../home/impl/ObtainGenerationServiceImpl.java | 56 ++++++++++++++++++++++ 3 files changed, 74 insertions(+) diff --git a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/GenerationScheduledTask.java b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/GenerationScheduledTask.java index bd21b68..b574b22 100644 --- a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/GenerationScheduledTask.java +++ b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/GenerationScheduledTask.java @@ -69,4 +69,18 @@ public class GenerationScheduledTask { return new ReturnT<>("SUCCESS"); } + /** + * 新版-近3年发电量 + * @param param + * @return + */ + @XxlJob(LOAD_THREE_YEAR_POWER_GENERATION) + public ReturnT loadThreeYearPowerGeneration(String param) { + if (Func.isBlank(param)) { + param = DateUtil.format(new Date(), "yyyy-MM"); + } + service.loadThreeYearPowerGeneration(param,Arrays.asList(HomePageConstant.HYDROPOWER,HomePageConstant.PHOTOVOLTAIC),2,3); + return new ReturnT<>("SUCCESS"); + } + } \ No newline at end of file diff --git a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/ObtainGenerationService.java b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/ObtainGenerationService.java index 61c6fc7..50210c2 100644 --- a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/ObtainGenerationService.java +++ b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/ObtainGenerationService.java @@ -1,5 +1,7 @@ package com.hnac.hzims.scheduled.service.operation.home; +import java.util.List; + /** * @author ysj */ @@ -10,4 +12,6 @@ public interface ObtainGenerationService { void thirtyDayPowerGeneration(String param); void thisDayPowerGeneration(String param); + + void loadThreeYearPowerGeneration(String param, List types, Integer serveType,int year); } diff --git a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/ObtainGenerationServiceImpl.java b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/ObtainGenerationServiceImpl.java index 632c2f2..a6ff70d 100644 --- a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/ObtainGenerationServiceImpl.java +++ b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/ObtainGenerationServiceImpl.java @@ -2,6 +2,7 @@ package com.hnac.hzims.scheduled.service.operation.home.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.ThirtyGenerationEntity; @@ -18,6 +19,7 @@ import com.hnac.hzims.scheduled.service.operation.home.ObtainGenerationService; import com.hnac.hzims.scheduled.service.operation.plate.DataService; import com.hnac.hzims.scheduled.service.operation.station.StationService; import com.hnac.hzinfo.datasearch.analyse.vo.AnalyseDataTaosVO; +import io.undertow.util.CopyOnWriteMap; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springblade.core.tool.utils.CollectionUtil; @@ -59,6 +61,8 @@ public class ObtainGenerationServiceImpl implements ObtainGenerationService { @Value("${hzims.equipment.emInfo.emInfoList}") public String device_cache_cofig_final; + private final static String recent_year_power_data = "hzims:operation:key:power:data"; + private static final ExecutorService pool = new ThreadPoolExecutor(10, 10, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(1024), new ThreadFactoryBuilder().setNameFormat("obtain-generation-pool-%d").build() , new ThreadPoolExecutor.CallerRunsPolicy()); /** @@ -437,4 +441,56 @@ public class ObtainGenerationServiceImpl implements ObtainGenerationService { private static Integer countStep(Integer size) { return (size + 3 - 1) / 3; } + + + /** + * 新版-近3年发电量 + * @param param + */ + @Override + public void loadThreeYearPowerGeneration(String param, List types, Integer serveType,int year) { + // 站点查询 + List stations = stationService.list(new LambdaQueryWrapper() {{ + if (CollectionUtil.isNotEmpty(types)) { + in(StationEntity::getType, types); + } + }}); + // 开始时间 + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.MONTH, -calendar.get(Calendar.MONTH) + 12); + calendar.add(Calendar.DATE, -calendar.get(Calendar.DATE) + 1); + String end = DateUtil.format(calendar.getTime(),DateUtil.PATTERN_DATE); + // 结束日期 + calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR) - year); + calendar.add(Calendar.MONTH, -calendar.get(Calendar.MONTH)); + String start = DateUtil.format(calendar.getTime(),DateUtil.PATTERN_DATE); + + List generations = threeGenerateService.list(Wrappers.lambdaQuery() + .in(ThreeGenerationEntity::getStationId,stations.stream().map(StationEntity::getCode).collect(Collectors.toList())) + .ge(ThreeGenerationEntity::getStrMonth,start) + .le(ThreeGenerationEntity::getStrMonth,end) + ); + if(CollectionUtil.isEmpty(generations)){ + return; + } + Map> map = generations.stream().collect(Collectors.groupingBy(ThreeGenerationEntity::getStationId)); + // 定义接收参数 + Map> container = new HashMap<>(); + map.forEach((key, value) -> { + Optional optional = stations.stream().filter(o -> o.getCode().equals(key)).findFirst(); + if (!optional.isPresent()) { + return; + } + // 根据月份分组 + Map> months = value.stream().collect(Collectors.groupingBy(ThreeGenerationEntity::getStrMonth)); + // 接收月份发电量对象 + Map son = new HashMap<>(); + // 遍历月份数据 + months.entrySet().stream().sorted(Map.Entry.comparingByKey()).forEach(iter -> { + son.put(iter.getKey(), (float) iter.getValue().stream().mapToDouble(o -> o.getGenerate().doubleValue()).sum()); + }); + container.put(optional.get().getId(), son); + }); + redisTemplate.opsForValue().set(recent_year_power_data, container); + } } \ No newline at end of file From da774a20ef1b88686c8645420ca60f6070622733 Mon Sep 17 00:00:00 2001 From: yang_shj <1069818635@QQ.com> Date: Tue, 23 Jul 2024 16:43:57 +0800 Subject: [PATCH 03/12] =?UTF-8?q?#=E6=96=B0=E7=89=88=E8=BF=913=E5=B9=B4?= =?UTF-8?q?=E5=8F=91=E7=94=B5=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/hnac/hzims/operational/main/constant/ScheduledConstant.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/constant/ScheduledConstant.java b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/constant/ScheduledConstant.java index c5b9176..5dee662 100644 --- a/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/constant/ScheduledConstant.java +++ b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/constant/ScheduledConstant.java @@ -11,4 +11,6 @@ public interface ScheduledConstant { String THIRTY_DAY_POWER_GENERATION = "thirtyDayPowerGeneration"; String THIS_DAY_POWER_GENERATION = "thisDayPowerGeneration"; + + String LOAD_THREE_YEAR_POWER_GENERATION = "loadThreeYearPowerGeneration"; } \ No newline at end of file From 4abd5e9c815cbbfccfe97fc0b2bca612b2b24991 Mon Sep 17 00:00:00 2001 From: yang_shj <1069818635@QQ.com> Date: Wed, 24 Jul 2024 10:50:46 +0800 Subject: [PATCH 04/12] =?UTF-8?q?#=E6=B0=B4=E4=BD=8D=E8=B0=83=E5=BA=A6?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E6=89=A7=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scheduled/RealTargetScheduledTask.java | 1 + .../home/impl/ObtainGenerationServiceImpl.java | 25 +++++++++++----------- .../operation/home/impl/RealTargetServiceImpl.java | 11 ++++++---- 3 files changed, 20 insertions(+), 17 deletions(-) diff --git a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/RealTargetScheduledTask.java b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/RealTargetScheduledTask.java index 4e68cab..9591c87 100644 --- a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/RealTargetScheduledTask.java +++ b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/RealTargetScheduledTask.java @@ -8,6 +8,7 @@ import lombok.extern.slf4j.Slf4j; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.Arrays; diff --git a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/ObtainGenerationServiceImpl.java b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/ObtainGenerationServiceImpl.java index a6ff70d..0259de2 100644 --- a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/ObtainGenerationServiceImpl.java +++ b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/ObtainGenerationServiceImpl.java @@ -19,7 +19,6 @@ import com.hnac.hzims.scheduled.service.operation.home.ObtainGenerationService; import com.hnac.hzims.scheduled.service.operation.plate.DataService; import com.hnac.hzims.scheduled.service.operation.station.StationService; import com.hnac.hzinfo.datasearch.analyse.vo.AnalyseDataTaosVO; -import io.undertow.util.CopyOnWriteMap; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springblade.core.tool.utils.CollectionUtil; @@ -65,6 +64,7 @@ public class ObtainGenerationServiceImpl implements ObtainGenerationService { private static final ExecutorService pool = new ThreadPoolExecutor(10, 10, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(1024), new ThreadFactoryBuilder().setNameFormat("obtain-generation-pool-%d").build() , new ThreadPoolExecutor.CallerRunsPolicy()); + /** * 设备近3年发电量数据 : 按月分割 * @param param @@ -135,8 +135,8 @@ public class ObtainGenerationServiceImpl implements ObtainGenerationService { CountDownLatch countDownLatch = new CountDownLatch(limits.size()); List saves = new CopyOnWriteArrayList<>(); for(List item : limits){ - try{ - pool.submit(()->{ + pool.submit(()->{ + try{ item.forEach(station->{ // 站点设备集合 List eminfos = devices.stream().filter(device -> device.getCreateDept().equals(station.getRefDept())).collect(Collectors.toList()); @@ -179,10 +179,11 @@ public class ObtainGenerationServiceImpl implements ObtainGenerationService { }); countDownLatch.countDown(); log.error("save_generation_execute_complete: {}" ,item.stream().map(StationEntity::getName).collect(Collectors.toList())); - }); - }catch (Exception e){ - log.error("save_generation_execute_complete_error : {}" ,e.getMessage()); - } + }catch (Exception e){ + countDownLatch.countDown(); + log.error("save_generation_execute_complete_error : {}" ,e.getMessage()); + } + }); } // 等待所有线程执行完成 try { @@ -220,9 +221,7 @@ public class ObtainGenerationServiceImpl implements ObtainGenerationService { calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR) - 3); calendar.add(Calendar.MONTH, -calendar.get(Calendar.MONTH)); String start = DateUtil.format(calendar.getTime(),DateUtil.PATTERN_DATE) + " 00:00:00"; - stations.forEach(station->{ - this.threeGenerateService.saveBatch(this.saveFillGenerate(station,start,end)); - }); + stations.forEach(station-> this.threeGenerateService.saveBatch(this.saveFillGenerate(station,start,end))); } /** @@ -310,6 +309,7 @@ public class ObtainGenerationServiceImpl implements ObtainGenerationService { log.error("save_generation_execute_complete: {}" ,item.stream().map(StationEntity::getName).collect(Collectors.toList())); }); }catch (Exception e){ + countDownLatch.countDown(); log.error("save_generation_execute_complete_error : {}" ,e.getMessage()); } } @@ -382,6 +382,7 @@ public class ObtainGenerationServiceImpl implements ObtainGenerationService { log.error("save_generation_execute_complete: {}" ,item.stream().map(StationEntity::getName).collect(Collectors.toList())); }); }catch (Exception e){ + countDownLatch.countDown(); log.error("save_generation_execute_complete_error : {}" ,e.getMessage()); } } @@ -486,9 +487,7 @@ public class ObtainGenerationServiceImpl implements ObtainGenerationService { // 接收月份发电量对象 Map son = new HashMap<>(); // 遍历月份数据 - months.entrySet().stream().sorted(Map.Entry.comparingByKey()).forEach(iter -> { - son.put(iter.getKey(), (float) iter.getValue().stream().mapToDouble(o -> o.getGenerate().doubleValue()).sum()); - }); + months.entrySet().stream().sorted(Map.Entry.comparingByKey()).forEach(iter -> son.put(iter.getKey(), (float) iter.getValue().stream().mapToDouble(o -> o.getGenerate().doubleValue()).sum())); container.put(optional.get().getId(), son); }); redisTemplate.opsForValue().set(recent_year_power_data, container); diff --git a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/RealTargetServiceImpl.java b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/RealTargetServiceImpl.java index 67f90ce..52e5fd1 100644 --- a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/RealTargetServiceImpl.java +++ b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/RealTargetServiceImpl.java @@ -127,7 +127,7 @@ public class RealTargetServiceImpl implements RealTargetService { private final static String load_photovoltaic_target_key = "hzims:operation:photovoltaic:target:key"; // 创建线程池 - private static final ExecutorService pool = new ThreadPoolExecutor(20, 20, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(1024), new ThreadFactoryBuilder().setNameFormat("load-power-data-pool-%d").build() , new ThreadPoolExecutor.CallerRunsPolicy()); + private static final ExecutorService pool = new ThreadPoolExecutor(10, 10, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<>(1024), new ThreadFactoryBuilder().setNameFormat("load-power-data-pool-%d").build() , new ThreadPoolExecutor.CallerRunsPolicy()); @Override public void loadEmInfo(String param) { @@ -573,19 +573,22 @@ public class RealTargetServiceImpl implements RealTargetService { waterLevelVo.setRearCurveMap(rearCurveMap); list.add(waterLevelVo); } + log.error("load_water_level : 线程执行完成 {}", item.getInstanceCode()); countDownLatch.countDown(); - }catch (Exception exception){ - log.error("load_water_level_error : {}",exception.getMessage()); + } catch (Exception exception) { + log.error("load_water_level_error : 线程执行失败 {}", exception.getMessage()); countDownLatch.countDown(); } }); } try { + log.error("load_water_level :等待线程执行"); countDownLatch.await(); } catch (InterruptedException e) { e.printStackTrace(); Thread.currentThread().interrupt(); } + log.error("load_water_level :线程执行完成"); redisTemplate.opsForValue().set(loadwater_level_key,list); } @@ -1132,7 +1135,7 @@ public class RealTargetServiceImpl implements RealTargetService { } /** - * 获取水位当年数据 + * 获取水位当日数据 * @param instanceCode * @param signage * @return From a919638092a4c2ed5e0c6546ceee23af5630e5b2 Mon Sep 17 00:00:00 2001 From: yang_shj <1069818635@QQ.com> Date: Wed, 24 Jul 2024 12:29:35 +0800 Subject: [PATCH 05/12] =?UTF-8?q?#=E6=B0=B4=E4=BD=8D=E8=B0=83=E5=BA=A6?= =?UTF-8?q?=E4=BB=BB=E5=8A=A1=E6=89=A7=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hnac/hzims/scheduled/ScheduledApplication.java | 4 +- .../scheduled/RealTargetScheduledTask.java | 7 +- .../operation/home/impl/RealTargetServiceImpl.java | 78 ++++++++++++---------- 3 files changed, 49 insertions(+), 40 deletions(-) diff --git a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/ScheduledApplication.java b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/ScheduledApplication.java index 6b524df..676adbb 100644 --- a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/ScheduledApplication.java +++ b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/ScheduledApplication.java @@ -21,11 +21,11 @@ import javax.annotation.Resource; @Resource public class ScheduledApplication extends SpringBootServletInitializer { public static void main(String[] args) { - BladeApplication.run("hzims-scheduled", ScheduledApplication.class, args); + BladeApplication.run("hzims-scheduled-ysj", ScheduledApplication.class, args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { - return BladeApplication.createSpringApplicationBuilder(builder, "hzims-scheduled", ScheduledApplication.class); + return BladeApplication.createSpringApplicationBuilder(builder, "hzims-scheduled-ysj", ScheduledApplication.class); } } diff --git a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/RealTargetScheduledTask.java b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/RealTargetScheduledTask.java index 9591c87..a2b873f 100644 --- a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/RealTargetScheduledTask.java +++ b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/RealTargetScheduledTask.java @@ -110,9 +110,10 @@ public class RealTargetScheduledTask { /** * 水利-站点水位数据 */ - @XxlJob(LOAD_WATER_LEVEL) - //@Scheduled(cron = "0/40 * * * * ? ") - public ReturnT loadWaterLevel(String param) { + //@XxlJob(LOAD_WATER_LEVEL) + @Scheduled(cron = "0/40 * * * * ? ") + public ReturnT loadWaterLevel() { + String param = ""; if (Func.isBlank(param)) { param = DateUtil.format(new Date(), "yyyy-MM"); } diff --git a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/RealTargetServiceImpl.java b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/RealTargetServiceImpl.java index 52e5fd1..522184b 100644 --- a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/RealTargetServiceImpl.java +++ b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/RealTargetServiceImpl.java @@ -545,40 +545,9 @@ public class RealTargetServiceImpl implements RealTargetService { List list = new CopyOnWriteArrayList<>(); CountDownLatch countDownLatch = new CountDownLatch(modelList.size()); for(HzimsAnalyzeModelStationEntity item : modelList){ - pool.submit(() -> { - try{ - List multiAnalyzeCodePOList=new ArrayList<>(); - MultiAnalyzeCodePO multiAnalyzeCodePO=new MultiAnalyzeCodePO(); - multiAnalyzeCodePO.setDeviceCode(item.getInstanceCode()); - multiAnalyzeCodePO.setSignages(Collections.singletonList(HomePageConstant.FRONT_WATER_LEVEL)); - multiAnalyzeCodePOList.add(multiAnalyzeCodePO); - R>result=analyseDataSearchClient.getAnalyzeCodeBySignages(multiAnalyzeCodePOList); - if(result.isSuccess() && CollectionUtil.isNotEmpty(result.getData())){ - WaterLevelVo waterLevelVo=new WaterLevelVo(); - waterLevelVo.setStationCode(item.getStationId()); - // 前水位 - double frontWaterLevel=this.getWaterLevel(item.getInstanceCode(),HomePageConstant.FRONT_WATER_LEVEL); - waterLevelVo.setFrontWaterLevel(frontWaterLevel); - // 后水位 - double rearWaterLevel=this.getWaterLevel(item.getInstanceCode(),HomePageConstant.REAR_WATER_LEVEL); - waterLevelVo.setRearWaterLevel(rearWaterLevel); - // 下泄流量 - double dischargeFlow=this.getWaterLevel(item.getInstanceCode(),HomePageConstant.DISCHARGE_FLOW); - waterLevelVo.setDischargeFlow(dischargeFlow); - // 前水位当日曲线 - Map frontCurveMap=this.getWaterLevelMap(item.getInstanceCode(),HomePageConstant.FRONT_WATER_LEVEL); - waterLevelVo.setFrontCurveMap(frontCurveMap); - // 后水位当日曲线 - Map rearCurveMap=this.getWaterLevelMap(item.getInstanceCode(),HomePageConstant.REAR_WATER_LEVEL); - waterLevelVo.setRearCurveMap(rearCurveMap); - list.add(waterLevelVo); - } - log.error("load_water_level : 线程执行完成 {}", item.getInstanceCode()); - countDownLatch.countDown(); - } catch (Exception exception) { - log.error("load_water_level_error : 线程执行失败 {}", exception.getMessage()); - countDownLatch.countDown(); - } + pool.execute(() -> { + this.queryWaterLeve(list,item); + countDownLatch.countDown(); }); } try { @@ -588,11 +557,50 @@ public class RealTargetServiceImpl implements RealTargetService { e.printStackTrace(); Thread.currentThread().interrupt(); } - log.error("load_water_level :线程执行完成"); + log.error("load_water_level :线程执行结束"); redisTemplate.opsForValue().set(loadwater_level_key,list); } /** + * 水位数据查询 + * @param list + * @param item + */ + private void queryWaterLeve(List list,HzimsAnalyzeModelStationEntity item) { + try{ + List multiAnalyzeCodePOList=new ArrayList<>(); + MultiAnalyzeCodePO multiAnalyzeCodePO=new MultiAnalyzeCodePO(); + multiAnalyzeCodePO.setDeviceCode(item.getInstanceCode()); + multiAnalyzeCodePO.setSignages(Collections.singletonList(HomePageConstant.FRONT_WATER_LEVEL)); + multiAnalyzeCodePOList.add(multiAnalyzeCodePO); + R>result=analyseDataSearchClient.getAnalyzeCodeBySignages(multiAnalyzeCodePOList); + if(result.isSuccess() && CollectionUtil.isNotEmpty(result.getData())){ + WaterLevelVo waterLevelVo=new WaterLevelVo(); + waterLevelVo.setStationCode(item.getStationId()); + // 前水位 + double frontWaterLevel=this.getWaterLevel(item.getInstanceCode(),HomePageConstant.FRONT_WATER_LEVEL); + waterLevelVo.setFrontWaterLevel(frontWaterLevel); + // 后水位 + double rearWaterLevel=this.getWaterLevel(item.getInstanceCode(),HomePageConstant.REAR_WATER_LEVEL); + waterLevelVo.setRearWaterLevel(rearWaterLevel); + // 下泄流量 + double dischargeFlow=this.getWaterLevel(item.getInstanceCode(),HomePageConstant.DISCHARGE_FLOW); + waterLevelVo.setDischargeFlow(dischargeFlow); + // 前水位当日曲线 + Map frontCurveMap=this.getWaterLevelMap(item.getInstanceCode(),HomePageConstant.FRONT_WATER_LEVEL); + waterLevelVo.setFrontCurveMap(frontCurveMap); + // 后水位当日曲线 + Map rearCurveMap=this.getWaterLevelMap(item.getInstanceCode(),HomePageConstant.REAR_WATER_LEVEL); + waterLevelVo.setRearCurveMap(rearCurveMap); + list.add(waterLevelVo); + } + log.error("load_water_level : 小节线程执行完成 {}", item.getInstanceCode()); + } catch (Exception exception) { + log.error("load_water_level_error : 线程执行失败 {}", exception.getMessage()); + } + } + + /** * 光伏站-逆变器实时加载 * * @param param From 1aa0c912a34cc294304ef386efb342e7dd6ba6db Mon Sep 17 00:00:00 2001 From: yang_shj <1069818635@QQ.com> Date: Wed, 24 Jul 2024 16:13:04 +0800 Subject: [PATCH 06/12] =?UTF-8?q?#sdk=E7=89=88=E6=9C=AC=E5=8D=87=E7=BA=A7f?= =?UTF-8?q?ix.8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hnac/hzims/scheduled/ScheduledApplication.java | 4 +- .../scheduled/RealTargetScheduledTask.java | 7 +- .../operation/home/impl/RealTargetServiceImpl.java | 81 ++++++++++------------ pom.xml | 15 ++-- 4 files changed, 50 insertions(+), 57 deletions(-) diff --git a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/ScheduledApplication.java b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/ScheduledApplication.java index 676adbb..6b524df 100644 --- a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/ScheduledApplication.java +++ b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/ScheduledApplication.java @@ -21,11 +21,11 @@ import javax.annotation.Resource; @Resource public class ScheduledApplication extends SpringBootServletInitializer { public static void main(String[] args) { - BladeApplication.run("hzims-scheduled-ysj", ScheduledApplication.class, args); + BladeApplication.run("hzims-scheduled", ScheduledApplication.class, args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { - return BladeApplication.createSpringApplicationBuilder(builder, "hzims-scheduled-ysj", ScheduledApplication.class); + return BladeApplication.createSpringApplicationBuilder(builder, "hzims-scheduled", ScheduledApplication.class); } } diff --git a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/RealTargetScheduledTask.java b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/RealTargetScheduledTask.java index a2b873f..9591c87 100644 --- a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/RealTargetScheduledTask.java +++ b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/RealTargetScheduledTask.java @@ -110,10 +110,9 @@ public class RealTargetScheduledTask { /** * 水利-站点水位数据 */ - //@XxlJob(LOAD_WATER_LEVEL) - @Scheduled(cron = "0/40 * * * * ? ") - public ReturnT loadWaterLevel() { - String param = ""; + @XxlJob(LOAD_WATER_LEVEL) + //@Scheduled(cron = "0/40 * * * * ? ") + public ReturnT loadWaterLevel(String param) { if (Func.isBlank(param)) { param = DateUtil.format(new Date(), "yyyy-MM"); } diff --git a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/RealTargetServiceImpl.java b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/RealTargetServiceImpl.java index 522184b..0392d17 100644 --- a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/RealTargetServiceImpl.java +++ b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/RealTargetServiceImpl.java @@ -1,5 +1,6 @@ package com.hnac.hzims.scheduled.service.operation.home.impl; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.TypeReference; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -39,6 +40,7 @@ import com.hnac.hzinfo.sdk.core.response.Result; import com.hnac.hzinfo.sdk.v5.device.DeviceDataClient; import com.hnac.hzinfo.sdk.v5.device.dto.ReductionDataDTO; import com.hnac.hzinfo.sdk.v5.device.vo.ReductionDataVO; +import com.xxl.job.core.log.XxlJobLogger; import io.undertow.util.CopyOnWriteMap; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -546,59 +548,52 @@ public class RealTargetServiceImpl implements RealTargetService { CountDownLatch countDownLatch = new CountDownLatch(modelList.size()); for(HzimsAnalyzeModelStationEntity item : modelList){ pool.execute(() -> { - this.queryWaterLeve(list,item); - countDownLatch.countDown(); + try{ + List multiAnalyzeCodePOList = new ArrayList<>(); + MultiAnalyzeCodePO multiAnalyzeCodePO = new MultiAnalyzeCodePO(); + multiAnalyzeCodePO.setDeviceCode(item.getInstanceCode()); + multiAnalyzeCodePO.setSignages(Collections.singletonList(HomePageConstant.FRONT_WATER_LEVEL)); + multiAnalyzeCodePOList.add(multiAnalyzeCodePO); + R> result = analyseDataSearchClient.getAnalyzeCodeBySignages(multiAnalyzeCodePOList); + if(result.isSuccess() && CollectionUtil.isNotEmpty(result.getData())){ + WaterLevelVo waterLevelVo=new WaterLevelVo(); + waterLevelVo.setStationCode(item.getStationId()); + // 前水位 + double frontWaterLevel=this.getWaterLevel(item.getInstanceCode(),HomePageConstant.FRONT_WATER_LEVEL); + waterLevelVo.setFrontWaterLevel(frontWaterLevel); + // 后水位 + double rearWaterLevel=this.getWaterLevel(item.getInstanceCode(),HomePageConstant.REAR_WATER_LEVEL); + waterLevelVo.setRearWaterLevel(rearWaterLevel); + // 下泄流量 + double dischargeFlow=this.getWaterLevel(item.getInstanceCode(),HomePageConstant.DISCHARGE_FLOW); + waterLevelVo.setDischargeFlow(dischargeFlow); + // 前水位当日曲线 + Map frontCurveMap=this.getWaterLevelMap(item.getInstanceCode(),HomePageConstant.FRONT_WATER_LEVEL); + waterLevelVo.setFrontCurveMap(frontCurveMap); + // 后水位当日曲线 + Map rearCurveMap=this.getWaterLevelMap(item.getInstanceCode(),HomePageConstant.REAR_WATER_LEVEL); + waterLevelVo.setRearCurveMap(rearCurveMap); + list.add(waterLevelVo); + } + countDownLatch.countDown(); + XxlJobLogger.log("load_water_level : 子线程执行完成 {}", item.getInstanceCode()); + } catch (Exception exception) { + countDownLatch.countDown(); + XxlJobLogger.log("load_water_level_error : 子线程执行失败 {}", exception.getMessage()); + } }); - } + } try { - log.error("load_water_level :等待线程执行"); + XxlJobLogger.log("load_water_level :等待线程执行"); countDownLatch.await(); } catch (InterruptedException e) { e.printStackTrace(); Thread.currentThread().interrupt(); } - log.error("load_water_level :线程执行结束"); + XxlJobLogger.log("load_water_level :线程执行结束"); redisTemplate.opsForValue().set(loadwater_level_key,list); } - /** - * 水位数据查询 - * @param list - * @param item - */ - private void queryWaterLeve(List list,HzimsAnalyzeModelStationEntity item) { - try{ - List multiAnalyzeCodePOList=new ArrayList<>(); - MultiAnalyzeCodePO multiAnalyzeCodePO=new MultiAnalyzeCodePO(); - multiAnalyzeCodePO.setDeviceCode(item.getInstanceCode()); - multiAnalyzeCodePO.setSignages(Collections.singletonList(HomePageConstant.FRONT_WATER_LEVEL)); - multiAnalyzeCodePOList.add(multiAnalyzeCodePO); - R>result=analyseDataSearchClient.getAnalyzeCodeBySignages(multiAnalyzeCodePOList); - if(result.isSuccess() && CollectionUtil.isNotEmpty(result.getData())){ - WaterLevelVo waterLevelVo=new WaterLevelVo(); - waterLevelVo.setStationCode(item.getStationId()); - // 前水位 - double frontWaterLevel=this.getWaterLevel(item.getInstanceCode(),HomePageConstant.FRONT_WATER_LEVEL); - waterLevelVo.setFrontWaterLevel(frontWaterLevel); - // 后水位 - double rearWaterLevel=this.getWaterLevel(item.getInstanceCode(),HomePageConstant.REAR_WATER_LEVEL); - waterLevelVo.setRearWaterLevel(rearWaterLevel); - // 下泄流量 - double dischargeFlow=this.getWaterLevel(item.getInstanceCode(),HomePageConstant.DISCHARGE_FLOW); - waterLevelVo.setDischargeFlow(dischargeFlow); - // 前水位当日曲线 - Map frontCurveMap=this.getWaterLevelMap(item.getInstanceCode(),HomePageConstant.FRONT_WATER_LEVEL); - waterLevelVo.setFrontCurveMap(frontCurveMap); - // 后水位当日曲线 - Map rearCurveMap=this.getWaterLevelMap(item.getInstanceCode(),HomePageConstant.REAR_WATER_LEVEL); - waterLevelVo.setRearCurveMap(rearCurveMap); - list.add(waterLevelVo); - } - log.error("load_water_level : 小节线程执行完成 {}", item.getInstanceCode()); - } catch (Exception exception) { - log.error("load_water_level_error : 线程执行失败 {}", exception.getMessage()); - } - } /** * 光伏站-逆变器实时加载 diff --git a/pom.xml b/pom.xml index fee8f9d..90876d9 100644 --- a/pom.xml +++ b/pom.xml @@ -75,8 +75,7 @@ com.hnac.hzinfo.data hzinfo-data-sdk - - 5.1.1.RELEASE.fix.5 + 5.1.1.RELEASE.fix.8 com.xuxueli @@ -89,6 +88,12 @@ 3.3.2 + + org.apache.httpcomponents + httpclient + 4.5.2 + + com.hnac.hzims @@ -163,12 +168,6 @@ - org.apache.httpcomponents - httpclient - 4.5.2 - - - com.google.zxing core 3.1.0 From 32c08e1123ba2a46779b17d14bb3c48c79a80988 Mon Sep 17 00:00:00 2001 From: yang_shj <1069818635@QQ.com> Date: Wed, 31 Jul 2024 08:40:22 +0800 Subject: [PATCH 07/12] =?UTF-8?q?#=E6=96=B0=E7=89=88=E7=94=B5=E7=AB=99?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../operational/main/vo/HydropowerStationVo.java | 6 + .../main/vo/HydropowerUnitTargetVo.java | 6 + .../scheduled/RealTargetScheduledTask.java | 1 + .../operation/home/impl/RealTargetServiceImpl.java | 190 ++++++++++++++++++--- .../service/impl/OperAccessLibraryServiceImpl.java | 6 +- .../main/service/impl/HydropowerServiceImpl.java | 30 +++- 6 files changed, 207 insertions(+), 32 deletions(-) diff --git a/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/HydropowerStationVo.java b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/HydropowerStationVo.java index 09e09ac..6b34729 100644 --- a/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/HydropowerStationVo.java +++ b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/HydropowerStationVo.java @@ -60,6 +60,12 @@ public class HydropowerStationVo { @ApiModelProperty(value = "年发电量") private Float powerYear; + @ApiModelProperty(value = "今日发电量") + private Float powerDay; + + @ApiModelProperty(value = "昨日发电量") + private Float powerYesterDay; + @ApiModelProperty(value = "年发电完成率") private Double powerRateYear; diff --git a/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/HydropowerUnitTargetVo.java b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/HydropowerUnitTargetVo.java index e80e55a..ad37e5a 100644 --- a/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/HydropowerUnitTargetVo.java +++ b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/HydropowerUnitTargetVo.java @@ -29,12 +29,18 @@ public class HydropowerUnitTargetVo { @ApiModelProperty(value = "当年发电量") private Float powerYear; + @ApiModelProperty(value = "当年发电量") + private Float powerYesterYear; + @ApiModelProperty(value = "当月发电量") private Float powerMon; @ApiModelProperty(value = "当日发电量") private Float powerDay; + @ApiModelProperty(value = "昨日发电量") + private Float powerYesterDay; + @ApiModelProperty(value = "当日机组有功功率") private List activePowerVoList; diff --git a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/RealTargetScheduledTask.java b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/RealTargetScheduledTask.java index 4e68cab..9591c87 100644 --- a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/RealTargetScheduledTask.java +++ b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/RealTargetScheduledTask.java @@ -8,6 +8,7 @@ import lombok.extern.slf4j.Slf4j; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.Arrays; diff --git a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/RealTargetServiceImpl.java b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/RealTargetServiceImpl.java index 24efa10..ab09f0a 100644 --- a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/RealTargetServiceImpl.java +++ b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/RealTargetServiceImpl.java @@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.google.common.util.concurrent.ThreadFactoryBuilder; import com.hnac.hzims.EquipmentConstants; import com.hnac.hzims.equipment.entity.EmParamEntity; +import com.hnac.hzims.equipment.entity.ThirtyGenerationEntity; +import com.hnac.hzims.equipment.entity.ThreeGenerationEntity; import com.hnac.hzims.equipment.vo.EminfoAndEmParamVo; import com.hnac.hzims.hzimsweather.feign.IHeWeatherWeatherClient; import com.hnac.hzims.hzimsweather.vo.RainFallCountByMonthVo; @@ -19,6 +21,8 @@ import com.hnac.hzims.operational.station.entity.HzimsAnalyzeModelStationEntity; import com.hnac.hzims.operational.station.entity.StationEntity; import com.hnac.hzims.scheduled.service.equipment.DeviceParamService; import com.hnac.hzims.scheduled.service.equipment.DeviceService; +import com.hnac.hzims.scheduled.service.equipment.ThirtyGenerateService; +import com.hnac.hzims.scheduled.service.equipment.ThreeGenerateService; import com.hnac.hzims.scheduled.service.operation.fill.*; import com.hnac.hzims.scheduled.service.operation.home.ModelStationService; import com.hnac.hzims.scheduled.service.operation.home.RealTargetService; @@ -92,6 +96,10 @@ public class RealTargetServiceImpl implements RealTargetService { private final ModelStationService modelStationService; + private final ThreeGenerateService threeGenerateService; + + private final ThirtyGenerateService thirtyGenerateService; + private final RedisTemplate redisTemplate; private final IHeWeatherWeatherClient heWeatherWeatherClient; @@ -102,6 +110,7 @@ public class RealTargetServiceImpl implements RealTargetService { private final DeviceDataClient deviceDataClient; + @Value("${hzims.equipment.emInfo.emInfoList}") public String device_cache_cofig_final; @@ -272,6 +281,12 @@ public class RealTargetServiceImpl implements RealTargetService { if(CollectionUtil.isEmpty(stations)){ return; } + // 设备30日发电量 + List generations = this.thirtyGenerations(stations.stream().map(StationEntity::getCode).collect(Collectors.toList())); + // 设备当年发电量 + List generationYears = this.threeGenerations(stations.stream().map(StationEntity::getCode).collect(Collectors.toList())); + // 设备去年发电量 + List generationYesterYears = this.threeYesterGenerations(stations.stream().map(StationEntity::getCode).collect(Collectors.toList())); // 补充填补发电指标 List targets = this.generteFill(stations); // 水电站设备 @@ -283,19 +298,24 @@ public class RealTargetServiceImpl implements RealTargetService { try{ HydropowerUnitTargetVo target = new HydropowerUnitTargetVo(); target.setDeptId(device.getCreateDept()); + Optional station = stations.stream().filter(o->o.getRefDept().equals(device.getCreateDept())).findFirst(); + station.ifPresent(stationEntity -> target.setDeptName(stationEntity.getName())); target.setDeviceCode(device.getEmCode()); target.setDeviceName(device.getName()); - target.setDeptName(device.getName()); // 当年发电量 - target.setPowerYear(this.getGenerationPower(device, 0)); + target.setPowerYear(this.devicePowerYear(generationYears,device)); + // 去年发电量 + target.setPowerYesterYear(this.devicePowerYesterYear(generationYesterYears,device)); // 当月发电量 - target.setPowerMon(this.getGenerationPower(device, 1)); + target.setPowerMon(this.devicePowerMon(generationYears,device)); // 当日发电量 - target.setPowerDay(this.getGenerationPower(device, 2)); + target.setPowerDay(this.devicePowerDay(generations,device)); + // 昨日发电量 + target.setPowerYesterDay(this.devicePowerYesterDay(generations,device)); // 当天有功功率 target.setActivePowerVoList(this.getLoadsByDay(device)); // 30天发电量 - target.setGenerationPowerVoList(this.getGenerationPowerList(device)); + target.setGenerationPowerVoList(this.getGenerationPowerList(generations,device)); targets.add(target); countDownLatch.countDown(); }catch (Exception exception){ @@ -317,6 +337,75 @@ public class RealTargetServiceImpl implements RealTargetService { redisTemplate.opsForValue().set(load_hydropower_unit_target_key,targets); } + + /** + * 去年发电量 + * @param generations + * @param device + * @return + */ + private Float devicePowerYesterYear(List generations, EminfoAndEmParamVo device) { + if(CollectionUtil.isEmpty(generations)){ + return 0f; + } + return (float) generations.stream().filter(o -> StringUtil.isNotBlank(o.getDeviceCode()) && o.getDeviceCode().equals(device.getEmCode())).mapToDouble(o->o.getGenerate().doubleValue()).sum(); + } + + /** + * 当年发电量 + * @param generations + * @param device + * @return + */ + private Float devicePowerYear(List generations, EminfoAndEmParamVo device) { + if(CollectionUtil.isEmpty(generations)){ + return 0f; + } + return (float) generations.stream().filter(o -> StringUtil.isNotBlank(o.getDeviceCode()) && o.getDeviceCode().equals(device.getEmCode())).mapToDouble(o->o.getGenerate().doubleValue()).sum(); + } + + /** + * 当月发电量 + * @param generations + * @param device + * @return + */ + private Float devicePowerMon(List generations, EminfoAndEmParamVo device) { + if(CollectionUtil.isEmpty(generations)){ + return 0f; + } + return (float) generations.stream().filter(o-> StringUtil.isNotBlank(o.getDeviceCode()) && o.getDeviceCode().equals(device.getEmCode()) && o.getStrMonth().contains(DateUtil.format(new Date(),"yyyy-MM"))).mapToDouble(o->o.getGenerate().doubleValue()).sum(); + + } + + /** + * 设备当日发电量 + * @param generations + * @param device + * @return + */ + private Float devicePowerDay(List generations, EminfoAndEmParamVo device) { + if(CollectionUtil.isEmpty(generations)){ + return 0f; + } + return (float) generations.stream().filter(o->o.getDeviceCode().equals(device.getEmCode()) && o.getStrDay().contains(DateUtil.format(new Date(),DateUtil.PATTERN_DATE))).mapToDouble(o->o.getGenerate().doubleValue()).sum(); + } + + /** + * 设备昨日发电量 + * @param generations + * @param device + * @return + */ + private Float devicePowerYesterDay(List generations, EminfoAndEmParamVo device) { + if(CollectionUtil.isEmpty(generations)){ + return 0f; + } + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.DAY_OF_MONTH,-1); + return (float) generations.stream().filter(o->o.getDeviceCode().equals(device.getEmCode()) && o.getStrDay().contains(DateUtil.format(calendar.getTime(),DateUtil.PATTERN_DATE))).mapToDouble(o->o.getGenerate().doubleValue()).sum(); + } + /** * 水利-泵组实时加载 * @param param @@ -1392,7 +1481,7 @@ public class RealTargetServiceImpl implements RealTargetService { } return records.stream().map(record -> { ActivePowerVo load = new ActivePowerVo(); - Date time = DateUtil.parse(record.getTs(), "yyyy-MM-dd HH:mm:ss.s"); + Date time = DateUtil.parse(record.getTs(), "yyyy-MM-dd HH:mm:ss"); load.setStrHour(DateUtil.format(time,"yyyy-MM-dd HH")); load.setHour(time.getHours()); if(StringUtil.isNotBlank(record.getVal())){ @@ -1469,10 +1558,14 @@ public class RealTargetServiceImpl implements RealTargetService { target.setDeptName(station.getName()); // 当年发电量 target.setPowerYear(generateService.generate(year,station.getCode())); + // FIXME 去年发电量 + target.setPowerYesterYear(0f); // 当月发电量 target.setPowerMon(generateService.generate(mon,station.getCode())); // 当日发电量 target.setPowerDay(generateService.generate(day,station.getCode())); + // FIXME 昨日发电量 + target.setPowerYesterDay(0f); // 30天发电量 target.setGenerationPowerVoList(generateService.generate30Day(day,station.getCode())); return target; @@ -1875,33 +1968,78 @@ public class RealTargetServiceImpl implements RealTargetService { return dataService.periodTargetFloat(start,end,5,accessRules,device.getEmCode(),device.getRideCount(),HomePageConstant.HYDROPOWER_GENERATE_POWER); } + /** - * 近30天发电量 - * @param device + * 站点设备近30天发电量 + * @param stations * @return */ - private List getGenerationPowerList(EminfoAndEmParamVo device) { + private List thirtyGenerations(List stations) { Calendar calendar = Calendar.getInstance(); String end = DateUtil.format(calendar.getTime(), DateUtil.PATTERN_DATETIME); calendar.add(Calendar.DAY_OF_MONTH,-29); - calendar.add(Calendar.HOUR_OF_DAY,-calendar.get(Calendar.HOUR_OF_DAY)); - calendar.add(Calendar.MINUTE,-calendar.get(Calendar.MINUTE)); - calendar.add(Calendar.SECOND,-calendar.get(Calendar.SECOND)); - String start = DateUtil.format(calendar.getTime(), DateUtil.PATTERN_DATETIME); - List records = dataService.periodTargetData(start,end,5,EquipmentConstants.CycleTypeEnum.DAY_CYCLE.getType(),device.getEmCode(),HomePageConstant.HYDROPOWER_GENERATE_POWER); - if(CollectionUtil.isEmpty(records)){ - return new ArrayList<>(); - } - return records.stream().map(record -> { - GenerationPowerVo generate = new GenerationPowerVo(); - Date time = DateUtil.parse(record.getTs(), "yyyy-MM-dd HH:mm:ss.s"); - generate.setDate(DateUtil.format(time,DateUtil.PATTERN_DATE)); - if(StringUtil.isEmpty(record.getVal())){ - generate.setGenerate(0f); + String start = DateUtil.format(calendar.getTime(), DateUtil.PATTERN_DATE); + return thirtyGenerateService.list(Wrappers.lambdaQuery() + .in(ThirtyGenerationEntity::getStationId,stations) + .ge(ThirtyGenerationEntity::getStrDay,start) + .le(ThirtyGenerationEntity::getStrDay,end) + ); + } + + /** + * 站点设备今年发电量 + * @param stations + * @return + */ + private List threeGenerations(List stations) { + return threeGenerateService.list(Wrappers.lambdaQuery() + .in(ThreeGenerationEntity::getStationId,stations) + .like(ThreeGenerationEntity::getStrMonth,DateUtil.format(new Date(),"yyyy")) + ); + } + + /** + * 查询设备去年发电量 + * @param stations + * @return + */ + private List threeYesterGenerations(List stations) { + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.YEAR,-1); + return threeGenerateService.list(Wrappers.lambdaQuery() + .in(ThreeGenerationEntity::getStationId,stations) + .like(ThreeGenerationEntity::getStrMonth,DateUtil.format(calendar.getTime(),"yyyy")) + ); + } + + + /** + * 设备近30天发电量组装 + * @param generations + * @param device + * @return + */ + private List getGenerationPowerList(List generations,EminfoAndEmParamVo device) { + Calendar calendar = Calendar.getInstance(); + Date end = calendar.getTime(); + calendar.add(Calendar.DAY_OF_MONTH,-29); + Date start = calendar.getTime(); + List powers = new ArrayList<>(); + while (end.compareTo(start) >= 0){ + GenerationPowerVo power = new GenerationPowerVo(); + if (CollectionUtil.isEmpty(generations)) { + power.setDate(DateUtil.format(start,DateUtil.PATTERN_DATE)); + power.setGenerate(0f); }else{ - generate.setGenerate(Float.parseFloat(String.valueOf(Double.parseDouble(record.getVal()) * device.getRideCount()))); + String date = DateUtil.format(start,DateUtil.PATTERN_DATE); + power.setDate(date); + power.setGenerate((float) generations.stream().filter(iter->iter.getDeviceCode().equals(device.getEmCode()) && iter.getStrDay().contains(date)).mapToDouble(o->o.getGenerate().doubleValue()).sum()); } - return generate; - }).collect(Collectors.toList()); + calendar.add(Calendar.DAY_OF_MONTH,1); + powers.add(power); + start = calendar.getTime(); + } + return powers; } + } \ No newline at end of file diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/access/service/impl/OperAccessLibraryServiceImpl.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/access/service/impl/OperAccessLibraryServiceImpl.java index 019096a..5610484 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/access/service/impl/OperAccessLibraryServiceImpl.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/access/service/impl/OperAccessLibraryServiceImpl.java @@ -86,8 +86,12 @@ public class OperAccessLibraryServiceImpl extends ServiceImpl detail(Long id) { + public R + detail(Long id) { OperAccessLibraryVO detail = OperAccessLibraryWrapper.build(emInfoClient).entityVO(super.getById(id)); + if(StringUtils.isEmpty(detail.getSafeInfos())){ + R.data(detail); + } detail.setDangerSources(dangerSourceClient.details(detail.getSafeInfos().split(","))); return R.data(detail); } diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/HydropowerServiceImpl.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/HydropowerServiceImpl.java index 37e52f1..0e32c6d 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/HydropowerServiceImpl.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/HydropowerServiceImpl.java @@ -169,7 +169,9 @@ public class HydropowerServiceImpl implements HydropowerService { this.stationMonthPower(station.getCode(),map,response); // 水位、水位曲线 this.handleWaterLeve(station.getCode(),response); - // 年发电量完成百分比 + // 今日,昨日发电量 + this.powerDay(station,targetList,response); + // 年发电量完成百分比曲线 response.setPowerYearMap(this.handlePowerFinish(Collections.singletonList(station),map)); // 设备信息 response.setDeviceList(this.getDevices(station,realList,targetList)); @@ -177,6 +179,26 @@ public class HydropowerServiceImpl implements HydropowerService { } /** + * 今日、昨日发电量 + * @param station + * @param targetList + * @param response + */ + private void powerDay(StationEntity station, List targetList, HydropowerStationVo response) { + response.setPowerDay(0f); + response.setPowerYesterDay(0f); + if(CollectionUtil.isEmpty(targetList)){ + return; + } + List valids = targetList.stream().filter(o-> null != station.getRefDept() && station.getRefDept().equals(o.getDeptId())).collect(Collectors.toList()); + if(CollectionUtil.isEmpty(valids)){ + return; + } + response.setPowerDay((float)valids.stream().mapToDouble(HydropowerUnitTargetVo::getPowerDay).sum()); + response.setPowerYesterDay((float)valids.stream().mapToDouble(HydropowerUnitTargetVo::getPowerYesterDay).sum()); + } + + /** * 水电站-机组列表 * @param deptId * @return @@ -223,10 +245,8 @@ public class HydropowerServiceImpl implements HydropowerService { hydropowerUnitVo.setHydropowerPumpRealVo(real); // 指标数据 if(CollectionUtil.isNotEmpty(validTargetList)){ - List target = targetList.stream().filter(o->real.getDeviceCode().equals(o.getDeviceCode())).collect(Collectors.toList()); - if(CollectionUtil.isNotEmpty(target)){ - hydropowerUnitVo.setHydropowerPumpTargetVo(target.get(0)); - } + Optional optional = targetList.stream().filter(o->real.getDeviceCode().equals(o.getDeviceCode())).findFirst(); + optional.ifPresent(hydropowerUnitVo::setHydropowerPumpTargetVo); } list.add(hydropowerUnitVo); } From 889c3110e30ae748df24277cb6fecfe371d75ba1 Mon Sep 17 00:00:00 2001 From: liwen Date: Wed, 31 Jul 2024 13:42:03 +0800 Subject: [PATCH 08/12] =?UTF-8?q?fix:=20=E5=B7=A5=E4=BD=9C=E7=A5=A8?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E5=8B=BE=E9=80=89=E5=9B=BE=E6=A0=87=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hzims-service/ticket/pom.xml | 2 +- .../service/impl/FirstWorkTicketServiceImpl.java | 12 +++++++----- .../template/电气第一种工作票模版.docx | Bin 39277 -> 40818 bytes 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/hzims-service/ticket/pom.xml b/hzims-service/ticket/pom.xml index d1732f0..f5bfa18 100644 --- a/hzims-service/ticket/pom.xml +++ b/hzims-service/ticket/pom.xml @@ -15,7 +15,7 @@ UTF-8 UTF-8 - 1.0.3 + 1.1.5 1.9.6 4.1.2 diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/FirstWorkTicketServiceImpl.java b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/FirstWorkTicketServiceImpl.java index 15eeb51..1382892 100644 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/FirstWorkTicketServiceImpl.java +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/FirstWorkTicketServiceImpl.java @@ -370,11 +370,13 @@ public class FirstWorkTicketServiceImpl extends ServiceImplY-Ol)&v+fF9d{m;2|AMRuC-c{XIU0t>I z+TB-;VD~*>@$4`I`q!fNpdcVV2?E%F@}%7c6LJ^Uso;+eS)Z2@2y3X=#O%Oj|CBdu zYdkzs5euz~xtfu6a4{SxKa&TA;H!Xa>q{^)H^;WuaOXmVft`B^QC3v9)M{ zBNA(zUPAr$%E2)G!sCP&=sMYe2@&!b7W3OTB4cd>(gE4m`FCQIza&9tP!f&!zFNxl zcO*}e!HI5NN_2&n<0esK9&qky+9mg$Z-Upl*(K003c0hn0;#{VIPBD56-A(P7g&3~ zl&GG3?*(mg4N>E?IWW_6JI)gw`I_zSSIV=f4(e@WTuyH0!!AL6!LDNw;=!U|A zOmx&$Cv&;-9fond$A#U45;hchsB8`aZVQ@Om0>)|%!G_&+@(N&Q|&=k1hk(=l#A1> zkyYtraf1AWIaKt&i>(JG+tEg9bpR0Aa@b7^J_}(pv^y_serinr_Pudo%$_|7^8CB{ z;|u2xmjI7#p^@!*XQF?j>bMy}8fGvw1|*1n%>~cNc>kVDU}JhC{}fehn97I;z;~GZ zyR=xP<$>K{n8x<$_5SPbpSty1(Hp)N>*;&}bi8M0thAhT7~WDZpKCR=nhuE~GKs zs7uI)LtU23Z?7+;jc>h|RA+kDt#ms_qD;pm?>1>gdZUfoql#2r4JDR%s~8?tP9`17 z65cV8nVx#1^kSO#cEp(#GS{kD=kx2V-*6*i!|6J#6*Ebc=*kIOKRO3Ck_;B+aSOp0 zHHm3v&ON=LYEaNNkg{r;pbChNTgDTa3}?!OGQ=*H4irtL!!|}=AeQ%Q5N% ziN|ePg^-1VC7~B@k%a*PVI@eSN5%oPoHw{o{dOupkr=vpM-W8VXV8V>(adcr(YU2; zx2a%SEglpTk}=*_?2{Jvl6luEGANZST#DlAIvqcr-k%$}JmG(3tt`C;_mCtdDbk;t z{@%(_5ZEa$n?EeRYP8D0aK)IRR4B;#_g>4jPd4{-Ph%NAH=S5~O>~fz)nR3^sBYEoYoWo;71XY)_1HcCo#>@Skkh>i z;rp5hA8lNn-B7--%HVZwb8Q0n96m4}y+U187)3Tj{3ndq+NSQ$i9;hb0ugKdz-tBY zRs=4@L3w`;t|&dUdJM;jc}MS?3fMQA!Lx$whG1TBY&Yxay;V;l-nVXCWnFdnHkG@{ zbcN#{nG5l-{F0v-{QpRsU1}NJ#g7g~zkPJwn&$YWVqbaG8Q+gR<}uZ`NWjU#Tyt@~G<1Y$L4-%l;1wTG ztSC%DCxX-$G-TR7%^~idG;OZez0D{|)}-UOW}*|mNA#=b12vOD-(=V(hu+|nNuzSU z*>t-$>her)>u}aUTm1zfvj?O8a@l<`{Q7b*|h7HM}u9ZaJ zhr^3tJXcr|_1Wkclg%6wY15NJtKlQo-WtlLOhg=q*Si_y>T+P{ML!} zUEi(B@NZ+>y6G5U&?F|3Z9)s}#!6*CJGEUV9g!{vB79TQjdeL-(WK_L;R{QUoMmX& z+6B$@`&i8b>%LRXT}fCq63a$E%f=V2$6f!yjvd=k_uCmSvHHp;%RI$en(LvrWt}2|4JfK zHrMw6GAH;4K`el=Bz-zna9t2bLx;Xh?{TlP{yuqt27pH&UqHMzx0g?Mhc6!KOZemY zIM%mQ;eJDKcGjEK@CfTd*jyhG?wKerU;PS2i0xO%t<66<1%AaJhS9_5C1OL95M^V* zl2pUaCyp{Qe>kZWWI|4`L%hz~hpDEhQn;cAB3vlMsgqx^Tf*R=c=GuYQehtvIRjBu zIjPGraDgO>7^%hD^>1uQ@pN^nxX5zVa{h@q^2b#kn$!rP?jmXo_?W;_5sJ>I`y#tc zl@UN9g6dp}UaMNkn^c%z)E5~BgIe`sOoe*>1)ExBvq)k-U1o}x;%{IPF19Rtj1pm4 zy2z&)**@EZF?|$5B=V?>h>|LIL3KZMXd}clDv$n*o z7A|ZpW#iJZ2)yh;AMha6`TG6rk4I`>J2 z5q4aZaRJ-JK}(`V%fC%p%X&I#-@opQE87Lhk5XdD3YJ4A_#}EsELG{I;X71qxI!Vj z{`XvaxK+HWiK<}r$Xmt7eWAn&6Jk!4D8N5u(-vg>aqdbZ1gHYOT$&JZ#B)2+91*81 zs|)mE{=$|$RjvqS5JK2NcJ^&#MkXT7tMV18v;u}k8N6abMXCr8B|6w#;W)>1wpla+ z$ElSF#|d5tl4x$39C0>-Y)fh;eO3nII`Vy`k(MLoR%e4v77THzRHie6u)hyHuz*~W zm_tN`a^&MPS8JzOX-lZ zxhs7YuA|_;5dG}r3Uch~DSt@u8wuw#X+e3>6!tr(x@ny4^|a)(lNf`C&BDx2{?V#@*O2`nQ|hhRKRzpxVp1FQT*qYWgb zGHJ?CqD3%HHVybS%Yzr##BV87t?u*?{?VQStFU~*Np4cmc zoA77M(|3$gkQI>0Be~`$3|%FKz)c`FYNCdQGRxANRb?a^RAQw{PNqoJwGOC7p?81P8RNTvG5`;Dx;Nz&^SP2cDCWC{~^6s$87o=N7E8lUfQ zx7NT>(ypftsid!4z)|k z$HT@ez+Cd#ri_5E8=CGB>#aQuqx)dqE5XM6s!$NXZ~Kx&?`3TG1Y8&8G5HNtZ;d)e-;BOE z!f%(1cG`1>gm5Pu@c-(}P#;zanS0?Ki#LInHcm^=_ILI5j zUcaTKQ!w8W4!wMC{+tLMueOUk$ZSJm!ct$OUzBp?~t`0Rzk%yWrz57z5*{ z9jwLM+*rplxRVyXqTHu;H8lj90{}{{CCbG1EzuA{gO)6soGi_`ggz$~Stli0F(q0F z8`%fKda}<^48G+b%j_-HmLQh`rTO$yOAY(>`+H(hB%Ni(9!YF0B3ZpPgEhj&1X@iO z_^=37o}qk>pkrVwRE;t(DTqzDVu>RD(ZFjK{9rA@->lyqfe6{rp^n~nwSeIA$j8j! zfbbngJ3|AAFBt+t1Deh+=A~_oCvaG4{?@ zDIo^bX!Ml$CVl;$@2?M-e(salfTOyb9lx)ab-u6kkuxU367O-3E?zmE-pi}|0cDjR z91Z>`_oCxISK}#WZMAy0RltOseN>r-EbE+19;WK_YXmE@S-vjTXuR#0{<$lC@?5Hg zA?L}>8A!B&pCLCJt`vj-J$?L}1mMR*SXgn?;!ndd7ay61i9RPPp`(bq%JJyU_l>kv zMf!$6XDz;6PDvCf{cMp>omN_X?2Y2SDyByGeI z#s|_3q4&dyq+8J=>zFdQTa*^knn%t;rgZGpV@+6{ z=~XQ0s9n1Y7)&@8)sI)Az8`=OD_=k9x|*6w1ZTuhi{|5%td@|eNK1~BI6~Vc^+mOk z$B9aH)_r0 zmx42B604eZ|bKhe$-a{5&K!%EFtA0| zJYA*CO5Pl^s`h1;$E8Fgn(Ow9i;KEyP930b5toDPPLXJmC?t;u$@Ey=`e9U_(?zsm z+0gc)nyGCj(m7m+C91Ep^6f9w+eYx@fR74uvau{2jzswn{3QBaoyhAfI^yK(gHeQbG3*dX|1eq3+N@`!*bR;< zg==w5t|Y|m)9KrVEtlAYIIZ8$XQGhi6lq^2Cfy65^6P<-zEim$LD4@Ca+P929|XMn zYuvNpvW4udx>dw(hGrA2LAd$IUaWx|*zL?~ty&8NXObcsde)u4=xo#dCwjw8b(lIP z7}tlv{^JSOGlvH538$How9v?$2rVVJ=1Wui*(W>KS2r6wTic(bf^NClJD=xob;$B` zh2Ke#By5=}TL@HOAc{jm{I-Z`sDp2WR*5~D%JfC`Ko2Y^POrmunBv&^ zg0~{tW}QIu*_l)QOT{!ZpZNG=YK*}TV>ODu%eG5J%xV@t!ME#$UO0%CU6v&=>7%x! zaWV&;jwc7|CX%5sLukL2P;1mhfFtWm|?4!siy zbh^X{%yu5izuVsxXae{_j5vYJX*x)xA&3C4N2GibStF#mxK zb%cXZuxRj?_4yez6dJzT5-at@a}TgMA#O$Xf}i0L%fyA}m+yM>g5g#XylA(D_ZeOP zV*2B6USpO2n9R?D9Ccn#L|};X>vL8!$k*8(-|P=Yy3E;F?1}FdacJG zcYF;ew7GI}{Qgqt%(K&JtG)4i+?qVegNT^EzCxUL{tFTC`1%7Pe6D!kpECBZ`>kdS zdiV5n?W>0CC%ltkHXFtuM5NFBe*_siAYeZ|43{0Ekjk`005kEIU>bvOb4HerYy z5H)I(HPb2R@j?K`7*5$gsWY$l+jnI^h}ThigFV+QT{mdjALr0q2IDrXT-cvjCGsa> z!}1O)6q@7nE5XHaoa!lehtQ9?{oC|;50iXR1LB+*Db8@b@?^^O%$%^p046XxqCdpW z*{W1QF~@H$xYkvNjx~O**X3iaHQ>Dj&Yym*DhAuWeawLKZry`!T3+J1oD|o)ZYFds zOPsvrk2D($rg0jf({x&AavO!K%O~^`@cEH`>!gS6Y zXLPsvAqr=LNq;jw?gtT-`?IRy>r3xR>r5JK3k6CG78?Yt#MB zTt3aKP^+`T&|LRbBw3UTM$aP<|8}>F+@DP|&I(vscnmLEQ|;R}hd0Zl>2vy5MI$*8 zF0pIIMuZfS%aY!t7=LE7J27l1;5vf!fN!6{OMq{J&fh43ZGw8B%|tKIdU&m{k>AMi zYhdG}5}xO=47$#D+|F_hI8<&jF65)b#||09W_DC8>O;TQa+(cehHTP}HM%t0wm2Tv zBmq=#lPK758Sd(_=n5WaN%iHwWbxgJ_d;}Q4TN4!`8Bf=oOBb$&7zE#&4P88L)n(h zh?@katZ#_TS8tTgyc&>6mG2djBEhX4Z7sffXL~P1KmSGC6MBb|%~bz3+|}c{L)Lum z+4vk(Se~Z!-VoG5V$kBOyVCCvP!usT(ghms`jI0}`w&Ih0;YeNTEfV?HBWrI)At;> z!R{^S-{oA3he?h4q|zSAt_c?xfk@7jpS;$iv34Y`#jSp@3RyherYj2ClE+C$FkJ;k zbuTCM?WYKdWFFdK(TxO>{WkE&6(PT$X)<3bff~bp{sanSx{XZ*+73QXcL1BBCcjFZlJf?UK5M zU_7#lYteHv$6aTxiB+)zP{$Ori^b4N?7M&S5Mh7!qhkE13RP9`g(Hxl7&q$uyzs-o z%#7YeKPnw}SzGXpFrt?+CP+8^r{EjIpSo+f$c3~Z0uuv}dLVQBva~T9iUAu%DCPzD z{i3jB;Z@423dDdv`3ML`rq!p`ixa1ZE>nfDck@WeqKb&~dcP1}YwC%NS`!ARpInqr z10Q&?3VgP4llx=9t1VSIDiXN|Wz6b-o7(DSZ*=~<=?m=WdA3#IQ-wGHcq@N)+oE=!C|_G8NGaMZl>*FzPz2&F>y!R7^$mM zr}hXuO~&r*lOv2v4=D4*b*t){NNSSUjr2AQ<|?T#ZjqP7&o(4gz`u#V>k=f8LrGr> zGwpM&Vj`EKpWvcAI2h5@PQR6b&uZtT!}kQT(%SDm@9+nxi;T-fPFvgcDpv37TF0wE z<*~>2&GK+3W1jwlK+p37Q4MsSKW1?4&IhJl{Wbsnc0KUi{rSFg!}sU@-c#X^B=o{G zjY}hVRi}0v#<@$?S%Q|)7`<6fCrhSnz(46>sSI!JDNU6<+4d{iN{hL z_IbBeyt|i3gX16j;(GW;b9IhN+GbdkRrgnBAWHvYz}H-7;D|8v>Htu4PVp}i;hW%D z4elMs0PMnrQlzKDz;kIX6}en~aHlX9mxb8EK?_f$XR?b9U@{>UbbrxP2}%-gj<{PNwozHD99_0&JtZkE(18hkH(bm};Y5rE65L8x zz8c@T9UFQ`8$xL$Fu5Uj+ivG|#LJKHtM~b!ZFx%)Sk9}x0-U^`>t=TgUH5jRR1*S+ zGz+!T>U0FZs&>e9t^h$Rz-Q1B#T6%FzO1b#%iWD}e`U)zScc&H{^YY02;zpIa=|Wx zA%iiYOa}$ebZtN*>PDX7K|cfiLM>oFT!0?u^jcjW^AR;GiPWWeZ$42Mwd|=NlZI9t zRcruoY{E);@y8L8@tt~e9biGQON0{;^g&1s#lq8i*E<1vfBz18Qi@5T!AhHJ1Ny=r zT0$MC4Ayg(FI;xcNF@mIyAE}$-7Z^!&;(+G7%271%Q^kY>F_zXFU%B5bsni=}V{;>zGoVO`Dt^ zbmWPWGssIvC!-$fp@hk@{IryVMMO*y;VSVAW)=eKm!11CS+rh8u=VWM)R&CKg4!Wb)r)24}!u zsLmK!@7Jbs^4Prgbls4u!>H=C_RAQ;w%e!}{bSmy-2_e64}vNfL|0ld8}-C?FqONR zJlxT(CrfPWv)?@kVF(y!fR~0M`ygZpdamzT@Ea=Mh-4gZ++2I8BG(C!}ua zZm8||+E@KM7+*=O&f`~Wi)#eBUzmA97-n`=TfX}y#(jH>tKWAK<@M)R<}I+e1&eo% z^Z<`qiqo5p3G3M~Wl z&TUb?{{qiJq@gGTe$ulWYWM76M*^Un_s1*?j9BK4yG) zkzJ4=fU|Gp>#XOlSIt})!ZMlqS}S1aJLLtE&l(5A$UK4MuS>Bg9({kyB!X198oMJt zrExDuLW$J{Um%D{Kzb+k8V6cIum~&0bUvP)PpJ|dJMoi(lRkF}1QD<)!g>qBSYi+? zrHe9>$CPR|JznBEALWA(q-bW`n@l+zn(X)q^Qaj+X^ayugIqgHT7q_|vVAeM3AlIq zKGu<+HThm4T`@9T`FcA(vt)a=H-6vsuJ8E#dHAROPV`)(AQ+Uq&~4wl^?Bd9WzUdA zhAFVkr71@3sot3b1qXbsU(JU1VuBtmKW^3aM9JlzpW;3lLQ%%#THz!uvUmv0HWVu8 zm&C5R@EX0!{M1jR9p?rYCTM6n3r{J|)}5MULo0BGjpH!_N2)PYnREWK-R&Y`resmp z`d4v&r<7R9bJ`TT zS#%%rba=s&b|A#%-p3W}-r(!S;bfS9zar@1tdnTFCHKSi`RVx`@M(V7=TY?(M(lpJ zyXNce0KUsWpcabQlP5xKT6blyoZn0b^(jR`WF20>pj$Cny83n#$--r+)pS9P_amW* z5;*5kKv|0|!s((GWKJU*nc#}To=JTODs&^r54j~w0ADj}W7`yuzLqyF)xJ?3PY^%e zV|B7V^LGQ-Yw%<H+(bK_-*X)fB$+Xy0ch_W3Z`|~Q`xjIA{E&WA<(FSrb-js zF;TI!47l>VeQ%1$i!}&sZJ!Y5ot_hY;`kjunj|1N(!vhBA-2o}j)Jtwp!4oQ@3|&uONGeK;J<8sGEa%SF+BaJ*PpZg+!^w zvlC!312fh^8+&1}sX2ekP#Xrgod2rAFAi$x1b&TDy=?h!#)M4S$E7I{2)ga}UiyuZ zkCKeZrunyY*J$i0T35QMvx{JA+2s!sn?zvO2VB4uEJ0K=ja#j)I=Fc8(~)qDZ*E41 z%!S?a27}l;FXV$Bg+|awhuzi;m1PVgP^s8MoUtWwaKVdT=T~5tIbZ|q<06cy2Q_(x z+}&XI38AoMKk2!UBf`pTaB1XPhU^v;4Q1J9Dl>-9Ca(xsOa2>nq&VZ!6q9~HM6P=9 z4`_0i6^QU(g+4Ef=ar$iV$;yMX_N={ke2wU-!F|`W6>No`s4+TbWyF!AJrQVl~dZe zlq-%&x0laSfsR*a4+Egmnw?GMFzPlLbIkjeKQN%q2@n^A(=EdYO3#9ij4=1Zt|kSw z(iqmm!t#9Qz8+47h_ZKyH#9#8NeK0bBnu<<(DYD6FlDZQWq}mV^7j#m;|pz?MuBLjDG$si){M0ArH_9l*;-*+)x%Dj@+YB zrZakqncU(U(=(|xUufMIx_-T0PuoBJU;PmOEmfsg9yBC~8oly~-7L8cCII0v8XP$$ z41E!RdS>h~T3o$2`phnIgI#R{<)dF=BJksk6ki{vl#cOzYS{6-*a?W=0r&AJ&TP_C z{do1fsHy@M!#IDb-GL1c)t@oCW;SF#_2JM5u!Vo6(aZ>#DVK3qQNyTEf%_g{7+jZ*Y6a~NFfp>63WCx^?7IBaiQVFCGVMM zhF(C4!2|jGBxlfhqx~oY2>TxVsF(dPi^2R=PcMLk=)H?_%Xn@I{RnL#sTrI|F7-?1 zELZH}T(yM23MDHGElm3(%+x4Ov>CbEia3bczC$x4wCt{ZvM~pBI?=mkPg5=1Fa}}$6fK}V0KyzA5s|9(ynu)6PIo0= z)*O&k@Y%_3upRhkg-mja(S#!vm?DBS5?aTsrpuOk(${1Y7WCHynTi66y^v4cz$VBX zb+gIRA|`WL^}PHFn^)G941^n;Mdih*r%&oN09VY(CpBV*cdto)zMTn9(&R0MWbGG) z;Wo6z-jDWoi|^%_tt(NLzGxIMF_Q@LVQc^=eW4Mahv+fwfw$M@#`fEWzrFeSD$Kig z^L$y0;3Euk_0$FXI@lKAvb0-NlSFYw#8j;VD}k)2|^K zY}vo%Km8$pgD{$c;ERwlMJ7mZeX{uT`K(a8uD5je-l-JPS7&}Q-QQ7hcHvgPsspe* zuiEQ9a4R$vB-^iC-inB?gOJ{Rs|sxm7IMM;!hGbx2~INUq_4VRnH2HDTekX4^E`nl zyJ4Z^fgf$aMmU^`ycGVH0qo?xbu8e?+$J$AGf-Pw8M{3Pk_Tfc4s zx}ICOz&raAQ{fk2gXb(!8R`SmrGs7lu$mpdqR;b5L6t#O%j5JsjwP}L1qoSi{>c##?`oj|q+ z=bwYvD$^xm^1bazDp@_bqA$>U+D&FDuN!*j2e3~T3U%zH9v!vC04MNK%yd>$Rk+QQDs7OGZHlurK)>Ju#YWLaB7Ls zO>k~bT)4D7aX1%>VwXLWSz#0Gcr&vHJZi^|n^L+CRdPGQi-E-w9=|jz2R-55KTxl=5^vVmJ0~xeKPo>Bv(5j-8Sc&r4-8)s?2OcKc*G9=XCGiUX!82h)h56Lcu__rp!)J~_BrVxf$@ zkWlbr1BaVZWD@8T2Fc{zc&7&?U0achvNaLy1tG2Ns87%b63bxcNB>zFDQ|yPg8!T!zv(WVp8uuKrh7agWy)R%a?9=`?!}%aUhb#8U z5plo4B$68x#6Zq&!1Le!+N3kp6R;-n^(RVxCm}p+gr_9Zg+nG5auN99DGfz?-}+?L z%Mfq5Vr19KZ3ioR?ItXyaiw>_`V@>EPiWyXsUW?{J$2Vz6|Hg#v!B%i>b!D6-Y&Yz!ZjaPIQImiCU{wwl~XE6|n6rD!t;4LNrNUC(BelmSdu)xyVCBE*aH+9tqNkQM?MdZf9=&KbwgcFJxg*J+vvgI|RNhSm1cTJcZa`Z=C;O!xqH64N13TlV zAWwLcvJ}LW7*AxL*hbZqOez&l2*~yS~ zxnxcFr=w1Skjf_U$CBqp20w_=8y`rN*!Zw%Vh`YPD#9RAb7Ogo580r5$3?5nA}@Uk zRj&nnn%}2qm#3fIa|L3k2Sl=20GQQYp}!Y#g$*1nahLs@o(^~L1ZCQa3%bLfrR^Td zOb}lOj+7A0G`pOLH#k$&q4M@I;O)|XBSrG_R4<9F1XC*Mv+9{-n#FL16-N!=6({@j zo2e+Gvay?PTg#$~2Ez<4NbV!W1!lS^A^H-q>3-g+|AK32EE}(gJ4)4e07wuBm_>Ty zekH;|l4$I8zgmJy^b|`mV%%}8N#J!Y;MjnTBWy`X{FQ@+xI=`y%!6YqVANG7hUcYNywyN4zJ{Ho))g9Q>exD%$pCzyPG%Z;zy zR@c7AJcE1Gs=-8%+@UVBK7hF(B*v(Sm?hFblk>M{W<%6MOBS$>-OJ5 zTh>wM?G~&thogjKYs^cIcWVoa_GC+rWr4UAvAhTyKX@4M{TvcmvYTqRP{<@bT-4ID z-RgWQUGn|wsfT*@fVs+Theo@&)i5DaGBy%K);yjc>taHexzppy;?)k!WZ@_$l42zJ z9|33&ab7bFejpE72H870L;mK{3!Y^b0pFbjZo$d}93gfP#-ebHPjCC936di;9nh z&$3p*&#L<9k=36>Wp#8>Bv?0Z=nr^?h9d;VoCJ4GoCB{OjlMm+H*DLH|cUFI~EiH zmJiP?u7xu)@i5;%-nWmzjg?N06fE@)_-8pPf#j$8UE-djlQt8tEDxwgbOQMwNzC!fNSjwSS5k>{v06>Gi` z8EP0!^0}C4iLW}Url&X9Pf$85!7%%n?1VWLb5!}-5z9hFIz)&MB?k*Jt37;*7u_>m z$f^ui&8s^8Bke%}f-S?jGQsqPQC5CU>)SM;WfK3Dak4As>T6Of7YSGAcuPhqM=K+=_n#_| zKs~vJ%AFl#S?x1Z$|8daLkfqr=Fh|w2iw0n*zbd9jxWCY5)-*ejHrTKK!M}aIypsq z?5JAkPi%v%AaQsYtvcAQ*<@LD?BF3L#}K8-Qx@Mpa}0ecLw4kZszZa-?N|~UnS^`< zeMNODAXe;ZEh2pDjDT8Hm~`$LcEAJRNTvDz%9HsFrxFLX1T6ZC4?ANH`qN_%2eFw5 zaGixF8DrV%>Oph3^4y+0+^|dBUIU~0mJ*%3TFJL_thg;ISA|| z&WI#hcruN|nj$4cklJB8L?#M%xFk~=<)3>JRO0?15ZGy0fz!ti(U%uyxm>g{q(UHI z(UWo~&f>LWFsjf$lJ3H)z=PKsz$RfrvgMv))*BXMThNrCCJ*mVn*QV8*dtFW_nE^A z0zB;>-ws-}2MC$|weMZgi6lKj(}ZRU@QJQPE~VM@&X# zQj{5Vs^^*m79;$b*BVguXVTJHM7f3DxcW2)rb)BRU%*6D`huN6He$trF>Xp=g|tA| z&{;(O>975N(zTtxt*Ci~#2Bja~fz(g^LBbv@tf389e7?$rtDyrJN{%^~C0w~7j{Huas;;g@xH*UX^@^NTDXwxxEpas>fkz748-7b{ z6sG1MPR^|z0UtExN;!8;afl$Pj5Dn0DXde16qpVpUs%cxOnlpec~q-uFsn>nSCPA# z8-(cExe^2rzqs?darZ$^XtPzvUIS}lIk~6qrks@lqLY@sXZPRFm__p1Fp}q8c1z83 zWAcBqSBxuF@i51DHjfCq25Gub=>%|anwlFW-w74MA`JDft74|#v5lpQNr%h@{n`~- zd0Na|!t=1z3@MZv_{+RR-MPG&ii_kd1#J5Z4Ee1cHPJ$cUvQN4f=CDHw}eWD4&;mr z@twGUmj<#aUU4xFdxnM2cKh?yT(!^#U(9v>e=y{N{Z-0hcX5Mb|^gbc_cf59oIuz0o-PF--gp(!C7c%_eINLmXA9wYn;%hZs2?YayVGwckQBF;K+EQWF$^VAE(#;_#VUSdOUy5XXu zgM?tNfww*xH(n&z-@1Cj;#8uoVPpWV1Ux#tUvYUz93J<-wxAu%`n>K~GmRajyol1V>0Jkg4U^1rh`PhLL2_S~0RmQ;$UIh8!42CFNQ! zDb5g2*Hz+@yvoEFAk35p6yX zW%}yiwLgA>pZj63fcseC;z=ys$_>3%`%kY@?trckuh?!#9g5mTu7YI1@)3WbdbJ+= zLoArwOhWXJ=Yd>V+#~ztWVdCxZnkG|dG%h$U_EQmxscIffKsCgJ_TL|3=7!)&jt1S zYOjQUZVFnJzpJ|<{eB0;!aiD8a<-f>;W%sWr4<&8r`NQyvxj^4@YV9G~CFTDO%EU>Y{g={# z;ZeV8F6#K$PF-H(hZ~NU2d082xy=)CIgKrngLzjeM6k~W_hc{>Hu3uqIX4a^UkXL$ z^#0iZC5kkS_Q)4{i_+tMP{5LBzn~fYMH#ty!98@b7FfpI6$)|tnOSj$5H^e7V1E^Z z~k?u45ihhVrDujLIN^Li;-MBjlk~fRFB% zHRA5(JW%ER`r-7x{?qzBDTk8ilK*S+y6mQ{j!$YKveWJLhveTBC@6?#HkpM+;~GY$ z){}x$gU5N5KEre3eXS2t>3_0BBScfn-t`7=q=vuQgiJGbv+s!f8tr~JFnqK>?1LwI zLuJp0ecj6Wf0EycltAQ^cmEW?ccrEKqjD^z{1b>i-IQT(;)B2&yf?I}2}qptW^>b_ z_$Mg%}8M01f8_6=rQba~$O_ppkuaTN0RL>Molx3J|ERp35 zGqg&SHp`?(wvwgA6Ec=!5@W4NNZuh&JoH}g<+{56IRAXFbD!({asP3j`+Pr=DdyG^ zIsq`NWK@D7VR}pKbGJ&v2DOI+8>G@bWu+UZ=hb}{hI}{dZLgkgY~xy4xtD(ZxLnd7 z?`G+ewnsXv7H0Wpas^8#J5M*3rFXbhBc9=&E<=mlPU$ky%8%|YX$w*NMpr+>6W)+_ z8I9Fu8=aL$);RfI~=eJxbDt zZ~uHb8Vy$zMn^bR9~^OILQR6P(l|?DW=;CBIKkGe*%?D}_*L&*p9regl=6wmnTj8% zFe9?cy}?ilb6pQ%EXt#nPD3n(zd8BxC;2~~X%~=<$^J9M1S|{Z__d4H(a*R3d`vh3 z`$W_TSBcDXT)fU_4s=bbtiGngY#z~<7oS9jP*GuOZ<@t4N9%x^1lc0Vw`5ar zsFx>3KNL})hiq|M{9!AaTH3I~;IZLj+nUPRk(MPk?b`A-#&``KrRJ6zadw^l9^E#* zGj#<==jN*F_MuXr+{&)kk#R=J8j<}rPu4F+)tp*vbd2Dp*1xFqdE;FY4O=!!QQy!j zAs=}q#lG`m{YpD0ni}Z)+0Xl#vANKrMdT-X{FECQdz7-=frAF~V8dPl#RA>&BG_;z zEpovoDJrY_y^kZ^$I$GjgV(_yOyIob%7GK?*1=cL}*XFk%$n*h<=#|EPx(xv%W!Ab46Nxf!VN$xnQ*DX35dEQZ~!zzK1;S(1s z1~#TuJ-%!Hck?oe+vVOaE`1fxUU(0|VDF^C18-%z>nif&gTe$>{3|9aRrQqvOZ}wg zjmw68aul9PFh<@vkv04SNs+H}H1havK6&%6iOlb~OWKWw*&bzE(wXOmcrkw%KCDmH zs|x9(X`AlZXDrRp@8YyNGi?S&aa*PL+K+O4T`G_U96LXD=>f{$QbpP6h@hw2#XJum z?b}YDQ%AZP2Q%{b`QvabCKfJZ468^JSvq!PrZ=!QZ#|c$2;{ z>O7nG;@?;OEI1<9LPiy297fP3128tBAVdDBRF=q+!sj48I=oe!RG1_+`5oS5B z@z4&@qu1z5gF9b@R3%a8i8O`64qv@uZg!;Ma9Bk(Ink-TKj8+~VPSrg4Ar-j)cxi8V7|m73;dqY{Qe0U zv#d{bG9s#GKHMqy4tDDmcae*cefBIM}KY#QUEY;W0$nCNZC$cULtha`+ZIhtH~ z6FsCdX#Yk05K;C|#JNWWL1TQyWx4=Q;6vhXAB>yoN(3nqw47rstjnwxmQm5Ds#*H1WH-ro4D)J z-b+G*xnMZk7MjfhTEGNS$Oitv0*dnoS->3H1;8s{4TS?B#d3j){K0;fEyN@N7VF>| zEe9;I%v6x8yp|PqPU%WDt(v}80}fMPS)0JV94!^=6^saOMVDF8F{|QA{7*jt(sOph zTR>Zm2}ET9DAxi?V*#sNCulYYNM~XJDHpB!yQgezJ53X`fzxzbjGP0F`8`~O6rhtoV3#gm|n%D$rV>DRDv4iS;z_hy@IKV-x qt^q!NzcCgKjL{fyjiU$u1YU8hAyq7p%CmroSg<<}Ct1r`J?mdzQg&zn delta 17045 zcmY)VV{o8N+l33qwrx9^*tTuk$;8Rzif!Aror!H*6Hhp?^WE?B)vjIpXP?#mtGl|_ zI?mO1zrn7Wz!ErMIpa}fY(POkd=dq5fTS74Ar_R78|fag6yHDGGJvq27G*!INGX(0 z4TIH|Hbt8SzW5$dcoC<5=hfwS{wUGVUG+_oQj4N(YlKbK2r6A6ekD@$ORK;9iOUhc z7UE6IpoE_|HuJ_KW=$=pb+0%!WQc2Y$K&oc+8^;~0Z*F-4d5d^A?c=Tj&mQe3)F}0ztMYH=mIc%C)7`(tuz|SC>)CO>=5t~>Ob#tKfjR9B zC(v#+Ag*}E)eh)xJkYLqg|?l?gW>6>50--9Y`Xo)>IdApU_1(eR<8rDOT3y$^UXoJ zzPl?;V*?#9>oB_}n4--BHw0jv00Y!Vw=YNQZ{oV!i*JLtJBLyyuCV9?8fG|NMcyW3 z3wdhD=R&VG1E-?&d{+;4r6FeN^Oln49r9l^cN+$&M@!jsw9zujHD?q`O)?y`&E9Fp zD{$i(5QRI4QONY4i59}6Z2ZHWW>1L9a^MgcARr(xAmNICgl$^Av%En;k~cu90m0T> zWg5*a*?_JhG&Bhkk2HZ6tVr~YG9hZ?F}Ow%0&o{{l=gm^WMv3bo;zlA$N~w{)I7w65jO%PWn;p%B&*OcQr%#QVmD7}R7&*Fz#nQU#yMd4UP*28 zDPruNb>=vFtl>FZd0N(cJ+$((KrZtPLc0F;9qxWa!mpg*!z8{qdSh)5@nw?IvxMW^ z3EKb+9JX;0zG$2HKTfsa$y-9ue`nL!v>XlI&Mf-7hRjK;=clHjyuCbJF#HiEsA?aM7#Od=pWrnQFAeiyV;&7Bcz2U zZrqft#nAZBGy3#@(T-=L0CEXm(nx%g^Jc-FsAaIl$?(9?DnX;oc)Mx?11+IG?KjB( z?>>xE`GBe?2Y{0Tb8=aq;lM8NRycz-i$JJN2AX<$ zCx~N-LS1?r0;Op50)l@Yf{{)ki*j;4G~UUS$J*yG&k&shbr+o#9Qh^6NGdT_5lX8z zuw%>w9k*Cg&syfyuN$-1ZRHCWX|L2D7;cM?4xqb#Lsr~_(52UKgCUaPELAwexkoZI zQyiLB-UuNMJ2QiXITq{vzaRD+uZ9gc9>u!RM~mYfS!0-2Gn4*=h>D5{r(efK za24WNMUjk0Hn$~5=9F-9Ne40N`c+6zMtxqi%S0uqU7MF%Dv~XnJ%>A1yl&m>MSol_ ztSM-wVx!+tW#qiN>eM#feVN|9ata_*TPXk+lc`hHi$?N!em`D6ull|pxBORM+Cm*> za3g54bsBpzYPLN1vK6zBH?ixy)f|4o4tG~E>BHAQezrJ2TDA)qX^yP6ZjeniKiS9z z3o9a-Rz*+LFT-bs$b)6^{d*_8(HmS+c`G&J_P}&-j4c}pVrz+oqq2<(yH)iF}N1;_WEc`)utA{ z7IeX{n!t`rVW=cOSZb4VJ`f_xx{utgYyA~RWS)=WSxvymZ^u$D zeXiXRR&K0U6sfMZ$uhgU+*2c0AlQznoq87{?qwrwCjf#|-?Z3wzwz1C%Roy13g1@Wy0!aubG24u@T{2g066;n$>OwS)5_ZH zo+&rDhIYQf%cs)1uH0-Dy6j`n0tu<;+yJGpbN&|)=)a^)d@2?i3Ie3nfw&=8hgW$U z)P6unck}WQfJ-I8K{4HRA_IOo3GZU<{w=R?~w0?1#9e%O@_BwTP z;(_khfd93(<@hh~ znNCO%UD`I3^@-^Wc8pH9`#{f`pkddJ)H88_~ks zLT+iCV6b2dK9%V(YejSgodBOKYb-qWqDZX%kiQE-G64He8-@d_xPK*$a2$9G?1`Et zUnqs(4lHn5;<$0=fmKqSQ7G{KyK)%C{1n;<>e4cUtni`^IIS5(xe#n++B>YHsxqwA z3IsnZm5HiLgz57wG~r@N1zTm-2#v-9P&NzUM3_lQF%-}8mj>?p-V1eOmL>#ggmQN6e=e- zz5_^W&cD=2lN^ZLEz~9Jn`g{2AvlGd`wzus&`nqa7UjS%XUEh?X$BmJgOm$FV(S?L zYFN1kB39-<*-=p8A<9)yOm=jf9SW()UQtOgP?f{93uMIEJuWa3WnekRH?UL&)njte zOc2Tw;KY^iL`%>iNS*t*`1{$YBLm`?5`bnBogCG`od`-{Ls57ihrneMnm;(nmaY3( z&AL?c@`xvu@|{Q|a1nVa<@&~4PMKv%;@ZqApn(@%B8tUuDKH2k4dAs55bp^-wH?Z$ zW>_?ih3UqG;9sdMCXH~_1<=rBBM;I6m?`&btjfH~bfed6lk?mG1BPSZz(RK)4{+Pp zli~jJF#hpnc}8b8%0v>q+f>Es`m!sV0bGk!Zy7&1mHgL%N#2=}>Ph#AG`|orjKaYk ze`x2n^qH8!beB!xqi65>$L7j2b!RvsM;9FU)U%Y%j`PYI(BJRIXT3EPVV{v7^B3k6 z+FJ*9sMS>8$s_u8Tw~Df1roNb9v~*VP~3mO$os4bjfeXr_&b?fmj9dooBu|V`isTC zJA=P|?l3zJpNhp>;O4i)i(UH;68O}JKxf9$j$gc+J!4Ppezy2`Q%5;8-j&Vm>cSg# z`(;k(PI$QE&@D_i5^^~QXI3^^o_YymhY1Sh}C z)tf5*`X~QKNBy3R9$mbk`S^CGDU08F-XJj3VOdkIyMx%7OoQb&+)m%n|6k!Z?28a5 z1r7odkX(n03+Om*v7mf1&-0152SZ5444Ge zkh76yCfTDfWFjht-Ru#baw{N!+1a?%os&rCE^#9;0t%TVZIs*`lU0#+DwLuena-1g z`k55=QZDM!n>3R(kXlyavyq5&+>Nni?8*CfMKL6^Z7G>yK^gCvf*@`R1jP3--IT^s zpLmjpL79miWNz~)cT^n|>N~dZ&6p$T{&G`4C9HyEw7d`yrvieLIFEfWNA(s+hFi+m z_b`X`0rOVFy2I|edyD-&-Hi)*v`agoAJ9mn3`o!9Q_0O+Y}Mw>gl{ZWLe*OUZB!!S}TWi!ta zvG?AV@ZJ{l7Y-t=VKmUMQ*h~apNc6Yn3Lgz;T7TLM-nOa)3MHwC89lNpefVu66ud{ zFHcLJEKscq0}bFfVLMDJ4AJxCf-$c4IX5FW7^sWw&aLoqSt5WpYjbYUMKS05gQcS<1BYTvR3+N)6_)JQ;u@TL&(;JWMS$MpB)w5maf5iqSnW(iFVMXci1NGhRHqeQ~Xb0o%sxvmHeL z815q<*w`{6S%cGlq|5yGy4L=fURbV{7k-4AypZdDD(W{7@n&wrkqyE|C-0&3lVe1Q zfoA8KmN@baHpa;|_yJC2Yv)kYZ7fT|48m0avO<GIMvZ zaCG}WlW_IR<|n#U*V(h4`**OMyI_u*JM8L7?WkZXN|JIoOJxGjeWI<5!?uX(g-1JU z9KD7)TEFFwOcXS*4SLWvq%6D|&Kya?RrAx23l5%5bQ4TW=Sib1y ze}C)#=2xqZ%T41jP`PN%yre(OWbHK6q?i3XvOht->2)!t`%#9k+DoRf(#4;xllC|b z%zoZ{KX#X9M(G;XOt_mN5UH$LrQscKOb3~;TOtuHPrGD;~ z&e2=E?k81gAf1dhA0Fw6sZBKjbwlq+GLK71c_#7I?t%&qYeYC9B`Q&C&#WE?ajT`&TH^n2<^TqAUyLtKCR zRVt!zr6J0Zf`Wm)_K*!tufUb`XUZeP@FkNZr{DrBM{hN>+y2)-$VyVZA)B*sEO)Wm zUMAe6$L-S6Qmr(+H~M3Mmz;w0a_R(mu<}VEvr*UkWPGBlN~V-<+JRONM{g2q3`K

i3ozxHKxbNIL~3(6+`p@YL-C&u%b$%hY7!B^oj z(P2J4q^ZYi$oJt*;Vp9nKl3Ylke2{0o=#(eN-ceAcP|`c8UjXOLKxP>^_3r~v1*^{ z#02DWtUH?fryo4w!@I>-2^)%oPO%gRujdtFtK*q-U`aYA2*c0&#i!`GTNU{FRrj$# zHU>yO1*~ELk|uMVw{5j1&C?q*^i`pKXje#|#IFHTKkCkSqTp0=@}M~=d|aju-xPS+ zos60BB*&gAdNd@U`Q0Ub{7f#~jThd|88Uug!OYLOp?kc<()pxe7*S!>;;JPl6TkV> z&fvTBb>HWL_RqV1-{8!o=;Y9Mi`lXL+F?JWw`^1! z?9#wYvXb0BP6K1d%ZU^GHgeCf`8OeCBe~vqd^7ruuFwQ9bB7Bq5p##j&#yDBg!#kl z_;^E}H9LPA3l@jN^61sO)1II#9c**37=(YH`Sy;?kW({jM*isan53hpIF>ebL!Rk} zX1Z-d_(`pio*nim%`KpUsY`xIW^x<3)XE)gt_+<6+Q>+rGm(t9 zj)6c6$%+y%S^pOiM`#-56g-9D_Oti*3MXbsy;-y_H92g)uox|VG+zJ5&Hfg`ht*J! z6V^!FZ-UwK6{Wu7exwDdAx#JetnJ9^5yu2)3OA>owN>v|k&kmPy~--~UF9kbeTomk zvYGMLB!q$@!b+5vL`yfZub3vvPj#M z>3R|bSp7j|Gv*b)!<3Y_92O=z82-Zlt>+cHXT{)F{($(UIvUlIz3|WZIt%`wZYkz_ zaOrgj*yML}-fr#3rIQAcE}^L|-PRB!ADBdkDne1LC0)v!AsCNSQamg@;v(sUlD`*5 z4MBEw$i_qm4JP>6%sn{23(f&op{4*TbJ7sIg<5v$nba)NcW<$C>%)L6fjzxF+J!r3 zbksx8+F2zZsl)uS?F1#0BPc3(d^);)om*ZD=w+X@($^9b_4s|IVh6i9wIkmsEx|F& zK!6AbOk-Gh7e#pbBCpUa*4A{48mX?RS*LM3N@s!M1iC_z;;S#dd@c-8#}V;78L8u# zEEdS2$Y0xw{3rb~W>`_8{K|f1%!}~a$gcN5yd2Hm4j~($gYyiFI>;&DnYcY-y+|bh zc`}p%PIR}mPVjz^9ZCG{pL2TLRA5S<3W}s+x>0SskAYSPuvTry7_+UzBvnDj7`)glkiN} zxzNL17r4SO)<}wI%tR_%GsK_EBpvs_ZFX+>o|BV9uix*@u1A~uKL&Td7%eVI7B9_g z`RM5p6(Z$7)nE?BIsRIdl4`_DWLm07oX>zg2#fqiFD3Zy=!Yyt&{Ci-2P_`i|dfGrzgT4PvmH-b%&k`gl6}< zMj=lt5=F*A$x5GNhLB>353n%Tl@l88B1^G=Yu$F>2EdN@(+QJt3VotM99>asO;4R> zrGG7u@*xNI5d2C6D;(alOQ0kAakkR%qojSosP;UCxpYeNLPX=O-IbGcCE6?$*O;oj zeDFoFPPi_h{5~A^xh4Fj3;VeRfDU;{-g#)snB^HMNva(CzSbHHI~6O7naw=)j~jdn zn=JWL94Ms|?pB=!Faa|T(q3vF$R&4dZe+pjB&&#^N_T&UOZVXx0m~RX_7B%*bO*`}- zEMOqqfK>3A=#Nb4Q4aAG#6DgA3^axNBDHcr;3K563^iQop%xxX5?&CV&tmtAn`n+1+N5m3_ zJeWQ*sMgP9q~mErC3NyXQM;kK@Dl7c=9L(xlCTu+#mZ-Ph^mBcj2 zz=l-HqLJ&o6v`sQA`7lQ(J>uw4#B8&l zl62IM0XZzLda9!|cvYHnd=(JNF>!-u;0z%W??h1Uma>lRl=0R!-$kGub?VA8Zc=FR zJnqT|(lV&%85NzKmU&y&hM$ezhmflneP2HmumWa-HEaK!{6+M*EjOBZRBHVFC$}&A z)akdM|AznjY&~(dXI~HlIR9^dVkQo#3dR;goFH3879P{Et%(eBcO&nxE8UMk+aBe`Is02Mt#642H>GM- z7&ue1)7f24fn!>cdEqZH{Q;pLyN#hoI(G13?vgV*?ZV9kIYTrse(EF5l-~SzC8g>^ z0LlP!);ViC?g>+%T9Zr_$b0-KKsf{C>c^6h?r zd65!T2)9E)(Mo2E2b=w%iO5M>b7GM{7%0B8o8QBcl~1%v#3Z}1qN2o6)T#ZiYxR@h zTZH_!6!#PSEJ*72{BF7Z9!`ctCqD1bAu|F`J!70>|M>QwEV1roh3pa|%uI=!7ZQx30rCU;z}Xn8w6HM&VLzR%D8uuH zGW3i@SwI!0mx*InEm3LUE$Q_~5wJ13%bD6pfTsyF{>9DmX+o$;j%Zr(4S}MAdc5kt z-uZI_T%+Sn)aLW|qUWZXhhZR9pOlQRCk&8&P z<&n(*>B5_DJhl232qVkP|&VQ)o9ax@d%;O68MA>~{X=oO1VG~v$S-1fQE!>^W% z5D_9+mBKEgCs=hhdUJ8Np79S(+50tSDl7`T2##3ofxomZGSUw&M7N!VYMd?`#2D>5mbFJwShfxZvHbW6x*s%3ES z`WqC8^3)KYQH7t>SOJadp^r)W4SQcY^R!ia)hacN*Q1Ry;fEWtB5EXn@bsGujpXAJdPZ$UI4ahy4LBFZnfht+DYsTHke;ZIY+0tV z;_Jfr$dZ}_ize#BA{pc>YJnXnL1^*g5WnMu@D}#QxL6t? z7u!slc2#~1#!NPkgMbu=e)Mxbna;t6r~eXz080MJGkoE|CgD%~UXCmKL~ z=9QqNUq~4O2En+Cu!OmYQQ8E%*+bLMuZy{j;~JocH%j+)4ycF5wp|3mp`5c zXFu<2IU;iVI^K_kvW0%N_qun!#`B%j){{=VoPK?-dLruz)h;Oig6;*U#lkJ~tu_e3 zqlo|9@B=!tfm%5DUI@9+VmEb*y{MX;nFwvU7O9djdHDaEkT%dUrrd`wrQ4^FLA$K}8501X#So1m zu}`Xj>oB?yV@7hhx%B$PT@nnt`Q^&EPGHJiOST0h2Txm(i6@4-K!n=3m3IA`8J@ch zFe&swkbjgWUEne-B#lCH-vO1r70aMjNwj)h8TrSLiiJktyjQ4N&gV4Zz$u%R7_qe1 zqSpy${qF1M^giNXdl+Q?XZ4h8h8l1%__laHjJ?9vDwu`J8Whyo+wE%cJ*|XZaCY_F z4aETjMO?{<$deF2gh)iJIFp%UlJAhD%}UTJMOcLQgg8Ksz1kp@*2b z87qT=w_5iQgUrJz9&=vD!B{2(+&j>uLIzAc2e9+c=^^W z^|BPR5!yeG-U5XP+Nte)pCuo4a%ph#t43g5lNwMOD+lqE2elCkQ#~4podzA+9{3pH^KwR)s@i8rLWbS}J#XcC^ zG6+eY%efRb+lHAndDZ5@X*`QN9Fs?Cl(0UEd_>M2_GS9MrX$?D$`??Q_0&-8yv3{n zYlBc=V)EbQPqhmFPGD_;Bzy~Ux*_p~=+CKSTUTHT= z=Jte$Dd9l;b^~3&$l#1Q#fm`2>0nQP^9ka(B^)(O%h2GXg<4UK6a|My+Wdp~GyF$I zAeXFZ#(E*nIN)w><|3XXihTeTA<+uQviiKQW}ny;hJ`SNf3uw@Q1luIT1~3TtNIUf z9fp;d)T@?)5gIJa7=+WrZcN|A6A8LJj5mIp5*i9bf1!A@fd2F~V(g_)w>WO8d6mC& zCPZgF!+>>v%!x;?qcRSY!Rmj5Dju?v`&UR~W=4L(5PwW?tJ9N;sn8KuX*3+}c;)?9 z?YT>aeXX&9Z{CsAMlT%DK0`{1@(ALVPo91t3-rk-;ORkdQsjmVrvzC?k2w5~0mD&M zA{kMzS+>KlhpH*3w=TI_I=&Qny~msn(n<%VsnX}bmlqfxjLn;wm4AzKV=IbaC1mJs zUx%x)a6w*8f)o0@ng(XZe-cE8>a!Am#0)+_IC)*GdDCq_a&rJY68iBV`&saWFIwTA&_IK2 zaV<)a8IkvsVbI-Ln_M_8LV9pxq@WcTGPqkRzuRF>tI4-;{fl+qO`OOeBIXkg5s z4?8SgSHQgFU7!%JNa)*6x(Jx++rGI7V8y&Eho+|fg+*9Gy($J9w||R1q_?+Ei(SL{M=~}Q5<3VDg?;B zqY!rQFyz}}24%uNeqmf{Ztd6dpc^B#ND&{>QJV{l^qEs}W*$q=R_(yn_QuCbkFUw; z*C}70!B4qzf|XZ1vJQR#pDTeCI|~}py8Msa`SR(0#q6W4?5z*=k{5yegqm#=&Evx?~W_`%4ymQ)Ro&D zu7rAGSA&?|;a1v{WbB8$5?Zj0ux;hAfzO&^Wi1Ylb_gS<-*|~t4dH?<^AELtWL0UH z$7*g;!iy_ju>0ZFF;#15WY5GT124v(!5h;UucA7f#TN)vX1fjp_S5e?fc#h&A@<5| zq&F}uONw|pEen~Ui6)DF41*7zdiCn&Os;XEsNdyAwW2~Q7lNHglvS^BjRH;3&Q!q$ zZnkL+SmxHZnNYj?LZItvPQ4SeI37;%Z1}{tfzl%$=0p1KnIVgDYkyZ=Y9I&u8FYrgzpVX%6qmk|>Ucbgh~nm$G31t-^I_%p4<9@qM#(Xfiw{{fPo ze*r~5jLXDQ-AJgw&{Nyb_WmOhaNdLY-RXo86l*fE1k;JKDvd7;K!}L)0LRG=IWg`ESyH~;$6P`m-7BJ~R$B#Xr=Zz#f7Hq5%9R|qxmqSwNu2n^QmZW$-x z?z(lJ@zy3_hfehN{9o@Cb~~ez34yujP@phXpgb=lKjC`OpI|W@T)Cqd(v%bf#bTUs z@o5LJOb9ku^P(g};J)}~x?79J^pWfa)hTf*>oDPG$d`ERjIW6~=AB{Iv4Gnr3>Kw! zim^)Kac?2J)d{r>Jh#bgj){os^dX&JUXoGa&cX^}@2@-@Nm!lHqr+(5heK3+w=v|)b8&TfCvaXkElkGNP2@G?B+2I zE(&TF$a(^HmyCmIkU4lSvxz8Z3iEZiJjt@VNb6Q9H`yNz_9}%x0imqY;}E^$5FoZg z*q4+w$j%8nY(8__7z$jnd= z0;v)qUe^W@F#hvhbWc^# zJ&wqJL9F?j+69@hx9GBr!jw@P)24**swo-@l7K{g;os&=KmVd;Ka{CRgx^0JP<{LH zsqZE3By+;m$&Ohcx|Y3^Moh{5F74&7&^&r(c(7lVW-^dz&LD}ZQi>~+U7=vG83js61DRBUgsV#*;&Jz6s;wd0#nQ) z907U?sBgHe>i`?WZ4f^$(0?{i#6qdpJmHx053Cr^EaxKXmCPs1`M){dq`H8xOMx0Ipm!P&EG#`W2?gsz( zHsF2FQttU-WrVnXhaaB{sn*trm3lcjIlN@rbb$IB)QiNw?i0SP8Pf#bbKGGW3g1^Iin9ETOw!S}n+e+2aP8!Nv; z3wFmq4;e7-x5<`Y1&byXk6q2heap4cIMCK6>ojNSvm6Op=_^)I3w5s(FF{E9rvWWx zrwD6Z_WNxIqkoA{qU#Ln1YL5$cSkgBtWO2#p$IEup@f_yXRgL8=THTZ2m1o0R8r_4 zVv;Rd(Of4f7bdNhod{wxnLG2r^O8+|nDe*dnyZpU zQa{VXVHaZCYqLn{Rfx=A4en0Gk4yC@Z{=HhdZ?KiuH~nZKEF1XQJB#4Z_btNbg6oO zxh}lq&b>X4iSJ8P1R%J|P1&CWhk}R4HQKK0AN>=b8b|SpQ)0NR?e_^-{Z)eb^Ofe1XddiI z+!!+I!eT@#pNJ}$uGd2#sjDC!$(j!iI5zn*}A69gp!Jt{cQ>qOK%6_! zwI}zSqudO*+S(1NpsPML66~|^e{S_w8E+BSkl|9_qGcTZs}qaJsDL3>$?R{J*DV#g z?Kanjt;(;jzkN&rM zao;;1OH!`|Y*gQhmF&3bVDS@_>>r06skY9N+aNb!#0ewE#t%$WBBZN7sw*ri5^_<@ z1f0@iT9?N0(7RVcb-q#Wsv9LwmRqm0_dT)5ES766qLe!l!~viaWFtXR8sJ0-C~kYh zM?~T}TXyJ2%`L^;^%DCZGd(Ffx~!lHv!PD!7`*f0G|VVMODN{^Ou`~$bIln30xa|> z!6!|xDWODed}2;`BAGD5?AdcfA`PG{i6>XBC#TgoUbmME*Qb4%)yO`qt8Zg7p&=EL zS%x@M0Tj5{h`__8844O-J2g3@9uL2YK@^&o|YOqjCtOjEKg)1?V(LYE-0OSjthwl_U5PC1UrCvU2zNYB8 ziY8<+*slw*feG&~|L#=6&;U@APfu+ArGT!CcdBU}f84|DvROnff z;D(H0|KQ$FG#HC7esh!dyIXpsQ}F3@WuZ&{Fo!ozvEDTb$03I~gfQ6oxIaF5l)4Qq zhp2Jvd#QE*W%fRybAP?3YxK+X{C-QRE~78^2XOPT!w=ja|J<7f)hx#l#1Ucq|6^}( zlKN2PsxMR|#u>{3PUp6OkYR1dfQ1HE$s(xq=cx}YO@_b(EU#<3sxV3g7o#9saPr$j zv&JcGZ^5XWTQI8WV#5KWc@=TKqyNAdjxFQ$&H!YGm|?9jV_VdR=COId6aTnwO2 zh7WjZ&Ka=975y8{e6s46-t*4f&!k0Tsa zD2Ix+aV3ps+gfiqe9@A;ZPTneR7I?Kwj6^`i45)bVEGYJ)7SKog>HzvXGK)+A-WQ6 zlT5tX9g2mte?6%1Oo=`(oRzPTvFN!s*A$)k!7XG0ZFDh46(o4w78x)x;}-ZZtrlq0 zwT>3m!%#_mUqC9Qm%_k9KbJAB)HKNJuO%O=^s41vP@7E!mu$@< ziIFTzLCWA_EkaAoi5%97%B`x^I+S2GC{_fu+Q>i^*RU%S|80}Ewf^Z<{Ce6we**>w z)?O$0Uy~^_{(HmEwa)#jr_;OB`}-$NrWA9r3)PmM7NH6ts18sJxQwyFD~e~jR|WA3 ztdVLq@uoy)2{kgv>9)8c(}u-9r~_wt>?PH%ZY8hYLEN`0RIRU%yI2)SJYu_u8L(Ar z%Uz8m&H^K>ALq7(r;o+NvX{b_?3dJ~aEO*!SpOAX)>&&N)_PZicPrGl9AoU03+zcqa5; z?-zexkYSuG(@p!kdlvRHO*QZOnbz$=BWIDwHZj?i9|P0+%rp2OY)8*)7JtvVBJ9MX zMYEvPaer3{V~QHAG)TLpn7la8e<_c9U8G-`Y>Of57Y|$aJY;zgNh}xbsDo#WCktcR z6P7G1&06O4>DV>#GY4hI;M70q%e)YTY@$q5dj5c8x@1{3no<--b)Ia|qoA4Yd7^c2 zH1>ZxegakveqP+C&uJN~sMQSa*^u$|280>pDP>A8O|=N{^f)kr9SQF?(VZ=U3VfF6 zC(kpZie55I9)IM@Phv)j|7#r^kp<WzIMLR>A`|N8MV}{G zOV}r16BzUBxwS(kGjD!!ByI6(vI@-iIJQUQmj^o9^h$0~dy;AU%MdiW$%L$b#gw>G za7QHGAkSJX2GZ`B_%{_ITdiT;UOOn`&M^*pEkF@T++Zi=&nPqrV*6`_Kz}JIoJLAP z?#>ydlO&06v3GBBq77n%YL|jMxNNDBNVq9vwdL~YSJWB=tb zAXHL{FZ#HcYef#@z9SHTiK7YdVP0ZjVqKJ7nAys1H1N>msCToSRTHBZN<*ib4JDeU zSYZDQfEhIazKmfCBGwK8gKEPbX58?MVw~(OgXR zZ&24t!NTb-c0TgqlUNSLd6DDH3Vz69Ap*35IUhR%_v-(mEd-FIelURvFMu_AHHyuo zb^>2xptVV2$|Xz2wNed!q5`zQViHxZ=tMn*oj|~jAagqk=qE(5`676CC0OfLJ~KP> zZt<=MeM~!X;$O%bR?+#*HBP$`hZjRu0~qg7a~HCss7iu(q<_9s82V`Zi|1g!q8m`R zqDwDzZgNaoQKPw6K$qQbt$^?loDsG&$%9!^AI^6xauQ_*F<`dHML{AkPprWu1QzYTp03>qi>y956yEbrVhqDTuV3=@qvPhup9+M zU}!i!%Wue*BlMyG%}JMDS~zQ1{rIqp|3(4nKVJ3!SCEenI|u%&C<}|>DSs|lpH&=; zW-e%lzjSrc6kwwLPVusT=2R8YV9XLc6$W|0==9A(V95?XZhFp8rD|e-JJxX97|7w#_m~g0zG|{ zzkXJF>~SNq5Ia|3p2MZTJ0Wj3=l>WOm}Cdwdz#ML^Ox})T&7w)x+M<#<*H0DGDQ$=cbLp_*?n5 zwL~)wmOhM{Y4xa!_4ymL`M1U#1n}n%IOcCK5RhqD5D>Kg=liCmlcSruiK)HC|3$NV zHAMdJQ$!E;88O5zdSVm-tz-&`3wc30(I$q#5}O4&rc7W;@f)H5=BJd9@)6fnVc%I& z%OQ6f0=~59Kv>JBK|*on#{HC25!`hKr~U*&qFD?W6+Fj*YgXYL(Eh3t1-7KjQ<$2> zAO>$ae>}3qb$ZpH-oy&JEcXLLBFs`j4S8rD;|Em*k0wX*ZIin0JQUF*JBB)tyCxNi z#^Laiq1B@kf;w7my&-wCB#}zVyw0aF4VfHUjm%M9P@H5rYS;XC^?IpR!$;LlgT-ur zy6El`;`pu*F|r*GfHkzXP~RXJG7;@7o^K0s4cf`AP$r2wc&}8?ilgtZqh#&U2E%R< zlYxYA>NKW$>EGNhMpN$!$&$6e3C!WswSbXw&i#YV-_QC%))B2@&4>A;3ek=Ttr0n0 z{noZI%64t-c&&%lvigN^W!rIj4M#8(`{$2Q+#sc(k{??H zlCSFaF`nUKVi1_aV5n5#^=Icizh1xY7qg{y-@O!c!}^eR^^uOSnl+XD%0=d8bL|<- zt6~=w*T}sSQh2Yf$H;8jHJLf~kl#b!=^Ge#o5dt$ia&c~57~+^d0DLFX8DR6lAE{2 zCP+IX|@B$J{HJ!>d6ad$^!RN@G-^p zO=h2C&eYyF*JN zfaQPyid&9IOb(iB!_*u;dBR+CroO_-XJaKMKb)(@v?hEq?>tAQEB=!M=BY@d?*m8J oAUe5!o*m=E$>-+TFj>k>=9zEKlq54bQC56%%zOd1?UO(%0aYtC0{{R3 From 4db085ff1f0a58eacdbe568ac3f88f6e138fb300 Mon Sep 17 00:00:00 2001 From: yang_shj <1069818635@QQ.com> Date: Thu, 1 Aug 2024 09:26:28 +0800 Subject: [PATCH 09/12] =?UTF-8?q?#=E6=96=B0=E7=89=88=E7=94=B5=E7=AB=99?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hzims/operational/main/vo/HydropowerStationVo.java | 15 +++++++++------ .../hzims/operational/main/vo/HydropowerUnitTargetVo.java | 13 ++++++++++++- .../scheduled/scheduled/GenerationScheduledTask.java | 7 +++++-- .../operation/home/impl/ObtainGenerationServiceImpl.java | 4 ++-- .../main/service/impl/HydropowerServiceImpl.java | 14 ++++++++++++++ 5 files changed, 42 insertions(+), 11 deletions(-) diff --git a/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/HydropowerStationVo.java b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/HydropowerStationVo.java index 6b34729..34a14a1 100644 --- a/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/HydropowerStationVo.java +++ b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/HydropowerStationVo.java @@ -45,30 +45,33 @@ public class HydropowerStationVo { @ApiModelProperty(value = "总发电负荷单位") private String powerUnit; + @ApiModelProperty(value = "容量利用率") + private Double capacityRate; + @ApiModelProperty(value = "月计划发电量") private Float planPowerMon; - @ApiModelProperty(value = "年计划发电量") - private Float planPowerYear; - @ApiModelProperty(value = "月发电量") private Float powerMon; @ApiModelProperty(value = "月发电量完成率") private Double powerRateMon; + @ApiModelProperty(value = "年计划发电量") + private Float planPowerYear; + @ApiModelProperty(value = "年发电量") private Float powerYear; + @ApiModelProperty(value = "年发电完成率") + private Double powerRateYear; + @ApiModelProperty(value = "今日发电量") private Float powerDay; @ApiModelProperty(value = "昨日发电量") private Float powerYesterDay; - @ApiModelProperty(value = "年发电完成率") - private Double powerRateYear; - @ApiModelProperty(value = "站点实时温度") private String temp; diff --git a/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/HydropowerUnitTargetVo.java b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/HydropowerUnitTargetVo.java index ad37e5a..68ab05c 100644 --- a/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/HydropowerUnitTargetVo.java +++ b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/HydropowerUnitTargetVo.java @@ -5,7 +5,6 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; -import java.util.Map; /** * @author ysj @@ -41,6 +40,18 @@ public class HydropowerUnitTargetVo { @ApiModelProperty(value = "昨日发电量") private Float powerYesterDay; + @ApiModelProperty(value = "本次开机时间") + private String startTime; + + @ApiModelProperty(value = "本次开机时长") + private Double startupDuration; + + @ApiModelProperty(value = "年停机时长") + private Double shutDownDurationYear; + + @ApiModelProperty(value = "年开机时长") + private Double startupDurationYear; + @ApiModelProperty(value = "当日机组有功功率") private List activePowerVoList; diff --git a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/GenerationScheduledTask.java b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/GenerationScheduledTask.java index b574b22..29b4042 100644 --- a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/GenerationScheduledTask.java +++ b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/GenerationScheduledTask.java @@ -8,6 +8,7 @@ import lombok.extern.slf4j.Slf4j; import org.springblade.core.tool.utils.DateUtil; import org.springblade.core.tool.utils.Func; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.Arrays; @@ -74,8 +75,10 @@ public class GenerationScheduledTask { * @param param * @return */ - @XxlJob(LOAD_THREE_YEAR_POWER_GENERATION) - public ReturnT loadThreeYearPowerGeneration(String param) { + //@XxlJob(LOAD_THREE_YEAR_POWER_GENERATION) + @Scheduled(cron = "0/40 * * * * ? ") + public ReturnT loadThreeYearPowerGeneration() { + String param = ""; if (Func.isBlank(param)) { param = DateUtil.format(new Date(), "yyyy-MM"); } diff --git a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/ObtainGenerationServiceImpl.java b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/ObtainGenerationServiceImpl.java index 0259de2..de2d8f6 100644 --- a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/ObtainGenerationServiceImpl.java +++ b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/ObtainGenerationServiceImpl.java @@ -476,7 +476,7 @@ public class ObtainGenerationServiceImpl implements ObtainGenerationService { } Map> map = generations.stream().collect(Collectors.groupingBy(ThreeGenerationEntity::getStationId)); // 定义接收参数 - Map> container = new HashMap<>(); + Map> container = new HashMap<>(); map.forEach((key, value) -> { Optional optional = stations.stream().filter(o -> o.getCode().equals(key)).findFirst(); if (!optional.isPresent()) { @@ -488,7 +488,7 @@ public class ObtainGenerationServiceImpl implements ObtainGenerationService { Map son = new HashMap<>(); // 遍历月份数据 months.entrySet().stream().sorted(Map.Entry.comparingByKey()).forEach(iter -> son.put(iter.getKey(), (float) iter.getValue().stream().mapToDouble(o -> o.getGenerate().doubleValue()).sum())); - container.put(optional.get().getId(), son); + container.put(optional.get().getCode(), son); }); redisTemplate.opsForValue().set(recent_year_power_data, container); } diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/HydropowerServiceImpl.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/HydropowerServiceImpl.java index 0e32c6d..d646a32 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/HydropowerServiceImpl.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/HydropowerServiceImpl.java @@ -161,6 +161,8 @@ public class HydropowerServiceImpl implements HydropowerService { response.setPowerSum(this.getPowerSum(realList,station.getRefDept())); // 总有功单位 response.setPowerUnit(this.getPowerUnit(realList,station.getRefDept())); + // 容量利用率 + response.setCapacityRate(this.getCapacityRate(response)); // 月计划发电量 response.setPlanPowerMon(this.getPlanPowerrMon(station.getCode())); // 年计划发电量 @@ -179,6 +181,18 @@ public class HydropowerServiceImpl implements HydropowerService { } /** + * 容量利用率 + * @param response + * @return + */ + private double getCapacityRate(HydropowerStationVo response) { + if(response.getInstalledCapacity() > 0 && response.getPowerSum() > 0){ + return BigDecimal.valueOf(response.getPowerSum() / response.getInstalledCapacity() * 100).setScale(2, RoundingMode.HALF_UP).doubleValue(); + } + return 0.0; + } + + /** * 今日、昨日发电量 * @param station * @param targetList From 8f79ca942d16e514f77a2d38a72304686b98a082 Mon Sep 17 00:00:00 2001 From: liwen Date: Thu, 1 Aug 2024 10:47:16 +0800 Subject: [PATCH 10/12] =?UTF-8?q?fix:=20=E5=B7=A5=E4=BD=9C=E7=A5=A8?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E5=8B=BE=E9=80=89=E5=9B=BE=E6=A0=87=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/FirstWorkTicketServiceImpl.java | 10 ++++------ .../template/电气第一种工作票模版.docx | Bin 40818 -> 40668 bytes 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/FirstWorkTicketServiceImpl.java b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/FirstWorkTicketServiceImpl.java index 1382892..cfee432 100644 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/FirstWorkTicketServiceImpl.java +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/twoTicket/service/impl/FirstWorkTicketServiceImpl.java @@ -370,13 +370,11 @@ public class FirstWorkTicketServiceImpl extends ServiceImpl%GvK`jhw}cW;3L$JYyl z`<$k$P@zIm=*wjb>>xkVfmwL)omYyRs{9x{vFO>{NDe?=`k*-R7W6_8vy>(%AJ{G0 z&YWWS>Ei7U`Dd+#&3Wb&!0`tM)Wy=Vp%-c*f1J~ACyNm%Q*%9%#k&v48E?-}_tHyf z8fL;RtP53s0!d*MtJgx%9PCS(yN^L#uug^5_24Sxn%5w%4mD^DY>~rSaBd3INVp-r zXq zsGjN_a~4nl)IwRh)Xc;^FF%9~Q*)^O(6hoQPSbEkxVqXgviJqhbiEu#^^Q z9b=zUjX9?N4JFP##rM`Y@Mk5G;uL^ z1TP2!$AwmqJL)QU-@Y11b(Ie)XCb0R*FTh02Z@Q=^Y;kZ}us1?MoTY60oe=Yw6`@L~Js8rhYc|<7UBxQ|x zVL@T(YIk3lb1ULkTC98HP;Nm@O0+O1HRcf!564O57S#S^WYl;*l?it;X|2z`IQ=8j z5A@$snw>zq-~f<@@+ke#KtMzUKtRa%+=M(-ol06)6TXOYub5>^Px}e z6On!!?+{*?Z4ONc2-U)b0+mb3&OQZ9r{!HSQ5Eg;vRz6lP36Y4++4nB;Y_^0JMicF z^;XU6fv!z&ape^CBT81@xYsgG%+H7a-4#zhc~WZa6!6Th(y?!`3gak8wo+y|vxt{~rG+($>&zuEc6W26RAH0fxE7y-b0mM~$te)gl?;V7o@ntURHp(lzorfhDl=skh z+bp}zfja&59kut`{nNVpMxXA24|Tpq{2ePG4j`GFY|Yf$QJc-4pT3u;Lrq>k$U%@@ z#=RlG)~FZIIoL>*nFAl7IeX~*vhdspBe(5wcz_!cg5)@>wmi>nw`F^AoSiX@z3`S6 zT;XGDYhs!8Gdgy>v&i29qzfkxkzx#=*bos6%CDq5mhG$Zvi9z~%5gdD#LD!Enr_zz z4#4?Y#F(CMyp9&rpIdzgNy~eYZbh}za=l~*crLe$l0>AX-$YyzjS%E9`mX~BKLPG* zv*B{RXB;LYUleW6E*S1$f2wB0ndvhez{OD)`<)frup6H2U&=II0W=QFjtyHqn0_(r`Z{i>dUQ%f>aYW|AG&6v zmCU+Bo!WowV3rxzK- z3ggcIu88G(_-&$l*==R)0{*2qo$6-OL;TVMEZM&iKN&8_IE6R$>;}kmkeqHo0f%LJ z{yEpow3H2VG?WV2xGpAAHJ3N%WyY1CP*5glpNob?3Sq4p2H1#i zcZ&>w_xgr=7t7k-S^@(9sh!6cz}J4MD)3_SRG};q(ILAYkn;M+L+<|hCQnZv(9_@5 zTut+Odg$Zv?&;W- zfG@}jFU;AtJOktxgfxUXO$j3vk&GWMIgg5V(BZ~Os(1qzg<9c=8>~nHpi^LiVv+WW z7UE1?1w#|goL2PeFdP7lO17+2ymlm^6!J0cp!1eQW*n4NKsZP(P@<_d7%j5iMS;|rBbF`jwn$n zePU99)+rTRij$S$C0h;xln`X4*=7}St22b3)5u4x(J17!%oPzEWqqQ&Q_-o}I7bvu z7AYI?eeqjCCn`bIwk2+~fvBq=Xq_Ap!ft`kH ze=0kqG!055Y8J2pjF@E-yrs3OG^dbal@$YE@DsxyRD(%~`$W7>I>(&RQ%NNq#Y1c= zxeC1C4#>)}?>(zbscS`vqpMV52NR*nsFw@CQnHGrjaI{GZ%Wl9%L=$#VUnPRTK82o zBZUV_(J;tXI7M;>T1*I4JfoCkT1(|g{>GF6M>z%w*(Ol~>==86l*1GUY%efXxuTU^ z{#}Ncq`5#C4;pp7j8R)K5y0y!q9RQTneQ*a5OEvMC|j$D;*Vvffi$xpf;@zX+D>)I zdxg0P$CS&GL8HLRa!(Vb_C0}?MgGwxW*Ton=9Ni|8F4j_K*`{ZY)}kA?qvc!VaHz9 z$s&WPHJ{-E%r^y`4}gymQV~6X?NhokFc9Tr$i9IUj!{vhc#j|w9&@!xc=!g#hOo{N+9)P zWUfsab14a;4nVo5Bk!1ILB?n&Bq?1XPzJf?luCxBrbxjfzboV4u_1K+Sqv;;24y9s z5s9}10KwlQQE5sm*Mz4IaaIgQ+zQ@t8a3t#lPfX@2!+^y${YF#5>c_O`^jVHQ429z zSHh=gk-ko$Z6?4)(^^RtVZ8(q)uO}c!tT?d3YSs2%S#TpG~h$u?5iWqNT9DvP@pUV zv&Jj3@E-I61zsH>A)ukrk~ePE1&tIJ5cyI8;+0XX;mYtzTfqs9?Mj0Kx6qPC(f+BY z41FM(C5f72ky9N(2fnPqc$?KW`W7^S-DF`Ud8Du?bIv$V1)tDTTOox7#1n2p6GKJz zf>$7+$u-(5qBbCQtjbtt1u$YP~LS@3A(XhRpi5q_eX`t*a4Uwc;7eWlTyVyl9;d}%Z!Xk+hiB@Q*p<-AWBb@I( z*rZ|R(}r1qd(_mIjnZBU`F!CW<|+Q(Y;#Xnd+8ieqz|{i8!#ExCE#X1S*MERT zN}g|8=wjgA9j3w$E0BD=#o$51FB*32PMSg0;Zd6{2s0#me^(K}=Ho6lv;!hp`3f2GN|`6>!&%jO6gwR*c|J zMz+pj%t7q5R$dw3IDHW=Ipnn1w>o@XG{HN{v4ZQ4GQh`_HOP8(H z*4tMemtRQuQ(sPt6YepblCmW%ewBHrf3i7w{!amDrbLC3`bbSRmfVLejdcCFV@?Mn zb_Xl=|5}`uR;6$Sl75fz1C#jQ4LWRY;RAr60`_FUCayC@0i;m2SL5DatD83U&(XiU z-TDTc#TRz98=6xM^^BR|tx7g^ma)q+nFjq@TuHOEE%2p{MJw6xZdA>sZ7jc?U;V#p z4D5e2vRY%^T8(H0QDa{Y%&Xf{v{+(R4;G8BH?z9xS`4(-ti7AJb=mYQ+1BFOH8fhY zyj`0s>v4}U0cnHz+TP7&ZCiJJMN6E;EiCFTm%X)YI@X{&t(z-r=*8dCDgu74dW*X| zmUw}yI#GpctzG7}LR&GW9Lu^>wr8+;f;1pLqp^=^n?(Tw82+Z z>>6zgyBN9{7&=jPxH?)>jKX4j8MeT?OWt}C9+=XtcHesIy1d0J>CA3!ew=GgJHp)G>a+Hh5JkFwC)ILe^y*o0#BuBuH`(AP zW_?}FUPmD-DqDSvuR9fkD;xaBk{7R$@|e?FKHI7|u3oi3?fXp(_Q0G~K68n^Dg5Jf z0l}HWd_n!IRePoPug-Edm@-&uRygl%Wd-&KJGay~ey!`|#g5z*V6Jhx%{-9R(W-02 z*j%zsG8$V|{^GN=3>`n$+aGn0*R{R+UGiMqoI!l-g&>zG%anW`>3*{gVSM;WVp^}9Rl2O^2+A@Di=`;XG@1vbnQ7c7oWCOJ6Op^Vx(Z!#`!Tt*~0$4t~1{ro9hXCOmES8PvXg3(Z>w2iC>x z{;H}kE)Q&>6^Ip{6=o#nZ*UV-3%=Od9mMB(+77$ETJ|OE8R!#y7Z6P$fR@@KuDy0{ zy}e*MmK+<^RavWsgZEE?oGZ9ThAT241pg3Oi!}ahTQRfcd!7~;E_hM=4clz7}a&A3nHWbN*D;UBIMgr zB(!1I#*U;y>t8f5P#o->CZ{DRM9e*Wlg}kJvQx2PP6INj(^~`qt!=Nb+HaZF&MDu-UR0|D&zw`zZywKcklHjpg$IP+Y>n&K1jgd zt;hG`tr7KCj4&!RA)HaRj79q{pa-1#3{0>z!N{Yqo@`F2o2P~;;hZfO`RAp*FA)3% z5Vyg$4woU~Ri-LrhJpzOhA(=|B1lHxieZc0^$+OmaOZLBB$l9Jsku>bqGU9YsrbA{ zP-8$aBi52*olU6{Als6V8+{ze1VT&DN$8TJN*Nq`;`xk?b9v-c>tALsVk*Nmp~ zUw(|H>5AVli~D9HaQe8UoDCfa8!z&@K=gQ)6J|LX6dUr+?PxTuv%-&ROUyp%#;9?H`cr} zW6GQ_6_{YP$!L({;*Vq3$<&1!axK32xh>79p;BgqsO?s08- z^B7;Jcm@dpY@6rZu{0a7(4h8AAHU;)*>Cwf&Gq?qJ0Cny3ipIpSOSU;6_f?AaEmfj zO1;SWaO~Nhu{ZBmw?uVHr|WSD)y6nn=+Cfg#z%yelE@N0E*t&lu({H&%VRl#cY$wP zaEfvM0e9~f+d4un$aOHv*B_kYEhjXwJS!XBWjZnu6MGdy0jVWFh*OK=kJdDuQn=My|2qirU z)97$ei2aboSXATanYL}5=By+~O{=mhte~ebLp?9-PGR5p=yiXh35nT$X@zhxqfJB} ze_d_>dWh%c3aPK_EVxeQ&(xr=1CikaJ)hS*xBjdSx;ucUWUt>MufvPMQ5#TjQt~l$ z8~`>kG~S326w3OJy1M$Fu1xnAfa8G2-onxU19W!--!;O0#-dZXF9lDO2gY$P&O5Ih zFJm9pT)=p89;kGK#6HG9OC=m~wdu{MVE!V4!w z$m3!Z5QEGn#Ub{A=lW-BAvYG;DgiUCfgBV=stRgSR8xfwC@*Be8=KXzaa5!(#-3+L zK;19CstPMY@6VToeW|Y_GVPA+i~4L5xengvPABj?fF=QrXVz$eWuuwSF--vA#?(&c zLPNi!e_>?LvR7pFQQa;f6jW;7GsO~tr^HI-?WZg4_T#xi@>eFeTlp(O?rwO-f1QYO<_n6F^3$ZcA)J;h`YN>p zO}|ig#HN5`y5y-({KySnvE%JAHvo zS^HWQm_P=pNI5gLxVrk+M(_Wf>~-juGJC(XI|J*X&)N%N+S!e#(V2x;g-QNusmfK;$O(_O?)}LM zf*!O4`7QJSZw*Fh0EGT(+hHqGaeR5`YS3L-WT0Y}FC#zv%}mp9vjdm=YxSmMTNDIm z$=*@JCXzSZL(6Pxnm4VB5v3AzIll%q?j%2!ZN2RuU+7bP@0_YEh9uR5*Q0yfygJ3j z7xqJ8b5TRTxuN!CP*pL9CyPh_nl^mdZH~Ur7FT@j$;xMW0JxSYm?HEYZpB|Th=w}G zjh;Sww}g{>nM^wsl;>t%r16ZsA{V_{3#n7X zrW#KscRN351CS8HhIoln*HyR@tp@{e(@|x{aqGqc8`6YQ8w<>4%Gdx1P(x0W<@3qJOG0=1Q4?1bKc*Gtw8pbUFnGQn+ zXks!Qlrp^D>cJZl_KS^}Vo_?Q&f?XHp%ubPqHn9gN8u4b>IGVRnT+o1Hd>!^LnC&D zgs~7C0u)c;4W(s6%@G37bA@SrcSSgmxz8sOg?0M!=Vg zfCjNhx^!N)jxc4R444lFE=h0Fyzc^EOg{({kCw1|=`F>WSoaibL6=a2o5#VX(VP_Y zC^S3cT@JUQP2d-LgGE*!9=qN5d-!Z)uy(^A3s2DY4WS!aOk|9jAta z@O8)Zk(0~mzd;FwoX=ja{mO21jFs+LmI?ORx4$il6VYUO)7^=bZtbfr3*6W$n@m_E z+f!+#VYK3Xu=uj_nUzg+qVLj8Bw3XkdQM+|aycYKAuf>{m*p zRvzszzCu%{G-mDi*#$GzRn>BMFR@_wwH4?=YaYYU*LZYhoEXW#tDkr9c|+tkKnt8p z6rn{*QFdqOJCw(c?%G>Lq5UFPyyAUx_SpNANPjM~v*pG|u}#_)%{Q2Dt5H|SYr>&h zKAHB3#NUAvrbD_SlyLFM&x8U1*Kc|wzGU-g&d!5$NFOSTXqgmK060;*WOc$oC500( zzD#0OReGjQt$R}lNyF%#1p+u#KYv**jL{t0gzdD>aHo}cE^q5(&x5VrdWJ+24Eznw^*H5+8h08vjIY-CAJMN?OJ#fgtkt)dmEXb)zRVGg%a~JKsDLF+}~+xOG<^<9BH?gCv?sE>I!7#>exB)RG+CnQ2y( zLLZoTZeviyS|gPOw;wyeUIzga1+%i&li;&wot#0%oa>?gkZz_;SJjfE5`1|S1V+@K zaS+K(zl7zfL-f!4M60C9=774M^{J-4Av;*lOH#jMrJKGT$HgMeq=FW5=O3-yti2QQ z-|HB9k@*oP%$AjJ(B8^-7NJLpv}R%rdT;7e_e$FURM=%T9QO`D#dzW#5d-N=P)?1b ze!s4v<+ z<+pyG2uQo^&VKb$@oSW!48w1uH55Xrup`0QG$G@LqiiF+SR0#Tm z1+fe^;)YIM++C6*_E#c;6>P4r1jL1LuE>2p;9h?lQh0n5M~wDVwZH4$@N-Us=XZr5 zl2pW35&?%2AqiXcIn&2{*c^*sXC$obKx&2=wq~-V07-rYgA4vn!iXZuj_uk1av*EY zrkvDj<|_n%P!q}a@C_2#gjw*nhmnV1RvEv?ge(Td_{d9j>;@ls9qsASS-a`zFl*3t zG1$ny+4~O3Lq`Ii@8#0~a$2I3wanM{l(w5FDFs}Pt-7Op;QIO;`lb9_-W*nQGb(-; zn`2CN@{`BB{C)S?{!PL?Ii{Zjy|{%oVx>`2?{*k~wWP{lSnJhhX(Jo76lMrXls!@l zi?DmN@RI|Q>@4ALtQyoZ{5)Y{5d<$3pYyQ_|n2BNVP9o9b;+A z+Fb!K-1xe`_f2@yweACI!q5AAxFBVm(L?cvnm>iWb+sekSaYm3;Si2rO_I@ZeHb}> zzTa9$0n9?4i_Djnh02j$7sMp&7%)RUAGv?I!`JB_%^~m~ic#u!^)N?89;C@&1xkMg6u6Dp%9GLo)&}3ND{8PmaJXcYmOS&R-#b^J%`?ItHPt zUvTHkq?VSM-F}$bpGuggGlRhg-eV|`uc`tE%QK&pl(ygf;$#eJNWshO9WVw#YvyPR zltgM6X4iE@sf?A>I(`cd|aOdQ!cT)K*M8WqSc5joS`8<{(C zq*QVQsb)!S{kOQA0M#cIPaL*MX@<1JT7rcfz0h{qb{GpXTF!)s@Kf6^wG8Xn?LwVU zJ2in~^E3;FHjkMc`F5CP__=d+BDH;rg}B%)l9)lRZED-H?Yo`Mz5A3Q6cIp}7$A(g zf<}4Df=t2x%3mi`H|^GCA>$ADbS18P4CddF*d1y#XB7DhmZ>mP^|=FhDa>xZ3TSiN z%mt0{a}0(bgvOZ^^0JbeEbq0{($WPoE3$Hv&fE7bj& zHz^7{oP>`P^vl}@9Ly3+9RYwt&HqBO5-hk()OOHhx6H8$V?%DF`L-#?4B*1suNri0 zCE&%f9Q}uel1nYAbk|w=nMvn@#FLMRlp`&lbI^IRlsI@C(S*!@JeAQIpqTM>b)+JH})z#rxzI|Y#T^EEJeiW{6b z8F)>V-VctTAG%L9oO6zz*TpTDr(T16=Nkx@XyVe58qLpV>F*Kt^K4E*XHb-b!}(Dz zN3OQoN#!ZjqOY(woO?*AjoS#1GK0$BVy-3OW37)|{D?`KlLBP&1p!xM zmZC)h3?PD$=LO)|(t8dmChSxx1fQCHe08j2tg%iBm78O@=74|GBU0BX1hO0I=2t|o zD*DA$S9h+2q-N7RVy55wASgMhlH7zFRneDwBQAQu)VbH@2bU)?cF5*`ghCQDW{e4; zAwub+;0a8sN-SyT18vsZz)A-R6J+6>MLTN-)*pxt{k%I+DmURe&WJ)kV`bYam{gmiMte}d8o#d#aC*ac1uK6IJDgH?0WF;&5vaAc z_=|peUZh>$U$*z;ERK57R+P>Jd|i-LzTdB&9k!^8_=}g03jc}4q|tig8sbYP3bJPK zw-udLtbE_0QHvthG08U7>{-`b3(8@*V$~05 z&nOuk@PC5*;E)hFlG9M#yjjj_9ex`>*D=Uqxm8gey%w9(^M2LVWgE-JM!5u%QG>Oe z^$O7aN{iI2z%op^;BQfQ#71*EtyyBN#L%IRg{XMK#gaT*D)?@{&m-H~g%u6e+@t4F z)DVN+Fwz1y^i~y{)oku8<0nKt%l_t+$pZkQXs^!4K+y_OzB{GY#HpP$!T&XFmi2|K z2_2Q%dTOp~tb`IcA6->{FJ&@eek3G+W&04=J+QQA?sI(*{JkRO*?)932}+-5!= z`8yl}-^;(}y4)5wzNY{4@!>J;25$EKjDR@PD zS%O2O7_Sfy4GF1SqGl=KMkoi+1yuKpoR>0Qm6Bc^94t(<+m!fklKA@W&DEpT9QEB^ zYzb0&(w*B72Qt1h{^NA?q}qycel^4TY?1A;w68yhqC}P%N7Aln=t0PSF+ii$Hf2I-I2% z*(!HTss&0dd(892%|N22i6lV#AdrJgg1!Op^iyVmX%i^{Ksx3R0cQZJ^iFG3pip_* zoO;Cc{V23K{1Zmnu$(_BqbMWBa5OOJg_2q`dOs!?wB`=Z@Po$d$dX#LLbMS6;nInR zkE+pRBGE=Q>t3(0k3Ve2`Efy*_cv+t#iG~D)8+neHwJY>sZC9!O8PPo^|5i7ix3!U z7E;OTVgzzF7vWhz!3A(|;x{i!Xdwini)<>I(iF*Ft!p6yk8XP8$P zG4}l0BQiwK7l#Dp^ouvWs=?1rB*|_dist+Lc>Dx`-C}`33Xg`hgg5QVakqi>_;XL) zjU>$qL7-xt&hpT0!!ct~;D#0O$UD~{pi8!P z&`RTbi4Vw;;c41rI;Sy~NheYw*cJ6P4b(a5IQ_2r`+ik z6#o{rnX4`1HH@ZgRO7z~`6It|d!*+r(kX{wC@%zru7rhv4N>$Jhh$dO#6Q!x22-W@ zlVR_6BhpeBBOuU9Iq?0ll*WU6o;`A!uuVK6o|6 zlB*y_a_NjXC>cv7n_EtI$zNLrGf({sIW6={DWxQze9~@6fb0f@UbdYC+k#q z5v$$}QNX#4E$WPQXEt?XRh@8qI`bW^wZ6@O1+en5rh#vyA^RV;oB$}davuU;syZs} z7;J&||Jo)I#`wqX=k2agPzt!YO_5m?T{WQDC(50@Fq+Mi*O2kX$KKkr)vVPJpi47sDEMRw32%+V(rlOUHhaH2w%(eXe ze{=*M{C>P3e?$HzaE+i|1_qhtzzPgK#pGYMw;#G%2oslw6~s%E$%|Iqhalk}Pn-T7 z21LUp>F)SFtb|_&saOuG*He&69+?TvJ?3%pY^ghAc{0V&v8Th=r=u8^I4RG`zgGPh zIO81p^$a+U*kae@3#;2(0gqf30VX_aaYz> zH^u^q!tBN0g4m3g@S&F^qZ@e2OHm9u;y}xg8IYs89)E-q(U>>$pj;0X_iP%6iZD2Q z@*0gC>>#G6#(uF58Ik^V2Mn8&0$!h2+kCYVf9wx)G(mVI@nF1%B}i&IDpIt42iVhU z#Iu-?%w1}EQeD9+F5&tT!#8GSF+D|9?0ntZ-&qsLZz#{?>TQFYoK32V#{4N& z`ct^7QmNeqO;aptQ-X}<1~&-Q34rU7iZ+g#h=hjq@ap2k660(XL44lacqUY43@GC2}Q&>g8vbqDKqS4fPl=2gmekn}_{OBJNck*)qklyOZy3 zga+eyi;XGCM6(=IF+?40g4U}t&pb9~BsIDnTg%POKKUfjp>N#H=V0)C1w6bXyu-AC zf1FPv&Sb9{-W?G~X}vwUa0ae+er9?dHeHK#A89lW=0GM+bQ<^3mL)z)Y9=0bxfzG& z&{#R0h;Qmp?eFSm&(7A!8^((4IW5RQT}V?0IKp#|=*glLJ^s4>CyF|z2?Lk-G9)p; zz8D=~FGTAL5a;KSYnwQC0X8`|i$3em<61Ei&asS9dKMN~L^h^fkStLva<3D5EnRTy zeA~f=(@;>rY4<)|G437WMY-EbIBC-fZm-9W3bPD9rut%q zMjA3BJ+6O4F!NP&-47m#j@KKr>|B=yzZxc`;TGCU-~NJivysF$ej`Gl=*>b1=M1kS z(t_x~4qtY1X_V%^@eQGP4gqp#z!T(49$>{q{Q>lB7wq+YTMEuI4K24l8N;(*XDcp2 zIs+`5f>hWLjz~WO0HTZ}voNa~r~=hwiUp!cmPD4O#czfT5gf;uah@As{+y$R6ov5#(T+&EMCJ6Lwo+J%G@Vb%DaCobXBmOvVBu3XFM2RV z+EN~$pu7sF zi~s9NN%DTL9VE6ha(=kIM${QoP(1rcozWHSrObvc^F+ZTWX!e(O$IY={s(r9hzPiA zO8~DCMP{!euLUJ<(uU@OA>5C{>#IN92RCDg zFPL;d5UL%UN>ZMq#K0s~|CzUjom6n6O#8<|y7Mwh+0K{a@H=NgD z-ck~@WLMr|LStx~5kF-OV-ZC9%j^`M{T6}{P; z-pos|(l*1Bnb6hC?CNk)Nvx9AOyuVZzBe#j}UBnZVWNlxP4q*G<2U8B{b)=b80OfDf>lcNTZG_iO9 zRWD6+=8B|CjlS_Kr5}-kdK037Sr4yZ6+nT>5*R03q>)SFbKtH^4r~CU{g6E%0f_<` z`dJ8&n(~Mq3#P(54`)*3Mmq^eGQg$MH` zD)FKGh>UJtHsM6hC!p{^OQ+ETsV0If95|d(Ut~_;?cV_88Q_b3CNjAGbu^eG?@%F*T_bC=|Q`6yyO;GZ=@Zzog>Qa zjv4%IE^y)B{O*2u$v|UAatB8+!xO2dCal!J1FdK2Kqk)Zj9O*HYAE(0${$d#!6M5DrkBoedoJkcPc2?vcSF!bxYfUPK2(HNclAdzHGTZm8L>7TcFh+8oG_wwr zf(%-4rb#fSeH24k_Zn5I=6t7dBr?Fl~2yN!+)` z@x_H;KQGQWHa8{k5zEn+8@{a#pO-*^df)|B!8H0p%_A8Q6{qE@Tv{5!Ziu>kvJ=tI zuRP_}bBuR3WNyH?hh&l|o;{3>$cY)vxAHok*4=6H_16LqsgSq_A-`(X8>QhvMrenR zlAl!u&J$#f(n7O2K2v|M}CNlt7Do3fDdVt*#KTKL5NNQAF z!LBk2pW#~~%8G<z2XhwHY%a+H{t>M6io10eT$6zW@Q%Tr z1$O+rcYQzh|3i4v>e^jyxX$;NNn^x` z;9p}(;m%^1uZUuqyMeU(`|&TJ(=2S;C}p%9N?bieon+LIyvRlLajxt|;n2)t+ z2hCI{vWCzmDsDbvwZuho3_^OB;<1PQUljr8hU#(xU_63m>O63N5c*AG+l&k>gYC(2 z4B4@sG9l(YgF59YRXdt;XgY$!5Q!er+}84msMJ0Fmj902o~4dOv418z(ju73cEtNG^+wukH1UZ={I5 z`^V>Wij4B(fuQl6Av4Q6NcYddfHNliI;;ayH-l^%qDg&fw@movIC^a_!iMW5HB>Zb zuiPfC3UK8Em`gD=S4pyW)H! zkJ0pqP;751b9J5xHabolqyREmWay%z{my>^%ft`<)7b-)`cF9lQ34w-58M_D3?vFD zq$|rx~$G5+l86(7N1$6cjE!|hZndoae=vgE9j{aprhgb+Afv+-Wt=c zWxSXzrZgrNM5)6RrU)rvcc4V7XY>DJri$wE(g&q^MN&P=bC-BoBhe4s734Z{q2yO8 z3X7!rm8%#38#;UQ%9l&^EWz&$8s{VKT{x>K>U^^@a`1zfvB!OVkT!9cP`YJ}RD*a$ zEZ3|DLlZCqd=f=G@r451qZ9?x+aaPg(K>ahZn@6*2a^d_rIwKqOG^jRgUosSEF^1f z?SK(fDK(0)w405lGf7r!dws;|J9}o#_gBKhVV3_83jCXx{rto8>wV^t6MjdiV(Kir z=px(V00lh#B2`No)llUdFHCG~hZ`wyF0>GWRoeVV*UMtmXo^}1bt+CcVe#!g7H9#SHx_~JhF&op3( zd5{ZmxchCn(_x$UYxEyFO!@*xS{(khp9%CSbr32IO|8_e;=ArhL))QpBB@B$V!11w zsD;mtGkjoVeH|FI;Dgj%it5c~R1zQxn+JkQFNiym4@5xX3B|u(mZfkXKHR-;Zjur( z#K_GrODXWLLg*~>w13yn-RJc@HP}bs<9ZDck~|_=gG2=@s2m>ouAeRwS?IIG&9(L#7BjQff7?23+tWdc6k`Os-wEFR~F%$vt zomO;d^i|eUi_Ku$7RU9u>&cE6l;Y!kJHkN2yV3ova`^;DS|9Aa6>n4_XH*Cm!|PYw zQF=->U6kwrMH*Iwlw{vk2NQp_4`ZtTKKzewNfc{$DSRx?{!gV7_yULL_LH_W{b%G$ zPNx1w8cu;v3RHR^j!%b+6+2LB`>6mnq*wPSBuf0C2YbF8Z@2rk-iru$b2OSb>uPPn zxH+1p#W1FGyVDVF{{8#BTn>)MCm}fU(0C#6v*~+V=y@p&m)Xk%Ql(4-7dL;%v(_D~ z)X`W`Gb^^|lt3Cn$Gh5kXHgmr^UaRF_PDAw;%Tje%+o%1hoqy66ps&x_1}r zrZxGd*jE0D-jA-!)ela_r3Lj#xoh2IjXCjtwP*^=Boj!Yr!#9J zj=s^eV=ollQ6^76Tv%Jif%uWP&Mgl!^`U$K^I|F}2MKq1VP{v|D&e7--K_3v19?pt zEa3agZVlz+gfS}|LRw(bRoJ?MLaFQ5a5y}B^ZKPo@D~ZyH zrM(?Xl!?k*X2FRjo9xi6w3QH@?u8a@#ZQA}oHQA>^?S(LKl($kLzR`qv+#zBssl2g z!l_WhrH|)Eb2dh5tCJokKAlgbHuZC>VztSbKo1PJJ=BzGba<&-Bxr!XwVA3}{Jz;i zL-D%OpmWf7W`z>z)M9m}YL>k9LLC`Z*I7vPW?~7*01kadq<%BIcQIJ1zpzLtbId@F zj`k@Og=5YED(?W5FAArO(pAP3*Wa*>zoIC6Q84-pJ}LAyFrLG9T(|pF)n`R*`*Hg$ z1AokeT%J%&a(ZZC(2xL0#Y}|5w*Sux?kaNTX!dO8vy4=HAb(@pbI-dnLKO^*^O)M0 z?;1Z&SYTcC=g+T~$G_`Wrzj{ew_R8ND_FK))wxXS!T!kybFXCXou+tl(}uqaXQJ3X ztQXH;&U4_=6ot743eC!8kL@JyHA}_{&YJ7R!*uZ3cR$sFPZ?f2{;uP>XuqT0`I^_4 z;xes?rKkCVA9)o=y$?}5c>O{9mFex;6Q3;DWT0!VcH*=Bm80wP=f7XyZG7QT{FT=K zqLW|uR#==ocC;WSCUB=7#$(%3! z`c_5LhML_X!drJ+uwBsP;BfdL&@=JC)eqhc9T)bA|CIZ@;n5ARma|iC`<+%l(P6mu zr^{#CK8>2oUw$&&yD?kHu79ES--|Z<{+t}Y*S_QYUofepBH??BYxLb>)sJc4-`rZU z^9Sz)smTpe&CT<2s1_dD5IB|09Omjw= z$-o9A)AC7^&&>o5#7>&bGs}y~C1Ucy2+_&8v$PmhC(oFb1UV66^8ZI`KQTFUOq=a8hzUoLgSOk zm*%KQqh~>cyxe5Lx%N!lQj>$`+Aw{JnLJ^xIg@nk97lON92VyZ5m%sbDKF?O>5 mJXJ2lF8#@M^LiL3Oy-_%!L(C$a-yvGK=syU$OMLjH1ZxJ4lAMCpfR*|f z5Y*ZtDv<=q1o7X8stZNE_O>$v4u?C0yN{vI-q8nb%{FHx%`-I0w%VMx`AhRuRCyMn zG_CBd!EJuQkl%^#-(c^pLmxGUELoVa&AS-gEg?a5ILJ^Y*(Bv;{UBq4{!HxYf20*Y zSoJobiG)+SCioH2wAdDIGR&`zx9{r!QL@2Otv* zdwIqn7C^289IbDIV02A^TxX~|>7|NkRf2O?0htl-tW7%4)i?3nfJYs>gOe&n;#HOI z|B5=3VCP(~m5ix+aoiuWpMUCkWxP!Ppky1i+`K-q#|7Wq*9BkS)WveKYKt9P@q(`E z)sj|}@_Gkk?gXjd1FAQ#<3*(P&0*Ta)Ux;lP)h>@6aWAK2mpsp;y?^h11U~>lhy$q ze@#xqFc5|JNZcXv-nE_ZQ>-+V0Cfct5=9_(mOT`U#EEP}=?U1eLTnJnK-{Q^Ti~Qg zC<3t@&zo=Fvz?Cbi#)mm>vU;Ghz%%;z{pZ*GaI3^=>!i^v$^QyFk@S(IbQVDq@WpJJj!Qpg*f3lde zJt{Bd}?D-CLYku6^zm(LF= z`Q7QnCsv!_EjWl1Oc{>%rZnMfcjcg+>qLE`qFwQCq<9O{U7WBQxIN^_dZZ4J)jllT z>H70!+eu@!ubb-U7t6i?P)h>@vvLEu41XalMYT%_001)`000pH004Jya%3-aWps3D zZfA2Ycx`N@Sy^-2I1+x}s{Icxy*tJYLN(45K#&t>Z6^~sNp0RJ3ASkSP?3}s``2%i z)Zvsn*{PW)QD}6dkFUFN{Pz3zvN(ARO`F%%`Gme9lao*_>SbQtolidBq^Hs3q<`(Q zYMB*v70xG5p`HBx_TT^dZ98p4*TJ;*1VmKrv|OA|R$aHAo}IOeRVcIeO}!2k5O3?I z%sTkn+?|zK^RQW;F6wffb@@Cm^6u%35uzqLG4=Um(^S))h|@A(G<93wc0J3qzP-&C zVfVA=X#UE&Bd4zyn=(}0u;N)03V+a{uG&?;Zuip4zbg$)Tq5Qve?htQu3>r zJ9D>nvpjJ874>?CbyF`w+d_cKVl=nR^6DUlidTXTu6_fqJ{#9Q>qP-OCBxTI^R{@! zk3@Tn;$=Q>vSti30N{ld>o(rBU0wRD%MS9k+wGg}x_z^#c1pa68s%p|I)5@vPRhmf z;;yQjY+e97w^U5t0ydxPx;)uV*P&TJxB=LdOwM{jDCc20duqE-rghb|!{8i@gcR`g zb=}Q2O;c~G<-3r<7|3|cz|Bh=1W9O}_jRnl4{t#cZ7|VCXPcs?oG%-mZ)6>0RCA&tO_s z_#>BSEx;K&4P(%vsf+!xea<%k z$ro~Vd_ytlqtk+EA+4Lwmt$PABC8f*21^yeJ$1p?8whj%^)+91tAAnAvX9zj$R2~s z77uNawJY1#s)4vEZkj9~Ts962vy<;@sA#iQe%pNt9h944ZnnG!Fka?Wco*`!Rd-QA zREigDUz==w6TWv}^KLa5aa{j%8JAShKg%b$a-mhZt!In?0+3I9NYUnvl(-t`}#f80E+LmD!O5_F!w zZ|<)a8!(X;`T8n{+;7If{L{tGw$m|OJ+7e~e94;j`1vxVWq%FbwaX5n2~Y3qZ+{dI z7x#7k?f!vX-F$kuzIUr@|L5}ufAxHQe?_jIzdT&uJdh9mLHzgTj(xjN^4mYp&wDdr zUqbU^(je@2^CcF0Xqi&j0#(zeMDC$uyS*%fe zB0)VveGmy1DOBsoQz_B-7%5ZSqejt~O3XVZ(t@KJ7=KGOjZq$_m_q$#BjPm5V=apf ziV(+iLQzyXp{&6vhOz|B5|;qx(I|ieyhOE*sp1wzRjh<3Xyjreh(T*eY;?Ncb^VB) zIMza;81;&z1dX=0G9{=FyeE#KKJW=O2DLO{Q20d`b&USsx9X^3$cg&EEuO^|hjrrHUN0`-sy zZ4sWIcNxu@h$!YA9Wj~+Ot;85&OEkGWT5+aOgEDd6*H_>Ip>*T7>|o%p)|_lwUTJH z^xP|Huq;V^(s$I?-l3HBNJJ1%X~bk4AzhO)tAChfh~Fr;8bF2Mfbuxu8ml{0l2ih) z5Z$Eaz=j}^%0zOi5%f}JwGbT1IjUj}2BAEjDuqQ3>TV*PLUNmG>lCCtqP5{vIEhjK z9ty)XHQo>}Fdta$sMkoBp)RsY8>AjkD2V`3EDD}Mk8zkZ&l4SS%-4x=$~y!hj5$i3 zMSnD4oM|aAUo$QsuO#A8#Zhxbc6RaL^$E4I)z2?qBp|IFGu}L(+YA^TD zvnUoHp2U`0gXktGY{|Jq)`1j}GRF4g0y;2F7?MANtA0a_U`I%rDyI>QLKWxSU_Dr< zgwr%d@FrAh@m&q{E9igNu2Yxlh#+ z(UyW)VzIrL6vjjUL2w`=D6y~@qJg278tjZA4Yx`VjK{i^GKbVRX`!9QSk_BNBF(T< zwRBD}00W|1EQGWcTPKYm)(L`ZIDZ>DK`>M)Dq%M$)7R_3RtM^Gg5XU->1PrwWXYbp~(GLA9bV8^93Rw+~*!MP+x@>F>vg~vRq60p@_@lmNT z1Y(ESlZsSG?A)l*R8foVLo}gq*mOvqY68YMisS-pgCfum=|5UXEe)oD7Jt?-#!(&* zdkSpl0H_n*z6Mf<%(j1EkTykR+ z<>5YLuoNz``hz3fUX|1Sb>(BT|LSiePs;HoGtSC+lV>Ma{rd}Cf0fgD^WgGoPoD?4 zbq_Bov(0=@JUtx=ZJ8BC3V*lPd%_UXa@yai`*1smEv~ZW?kIORqd`aETL1k)R{sPM znm^!KVLh(4g^T3zmT|uv6=EkZuiy&0+>f`L`E1Ws!5hj861-7-cx-xsXGiyJryV@K z4Y#$I+3}4aRHvV3{RLy#T~eP!;wb4^6CMu!uOy3_-$Pj^)@Wu?FY{%uZBh^441$c)uPxe0{{eWP}_@Y z*1@}F@8RQX=iC1QP_qmg<_QWT{3cHyG5`QUsFVC78GmbY+t#({_d9d{gNAcIoHKJB z;|)?%sl#XLIgXo&liQCTkb*446u}EZmK9BBoHn-Qx6?RIoVZDx+KrnwO4>S!<45ve z?hz>IlmEh9dv5>)NB{(15S#((LB%v*0(j$|`)EmLVMDRsS}E@U>;R_51>|MP$RYJGl5udS`B4Ra2LXtd_n zo3(|^ifK0Ij~;E+R@7Cc^~$PNGxV0eY`#*{SC8t;%UVr6x~>~bM>&RN@TaDs*VI-E z-d9u_XO&jQ9&WXFG`*=d;9bkQv8tG@S9Ig_(SKFNIJ4F~0;4w-Q>$uq&D?;o8Oa$& zU&yQ(jd^=QN8AaaN9M_d>_5&EM$ak&-b1@;@&aT#-`_`MR(DOcb$#M3eWGL&f6`cWlh6@135_xE~PT+v{x3jC=BgPrfKY}yv zs(+$2+=&ghP!FhBCJLxFW}u05UMcp>JrcGY#&6Fnn?O>d5Xh^BzSeZ7)6_;A?O5ZC zI~Jns0cOTXJxgm1G(ZpSpIlLzsym%#tGL!O_0^JMD(<-J>+7$qH(RgN8a5;GP#?=5 zg`YYPW#(3E^T$p%bVI4uVQuTIFt^T%bAO0HGK;{ws`}Cf`rCxd!hBOPlw(T^8AhlG z9Fr~JTbi#M=nhk+@%o`a-6zE}I$n($rzqf*>)OqfvLr47uZIXE0^W)K4~* znp!G5gW7|1emT+o%hKBblsB}~E9SArQrC|y7!2qZu2xmxkFaE(M^mh8Xlr?xfPekv zjWq-h^cFJdw`7g4^FDjQt#_OYoIq}By;DT*#Ltmy069D(_-pS9-kR=Nu4oN&A)_iS zGvCq_G|j>1UB$Dn7F%Q$?&O4k$$yb+&g5Wsk?5L7D+dra4Yj2jXVuK&oaf)}?eE*) z-QNAjKX#s+-~Ht`goRo^KHPb6Z};INwBVqn*@6OA*__uJ z2sh`Jw3hiMP+kUqD!8AHgEGPjJY)axhWiyite!KG;!!(?F3TdH6*F_SjemuV$nr8P zVl-;btINx3%`B5!fox$YKo9soNO%$5HdkH9NW619s57q{a~iM#E;H9qR$&jVPk-LM zd})p#Z*#tO;_R!2(p=GM6$5@pG@{I(_FOrx*Uq$T{iVaW9A&7#RUZaL4RC#Zq4WwFZ~zL)N1CM0XY9F_%sjy+0%kgE+3B%4*zJ4 zv#)EgLu6>!im1(kClR#l2NX0DvNyr7_1}IJef7PqTGyHttzJh!LZ9c1d3Cj_0;(9t zmN5P(^DWa*&DsjOWf^XL1GWxro972SZf7X;mKJ7b%KW)yV--CKYJbNZ;56VUATwr= z$~@qD6r#f$oTr;c%Y0SUSLe_Nm>Wz1c0!p~&K_^slW}fAmm4}-6HHQ>uQz-bU`%uc zPnb**e}oz171=0{@WlHaKD%^{KF_=4PWT)Azlj)}U*?K(PApb(L@dXaxm+Kao3o`d zywefj9mzU5nJYMA7Ju{t#JY$8CNft&r@($-v7%x5Z6Hy;kU7FKat_^!zXRzTAWDyj zps3(`I|3T39r#+eh`?g*O)$BDXRT_W^^`p_5R2-tA01&C_Is^m1`Ug6F@T8o2y|N$ zSaT#ivi#~QVR55K`LGovaruZIZ0&M!|Nc+ApKe>XuJ3;J-G9sHp9G1`?(GiIbJ7HX z_4x<{h|r|sfG3X9ckoz^6ur&OuK8DW{S0zpoHP}~1d2e~2WA^Y|M>0k@~Pv;PW%^9 zQEVM?2-W;>Rtr9Ww?PD*097eu*=5WJ$)X8k3sQiSyPv=Reb>T3J8?TZ zsFWw#nw^K_fiMCrAGsiNoKz@-jpq8b8f&ZMajkx~?x@JNtpmRubNzm{Q()eGz%g^+ zuk&1&pOV^4NI3gkng^~jk4|X_muwX<$zmkdLOlXwk$*T3_a1+~_xLY6PoKVgzP0=5 z`|T?a@aM}Z6B4mjKco$`x!E+d*fJr77>;B~qoy^L`iVHpOp1CvmOWntV<}w{bS%sE z$jXGP$FY{{;cFo}ohKxO6yclS>^^&s@;EnQ7KiQ+$LSes|NC)va0J!rN~?tf`p7>r z+aw>X9)B||m*Y9HbTH~Mk7DH52NkA3(~yE2R-c$peRS$duX+sGBpON|bF8-`cBI6Y z4&j)6j?2JSn?Znpo@~AUF{sTuPp(_nF0`-yqer8j0xdc|koxi95W$=($untac*WFf zDB^9jh_p(VUpIiOj1O`i)iqd-iG`vhOCs-;V}JdeHF7T7Pa1Ioz60Lr3`PUo0nzVK z0^9+36V8m&D|mX>G$ij#Jy#eU5+3TGGQ)Mzy7139!f>kGFVmnD435NLj+(lu)L#er zt~X}I7KPj_$g*^_ZMAXat&=DV%Mln0nRix>6i;{)ldz~wOB{C~;e}kTU_kijJy@HO za(`Tr$!3dV)@FoU)`m3IW+1aZ%xmu;XV~vi>3XpcB2w~ClZpdtacyY+zt6wxL;duL z@*aDJBhIW|Vc=aj@eo+|zT5r7Pu9&Vd)q%-4=!0ZukByDK2SnpVqCHD!4Qe)zz#z+ zfz3^2X$ektw95Z?ExzM+3gOdV@ty8Phkr=Ne3mQaOW8rBqX0+FsOR~x6EnJ!*^k)# zGeBte@R(3PZ6uFLi7@Sgi@ny7z~YraLYm}m7c9ntBVJ&D8bT!U&a-FMmHXDk3)c2e zF{8qV!)+%4kw~hElFV>e`%DoItis8_csA_pz$~fK`Y`av1B+lG&T)CBoX-v<#D6)l zpAhHSegS4)?&tIu1h$W=ATlH@fL#@iZ^M@dDxovAk%4Y0*KZ72?6;OI)ZmDIOBQZH zcfcM{lmFmM{`lI9BbgA9q#)t6iWp#gD~X6w|3su=O~(FBLm;){)b zD56wT96^Z>1~1#NetH~-0%l_SL;R|7;4`%xVik1cH)* z555JRew$hrv7~HJ1~JnN;-iO@LD(m&sSbg;pbZUTWvu9H)XM1Obj+d(@qf_|ltWMs z(Opdq`K_=YVz!aP&GvLs=z{Y*7omLK8kE6}1FUIOHmQ<1!%AkbUS(}voZGwf@4$k- zNv-5HQMYa|m}0?a8d(Mi7nM4>ZKt-af6SozNuAss>w|KLZUa?4MV;I;&myRko3e;Z zZ@q8ZLRC*uC%2bv&Y%v_rhiUu*Zib9gqIkQ3rjsko!q2|^z2$0kaZWwHAmy*n0RI_ zPOhGsZRDU%ZgS=zy0^$8b#l8}#tbT%;LrAP33R>zG0N_?RM|q7lSJ=H-U$}iB7GX8 zdPXI;4^)7&J-qAyf;LfKNEVm<*{RB&Ccz!+sDy+Lb#7m_E<9@A_6=LM>3e*2%~ z2my3TbnBhBx9->%zxmm^`97-Vc>nL##k((`U-Le`_wygE2cLizgs$KG7H+WaJ@VeL zfA_up``_<8x$^RPPq{}2)6FV$vIDETTDKL+YW<|SQCFSwVs_^-`2BZqX&pKcGOQq@ z;yC6;6IzTdom1?yU4PX&X+;Y6;I>7*zaLjN^flDli2Ssyol}?Ghl^^x{+faj!PJ5N z(7S@hK?m5vf34~!^okAt9rslW`x#&Y>vShVzPey})zFp@s7}M*qK+CeAZTz|8$!Oz zyeu+gWxmT?7MfFn>#u7Nj^o^lH`TiH9@Fsmqva~4iXf6=JAZh)%IEBzb7u_mPZsFx zDLU0vjNhoJ&mDjcH+0S6{avx!(3;0lI39rq0p588x(vcM-0KnjwUJQHvA9iM7mgud zpKK~_*;L-fu37UFcjd3L}E|pL@EUXYFtjN9CNrB2gF(gQO1Ilv7X*;-}%ORejfh6_v5$L-AC4+ zuI+zvd-t!;;G%Wm-$+!Eg2Y&&S(mR{KmM!VBU|l%KYwa}e8XuGbs34#r?;(}cXlu0 z*WG=DN*(|5=l#2XgE<5!bQq@zBMD?Dm;nQtb+Hp4y%5ei6zKu}5}`HZ(+9~ndf3*; zd_!iXid-uDwC7esX}+l=Ne58JP_Y?oho(Cm$qkeoa=)H%3IG_TL6Hq#03u;Th?l?G zyMHZ!fPcCzA|}f~!>VlVU@f8uSwOnzE^E;2_&9EJ52X!|;Bc?ly>#7z2OUJi6%nvf z)}6tWm<*lpjhhP01MdC*wmyku-G~bj+raQ?#ZY`gsIUbYBjR*u#jHHET8yocgvhZT zL9#x7kaDa?eI8kkah0r`E0man<#`dE!#gZ2N`F>{cu^KI*7nt%7at%diFHQz0%nB) zew?23&V79z!!aj!B0)2QAsx#Q!hrv4S)E^1Ovuqbu2l`i*f_4W%-=TDxjFL{kO=Cz zF7Gay5HT-pvocT{lq6n6VCm8ZyNyeG`Ln1bj-R-gT!pLTi>#Np?2R6`@QaOK<}0h< zk$+e-{2i+a4s|O;Y*v!E0#otMpBl&A_GuVv>A%JCD3{uCuJfu#`~n1htZH!o4_lPj za>>_&YbX(fv7rB!1E)vqxmzh8MxMdiU8!Nd(lQlutraC25UlXayL_;0F(+k(BGopr z@0&VdodiZu7UFr3MmR+o`u}7 z9C5?${pA9baBtsuh$^~2{RLd6;D&Ag+5WKm0z9RTTlN07wRMRUeurm~hZdZxx1e|2 z74o>Xb$;t_H!Ysb01j-U7y5%0)h<7#EQ?}J7D%*Z=G8dr$29c+95A825?R|T3_cEM$xU&E8zuMn?x%2c| z`ycnMPd|f{)4gxM-Tm^r-ES_FBNjg1I9Nm}c~-lf1`Gb$?azq676Ikf_1&+&i%g#C z=o4=r2oLtPyG!vn7 z3XeKs0}riXQ_yq%ZQ#5gF()!oS@fyu@m!l-sXB+7_Y>yITrpIYri*I0R5XxKygU}r zq`e0@2R%qRGEOpi7PKqBZe?3=;kE_5b&|gFD0g3Px@b`>NzhsoIe-7`Nlh@g(LbEg zA?T?%4uiJ3f1)=veT@Lc&aOcH6;;Dn<>AN4^ zwVwQS_xAVue|)s_;(t0+c|i`n_ipYyy}Ez@rvL`iqcxPug>1IqOYL*|Wy4=5LjX%~ z_yPyE7BalR;F2SVODR=c0b}Bd1|N|((GdYNq-cmNi_=QziLx*Yqlfn*d>yG=i6rDX zMr3_vYh!Jdc)+##SyaHsTX_I}JLXm+z-Rkl3ho1xW&+Q0O@BEb-@E_Nx^N+yjYEMG z`!-KyuNcgnD+xlWob!bT5`tw>$~ldTjw>!2PCLN*P!QCu4Y#-b1nRqa%D_b&x(KsI z1U8q4<9h_%W{x@Lh9k?_ zwJO8z5F{tlJ?suqf?77%e;0NKlxga7hs(6r!?#Zl9AOz5m$t;;?W$ErL~_Ewt!4%16n}_~?Ow6(w?- z9JqgTP=pTI-B^tQ>6(8E_*oS=<=^R z))Ub)54j|KEHfz(79NH%#r!{Jm*>RLb#F|r-+$)Kj-4}BZXdh7bBa-8n&~?A&6z2s zlaNVFI1DGckqH;SPctR;PKnTom4=I@v3Qgd_dhNYcnNlVM{sC}H=0EmP~W)INZfQ1as4Zu*M zA%Fkw9Aya8B}b6TP^=}6Buxr8K}D_MSg;f7baH)q6-FON!AD-8nK6_OZ{Pj_a#jM9f~1re+pZay+*0%Kbf$oMX7t?K%jRmC`S(o_u8!&h5^ z{>Lcz-GJPUh0Je{mror(cH+P6e#j)pA%DnAmw>gstykYrYpQluH9{6yZlJ>;WQiEC zf$IsO)dZ|C$!giyaCCY-EFm_@+}wwiqfbc2}r^z9OZ3 zR`S)y?iVWLvV5O|#=I!lPUWy;#Hc53bf{3sNw}!bC;`c=oW%i2Si7^R307>G&@tj^ z2o(nE9S+k$m}!R{rs;&`Viw|u?SIQZS(h%_hlihi(Eju1#2=jCAlq2{9w8oGA4j5z z;V2fDV2__epuj!j`f*d`r;g-GuxN_JwtCzZ6i(G9dy#nhU6#}AZ;t1eN-#g|$8V;3 z^I|0>r;4-m+fFJzrb~PT?#_|&sj)mb^iJ8&3|w99)G^~ z_%D$ENUL3_gTy})jMx1bv`5|oJ_LBjgo?;P2kU_n>0@}uq^#7(_cccE7_4jtd|#<# zJ_zX|9A62hEHC@a#c}GSa(|HD1AKU-nzLP0{P}t7tE<$9H%(RX0>#9z=`VGfv6}Y4 z87+Y{i2j!<&OT;Rr#Y-Cr+@XB4&fQa@epUg=4SmA&GDo;p8ms(=#Waj(bB?>q(JWl zGvCsbu-~K3NDd#89!iaiz>ICzO$}0<}{6Qk*Nw}4zun>;-q%l52h@X8GFh7gx9Dd zJG>kSDcSN)5m|q@fdpq4k`5@g>Y+L~@m$xSOJ_?@eBYe0ZNl_w5FzLlvl&Q&l|m23 zhOaSITr`&Fz_VEJHKr2ZU1aNxU~1}hkL)=>eg8u{D&6U=znw=?u2cBIB9OwRYwtX z4jfkNzk^HbQ0b0gB;1(O+-L$PTRNxM$X~4=!?oh@J?IEd?+wS54Sfxj%p*T7Yvh83wU4+5#_=>Ah;t$~5NI zSz*4Z7|JmyNXRg9UdZLyjJvz#bM{AfeX!bO0otCT(>u@jjjEkqL7RZ5zxAd#;NIb-9R8l|ImfjI}4dC{y@aLEe~u=9r9@xlZSlX!StaXM?m$$p|yg_ zK;oflbyYDuU_g#G^mSRQ*B3Gs{Ewji*?b*(n!3-a4JecC?3ler{{GC8R4lPfp2JA% zaA%uISAXo2!@sk^%nv{2%f>*bJZc!ASy><#-b1 z!MbJYwGV;E5`J*)18a!AoXaO(i5@nTq=r-sq7V=H^bD#QEGHCsq0D$$RHtbG_>*lt zrGHnNQ{`i*M5AcNWnDmL0SLqBL@BZV8o9EQY@^MaCCf=G;EMWG@TDT#U8e;hiAIYF)=NDMmyDTyVB#K7-R zDRO+CO0i@}F{~@L-~G~haGltvqiBpcx_{N>QKEL4?NdK^_b*rBN?BQwD6J)f)<)MD zQ2>jIvm}W#RuW2uT$z$sl1Qw-#u(;kl^L!e6l59i=X5w)c^Nm;qmI^jlrsvEZabQs z!g#L8=ChT&Y zaX21Vwj>rRkih5_?r9-6fLM$y0G7HSkv^Rug;J8r6+tfh&ht$d&QYISc#hlQ@HwH( z$t)w5(#Yo$e(E0QAWZVGXR#D6s;J`~Z z^*DzFq=C&R!VLOMnpTk) z%N$?IrCyT_^V^7(k}QY?lA<^rej8E5jC=5Wo3KhC-E|e5u1wy9QhMN#)R#Dzx(a-u z$mYsf8Zc82`b_q{ukEAQH$JyM{UW#s5BBldbxg<~Qj^DD8$*O6s~nf}?V(c%%2QU# zKD`Q74V3ACDkck=wFW9?Qh(D8T)U*Hw-z!yFZGtJiuI%@$-Pe^LkJ0?h&Rf-h@V4i zRjRnON~@tX-_%k08pi~)NA8qLtg6c}?S%|Hi-y-4@L7OTIrf*XLNM#|8ZJPDrqj6( zz7$s!16GZnTTvRPA(_Yh-TrRh!hsV8SM8x@3GOO@AU%q=bMWd_EPqt5@*SK?v*FcU z_RzZdv32DUZ~+V00m-fpO#MyWnkQH}Hl%>gB&s3C!8@F;I{uey4b9Y)`s?0$jB%!O zV9<$I8*-x40SN%i+YuIOoe=dGhDmnC$qfN%YtJ) znd5{5@UV6J#eaywx1=sBYjx}c#9Myw3JaW+1+ShXvmEHhaz6!9WRT`Z>SACBAQZCm zAyG6u7%GnA3>m411eTtTI%DKC2fxWftY(Vre4E3>~LhP}5w+{ie8hQZNMm<9~4{1TiY$HxBO^%qfOWZ;b=E zNz#f!pr2IiA8J39sx6zaFiNyU8bMIUU<^>pz+bc|CX1XHv+%a3i=)GbVCy0BibX!o zye9;}kr*r`@m5U>wX&zlsgLEBUvMD}9Wg?`k4=&b1tC}Az4>VYMxNvI!oH+PFBS1N z*+v_@(|;Lk0?7^CMn=+13Iy>K*hH~xLXW6fWVtC!N!Y#lO?&H>_5R1UOYDyqtc%~j ze7;4#f^C6*`sxGg)^%7sxrlNWKK%ktptbLPZr!}%c+oC*i`ZbwgG}UHF<%zbNO>f! z$aUSixkK)iv^aAk?X8s1Z?DbfB~~}F#zpWr+J8%k)|FHR!n5EIcQFx&?*G#b1J807 zfdi#`F_9z)`opYksGGflK0H59q{{qk?{T_U?<3crrZFGMv%)BHot|xks*&kl%qUzp z-7ELt>LTdw>0S)oM$iyo8-JkN=%i~T+Swfyuv~fJ=POv#vx+)kfA+Nrr;sWeW*O&U^;Tb{0ZK?AqqEma+*W*fr6Z8ncNuk0jPv) zOHj{otr+@1RwB=N^Z{k*?X{NqhIV?zJcf%AVZmUJ-VqmeDI++s1q6=1gp@LJGmL1? z5h=Z%w4_HAkLfz?J(_hhG%M;=F@O3=s4#9a5k4~fd7C)X=_5sleYtz^^@Osja&aay zuy7o9YKJ55Vj|g4!p+0*Lv*DO;3gnV4i1G|NZYr4NM;XKKa;Iuqq|+d`aXgzS@$?nyH^e4S$GBWyir| zt1+ElPIUhgPy2DoItsWCN!+rIxc~7&hI0;gC&Swj%T{#Q1A=}E+!_O|328vA01k}y zw>Kfd2y!?*t$q6k_~4up*xGsV%kJ$*J5SDA5B|3M$$PHtzw_j}^~(k8{@<;O zcV9jaJxlH&C5aJh%?0hC;eRAmm5Gq86-pe5BNOnsg(pVc2J@x@qdG!#*9|9=y-AwMI)@ zQhzh-yUFAKXSm0KD7wI3tshr5^fd%XvU|(gId#b{s8OvK)q4Fk1%C%BNf~L_Zfr<( zZMD4@7#V^ZjJfa*dES9&$N*&C?qtYULfx<)RM!^a5-NsW)a$SmG>n+bk!AQVOHSEY z|7DT2%N+SH%e;;4{>xdO4;owM-AYKES(%2v^i+{4%h?h+oP%kse9opaN)`zs3m4gd zFffk_!Q8{ad>dyRMSs}%jf&hL4pR`JCK-IT%gih0aa5v!AZ!p%M&#s-RKvJfvuUg5 zaCk&aE{j+?r;x$U<_GLbBjs`uTPhd5aixxmlMv+x?I`FzM5J|VLP79z4HBcGlj?bg z<2o5gmw-*5O8tl^MFDAlXu+i9yN%<)n2zMb7%&|gb3n^4j(;?-umPPoOsB~0w3$o+ z!2*+Z+@IS|tefA$!QlXN6Y=s${6>n-IPhDLCFnnsY)($`JDvFLxb23)Z=|u01HV~O z%uBMbL}B9iH`P>Nr<3BT9!UE_%-rj>83xml5jqA;mn#BOkOg0CH*uIwIe9uc`6!wS z@}`Udzu7z|=6|yVUo{kp-{25H7!?-Jiz>7{5Tlz~Gc%&4kk8UY3OVtg8a_WDQxZj) zm-5&ZLj8cqt&GD1Npp{<$q!gl8s^DnT{B6brQ0i*OQ=_n5t)+Al#=Z$nJr!0$HF=; zg>JX-n4D$cli;%D5=-5}Ve;6iF&y^$*yVLh1Q?SyiGPzT3?o;Pt)o#60ItPu4lpKn z3zKCkQYGO=C`Et(1Q?eWg3adhjO^=Xo;WLwB0vBFjLS^tb49Mm2~-CNlktbE1BBVJ z0?P@7oJ{tO+OgD*wG&YW%jELsv!v9H<#{M~&g7{b8(Ikea9P;I?N})ZD zO9E5z;;K_DE176;mg1bDT5SQw?Nr){w4(;jz{ih~gkeogVt*kF4~OB!`jWCiDLuuMp036N!(%v=>UEWH zi6N?wVX3~NuTcd)&4(n@)trKo`r!%nRjsjRs+8JOOzqIa1iatvKYtGXIiI~6;sEC> zoK(p9f~}4>In43Qb5bAYwZQjxUiTKGPFe{^>b!2%w9v>-(wx_0s#F^m$U5BR9)G;U zD!dXbJ{cLaw6aJ09#4mfVPEd6jm`TQV@RYT#AiQ#xKJ}XwPtjPpBPnPCQ-3Hr+Pzo zIC?OoqfBW&ZNZ^oJ!^4T6Nbh38Btw>BEv1+K&8avOk<)Paya<0Bg{KRL^d37W=YV5 zSv$F`AQnl*5WA#gPn#Q(tP;`YhJV-v5|5KwP%|p6ae5)+|86(C`_i95pMKUSQtFy8al!~{jzvHwr>(=|EF^2X2$2(6SSWiEE z`FzWk^-j$_w>*5Bn9(Sx;e}Yr6rE9)J)}|QG(hY3*M~j9{EW>OWhv{=lz;B5C~m6? z!p~&r%Lz$(EZIYq;dd<2)|?A1kj*3j=Ac0zF!faz$S96^QK@ zWnnql?xzwKhv|RJAe-ZHqy~1#d0m1S6=@yb)ie~d?>H&rNh{J z<(<-j&T&a=twJ^3x_=7HBF=1+24l+LQX7|DBn+;7?`xuuPzGn>bHcO zW*nArxXO^Bnu^w-+-(&a%0lL-|7`Qb%T)D~_EUT$vx~d6x9(t0hjch-R@`G@!L{Az zcdVN~#v!Q?DNHp!l7Z5PA(|^{FExxQ#)@2p<711Ho@v!k&VL}yuc{g&pxq&Zo2r26 zRRNK8`_D`5D-TJ$-c1jVmlrPyIhGd+zJ3ah3pLCiE1)_jnApSafEbgfxLx!j=cq2Ca%;tp_FO$9Mi1Wuo(PAgd}E0L%Dh5Os9|aHSEj1 zX{cPBd4#B};eWcrurs6TKw{K^QLM2^pE7elHO^bL@N`H?>>9mMfx)pe^*k?m=^|&dh zt$rGa8=nGG8%N$ciR{f7LY)@zsz4p$Gz<1%#D~gWpu7Lc=!>uRhrDiB#ktSO1iu{H1wmv*8O=}L|+|jFh`TTPG z+9hlIlbt6Y>^=U=?x*j!uRKW8io16C2uISD27d+wv@}Z7vSY0;Ft+ER=wS8HQ@~;B zAmUm4B1!a1AI2Zd)_bsE`XXUoG(csU;GFRvezI;}u`c|$^Wp=Ndj_1*hyL(Pfc+%# zLZt+qsJ$gV9Ca%!xl`syQYDP&+)6dGJOmrV@?mPNfs)XBGE?R4yRF+k9V^Z%LZtd~1`VVR^ zS{tk2X&MJAm zp=kB>xV=sfin*kcz9tSy4-zk0SAQPuzWaB(a{I$abF+%R$F)_>RH=9X|1XIk4c7$~ zbexGp(u=Lv&sj(|_d?3|NL^ zDtRc45CzzQWx(V?J-7-t?oCPJ8j&AkbMx0)>rJ&~zGuISqlc)|WsYnQjMGZi@8>Z7rS#wL(h(rd388iE2@3`)gpp>ffN*EO>Sv*%gYO?Z+FghvO^JAi_Z zRefm#lM#%#wyHMF#RC5ivt3os1b>|{m-*QO007tu000sI004Jya%3-NZ*Fu{VPb4$ zE_iKhy;VzY+b|H_7w8=X?h}!U9LYwMAaNt0n=aZEUDGmU6BS8;l;ipgT@}4YFHrP0 z?V`8nkn|^xCBrU~P_QA5hJ)eLdv7kTzKANgXWDQjGek}?3YaX^n9E6qK7ZcjCn*X{ zL*I!*|`0oW))Oa(oA`6R@LT*RGTY3 zuC*$dF>q#4`FetKxh_NEoqs}t7g`xrHm7iy(03HtQm~z1cPAWUIh)2XKnm@L0^bYSJab@qrBlAs&e?yVtjoVYKYsnb{+&;OgQ1a; zVbiXtMvwEi8y0MK`}sqRFFEW|T0k!N@K?U&epZ>ty3&WYmuIKi!5_>oja)Ye4;52YVCzhOyo z6)NRy-m);^*&T`hj|`mdFtJ=*``lQAH9^8j#k1Pny5+@t<(5?DdzW1KPP65j$L{*^ z`}6I(*e{IT(=W9C?z-4Jd29Pa9oc6m4ffaZFjun0@?7;PUbZ&1tU!se{)M$!#O9v< zM=b&M$;+MwPf&{cdCX1vyh9g1w_(uRM=uVpQD9&=$SI)QwEW2Y*B`HBZ0%ULa^rnn z-PXOzdp5Z9WFB>&Rc@eEo_zTybHU=vs!_+Ef7E0ARQE*4AYieDtF(pr#TsYgD zsb|XMRkJ;qK2M!oIaL;9t~6qk7!#Vtg2^^>RHV^!E5hLV$<=f0nWjrl-ZRIBsUvps zuQ}$78z&phb!HN*m|Q;Bk#XPTopV*W5Jv$_elfR)QD$=KJPStG$?N86uofEK From 79264d798598b57c775b68603fb564e6755014d7 Mon Sep 17 00:00:00 2001 From: yang_shj <1069818635@QQ.com> Date: Thu, 1 Aug 2024 15:05:41 +0800 Subject: [PATCH 11/12] =?UTF-8?q?#=E6=96=B0=E7=89=88=E7=94=B5=E7=AB=99?= =?UTF-8?q?=E9=A6=96=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../operational/main/vo/HydropowerStationVo.java | 4 + .../main/vo/HydropowerUnitTargetVo.java | 4 +- .../hzims/operational/main/vo/pv/PowerRainVo.java | 26 ++++++ .../scheduled/RealTargetScheduledTask.java | 7 +- .../operation/home/impl/RealTargetServiceImpl.java | 12 +++ .../main/service/impl/HydropowerServiceImpl.java | 100 ++++++++++++++++++++- 6 files changed, 145 insertions(+), 8 deletions(-) create mode 100644 hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/pv/PowerRainVo.java diff --git a/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/HydropowerStationVo.java b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/HydropowerStationVo.java index 34a14a1..a39e0cc 100644 --- a/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/HydropowerStationVo.java +++ b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/HydropowerStationVo.java @@ -1,6 +1,7 @@ package com.hnac.hzims.operational.main.vo; import com.hnac.hzims.hzimsweather.response.weather.Daily; +import com.hnac.hzims.operational.main.vo.pv.PowerRainVo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -78,6 +79,9 @@ public class HydropowerStationVo { @ApiModelProperty(value = "七日内天气") private List weather; + @ApiModelProperty(value = "降雨/发电量曲线") + private List powerRains; + @ApiModelProperty(value = "前水位曲线数据") private Map frontCurveMap; diff --git a/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/HydropowerUnitTargetVo.java b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/HydropowerUnitTargetVo.java index 68ab05c..a74368e 100644 --- a/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/HydropowerUnitTargetVo.java +++ b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/HydropowerUnitTargetVo.java @@ -41,10 +41,10 @@ public class HydropowerUnitTargetVo { private Float powerYesterDay; @ApiModelProperty(value = "本次开机时间") - private String startTime; + private String startDownTime; @ApiModelProperty(value = "本次开机时长") - private Double startupDuration; + private Double startupDownDuration; @ApiModelProperty(value = "年停机时长") private Double shutDownDurationYear; diff --git a/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/pv/PowerRainVo.java b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/pv/PowerRainVo.java new file mode 100644 index 0000000..0020a96 --- /dev/null +++ b/hzims-service-api/hzims-operational-api/src/main/java/com/hnac/hzims/operational/main/vo/pv/PowerRainVo.java @@ -0,0 +1,26 @@ +package com.hnac.hzims.operational.main.vo.pv; + +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.databind.ser.std.NullSerializer; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + * @author ysj + */ +@Data +@ApiModel(value = "当日机组有功功率") +public class PowerRainVo { + + @ApiModelProperty(value = "日期") + private String date; + + @ApiModelProperty(value = "发电量") + @JsonSerialize(nullsUsing = NullSerializer.class) + private Double generate; + + @ApiModelProperty(value = "降雨") + @JsonSerialize(nullsUsing = NullSerializer.class) + private Double rain; +} diff --git a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/RealTargetScheduledTask.java b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/RealTargetScheduledTask.java index 9591c87..e082119 100644 --- a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/RealTargetScheduledTask.java +++ b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/scheduled/RealTargetScheduledTask.java @@ -59,9 +59,10 @@ public class RealTargetScheduledTask { /** * 水电站-机组指标加载 */ - @XxlJob(LOAD_HYDROPOWER_UNIT_TARGET) - //@Scheduled(cron = "0/40 * * * * ? ") - public ReturnT loadHydropowerTarget(String param) { + //@XxlJob(LOAD_HYDROPOWER_UNIT_TARGET) + @Scheduled(cron = "0/40 * * * * ? ") + public ReturnT loadHydropowerTarget() { + String param = ""; if (Func.isBlank(param)) { param = DateUtil.format(new Date(), "yyyy-MM"); } diff --git a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/RealTargetServiceImpl.java b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/RealTargetServiceImpl.java index ab09f0a..8db8fbc 100644 --- a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/RealTargetServiceImpl.java +++ b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/RealTargetServiceImpl.java @@ -291,6 +291,7 @@ public class RealTargetServiceImpl implements RealTargetService { List targets = this.generteFill(stations); // 水电站设备 List devices = this.pumpDevices(stations.stream().map(StationEntity::getRefDept).collect(Collectors.toList())); + Random random = new Random(); if(CollectionUtil.isNotEmpty(devices)){ CountDownLatch countDownLatch = new CountDownLatch(devices.size()); for(EminfoAndEmParamVo device : devices) { @@ -316,6 +317,16 @@ public class RealTargetServiceImpl implements RealTargetService { target.setActivePowerVoList(this.getLoadsByDay(device)); // 30天发电量 target.setGenerationPowerVoList(this.getGenerationPowerList(generations,device)); + // FIXME 本次开机/停机时间 + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.MINUTE,random.nextInt(1440)); + target.setStartDownTime(DateUtil.format(calendar.getTime(),DateUtil.PATTERN_DATETIME)); + // FIXME 本次开/停机时长 + target.setStartupDownDuration(random.nextDouble() * 24); + // FIXME 今年开机时长 + target.setStartupDurationYear(random.nextDouble() * 5024); + // FIXME 今年停机时长 + target.setShutDownDurationYear(5024 - target.getStartupDurationYear()); targets.add(target); countDownLatch.countDown(); }catch (Exception exception){ @@ -334,6 +345,7 @@ public class RealTargetServiceImpl implements RealTargetService { if(CollectionUtil.isEmpty(targets)){ return; } + redisTemplate.opsForValue().set(load_hydropower_unit_target_key,targets); } diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/HydropowerServiceImpl.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/HydropowerServiceImpl.java index d646a32..4fa1ce6 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/HydropowerServiceImpl.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/HydropowerServiceImpl.java @@ -6,6 +6,7 @@ import com.google.common.util.concurrent.ThreadFactoryBuilder; import com.hnac.hzims.equipment.entity.PlanGenerationEntity; import com.hnac.hzims.equipment.feign.IPlanGenertionClient; import com.hnac.hzims.equipment.vo.EminfoAndEmParamVo; +import com.hnac.hzims.hzimsweather.feign.IRainfallClient; import com.hnac.hzims.hzimsweather.response.weather.Daily; import com.hnac.hzims.hzimsweather.response.weather.HeWeatherWeatherDailyResponse; import com.hnac.hzims.hzimsweather.response.weather.HeWeatherWeatherNowResponse; @@ -17,11 +18,11 @@ 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.fill.entity.GenerateEntity; import com.hnac.hzims.operational.main.constant.HomePageConstant; import com.hnac.hzims.operational.main.entity.UserDeptEntity; import com.hnac.hzims.operational.main.service.*; import com.hnac.hzims.operational.main.vo.*; +import com.hnac.hzims.operational.main.vo.pv.PowerRainVo; import com.hnac.hzims.operational.maintenance.entity.OperMaintenanceTaskEntity; import com.hnac.hzims.operational.maintenance.service.IOperMaintenanceTaskService; import com.hnac.hzims.operational.station.entity.StationEntity; @@ -92,6 +93,8 @@ public class HydropowerServiceImpl implements HydropowerService { private final ISysClient sysClient; + private final IRainfallClient rainfallClient; + private final ITicketInfoClient ticketInfoClient; private final IPlanGenertionClient planGenertionClient; @@ -139,6 +142,8 @@ public class HydropowerServiceImpl implements HydropowerService { Map weather = this.getWeather(Collections.singletonList(station.getCode())); // 七天天气 Map weekWeather = this.getWeekWeather(Collections.singletonList(station.getCode())); + // 近30天降雨 + List> rains = this.get30DayRain(station.getCode()); HydropowerStationVo response = new HydropowerStationVo(); // 近年发电量数据 Map> map = (Map>) redisTemplate.opsForValue().get(recent_year_power_data); @@ -169,7 +174,7 @@ public class HydropowerServiceImpl implements HydropowerService { response.setPlanPowerYear(this.getPlanPowerYear(station.getCode())); // 年发电量、月发电量 this.stationMonthPower(station.getCode(),map,response); - // 水位、水位曲线 + // 水位 this.handleWaterLeve(station.getCode(),response); // 今日,昨日发电量 this.powerDay(station,targetList,response); @@ -177,10 +182,56 @@ public class HydropowerServiceImpl implements HydropowerService { response.setPowerYearMap(this.handlePowerFinish(Collections.singletonList(station),map)); // 设备信息 response.setDeviceList(this.getDevices(station,realList,targetList)); + // 降雨 + response.setPowerRains(this.getPowerRains(station,response.getDeviceList(),rains)); return response; } /** + * 站点发电、降雨曲线 + * @param devices + * @param rains + * @return + */ + private List getPowerRains(StationEntity station,List devices, List> rains) { + List powers = new ArrayList<>(); + if(CollectionUtil.isNotEmpty(devices)){ + devices.forEach(device->{ + if(ObjectUtil.isNotEmpty(device.getHydropowerPumpTargetVo()) && CollectionUtil.isNotEmpty(device.getHydropowerPumpTargetVo().getGenerationPowerVoList())){ + powers.addAll(device.getHydropowerPumpTargetVo().getGenerationPowerVoList()); + } + }); + } + // 根据日期遍历 + List days = this.get30Day(); + return days.stream().map(day->{ + PowerRainVo powerRain = new PowerRainVo(); + powerRain.setDate(day); + if(CollectionUtil.isEmpty(powers)){ + powerRain.setGenerate(0.0); + }else{ + powerRain.setGenerate(powers.stream().filter(o-> day.equals(o.getDate())).mapToDouble(GenerationPowerVo::getGenerate).sum()); + } + if(CollectionUtil.isEmpty(rains)){ + powerRain.setRain(0.0); + }else{ + powerRain.setRain(rains.stream().mapToDouble(map->{ + if (map.get("fx_date").equals(day)) { + Object object = map.get("precip"); + if(ObjectUtil.isEmpty(object)){ + return 0.0; + }else{ + return Double.parseDouble(object.toString()); + } + } + return 0.0; + }).sum()); + } + return powerRain; + }).collect(Collectors.toList()); + } + + /** * 容量利用率 * @param response * @return @@ -326,6 +377,50 @@ public class HydropowerServiceImpl implements HydropowerService { } /** + * 获取30天 + * @return + */ + private List get30Day() { + List times = new ArrayList<>(); + Calendar calendar = Calendar.getInstance(); + Date end = calendar.getTime(); + calendar.add(Calendar.HOUR_OF_DAY,-calendar.get(Calendar.HOUR_OF_DAY)); + calendar.add(Calendar.MINUTE,-calendar.get(Calendar.MINUTE)); + calendar.add(Calendar.SECOND,-calendar.get(Calendar.SECOND)); + calendar.add(Calendar.DAY_OF_MONTH,-29); + Date start = calendar.getTime(); + while (start.compareTo(end) < 0) { + times.add(DateUtil.format(calendar.getTime(),"yyyy-MM-dd")); + calendar.add(Calendar.DAY_OF_MONTH,1); + start = calendar.getTime(); + } + return times; + } + + /** + * 近30天降雨 + * @param code + * @return + */ + private List> get30DayRain(String code) { + Calendar calendar = Calendar.getInstance(); + String endTime = DateUtil.format(calendar.getTime(),DateUtil.PATTERN_DATETIME); + String rainEnd = DateUtil.format(calendar.getTime(),DateUtil.PATTERN_DATE); + calendar.add(Calendar.HOUR_OF_DAY,-calendar.get(Calendar.HOUR_OF_DAY)); + calendar.add(Calendar.MINUTE,-calendar.get(Calendar.MINUTE)); + calendar.add(Calendar.SECOND,-calendar.get(Calendar.SECOND)); + calendar.add(Calendar.DAY_OF_MONTH,-29); + String startTime = DateUtil.format(calendar.getTime(),DateUtil.PATTERN_DATETIME); + String rainStart = DateUtil.format(calendar.getTime(),DateUtil.PATTERN_DATE); + R>> rains = rainfallClient.getDurationRainFall(code,rainStart,rainEnd); + if(!rains.isSuccess() || CollectionUtil.isEmpty(rains.getData())){ + return new ArrayList<>(); + } + return rains.getData(); + } + + + /** * 获取设备装机容量 * @param list * @param refDept @@ -472,7 +567,6 @@ public class HydropowerServiceImpl implements HydropowerService { WaterLevelVo level = validList.get(0); // 前池水位、当日水位曲线 response.setFrontWaterLevel(level.getFrontWaterLevel()); - response.setFrontCurveMap(level.getFrontCurveMap()); } /** From 6a4ed31bb17afa5dc551037b642b198fd2d4c748 Mon Sep 17 00:00:00 2001 From: yang_shj <1069818635@QQ.com> Date: Thu, 1 Aug 2024 17:56:03 +0800 Subject: [PATCH 12/12] =?UTF-8?q?#=E6=96=B0=E7=89=88=E7=94=B5=E7=AB=99?= =?UTF-8?q?=E9=A6=96=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/hnac/hzims/vo/SafeCheckStatisticVO.java | 2 +- .../inspect/task/feign/IInspectTaskClient.java | 2 +- .../com/hnac/hzims/middle/MiddleApplication.java | 6 - .../operation/home/impl/RealTargetServiceImpl.java | 18 +-- .../inspect/task/feign/InspectTaskClient.java | 1 + .../main/service/impl/HydropowerServiceImpl.java | 2 +- .../com/hnac/hzims/ticket/TicketApplication.java | 8 +- .../ticket/repair/mapper/OperRepairMapper.xml | 6 + .../hzims/ticket/repair/mapper/WorkTaskMapper.xml | 11 ++ .../ticket/repair/mapper/xml/OperRepairMapper.xml | 6 - .../ticket/repair/mapper/xml/WorkTaskMapper.xml | 11 -- .../mapper/StandardTicketInfoMapper.java | 18 +-- .../mapper/StandardTicketInfoMapper.xml | 93 ++++++++++++++++ .../mapper/StandardTicketMeasureMapper.xml | 5 + .../mapper/xml/StandardTicketInfoMapper.xml | 97 ---------------- .../mapper/xml/StandardTicketMeasureMapper.xml | 5 - .../service/IStandardTicketInfoService.java | 11 +- .../impl/StandardTicketInfoServiceImpl.java | 13 +++ .../workTicket/feign/OperateTicketClient.java | 8 +- .../mapper/TwoTicketMatterLibraryMapper.xml | 5 + .../workTicket/mapper/WorkTicketDelayMapper.xml | 5 + .../workTicket/mapper/WorkTicketFlowMapper.xml | 5 + .../workTicket/mapper/WorkTicketInfoMapper.xml | 122 +++++++++++++++++++++ .../mapper/WorkTicketMembersChangeMapper.xml | 5 + .../mapper/WorkTicketOperateTimeMapper.xml | 5 + .../mapper/WorkTicketPrincipalChangeMapper.xml | 5 + .../mapper/WorkTicketSafetyMeasureMapper.xml | 5 + .../mapper/xml/TwoTicketMatterLibraryMapper.xml | 5 - .../mapper/xml/WorkTicketDelayMapper.xml | 5 - .../workTicket/mapper/xml/WorkTicketFlowMapper.xml | 5 - .../workTicket/mapper/xml/WorkTicketInfoMapper.xml | 122 --------------------- .../mapper/xml/WorkTicketMembersChangeMapper.xml | 5 - .../mapper/xml/WorkTicketOperateTimeMapper.xml | 5 - .../mapper/xml/WorkTicketPrincipalChangeMapper.xml | 5 - .../mapper/xml/WorkTicketSafetyMeasureMapper.xml | 5 - 35 files changed, 316 insertions(+), 321 deletions(-) create mode 100644 hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/repair/mapper/OperRepairMapper.xml create mode 100644 hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/repair/mapper/WorkTaskMapper.xml delete mode 100644 hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/repair/mapper/xml/OperRepairMapper.xml delete mode 100644 hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/repair/mapper/xml/WorkTaskMapper.xml create mode 100644 hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/mapper/StandardTicketInfoMapper.xml create mode 100644 hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/mapper/StandardTicketMeasureMapper.xml delete mode 100644 hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/mapper/xml/StandardTicketInfoMapper.xml delete mode 100644 hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/mapper/xml/StandardTicketMeasureMapper.xml create mode 100644 hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/TwoTicketMatterLibraryMapper.xml create mode 100644 hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/WorkTicketDelayMapper.xml create mode 100644 hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/WorkTicketFlowMapper.xml create mode 100644 hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/WorkTicketInfoMapper.xml create mode 100644 hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/WorkTicketMembersChangeMapper.xml create mode 100644 hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/WorkTicketOperateTimeMapper.xml create mode 100644 hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/WorkTicketPrincipalChangeMapper.xml create mode 100644 hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/WorkTicketSafetyMeasureMapper.xml delete mode 100644 hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/xml/TwoTicketMatterLibraryMapper.xml delete mode 100644 hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/xml/WorkTicketDelayMapper.xml delete mode 100644 hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/xml/WorkTicketFlowMapper.xml delete mode 100644 hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/xml/WorkTicketInfoMapper.xml delete mode 100644 hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/xml/WorkTicketMembersChangeMapper.xml delete mode 100644 hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/xml/WorkTicketOperateTimeMapper.xml delete mode 100644 hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/xml/WorkTicketPrincipalChangeMapper.xml delete mode 100644 hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/xml/WorkTicketSafetyMeasureMapper.xml diff --git a/hzims-service-api/common-api/src/main/java/com/hnac/hzims/vo/SafeCheckStatisticVO.java b/hzims-service-api/common-api/src/main/java/com/hnac/hzims/vo/SafeCheckStatisticVO.java index 70bb67a..b7f0f4f 100644 --- a/hzims-service-api/common-api/src/main/java/com/hnac/hzims/vo/SafeCheckStatisticVO.java +++ b/hzims-service-api/common-api/src/main/java/com/hnac/hzims/vo/SafeCheckStatisticVO.java @@ -13,7 +13,7 @@ import java.io.Serializable; */ @ApiModel(value = "安全检查项目统计对象",description = "安全检查项目统计对象") @Data -public class SafeCheckStatisticVO implements Serializable { +public class SafeCheckStatisticVO { @ApiModelProperty(value = "项目类型") private String projectType; diff --git a/hzims-service-api/inspect-api/src/main/java/com/hnac/hzinfo/inspect/task/feign/IInspectTaskClient.java b/hzims-service-api/inspect-api/src/main/java/com/hnac/hzinfo/inspect/task/feign/IInspectTaskClient.java index 2804780..79db235 100644 --- a/hzims-service-api/inspect-api/src/main/java/com/hnac/hzinfo/inspect/task/feign/IInspectTaskClient.java +++ b/hzims-service-api/inspect-api/src/main/java/com/hnac/hzinfo/inspect/task/feign/IInspectTaskClient.java @@ -42,7 +42,7 @@ public interface IInspectTaskClient { * @param inspectType 查询类型 1:为运行人员 2:管理及其他人员 * @return */ - @GetMapping(EXPIRE_INSPECT) + @GetMapping(GET_INSPECT_TASK_CHECK) R getInspectTaskCheck(@RequestParam("startDate") String startDate, @RequestParam("endDate") String endDate, @RequestParam("dept") Long dept, diff --git a/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/MiddleApplication.java b/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/MiddleApplication.java index b3e7bd1..99004da 100644 --- a/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/MiddleApplication.java +++ b/hzims-service/hzims-middle/src/main/java/com/hnac/hzims/middle/MiddleApplication.java @@ -15,12 +15,6 @@ import org.springframework.context.annotation.ComponentScan; @MapperScan(basePackages = {"com.hnac.hzinfo.**.mapper","com.hnac.hzims.**.mapper"}) @EnableFeignClients(basePackages = {"org.springblade", "com.hnac"}) public class MiddleApplication { -// static { -// System.setProperty("spring.cloud.nacos.discovery.server-addr", "http://175.6.40.67:10042"); -// System.setProperty("spring.cloud.nacos.config.server-addr", "http://175.6.40.67:10042"); -// System.setProperty("spring.cloud.nacos.username", "nacos"); -// System.setProperty("spring.cloud.nacos.password", "nacos"); -// } public static void main(String[] args) { BladeApplication.run("hzims-middle", MiddleApplication.class, args); diff --git a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/RealTargetServiceImpl.java b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/RealTargetServiceImpl.java index 8db8fbc..746b25b 100644 --- a/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/RealTargetServiceImpl.java +++ b/hzims-service/hzims-scheduled/src/main/java/com/hnac/hzims/scheduled/service/operation/home/impl/RealTargetServiceImpl.java @@ -313,7 +313,7 @@ public class RealTargetServiceImpl implements RealTargetService { target.setPowerDay(this.devicePowerDay(generations,device)); // 昨日发电量 target.setPowerYesterDay(this.devicePowerYesterDay(generations,device)); - // 当天有功功率 + // 近24小时有功功率 target.setActivePowerVoList(this.getLoadsByDay(device)); // 30天发电量 target.setGenerationPowerVoList(this.getGenerationPowerList(generations,device)); @@ -1483,10 +1483,12 @@ public class RealTargetServiceImpl implements RealTargetService { * @return */ private List getLoadsByDay(EminfoAndEmParamVo device) { - // 开始日期 - String start = DateUtil.format(new Date(),DateUtil.PATTERN_DATE) + " 00:00:00"; + Calendar calendar = Calendar.getInstance(); // 结束日期 - String end = DateUtil.format(new Date(),DateUtil.PATTERN_DATE) + " 23:59:59"; + String end = DateUtil.format(calendar.getTime(),DateUtil.PATTERN_DATETIME); + calendar.add(Calendar.DAY_OF_MONTH,-1); + // 开始日期 + String start = DateUtil.format(calendar.getTime(),DateUtil.PATTERN_DATE) + " 00:00:00"; List records = dataService.periodTargetData(start, end, 3, 2, device.getEmCode(), HomePageConstant.PV_LOAD); if (CollectionUtil.isEmpty(records)) { return new ArrayList<>(); @@ -1988,8 +1990,8 @@ public class RealTargetServiceImpl implements RealTargetService { */ private List thirtyGenerations(List stations) { Calendar calendar = Calendar.getInstance(); - String end = DateUtil.format(calendar.getTime(), DateUtil.PATTERN_DATETIME); - calendar.add(Calendar.DAY_OF_MONTH,-29); + String end = DateUtil.format(calendar.getTime(), DateUtil.PATTERN_DATE); + calendar.add(Calendar.DAY_OF_MONTH,-30); String start = DateUtil.format(calendar.getTime(), DateUtil.PATTERN_DATE); return thirtyGenerateService.list(Wrappers.lambdaQuery() .in(ThirtyGenerationEntity::getStationId,stations) @@ -2034,10 +2036,10 @@ public class RealTargetServiceImpl implements RealTargetService { private List getGenerationPowerList(List generations,EminfoAndEmParamVo device) { Calendar calendar = Calendar.getInstance(); Date end = calendar.getTime(); - calendar.add(Calendar.DAY_OF_MONTH,-29); + calendar.add(Calendar.DAY_OF_MONTH,-30); Date start = calendar.getTime(); List powers = new ArrayList<>(); - while (end.compareTo(start) >= 0){ + while (end.compareTo(start) > 0){ GenerationPowerVo power = new GenerationPowerVo(); if (CollectionUtil.isEmpty(generations)) { power.setDate(DateUtil.format(start,DateUtil.PATTERN_DATE)); diff --git a/hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/task/feign/InspectTaskClient.java b/hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/task/feign/InspectTaskClient.java index 0fc8788..b7df8c9 100644 --- a/hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/task/feign/InspectTaskClient.java +++ b/hzims-service/inspect/src/main/java/com/hnac/hzinfo/inspect/task/feign/InspectTaskClient.java @@ -84,6 +84,7 @@ public class InspectTaskClient implements IInspectTaskClient { * @param deptId * @return */ + @GetMapping(EXPIRE_INSPECT) @Override public List expireInspect(String start, String end, Long deptId) { return taskService.list(Wrappers.lambdaQuery() diff --git a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/HydropowerServiceImpl.java b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/HydropowerServiceImpl.java index 4fa1ce6..f40aac0 100644 --- a/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/HydropowerServiceImpl.java +++ b/hzims-service/operational/src/main/java/com/hnac/hzims/operational/main/service/impl/HydropowerServiceImpl.java @@ -405,12 +405,12 @@ public class HydropowerServiceImpl implements HydropowerService { private List> get30DayRain(String code) { Calendar calendar = Calendar.getInstance(); String endTime = DateUtil.format(calendar.getTime(),DateUtil.PATTERN_DATETIME); + calendar.add(Calendar.DAY_OF_MONTH,-1); String rainEnd = DateUtil.format(calendar.getTime(),DateUtil.PATTERN_DATE); calendar.add(Calendar.HOUR_OF_DAY,-calendar.get(Calendar.HOUR_OF_DAY)); calendar.add(Calendar.MINUTE,-calendar.get(Calendar.MINUTE)); calendar.add(Calendar.SECOND,-calendar.get(Calendar.SECOND)); calendar.add(Calendar.DAY_OF_MONTH,-29); - String startTime = DateUtil.format(calendar.getTime(),DateUtil.PATTERN_DATETIME); String rainStart = DateUtil.format(calendar.getTime(),DateUtil.PATTERN_DATE); R>> rains = rainfallClient.getDurationRainFall(code,rainStart,rainEnd); if(!rains.isSuccess() || CollectionUtil.isEmpty(rains.getData())){ diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/TicketApplication.java b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/TicketApplication.java index 4db5df6..17e8860 100644 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/TicketApplication.java +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/TicketApplication.java @@ -24,10 +24,4 @@ public class TicketApplication { public static void main(String[] args) { BladeApplication.run(TicketConstants.APP_NAME, TicketApplication.class, args); } - -// @Override -// protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { -// return BladeApplication.createSpringApplicationBuilder(builder, TicketConstants.APP_NAME, TicketApplication.class); -// } - -} +} \ No newline at end of file diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/repair/mapper/OperRepairMapper.xml b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/repair/mapper/OperRepairMapper.xml new file mode 100644 index 0000000..bf0f643 --- /dev/null +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/repair/mapper/OperRepairMapper.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/repair/mapper/WorkTaskMapper.xml b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/repair/mapper/WorkTaskMapper.xml new file mode 100644 index 0000000..2b6a378 --- /dev/null +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/repair/mapper/WorkTaskMapper.xml @@ -0,0 +1,11 @@ + + + + + + + diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/repair/mapper/xml/OperRepairMapper.xml b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/repair/mapper/xml/OperRepairMapper.xml deleted file mode 100644 index bf0f643..0000000 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/repair/mapper/xml/OperRepairMapper.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/repair/mapper/xml/WorkTaskMapper.xml b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/repair/mapper/xml/WorkTaskMapper.xml deleted file mode 100644 index 2b6a378..0000000 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/repair/mapper/xml/WorkTaskMapper.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/mapper/StandardTicketInfoMapper.java b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/mapper/StandardTicketInfoMapper.java index 48cd76e..9a86545 100644 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/mapper/StandardTicketInfoMapper.java +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/mapper/StandardTicketInfoMapper.java @@ -1,16 +1,11 @@ package com.hnac.hzims.ticket.standardTicket.mapper; -import com.baomidou.mybatisplus.core.conditions.Wrapper; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.hnac.hzims.ticket.standardTicket.entity.StandardTicketInfoEntity; import com.hnac.hzims.ticket.standardTicket.vo.OperateTicketStatisticVO; -import com.hnac.hzims.ticket.standardTicket.vo.OperateVo; -import com.hnac.hzims.ticket.workTicket.entity.WorkTicketInfoEntity; import com.hnac.hzims.vo.SafeCheckStatisticVO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; @@ -30,14 +25,9 @@ public interface StandardTicketInfoMapper extends UserDataScopeBaseMapper deptIdList); - /** * 分页查询 * @param searchPage @@ -61,7 +50,6 @@ public interface StandardTicketInfoMapper extends UserDataScopeBaseMapper selectPages(Page searchPage, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); - List selectTicketList(@Param(Constants.WRAPPER) QueryWrapper queryWrapper); IPage pageCondition(IPage page, @Param(Constants.WRAPPER) QueryWrapper queryWrapper); } diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/mapper/StandardTicketInfoMapper.xml b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/mapper/StandardTicketInfoMapper.xml new file mode 100644 index 0000000..4e1309d --- /dev/null +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/mapper/StandardTicketInfoMapper.xml @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/mapper/StandardTicketMeasureMapper.xml b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/mapper/StandardTicketMeasureMapper.xml new file mode 100644 index 0000000..2ad9d16 --- /dev/null +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/mapper/StandardTicketMeasureMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/mapper/xml/StandardTicketInfoMapper.xml b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/mapper/xml/StandardTicketInfoMapper.xml deleted file mode 100644 index e4071b5..0000000 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/mapper/xml/StandardTicketInfoMapper.xml +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - - - - - - - - diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/mapper/xml/StandardTicketMeasureMapper.xml b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/mapper/xml/StandardTicketMeasureMapper.xml deleted file mode 100644 index 2ad9d16..0000000 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/mapper/xml/StandardTicketMeasureMapper.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/service/IStandardTicketInfoService.java b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/service/IStandardTicketInfoService.java index af31217..6a98d18 100644 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/service/IStandardTicketInfoService.java +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/standardTicket/service/IStandardTicketInfoService.java @@ -16,6 +16,7 @@ import com.hnac.hzims.ticket.twoTicket.vo.operation.StandardTicketInfoVo; import com.hnac.hzims.ticket.twoTicket.vo.ticket.StandardTicketCountQueryVo; import com.hnac.hzims.ticket.workTicket.vo.TicketMonthVO; +import com.hnac.hzims.vo.SafeCheckStatisticVO; import org.springblade.core.mp.support.BladePage; import org.springblade.core.mp.support.Query; import org.springblade.core.tool.api.R; @@ -81,10 +82,10 @@ public interface IStandardTicketInfoService extends IService depatList - * @param LocalDateTime firstDateTime - * @param LocalDateTime now - * @return DoublePassRateVO + * @param depatList + * @param firstDateTime + * @param now + * @return */ DoublePassRateVO getDoublePassRate(List depatList, LocalDateTime firstDateTime, LocalDateTime now); @@ -151,4 +152,6 @@ public interface IStandardTicketInfoService extends IService documents, String savePath) throws IOException { FileOutputStream out = new FileOutputStream(savePath); try { diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/feign/OperateTicketClient.java b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/feign/OperateTicketClient.java index de029a0..ccea0c9 100644 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/feign/OperateTicketClient.java +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/feign/OperateTicketClient.java @@ -1,8 +1,10 @@ package com.hnac.hzims.ticket.workTicket.feign; import com.hnac.hzims.safeproduct.Constants; +import com.hnac.hzims.ticket.standardTicket.service.IStandardTicketInfoService; import com.hnac.hzims.ticket.standardTicket.service.impl.StandardTicketInfoServiceImpl; import com.hnac.hzims.vo.SafeCheckStatisticVO; +import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.ObjectUtil; @@ -18,9 +20,12 @@ import java.math.RoundingMode; * @author hx */ @RestController +@AllArgsConstructor @Slf4j public class OperateTicketClient implements IOperateTicketClient { + private final IStandardTicketInfoService standardTicketInfoService; + /** * 安全检查操作票事项统计 * @param startDate 开始时间 @@ -33,8 +38,7 @@ public class OperateTicketClient implements IOperateTicketClient { public R getOperateTicketCheck(@RequestParam("startDate") String startDate, @RequestParam("endDate") String endDate, @RequestParam("dept") Long dept) { - StandardTicketInfoServiceImpl service = SpringUtil.getBean(StandardTicketInfoServiceImpl.class); - SafeCheckStatisticVO vo = service.getBaseMapper().getOperateTicketStatistic(startDate,endDate,dept); + SafeCheckStatisticVO vo = standardTicketInfoService.getOperateTicketStatistic(startDate,endDate,dept); //查询合格率 保留两位小数 if(vo == null){ vo = new SafeCheckStatisticVO(); diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/TwoTicketMatterLibraryMapper.xml b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/TwoTicketMatterLibraryMapper.xml new file mode 100644 index 0000000..8339806 --- /dev/null +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/TwoTicketMatterLibraryMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/WorkTicketDelayMapper.xml b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/WorkTicketDelayMapper.xml new file mode 100644 index 0000000..74634e7 --- /dev/null +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/WorkTicketDelayMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/WorkTicketFlowMapper.xml b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/WorkTicketFlowMapper.xml new file mode 100644 index 0000000..2d40dca --- /dev/null +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/WorkTicketFlowMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/WorkTicketInfoMapper.xml b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/WorkTicketInfoMapper.xml new file mode 100644 index 0000000..4e301db --- /dev/null +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/WorkTicketInfoMapper.xml @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/WorkTicketMembersChangeMapper.xml b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/WorkTicketMembersChangeMapper.xml new file mode 100644 index 0000000..f781913 --- /dev/null +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/WorkTicketMembersChangeMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/WorkTicketOperateTimeMapper.xml b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/WorkTicketOperateTimeMapper.xml new file mode 100644 index 0000000..7a793b3 --- /dev/null +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/WorkTicketOperateTimeMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/WorkTicketPrincipalChangeMapper.xml b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/WorkTicketPrincipalChangeMapper.xml new file mode 100644 index 0000000..7a99b5e --- /dev/null +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/WorkTicketPrincipalChangeMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/WorkTicketSafetyMeasureMapper.xml b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/WorkTicketSafetyMeasureMapper.xml new file mode 100644 index 0000000..c40372d --- /dev/null +++ b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/WorkTicketSafetyMeasureMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/xml/TwoTicketMatterLibraryMapper.xml b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/xml/TwoTicketMatterLibraryMapper.xml deleted file mode 100644 index 8339806..0000000 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/xml/TwoTicketMatterLibraryMapper.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/xml/WorkTicketDelayMapper.xml b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/xml/WorkTicketDelayMapper.xml deleted file mode 100644 index 74634e7..0000000 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/xml/WorkTicketDelayMapper.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/xml/WorkTicketFlowMapper.xml b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/xml/WorkTicketFlowMapper.xml deleted file mode 100644 index 2d40dca..0000000 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/xml/WorkTicketFlowMapper.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/xml/WorkTicketInfoMapper.xml b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/xml/WorkTicketInfoMapper.xml deleted file mode 100644 index e3183c2..0000000 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/xml/WorkTicketInfoMapper.xml +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/xml/WorkTicketMembersChangeMapper.xml b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/xml/WorkTicketMembersChangeMapper.xml deleted file mode 100644 index f781913..0000000 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/xml/WorkTicketMembersChangeMapper.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/xml/WorkTicketOperateTimeMapper.xml b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/xml/WorkTicketOperateTimeMapper.xml deleted file mode 100644 index 7a793b3..0000000 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/xml/WorkTicketOperateTimeMapper.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/xml/WorkTicketPrincipalChangeMapper.xml b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/xml/WorkTicketPrincipalChangeMapper.xml deleted file mode 100644 index 7a99b5e..0000000 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/xml/WorkTicketPrincipalChangeMapper.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/xml/WorkTicketSafetyMeasureMapper.xml b/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/xml/WorkTicketSafetyMeasureMapper.xml deleted file mode 100644 index c40372d..0000000 --- a/hzims-service/ticket/src/main/java/com/hnac/hzims/ticket/workTicket/mapper/xml/WorkTicketSafetyMeasureMapper.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - -