feat: 远程操作

master
李小林 8 months ago
parent 5b9eccb260
commit 9e485b479f
  1. 5
      src/main/java/com/bellmann/common/constant/SystemConstants.java
  2. 7
      src/main/java/com/bellmann/common/enums/RemoteOperateMsgEnum.java
  3. 6
      src/main/java/com/bellmann/common/result/ResultCode.java
  4. 3
      src/main/java/com/bellmann/common/util/FTPUtils.java
  5. 21
      src/main/java/com/bellmann/controller/DeviceSpeedInfoController.java
  6. 142
      src/main/java/com/bellmann/controller/DeviceStaticController.java
  7. 7
      src/main/java/com/bellmann/controller/DeviceTypeVerController.java
  8. 8
      src/main/java/com/bellmann/controller/OperateTask2Controller.java
  9. 39
      src/main/java/com/bellmann/controller/SpeedController.java
  10. 39
      src/main/java/com/bellmann/controller/SpeedServerController.java
  11. 2
      src/main/java/com/bellmann/mapper/DeviceLogMapper.java
  12. 20
      src/main/java/com/bellmann/mapper/DeviceSpeedInfoMapper.java
  13. 2
      src/main/java/com/bellmann/mapper/DeviceStaticMapper.java
  14. 3
      src/main/java/com/bellmann/mapper/DeviceTypeVerMapper.java
  15. 2
      src/main/java/com/bellmann/mapper/OperateTask2Mapper.java
  16. 24
      src/main/java/com/bellmann/mapper/SpeedServerMapper.java
  17. 15
      src/main/java/com/bellmann/model/bo/DownloadInfo.java
  18. 144
      src/main/java/com/bellmann/model/entity/DeviceSpeedInfo.java
  19. 75
      src/main/java/com/bellmann/model/entity/SpeedServer.java
  20. 27
      src/main/java/com/bellmann/model/form/DeviceMonitorForm.java
  21. 41
      src/main/java/com/bellmann/model/form/PingForm.java
  22. 11
      src/main/java/com/bellmann/model/vo/FileRecordVO.java
  23. 4
      src/main/java/com/bellmann/model/vo/RemoteOperateResult.java
  24. 17
      src/main/java/com/bellmann/model/vo/SoftVersionUpgradeVO.java
  25. 14
      src/main/java/com/bellmann/service/DeviceSpeedInfoService.java
  26. 23
      src/main/java/com/bellmann/service/DeviceStaticService.java
  27. 4
      src/main/java/com/bellmann/service/DeviceTypeVerService.java
  28. 2
      src/main/java/com/bellmann/service/OperateTask2Service.java
  29. 2
      src/main/java/com/bellmann/service/RemoteOperateTaskService.java
  30. 16
      src/main/java/com/bellmann/service/SpeedServerService.java
  31. 40
      src/main/java/com/bellmann/service/impl/DeviceSpeedInfoServiceImpl.java
  32. 392
      src/main/java/com/bellmann/service/impl/DeviceStaticServiceImpl.java
  33. 7
      src/main/java/com/bellmann/service/impl/DeviceTypeVerServiceImpl.java
  34. 1
      src/main/java/com/bellmann/service/impl/FileOptionServiceImpl.java
  35. 9
      src/main/java/com/bellmann/service/impl/OperateTask2ServiceImpl.java
  36. 11
      src/main/java/com/bellmann/service/impl/RemoteOperateTaskServiceImpl.java
  37. 48
      src/main/java/com/bellmann/service/impl/SpeedServerServiceImpl.java
  38. 14
      src/main/resources/mapper/DeviceLogMapper.xml
  39. 46
      src/main/resources/mapper/DeviceSpeedInfoMapper.xml
  40. 11
      src/main/resources/mapper/DeviceStaticMapper.xml
  41. 14
      src/main/resources/mapper/DeviceTypeVerMapper.xml
  42. 1
      src/main/resources/mapper/FileRecordMapper.xml
  43. 15
      src/main/resources/mapper/OperateTask2Mapper.xml
  44. 40
      src/main/resources/mapper/SpeedServerMapper.xml

@ -38,5 +38,10 @@ public interface SystemConstants {
public static final long TASK_TIME_OUT_CONST = 60 * 1000; public static final long TASK_TIME_OUT_CONST = 60 * 1000;
public static final long TASK_TIME_OUT_CONST1 = 4 * 1000; public static final long TASK_TIME_OUT_CONST1 = 4 * 1000;
public static final long TASK_TIME_OUT_CONST3 = 6 * 1000;
public static final long TASK_TIME_OUT_CONST2 = 2 * 1000;
public static final String NULL_RESULT = "操作进行中..."; public static final String NULL_RESULT = "操作进行中...";
public static final String CONN_TYPE_REGEX = "connectionType = (\\w+)";
public static final String DOWNLOAD_INFO_REGEX = "DownloadInfo = (.*)";
public static final String SPEED_FAIL = "测速失败,请查看操作日志";
} }

@ -27,13 +27,18 @@ public enum RemoteOperateMsgEnum implements IBaseEnum<String> {
FACTORY_RESET("FactoryReset", "恢复设备出厂设置"), FACTORY_RESET("FactoryReset", "恢复设备出厂设置"),
UPLOAD_LOG("UploadLog", "获取设备日志文件"), UPLOAD_LOG("UploadLog", "获取设备日志文件"),
GetConnType("GetConnType","GetConnType"),
BASIC_PARAMETER("basicparameter","获取设备链路信息"), BASIC_PARAMETER("basicparameter","获取设备链路信息"),
FTTR_CONFIG("FTTRCONFIG","刷新设备主网关信息"), FTTR_CONFIG("FTTRCONFIG","刷新设备主网关信息"),
FTTR_STATS("FTTRSTATS","刷新子网关信息"); FTTR_STATS("FTTRSTATS","刷新子网关信息"),
SET_TR143_PARAMETER("SetTR143Parameter","SetTR143Parameter"),
DOWNLOAD_DIAGNOSTICS_QUERY("DownloadDiagnosticsQuery","DownloadDiagnosticsQuery"),
X_REGISTER("x_Register","开启终端注册页面"),
; ;
@Getter @Getter
private String value; private String value;

@ -118,7 +118,11 @@ public enum ResultCode implements IResultCode, Serializable {
OAM_INTERFACE_ERROR("F0026", "调用OAM接口报错"), OAM_INTERFACE_ERROR("F0026", "调用OAM接口报错"),
ACS_INTERFACE_ERROR("F0028", "调用ACS接口报错"), ACS_INTERFACE_ERROR("F0028", "调用ACS接口报错"),
QUERY_DEV_ONLINE_ERROR("F0029","查询设备在线状态出错" ), QUERY_DEV_ONLINE_ERROR("F0029","查询设备在线状态出错" ),
LINK_INFO_ERROR("F0030","获取设备链路失败"); LINK_INFO_ERROR("F0030","获取设备链路失败"),
DOMAIN_IS_NULL("F0031","系统管理域为空"),
LOGIC_IS_NULL("F0032","逻辑ID为空"),
TASK_NOT_FOUND("F0033","任务不存在"),
TASK_NOT_EXE("F0034", "任务未执行");
@Override @Override
public String getCode() { public String getCode() {

@ -142,6 +142,7 @@ public class FTPUtils {
*/ */
public static boolean upload (FileServer oaFtp, String filename, String dirPath, InputStream in) throws IOException { public static boolean upload (FileServer oaFtp, String filename, String dirPath, InputStream in) throws IOException {
login(oaFtp); login(oaFtp);
if (!ftpClient.isConnected()) { if (!ftpClient.isConnected()) {
return false; return false;
} }
@ -210,8 +211,10 @@ public class FTPUtils {
if (ftpClient != null) { if (ftpClient != null) {
try { try {
String path = changeEncoding(dirPath); String path = changeEncoding(dirPath);
log.info("path:{}",path);
changeAndMakeWorkingDir(path); changeAndMakeWorkingDir(path);
String[] fileNames = ftpClient.listNames(); String[] fileNames = ftpClient.listNames();
log.info("fileName:{}",Arrays.toString(fileNames));
if (fileNames == null || fileNames.length == 0) { if (fileNames == null || fileNames.length == 0) {
throw new BusinessException(ResultCode.FILE_NOT_EXIST); throw new BusinessException(ResultCode.FILE_NOT_EXIST);
} }

@ -0,0 +1,21 @@
package com.bellmann.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 终端测速信息 前端控制器
* </p>
*
* @author 李小林
* @since 2024-07-15
*/
@RestController
@RequestMapping("/deviceSpeedInfo")
public class DeviceSpeedInfoController {
}

@ -2,15 +2,13 @@ package com.bellmann.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bellmann.common.constant.SystemConstants; import com.bellmann.common.constant.SystemConstants;
import com.bellmann.common.enums.OperateTaskStateEnum;
import com.bellmann.common.enums.RemoteOperateMsgEnum; import com.bellmann.common.enums.RemoteOperateMsgEnum;
import com.bellmann.common.exception.BusinessException; import com.bellmann.common.exception.BusinessException;
import com.bellmann.common.result.PageResult; import com.bellmann.common.result.PageResult;
import com.bellmann.common.result.Result; import com.bellmann.common.result.Result;
import com.bellmann.common.result.ResultCode; import com.bellmann.common.result.ResultCode;
import com.bellmann.model.form.EquipmentAddForm; import com.bellmann.model.form.*;
import com.bellmann.model.form.EquipmentDetailForm;
import com.bellmann.model.form.PrivateProfileForm;
import com.bellmann.model.form.UnBindingForm;
import com.bellmann.model.query.DevOuiSnoQuery; import com.bellmann.model.query.DevOuiSnoQuery;
import com.bellmann.model.query.SelectQuery; import com.bellmann.model.query.SelectQuery;
import com.bellmann.model.vo.*; import com.bellmann.model.vo.*;
@ -25,6 +23,7 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -150,7 +149,7 @@ public class DeviceStaticController {
@PreventDuplicateSubmit @PreventDuplicateSubmit
public Result<List<DeviceLinkVO>> remoteDeviceLinkInfo(@PathVariable Long devId) { public Result<List<DeviceLinkVO>> remoteDeviceLinkInfo(@PathVariable Long devId) {
Long count = remoteOperateTaskService.sendTaskByDevId(devId, SecurityUtils.getUsername(), RemoteOperateMsgEnum.BASIC_PARAMETER.getValue()); Long count = remoteOperateTaskService.sendTaskByDevId(devId, SecurityUtils.getUsername(), RemoteOperateMsgEnum.BASIC_PARAMETER.getValue());
log.info("{}任务执行中: {}", RemoteOperateMsgEnum.TOUCH_DEVICE.getLabel(), count); log.info("{}任务执行中: {}", RemoteOperateMsgEnum.BASIC_PARAMETER.getLabel(), count);
try { try {
TimeUnit.MILLISECONDS.sleep(SystemConstants.TASK_TIME_OUT_CONST1); TimeUnit.MILLISECONDS.sleep(SystemConstants.TASK_TIME_OUT_CONST1);
List<DeviceLinkVO> result = operateResultArgsService.getDeviceLinkInfo(devId); List<DeviceLinkVO> result = operateResultArgsService.getDeviceLinkInfo(devId);
@ -178,7 +177,7 @@ public class DeviceStaticController {
@PreventDuplicateSubmit @PreventDuplicateSubmit
public Result<List<FTTRInfoVO>> remoteFTTRPrimaryGateway(@PathVariable Long devId) { public Result<List<FTTRInfoVO>> remoteFTTRPrimaryGateway(@PathVariable Long devId) {
Long count = remoteOperateTaskService.sendTaskByDevId(devId, SecurityUtils.getUsername(), RemoteOperateMsgEnum.FTTR_CONFIG.getValue()); Long count = remoteOperateTaskService.sendTaskByDevId(devId, SecurityUtils.getUsername(), RemoteOperateMsgEnum.FTTR_CONFIG.getValue());
log.info("{}任务执行中: {}", RemoteOperateMsgEnum.TOUCH_DEVICE.getLabel(), count); log.info("{}任务执行中: {}", RemoteOperateMsgEnum.FTTR_CONFIG.getLabel(), count);
try { try {
TimeUnit.MILLISECONDS.sleep(SystemConstants.TASK_TIME_OUT_CONST1); TimeUnit.MILLISECONDS.sleep(SystemConstants.TASK_TIME_OUT_CONST1);
List<FTTRInfoVO> result = operateResultArgsService.getFTTRPrimaryGateway(devId); List<FTTRInfoVO> result = operateResultArgsService.getFTTRPrimaryGateway(devId);
@ -192,7 +191,33 @@ public class DeviceStaticController {
@PreventDuplicateSubmit @PreventDuplicateSubmit
public Result<String> remoteFTTRSubGateway(@PathVariable Long devId) { public Result<String> remoteFTTRSubGateway(@PathVariable Long devId) {
Long count = remoteOperateTaskService.sendTaskByDevId(devId, SecurityUtils.getUsername(), RemoteOperateMsgEnum.FTTR_STATS.getValue()); Long count = remoteOperateTaskService.sendTaskByDevId(devId, SecurityUtils.getUsername(), RemoteOperateMsgEnum.FTTR_STATS.getValue());
log.info("{}任务执行中: {}", RemoteOperateMsgEnum.TOUCH_DEVICE.getLabel(), count); log.info("{}任务执行中: {}", RemoteOperateMsgEnum.FTTR_STATS.getLabel(), count);
try {
TimeUnit.MILLISECONDS.sleep(SystemConstants.TASK_TIME_OUT_CONST1);
return Result.success();
} catch (InterruptedException e) {
throw new BusinessException(ResultCode.LINK_INFO_ERROR);
}
}
@PostMapping("/remote/ip-ping")
@Operation(summary = "远程操作-设备Ping测试")
@PreventDuplicateSubmit
public Result<String> remoteIpPing(@RequestBody @Valid PingForm form) {
Long taskId = deviceStaticService.remoteIpPing(form);
log.info("{}任务执行中: {}", RemoteOperateMsgEnum.IP_PING.getLabel(), taskId);
try {
TimeUnit.MILLISECONDS.sleep(SystemConstants.TASK_TIME_OUT_CONST1);
return Result.success();
} catch (InterruptedException e) {
throw new BusinessException(ResultCode.LINK_INFO_ERROR);
}
}
@GetMapping("/remote/upload-log/{devId}")
@Operation(summary = "远程操作-获取设备日志文件")
@PreventDuplicateSubmit
public Result<String> remoteUploadLog(@PathVariable Long devId) {
Long taskId = remoteOperateTaskService.sendTaskByDevId(devId,SecurityUtils.getUsername(),RemoteOperateMsgEnum.UPLOAD_LOG.getValue());
log.info("{}任务执行中: {}", RemoteOperateMsgEnum.UPLOAD_LOG.getLabel(), taskId);
try { try {
TimeUnit.MILLISECONDS.sleep(SystemConstants.TASK_TIME_OUT_CONST1); TimeUnit.MILLISECONDS.sleep(SystemConstants.TASK_TIME_OUT_CONST1);
return Result.success(); return Result.success();
@ -201,4 +226,107 @@ public class DeviceStaticController {
} }
} }
@GetMapping("/remote/upload-config/{devId}")
@Operation(summary = "远程操作-获取配置文件")
@PreventDuplicateSubmit
public Result<String> remoteUploadConfig(@PathVariable Long devId) {
Long taskId = remoteOperateTaskService.sendTaskByDevId(devId,SecurityUtils.getUsername(),RemoteOperateMsgEnum.UPLOAD_CONFIG.getValue());
log.info("{}任务执行中: {}", RemoteOperateMsgEnum.UPLOAD_CONFIG.getLabel(), taskId);
try {
TimeUnit.MILLISECONDS.sleep(SystemConstants.TASK_TIME_OUT_CONST1);
return Result.success();
} catch (InterruptedException e) {
throw new BusinessException(ResultCode.LINK_INFO_ERROR);
}
}
@GetMapping("/remote/factory-reset/{devId}")
@Operation(summary = "远程操作-恢复设备出厂设置")
@PreventDuplicateSubmit
public Result<String> remoteFactoryReset(@PathVariable Long devId) {
Long taskId = remoteOperateTaskService.sendTaskByDevId(devId,SecurityUtils.getUsername(),RemoteOperateMsgEnum.FACTORY_RESET.getValue());
log.info("{}任务执行中: {}", RemoteOperateMsgEnum.FACTORY_RESET.getLabel(), taskId);
try {
TimeUnit.MILLISECONDS.sleep(SystemConstants.TASK_TIME_OUT_CONST1);
return Result.success();
} catch (InterruptedException e) {
throw new BusinessException(ResultCode.LINK_INFO_ERROR);
}
}
@GetMapping("/remote/reboot/{devId}")
@Operation(summary = "远程操作-远程重启")
@PreventDuplicateSubmit
public Result<String> remoteReboot(@PathVariable Long devId) {
Long taskId = remoteOperateTaskService.sendTaskByDevId(devId,SecurityUtils.getUsername(),RemoteOperateMsgEnum.REBOOT.getValue());
log.info("{}任务执行中: {}", RemoteOperateMsgEnum.REBOOT.getLabel(), taskId);
try {
TimeUnit.MILLISECONDS.sleep(SystemConstants.TASK_TIME_OUT_CONST1);
return Result.success();
} catch (InterruptedException e) {
throw new BusinessException(ResultCode.LINK_INFO_ERROR);
}
}
@PostMapping("/remote/device-monitor")
@Operation(summary = "远程操作-设备监控")
@PreventDuplicateSubmit
public Result<String> remoteDeviceMonitor(@RequestBody @Valid DeviceMonitorForm form) {
Long taskId = deviceStaticService.remoteDeviceMonitor(form);
log.info("{}任务执行中: {}", RemoteOperateMsgEnum.IP_PING.getLabel(), taskId);
try {
TimeUnit.MILLISECONDS.sleep(SystemConstants.TASK_TIME_OUT_CONST1);
return Result.success();
} catch (InterruptedException e) {
throw new BusinessException(ResultCode.LINK_INFO_ERROR);
}
}
@GetMapping("/remote/check-conn-type/{devId}")
@Operation(summary = "远程操作-测速-上网方式")
@PreventDuplicateSubmit
public Result<String> remoteCheckConnType(@PathVariable Long devId) {
Long taskId = deviceStaticService.remoteCheckConnType(devId);
log.info("{}任务执行中: {}", RemoteOperateMsgEnum.REBOOT.getLabel(), taskId);
try {
TimeUnit.MILLISECONDS.sleep(SystemConstants.TASK_TIME_OUT_CONST2);
String connType = deviceStaticService.remoteConnType(taskId, devId);
return Result.success(connType);
} catch (InterruptedException e) {
throw new BusinessException(ResultCode.LINK_INFO_ERROR);
}
}
@GetMapping("/remote/tr143-speed/{devId}")
@Operation(summary = "远程操作-测速")
@PreventDuplicateSubmit
public Result<RemoteOperateResult> TR143Speed(@PathVariable Long devId,@RequestParam String downloadUrl) {
Long taskId = deviceStaticService.TR143Speed(devId,downloadUrl);
log.info("{}任务执行中: {}", RemoteOperateMsgEnum.SET_TR143_PARAMETER.getLabel(), taskId);
try {
TimeUnit.MILLISECONDS.sleep(SystemConstants.TASK_TIME_OUT_CONST3);
RemoteOperateResult result = deviceStaticService.checkTR143Speed(taskId, devId);
if (OperateTaskStateEnum.THE_EXECUTION_WAS_SUCCESSFUL.getValue().equals(result.getResultState())){
TimeUnit.MILLISECONDS.sleep(SystemConstants.TASK_TIME_OUT_CONST2);
Long taskId1 = remoteOperateTaskService.sendTaskByDevId(devId, SecurityUtils.getUsername(), RemoteOperateMsgEnum.DOWNLOAD_DIAGNOSTICS_QUERY.getValue());
RemoteOperateResult result1 = deviceStaticService.checkTr143SpeedResult(devId,taskId1);
return Result.success(result1);
}
return Result.success(result);
} catch (InterruptedException e) {
throw new BusinessException(ResultCode.LINK_INFO_ERROR);
}
}
@GetMapping("/remote/soft-version-upgrade/{devId}/{fileId}")
@Operation(summary = "远程操作-软件版本升级")
@PreventDuplicateSubmit
public Result<String> remoteSoftVerUpgrade(@PathVariable Long devId,@PathVariable Long fileId){
Long taskId = remoteOperateTaskService.sendTaskByDevIdByFileId(devId, SecurityUtils.getUsername(), fileId, RemoteOperateMsgEnum.DOWNLOAD_SOFT_VER_FILE.getValue());
log.info("{}任务执行中: {}", RemoteOperateMsgEnum.DOWNLOAD_SOFT_VER_FILE.getLabel(), taskId);
return Result.success();
}
@GetMapping("/remote/register/{devId}")
@Operation(summary = "远程操作-开启终端注册页面")
@PreventDuplicateSubmit
public Result<String> remoteOpenRegister(@PathVariable Long devId){
Long taskId = deviceStaticService.remoteOpenRegister(devId);
log.info("{}任务执行中: {}", RemoteOperateMsgEnum.X_REGISTER.getLabel(), taskId);
return Result.success();
}
} }

@ -11,6 +11,7 @@ import com.bellmann.model.query.DeviceTypeToVerQuery;
import com.bellmann.model.vo.DeviceServiceVO; import com.bellmann.model.vo.DeviceServiceVO;
import com.bellmann.model.vo.DeviceTypeToVerVO; import com.bellmann.model.vo.DeviceTypeToVerVO;
import com.bellmann.model.vo.FileRecordVO; import com.bellmann.model.vo.FileRecordVO;
import com.bellmann.model.vo.SoftVersionUpgradeVO;
import com.bellmann.service.DeviceTypeVerService; import com.bellmann.service.DeviceTypeVerService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
@ -143,4 +144,10 @@ public class DeviceTypeVerController {
return deviceTypeVerService.tr069BindingDevType(form); return deviceTypeVerService.tr069BindingDevType(form);
} }
@GetMapping("/upgrade-soft-ver/{devId}")
@Operation(summary = "升级软件版本列表")
public Result<List<SoftVersionUpgradeVO>> upgradeSoftVerTable(@PathVariable Long devId){
List<SoftVersionUpgradeVO> list = deviceTypeVerService.upgradeSoftVerTable(devId);
return Result.success(list);
}
} }

@ -27,10 +27,16 @@ public class OperateTask2Controller {
private final OperateTask2Service operateTask2Service; private final OperateTask2Service operateTask2Service;
@PostMapping("/page/{devId}") @PostMapping("/page/{devId}")
@Operation(summary = "设备任务列表-page") @Operation(summary = "远程操作-设备任务列表")
public PageResult<OperateTask2TableVO> page(@PathVariable Long devId, @RequestBody BasePageQuery query){ public PageResult<OperateTask2TableVO> page(@PathVariable Long devId, @RequestBody BasePageQuery query){
return operateTask2Service.page(devId,query); return operateTask2Service.page(devId,query);
} }
@PostMapping("/task-page")
@Operation(summary = "设备任务列表")
public PageResult<OperateTask2TableVO> taskPage(@RequestBody BasePageQuery query){
return operateTask2Service.taskPage(query);
}
} }

@ -0,0 +1,39 @@
package com.bellmann.controller;
import cn.hutool.core.map.MapUtil;
import com.bellmann.common.result.Result;
import com.bellmann.service.DeviceSpeedInfoService;
import com.bellmann.service.SpeedServerService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Tag(name = "28.测速服务器信息")
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/speed/v1")
public class SpeedController {
private final SpeedServerService speedServerService;
private final DeviceSpeedInfoService deviceSpeedInfoService;
@GetMapping("/speed-info/{devId}")
@Operation(summary = "测速服务器URL列表")
public Result<Map<String,Object>> getSpeedInfo(@PathVariable Long devId){
List<String> downloadUrls = speedServerService.downloadUrls(devId);
String speedMaxRate = deviceSpeedInfoService.getSpeedMaxRate(devId);
Map<String, Object> map = MapUtil.builder(new HashMap<String, Object>())
.put("downloadUrls", downloadUrls)
.put("speedMaxRate", speedMaxRate)
.build();
return Result.success(map);
}
}

@ -0,0 +1,39 @@
package com.bellmann.controller;
import com.bellmann.common.result.Result;
import com.bellmann.service.SpeedServerService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* <p>
* 服务器信息 前端控制器
* </p>
*
* @author 李小林
* @since 2024-07-15
*/
@Tag(name = "27.测速服务器信息")
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/speed-server/v1")
public class SpeedServerController {
private final SpeedServerService speedServerService;
@GetMapping("/download-url/{devId}")
@Operation(summary = "测速服务器URL列表")
public Result<List<String>> downloadUrls(@PathVariable Long devId){
List<String> list = speedServerService.downloadUrls(devId);
return Result.success(list);
}
}

@ -3,6 +3,7 @@ package com.bellmann.mapper;
import com.bellmann.model.entity.DeviceLog; import com.bellmann.model.entity.DeviceLog;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/** /**
* <p> * <p>
@ -15,4 +16,5 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper @Mapper
public interface DeviceLogMapper extends BaseMapper<DeviceLog> { public interface DeviceLogMapper extends BaseMapper<DeviceLog> {
String getTaskResultByTaskId(@Param("taskId") Long taskId,@Param("operateName") String operateName);
} }

@ -0,0 +1,20 @@
package com.bellmann.mapper;
import com.bellmann.model.entity.DeviceSpeedInfo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
* <p>
* 终端测速信息 Mapper 接口
* </p>
*
* @author 李小林
* @since 2024-07-15
*/
@Mapper
public interface DeviceSpeedInfoMapper extends BaseMapper<DeviceSpeedInfo> {
String getSpeedMaxRate(@Param("devId") Long devId,@Param("logicId") String logicId);
}

@ -33,4 +33,6 @@ public interface DeviceStaticMapper extends BaseMapper<DeviceStatic> {
DevOnlineStatus devOnlineStatusByPppoe(@Param("pppoe") String pppoe); DevOnlineStatus devOnlineStatusByPppoe(@Param("pppoe") String pppoe);
DeviceDetail findRDeviceDetailStructByDevId(@Param("devId") Long devId); DeviceDetail findRDeviceDetailStructByDevId(@Param("devId") Long devId);
String getLogicIdByDevId(@Param("devId") Long devId);
} }

@ -7,6 +7,7 @@ import com.bellmann.model.bo.DeviceTypeToVerBO;
import com.bellmann.model.entity.DeviceType; import com.bellmann.model.entity.DeviceType;
import com.bellmann.model.entity.DeviceTypeVer; import com.bellmann.model.entity.DeviceTypeVer;
import com.bellmann.model.form.DeviceTypeVerForm; import com.bellmann.model.form.DeviceTypeVerForm;
import com.bellmann.model.vo.SoftVersionUpgradeVO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
@ -30,4 +31,6 @@ public interface DeviceTypeVerMapper extends BaseMapper<DeviceTypeVer> {
DeviceTypeVerForm findDevTypeVerEditForm(@Param("typeAndVerId") Long typeAndVerId); DeviceTypeVerForm findDevTypeVerEditForm(@Param("typeAndVerId") Long typeAndVerId);
Long getTypeAndVerId(); Long getTypeAndVerId();
List<SoftVersionUpgradeVO> upgradeSoftVerTable(@Param("devId") Long devId);
} }

@ -23,4 +23,6 @@ public interface OperateTask2Mapper extends BaseMapper<OperateTask2> {
OperateTask2 findDOperateTask2StructByDevIdAndOperateName(@Param("devId") Long devId, @Param("operateName")String operateName); OperateTask2 findDOperateTask2StructByDevIdAndOperateName(@Param("devId") Long devId, @Param("operateName")String operateName);
OperateTask2 getLatestTaskByOperateName(@Param("devId") Long devId, @Param("operateName") String operateName); OperateTask2 getLatestTaskByOperateName(@Param("devId") Long devId, @Param("operateName") String operateName);
Page<OperateTask2TableBO> taskPage(Page<OperateTask2TableBO> page);
} }

@ -0,0 +1,24 @@
package com.bellmann.mapper;
import com.bellmann.model.entity.SpeedServer;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* <p>
* 服务器信息 Mapper 接口
* </p>
*
* @author 李小林
* @since 2024-07-15
*/
@Mapper
public interface SpeedServerMapper extends BaseMapper<SpeedServer> {
List<String> findDownloadUrlByDomainId(@Param("areaId") String areaId);
List<String> findDownloadUrlByRootDomainId(@Param("regionAreaId") Long regionAreaId);
}

@ -0,0 +1,15 @@
package com.bellmann.model.bo;
import lombok.Data;
@Data
public class DownloadInfo {
private String state;
private String romTime;
private Long bomTime;
private Long eomTime;
private Long testBytesReceived; // 使用Long以便能够处理null值
private Long totalBytesReceived;
private Long tcpOpenRequestTime; // 使用Long以便能够处理null值
private Long tcpOpenResponseTime;
}

@ -0,0 +1,144 @@
package com.bellmann.model.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date;
/**
* <p>
* 终端测速信息
* </p>
*
* @author 李小林
* @since 2024-07-15
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("itms_device_speed_info")
public class DeviceSpeedInfo implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 测速ID
*/
@TableId(value = "speed_id", type = IdType.AUTO)
private Long speedId;
/**
* 逻辑ID
*/
private String loid;
/**
* 设备ID
*/
private Long devId;
/**
* 设备序列号
*/
private String devSno;
/**
* 测速方式 0:TTCP 1:TR143
*/
private String speedMode;
/**
* 测速时间
*/
private Date speedTime;
/**
* 测速来源 0:ITMS后台 1:ITMS前台 2:综合测试 3:上网助手
*/
private String speedSource;
/**
* 测速操作人员
*/
private String speedOperator;
/**
* 速率
*/
private Double rate;
/**
* 单位
*/
private String unit;
/**
* 测速开始时间
*/
private Date speedStarttime;
/**
* 测速结束时间
*/
private Date speedEndtime;
/**
* 执行时间(备用)
*/
private Date exctime;
/**
* 执行时间1(备用)
*/
private Date exctime1;
/**
* 执行时间2(备用)
*/
private Date exctime2;
/**
* 执行时间3(备用)
*/
private Date exctime3;
/**
* 执行时间4(备用)
*/
private Date exctime4;
/**
* 测速URL
*/
private String url;
/**
* 上网账号
*/
private String devPppoe;
/**
* 调用系统
*/
private String sysid;
/**
* 密钥
*/
private String syspass;
/**
* 带宽
*/
private String bandwidth;
/**
* 区域
*/
private String areaid;
}

@ -0,0 +1,75 @@
package com.bellmann.model.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
/**
* <p>
* 服务器信息
* </p>
*
* @author 李小林
* @since 2024-07-15
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("itms_speed_server")
public class SpeedServer implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 服务器ID
*/
@TableId(value = "serv_id", type = IdType.AUTO)
private Long servId;
/**
* 服务器名称
*/
private String servName;
/**
* 支持传输方式0 HTTP 1 FTP 2 SFTP 3 TELNET 4 SSH
*/
private String supportMode;
/**
* 服务器地址
*/
private String ip;
/**
* 访问端口
*/
private String port;
/**
* 登录用户名
*/
private String userName;
/**
* 登录密码
*/
private String passwd;
/**
* 管理域ID
*/
private Long groupid;
/**
* 备注
*/
private String remark;
private String downloadurl;
}

@ -0,0 +1,27 @@
package com.bellmann.model.form;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@Data
@Schema(description = "设备监控表单")
public class DeviceMonitorForm {
@NotNull(message = "设备ID不能为空")
private Long devId;
/**
*监控时长
*/
@NotBlank(message = "监控时长不能为空")
private String monitorPeriod;
/**
*采样周期
*/
@NotBlank(message = "monitorInterval不能为空")
private String monitorInterval;
}

@ -0,0 +1,41 @@
package com.bellmann.model.form;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@Data
@Schema(description = "ping 表单")
public class PingForm {
/**
* 设备ID
*/
@NotNull(message = "设备ID不能为空")
private Long deviceId;
/**
* HOST参数
*/
@NotBlank(message = "HOST参数不能为空")
private String host;
/**
* pingNumber参数
*/
@NotBlank(message = "pingNumber参数不能为空")
private String pingNumber;
/**
* packageSize参数
*/
@NotBlank(message = "packageSize参数不能为空")
private String packSize;
/**
* pingInterface参数
*/
@NotBlank(message = "pingInterface参数不能为空")
private String pingInterface;
}

@ -1,14 +1,10 @@
package com.bellmann.model.vo; package com.bellmann.model.vo;
import com.baomidou.mybatisplus.annotation.IdType; import com.fasterxml.jackson.annotation.JsonFormat;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable; import java.time.LocalDateTime;
import java.util.Date;
/** /**
* <p> * <p>
@ -51,7 +47,8 @@ public class FileRecordVO {
* 文件上传时间 * 文件上传时间
*/ */
@Schema(description = "文件上传时间") @Schema(description = "文件上传时间")
private Date fileCreateTime; @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss" ,timezone = "GMT+8")
private LocalDateTime fileCreateTime;
/** /**
* 文件描述 * 文件描述

@ -1,12 +1,16 @@
package com.bellmann.model.vo; package com.bellmann.model.vo;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor;
@Data @Data
@Schema(description = "远程操作结果") @Schema(description = "远程操作结果")
@Builder @Builder
@AllArgsConstructor
@NoArgsConstructor
public class RemoteOperateResult { public class RemoteOperateResult {
private String resultState; private String resultState;

@ -0,0 +1,17 @@
package com.bellmann.model.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
@Schema(description = "软件版本升级列表视图")
public class SoftVersionUpgradeVO {
private Long typeAndVerId;
private Long fileId;
private String softVer;
private String devTypeVerDesc;
}

@ -0,0 +1,14 @@
package com.bellmann.service;
/**
* <p>
* 终端测速信息 服务类
* </p>
*
* @author 李小林
* @since 2024-07-15
*/
public interface DeviceSpeedInfoService {
String getSpeedMaxRate(Long devId);
}

@ -3,15 +3,13 @@ package com.bellmann.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bellmann.common.result.PageResult; import com.bellmann.common.result.PageResult;
import com.bellmann.common.result.Result; import com.bellmann.common.result.Result;
import com.bellmann.model.form.EquipmentAddForm; import com.bellmann.model.form.*;
import com.bellmann.model.form.EquipmentDetailForm;
import com.bellmann.model.form.PrivateProfileForm;
import com.bellmann.model.form.UnBindingForm;
import com.bellmann.model.query.DevOuiSnoQuery; import com.bellmann.model.query.DevOuiSnoQuery;
import com.bellmann.model.query.SelectQuery; import com.bellmann.model.query.SelectQuery;
import com.bellmann.model.vo.EquipmentVO; import com.bellmann.model.vo.EquipmentVO;
import com.bellmann.model.vo.RemoteDevInfoVO; import com.bellmann.model.vo.RemoteDevInfoVO;
import com.bellmann.model.vo.RemoteEquipmentVO; import com.bellmann.model.vo.RemoteEquipmentVO;
import com.bellmann.model.vo.RemoteOperateResult;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -44,4 +42,21 @@ public interface DeviceStaticService {
Result<String> deleteProfile(Long devId, Long fileId); Result<String> deleteProfile(Long devId, Long fileId);
int compareParameter(Long devId, String serviceName, Long serviceId, String serviceVerName); int compareParameter(Long devId, String serviceName, Long serviceId, String serviceVerName);
Long remoteIpPing(PingForm form);
Long remoteDeviceMonitor(DeviceMonitorForm form);
Long remoteCheckConnType(Long devId);
String remoteConnType(Long taskId,Long devId);
Long TR143Speed(Long devId, String downloadUrl);
RemoteOperateResult checkTR143Speed(Long taskId, Long devId);
RemoteOperateResult checkTr143SpeedResult(Long devId, Long taskId);
Long remoteOpenRegister(Long devId);
} }

@ -10,9 +10,9 @@ import com.bellmann.model.query.DeviceTypeToVerQuery;
import com.bellmann.model.vo.DeviceServiceVO; import com.bellmann.model.vo.DeviceServiceVO;
import com.bellmann.model.vo.DeviceTypeToVerVO; import com.bellmann.model.vo.DeviceTypeToVerVO;
import com.bellmann.model.vo.FileRecordVO; import com.bellmann.model.vo.FileRecordVO;
import com.bellmann.model.vo.SoftVersionUpgradeVO;
import java.util.List; import java.util.List;
import java.util.concurrent.Future;
public interface DeviceTypeVerService { public interface DeviceTypeVerService {
Page<DeviceTypeToVerVO> deviceTypeToVerPage(DeviceTypeToVerQuery query); Page<DeviceTypeToVerVO> deviceTypeToVerPage(DeviceTypeToVerQuery query);
@ -48,4 +48,6 @@ public interface DeviceTypeVerService {
int addTypeVer(DeviceTypeVerForm form, Long devTypeId); int addTypeVer(DeviceTypeVerForm form, Long devTypeId);
Result<String> tr069BindingDevType(BindingTr069Form form); Result<String> tr069BindingDevType(BindingTr069Form form);
List<SoftVersionUpgradeVO> upgradeSoftVerTable(Long devId);
} }

@ -15,4 +15,6 @@ import com.bellmann.model.vo.OperateTask2TableVO;
public interface OperateTask2Service { public interface OperateTask2Service {
PageResult<OperateTask2TableVO> page(Long devId, BasePageQuery query); PageResult<OperateTask2TableVO> page(Long devId, BasePageQuery query);
PageResult<OperateTask2TableVO> taskPage(BasePageQuery query);
} }

@ -6,7 +6,7 @@ import com.bellmann.model.vo.RemoteOperateResult;
public interface RemoteOperateTaskService { public interface RemoteOperateTaskService {
public Long sendTaskByDevId(Long devId,String createUser,String command); public Long sendTaskByDevId(Long devId,String createUser,String command);
public Long sendTaskByDevIdByFileId(Long devId,String createUser,Long fileId,String command);
public long insertOperationTask(OperationTask operationTask); public long insertOperationTask(OperationTask operationTask);
RemoteOperateResult findDevInfoArgsByDevIdIsTimeOut(Long devId, String command); RemoteOperateResult findDevInfoArgsByDevIdIsTimeOut(Long devId, String command);

@ -0,0 +1,16 @@
package com.bellmann.service;
import java.util.List;
/**
* <p>
* 服务器信息 服务类
* </p>
*
* @author 李小林
* @since 2024-07-15
*/
public interface SpeedServerService {
List<String> downloadUrls(Long devId);
}

@ -0,0 +1,40 @@
package com.bellmann.service.impl;
import com.bellmann.common.exception.BusinessException;
import com.bellmann.common.result.ResultCode;
import com.bellmann.mapper.DeviceSpeedInfoMapper;
import com.bellmann.mapper.DeviceStaticMapper;
import com.bellmann.service.DeviceSpeedInfoService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
/**
* <p>
* 终端测速信息 服务实现类
* </p>
*
* @author 李小林
* @since 2024-07-15
*/
@RequiredArgsConstructor
@Service
public class DeviceSpeedInfoServiceImpl implements DeviceSpeedInfoService {
private final DeviceSpeedInfoMapper deviceSpeedInfoMapper;
private final DeviceStaticMapper deviceStaticMapper;
@Override
public String getSpeedMaxRate(Long devId) {
String logicId = deviceStaticMapper.getLogicIdByDevId(devId);
if (logicId.isEmpty()){
throw new BusinessException(ResultCode.LOGIC_IS_NULL);
}
String speedMaxRate = deviceSpeedInfoMapper.getSpeedMaxRate(devId,logicId);
if (speedMaxRate!=null){
speedMaxRate = speedMaxRate+" Mbit/sec";
}else {
speedMaxRate = "暂无测速历史记录";
}
return speedMaxRate;
}
}

@ -17,13 +17,12 @@ import com.bellmann.common.result.ResultCode;
import com.bellmann.converter.DeviceStaticConverter; import com.bellmann.converter.DeviceStaticConverter;
import com.bellmann.manger.*; import com.bellmann.manger.*;
import com.bellmann.mapper.*; import com.bellmann.mapper.*;
import com.bellmann.model.bo.DownloadInfo;
import com.bellmann.model.bo.EquipmentBO; import com.bellmann.model.bo.EquipmentBO;
import com.bellmann.model.bo.RemoteEquipmentBO; import com.bellmann.model.bo.RemoteEquipmentBO;
import com.bellmann.model.dto.OperationTask;
import com.bellmann.model.entity.*; import com.bellmann.model.entity.*;
import com.bellmann.model.form.EquipmentAddForm; import com.bellmann.model.form.*;
import com.bellmann.model.form.EquipmentDetailForm;
import com.bellmann.model.form.PrivateProfileForm;
import com.bellmann.model.form.UnBindingForm;
import com.bellmann.model.query.DevOuiSnoQuery; import com.bellmann.model.query.DevOuiSnoQuery;
import com.bellmann.model.query.SelectQuery; import com.bellmann.model.query.SelectQuery;
import com.bellmann.model.vo.*; import com.bellmann.model.vo.*;
@ -48,11 +47,13 @@ import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.*;
import java.util.Date; import java.util.concurrent.TimeUnit;
import java.util.List; import java.util.regex.Matcher;
import java.util.Map; import java.util.regex.Pattern;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Service @Service
@ -93,6 +94,10 @@ public class DeviceStaticServiceImpl implements DeviceStaticService {
private final DeviceServiceArgsMapper deviceServiceArgsMapper; private final DeviceServiceArgsMapper deviceServiceArgsMapper;
private final OperateResult2Mapper operateResult2Mapper;
private final DeviceLogMapper deviceLogMapper;
@Override @Override
public Page<EquipmentVO> resourcePage(SelectQuery query) { public Page<EquipmentVO> resourcePage(SelectQuery query) {
@ -500,4 +505,375 @@ public class DeviceStaticServiceImpl implements DeviceStaticService {
} }
return result; return result;
} }
@Override
public Long remoteIpPing(PingForm ping) {
long taskId = 0;
DOperTask2DetailStruct detailStruct = new DOperTask2DetailStruct();
DOperTask2Struct operTaskStruct = new DOperTask2Struct();
operTaskStruct.devId = ping.getDeviceId();
operTaskStruct.operName = RemoteOperateMsgEnum.IP_PING.getValue();
operTaskStruct.operTaskCreateTime = (new Date()).getTime();
operTaskStruct.operTaskDesc = RemoteOperateMsgEnum.IP_PING.getLabel();
operTaskStruct.operTaskId = Utils.LONG_NULL;
operTaskStruct.userName = SecurityUtils.getUsername();
detailStruct.operTask = operTaskStruct;
DOperTaskArgsStruct[] argsStruct = new DOperTaskArgsStruct[4];
argsStruct[0] = new DOperTaskArgsStruct();
argsStruct[0].argsName = "host";
argsStruct[0].argsValue = ping.getHost() == null ? "8.8.8.8" : ping.getHost();
argsStruct[0].operTaskId = Utils.LONG_NULL;
argsStruct[1] = new DOperTaskArgsStruct();
argsStruct[1].argsName = "pingNumber";
argsStruct[1].argsValue = ping.getPingNumber() == null ? "3" : ping.getPingNumber();
argsStruct[1].operTaskId = Utils.LONG_NULL;
argsStruct[2] = new DOperTaskArgsStruct();
argsStruct[2].argsName = "packSize";
argsStruct[2].argsValue = ping.getPackSize() == null ? "32" : ping.getPackSize();
argsStruct[2].operTaskId = Utils.LONG_NULL;
argsStruct[3] = new DOperTaskArgsStruct();
argsStruct[3].argsName = "pingInterface";
argsStruct[3].argsValue = ping.getPingInterface() == null ? "INTERNET" : ping.getPingInterface();
argsStruct[3].operTaskId = Utils.LONG_NULL;
detailStruct.operTaskArgsList = argsStruct;
DOperTask2DetailStructHolder detailStructHolder = new DOperTask2DetailStructHolder(
detailStruct);
int result = OAMManager.sendDeviceOper2Task(detailStructHolder);
if (result!=0){
throw new BusinessException(ResultCode.OAM_INTERFACE_ERROR);
}
taskId = detailStructHolder.value.operTask.operTaskId;
return taskId;
}
@Override
public Long remoteDeviceMonitor(DeviceMonitorForm form) {
DOperTask2DetailStruct detailStruct = new DOperTask2DetailStruct();
DOperTask2Struct operTaskStruct = new DOperTask2Struct();
operTaskStruct.devId = form.getDevId();
operTaskStruct.operName = RemoteOperateMsgEnum.DEVICE_MONITOR.getValue();
operTaskStruct.operTaskCreateTime = (new Date()).getTime();
operTaskStruct.operTaskDesc = RemoteOperateMsgEnum.DEVICE_MONITOR.getLabel();
operTaskStruct.operTaskId = Utils.LONG_NULL;
operTaskStruct.userName = SecurityUtils.getUsername();
detailStruct.operTask = operTaskStruct;
DOperTaskArgsStruct[] argsStruct = new DOperTaskArgsStruct[2];
argsStruct[0] = new DOperTaskArgsStruct();
argsStruct[0].argsName = "MONITOR_PERIOD";
argsStruct[0].argsValue = String.valueOf(Long.parseLong(form
.getMonitorPeriod()) * 1000);
argsStruct[0].operTaskId = Utils.LONG_NULL;
argsStruct[1] = new DOperTaskArgsStruct();
argsStruct[1].argsName = "MONITOR_INTERVAL";
argsStruct[1].argsValue = String.valueOf(Long.parseLong(form
.getMonitorInterval()) * 1000);
argsStruct[1].operTaskId = Utils.LONG_NULL;
detailStruct.operTaskArgsList = argsStruct;
DOperTask2DetailStructHolder detailStructHolder = new DOperTask2DetailStructHolder(
detailStruct);
int result = OAMManager.sendDeviceOper2Task(detailStructHolder);
if (result!=0){
throw new BusinessException(ResultCode.OAM_INTERFACE_ERROR);
}
return detailStructHolder.value.operTask.operTaskId;
}
@Override
public Long remoteCheckConnType(Long devId) {
DOperTask2DetailStruct detailStruct = new DOperTask2DetailStruct();
DOperTask2Struct operTaskStruct = new DOperTask2Struct();
operTaskStruct.devId = devId;
operTaskStruct.operName = RemoteOperateMsgEnum.GetConnType.getValue();
operTaskStruct.operTaskCreateTime = (new Date()).getTime();
operTaskStruct.operTaskDesc = RemoteOperateMsgEnum.GetConnType.getLabel();
operTaskStruct.operTaskId = -999;
operTaskStruct.userName = "system";
detailStruct.operTask = operTaskStruct;
DOperTaskArgsStruct[] argsStruct = new DOperTaskArgsStruct[1];
argsStruct[0] = new DOperTaskArgsStruct();
argsStruct[0].argsName = "";
argsStruct[0].argsValue = "";
argsStruct[0].operTaskId = operTaskStruct.operTaskId;
detailStruct.operTaskArgsList = argsStruct;
DOperTask2DetailStructHolder detailStructHolder = new DOperTask2DetailStructHolder(detailStruct);
int result = OAMManager.sendDeviceOper2Task(detailStructHolder);
if (result!=0){
throw new BusinessException(ResultCode.OAM_INTERFACE_ERROR);
}
return detailStructHolder.value.operTask.operTaskId;
}
@Override
public String remoteConnType(Long taskId,Long devId) {
boolean found = true;
int attempt = 0;
String connType = "v不在线";
while (attempt < 5 && found) {
OperateResult2 operateResult2 = operateResult2Mapper.selectOne(
new QueryWrapper<OperateResult2>()
.eq("oper_task_id", taskId)
);
if (operateResult2 == null) {
throw new BusinessException(ResultCode.TASK_NOT_FOUND);
}
String state = operateResult2.getResultState();
if (OperateTaskStateEnum.NOT_EXECUTED.getValue().equals(state)) {
throw new BusinessException(ResultCode.TASK_NOT_EXE);
}
if (!OperateTaskStateEnum.ONGOING.getValue().equals(state)) {
if (OperateTaskStateEnum.THE_EXECUTION_WAS_SUCCESSFUL.getValue().equals(state)){
String desc = deviceLogMapper.getTaskResultByTaskId(taskId,RemoteOperateMsgEnum.GetConnType.getValue());
String regex = SystemConstants.CONN_TYPE_REGEX;
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(desc);
String connectionType = "";
if (matcher.find()){
connectionType = matcher.group(1).trim();
if ("IP_Routed".equals(connectionType)){
connType = SystemConstants.CONN_TYPE_IP_ROUTED;
}else if ("PPPoE_Bridged".equals(connectionType)){
connType = SystemConstants.CONN_TYPE_PPPOE_BRIDGE;
}
}else {
connType = "v不在线";
}
}else {
connType = "v不在线";
}
found = false;
}
if(found) {
try {
TimeUnit.MILLISECONDS.sleep(SystemConstants.TASK_TIME_OUT_CONST2);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
connType = "v不在线";
return connType;
}
}
attempt++;
}
return connType;
}
@Override
public Long TR143Speed(Long devId, String downloadUrl) {
OperationTask operationTask = new OperationTask();
operationTask.setDeviceId(devId);
operationTask.setOperationName(RemoteOperateMsgEnum.SET_TR143_PARAMETER.getValue());
operationTask.setOperationTaskDescription("SetTR143Parameter test");
operationTask.setCreateUser(SecurityUtils.getUsername());
DOperTask2DetailStruct detailStruct = new DOperTask2DetailStruct();
DOperTask2Struct operTaskStruct = new DOperTask2Struct();
operTaskStruct.devId = operationTask.getDeviceId() == 0 ? Utils.LONG_NULL : operationTask.getDeviceId();
operTaskStruct.operName = operationTask.getOperationName() == null ? "" : operationTask.getOperationName();
operTaskStruct.operTaskCreateTime = (new Date()).getTime();
operTaskStruct.operTaskDesc = RemoteOperateMsgEnum.SET_TR143_PARAMETER.getLabel();
operTaskStruct.operTaskId = operationTask.getOperationTaskId() == 0 ? Utils.LONG_NULL : operationTask
.getOperationTaskId();
operTaskStruct.userName = operationTask.getCreateUser() == null ? "" : operationTask.getCreateUser();
detailStruct.operTask = operTaskStruct;
DOperTaskArgsStruct[] argsStruct = new DOperTaskArgsStruct[3];
argsStruct[0] = new DOperTaskArgsStruct();
argsStruct[0].argsName = "speed_source";
argsStruct[0].argsValue = "1";
argsStruct[0].operTaskId = operTaskStruct.operTaskId;
argsStruct[1] = new DOperTaskArgsStruct();
argsStruct[1].argsName = "downloadUrl";
argsStruct[1].argsValue = downloadUrl;
argsStruct[1].operTaskId = operTaskStruct.operTaskId;
argsStruct[2] = new DOperTaskArgsStruct();
argsStruct[2].argsName = "time";
argsStruct[2].argsValue = "5"; //默认测速时间
argsStruct[2].operTaskId = operTaskStruct.operTaskId;
detailStruct.operTaskArgsList = argsStruct;
DOperTask2DetailStructHolder detailStructHolder = new DOperTask2DetailStructHolder(detailStruct);
int result = OAMManager.sendDeviceOper2Task(detailStructHolder);
if (result!=0){
throw new BusinessException(ResultCode.OAM_INTERFACE_ERROR);
}
return detailStructHolder.value.operTask.operTaskId;
}
@Override
public RemoteOperateResult checkTR143Speed(Long taskId, Long devId) {
boolean found = true;
int attempt = 0;
RemoteOperateResult result= new RemoteOperateResult();
while (attempt < 5 && found) {
OperateResult2 operateResult2 = operateResult2Mapper.selectOne(
new QueryWrapper<OperateResult2>()
.eq("oper_task_id", taskId)
);
if (operateResult2 == null) {
throw new BusinessException(ResultCode.TASK_NOT_FOUND);
}
String state = operateResult2.getResultState();
if (OperateTaskStateEnum.NOT_EXECUTED.getValue().equals(state)) {
result.setResultState(OperateTaskStateEnum.NOT_EXECUTED.getValue());
result.setResultCode(SystemConstants.SPEED_FAIL);
return result;
}
if (!OperateTaskStateEnum.ONGOING.getValue().equals(state)) {
if (OperateTaskStateEnum.THE_EXECUTION_WAS_SUCCESSFUL.getValue().equals(state)){
result.setResultState(OperateTaskStateEnum.THE_EXECUTION_WAS_SUCCESSFUL.getValue());
result.setResultCode(OperateTaskStateEnum.THE_EXECUTION_WAS_SUCCESSFUL.getLabel());
}else {
result.setResultState(state);
result.setResultCode(SystemConstants.SPEED_FAIL);
}
found = false;
}
if(found) {
try {
TimeUnit.MILLISECONDS.sleep(SystemConstants.TASK_TIME_OUT_CONST2);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
attempt++;
}
return result;
}
@Override
public RemoteOperateResult checkTr143SpeedResult(Long devId, Long taskId) {
boolean found = true;
int attempt = 0;
RemoteOperateResult result= new RemoteOperateResult();
while (attempt < 5 && found) {
OperateResult2 operateResult2 = operateResult2Mapper.selectOne(
new QueryWrapper<OperateResult2>()
.eq("oper_task_id", taskId)
);
if (operateResult2 == null) {
throw new BusinessException(ResultCode.TASK_NOT_FOUND);
}
String state = operateResult2.getResultState();
if (OperateTaskStateEnum.NOT_EXECUTED.getValue().equals(state)) {
result.setResultState(OperateTaskStateEnum.NOT_EXECUTED.getValue());
result.setResultCode(SystemConstants.SPEED_FAIL);
return result;
}
if (!OperateTaskStateEnum.ONGOING.getValue().equals(state)) {
if (OperateTaskStateEnum.THE_EXECUTION_WAS_SUCCESSFUL.getValue().equals(state)){
String desc = deviceLogMapper.getTaskResultByTaskId(taskId,RemoteOperateMsgEnum.DOWNLOAD_DIAGNOSTICS_QUERY.getValue());
String regex = SystemConstants.DOWNLOAD_INFO_REGEX;
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(desc);
if (matcher.find()){
String input = matcher.group(1).trim();
DownloadInfo downloadInfo = parseFromString(input);
String state1 = downloadInfo.getState();
if (state1.equalsIgnoreCase("Completed")) {
Long eomTime = downloadInfo.getEomTime();
Long bomTime = downloadInfo.getBomTime();
Long totalBytesReceived = downloadInfo.getTotalBytesReceived();
long speedResult=8*1000*totalBytesReceived/(eomTime-bomTime)/1024/1024;
BigDecimal value = new BigDecimal(speedResult);
String speed = value.divide(new BigDecimal(1), 3, RoundingMode.HALF_UP).toString();
result.setResultState(state);
result.setResultCode(speed);
}else {
result.setResultState("5");
result.setResultCode(SystemConstants.SPEED_FAIL);
}
}
}else {
result.setResultState(state);
result.setResultCode(SystemConstants.SPEED_FAIL);
}
found = false;
}
if(found) {
try {
TimeUnit.MILLISECONDS.sleep(SystemConstants.TASK_TIME_OUT_CONST2);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
attempt++;
}
return result;
}
private static DownloadInfo parseFromString(String input) {
DownloadInfo downloadInfo = new DownloadInfo();
Map<String, String> properties = new HashMap<>();
// 使用"^"作为分隔符分割字符串,并填充到Map中
for (String part : input.split("\\^")) {
String[] keyValue = part.split("=");
if (keyValue.length == 2) {
properties.put(keyValue[0], keyValue[1]);
}
}
// 从Map中提取值并设置到DownloadInfo对象中
downloadInfo.setState(properties.getOrDefault("state", null));
downloadInfo.setRomTime(properties.getOrDefault("romTime", null));
downloadInfo.setBomTime(parseLong(properties.get("bomTime")));
downloadInfo.setEomTime(parseLong(properties.get("eomTime")));
downloadInfo.setTestBytesReceived(parseLong(properties.get("testBytesReceived")));
downloadInfo.setTotalBytesReceived(parseLong(properties.get("totalBytesReceived")));
downloadInfo.setTcpOpenRequestTime(parseLong(properties.get("tcpOpenRequestTime")));
downloadInfo.setTcpOpenResponseTime(parseLong(properties.get("tcpOpenResponseTime")));
return downloadInfo;
}
private static Long parseLong(String value) {
if (value == null || "null".equals(value)) {
return null;
}
return Long.parseLong(value);
}
@Override
public Long remoteOpenRegister(Long devId) {
long taskId = 0;
DOperTask2DetailStruct detailStruct = new DOperTask2DetailStruct();
DOperTask2Struct operTaskStruct = new DOperTask2Struct();
operTaskStruct.devId = devId;
operTaskStruct.operName = RemoteOperateMsgEnum.X_REGISTER.getValue();
operTaskStruct.operTaskCreateTime = (new Date()).getTime();
operTaskStruct.operTaskDesc = RemoteOperateMsgEnum.X_REGISTER.getLabel();
operTaskStruct.operTaskId = Utils.LONG_NULL;
operTaskStruct.userName = SecurityUtils.getUsername();
detailStruct.operTask = operTaskStruct;
DOperTaskArgsStruct[] argsStruct = new DOperTaskArgsStruct[2];
argsStruct[0] = new DOperTaskArgsStruct();
argsStruct[0].argsName = "BIND_STATUS";
argsStruct[0].argsValue = "99";
argsStruct[0].operTaskId = Utils.LONG_NULL;
argsStruct[1] = new DOperTaskArgsStruct();
argsStruct[1].argsName = "BIND_RESULT";
argsStruct[1].argsValue = "99";
argsStruct[1].operTaskId = Utils.LONG_NULL;
detailStruct.operTaskArgsList = argsStruct;
DOperTask2DetailStructHolder detailStructHolder = new DOperTask2DetailStructHolder(
detailStruct);
int result = OAMManager.sendDeviceOper2Task(detailStructHolder);
if (result!=0){
throw new BusinessException(ResultCode.OAM_INTERFACE_ERROR);
}
return detailStructHolder.value.operTask.operTaskId;
}
} }

@ -28,6 +28,7 @@ import com.bellmann.model.query.DeviceTypeToVerQuery;
import com.bellmann.model.vo.DeviceServiceVO; import com.bellmann.model.vo.DeviceServiceVO;
import com.bellmann.model.vo.DeviceTypeToVerVO; import com.bellmann.model.vo.DeviceTypeToVerVO;
import com.bellmann.model.vo.FileRecordVO; import com.bellmann.model.vo.FileRecordVO;
import com.bellmann.model.vo.SoftVersionUpgradeVO;
import com.bellmann.security.util.SecurityUtils; import com.bellmann.security.util.SecurityUtils;
import com.bellmann.service.DeviceTypeVerService; import com.bellmann.service.DeviceTypeVerService;
import com.bellmann.service.FileOptionService; import com.bellmann.service.FileOptionService;
@ -374,4 +375,10 @@ public class DeviceTypeVerServiceImpl implements DeviceTypeVerService {
} }
return Result.success(); return Result.success();
} }
@Override
public List<SoftVersionUpgradeVO> upgradeSoftVerTable(Long devId) {
return deviceTypeVerMapper.upgradeSoftVerTable(devId);
}
} }

@ -125,6 +125,7 @@ public class FileOptionServiceImpl implements FileOptionService {
//文件存放地址 //文件存放地址
//文件在FTP服务器所在文件夹目录 //文件在FTP服务器所在文件夹目录
String dirPath = fileServer.getFtpRootDir() + String.format(IBaseEnum.getLabelByValue(fileType,FileUrlEnum.class),fileType)+System.currentTimeMillis()/1000; String dirPath = fileServer.getFtpRootDir() + String.format(IBaseEnum.getLabelByValue(fileType,FileUrlEnum.class),fileType)+System.currentTimeMillis()/1000;
log.info("dirPath:{}",dirPath);
try(InputStream in = file.getInputStream()) { try(InputStream in = file.getInputStream()) {
boolean upload = FTPUtils.upload(fileServer, newFileName, dirPath, in); boolean upload = FTPUtils.upload(fileServer, newFileName, dirPath, in);
if (!upload){ if (!upload){

@ -34,4 +34,13 @@ public class OperateTask2ServiceImpl implements OperateTask2Service {
Page<OperateTask2TableBO> boPage = operateTask2Mapper.tablePage(page,devId); Page<OperateTask2TableBO> boPage = operateTask2Mapper.tablePage(page,devId);
return PageResult.success(operateTask2Converter.pageBo2PageVo(boPage)); return PageResult.success(operateTask2Converter.pageBo2PageVo(boPage));
} }
@Override
public PageResult<OperateTask2TableVO> taskPage(BasePageQuery query) {
int pageSize = query.getPageSize();
int pageNum = query.getPageNum();
Page<OperateTask2TableBO> page = new Page<>(pageNum,pageSize);
Page<OperateTask2TableBO> boPage = operateTask2Mapper.taskPage(page);
return PageResult.success(operateTask2Converter.pageBo2PageVo(boPage));
}
} }

@ -61,6 +61,17 @@ public class RemoteOperateTaskServiceImpl implements RemoteOperateTaskService {
return insertOperationTask(operationTask); return insertOperationTask(operationTask);
} }
@Override
public Long sendTaskByDevIdByFileId(Long devId, String createUser, Long fileId, String command) {
OperationTask operationTask = new OperationTask();
operationTask.setDeviceId(devId);
operationTask.setOperationName(command);
operationTask.setFileId(fileId.toString());
operationTask.setOperationTaskDescription("test");
operationTask.setCreateUser(createUser);
return insertOperationTask(operationTask);
}
@Override @Override
public long insertOperationTask(OperationTask operationTask) { public long insertOperationTask(OperationTask operationTask) {
DOperTask2DetailStruct detailStruct = new DOperTask2DetailStruct(); DOperTask2DetailStruct detailStruct = new DOperTask2DetailStruct();

@ -0,0 +1,48 @@
package com.bellmann.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.bellmann.common.exception.BusinessException;
import com.bellmann.common.result.ResultCode;
import com.bellmann.mapper.DeviceStaticMapper;
import com.bellmann.mapper.SpeedServerMapper;
import com.bellmann.model.entity.DeviceStatic;
import com.bellmann.service.SpeedServerService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* <p>
* 服务器信息 服务实现类
* </p>
*
* @author 李小林
* @since 2024-07-15
*/
@Service
@RequiredArgsConstructor
public class SpeedServerServiceImpl implements SpeedServerService {
private final SpeedServerMapper speedServerMapper;
private final DeviceStaticMapper deviceStaticMapper;
@Override
public List<String> downloadUrls(Long devId) {
Long regionAreaId = deviceStaticMapper.selectOne(new QueryWrapper<DeviceStatic>()
.eq("dev_id", devId)
.select("region_area_id")
).getRegionAreaId();
if (regionAreaId==null){
throw new BusinessException(ResultCode.DOMAIN_IS_NULL);
}
List<String> list;
if (regionAreaId!=0){
String areaId = regionAreaId.toString().substring(0, 2);
list = speedServerMapper.findDownloadUrlByDomainId(areaId);
}else {
list = speedServerMapper.findDownloadUrlByRootDomainId(regionAreaId);
}
return list;
}
}

@ -15,4 +15,18 @@
dev_id, oper_time, oper_desc, oper_name dev_id, oper_time, oper_desc, oper_name
</sql> </sql>
<select id="getTaskResultByTaskId" resultType="java.lang.String">
SELECT
aa.oper_desc
FROM
itms_device_log aa,
itms_oper_result_2 bb
WHERE
aa.dev_id = bb.dev_id
AND bb.oper_task_id = #{taskId}
AND aa.oper_name = #{operateName}
ORDER BY
oper_time DESC
limit 1
</select>
</mapper> </mapper>

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bellmann.mapper.DeviceSpeedInfoMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.bellmann.model.entity.DeviceSpeedInfo">
<id column="speed_id" property="speedId" />
<result column="loid" property="loid" />
<result column="dev_id" property="devId" />
<result column="dev_sno" property="devSno" />
<result column="speed_mode" property="speedMode" />
<result column="speed_time" property="speedTime" />
<result column="speed_source" property="speedSource" />
<result column="speed_operator" property="speedOperator" />
<result column="rate" property="rate" />
<result column="unit" property="unit" />
<result column="speed_starttime" property="speedStarttime" />
<result column="speed_endtime" property="speedEndtime" />
<result column="exctime" property="exctime" />
<result column="exctime1" property="exctime1" />
<result column="exctime2" property="exctime2" />
<result column="exctime3" property="exctime3" />
<result column="exctime4" property="exctime4" />
<result column="url" property="url" />
<result column="dev_pppoe" property="devPppoe" />
<result column="sysid" property="sysid" />
<result column="syspass" property="syspass" />
<result column="bandwidth" property="bandwidth" />
<result column="areaid" property="areaid" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
speed_id, loid, dev_id, dev_sno, speed_mode, speed_time, speed_source, speed_operator, rate, unit, speed_starttime, speed_endtime, exctime, exctime1, exctime2, exctime3, exctime4, url, dev_pppoe, sysid, syspass, bandwidth, areaid
</sql>
<select id="getSpeedMaxRate" resultType="java.lang.String">
SELECT MAX
( RATE )
FROM
ITMS_DEVICE_SPEED_INFO
WHERE
LOID = #{logicId}
AND DEV_ID = #{devId}
</select>
</mapper>

@ -311,4 +311,15 @@
ITMS_DEVICE_STATIC.DEV_ID = #{devId} ITMS_DEVICE_STATIC.DEV_ID = #{devId}
limit 1 limit 1
</select> </select>
<select id="getLogicIdByDevId" resultType="java.lang.String">
SELECT
B.USER_SN_NO
FROM
ITMS_DEVICE_STATIC A,
ITMS_DEVICE_STATIC_DETAIL B
WHERE
A.DEV_ID = B.DEV_ID
AND A.DEV_ID = #{devId}
</select>
</mapper> </mapper>

@ -123,4 +123,18 @@
AND DEV_TYPE_VER_STATUS = '1' AND DEV_TYPE_VER_STATUS = '1'
LIMIT 1 LIMIT 1
</select> </select>
<select id="upgradeSoftVerTable" resultType="com.bellmann.model.vo.SoftVersionUpgradeVO">
SELECT
cc.file_id,
bb.soft_ver,
aa.type_and_ver_id,
bb.dev_type_ver_desc
FROM
itms_device_static aa
INNER JOIN itms_device_type_ver bb ON aa.type_and_ver_id = bb.type_and_ver_id
INNER JOIN itms_file_dev_type_ver_map cc ON bb.type_and_ver_id = cc.type_and_ver_id
WHERE
aa.dev_id = #{devId}
</select>
</mapper> </mapper>

@ -54,5 +54,6 @@
ITMS_FILE.FILE_ID = ITMS_FILE_DEV_MAP.FILE_ID ITMS_FILE.FILE_ID = ITMS_FILE_DEV_MAP.FILE_ID
AND ITMS_FILE_DEV_MAP.DEV_ID = #{devId} AND ITMS_FILE_DEV_MAP.DEV_ID = #{devId}
AND ITMS_FILE.FILE_TYPE = #{fileType} AND ITMS_FILE.FILE_TYPE = #{fileType}
order by ITMS_FILE.file_create_time desc
</select> </select>
</mapper> </mapper>

@ -102,4 +102,19 @@
ITMS_OPER_TASK_2.OPER_TASK_CREATE_TIME DESC ITMS_OPER_TASK_2.OPER_TASK_CREATE_TIME DESC
limit 1 limit 1
</select> </select>
<select id="taskPage" resultType="com.bellmann.model.bo.OperateTask2TableBO">
SELECT
aa.oper_task_id,
aa.dev_id,
aa.user_name,
aa.oper_task_desc,
aa.oper_task_create_time,
bb.result_state,
cc.dev_ad_no
FROM
itms_oper_task_2 aa
INNER JOIN itms_oper_result_2 bb ON aa.oper_task_id = bb.oper_task_id
INNER JOIN itms_device_static cc ON aa.dev_id = cc.dev_id
order by aa.oper_task_create_time desc
</select>
</mapper> </mapper>

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bellmann.mapper.SpeedServerMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.bellmann.model.entity.SpeedServer">
<id column="serv_id" property="servId" />
<result column="serv_name" property="servName" />
<result column="support_mode" property="supportMode" />
<result column="ip" property="ip" />
<result column="port" property="port" />
<result column="user_name" property="userName" />
<result column="passwd" property="passwd" />
<result column="groupid" property="groupid" />
<result column="remark" property="remark" />
<result column="downloadurl" property="downloadurl" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
serv_id, serv_name, support_mode, ip, port, user_name, passwd, groupid, remark, downloadurl
</sql>
<select id="findDownloadUrlByDomainId" resultType="java.lang.String">
SELECT
DOWNLOADURL
FROM
ITMS_SPEED_SERVER
WHERE
groupid = ( SELECT DISTINCT PARENTGROUPID FROM GROUP_INFO_TAB WHERE CAST ( groupid AS VARCHAR ) LIKE CONCAT('',#{areaId},'%') AND PARENTGROUPID != '0' )
</select>
<select id="findDownloadUrlByRootDomainId" resultType="java.lang.String">
SELECT
DOWNLOADURL
FROM
ITMS_SPEED_SERVER
WHERE
groupid = #{regionAreaId}
</select>
</mapper>
Loading…
Cancel
Save