| | |
| | | import com.sandu.ximon.admin.vo.RemoteUpgradeProgress; |
| | | import com.sandu.ximon.dao.enums.MenuEnum; |
| | | import lombok.AllArgsConstructor; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.validation.annotation.Validated; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * 固件升级Controller |
| | |
| | | } |
| | | String orderType; |
| | | boolean UpdateFlag = false; |
| | | String deviceType; |
| | | |
| | | if(remotePrarm.getDeviceType()==null){ |
| | | throw new BusinessException("升级硬件设备类型指令有误,请确认!"); |
| | | } |
| | | if (RemoteUpdateTypeEnum.MQTT_MAIN.equals(remotePrarm.getDeviceType())) { |
| | | //MQTT主板 |
| | | orderType = A5OrderEnum.REQUEST_LIGHT_DATA.getCode(); |
| | | deviceType=RemoteUpdateTypeEnum.MQTT_MAIN; |
| | | } else if (RemoteUpdateTypeEnum.MQTT_CORE.equals(remotePrarm.getDeviceType())) { |
| | | //MQTT核心板 |
| | | orderType = A5OrderEnum.REQUEST_LIGHT_DATA.getCode(); |
| | | deviceType=RemoteUpdateTypeEnum.MQTT_CORE; |
| | | } else if (RemoteUpdateTypeEnum.LIGHT.equals(remotePrarm.getDeviceType())) { |
| | | //单灯模块 |
| | | orderType = A5OrderEnum.REQUEST_LIGHT_DATA.getCode(); |
| | | deviceType=RemoteUpdateTypeEnum.LIGHT; |
| | | } else if (RemoteUpdateTypeEnum.C3_CHARGING.equals(remotePrarm.getDeviceType())) { |
| | | //C3充电桩模块 |
| | | orderType = A5OrderEnum.REQUEST_C3_DATA.getCode(); |
| | | deviceType=RemoteUpdateTypeEnum.C3_CHARGING; |
| | | } else if (RemoteUpdateTypeEnum.CAT1_MAIN.equals(remotePrarm.getDeviceType())) { |
| | | //Cat.1主板 |
| | | orderType = A5OrderEnum.REQUEST_LIGHT_DATA.getCode(); |
| | | deviceType=RemoteUpdateTypeEnum.CAT1_MAIN; |
| | | } else if (RemoteUpdateTypeEnum.LIGHT_POLE_HELING.equals(remotePrarm.getDeviceType())) { |
| | | //灯杆倾斜模块 |
| | | orderType = A5OrderEnum.REQUEST_POLE_MONITOR_DATA.getCode(); |
| | | deviceType=RemoteUpdateTypeEnum.LIGHT_POLE_HELING; |
| | | } else if (RemoteUpdateTypeEnum.AIR_EQUIPMENT.equals(remotePrarm.getDeviceType())) { |
| | | //大气设备模块 |
| | | orderType = A5OrderEnum.REQUEST_ATMOSPHERE_DATA.getCode(); |
| | | deviceType=RemoteUpdateTypeEnum.AIR_EQUIPMENT; |
| | | } else { |
| | | throw new BusinessException("升级硬件设备类型指令有误,请确认!"); |
| | | } |
| | |
| | | , remotePrarm.getSoftwareVersion(), remotePrarm.getUpdateFlag()); |
| | | //存入升级进度 |
| | | RemoteUpgradeProgress progress = new RemoteUpgradeProgress(); |
| | | RedisUtils.getBean().set(remotePrarm.getDeviceType() + ":" + SecurityUtils.getUserId() + remotePrarm.getMac(), JSON.toJSON(progress)); |
| | | RedisUtils.getBean().set(deviceType + ":" + SecurityUtils.getUserId() + remotePrarm.getMac(), JSON.toJSON(progress)); |
| | | |
| | | if (startRemoteUpdateFlag) { |
| | | //服务器下发升级文件信息 |
| | |
| | | remoteUpdateService.UpdateData(orderType, remotePrarm.getMac(), i, remoteFileDto.getList().get(i)); |
| | | progress.setCurrentProgress(i + 1); |
| | | if (i != remoteFileDto.getList().size()) { |
| | | RedisUtils.getBean().set(remotePrarm.getDeviceType() + ":" + SecurityUtils.getUserId() + remotePrarm.getMac(), JSON.toJSON(progress)); |
| | | RedisUtils.getBean().set(deviceType + ":" + SecurityUtils.getUserId() + remotePrarm.getMac(), JSON.toJSON(progress)); |
| | | } |
| | | } |
| | | |
| | |
| | | boolean searchLoseDataFlag = remoteUpdateService.SearchLoseData(orderType, remotePrarm.getMac(), remoteFileDto, 0); |
| | | if (searchLoseDataFlag) { |
| | | //无漏包情况 更新最后进度为100% 否则最高卡在99% |
| | | RedisUtils.getBean().set(remotePrarm.getDeviceType() + ":" + SecurityUtils.getUserId() + remotePrarm.getMac(), JSON.toJSON(progress)); |
| | | RedisUtils.getBean().set(deviceType + ":" + SecurityUtils.getUserId() + remotePrarm.getMac(), JSON.toJSON(progress)); |
| | | //服务器下发结束升级帧 |
| | | boolean finishUpdateFlag = remoteUpdateService.FinishUpdate(orderType, remotePrarm.getMac()); |
| | | UpdateFlag = finishUpdateFlag; |
| | |
| | | } |
| | | } |
| | | |
| | | RedisUtils.getBean().delete(remotePrarm.getDeviceType() + ":" + SecurityUtils.getUserId() + remotePrarm.getMac()); |
| | | RedisUtils.getBean().delete(deviceType + ":" + SecurityUtils.getUserId() + remotePrarm.getMac()); |
| | | if (UpdateFlag) { |
| | | return ResponseUtil.success("升级成功!"); |
| | | } else { |
| | |
| | | } |
| | | } |
| | | |
| | | @PostMapping("/getRemoteUpgradeProgress") |
| | | public ResponseVO<Object> getRemoteUpgradeProgress(@RequestBody RemotePrarm remotePrarm) { |
| | | // if (!permissionConfig.check(MenuEnum.REMOTE_UPDATE_START.getCode())) { |
| | | // return ResponseUtil.fail("缺少对应用户权限"); |
| | | // } |
| | | String orderType; |
| | | String deviceType; |
| | | |
| | | if(remotePrarm.getDeviceType()==null){ |
| | | throw new BusinessException("升级硬件设备类型指令有误,请确认!"); |
| | | } |
| | | if (RemoteUpdateTypeEnum.MQTT_MAIN.equals(remotePrarm.getDeviceType())) { |
| | | //MQTT主板 |
| | | orderType = A5OrderEnum.REQUEST_LIGHT_DATA.getCode(); |
| | | deviceType=RemoteUpdateTypeEnum.MQTT_MAIN; |
| | | } else if (RemoteUpdateTypeEnum.MQTT_CORE.equals(remotePrarm.getDeviceType())) { |
| | | //MQTT核心板 |
| | | orderType = A5OrderEnum.REQUEST_LIGHT_DATA.getCode(); |
| | | deviceType=RemoteUpdateTypeEnum.MQTT_CORE; |
| | | } else if (RemoteUpdateTypeEnum.LIGHT.equals(remotePrarm.getDeviceType())) { |
| | | //单灯模块 |
| | | orderType = A5OrderEnum.REQUEST_LIGHT_DATA.getCode(); |
| | | deviceType=RemoteUpdateTypeEnum.LIGHT; |
| | | } else if (RemoteUpdateTypeEnum.C3_CHARGING.equals(remotePrarm.getDeviceType())) { |
| | | //C3充电桩模块 |
| | | orderType = A5OrderEnum.REQUEST_C3_DATA.getCode(); |
| | | deviceType=RemoteUpdateTypeEnum.C3_CHARGING; |
| | | } else if (RemoteUpdateTypeEnum.CAT1_MAIN.equals(remotePrarm.getDeviceType())) { |
| | | //Cat.1主板 |
| | | orderType = A5OrderEnum.REQUEST_LIGHT_DATA.getCode(); |
| | | deviceType=RemoteUpdateTypeEnum.CAT1_MAIN; |
| | | } else if (RemoteUpdateTypeEnum.LIGHT_POLE_HELING.equals(remotePrarm.getDeviceType())) { |
| | | //灯杆倾斜模块 |
| | | orderType = A5OrderEnum.REQUEST_POLE_MONITOR_DATA.getCode(); |
| | | deviceType=RemoteUpdateTypeEnum.LIGHT_POLE_HELING; |
| | | } else if (RemoteUpdateTypeEnum.AIR_EQUIPMENT.equals(remotePrarm.getDeviceType())) { |
| | | //大气设备模块 |
| | | orderType = A5OrderEnum.REQUEST_ATMOSPHERE_DATA.getCode(); |
| | | deviceType=RemoteUpdateTypeEnum.AIR_EQUIPMENT; |
| | | } else { |
| | | throw new BusinessException("升级硬件设备类型指令有误,请确认!"); |
| | | } |
| | | |
| | | RemoteUpgradeProgress progress = new RemoteUpgradeProgress(); |
| | | String s = RedisUtils.getBean().get(deviceType + ":" + SecurityUtils.getUserId() + remotePrarm.getMac()); |
| | | if (s != null) { |
| | | RemoteUpgradeProgress temp = JSON.parseObject(s, RemoteUpgradeProgress.class); |
| | | BeanUtils.copyProperties(temp, progress); |
| | | } |
| | | Map map = new HashMap<>(); |
| | | if (progress.getTotalProgress() != 0) { |
| | | //说明开始升级成功 存在非0进度 |
| | | BigDecimal divide = BigDecimal.valueOf(progress.getCurrentProgress()).divide(BigDecimal.valueOf(progress.getTotalProgress()), 2, BigDecimal.ROUND_HALF_UP); |
| | | map.put("progress", divide); |
| | | |
| | | return ResponseUtil.success(map); |
| | | } else { |
| | | map.put("progress", BigDecimal.valueOf(0.0)); |
| | | return ResponseUtil.success(map); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 查询固件版本号 |