From b0d47bb571d917edbab032bdeebb7cf758df58dd Mon Sep 17 00:00:00 2001 From: liuguijing <123456> Date: Fri, 5 May 2023 15:31:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=AC=A3=E5=BD=B1=E7=AE=A1=E7=90=86=E5=B9=B3?= =?UTF-8?q?=E5=8F=B0=E8=A3=85=E7=BD=AE=E9=80=9A=E9=81=93=E8=A1=A8=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libs/xympj.dll | Bin 41984 -> 41984 bytes .../controller/ChannelController.java | 1 - .../controller/TerminalController.java | 20 +- .../controller/TerminalGPSController.java | 58 +++ .../entity/TerminalStatus.java | 139 +------ .../model/TerminalChannelMapperListModel.java | 2 + .../model/TerminalGpsModel.java | 29 ++ .../vo/TerminalIdAndGpsVo.java | 16 + .../resources/mappers/TerminalStatusDao.xml | 372 +++++++++--------- .../impl/TerminalChannelServiceImpl.java | 12 +- .../impl/TerminalGpsServiceImpl.java | 104 +++++ .../impl/TerminalPhotoServiceImpl.java | 2 +- .../impl/TerminalServiceImpl.java | 31 +- .../service/TerminalGpsService.java | 30 ++ .../service/TerminalService.java | 15 +- .../src/main/resources/xympj.dll | Bin 0 -> 41984 bytes 16 files changed, 502 insertions(+), 329 deletions(-) create mode 100644 xymanager_admin/src/main/java/com/shxy/xymanager_admin/controller/TerminalGPSController.java create mode 100644 xymanager_common/src/main/java/com/shxy/xymanager_common/model/TerminalGpsModel.java create mode 100644 xymanager_common/src/main/java/com/shxy/xymanager_common/vo/TerminalIdAndGpsVo.java create mode 100644 xymanager_service/src/main/java/com/shxy/xymanager_service/impl/TerminalGpsServiceImpl.java create mode 100644 xymanager_service/src/main/java/com/shxy/xymanager_service/service/TerminalGpsService.java create mode 100644 xymanager_service/src/main/resources/xympj.dll diff --git a/libs/xympj.dll b/libs/xympj.dll index 5297585f10636dcbf1e63023bd9f4d8262379dc7..d6ce162c65d2905ab05d3f7cb342d509b51e2007 100644 GIT binary patch delta 135 zcmZoT!PIbqX#)o%^A`uN&D@MuIubtJ6Fx98FgX6d7=Qq%f*}luuS@{qDv$^R15Azw$QA)&oryqP4Uz%NO%ot Fb^zUeBKH6Q diff --git a/xymanager_admin/src/main/java/com/shxy/xymanager_admin/controller/ChannelController.java b/xymanager_admin/src/main/java/com/shxy/xymanager_admin/controller/ChannelController.java index d9b9f72..835c5fd 100644 --- a/xymanager_admin/src/main/java/com/shxy/xymanager_admin/controller/ChannelController.java +++ b/xymanager_admin/src/main/java/com/shxy/xymanager_admin/controller/ChannelController.java @@ -84,7 +84,6 @@ public class ChannelController extends BaseController { } } - @ApiOperation(value = "根据装置号获取通道接口", notes = "根据装置号获取通道接口", httpMethod = "POST") @ApiResponses({@ApiResponse(code = 200, message = "请求成功"), @ApiResponse(code = 400, message = "请求参数没填好"), @ApiResponse(code = 404, message = "请求路径没有或页面跳转路径不对")}) @RequestMapping("/getChannelByTermid") diff --git a/xymanager_admin/src/main/java/com/shxy/xymanager_admin/controller/TerminalController.java b/xymanager_admin/src/main/java/com/shxy/xymanager_admin/controller/TerminalController.java index a798e72..e025574 100644 --- a/xymanager_admin/src/main/java/com/shxy/xymanager_admin/controller/TerminalController.java +++ b/xymanager_admin/src/main/java/com/shxy/xymanager_admin/controller/TerminalController.java @@ -6,10 +6,7 @@ import com.shxy.xymanager_common.base.ResponseReult; import com.shxy.xymanager_common.bean.ServiceBody; import com.shxy.xymanager_common.bean.ServiceStatus; import com.shxy.xymanager_common.model.TerminalListModel; -import com.shxy.xymanager_common.vo.PageVo; -import com.shxy.xymanager_common.vo.TerminalIdListVo; -import com.shxy.xymanager_common.vo.TerminalVo; -import com.shxy.xymanager_common.vo.UpdateTerminalVo; +import com.shxy.xymanager_common.vo.*; import com.shxy.xymanager_service.service.TerminalService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -81,4 +78,19 @@ public class TerminalController extends BaseController { } } + @ApiOperation(value = "装置复位", notes = "装置复位接口", httpMethod = "POST") + @ApiResponses({@ApiResponse(code = 200, message = "请求成功"), @ApiResponse(code = 400, message = "请求参数没填好"), @ApiResponse(code = 404, message = "请求路径没有或页面跳转路径不对")}) + @RequestMapping("/resetTerminal") + @Log(title = "装置复位", type = "修改") + public ResponseReult resetTerminal(@RequestBody @Validated TerminalIdVo vo) { + ServiceBody serviceBody = terminalService.resetTerminal(vo); + if (serviceBody.getCode() == ServiceStatus.SUCCESS) { + return ResponseReult.success(serviceBody.getData()); + } else { + return ResponseReult.error(serviceBody.getCode(), serviceBody.getMsg()); + } + } + + + } diff --git a/xymanager_admin/src/main/java/com/shxy/xymanager_admin/controller/TerminalGPSController.java b/xymanager_admin/src/main/java/com/shxy/xymanager_admin/controller/TerminalGPSController.java new file mode 100644 index 0000000..731454f --- /dev/null +++ b/xymanager_admin/src/main/java/com/shxy/xymanager_admin/controller/TerminalGPSController.java @@ -0,0 +1,58 @@ +package com.shxy.xymanager_admin.controller; + +import com.shxy.xymanager_common.annotation.Log; +import com.shxy.xymanager_common.base.BaseController; +import com.shxy.xymanager_common.base.ResponseReult; +import com.shxy.xymanager_common.bean.ServiceBody; +import com.shxy.xymanager_common.bean.ServiceStatus; +import com.shxy.xymanager_common.model.TerminalGpsModel; +import com.shxy.xymanager_common.vo.*; +import com.shxy.xymanager_service.service.TerminalGpsService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + + +@Api(value = "设备GPS接口", tags = "设备GPS接口相关") +@RestController +@Slf4j +public class TerminalGPSController extends BaseController { + + @Autowired + TerminalGpsService terminalGpsService; + + @ApiOperation(value = "开启关闭GPS", notes = "开启关闭GPS接口", httpMethod = "POST") + @ApiResponses({@ApiResponse(code = 200, message = "请求成功"), @ApiResponse(code = 400, message = "请求参数没填好"), @ApiResponse(code = 404, message = "请求路径没有或页面跳转路径不对")}) + @RequestMapping("/setTermGPS") + @Log(title = "开启关闭GPS", type = "修改") + public ResponseReult setTermGPS(@RequestBody @Validated TerminalIdAndGpsVo vo) { + ServiceBody serviceBody = terminalGpsService.setTermGPS(vo); + if (serviceBody.getCode() == ServiceStatus.SUCCESS) { + return ResponseReult.success(serviceBody.getData()); + } else { + return ResponseReult.error(serviceBody.getCode(), serviceBody.getMsg()); + } + } + + + @ApiOperation(value = "获取GPS位置", notes = "获取GPS位置接口", httpMethod = "POST") + @ApiResponses({@ApiResponse(code = 200, message = "请求成功"), @ApiResponse(code = 400, message = "请求参数没填好"), @ApiResponse(code = 404, message = "请求路径没有或页面跳转路径不对")}) + @RequestMapping("/getTermGPS") + @Log(title = "获取GPS位置", type = "修改") + public ResponseReult getTermGPS(@RequestBody @Validated TerminalIdVo vo) { + ServiceBody serviceBody = terminalGpsService.getTermGPS(vo); + if (serviceBody.getCode() == ServiceStatus.SUCCESS) { + return ResponseReult.success(serviceBody.getData()); + } else { + return ResponseReult.error(serviceBody.getCode(), serviceBody.getMsg()); + } + } + +} diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/entity/TerminalStatus.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/entity/TerminalStatus.java index 5e979aa..ad2933c 100644 --- a/xymanager_common/src/main/java/com/shxy/xymanager_common/entity/TerminalStatus.java +++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/entity/TerminalStatus.java @@ -1,12 +1,16 @@ package com.shxy.xymanager_common.entity; +import lombok.Data; + import java.io.Serializable; +import java.math.BigInteger; import java.util.Date; +@Data public class TerminalStatus implements Serializable { private Integer termId; - private Date lastHeartbeat; + private BigInteger lastHeartbeat; private Short lastFrameNo; @@ -22,6 +26,8 @@ public class TerminalStatus implements Serializable { private Integer workingTime; + private Integer gpsStatus; + private Byte connectionState; private Byte signalStrength4g; @@ -32,137 +38,10 @@ public class TerminalStatus implements Serializable { private Byte remainingRom; - private Date startTime; + private BigInteger bootTime; - private Date updateTime; + private BigInteger updateTime; private static final long serialVersionUID = 1L; - public Integer getTermId() { - return termId; - } - - public void setTermId(Integer termId) { - this.termId = termId; - } - - public Date getLastHeartbeat() { - return lastHeartbeat; - } - - public void setLastHeartbeat(Date lastHeartbeat) { - this.lastHeartbeat = lastHeartbeat; - } - - public Short getLastFrameNo() { - return lastFrameNo; - } - - public void setLastFrameNo(Short lastFrameNo) { - this.lastFrameNo = lastFrameNo; - } - - public Float getBatteryVoltage() { - return batteryVoltage; - } - - public void setBatteryVoltage(Float batteryVoltage) { - this.batteryVoltage = batteryVoltage; - } - - public Float getOpTemperature() { - return opTemperature; - } - - public void setOpTemperature(Float opTemperature) { - this.opTemperature = opTemperature; - } - - public Float getBatteryCapacity() { - return batteryCapacity; - } - - public void setBatteryCapacity(Float batteryCapacity) { - this.batteryCapacity = batteryCapacity; - } - - public Byte getFloatingCharge() { - return floatingCharge; - } - - public void setFloatingCharge(Byte floatingCharge) { - this.floatingCharge = floatingCharge; - } - - public Integer getTotalWorkingTime() { - return totalWorkingTime; - } - - public void setTotalWorkingTime(Integer totalWorkingTime) { - this.totalWorkingTime = totalWorkingTime; - } - - public Integer getWorkingTime() { - return workingTime; - } - - public void setWorkingTime(Integer workingTime) { - this.workingTime = workingTime; - } - - public Byte getConnectionState() { - return connectionState; - } - - public void setConnectionState(Byte connectionState) { - this.connectionState = connectionState; - } - - public Byte getSignalStrength4g() { - return signalStrength4g; - } - - public void setSignalStrength4g(Byte signalStrength4g) { - this.signalStrength4g = signalStrength4g; - } - - public Byte getSignalStrength2g() { - return signalStrength2g; - } - - public void setSignalStrength2g(Byte signalStrength2g) { - this.signalStrength2g = signalStrength2g; - } - - public Byte getRemainingRam() { - return remainingRam; - } - - public void setRemainingRam(Byte remainingRam) { - this.remainingRam = remainingRam; - } - - public Byte getRemainingRom() { - return remainingRom; - } - - public void setRemainingRom(Byte remainingRom) { - this.remainingRom = remainingRom; - } - - public Date getStartTime() { - return startTime; - } - - public void setStartTime(Date startTime) { - this.startTime = startTime; - } - - public Date getUpdateTime() { - return updateTime; - } - - public void setUpdateTime(Date updateTime) { - this.updateTime = updateTime; - } } \ No newline at end of file diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/model/TerminalChannelMapperListModel.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/model/TerminalChannelMapperListModel.java index 08ad800..8a72472 100644 --- a/xymanager_common/src/main/java/com/shxy/xymanager_common/model/TerminalChannelMapperListModel.java +++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/model/TerminalChannelMapperListModel.java @@ -15,6 +15,8 @@ import java.util.List; @ApiModel(value = "通道关联表和通道列表", description = "通道列表信息") public class TerminalChannelMapperListModel implements Serializable { + @ApiModelProperty(value = "gps开关", example = "0--关闭 1--开启") + private Integer gpsstatus; @ApiModelProperty(value = "通道关联表和通道列表对象", example = "[]") private List list; diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/model/TerminalGpsModel.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/model/TerminalGpsModel.java new file mode 100644 index 0000000..0f5bd1b --- /dev/null +++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/model/TerminalGpsModel.java @@ -0,0 +1,29 @@ +package com.shxy.xymanager_common.model; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * 装置GPS信息对象 + */ +@Data +@ApiModel(value = "装置GPS信息对象", description = "装置GPS信息") +public class TerminalGpsModel implements Serializable { + + @ApiModelProperty(value = "装置编号", example = "123456") + private Integer termid; + + @ApiModelProperty(value = "半径", example = "123456") + private double radius; + + @ApiModelProperty(value = "纬度", example = "123456") + private double latitude; + + @ApiModelProperty(value = "经度", example = "123456") + private double longitude; + +} diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/vo/TerminalIdAndGpsVo.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/vo/TerminalIdAndGpsVo.java new file mode 100644 index 0000000..96fc4ae --- /dev/null +++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/vo/TerminalIdAndGpsVo.java @@ -0,0 +1,16 @@ +package com.shxy.xymanager_common.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@ApiModel(value = "装置编号和开启关闭gps对象", description = "装置编号和开启关闭gps对象描述") +public class TerminalIdAndGpsVo { + + @ApiModelProperty(value = "装置编号", example = "123455") + private Integer termid; + + @ApiModelProperty(value = "开启关闭", example = "0--关闭 1--开启") + private Integer gpsstatus; +} diff --git a/xymanager_dao/src/main/resources/mappers/TerminalStatusDao.xml b/xymanager_dao/src/main/resources/mappers/TerminalStatusDao.xml index c1a3c19..5ac06f1 100644 --- a/xymanager_dao/src/main/resources/mappers/TerminalStatusDao.xml +++ b/xymanager_dao/src/main/resources/mappers/TerminalStatusDao.xml @@ -1,40 +1,41 @@ - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + term_id, last_heartbeat, last_frame_no, battery_voltage, op_temperature, battery_capacity, - floating_charge, total_working_time, working_time, connection_state, signal_strength_4g, - signal_strength_2g, remaining_ram, remaining_rom, start_time, update_time + floating_charge, total_working_time, working_time, gps_status,connection_state, signal_strength_4g, + signal_strength_2g, remaining_ram, remaining_rom, boot_time, rs_update_time - - + + delete from terminal_status where term_id = #{termId,jdbcType=INTEGER} - + insert into terminal_status (term_id, last_heartbeat, last_frame_no, battery_voltage, op_temperature, battery_capacity, floating_charge, total_working_time, working_time, @@ -48,161 +49,164 @@ #{remainingRam,jdbcType=TINYINT}, #{remainingRom,jdbcType=TINYINT}, #{startTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP}) - - insert into terminal_status - - - term_id, - - - last_heartbeat, - - - last_frame_no, - - - battery_voltage, - - - op_temperature, - - - battery_capacity, - - - floating_charge, - - - total_working_time, - - - working_time, - - - connection_state, - - - signal_strength_4g, - - - signal_strength_2g, - - - remaining_ram, - - - remaining_rom, - - - start_time, - - - update_time, - - - - - #{termId,jdbcType=INTEGER}, - - - #{lastHeartbeat,jdbcType=TIMESTAMP}, - - - #{lastFrameNo,jdbcType=SMALLINT}, - - - #{batteryVoltage,jdbcType=REAL}, - - - #{opTemperature,jdbcType=REAL}, - - - #{batteryCapacity,jdbcType=REAL}, - - - #{floatingCharge,jdbcType=TINYINT}, - - - #{totalWorkingTime,jdbcType=INTEGER}, - - - #{workingTime,jdbcType=INTEGER}, - - - #{connectionState,jdbcType=TINYINT}, - - - #{signalStrength4g,jdbcType=TINYINT}, - - - #{signalStrength2g,jdbcType=TINYINT}, - - - #{remainingRam,jdbcType=TINYINT}, - - - #{remainingRom,jdbcType=TINYINT}, - - - #{startTime,jdbcType=TIMESTAMP}, - - - #{updateTime,jdbcType=TIMESTAMP}, - - - - - update terminal_status - - - last_heartbeat = #{lastHeartbeat,jdbcType=TIMESTAMP}, - - - last_frame_no = #{lastFrameNo,jdbcType=SMALLINT}, - - - battery_voltage = #{batteryVoltage,jdbcType=REAL}, - - - op_temperature = #{opTemperature,jdbcType=REAL}, - - - battery_capacity = #{batteryCapacity,jdbcType=REAL}, - - - floating_charge = #{floatingCharge,jdbcType=TINYINT}, - - - total_working_time = #{totalWorkingTime,jdbcType=INTEGER}, - - - working_time = #{workingTime,jdbcType=INTEGER}, - - - connection_state = #{connectionState,jdbcType=TINYINT}, - - - signal_strength_4g = #{signalStrength4g,jdbcType=TINYINT}, - - - signal_strength_2g = #{signalStrength2g,jdbcType=TINYINT}, - - - remaining_ram = #{remainingRam,jdbcType=TINYINT}, - - - remaining_rom = #{remainingRom,jdbcType=TINYINT}, - - - start_time = #{startTime,jdbcType=TIMESTAMP}, - - - update_time = #{updateTime,jdbcType=TIMESTAMP}, - - - where term_id = #{termId,jdbcType=INTEGER} - - + + insert into terminal_status + + + term_id, + + + last_heartbeat, + + + last_frame_no, + + + battery_voltage, + + + op_temperature, + + + battery_capacity, + + + floating_charge, + + + total_working_time, + + + working_time, + + + connection_state, + + + signal_strength_4g, + + + signal_strength_2g, + + + remaining_ram, + + + remaining_rom, + + + start_time, + + + update_time, + + + + + #{termId,jdbcType=INTEGER}, + + + #{lastHeartbeat,jdbcType=TIMESTAMP}, + + + #{lastFrameNo,jdbcType=SMALLINT}, + + + #{batteryVoltage,jdbcType=REAL}, + + + #{opTemperature,jdbcType=REAL}, + + + #{batteryCapacity,jdbcType=REAL}, + + + #{floatingCharge,jdbcType=TINYINT}, + + + #{totalWorkingTime,jdbcType=INTEGER}, + + + #{workingTime,jdbcType=INTEGER}, + + + #{connectionState,jdbcType=TINYINT}, + + + #{signalStrength4g,jdbcType=TINYINT}, + + + #{signalStrength2g,jdbcType=TINYINT}, + + + #{remainingRam,jdbcType=TINYINT}, + + + #{remainingRom,jdbcType=TINYINT}, + + + #{startTime,jdbcType=TIMESTAMP}, + + + #{updateTime,jdbcType=TIMESTAMP}, + + + + + update terminal_status + + + last_heartbeat = #{lastHeartbeat,jdbcType=TIMESTAMP}, + + + last_frame_no = #{lastFrameNo,jdbcType=SMALLINT}, + + + battery_voltage = #{batteryVoltage,jdbcType=REAL}, + + + op_temperature = #{opTemperature,jdbcType=REAL}, + + + battery_capacity = #{batteryCapacity,jdbcType=REAL}, + + + floating_charge = #{floatingCharge,jdbcType=TINYINT}, + + + total_working_time = #{totalWorkingTime,jdbcType=INTEGER}, + + + working_time = #{workingTime,jdbcType=INTEGER}, + + + gps_status = #{gpsStatus}, + + + connection_state = #{connectionState,jdbcType=TINYINT}, + + + signal_strength_4g = #{signalStrength4g,jdbcType=TINYINT}, + + + signal_strength_2g = #{signalStrength2g,jdbcType=TINYINT}, + + + remaining_ram = #{remainingRam,jdbcType=TINYINT}, + + + remaining_rom = #{remainingRom,jdbcType=TINYINT}, + + + boot_time = #{bootTime,jdbcType=TIMESTAMP}, + + + rs_update_time = #{updateTime,jdbcType=TIMESTAMP}, + + + where term_id = #{termId,jdbcType=INTEGER} + + update terminal_status set last_heartbeat = #{lastHeartbeat,jdbcType=TIMESTAMP}, last_frame_no = #{lastFrameNo,jdbcType=SMALLINT}, diff --git a/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/TerminalChannelServiceImpl.java b/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/TerminalChannelServiceImpl.java index f5b8360..f4cc1fa 100644 --- a/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/TerminalChannelServiceImpl.java +++ b/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/TerminalChannelServiceImpl.java @@ -9,6 +9,7 @@ import com.shxy.xymanager_common.dto.DyLineAndTerminalAndChannelDto; import com.shxy.xymanager_common.dto.TermChannelAndMapperDto; import com.shxy.xymanager_common.entity.Lines; import com.shxy.xymanager_common.entity.TerminalChannels; +import com.shxy.xymanager_common.entity.TerminalStatus; import com.shxy.xymanager_common.enums.CommonStatus; import com.shxy.xymanager_common.exception.Asserts; import com.shxy.xymanager_common.model.DyLineTreeAndChannelListModel; @@ -17,6 +18,7 @@ import com.shxy.xymanager_common.model.TerminalChannelMapperListModel; import com.shxy.xymanager_common.page.PageUtils; import com.shxy.xymanager_common.vo.*; import com.shxy.xymanager_dao.dao.TerminalChannelsDao; +import com.shxy.xymanager_dao.dao.TerminalStatusDao; import com.shxy.xymanager_service.service.TerminalChannelService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -36,6 +38,9 @@ public class TerminalChannelServiceImpl implements TerminalChannelService { @Autowired TerminalChannelsDao terminalChannelsDao; + @Autowired + TerminalStatusDao terminalStatusDao; + /** * 新增通道列表 * @@ -63,7 +68,7 @@ public class TerminalChannelServiceImpl implements TerminalChannelService { @Override public ServiceBody updateChannelList(UpdateTerminalChannelVo vo) { TerminalChannels bean = new TerminalChannels(); - BeanUtil.copyProperties(vo, bean,CopyOptions.create().ignoreCase()); + BeanUtil.copyProperties(vo, bean, CopyOptions.create().ignoreCase()); int i = terminalChannelsDao.updateByPrimaryKeySelective(bean, new Date()); if (i != 0) { return Asserts.success("修改成功"); @@ -73,7 +78,6 @@ public class TerminalChannelServiceImpl implements TerminalChannelService { } /** - * * @param vo * @return */ @@ -138,6 +142,10 @@ public class TerminalChannelServiceImpl implements TerminalChannelService { List channelBeans = BeanUtil.copyToList(list, TerminalChannelMapperListModel.ChannelBean.class, CopyOptions.create().ignoreCase()); model.setList(channelBeans); } + TerminalStatus terminalStatus = terminalStatusDao.selectByPrimaryKey(vo.getTermid()); + if (!BeanUtil.isEmpty(terminalStatus)) { + model.setGpsstatus(terminalStatus.getGpsStatus()); + } return Asserts.success(model); } diff --git a/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/TerminalGpsServiceImpl.java b/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/TerminalGpsServiceImpl.java new file mode 100644 index 0000000..5fa042f --- /dev/null +++ b/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/TerminalGpsServiceImpl.java @@ -0,0 +1,104 @@ +package com.shxy.xymanager_service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.bean.copier.CopyOptions; +import cn.hutool.core.collection.CollectionUtil; +import com.github.pagehelper.PageInfo; +import com.shxy.xymanager_common.bean.ServiceBody; +import com.shxy.xymanager_common.entity.TerminalStatus; +import com.shxy.xymanager_common.entity.Terminals; +import com.shxy.xymanager_common.enums.CommonStatus; +import com.shxy.xymanager_common.exception.Asserts; +import com.shxy.xymanager_common.model.TerminalGpsModel; +import com.shxy.xymanager_common.model.TerminalListModel; +import com.shxy.xymanager_common.page.PageUtils; +import com.shxy.xymanager_common.vo.*; +import com.shxy.xymanager_dao.dao.TerminalStatusDao; +import com.shxy.xymanager_dao.dao.TerminalsDao; +import com.shxy.xymanager_service.interaction.Cma; +import com.shxy.xymanager_service.service.TerminalGpsService; +import com.shxy.xymanager_service.service.TerminalService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + + +/** + * 设备Gps服务实现层 + * + * @author 晶晶 + */ +@Slf4j +@Service +public class TerminalGpsServiceImpl implements TerminalGpsService { + + @Autowired + private TerminalStatusDao terminalStatusDao; + +// @Autowired +// private Cma cma; + + + /** + * 开启关闭Gps + * + * @param vo + * @return + */ + @Override + public ServiceBody setTermGPS(TerminalIdAndGpsVo vo) { +// Cma cma = new Cma("47.96.238.157", 6891); + boolean set = true; + Integer status; + Integer gpsstatus = vo.getGpsstatus(); + if (gpsstatus == 0) { +// set = cma.turnOnGps(vo.getTermid().toString()); + status = CommonStatus.EFFECTIVE.value(); + } else { +// set = cma.turnOffGps(vo.getTermid().toString()); + status = CommonStatus.DELETE.value(); + } + if (set) { + TerminalStatus record = new TerminalStatus(); + record.setTermId(vo.getTermid()); + record.setGpsStatus(status); + int i = terminalStatusDao.updateByPrimaryKeySelective(record); + if (i != 0) { + return Asserts.success("操作成功"); + } else { + return Asserts.error("操作成功,数据库修改失败"); + } + } else { + return Asserts.error("操作失败"); + } + } + + /** + * 获取GPS位置 + * @param vo + * @return + */ + @Override + public ServiceBody getTermGPS(TerminalIdVo vo) { + TerminalGpsModel model = new TerminalGpsModel(); +// Cma cma = new Cma("47.96.238.157", 6891); +// boolean b = cma.requestGpsInfo(vo.getTermid().toString()); + model.setLatitude(300); + model.setLongitude(200); + model.setTermid(vo.getTermid()); + model.setRadius(10); + boolean b = true; + if (b) { + return Asserts.success(model); + } else { + return Asserts.error("操作失败"); + } + + } + +} + diff --git a/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/TerminalPhotoServiceImpl.java b/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/TerminalPhotoServiceImpl.java index 4c11323..dea93c0 100644 --- a/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/TerminalPhotoServiceImpl.java +++ b/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/TerminalPhotoServiceImpl.java @@ -56,7 +56,7 @@ public class TerminalPhotoServiceImpl implements TerminalPhotoService { photoBean.setFileSize(item.getFileSize()); photoBean.setHeight(item.getHeight()); photoBean.setManualRequest(item.getManualRequest()); - photoBean.setPath("http://47.96.238.157/image/"+item.getPath()); + photoBean.setPath("http://47.96.238.157/photos/"+item.getPath()); photoBean.setId(item.getId()); photoBean.setTermId(item.getTermId()); photoBean.setWidth(item.getWidth()); diff --git a/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/TerminalServiceImpl.java b/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/TerminalServiceImpl.java index fcfe9c2..9626809 100644 --- a/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/TerminalServiceImpl.java +++ b/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/TerminalServiceImpl.java @@ -5,19 +5,21 @@ import cn.hutool.core.bean.copier.CopyOptions; import cn.hutool.core.collection.CollectionUtil; import com.github.pagehelper.PageInfo; import com.shxy.xymanager_common.bean.ServiceBody; +import com.shxy.xymanager_common.entity.TerminalStatus; import com.shxy.xymanager_common.entity.Terminals; import com.shxy.xymanager_common.enums.CommonStatus; import com.shxy.xymanager_common.exception.Asserts; import com.shxy.xymanager_common.model.TerminalListModel; import com.shxy.xymanager_common.page.PageUtils; import com.shxy.xymanager_common.vo.*; +import com.shxy.xymanager_dao.dao.TerminalStatusDao; import com.shxy.xymanager_dao.dao.TerminalsDao; +import com.shxy.xymanager_service.interaction.Cma; import com.shxy.xymanager_service.service.TerminalService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import javax.validation.constraints.NotEmpty; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -35,6 +37,12 @@ public class TerminalServiceImpl implements TerminalService { @Autowired private TerminalsDao terminalsDao; + @Autowired + private TerminalStatusDao terminalStatusDao; + +// @Autowired +// private Cma cma; + /** * 获取所有设备列表 * @@ -118,7 +126,6 @@ public class TerminalServiceImpl implements TerminalService { terminals.setId(item.getTermid()); list.add(terminals); } - // List list = BeanUtil.copyToList(vo.getList(), Terminals.class); int i = terminalsDao.deleteById(list, CommonStatus.DELETE.value(), new Date()); if (i != 0) { @@ -128,5 +135,25 @@ public class TerminalServiceImpl implements TerminalService { } } + + /** + * 装置复位 + * + * @param vo + * @return + */ + @Override + public ServiceBody resetTerminal(TerminalIdVo vo) { + Cma cma = new Cma("47.96.238.157", 6891); + + boolean reset = cma.reset(vo.getTermid().toString(), (short) 0x01); + if (reset) { + return Asserts.success("删除成功"); + } else { + return Asserts.error("装置复位成功"); + } + } + + } diff --git a/xymanager_service/src/main/java/com/shxy/xymanager_service/service/TerminalGpsService.java b/xymanager_service/src/main/java/com/shxy/xymanager_service/service/TerminalGpsService.java new file mode 100644 index 0000000..dfcfa9d --- /dev/null +++ b/xymanager_service/src/main/java/com/shxy/xymanager_service/service/TerminalGpsService.java @@ -0,0 +1,30 @@ +package com.shxy.xymanager_service.service; + +import com.shxy.xymanager_common.bean.ServiceBody; +import com.shxy.xymanager_common.model.TerminalGpsModel; +import com.shxy.xymanager_common.model.TerminalListModel; +import com.shxy.xymanager_common.vo.*; + +/** + * 设备Gps接口 + * + * @author 晶晶 + */ +public interface TerminalGpsService { + + /** + * + * 开启关闭GPS + * @param vo + * @return + */ + ServiceBody setTermGPS(TerminalIdAndGpsVo vo); + + /** + * 获取GPS + * @param vo + * @return + */ + ServiceBody getTermGPS(TerminalIdVo vo); + +} diff --git a/xymanager_service/src/main/java/com/shxy/xymanager_service/service/TerminalService.java b/xymanager_service/src/main/java/com/shxy/xymanager_service/service/TerminalService.java index 26af30c..6f49c30 100644 --- a/xymanager_service/src/main/java/com/shxy/xymanager_service/service/TerminalService.java +++ b/xymanager_service/src/main/java/com/shxy/xymanager_service/service/TerminalService.java @@ -2,10 +2,7 @@ package com.shxy.xymanager_service.service; import com.shxy.xymanager_common.bean.ServiceBody; import com.shxy.xymanager_common.model.TerminalListModel; -import com.shxy.xymanager_common.vo.PageVo; -import com.shxy.xymanager_common.vo.TerminalIdListVo; -import com.shxy.xymanager_common.vo.TerminalVo; -import com.shxy.xymanager_common.vo.UpdateTerminalVo; +import com.shxy.xymanager_common.vo.*; /** * 设备接口 @@ -36,11 +33,19 @@ public interface TerminalService { ServiceBody updateTerminal(UpdateTerminalVo vo); /** - * * 删除设备 + * * @param vo * @return */ ServiceBody deleteTerminal(TerminalIdListVo vo); + /** + * 装置复位 + * + * @param vo + * @return + */ + ServiceBody resetTerminal(TerminalIdVo vo); + } diff --git a/xymanager_service/src/main/resources/xympj.dll b/xymanager_service/src/main/resources/xympj.dll new file mode 100644 index 0000000000000000000000000000000000000000..5297585f10636dcbf1e63023bd9f4d8262379dc7 GIT binary patch literal 41984 zcmeIb3w%@M{Xc%vHf_0-1Z=V88YD;&!O|jvfFv}br3S;=bV$KH>hm;zy811 zZ>O)5&vX4em(S(-e4g{1)3m#*xloSd!f^Zj9M=d)mx29W;YY=B!^ZC!#=SA4gX3DMavR58BIx6|8Z`yv ztDPlrWdg^QDQSJccI0!cqjF{?$7Q0w{aw=?wh9L_>u46J%QSX*90;*X$8p)y?Rhzl z9FBW&8j>n;Pse>9?x4#6_L(jf<02!GQIDJ2-i|xyGGHjv%cO#Aj6P)2gg%Qq=rRyK zd$~OqX>3j~Hw<45V9;e?H7T8ho#G_Ek-iLzyUi%HLa=lA=0&vSaBF)yg! z`Z++-0p4TM7Z^3WF5ng|!q*nzf_d{nXGEf}<3kio@=*aR{bbTlw%epP7&N=Sl9d0~~_+8nAfxYyz?4>4^1(lM78HtT)BX7L(Syl|MG+L~XD z_6+`oZj&kmA&vr}l%%3iSen-m%Dc|1oTqq!TAsQeZ71-aRr>g5lU|pdDx63a-W3bL zGn!qOcp+V%%};%g7xwd;z9yltkKtYWCiB9|OQ_1be3y9FrSa<`{4vdCm>qOMoNomW zYIe2of<<4zCmj)wETw6Yr^j`m%$Q}oH|ySe_S0O_6`0RWpH|ZhVoD9ll(tcVpf3EG zJf)lUZlt6Nr!2zfywE}Y=6T^QeLGUq1fw>s%I7qt3U|cvuCKNB8+re}RAG?PbtLYa zY!Qr?Qm3}^UL))JdQGa(DtgdG&}AyLg+J!oQa0P`wS3i=&YJ_s&U8n1xDRCOUiZiR zj%xQJE@KAzDWjhX&t`okdhFh;-wcqC5nELe#=XN4Nt@e}rb)raEFi@fU*%Ho9u7NMCJPEdhd@#8EItzolXB%El*0lWz}Bf^7~7^g8B z=cWpOzrYg^2F&rxER* z(=!@wIzY5lNbiq%xI z*hq;yI<)m3g71onSS5I`Itf~w_k{D_C5gP}u}l?>vf;ejs6!OQM zqFf625ODeZnji1C2;qBZQ9}=neywH~+NAjsXubrRFV_KURzS9xd@aZP>UaSXKZvh7 z=(v>^mTUQ`#{z^Vksxjk7K_nDXuCzyQ=z;kITE)P$aO3COZ_6$>>^reiB_>hNL`XI z74zePI{KRT7$bS%0sv&`xMs7L`rQa^N!KI%+&0Y?mL#i|nY?%LWWL2mx%}Kiyk=3W z`15pqD+VsKgeMG%asd1ZJ<4D$RzsbCHzy@Hwa z@4M^-PM`^#K^^NuO5|z$;aX}6lSXTf7Y+Mk?t~!`Xjuxd_7g}xbfgv~QTWMXnwOKr zzJ_2?c;s$MKP=t}T>??4F9Yy|^4{Aa3IY>_WF`uv(Om};R)SLu%LD6~&LZ3&n<{i- zxx!e}<~FaN3gJt2eaDo|9Nu$3rt_$HJ!@otbJ%UPGU_C$Ub&y&OO(R}(q7bT>6EyX zcOBI5bC0ec&(ux}f9w-}>ORZd&h^6?V<_lSy>As)6HX7N1VYDp+BJ56%RsY_;tVv4;XEdU1 zN;+iA7*=WvXdXBqN7No^eK;z8>Ye zd`#F;$-_o?1%aPR9AcoBT3j?obRnqBQ?rYZFnJ*j`t+IrA9VFU$(1dziG_~UNZ!wc^(oE)i-jt?~1|Br(uJ(9g zAylBOrcVhA<2BeVL7u|W=5HKm0o2fR_quor3TgVxJ z9zBEUqqZocCfk%$y!u#Mq#labA#x$a=+_Rh%*8yY`teGgeRDOr!>31CN!1Z(ZtDU3~t5= z67Mq>2u9gEmvu9#mwteJbuIGD+%c|zzR+Q9Ps_cKbdVN&;RAon*LgG;EUVrnqta+q z{ewmuns4%~!;@xe$ywBnpfcoB!7_~dPvi733~iE&lL^bIAeQ%(>3GjJeGRp#DOEoMP4vH-M+`O1hHB2(cpZ|VFozTn;H$;O zm;C-}3ruY)pXxPEPxYowOZDDyW19DlscGK3Zboh1aFJn#NmT0kirp-#8u)Ni{WsK7dAmPwFcHEuM6Jg$4SxjF_%~NS{rX z9z50}z14ycZ$X;D;>pv`wjd44@;QbTvpRu{6IeFM7@A41j<}Zo4yrL{347Z zk~S0C#0-iGPcm1IDc;#+VquU}m=~IqQ{jMOUF&i{&8s1Y;$EXPgLh*6!whcL zpG58E%?t@c?;~tv#3|@mpRSDl;~YYt4fL8_$u}u#EIC2ZVYiRT_XwoGFkmcTvcj^& z%|NoGhM^4)`>omebC~+lJn6G|pVJdJqzWss#IH4^3gvvN@DZ6)#(RvblvTZwLcvXA&D)w5EY>RB6`>M7U3OD^<`R%CK+LHiopc#nQa31B$&WG@g}6{ zOhRkY@uY*|S6^aqK0ddTr0k0YXi~UDmYoKs9M(o?;-{BF2t%-7dfw94pikeU3GArw z(XbTN?BGzQaGoT`e@m9dyzT_BgnF{-Zx!4tA+ZPxvU*&f|{*Q{w zsAn<5WEcp z=i>NHO|(248^=imyNC@zaRhn~noN**)}(1jzRsv=Xl?YPO#Z}HrWc_HHLtei8=J() zd}C;vrr}T*Uk4WAU8Xp_ybP1-+a|FaeE#6t)-QjtH_7U~u|let}I2Hf95v^+5|lJTXnnW<9M+Y*7%@8w4at zf=p|p1!|eZ-U7iUg+b~$l4>EHc7q9ulrOxZucq?CPW^TUAsh_8p|7Lz$ggMc4Sgen zZ|QvuKBsR5w9sx1gHP&DGPq6O&LB3G0Ex9b8AQ7bqSsghvCW8{HKGTaU4zhb|I1d7J_Evn^53=DLlf2BBY>^KH7vG)ITANAVTdd6oGm^7MkUGgAGx$%S^}) zAQ5=O5p0!$RJ2A4hUpRBDTP_-I)rJ%hvrb~%qwyV&8Cz>d9;&A^GZ&Yw8Lf*A~0t( zGS4ge?F6CTDGyu|m26;h-#+;2H4FJIe1gZZB#v@1_M-ZA)VhN@$4_ydSm%qQ226D2yx-7tU z0o3Jb+NP!vc5NWa;{s};8YZq90I@bH#zrZR4yi;qG+%)r(G9^e1c_`279iLz1+z)9 zXCf|2ajP`is~sf~gj6={@lI0N$xzuaFW-{5za>SBRv<%?=ru<`9h}5kF%@n)JmRC` zsPjx~pC+w+SbS~{O%M=n(`#uepthz^(xwCPhz3?)#a+e@6K$Jms`5~XluEz;GFVo^kbTnv3q9@n!v`iL63z ze<=b3Vf0}hlHxBtfd+&2o`O_jkQ48|V@5z%lY)f9)GdMeJAL{ec%+gV?0;;`#7Y4F z16D#RToBp+Fv9;ZD&EIF^b>jTKGLW#Hc@5w129?z5{YApm1s)(GwS*8Z_ghD6?)tA zb624yvgbE`3aBU}%D5g$ z29-Nye9yEHcZ#lOTBti^LeI1?cgl4=)70*ii9OT8-6{H>X%X&}Nj=jd-6_}iOdI4* zncOpNusbEbXW9^V%9NgIL)|Gi^h}F#r?8#hplLA-bEn+cvz*4AGA%H7qrqGt)KPcJ zba@ZVopO`GU7ElP5q@idta`C^fai6$B{rLGoB5PX1@=e+TN|VEJt?vEDy(rZw78ZO zrle?lL2(a{Xd0d%@>;ycQIZLr@7fpZSZI8c4zpOiF=LK_HO3n_&G^lSHOV^8 z2-tUtXM5Ur^*Ea}Ap5SH{NBcD^_Ji3ZX;|*#Y2B%@_RTP(aXs1kIO^R~E;v z_0gf%GSTT;7Ke5%i|4fDf=er;XA}8ic<6+MvI0jFF27I?`v{%F;#iR1!k$Td?eDQX zW(O^gPh!B0-*wUw`rqX-U=0}lv&*Aq7j_8UDKnZ=5};@U%Vc1M{AbV#IlHeFl02;- z2?{)K;e~y?cR8L;L`_H|&K;6;koOGcJ&TdVgL#r}M=BXU^z5aJA+c420_rrZ2Qbcf zjd@>Croyj`RZ*(NLO8yH!v(2iEcpkx-jdT5i^Z43XY^Ep-JPzk=8o|GNriaO97yT$ z{2z}9{W0w*P`%mb9E@kzcUXqzYY{%C#|f~>(i3 z6d%fl#2z&AE#|$bhjk{c0cSWg4VlnK`xk*C4TnAEH~leZ5YG3QcVin&6K_VDqe;Ge z%_HUrG;kL8dE6JFEiFQ&G*xZrxHs)AEt66KlQ&sKg;I0dEM9Z1+gvLy{J`(8I{h%* zIP+PPaM&VTOOuCCoy*I<+d(8wY^B zujoY_TmjKzK}%jxHDK9z_pPp>|}t zABIvQx|{Ur{+N#up~IZZz|Wd^JWLCaz8%xqin|Rr=BXR$+2LVEdsf1GJCXh*pL+~5 z-Rj1fF>%q!0PR}?v?rPAPJ5Xj%=Ks%C>nA5db96&kFgmVVvU^wF=a-p z4>Z;{qy3B)VQ&hIW#IW#V7oS0td0Nx%#+b#-?M zi0gxwHCr~L9dXxnK#JX-0#yD~FnR;y@ z$<$PaF|D2iat^2m1_~C)KE-&U_>T#Yf;)W{&qF?<7#J|ERS{{hdoYInnonfSze0%U zoUE4#C8YXRq(G`kXyvnuU8m6l@=f~u0z|uws3xdCE(Kuv91JMy^F8Y?qt6>qkM#Mg z0lEHPgCy5x923_VnLd9_(&s26>vPiMBxpFQXg= zv)B1ZqsQ%blU&?LR*a~*{Qe{#Q#jz=SJ6GX8*uOST8A?6|KL56+IwCFe{X@}&qBHLc$2~8E>|@thlCp3 z58y5jYfe`C-O1r7vBsSo0Z`hU9Ep@cY_UilESMXn?r%;W;)kpx(5{d4%7XYNHn`AN ztSLAXf(JfX5HMk+qay3eXaV0oo`{<9^T5)wr8`6S$&<6h99AvusKSS! z&_MX`*B7bDXAw6?r4j&ULJS72=+10=|vI0*i$K|U|2^XarC<3H?b%KUdL zY>a;Gi8H82{C6V2f93FInLTmZAM-fEuqSXPoa_mdk@@dh(Cs2_IPS15x-Tjq+eOBI ztboja5t2R8;x@O4pMwxG_g%aU_Yu=Im;+1)I$R{SJKJnN(aWAVA>IS#!RdPDbkLCS zthgDBgaa9A*NSCF80pWGr9j6e$Vxad08-8spBhWkns#yXX&kCo=!p>zgq|PFCwis> zgJdd9CUX953?pX^y4a1J3O&hQDAME9{im%c0*XGlR-x#%0g4vDfasf|%v4BgfI8e8 zAm|J8WP-v#{2jvob^~!jTY#WfG7vw;g4WYO#Jbp$Umdg@!#sS9gcVjFEqsG%BIJdy z1@w%dg)b++#oVCcn$5c-O`eDL;P~J}zk@~S6W@P_(fUjyY~ zi&qz|BS?5JHk;4l#2ES0-PVV*;!ls#`p`vgC>w9aS#qbFPcIpU`{ z-wvI?tbawO&kjhY_r)D&BsU=V%{AsO zD)O!Pf3m%>YmGu~bU+0sz#^!(k_~~)A;I}bZ<4^uXeu{#BG6Rd4!}>bSavbjd19`XW^)5E7a6ua_^Uyj z54F&ZziPo>4VWvK8}KUO>NcBS3g)kE2N{1IRrCni)eYVGt8cq{6B-xqy_WIVi2#qy z2d`p2f_bb@>tT^N5mjN)LcGt?IA~;;)3o!->I1G1#?qfvyXqF=)IW|?IF&i7YY>G- z>SauH*%Q+GBSIm?s%Qx6Xd3{tC=i21als-u%hH5PVAKzbs6=nQgy(tGbMjdY0X7{o zOJY-#-sF$D1rc&r7h;!;+*K5lIkgk4A-Sp^b9)c|A?q=LF%T;uv1+@-s%$L9joPY_ z+NwhkPD)RuTf>G`gUmWvF6w2AJ%Kg$yVk(KY66Y*7DBR_Tv*~|#}_ylIt0Y&fpzpfre>4VeR>K@)M(0TMGDH&En^`JjgGg4U;` z%n`r3hI)b%wOt-(cK3??3CDt&Bpkb0{j{2ZkQy;A5GPo?`j+u+U~h3Fs!M`ePwY-XRvJ)57aKykUEX*JZt5G?~op?$MT$>IM^}4$g z!S+T6w7E>*MOg}c(W*+K??K8~5~Wd-z2->0$2b(sTvP*|H_^AYq$ATcSgO*ZGKIxCZ**y z|B_fFB8WvApw})Ei{y)GO^iLxg(RK^iyRHGNDmXDPo*$R9FJW}u*eC8MS55c{V9Qh zn}|jJGE8BS2vP#&i1xuEJ^c@vK_=a!Fvu+d|KqDX>P_!;-h3Wo2mP^$u53!rnl3ZP zIe*MDguxsg(&hom$ijcM{>KTo`Goje%&W{CSMonL-W<#vSMWc^g6Tlg6FsH=EJ!+; zNLqk>2bH*PFS822x7RUCv_vtIMkpk`c3@Kf<7q@v4JrpY95r}MLa$JX#CwwT_i{M; zp|5!*sxSrLMc=qwLN_4#uDG#_zIKHF?ezTvCU}7KeHKezm+)VKzVpF1SEMf|KK1t1 z(zj>`O(I+g`FYX+>HFKMMBkfGIf%YKY-nzn}e+b@7ZJkPupRzUVv{E`>{Di%p`#9ILpcWoH-c8tiEIDrMLi^R-} zKhtbJ+G~IJsQ3{02F}DI@Y;{E9(&U?p!Z(V*U*NNl}38H2!q~FgT`*)-e$8;CGOkJ zXnt1lFlhJpXm>xMpJjME7Izf>zOMI&lZo6bQCTAQcv^-(4F|3s&xoa+p-G$o-e<9z4UFDi2bU@xL?`M!wNt&84g$UZ;Xj591f?eo3jPa&kR%-2_brDiUe zf$VY!`(C&Cw`7oG6tJ$%ue;NBK>_(m>>*HHVqe^BejSeroo|Tm{gzqY(9S0UR`=ck ziTg`<(hG4vqb%W=nP3OLKdbxmiA4S)RF=rEA#wj_2qQmP)jb?DS?GJ{ciH@Y@eYOl zUHW|^mh^tVW5!LO5A!&$)ihv9!y%Q(e7tErFT@eTs!luW=`>vM;n%=ImLJ%E=jTS9TEcOk<7*gAP1^j6u)jZdhJ3!CZ#t;$ z7y{b|b(AxPr_O2Ual1-OgT|*}5dKC(P5B&Wr2};MNQd7ME+)Y+J|d>kZwFj|!qEZ7 z@ps|!s*}-m>H9oi?o&Ai@1gUwBA!}-w#o^`jwgT}b?A(uxC6E~8k%6^g|JBpG>-xw zc}|V5NI9aDd^oZ5TGVz>%=uZO4}FQ>U#~iMQK`E|sv9AG0Nd_doVXNmyac`&=z%gU z(RVIFOh!aL@ks6Ay9M(>rOiIgk0pExuDN)MiUXTeX@odkibRN$5IFZ~P<``t z({+rJd_6q7==OoNRD6+3=*012p+h8p0^Bsx^^M9oT>d!1J9t^fAM@yV8ZWkA*})&_ zv~l1QB`&-^)KM`EC1{==U`QM|trWE#gr&LY*nmv&bEs}$SBvXeQB09M&O$uXW5u!& zkZ7&hrCyH8RR`b19B>-bez!Uqaq(F&gg6JqOdbvx!gxNGj_OME z+j>eY2dR>dV}6HhKJAR)x5RA3+(}X@m8qOxiWF|^DM#4mE}Rk$@kucYP|@|_0{*>2Si1dmZvC)0dMHE-`r$p0ZanhE?;vDJ2djL% z#&nqUHP{sR7?0MHm|r|O+IR7!A2g&x#*_{fJID2j$`MaLBcW^^gCz}0CBzr;@uqX& zUI2R8jnZ(8oL~n;m%~9{&5x;-_>M7PT3Occ-buGl9DRI6<2~Q#9{O^4L@Lk z@G%6UF5;kp7>#)VOHUE+mx}9<|3_pXzk%{UgTS_^+c3Rg6V8xGB$$O4uMM01nyQtU zDe()Cl0E|9n$0=%^u3e^Soa-Z!e;h)Nxa#HrNbgb-3x?9|1rP%9iU@#*D)FxcEiWv zL?@Q)YOsiMhFkf@qhad>LH!&mB%QAEJu)I_P7Ih%`rJjUNBto3#qzJwt*w_ZEwf$o zCs2=_H;a#ASmFdy4AuDYj2%oRpGTr$>rt^7Jxw}p*!r%xh4mT7bA_>&@`C zIhsvO@nB_F@LV*$CpijQ;v}g7`nDiZ4zneF54Rd!>B@R0IP0Gml`NNE<(v(qGnpc$ z&**-LygCOS;~xxAkg%|v6O3x!SJfUECl>9Iu>o+GboHBIn%AgODtiOM&A|$ zS!VA>gcFS*H-;X;4nMy$1^i6!ZHO-;k3L5{8>Y<1pcp+#MB6^BeCl-+7t}`yc+>_I zr;-MQO-O1{k3tHy+MS)P72x?rI%v?A96vkcRc0OGNe%@l$0z_xY$F@Huie~Zf>^5AP|(10`NT{@bK zA9{x=DhGYS`%CmT6IBen!z7kKVDT2xT`WJe%P!(wIaS_7PZUR7gB5`PLpt4=uA53O;MSLv}#^3Zu-2i#Fpv_ z)0>AJg0zL1gi|B{_#n(srm{K6F2jk9ZluYCPDoRC`qHMRb}$1pGEK-9+Ie^K%kK{_1w+}uTMItc>zre z-%!g+vzk304JsdkdLgK{nouAmy1cAK9f!V^Fq`+gCN)8-IXHu`do$<-3j>w~+9d@l;gqCB zzCn8stT5s5J5zR3+aewTV$Fa<*=cNS!}g3=fnutdMsDU^)>S?*-r~FcvA&fWSwJ4lfC4o@CxJPmR8d0@Rwp zAM+-HSZ;>GT8s4Zq2gZl?G=2&33Ejok^pqBohgA)I8^ z@<~lR{06#!X(A#?T}{EVYl7;2#z2kGS8FbUx70tNC{~SoFxOGRiqQujuATHHiuos9V!vOr-*4IPyX@D;et*M$ zce3B#v0p2w>7R5f`<=&rm$2VT_Pdz;C$dS0H6HD!H#!ckkAG?f%faD zy*K0x#4{aFfsk#Tgj) z)-(ev+Ht%SJqRR==P?Ug)0mNbPsgr6UV?-Un{KpX(8`HdWtUzcPrzIzWWWea%N8f1 zZZ)tb1iyKt&?~9~C-FM8_$m|x`G2r9c39!UqW}NB{sS{G`$Y-q3K{0h(E5s${^+kH zSSG_2GBn8W1{rE)_^n*8U4}o)*Yt=R#&DI;V_chEf=WG3E5(P( zFpz$gf$P*iilcTi$=Z}JidR3&aXL8;y~ed~liIDx>E56A*Q9vmZzPyqEkVO93F>5+ z>6PLYYrChf&dJl|6yaY^9^?|rKP%} z(vme&R=LAoShA)ovHme>K74T!)Q*+sM~0oTQoM4M1g$b(DCzZbyiA7eqor~R|0v}u zCras@uSvB(G-O|Mctnf(_Xom`42^n6bM)O|gAW}Za&S;&>&e)-Q=?CRFlyYN&y4?{ zv19%e{r(?fPFy?kkH<$`^WN}dZQ9O+85ffN_w&SAUtYZBA2-kZV&1p^obO+7+jn2z zI`^A7UtO9VFLq2hH}!^3KAV2i`DuUu^v1vHC;e^m*^jTk?k^ur{BVM~Z ztj>S2cFiwrc{__<`Bm|&r6s?9`M$NkEPSc1prUd2hBqJBxaW5dKeG3sx8Hj34Ttl$ z>l=2hv;XGx^4IP!tG8A^amSCAFZ`zucb64he zH=pXcUD&#K$zzW%^`=?2nKoCMx1=n3^al%*UB*q72Ciw7LFKD7(yfFEDq$sEi7QY^ zSD=!vz@F(!T!Hn~lYr$D8g0+n9)ctb~(_w3uh{%fQ6<6rGK`~0stE*J~dI4SdUTfD??3P0COk>X`HN^qe3td;9k z%CK6A%lzz{F5#T8=S$->%q;fTK z`JVFIDW~@*zsh(sO4gQ?t}oHqDspXQlImmxGu!Q@c3o+SuH06V=P1?Ps^hrD$SF=P z&Y=Q|zJKdUib)r(t*wX~VC=@g31v-9&tVhpBxMTICkt(+L`y` zKo;9r;t|)$Nx}W$p6)6~?L<ZgCLLF1tMZT*z%*=`-iF_3l(P)^rJ|7Hfw3yt5!0?*m2xa(KLDLHNkNQ1~F&4xw>m_b5kbl>aqK`73b0UyXYs z<#go@MK~JwjZffyfO5L>q7Z%ql?})<^vHu}-2I}?{s%5?y`%?vqR#w*l%6fap80H2 zdnNwo5`u?ss0WR`%ogmoK`O698Rbd{3R4>4P%dm~Fu&A*1i~A91-F}xI+e(W4cYHS zys$kezaC*X_@d`UxD?#M?GygsODRKXZtC-6%r*@!(k)E7BNk>Xg!B<~0LHX29 zyYDr zr2mzyznPMtXQ^3kdO|{OK76wR#A*GSp1cglo|27Jrc5a#rCBJgvU|C^Db3w2EtS=+ z?w-cVZSR(5W#wwRr?GN%-O|!oxq76r{<6NLvvNM9>ELoI|5F-1I`;(_Sc>a0Gt%0q z?@HUaabw9)l>ebk|1&(B z>eK(q)+fwBkjq9IOb{iF^^wvCdd1xs$&H;kk{fzFvNOCrtSmG;#5$8GBGlG za^v!badGKUT=dMLT=)+|%5J|n4(u2DhHKOjZkwVRu3zS z${uPRl7K#p4d=$@4d!BJ4&nwc3uki?iAkik4d{zYwpLYx!??j1*WkqPvfN24%Dqkv;n;>h;llcTuFd6T(`>DP1P zXHMd-QH|qAM7Rz>N|(kR$;KU*IGBr8P2!?D zhqMoBi}0z-!m>lHAqmt*0ooXWid3f>xZk~A3V%46q2)s2rTFmJux@i*DbIC{+@IU! za?bhiNSH*I7Px|0i^40IX;kiO#qHfH%RqUrb_ka-6+LX(UDvMAYGYqT#_Tm5ZWX;iVKnr zUXbb}f+u{?Y&6GzmNXm}7X?{bE%A#E<)Uwq^5e!wf*&;8a66-xFQP0wn|SIH`at#T zG2aB=0wj9Vr9eujw#ZK=2&rOss9Z*b0yH43T&=({TaG*>x4$2du93)~`c;60|JQ(o zcOM}6d8YxXy>q}p_~QnL5U*L4zDn{l1o8tpN{1Xl?nW&e*{+hxCB#jL0MEyA5$%i{ z6GE(z8}zxJa7~HiVpX}^pw6yb%APPjt|Oiq z4;hK&BFiGO!>vJmVf7~Vsz;L|wKuX?do|P^!#Nf>M|Q)>^02cJp_mxitJVUks zUB|N-U~@l+^zL=A+b{=2i?y(ZzQm2~YX(&zDvsul>2`Za!tfZ36}l@XFM^8!U&bU3 zZ>PFM&-8p8jKCd>x^%_Bh|u9y;=`47LFQ+rUIEHHiu)$H-irvo78D;e3i=UzJIX$? zJ-Y0gY^ARqD08fU<8DVif~=3runrAUaf4PP9vQ|(+Sz)Vz}6RxUy>=v(@Zs|88M_x z6{E&D_JDqk9MMJ<6~;x)9K=O|-)KJA_!9u*26J&3cO3LU9P~gO#t@en(@x{0D{rj? zx#wgU1ZZwzkzUs$Pm6T&HR&RLCm4%+=Y16Feku5~d*Gl_BqNnb@2d?33-eDA32rA$ z>9bM@Q1KCh%e6CWIH*t%o?_qf$R z2M^$W0{3y;BWrN<8n*{`3+|BTIc@>&jkw>&9r6OsE#dwN?my$E5rkkC!=Qb_xd_;| zSogUh+)yqG$6_?FV~2AixNBf@GT&u-UQrRZIA>i>R&Hr=R(V0ihAgD#l;o_j*|TPp z!^xA9=5X3= zSJO7DpHfzyT9RLS)%BM-OG@xGY`G)H;Vi#uEX#9>%Zh-;nq$u?zIrUV1-3kA(bZ4J zio!fwDeJ>k4W-=X`2Kwd^-7lJ=YtMcU6*zHDr=WqeZwVJ*{-t;zN77`m|m)yS`1mf zS~5u}{zZn9k;wd(m1Vh)^i5Gt$(pR??CEe;;_`*KmVbY$NT}0o_TtpMtF8Sn@v*aP zjXfvNCi(27ed&7mMf_C4X8Z-kq-z_}GBl zFM;a^SaXB$?Lk^A%0&j1`xDaQQ7%3x?OUYrNOK3(9rFrsp>AIn?K9Bz-}61vJpA{3 zk2DYe>iM3+&{P-=g*ioq8*RyUgmQC=mgCF_ObT-awM^@kow9-P>lFYlg55pFempL6J1_iH#cC|CVU(Bq7cbJXFti{yFti{yJoUjEz z6Tot%-UVX8<^Uk1^OB<*>4B0W<@c0;4gL&su^B3|B2! zFiWB1fO}8vC(JNdXBp*?3=DS@P5j)yfRiT-Y0Fn6TW8Enka&L>mz9-VQLzXnppDNd z$t$wilQ?c7QbEuxnCr!bB^WVf> zAs+=2a`G#v!Sn)q>3Vb5A&lF&Vp}oUa@-`P?G0t*G31vjEoBuImLq>Yl`Jk@XX92R zFUwexo|uk@(YWo z0rG-kQLeNkzi1FbJR`1z|0$Wa5aCPpzuw{-S*#}E5g-==G;69)>I2$dw!`Mj&rUp zxfC;NvvcEmw+JKkx}a3Zk}W3>iCib8F5dtiDNYAbjO7@VjY3>e(7L(Y0xsfFg&PyL z)ak%F!Fsct(fUr}G)Nc;(SPt#_EO%tM|V6Q|35={GfIUvLvY`u>)tq}2Vb2%&Us8< zU|iu)G={;z^_7n^vsp}Rr4^T<>$e=8nazT*XGz9@Ql+o*$;+YSOn5}vPrHHq)EOut zU6;kfFBw?5%)2gIE}*NG&dY88{{aleM&FIN^>`jd&#WtkV_)=1xI2LKCE#od1HK=P zeKUmH0cT@FO++~O85uo0`-V2!fQMl8NZbhP03X3kFL0lv^idcKZq^6D zPjFLuC*UzW2cs~~9dq-?aNJ)J##v35Be-=>BM)#Gp8rt0I3LPY;I<+iXH2<-8zlS$ zSK}E^CDL)`l-oTWV?r3`I=Kei?<0&enjFrBvi=Z!CQ&Mbvz**#xY-y1*Ta&C+>W^d zJbg3hhcNA%j+`aa5zvL3%GXdDZXRVi0mt5g_7T`gqf#bGO8NjUz;kzPCd#-nxIPL(#w6~hF2z^AD z_G1%yJg-EU_Fhk5zm>|px44N12;P`0;UQ>{!vsCJ zsoiaWd3l&m^oQU-aX*JJUJ2mzxTy@mrE=H`_;Wd21K5C@Xxa!EnJ9KHld&+@1b^z7{qxT)?*z$82R0-W^x_;uU|5XSp0+;QBE2y^9-7u@Zr zs{@=bhv|7EJ+m@^Zwb;fr?)VN1aHDkA(idPqH&;db7`TWUn6mBiYrekqV`LyD~TzhGG zX})6`{DoU{%8RG3n=x4jbFDBR-q4ER)(F*23NA$Y=;Qy>NtMv2n1IX|vR^2Bq2dMc zh0Yha9g#b>Y-k{7&o6%$?ag3wD<6tk_w()4j8L=k}d7 zJL`68Yh!D5wehtHwXHSV(WBu@pTDxv+E3Xe4Vu}vo5=?psuWL_AAy`GO@o&56Hon doS`PW#$D4`bFzkeKK^;@^GN#d^)Jl8{{bE{FYo{W literal 0 HcmV?d00001