From c7019936c83aa245543595978623606f379175fd Mon Sep 17 00:00:00 2001 From: Zangzhipeng Date: Fri, 16 Aug 2024 14:01:31 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=8E=92=E6=9F=A5=E5=86=85?= =?UTF-8?q?=E5=AE=B9=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ConfigController.java | 7 +- .../controller/HighDangerController.java | 225 +++++++++++------- .../server_api/mapper/ConfigMapper.java | 2 +- .../server_api/mapper/HighDangerMapper.java | 15 +- .../server_api/service/HighDangerService.java | 12 +- .../server_api/service/IConfigService.java | 2 +- .../service/impl/ConfigServiceImpl.java | 6 +- .../impl/HighDangerBaseServiceImpl.java | 9 + .../src/main/resources/application.yml | 16 +- .../resources/sql-mapper/ConfigMapper.xml | 20 +- .../resources/sql-mapper/HighDangerMapper.xml | 22 +- .../model/common/DTO/HiddenDangerVO.java | 15 ++ .../{SectionVO.java => DTO/SectionDTO.java} | 4 +- .../model/common/ManualInvestigation.java | 37 +-- .../model/common/ThtSectionInfoDTO.java | 2 + .../hiatmp/model/common/VO/BasicInfoVO.java | 22 ++ .../hiatmp/model/common/VO/CrossingVO.java | 9 + .../hiatmp/model/common/VO/SectionVO.java | 20 ++ .../hisense/hiatmp/model/dmr/LineInfo.java | 5 + .../hiatmp/model/common/Operator.class | Bin 5330 -> 5793 bytes .../hisense/hiatmp/model/dmr/LineInfo.class | Bin 6448 -> 8454 bytes 21 files changed, 309 insertions(+), 141 deletions(-) create mode 100644 hiatmp-model/src/main/java/com/hisense/hiatmp/model/common/DTO/HiddenDangerVO.java rename hiatmp-model/src/main/java/com/hisense/hiatmp/model/common/{SectionVO.java => DTO/SectionDTO.java} (83%) create mode 100644 hiatmp-model/src/main/java/com/hisense/hiatmp/model/common/VO/BasicInfoVO.java create mode 100644 hiatmp-model/src/main/java/com/hisense/hiatmp/model/common/VO/CrossingVO.java create mode 100644 hiatmp-model/src/main/java/com/hisense/hiatmp/model/common/VO/SectionVO.java diff --git a/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/controller/ConfigController.java b/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/controller/ConfigController.java index c6cb43e..7d87cb6 100644 --- a/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/controller/ConfigController.java +++ b/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/controller/ConfigController.java @@ -64,11 +64,12 @@ public class ConfigController extends HiatmpController { 基础信息预留展示接口 */ @GetMapping("/getDangerBaseData") - public ServerResponse getBaseData(@RequestParam String sectionCode, - @RequestParam String businessId){ + public ServerResponse getBaseData(@RequestParam(defaultValue = "") String sectionCode, + @RequestParam(defaultValue = "") String crossingCode, + @RequestParam(defaultValue = "") String businessId){ log.info("/getDangerBaseData(排查第一页默认数据回显)接口被调用,调用ip: {}, 入参:{}", request.getRemoteAddr(),sectionCode); // 查询默认数据 - LineInfo dangerBaseData = configService.getDangerBaseData(sectionCode,businessId); + List dangerBaseData = configService.getDangerBaseData(sectionCode,crossingCode,businessId); /*List roadTypes = highDangerMapper.getRoadTypes(); if(dangerBaseData.getSectionType() != null){ diff --git a/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/controller/HighDangerController.java b/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/controller/HighDangerController.java index 20cc63d..94f7b2a 100644 --- a/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/controller/HighDangerController.java +++ b/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/controller/HighDangerController.java @@ -3,10 +3,13 @@ package com.hisense.hiatmp.server_api.controller; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.hisense.hiatmp.model.common.*; +import com.hisense.hiatmp.model.common.DTO.HiddenDangerVO; +import com.hisense.hiatmp.model.common.DTO.SectionDTO; +import com.hisense.hiatmp.model.common.VO.BasicInfoVO; +import com.hisense.hiatmp.model.common.VO.SectionVO; import com.hisense.hiatmp.server_api.mapper.ConfigureMapper; import com.hisense.hiatmp.server_api.mapper.HighDangerMapper; import com.hisense.hiatmp.server_api.mapper.OperatorMapper; -import com.hisense.hiatmp.model.common.DangerProblem; import com.hisense.hiatmp.server_api.model.StreetCommunity; import com.hisense.hiatmp.server_api.service.HighDangerService; import com.hisense.hiatmp.model.dmr.Point; @@ -14,7 +17,6 @@ import com.hisense.hiatmp.server_api.service.ThtApproveService; import com.hisense.hiatmp.server_api.service.ThtAttachsService; import com.hisense.hiatmp.server_api.utils.CoordinateConverter; import com.hisense.hiatmp.server_api.utils.CoordinateUtils; -import io.swagger.annotations.Api; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -22,15 +24,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; -import java.io.IOException; import java.math.BigDecimal; -import java.time.Duration; import java.util.*; -import java.util.regex.Matcher; -import java.util.regex.Pattern; @Slf4j @RestController @@ -72,8 +69,8 @@ public class HighDangerController { 新增隐患排查(测试用) */ @Transactional - @GetMapping("/insertDangerTest") - public ServerResponse insertDanger(@RequestParam String name) { + @PostMapping("/insertHiddenDanger") + public ServerResponse insertDanger(@RequestBody HiddenDangerVO hiddenDangerVO) { HighDangerBase highDangerBase = new HighDangerBase(); HighDangerRoad highDangerRoad = new HighDangerRoad(); @@ -87,7 +84,7 @@ public class HighDangerController { // 隐患id highDangerBase.setBusinessId(businessId); // 隐患名称 - highDangerBase.setName(name); + highDangerBase.setName(hiddenDangerVO.getName()); // 操作用户 highDangerBase.setOperator("admin1"); @@ -457,7 +454,6 @@ public class HighDangerController { @RequestParam(defaultValue = "10") Long pageSize, HttpServletRequest request ) { - log.info("/getNearRoadInfo(获取最近道路)接口被调用,调用ip: {}, 入参:{},{},{}", request.getRemoteAddr(), point, pageNum, pageSize); //获取三公里内的坐标 double[] rectangle = CoordinateUtils.getRectangleCoordinates(point.getY(), point.getX(), 3); @@ -465,17 +461,17 @@ public class HighDangerController { // DecimalFormat df = new DecimalFormat("#.##"); // 获取全部路段数据 BigDecimal d = new BigDecimal(point.getX()).setScale(1, BigDecimal.ROUND_DOWN); - SectionVO sectionVO = new SectionVO(); - sectionVO.setPosition(String.valueOf(d)); - sectionVO.setSearch(point.getSearch()); - List allRoadInfo = highDangerMapper.getAllSection(sectionVO); + SectionDTO sectionDTO = new SectionDTO(); + sectionDTO.setPosition(String.valueOf(d)); + sectionDTO.setSearch(point.getSearch()); + List allRoadInfo = highDangerMapper.getAllSection(sectionDTO); // List allRoadInfo = highDangerMapper.getAllSection(sectionVO); List> combinedMap = new LinkedList<>(); HashMap hashMap = new HashMap<>(); Point Dpoint = new Point(); // 遍历所有路段 - for (SectionVO dto : allRoadInfo) { + for (SectionDTO dto : allRoadInfo) { HashMap pointMapSection = new HashMap<>(); // Map map = new HashMap<>(); @@ -624,6 +620,17 @@ public class HighDangerController { return ServerResponse.ok(combinedMap); } + /* + 根据路口查询上下游路段信息 + */ + @GetMapping("/getSectionByCrossing") + public ServerResponse getSectionByCrossing(@RequestParam String crossingCode){ + + List sectionByCrossing = highDangerService.getSectionByCrossing(crossingCode); + + return ServerResponse.ok(sectionByCrossing); + } + // 查询当前排查所在路段 @GetMapping("/getDangerRoad") public ServerResponse getDangerRoad(@RequestParam String businessId, HttpServletRequest request) { @@ -633,7 +640,7 @@ public class HighDangerController { HighDangerRoad roadInfo = highDangerMapper.getRoadInfo(businessId); roadInfo.setDeptId(operatorMapper.getOperatorById(roadInfo.getOperator()).getCdepartmentid()); - SectionVO sectionByCode = highDangerMapper.getSectionByCode(roadInfo.getSectionCode()); + SectionDTO sectionByCode = highDangerMapper.getSectionByCode(roadInfo.getSectionCode()); if (sectionByCode.getPosition() == null) { return ServerResponse.ok("路段点位为空", null); @@ -663,32 +670,32 @@ public class HighDangerController { roadInfo.setAddress(sectionByCode.getSectionName()); roadInfo.setCoordinateList(coordinateMapTemporary); - Date nowDate = new Date(); - Date pcEndTime = roadInfo.getPcEndTime(); - if (pcEndTime != null) { - long diff = nowDate.getTime() - pcEndTime.getTime(); - // 时间差 - long diffDays = diff / (24 * 60 * 60 * 1000); - diffDays = Math.abs(diffDays); - - int comparison = nowDate.compareTo(pcEndTime); - if (comparison < 0) { // 超期 - roadInfo.setDeadline(diffDays); - roadInfo.setDeadlineStatus("超期" + diffDays + "天"); - roadInfo.setDeadlineType("1"); - } else if (comparison > 0 && diffDays <= 3) { // 临期 - roadInfo.setDeadline(diffDays); - roadInfo.setDeadlineStatus("临期" + diffDays + "天"); - roadInfo.setDeadlineType("2"); - } else { // 正常 - roadInfo.setDeadline(diffDays); - roadInfo.setDeadlineStatus("正常"); - roadInfo.setDeadlineType("3"); - } - } else { - roadInfo.setDeadlineStatus("无排查结束时间"); - roadInfo.setDeadlineType("3"); - } +// Date nowDate = new Date(); +// Date pcEndTime = roadInfo.getPcEndTime(); +// if (pcEndTime != null) { +// long diff = nowDate.getTime() - pcEndTime.getTime(); +// // 时间差 +// long diffDays = diff / (24 * 60 * 60 * 1000); +// diffDays = Math.abs(diffDays); +// +// int comparison = nowDate.compareTo(pcEndTime); +// if (comparison < 0) { // 超期 +// roadInfo.setDeadline(diffDays); +// roadInfo.setDeadlineStatus("超期" + diffDays + "天"); +// roadInfo.setDeadlineType("1"); +// } else if (comparison > 0 && diffDays <= 3) { // 临期 +// roadInfo.setDeadline(diffDays); +// roadInfo.setDeadlineStatus("临期" + diffDays + "天"); +// roadInfo.setDeadlineType("2"); +// } else { // 正常 +// roadInfo.setDeadline(diffDays); +// roadInfo.setDeadlineStatus("正常"); +// roadInfo.setDeadlineType("3"); +// } +// } else { +// roadInfo.setDeadlineStatus("无排查结束时间"); +// roadInfo.setDeadlineType("3"); +// } log.info("/getDangerRoad(查询当前排查所在路段)接口返回, 客户端ip: {}, 返回数据:{}", request.getRemoteAddr(), roadInfo); @@ -823,36 +830,33 @@ public class HighDangerController { public ServerResponse getSectionInfo(@RequestParam String businessId, HttpServletRequest request) { log.info("/getSectionInfo(获取基础数据(第一页))接口被调用,调用ip: {}, 入参:{}", request.getRemoteAddr(), businessId); - ThtSectionInfoDTO thtSectionInfoDTO; - // 用户数据查询,如果没有该用户数据则新增 List sectionInfo = highDangerMapper.getSectionInfo(businessId); // 用户数据查询是否为空 - if (sectionInfo.isEmpty()) { - ManualInvestigation manualInvestigation = new ManualInvestigation(); - manualInvestigation.setBusinessId(businessId); - highDangerMapper.insertSectionInfo(manualInvestigation); - List section = highDangerMapper.getSectionInfo(businessId); - thtSectionInfoDTO = section.get(0); - } else { - thtSectionInfoDTO = sectionInfo.get(0); - } - - // 是否该排查有绑定的辖区街道信息,有则展示 - List communityByRoad = highDangerMapper.getCommunityByRoad(businessId); - if (communityByRoad == null || communityByRoad.isEmpty()) { - log.info("/getSectionInfo(获取基础数据(第一页))接口返回, 客户端ip: {}, 返回数据:{}", request.getRemoteAddr(), sectionInfo); - return ServerResponse.ok(thtSectionInfoDTO); +// if (sectionInfo.isEmpty()) { +// ManualInvestigation manualInvestigation = new ManualInvestigation(); +// manualInvestigation.setBusinessId(businessId); +// highDangerMapper.insertSectionInfo(manualInvestigation); +// List section = highDangerMapper.getSectionInfo(businessId); +// thtSectionInfoDTO = section.get(0); +// } else { + for(ThtSectionInfoDTO sectionInfoDTO : sectionInfo){ +// thtSectionInfoDTO = sectionInfo.get(0); + // 是否该排查有绑定的辖区街道信息,有则展示 + List communityByRoad = highDangerMapper.getCommunityByRoad(businessId); + if (communityByRoad != null && !communityByRoad.isEmpty()) { + StreetCommunity streetCommunity = communityByRoad.get(0); + sectionInfoDTO.setXqcode(streetCommunity.getXqcode()); + sectionInfoDTO.setXqname(streetCommunity.getXqname()); + sectionInfoDTO.setJdcode(streetCommunity.getJdcode()); + sectionInfoDTO.setJdname(streetCommunity.getJdname()); +// log.info("/getSectionInfo(获取基础数据(第一页))接口返回, 客户端ip: {}, 返回数据:{}", request.getRemoteAddr(), sectionInfo); +// return ServerResponse.ok(sectionInfoDTO); + } } - StreetCommunity streetCommunity = communityByRoad.get(0); - thtSectionInfoDTO.setXqcode(streetCommunity.getXqcode()); - thtSectionInfoDTO.setXqname(streetCommunity.getXqname()); - thtSectionInfoDTO.setJdcode(streetCommunity.getJdcode()); - thtSectionInfoDTO.setJdname(streetCommunity.getJdname()); - log.info("/getSectionInfo(获取基础数据(第一页))接口返回, 客户端ip: {}, 返回数据:{}", request.getRemoteAddr(), sectionInfo); if (sectionInfo != null) { - return ServerResponse.ok(thtSectionInfoDTO); + return ServerResponse.ok(sectionInfo); } else { return ServerResponse.ok("无基本信息内容", null); } @@ -980,22 +984,61 @@ public class HighDangerController { Date lastModDate = new Date(); manualInvestigation.setLastModeDate(lastModDate); + String hidden_businessId = manualInvestigation.getBusinessId(); + + // 新增排查 + if(manualInvestigation.getTemporary() == 2){ + HighDangerBase highDangerBase = new HighDangerBase(); + HighDangerRoad highDangerRoad = new HighDangerRoad(); + + UUID uuid = UUID.fromString(UUID.randomUUID().toString()); + String nid = uuid.toString().replaceAll("-", ""); + hidden_businessId = "ZZ" + highDangerService.random12(); + + // base主键 + highDangerBase.setNid(nid); + // 隐患id + highDangerBase.setBusinessId(hidden_businessId); + // 隐患名称 + highDangerBase.setName(manualInvestigation.getName()); + // 操作用户 + highDangerBase.setOperator(manualInvestigation.getOperator()); + + // 道路NID + highDangerRoad.setNid(nid); + // 隐患主键 + highDangerRoad.setBusinessId(hidden_businessId); + // 绑定路段 + highDangerRoad.setSectionCode(manualInvestigation.getSectionCode()); + + // 分别插入两张表 + highDangerService.insertDanger(highDangerBase); + highDangerService.insertDangerRoad(highDangerRoad); + } + + manualInvestigation.setBusinessId(hidden_businessId); + // 保存辖区和街道 - highDangerMapper.updateSectionCommunity(manualInvestigation.getBusinessId(), manualInvestigation.getXqcode(), manualInvestigation.getJdcode()); + highDangerMapper.updateSectionCommunity(hidden_businessId, manualInvestigation.getXqcode(), manualInvestigation.getJdcode()); // 第一页:基础数据 - List sectionInfos = highDangerMapper.getSectionInfo(manualInvestigation.getBusinessId()); - ThtSectionInfoDTO sectionInfo = sectionInfos.get(0); - if (sectionInfo != null) { + List sectionInfos = highDangerMapper.getSectionInfo(hidden_businessId); + if (!sectionInfos.isEmpty()) { // 更新基础数据(步骤1) - highDangerMapper.updateSectionInfo(manualInvestigation); + for(BasicInfoVO basicInfoVO : manualInvestigation.getBasicInfo()){ + basicInfoVO.setBusinessId(hidden_businessId); + highDangerMapper.updateSectionInfo(basicInfoVO); + } } else { // 保存基础数据(步骤1) - highDangerMapper.insertSectionInfo(manualInvestigation); + for(BasicInfoVO basicInfoVO : manualInvestigation.getBasicInfo()){ + basicInfoVO.setBusinessId(hidden_businessId); + highDangerMapper.insertSectionInfo(basicInfoVO); + } } // 判断数据库是否存在统计数据 - ThtSectionTrafficDTO sectionTraffic = highDangerMapper.getSectionTraffic(manualInvestigation.getBusinessId()); + ThtSectionTrafficDTO sectionTraffic = highDangerMapper.getSectionTraffic(hidden_businessId); if (sectionTraffic != null) { // 更新统计数据(步骤2) @@ -1005,27 +1048,28 @@ public class HighDangerController { highDangerMapper.insertSectionTraffic(manualInvestigation); } - HighDangerBase higDangerDetail = highDangerMapper.getHigDangerDetail(manualInvestigation.getBusinessId()); + // 查询base表的pcCount值 + HighDangerBase higDangerDetail = highDangerMapper.getHigDangerDetail(hidden_businessId); String pcCount = higDangerDetail.getPcCount(); manualInvestigation.setPcCount(pcCount); // 先删除二级页面数据 - highDangerMapper.deleteThtHiddenDataCollectConfigExtra(manualInvestigation.getBusinessId()); + highDangerMapper.deleteThtHiddenDataCollectConfigExtra(hidden_businessId); for (ThtHiddenDataCollectConfigExtra extra : manualInvestigation.getExtraConfigs()) { extra.setPcCount(pcCount); - extra.setBusinessId(manualInvestigation.getBusinessId()); + extra.setBusinessId(hidden_businessId); highDangerMapper.saveThtHiddenDataCollectConfigExtra(extra); } Date date = new Date(); // 隐患排查表--如果存在该记录则更新 - highDangerMapper.deleteRoadInfo(manualInvestigation.getBusinessId()); + highDangerMapper.deleteRoadInfo(hidden_businessId); for (HiddenDangerDTO details : manualInvestigation.getDescribe()) { // 随机生成UUID UUID uuid = UUID.randomUUID(); String uuidString = uuid.toString().replace("-", ""); details.setNid(uuidString); - details.setBusinessId(manualInvestigation.getBusinessId()); + details.setBusinessId(hidden_businessId); details.setPcCount(manualInvestigation.getPcCount()); ThtDangerItems dangerItemsById = highDangerMapper.getDangerItemsById(details.getHdTerm()); @@ -1038,7 +1082,7 @@ public class HighDangerController { highDangerMapper.saveDangerExtra(details); //提交的时候保存附件 - if (manualInvestigation.getTemporary() == Boolean.TRUE + if (manualInvestigation.getTemporary() == 1 && StringUtils.isNotEmpty(details.getHdPic())) { String hdPicArr[] = details.getHdPic().split(","); for (String s : hdPicArr) { @@ -1052,7 +1096,7 @@ public class HighDangerController { thtAttachs.setUploadTime(date); thtAttachs.setInfoId(details.getNid()); thtAttachs.setAttachName(accachName); - thtAttachs.setBusinessId(manualInvestigation.getBusinessId()); + thtAttachs.setBusinessId(hidden_businessId); thtAttachs.setPcCount(pcCount); thtAttachs.setLastModDate(date); thtAttachsService.saveAttachs(thtAttachs); @@ -1105,24 +1149,24 @@ public class HighDangerController { // manualInvestigation.setKeySet(keys.toString()); // 暂存数据 - if (manualInvestigation.getTemporary() == Boolean.FALSE) { + if (manualInvestigation.getTemporary() == 0) { // highDangerMapper.updateTemporary(manualInvestigation.getBusinessId(), "99"); log.info("/saveManualInvestigation(保存 & 暂存人工排查)接口返回, 客户端ip: {}, 返回数据:{},{}", request.getRemoteAddr(), "数据已暂存", manualInvestigation); return ServerResponse.ok("数据已暂存", manualInvestigation); - } else { + } else if(manualInvestigation.getTemporary() == 1){ log.info("/saveManualInvestigation(保存 & 暂存人工排查)接口返回, 客户端ip: {}, 返回数据:{},{}", request.getRemoteAddr(), "数据已保存", manualInvestigation); - highDangerMapper.updateTemporary(manualInvestigation.getBusinessId()); + highDangerMapper.updateTemporary(hidden_businessId); //隐患项不为空时,修改tht_hidden_danger_road String hdFlag = "0"; if (CollectionUtils.isNotEmpty(manualInvestigation.getDescribe())) { hdFlag = "1"; } - highDangerMapper.updateDangerRoad(hdFlag, manualInvestigation.getBusinessId(), pcCount, manualInvestigation.getOperator()); + highDangerMapper.updateDangerRoad(hdFlag, hidden_businessId, pcCount, manualInvestigation.getOperator()); ThtApprove thtAApprove = new ThtApprove(); UUID uuid = UUID.randomUUID(); String uuidString = uuid.toString().replace("-", ""); thtAApprove.setNid(uuidString); - thtAApprove.setBusinessId(manualInvestigation.getBusinessId()); + thtAApprove.setBusinessId(hidden_businessId); thtAApprove.setOperator(manualInvestigation.getLastModeUser()); thtAApprove.setStatus("10"); thtAApprove.setOperateTime(date); @@ -1131,8 +1175,13 @@ public class HighDangerController { thtApproveService.save(thtAApprove); return ServerResponse.ok("数据已保存", manualInvestigation); } - -// return ServerResponse.ok(manualInvestigation); + // 新增 + else if(manualInvestigation.getTemporary() == 2){ + return ServerResponse.ok("数据已新增", manualInvestigation); + } + else { + return ServerResponse.error("无保存标识"); + } } // 智能排查 & 人工排查保存状态 diff --git a/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/mapper/ConfigMapper.java b/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/mapper/ConfigMapper.java index 6d39e03..531c990 100644 --- a/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/mapper/ConfigMapper.java +++ b/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/mapper/ConfigMapper.java @@ -19,5 +19,5 @@ public interface ConfigMapper { List getStreetCommunityByXq(String xqcode); - LineInfo getDangerBaseData(@Param("sectionCode") String sectionCode, @Param("businessId") String businessId); + List getDangerBaseData(@Param("sectionCode") String sectionCode,@Param("crossingCode") String crossingCode, @Param("businessId") String businessId); } diff --git a/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/mapper/HighDangerMapper.java b/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/mapper/HighDangerMapper.java index 76497be..462814c 100644 --- a/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/mapper/HighDangerMapper.java +++ b/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/mapper/HighDangerMapper.java @@ -1,8 +1,9 @@ package com.hisense.hiatmp.server_api.mapper; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.hisense.hiatmp.model.common.*; -import com.hisense.hiatmp.model.common.DangerProblem; +import com.hisense.hiatmp.model.common.DTO.SectionDTO; +import com.hisense.hiatmp.model.common.VO.BasicInfoVO; +import com.hisense.hiatmp.model.common.VO.SectionVO; import com.hisense.hiatmp.server_api.model.StreetCommunity; import io.lettuce.core.dynamic.annotation.Param; import org.springframework.stereotype.Repository; @@ -29,10 +30,12 @@ public interface HighDangerMapper{ List getHigDangerSearch(String search); - List getAllSection(@Param("sectionVO") SectionVO sectionVO); + List getAllSection(@Param("sectionVO") SectionDTO sectionDTO); List getAllCrossing(CrossingDTO crossingDTO); + List getSectionByCrossing(String crossingCode); + HighDangerRoad getRoadInfo(String businessId); List getImportDanger(); @@ -58,9 +61,9 @@ public interface HighDangerMapper{ ThtSectionTrafficDTO getSectionTraffic(String businessId); - void insertSectionInfo(ManualInvestigation sectionInfo); + void insertSectionInfo(BasicInfoVO basicInfoVO); - void updateSectionInfo(ManualInvestigation sectionInfo); + void updateSectionInfo(BasicInfoVO basicInfoVO); void insertSectionTraffic(ManualInvestigation sectionTraffic); @@ -105,7 +108,7 @@ public interface HighDangerMapper{ List getEnumValues(Integer enumType); - SectionVO getSectionByCode(String sectionCode); + SectionDTO getSectionByCode(String sectionCode); List getCommunityByRoad(String businessId); } diff --git a/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/service/HighDangerService.java b/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/service/HighDangerService.java index a726503..f52fb37 100644 --- a/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/service/HighDangerService.java +++ b/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/service/HighDangerService.java @@ -1,17 +1,13 @@ package com.hisense.hiatmp.server_api.service; -import com.hisense.hiatmp.model.common.EnumRoadType; -import com.hisense.hiatmp.model.common.HighDangerBase; -import com.hisense.hiatmp.model.common.HighDangerRoad; -import com.hisense.hiatmp.model.common.ThtDangerItems; +import com.hisense.hiatmp.model.common.*; +import com.hisense.hiatmp.model.common.DTO.SectionDTO; +import com.hisense.hiatmp.model.common.VO.SectionVO; import com.hisense.hiatmp.model.dmr.Point; import com.hisense.hiatmp.server_api.utils.CoordinateConverter; -import io.swagger.models.auth.In; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; -import java.io.IOException; -import java.util.HashMap; import java.util.List; import java.util.Map; @@ -40,6 +36,8 @@ public interface HighDangerService { List getEnumValues(Integer enumType); + List getSectionByCrossing(String crossingCode); + // 随机生成12位数字 String random12(); } diff --git a/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/service/IConfigService.java b/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/service/IConfigService.java index 3ecd030..a9f9b88 100644 --- a/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/service/IConfigService.java +++ b/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/service/IConfigService.java @@ -17,5 +17,5 @@ public interface IConfigService { List getStreetCommunityByXq(String xqcode); - LineInfo getDangerBaseData(String sectionCode, String businessId); + List getDangerBaseData(String sectionCode,String crossingCode, String businessId); } \ No newline at end of file diff --git a/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/service/impl/ConfigServiceImpl.java b/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/service/impl/ConfigServiceImpl.java index ab9e52e..0d67e86 100644 --- a/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/service/impl/ConfigServiceImpl.java +++ b/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/service/impl/ConfigServiceImpl.java @@ -37,10 +37,8 @@ public List getStreetCommunityByXq(String xqcode) { } @Override - public LineInfo getDangerBaseData(String sectionCode,String businessId) { + public List getDangerBaseData(String sectionCode,String crossingCode, String businessId) { - return configMapper.getDangerBaseData(sectionCode,businessId); + return configMapper.getDangerBaseData(sectionCode,crossingCode,businessId); } - - } diff --git a/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/service/impl/HighDangerBaseServiceImpl.java b/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/service/impl/HighDangerBaseServiceImpl.java index b1862b2..3d566a0 100644 --- a/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/service/impl/HighDangerBaseServiceImpl.java +++ b/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/service/impl/HighDangerBaseServiceImpl.java @@ -3,6 +3,7 @@ package com.hisense.hiatmp.server_api.service.impl; import com.hisense.hiatmp.model.common.EnumRoadType; import com.hisense.hiatmp.model.common.HighDangerBase; import com.hisense.hiatmp.model.common.HighDangerRoad; +import com.hisense.hiatmp.model.common.VO.SectionVO; import com.hisense.hiatmp.server_api.mapper.HighDangerMapper; import com.hisense.hiatmp.server_api.service.HighDangerService; import com.hisense.hiatmp.model.common.ThtDangerItems; @@ -360,6 +361,14 @@ public class HighDangerBaseServiceImpl implements HighDangerService { return highDangerMapper.getEnumValues(enumType); } + /* + 根据路口id查找上下游路段 + */ + @Override + public List getSectionByCrossing(String crossingCode) { + return highDangerMapper.getSectionByCrossing(crossingCode); + } + public String random12(){ Random random = new Random(); StringBuilder sb = new StringBuilder(); diff --git a/hiatmp-hidden-danger-server/src/main/resources/application.yml b/hiatmp-hidden-danger-server/src/main/resources/application.yml index 7eb55e4..a17c582 100644 --- a/hiatmp-hidden-danger-server/src/main/resources/application.yml +++ b/hiatmp-hidden-danger-server/src/main/resources/application.yml @@ -11,10 +11,18 @@ spring: multipart: max-file-size: 100MB max-request-size: 200MB -# cloud: -# nacos: -# discovery: -# server-addr: 10.16.3.178:8848 + cloud: + nacos: + discovery: + server-addr: 49.235.207.167:8848 #质量部131服务器Nacos服务注册中心地址 + namespace: d0216010-7812-4765-a97c-fb0b4cf5cba6 + config: + server-addr: 49.235.207.167:8848 #Nacos作为配置中心地址 + file-extension: yaml #指定yaml格式的配置 + group: DEFAULT_GROUP + namespace: d0216010-7812-4765-a97c-fb0b4cf5cba6 + bootstrap: + enabled: true #server-addr: localhost:8848 #6.1管控平台数据库地址、账号、密码,根据项目现场进行修改 datasource: diff --git a/hiatmp-hidden-danger-server/src/main/resources/sql-mapper/ConfigMapper.xml b/hiatmp-hidden-danger-server/src/main/resources/sql-mapper/ConfigMapper.xml index 7caed7a..98ff72d 100644 --- a/hiatmp-hidden-danger-server/src/main/resources/sql-mapper/ConfigMapper.xml +++ b/hiatmp-hidden-danger-server/src/main/resources/sql-mapper/ConfigMapper.xml @@ -31,8 +31,22 @@ \ No newline at end of file diff --git a/hiatmp-hidden-danger-server/src/main/resources/sql-mapper/HighDangerMapper.xml b/hiatmp-hidden-danger-server/src/main/resources/sql-mapper/HighDangerMapper.xml index c75e4a0..cfb9c3d 100644 --- a/hiatmp-hidden-danger-server/src/main/resources/sql-mapper/HighDangerMapper.xml +++ b/hiatmp-hidden-danger-server/src/main/resources/sql-mapper/HighDangerMapper.xml @@ -336,8 +336,8 @@ WHERE hdb.name like #{search} - SELECT section_code, section_name, @@ -379,6 +379,17 @@ + + - select * from bis_section where section_code = #{sectionCode} diff --git a/hiatmp-model/src/main/java/com/hisense/hiatmp/model/common/DTO/HiddenDangerVO.java b/hiatmp-model/src/main/java/com/hisense/hiatmp/model/common/DTO/HiddenDangerVO.java new file mode 100644 index 0000000..4719b2e --- /dev/null +++ b/hiatmp-model/src/main/java/com/hisense/hiatmp/model/common/DTO/HiddenDangerVO.java @@ -0,0 +1,15 @@ +package com.hisense.hiatmp.model.common.DTO; + +import lombok.Data; + +@Data +public class HiddenDangerVO { + + String name; + // 道路/路口ID + String sectionCode; + // 道路/路口标识 1 道路 2 路口 + String ifCross; + + +} diff --git a/hiatmp-model/src/main/java/com/hisense/hiatmp/model/common/SectionVO.java b/hiatmp-model/src/main/java/com/hisense/hiatmp/model/common/DTO/SectionDTO.java similarity index 83% rename from hiatmp-model/src/main/java/com/hisense/hiatmp/model/common/SectionVO.java rename to hiatmp-model/src/main/java/com/hisense/hiatmp/model/common/DTO/SectionDTO.java index f71ec18..bfc4143 100644 --- a/hiatmp-model/src/main/java/com/hisense/hiatmp/model/common/SectionVO.java +++ b/hiatmp-model/src/main/java/com/hisense/hiatmp/model/common/DTO/SectionDTO.java @@ -1,11 +1,11 @@ -package com.hisense.hiatmp.model.common; +package com.hisense.hiatmp.model.common.DTO; import lombok.Data; import java.io.Serializable; @Data -public class SectionVO implements Serializable { +public class SectionDTO implements Serializable { private static final long serialVersionUID = 1L; diff --git a/hiatmp-model/src/main/java/com/hisense/hiatmp/model/common/ManualInvestigation.java b/hiatmp-model/src/main/java/com/hisense/hiatmp/model/common/ManualInvestigation.java index 3948adb..0b560ea 100644 --- a/hiatmp-model/src/main/java/com/hisense/hiatmp/model/common/ManualInvestigation.java +++ b/hiatmp-model/src/main/java/com/hisense/hiatmp/model/common/ManualInvestigation.java @@ -1,5 +1,6 @@ package com.hisense.hiatmp.model.common; +import com.hisense.hiatmp.model.common.VO.BasicInfoVO; import lombok.Data; import java.io.Serializable; @@ -16,23 +17,25 @@ public class ManualInvestigation implements Serializable { // 用户 String operator; - - // 第一页,基本信息 String businessId; - // 轄區code - String xqcode; - // 街道code - String jdcode; - - String roadType; - String roadWidth; - String laneCount; - String roadStructure; - String sideProtec; - String centerSeparate; - String designSpeed; - String limitSpeed; + // 第一页,基本信息 + List basicInfo; + private String sectionCode; + // 隐患名称 + private String name; + private String xqcode; + private String jdcode; +// String xqcode; +// String jdcode; +// String roadType; +// String roadWidth; +// String laneCount; +// String roadStructure; +// String sideProtec; +// String centerSeparate; +// String designSpeed; +// String limitSpeed; // 第二页,统计信息 String passingTrend; @@ -52,7 +55,7 @@ public class ManualInvestigation implements Serializable { String pcCount; List describe; - // 暂存标识 0暂存 1提交 - Boolean temporary; + // 暂存标识 0暂存 1提交 2 新增 + Integer temporary; } diff --git a/hiatmp-model/src/main/java/com/hisense/hiatmp/model/common/ThtSectionInfoDTO.java b/hiatmp-model/src/main/java/com/hisense/hiatmp/model/common/ThtSectionInfoDTO.java index 65d97b5..5dac996 100644 --- a/hiatmp-model/src/main/java/com/hisense/hiatmp/model/common/ThtSectionInfoDTO.java +++ b/hiatmp-model/src/main/java/com/hisense/hiatmp/model/common/ThtSectionInfoDTO.java @@ -27,6 +27,8 @@ public class ThtSectionInfoDTO implements Serializable { */ private String businessId; + private String sectionCode; + /** * ROAD_TYPE */ diff --git a/hiatmp-model/src/main/java/com/hisense/hiatmp/model/common/VO/BasicInfoVO.java b/hiatmp-model/src/main/java/com/hisense/hiatmp/model/common/VO/BasicInfoVO.java new file mode 100644 index 0000000..ba34855 --- /dev/null +++ b/hiatmp-model/src/main/java/com/hisense/hiatmp/model/common/VO/BasicInfoVO.java @@ -0,0 +1,22 @@ +package com.hisense.hiatmp.model.common.VO; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class BasicInfoVO implements Serializable { + + private static final long serialVersionUID = 1L; + + private String businessId; + private String sectionCode; + private String roadType; + private String roadWidth; + private String laneCount; + private String roadStructure; + private String sideProtec; + private String centerSeparate; + private String designSpeed; + private String limitSpeed; +} diff --git a/hiatmp-model/src/main/java/com/hisense/hiatmp/model/common/VO/CrossingVO.java b/hiatmp-model/src/main/java/com/hisense/hiatmp/model/common/VO/CrossingVO.java new file mode 100644 index 0000000..8113bc3 --- /dev/null +++ b/hiatmp-model/src/main/java/com/hisense/hiatmp/model/common/VO/CrossingVO.java @@ -0,0 +1,9 @@ +package com.hisense.hiatmp.model.common.VO; + +public class CrossingVO { + + String crossingCode; + String crossingName; + + +} diff --git a/hiatmp-model/src/main/java/com/hisense/hiatmp/model/common/VO/SectionVO.java b/hiatmp-model/src/main/java/com/hisense/hiatmp/model/common/VO/SectionVO.java new file mode 100644 index 0000000..143f900 --- /dev/null +++ b/hiatmp-model/src/main/java/com/hisense/hiatmp/model/common/VO/SectionVO.java @@ -0,0 +1,20 @@ +package com.hisense.hiatmp.model.common.VO; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class SectionVO implements Serializable { + + private static final long serialVersionUID = 1L; + + private String sectionCode; +// private String roadCode; + private String sectionName; + private Float width; + private Float length; + private String sectionType; + private String laneNum; + private String speed; +} \ No newline at end of file diff --git a/hiatmp-model/src/main/java/com/hisense/hiatmp/model/dmr/LineInfo.java b/hiatmp-model/src/main/java/com/hisense/hiatmp/model/dmr/LineInfo.java index b7db5b6..ee269b8 100644 --- a/hiatmp-model/src/main/java/com/hisense/hiatmp/model/dmr/LineInfo.java +++ b/hiatmp-model/src/main/java/com/hisense/hiatmp/model/dmr/LineInfo.java @@ -4,6 +4,11 @@ import java.util.List; @Data public class LineInfo { + // 道路名称 + private String sectionName; + // 道路id + private String sectionCode; + // private String lineId; // 道路类型 private String sectionType; diff --git a/hiatmp-model/target/classes/com/hisense/hiatmp/model/common/Operator.class b/hiatmp-model/target/classes/com/hisense/hiatmp/model/common/Operator.class index 153c3f7ff38e2032e1e79e2e808ba3b7bf42cf47..f694723414b8c7d1b9a675729471b78cc3787fb3 100644 GIT binary patch literal 5793 zcmcIoTXY*&6+PFMG$UzbNn^?Oq)Bk73w~DgK_BC!v~`o>5GN*S0|}ILY)@jP@<^5B zG_*j0mNpHKrn~|L%DdqaXj&R~@m%mhS&Q#}!4LfL$2SW~*yr9EX{1aV{jgSY?!Ncz zbLP&u=bSt8pa1)--x1NxbTLH}bUH}}eU`=NSbUzv7g#*Y;tY%DSbUMimsosRqpzee zewD>p_VG1FUuW?=i*K;_CW~*ec!9;YS$v1ZciG~58ht-So9MJoKj86)I=!gVIh}r_ z(~oufiB3P&>AX%q)9L3ry~LCY8ojL1D}r(jw_bKC2iu&t1rQdqHE}UHwq*U7lBMI!!#VA!ugLa&@hA)M+%``pLCQ>A17}P^0RVoEE9H z8}s>NUbXJx5q;&FAY*yOZ7kQzHFhE>UR$ktcw`34HK*QObMZJlSFcqom@J63|dD`m&tS=-)wC&Ax47K6Pf+=thl z3O3WR?|nkQxgGJgFu!w*6xq%*+_-KGZ1^V}67NSP_mxa;*Kzxv)~bmNpi= zgWjyFeuqLnP+hMtySvKV9x_3NU(b!vpdECFLGPj)47!oUO)PF}7G1J}PLqyM^Dq zUaqWg^5=t>8TSidhe5xfS5Xzyqpg7N5R~?(2svi)>CtixV-~BSuwzA^9+iOy%t>WC z^jLzIAo!S>9RvHvVngh5Xek|NjMzbaor1-VqNmJY~^t^BC!-3g~wb3NPx zGf{2qvd-qmVV1VxlAR#*cS_^hoT6#q8C>{%bUps#bS1_C%MoV`{msA$jPI6fIC44S z)a8hSmm|(zjyQffA_L@zB*19F9ti~b9?VJ@1;+T~Yb0Klv^ydBAw)Xe1!*V(-A!|t z2~G>hPUBap?*f#4bSI=THX@CYNfE~V-Nplv#>l`3<5;(`8EK5njWCXP8y6ytk?|46 ziEiVeNMlq=gt69bJQ8V)3X3q-yNx$R8ly5JjFa8Qn|J894@ha87M&&F-9vu8r8*Ca)ESujxNzrpd_88f6+0Z6m8I7XcZ_;zo9p%3}nz> z=^`Bm%Fy5GC3*;G0G|S9r~;G~2|7({Ksj+8bRJM%OyLPtAXDtdhhhzAP%Pr@9tJ9i zDn4}TKt-`m*H8m!h?;o+leA6K|3d>Bt-nb_8lAvDUA##n3MT(=Ft`^UK(WO5Lsu0G zzL@bB0KPJ~O8A7rA2aHN)J+o)P6#nSg7;~a-w|1U`258ZF0UAuUk2r8=4Q9YcE}>z zoSR)miRrnibEM5|ko6$1=j<3OteCISx$u-KZ^xwyH7AX9D;}s!J0VqxmI{@qtOjjO zs!)W!l@_Q9wk}nAONG)@Rz*80Rj5keDjBGT?37fcS}N44vKqG2QiU@0tB0sbABkL$A>_=H?CB!i@rhxm97@Qd`WoDV%3KsxU65E#@|b2N}OzVcbPq u%xe`cG9FVH*UuL7I)#TBzeC{>#_xpKpz-d{^Y9PAQ+{0vIwhOqGyenkeHW7e literal 5330 zcmb_fTaz1C5$>bgjHJgGutDWqQEsYdO zn*?JnArK&3l5lef5bicmt|C;CO>r%FAXM?hL!RITegH2NRTNbO^Yu9+X(W%6eW1$j z^PTRmTW9)o_sstBzrXkm5$&TNW#~qFEKOPZIE%+we1gR%Sv;0N1+W{+1J^~!@zyW_SVt=B4Noa)(j!>>3!Qso%-^J{*i z<>Dt|UQ>`!U3J^lme=GUf|AYkhL4}jLEUs(ow|#k!|&?NM$N0b3=1KXI$vtP=X;$y z1jQ#NmjxvbHC7R#aNP6V6C3pvw{^FJv+{#Bs>qOoJYgRw6Pf&IPBz_^(`mGD^30msInhmDd15jufd)8-`Z>&Yw=#`M?B?>@AJ|eD(8YCgfzK6MLupm#E=S261ZMK^g9zjNId-OB^bptq52&@AmWsKVkV7B{ol z$KniK{{m*|Hm@|iuoC= zLk>FsjAAdq7^A+k5$TMAiExe&JLe;vQD_m)iD73m(isIB;hY?HE=M|}up^vP!_H%o z&S;1TXKmPdd!#cODZ*JFcHR-`j0TKwP7gcpigZTfMmT4Nop(n%AES4n8n{SotTC*q zsp%If7F}XviV>6;mmk-?pyTjMqNAvY%|dj@_*O%53-v-)WXKcIAro5-sk$*Z@;Dt%l@g?w#^x8FDc?WNND+c`o!q?vo+k9UW5JYDgY2y^y!akf)+U>RS!T)2bKp zRvB_BI%ImQA$joiLf$4r-W?q>v(=D1Lwg}_mm%>YRHYvK6V_3T$g|T^7b%&zJpDV$ zK1a#;<>}v2c41~}lMJ~9$eoyhuoJU?psba6nM#+)n6(m{lzC^nj#UdWclA(;$`XjFo0mCLpD)Oo(LKS&&TIu(C`t0uoS& zG-BsK8nN?Mj!F4|l(X_7QrRwmRJMy&fl0-HRIrL6(x_bmY1B5Y5|hk;RIq!Fv!B_%FnLc~LF9ren3MO{O8o`|z_FWrZG8x_lR8n3Y!jfxQ>3u*cs?imCKafT(`Zs+5NT+A$&-4ILnl8{Q)_{uQ27EHD1C_)yUalUHDURX0 z;0(}+SfrisxsS>?3sIeRYx;jEuTlL~8q>(fKV7^^+Z9aze_?k3--|*|@VB2TbbLSH z?^vGAT;Y5L;TONU0yWZ;-77#+Pvaqat#ewo4n7N^!doK#EJ7Fv^snOF{=@;u3+XIDLt<*-hH^0P72Of(=$8u;|=0%2c$I(u97IPP&!sno4#`no>Ozx=4AMwkAzz zpukJ(nnrA0n)IFtZKb@*c3PUyQGr*wYZ|pP(v<0$&}YhP%+5*^S}gF&O4F|BGCrqL z667#W|3neCk+3BFgE~Ml6yD!y19^?p^(e)Mff8Wepgl%c=k^YFt!SuVC%oXjgwBv5QZpuk9oEBLAYKE{esN_Gid zPGV3M&{820|!`juON% diff --git a/hiatmp-model/target/classes/com/hisense/hiatmp/model/dmr/LineInfo.class b/hiatmp-model/target/classes/com/hisense/hiatmp/model/dmr/LineInfo.class index 658d8016120a0675bd15f44e1e235e408aeb4b55..fae476e1342dc32f96cf82c0eaa4127e95a5a80d 100644 GIT binary patch literal 8454 zcmd5=d3;<|6+U+|%bS@uYqP!VDXD3jwgJS2*M+4N2qvWxc3hYyLo#JD6OsvwA}H<) zB7z{OxKo!Zix65s7A>H-D~f_3DDDa_fB6%{@7#Oedo$D5GVw2ezx>Yq?mgf6?tAy1 zd+wV&{GU7TA)>?RpD{X|c1I~gd)VB`<}NmOv-vukd)VB|<~}y}v-t*_Z?f6T<^eVj zvUw;%--@CAHk*f8{5y=k%jSD*zR%_dY<|e*M{It~<|k|(Ve?ZqKV$PKo1e4!1xq~^ zp~qu1K)Vh4CAUu)^rS(*GUzFTo;K*$2K~mMXAJtSLBBKT_XhpJpg$V)CxiaX^uHMN zS8kt;&~t*~^ZAKNp5xj_$~vpBpabN>jt*mAOJ`YQ0C%xqn&;^Cb$~4;f*?b-$;bOit#RDd@x0UA$Jhh-GcgG-K)Iv%# zeBpT$YR(;#3OG+YT9~g0N~@<`s1%CBJc4J9ju)m%xyr&E9%)0Jd&B5Nd1iRJFrP2Y z=h5aWGqb}pJnQh}%-ry}T8NR-Ipy`6AQj$FC>1K31U0Q(b*iACdi~TWzvsft_Waz* zx$Q-{X61=o@zmU0f%|$eSiwAk1`j+XYsvWpC8zQg{RCXlN8C>FaCFkoFuw~`G>&F|J9?Msz%ahx3b4dA0eh%AI6{{B&V(y}P!g^7) zQ!gs_+(kvlSyT?wi^>#dQ5n}Hzo|!@Mb%xssOY(i3hXW_uud1XsLS-*dTYw>+B#a3 zn>eXDKaZ%VFKM+|I-EamAy>rW)vWW0+jrm?tzUJfAW^QZC)$N-P_9hp=dclcMh0r? zPe!_G$7*P5dunNFEH2fGe4=m?OeN%WYc$l#)@rD+gsY+UHtDIT0aFp2?M`UF(~n8F zE_!k0)IH_Wbx^yUo)UFRqt?{jjQdF5G0b|8I->#5hRdObCu*3hZC zdJUbfaype*JDqOL0;`OyU0^kq7_a0e&K=9m$~43!DeoX-B3IhN*@WspotvLl8;Y_! zf@Ilt(#Y5rWD{_BEN#R(GnP*m!wiZX$ndfiI8**8{!=*74=QEZN8vzg5?Y__mDmd$Z&j%PDMCkR?`z-!N$+@w#@ zn@u{IPBH0Cj80{A8k^JEoWbTyHfOPU9h=v)c>|j_vN@Ygj?H#96Etbkr|C0-+Umb5 zj$SAfC%Fc+IMc7JsskHM`WyWnWqD1X9_5YQh}(TlpW0er&&eBrfw*$=_M#U{eGbyF1J+yV-4ddU_U zCR-$#Y>{WOMXJdb*(O^goNSSEvPIg-7MUkoB%f@Nf3igi$`)Bjf?gx>C>;ch6o)+# zBg1F~+R*AdNZcYR+hD_LkX{RHYJ3unqbE2;VQYhLqrlB|!G>=zvf3xOsXjR78;sN7 z6CA7$HhqI}ihP1Y^}$KsV4Oam;Bb9#+BX=d)+abpADs0K#%cEnHtK_$eS=XYe1fC( z!L7c*s4hOivHIY4-(XZFpWt|XaEEU&s+mu)Ss&c#8;mOG6P&0I?(z*r_4El&)(7|a z2BYfw1gGkQdwqjZtx*!{PgS};xZfvOo$Ng3K8L2Xh>bSD2YL0-?G*4o*sY2|>R|Js z=gK5#8gU_kP8ywpzhqORl3e6m$qiC+hreX7QAw_suH;53d9J@?s8LBSy{_aYDOvQF z3^yvtRos<4LQ2l~OGX-%CHZb~C6AJlWq-+Nqmq10xspdq$ytBN zSfi4B+l6()ll3S$YyuW0kQAxhiUCCpmWW`@H z*{CFc9k`OmNy!C&$yB3~{Gs7W9xo-&rwgb_mb207N|a{FCfdf82_dL6vYzc*iPSgC zg=wStS(>@ZsF5GXBn*a|Tx{2*m_Qo;&Z;VM$A z9RaD;HmnGf3{8qyMir^ej)K%?$E+xmVwx1SVpXJeI}TF2ZCY_AnVJMtMY8M!NS2+n z5==^JQo>4Bkvi-YNF8?CN--&|NhvE`Me4LOAa&YVE5oF$CS|N_6{*W!22z*ZY%OC_ zvnDOGnyX0Nb_+<|cB|FGq*hI8v0AH0J$4&NJ$Ad*#-w&lYO~s_NWHcNQm@@%SxoBC zB+KfkBK6swAobZ@Rwt9XG^x|-sv`B<-5~YbJyti9dNirq>Zu|vw|hZaZueQeOzP95 zUaQX`1$X)7s~A;D=G>ft5xSV(f<$Zy97dPmGdVy5ffaNq#+qn#pqJhX6r|$<0eTxy zh{nY8bQw^XisA`+J5Yq?#G~{MAcL+HyXl=kQMy*#O78-S(W1DD-VGF|yT#@79w3t* z7bSWxP=cNo)AT-|B>zyS_XDLwSZt;b0HwtWF+i6CWyFx^p$`IO#R>ExT>-RAY@>hC zhk%+znI5Anfm*}@JwhJ_Y86-Gm(x{1ZQ^>miLM4}7kj|}2#_W2#jMu=b%-bFT)Gyh zQ#?a?`Y2FWpb0;RuLJ51MDervdZ3=bO03++fO-S#sFOYp)JLDd8s9_*M~vqw8KE0q zpwa@dOa+8dn}pp1^*JUC2ouq{Agx2Dg4* zBI_r9w_^w;E&LcHviRL~U3&e7;6_=vy3*^XQMQcq&`yf1U8IA~=J6Ig$PO#0Jq8yu zxw9YDN75I8!c-9}=u1Emx*) zs%5#z%e+GP0sdsx1?82{2wRJ%8WZ=Pd`H}O7_U+oAD4q!_?gqj zct~M#lh^M3imR8xx)B1 r9Lyf3a6jW$D7<`;UYUIr@FKms{=YWrSC0B6vsYgU0#^io9^CO?fn-%Z literal 6448 zcmcgv>317f6~9l`GLlBCEys8A+Zv>KD$j@4N5a-~GLr z`|iDO^q2p>bdHGj(jQ|qPU}%h(6?AT&f*Cc-)8Y07N=Nzm&Ny3e4oXWEPfE7r(zg? z$l^y#^kde3!s4eao@Q~H#m`v$oW(ONe!=1li(j(auOjqpjCRtxLC^8{yg|P<=r;zv zV9_OS zqs#pNO3wl%#<5VL2306Yt3?Hf>-be(fRUHwb)#%W7nw;^VG~jZDnG) z+$dEWC5*-9%Id@l?=i8sQlFSt4?kT!UYpzxs_;~~T5j$a)H5`EL{RVmkb+V({8no# z$4d3X#bXt$WM^s%#mbRlz07mH7;Iu6L6>j8C3DIB@Zd|Orko-ueM7^3;Y|XfA5up{ z`=}ttc;>{}z~n9!YF6h}wB;r`;3@6w#oW{@I_z;hReQB;u7aO+9Nw~F#M)T;<@XQSjCQfMBO^1ddPH0$fOGi_$ zIHA!~9U9E^<|;J3`oX=(@MGuO^8_`bbLFN^_*;q@Q-@3UuN5nZLtDu1ICcUlJvn@j zAW>^CS#3fc)|$(uI!c%Gb+E$uhy*m{syj_fW23dWGYZkRmT);#)RP{IS}+yBIf#U| zJM)+{>jn{5MmhDWcyk7aPl}+o1JKp{%&Egssds$q|;yM=Bv$%o9 zjbsbjvu)FMHZti`v|!S^=%7i*Si6oQ5BE;DXy-Ts;KdC zzwWxF;p*4Nb=Zb?TFV9TbQ!)m#_{D7rvRTkv;ZHz9C7|~L<-0eSs+Iwf*g?xazr}F z5g8#zB!wK27bIv>>Qi(HbR-z$O<0-0C@_Xb&XRauLT-i(t3`SzbW`iM&;iT@Ckx_E$agKF5=Y5^gCw!daoz4YcXY?1O zQfG#loz9kzv&!=KV(&X?UX$1u1Duy5qZ<_PPx8D%kV#{*>WvDY;|0l-EegqyChU zZYjC>xs-b)B7X;81#*8;Na96*+xw{i^1Yf#S0 zw}5uo1%P(g{Z@fN{TfuT`W;a4jBjqdp$^pPtYU)}sf0t%iKpl|J}Ck;C{EH6)_Q0} zJVMLRf^?gxQW;u^X2mj{fEK2Tn5O%nMW`+gPz9PnC&eJGK#S57;!>(Yi_s>Xry8_4 zy+Z${RcI#to&HAmLrc&<>916Wmc(bz1~s6iM3|nXCbYEJLtm#gXc;j|U!ez}WyS5- z^+9O8Vh-{n`0o=nd@(-+EhpAc4IhP;7whIEAmQk3;LHPar0rrNM~t1|=i( z$u}tRe=tD7+wl{HuaPRSIahsn-rmQ`j}3nw3|d9g!v!vi6ENrkrg^li`|B-pVU)N2Ljst-Yd- zsbI&XDdw6`@5-y+j!P3tU30dgJszB<<_lOas z(&rH7kQk!RLkmz$?4~c^Gy}dXgT2 zX3#TW`zo|3{Ru_)HE1#V2Y%%}3N23m!7t9opqV011r!CB4w5-=mh$JZ5JWNyfdnQY z&SQIT9^i!>g&cr`3AQh3Shxk|Av;$!IMNRG@ID6ZVr+5oy!>t2G3w{&`Cibh-D4MU z_ZYTAXp;DaNj#p5fHal4EtSW1ahxVhT#V4;>9|D)vV%&` zvA##?xHt#0?@)Sy^~;rxyK*2qq;!k*VWscbq>=0>^i3M;{FS4cu=