feat: 远程操作

master
李小林 8 months ago
parent 9ece140cdb
commit 28d7ad2c73
  1. 1
      src/main/java/com/bellmann/BellmannBootApplication.java
  2. 5
      src/main/java/com/bellmann/common/constant/SystemConstants.java
  3. 44
      src/main/java/com/bellmann/common/enums/RemoteOperateMsgEnum.java
  4. 3
      src/main/java/com/bellmann/common/result/ResultCode.java
  5. 26
      src/main/java/com/bellmann/common/util/CommonUtils.java
  6. 92
      src/main/java/com/bellmann/controller/DeviceStaticController.java
  7. 46
      src/main/java/com/bellmann/controller/OperateResultArgsController.java
  8. 6
      src/main/java/com/bellmann/controller/OrderInfoController.java
  9. 2
      src/main/java/com/bellmann/controller/TypeVerExtController.java
  10. 2
      src/main/java/com/bellmann/mapper/DeviceStaticDetailMapper.java
  11. 3
      src/main/java/com/bellmann/mapper/DeviceStaticMapper.java
  12. 2
      src/main/java/com/bellmann/mapper/OperateResult2Mapper.java
  13. 18
      src/main/java/com/bellmann/mapper/OperateResultArgsMapper.java
  14. 5
      src/main/java/com/bellmann/mapper/OperateTask2Mapper.java
  15. 2
      src/main/java/com/bellmann/mapper/OrderInfoMapper.java
  16. 54
      src/main/java/com/bellmann/model/dto/DeviceDetail.java
  17. 22
      src/main/java/com/bellmann/model/dto/OperationResultArguments.java
  18. 52
      src/main/java/com/bellmann/model/dto/OperationTask.java
  19. 159
      src/main/java/com/bellmann/model/dto/RemoteOperation.java
  20. 6
      src/main/java/com/bellmann/model/entity/FileServer.java
  21. 34
      src/main/java/com/bellmann/model/entity/OperateResultArgs.java
  22. 2
      src/main/java/com/bellmann/model/entity/TypeVerExt.java
  23. 2
      src/main/java/com/bellmann/model/form/CapabilityForm.java
  24. 9
      src/main/java/com/bellmann/model/query/DeviceOrderQuery.java
  25. 2
      src/main/java/com/bellmann/model/vo/CapabilityVO.java
  26. 17
      src/main/java/com/bellmann/model/vo/DeviceLinkVO.java
  27. 15
      src/main/java/com/bellmann/model/vo/RemoteOperateResult.java
  28. 2
      src/main/java/com/bellmann/runner/ServiceManagerRunner.java
  29. 10
      src/main/java/com/bellmann/runner/UIService.java
  30. 19
      src/main/java/com/bellmann/service/OperateResultArgsService.java
  31. 2
      src/main/java/com/bellmann/service/OrderInfoService.java
  32. 15
      src/main/java/com/bellmann/service/RemoteOperateTaskService.java
  33. 2
      src/main/java/com/bellmann/service/TypeVerExtService.java
  34. 23
      src/main/java/com/bellmann/service/impl/DeviceLogServiceImpl.java
  35. 62
      src/main/java/com/bellmann/service/impl/OperateResultArgsServiceImpl.java
  36. 15
      src/main/java/com/bellmann/service/impl/OrderInfoServiceImpl.java
  37. 205
      src/main/java/com/bellmann/service/impl/RemoteOperateTaskServiceImpl.java
  38. 4
      src/main/java/com/bellmann/service/impl/TypeVerExtServiceImpl.java
  39. 17
      src/main/resources/mapper/DeviceStaticDetailMapper.xml
  40. 32
      src/main/resources/mapper/DeviceStaticMapper.xml
  41. 17
      src/main/resources/mapper/OperateResult2Mapper.xml
  42. 18
      src/main/resources/mapper/OperateResultArgsMapper.xml
  43. 42
      src/main/resources/mapper/OperateTask2Mapper.xml
  44. 7
      src/main/resources/mapper/OrderInfoMapper.xml

@ -1,6 +1,5 @@
package com.bellmann; package com.bellmann;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;

@ -34,4 +34,9 @@ public interface SystemConstants {
public static final String CONN_TYPE_PPPOE_BRIDGE = "桥接"; public static final String CONN_TYPE_PPPOE_BRIDGE = "桥接";
public static final String CONN_TYPE_IP_ROUTED = "路由"; public static final String CONN_TYPE_IP_ROUTED = "路由";
public static final String CONN_TYPE = "LAST_rg_mode"; public static final String CONN_TYPE = "LAST_rg_mode";
public static final long TASK_TIME_OUT_CONST = 60 * 1000;
public static final long TASK_TIME_OUT_CONST1 = 6 * 1000;
public static final String NULL_RESULT = "操作进行中...";
} }

@ -0,0 +1,44 @@
package com.bellmann.common.enums;
import com.bellmann.common.base.IBaseEnum;
import lombok.Getter;
public enum RemoteOperateMsgEnum implements IBaseEnum<String> {
GET_OBJECT_INFOS("GetObjectInfos", "设备浏览"),
IP_PING("ipping", "IP Ping 测试"),
DEVICE_MONITOR("devicemonitor", "设备监控"),
SET_PARAMETER_VALUES("SetParameterValues", "设置设备参数值"),
GET_PARAMETER_VALUES("GetParameterValues", "获取设备参数值"),
SET_PARAMETER_ATTRIBUTES("SetParameterAttributes", "设置设备参数属性"),
GET_PARAMETER_ATTRIBUTES("GetParameterAttributes", "获取设备参数属性"),
ADD_OBJECT("AddObject", "添加设备参数实例"),
DELETE_OBJECT("DeleteObject", "删除设备参数实例"),
DOWNLOAD("Download", "下载文件"),
UPLOAD("Upload", "上传文件"),
REBOOT("Reboot", "重启设备"),
TOUCH_DEVICE("TouchDevice", "设备在线测试"),
UPLOAD_CONFIG("UploadConfig", "设备配置文件上传"),
DOWNLOAD_CONFIG("DownloadConfig", "设备配置文件下发"),
DSL_LOOP_DIAGNOSTICS("DslLoopDiagnostics", "DslLoop诊断"),
ATMF5_LOOP_BACK_DIAGNOSTICS("ATMF5LoopbackDiagnostics", "ATMF5Loopback诊断"),
DOWNLOAD_SOFT_VER_FILE("DownloadSoftVerFile", "设备软件版本升级"),
FACTORY_RESET("FactoryReset", "恢复设备出厂设置"),
UPLOAD_LOG("UploadLog", "获取设备日志文件"),
BASIC_PARAMETER("basicparameter","获取设备链路信息")
;
@Getter
private String value;
@Getter
private String label;
RemoteOperateMsgEnum(String value, String label) {
this.value = value;
this.label = label;
}
}

@ -116,7 +116,8 @@ public enum ResultCode implements IResultCode, Serializable {
DEVICE_BINDING_FAILED("F0024","设备更换失败"), DEVICE_BINDING_FAILED("F0024","设备更换失败"),
THE_PARAMETER_CANNOT_BE_EMPTY("F0025","参数不能为空" ), THE_PARAMETER_CANNOT_BE_EMPTY("F0025","参数不能为空" ),
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","查询设备在线状态出错" );
@Override @Override
public String getCode() { public String getCode() {

@ -1,5 +1,13 @@
package com.bellmann.common.util; package com.bellmann.common.util;
import com.bellmann.model.dto.ParamInfo;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.util.ArrayList;
import java.util.List;
import java.util.Random; import java.util.Random;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@ -25,4 +33,22 @@ public class CommonUtils {
// 判断是否找到匹配 // 判断是否找到匹配
return matcher.find(); return matcher.find();
} }
public static List<ParamInfo> parseHtmlToParamInfo(String html){
List<ParamInfo> list = new ArrayList<>();
Document doc = Jsoup.parse(html);
Element table = doc.select("table.tableFormTable").first();
assert table != null;
Elements rows = table.select("tr");
for (int i = 2; i < rows.size(); i++) {
ParamInfo paramInfo = new ParamInfo();
Elements cols = rows.get(i).select("td");
paramInfo.setParameterName(cols.get(0).text().trim());
paramInfo.setActualValue(cols.get(1).text().trim());
paramInfo.setRemarks(cols.get(2).text().trim());
list.add(paramInfo);
}
return list;
}
} }

@ -1,80 +1,96 @@
package com.bellmann.controller; 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.enums.RemoteOperateMsgEnum;
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.model.form.EquipmentAddForm; import com.bellmann.model.form.EquipmentAddForm;
import com.bellmann.model.form.EquipmentDetailForm; import com.bellmann.model.form.EquipmentDetailForm;
import com.bellmann.model.form.PrivateProfileForm; import com.bellmann.model.form.PrivateProfileForm;
import com.bellmann.model.form.UnBindingForm; 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.*;
import com.bellmann.model.vo.RemoteDevInfoVO; import com.bellmann.plugin.dupsubmit.annotation.PreventDuplicateSubmit;
import com.bellmann.model.vo.RemoteEquipmentVO; import com.bellmann.security.util.SecurityUtils;
import com.bellmann.service.DeviceStaticService; import com.bellmann.service.DeviceStaticService;
import com.bellmann.service.OperateResultArgsService;
import com.bellmann.service.RemoteOperateTaskService;
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;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.TimeUnit;
@Tag(name = "16.设备管理") @Tag(name = "16.设备管理")
@RestController @RestController
@RequiredArgsConstructor @RequiredArgsConstructor
@RequestMapping("/api/equipment/v1") @RequestMapping("/api/equipment/v1")
@Slf4j
public class DeviceStaticController { public class DeviceStaticController {
private final DeviceStaticService deviceStaticService; private final DeviceStaticService deviceStaticService;
private final RemoteOperateTaskService remoteOperateTaskService;
private final OperateResultArgsService operateResultArgsService;
//--------------资源管理API开始-------------------- //--------------资源管理API开始--------------------
@PostMapping("resource-page") @PostMapping("resource-page")
@Operation(summary = "资源管理-设备管理表格接口") @Operation(summary = "资源管理-设备管理表格接口")
public PageResult<EquipmentVO> resourcePage(@RequestBody SelectQuery query){ public PageResult<EquipmentVO> resourcePage(@RequestBody SelectQuery query) {
Page<EquipmentVO> page = deviceStaticService.resourcePage(query); Page<EquipmentVO> page = deviceStaticService.resourcePage(query);
return PageResult.success(page); return PageResult.success(page);
} }
@GetMapping("resource-detail/{devId}") @GetMapping("resource-detail/{devId}")
@Operation(summary = "资源管理-设备管理详细信息接口") @Operation(summary = "资源管理-设备管理详细信息接口")
public Result<Map<Object,Object>> resourceDeviceDetail(@PathVariable Long devId){ public Result<Map<Object, Object>> resourceDeviceDetail(@PathVariable Long devId) {
Map<Object,Object> map = deviceStaticService.resourceDeviceDetail(devId); Map<Object, Object> map = deviceStaticService.resourceDeviceDetail(devId);
return Result.success(map); return Result.success(map);
} }
@PostMapping("resource-edit") @PostMapping("resource-edit")
@Operation(summary = "资源管理-设备详细信息保存接口") @Operation(summary = "资源管理-设备详细信息保存接口")
public Result<String> editResourceEquipment(@RequestBody EquipmentDetailForm form){ public Result<String> editResourceEquipment(@RequestBody EquipmentDetailForm form) {
return deviceStaticService.editResourceEquipment(form); return deviceStaticService.editResourceEquipment(form);
} }
@PostMapping("resource-add") @PostMapping("resource-add")
@Operation(summary = "资源管理-设备详细信息新增接口") @Operation(summary = "资源管理-设备详细信息新增接口")
public Result<Long> addResourceEquipment(@RequestBody EquipmentAddForm form){ public Result<Long> addResourceEquipment(@RequestBody EquipmentAddForm form) {
return deviceStaticService.addResourceEquipment(form); return deviceStaticService.addResourceEquipment(form);
} }
@PostMapping("private-file") @PostMapping("private-file")
@Operation(summary = "资源管理-设备详细信息-添加私有配置文件信息") @Operation(summary = "资源管理-设备详细信息-添加私有配置文件信息")
public Result<Long> privateProfile(@RequestBody PrivateProfileForm form){ public Result<Long> privateProfile(@RequestBody PrivateProfileForm form) {
return deviceStaticService.privateProfile(form); return deviceStaticService.privateProfile(form);
} }
@PutMapping("binding-custom/{devId}/{customId}") @PutMapping("binding-custom/{devId}/{customId}")
@Operation(summary = "资源管理-设备详细信息-绑定客户") @Operation(summary = "资源管理-设备详细信息-绑定客户")
public Result<String> bindingCustom(@PathVariable Long customId, @PathVariable Long devId){ public Result<String> bindingCustom(@PathVariable Long customId, @PathVariable Long devId) {
return deviceStaticService.bindingCustom(customId,devId); return deviceStaticService.bindingCustom(customId, devId);
} }
@PostMapping("delete-dev") @PostMapping("delete-dev")
@Operation(summary = "资源管理-删除设备") @Operation(summary = "资源管理-删除设备")
public Result<String> deleteDev(@RequestBody List<Long> ids){ public Result<String> deleteDev(@RequestBody List<Long> ids) {
return deviceStaticService.deleteDev(ids); return deviceStaticService.deleteDev(ids);
} }
@PutMapping("unbinding-custom/{devId}") @PutMapping("unbinding-custom/{devId}")
@Operation(summary = "资源管理-设备详细信息-解除用户绑定") @Operation(summary = "资源管理-设备详细信息-解除用户绑定")
public Result<String> unbindingCustom(@PathVariable Long devId){ public Result<String> unbindingCustom(@PathVariable Long devId) {
return deviceStaticService.unbindingCustom(devId); return deviceStaticService.unbindingCustom(devId);
} }
//--------------资源管理API结束-------------------- //--------------资源管理API结束--------------------
@ -82,7 +98,7 @@ public class DeviceStaticController {
//--------------工单管理查询devOuiSno分页开始--------------------------------- //--------------工单管理查询devOuiSno分页开始---------------------------------
@PostMapping("dev-oui-sno-page") @PostMapping("dev-oui-sno-page")
@Operation(summary = "工单管理查询devOuiSno") @Operation(summary = "工单管理查询devOuiSno")
public PageResult<String> devOuiSnoPage(@RequestBody DevOuiSnoQuery query){ public PageResult<String> devOuiSnoPage(@RequestBody DevOuiSnoQuery query) {
return deviceStaticService.devOuiSnoPage(query); return deviceStaticService.devOuiSnoPage(query);
} }
//--------------工单管理查询devOuiSno分页结束------------------------ //--------------工单管理查询devOuiSno分页结束------------------------
@ -90,26 +106,60 @@ public class DeviceStaticController {
//-------------------远程操作-------------------------- //-------------------远程操作--------------------------
@PostMapping("/remote/page") @PostMapping("/remote/page")
@Operation(summary = "远程操作-设备管理表格接口") @Operation(summary = "远程操作-设备管理表格接口")
public PageResult<RemoteEquipmentVO> remotePage(@RequestBody SelectQuery query){ public PageResult<RemoteEquipmentVO> remotePage(@RequestBody SelectQuery query) {
Page<RemoteEquipmentVO> page = deviceStaticService.remotePage(query); Page<RemoteEquipmentVO> page = deviceStaticService.remotePage(query);
return PageResult.success(page); return PageResult.success(page);
} }
@GetMapping("/remote/{devId}") @GetMapping("/remote/{devId}")
@Operation(summary = "远程操作-设备信息") @Operation(summary = "远程操作-设备信息")
public Result<RemoteDevInfoVO> remoteDevInfo(@PathVariable Long devId){ public Result<RemoteDevInfoVO> remoteDevInfo(@PathVariable Long devId) {
return deviceStaticService.remoteDevInfo(devId); return deviceStaticService.remoteDevInfo(devId);
} }
@PostMapping("remote/unbinding") @PostMapping("/remote/unbinding")
@Operation(summary = "远程操作-解绑LogicID") @Operation(summary = "远程操作-解绑LogicID")
public Result<String> unbindingLogicId(@RequestBody UnBindingForm form){ public Result<String> unbindingLogicId(@RequestBody UnBindingForm form) {
return deviceStaticService.unbindingLogicId(form); return deviceStaticService.unbindingLogicId(form);
} }
@DeleteMapping("remote/delete-profile/{devId}/{fileId}") @DeleteMapping("/remote/delete-profile/{devId}/{fileId}")
@Operation(summary = "远程操作-删除私有厂商配置文件") @Operation(summary = "远程操作-删除私有厂商配置文件")
public Result<String> deleteProfile(@PathVariable Long devId, @PathVariable Long fileId){ public Result<String> deleteProfile(@PathVariable Long devId, @PathVariable Long fileId) {
return deviceStaticService.deleteProfile(devId,fileId); return deviceStaticService.deleteProfile(devId, fileId);
} }
@GetMapping("/remote/check-dev-online/{devId}")
@Operation(summary = "远程操作-查询设备状态")
@PreventDuplicateSubmit
public Result<RemoteOperateResult> checkDevOnline(@PathVariable Long devId) {
Long count = remoteOperateTaskService.sendTaskByDevId(devId, SecurityUtils.getUsername(), RemoteOperateMsgEnum.TOUCH_DEVICE.getValue());
log.info("{}任务执行中: {}", RemoteOperateMsgEnum.TOUCH_DEVICE.getLabel(), count);
try {
TimeUnit.MILLISECONDS.sleep(SystemConstants.TASK_TIME_OUT_CONST1);
RemoteOperateResult result = remoteOperateTaskService.findDevInfoArgsByDevIdIsTimeOut(devId, RemoteOperateMsgEnum.TOUCH_DEVICE.getValue());
return Result.success(result);
} catch (InterruptedException e) {
throw new BusinessException(ResultCode.QUERY_DEV_ONLINE_ERROR);
}
}
@GetMapping("/remote/device-link-info/{devId}")
@Operation(summary = "远程操作-获取设备链路信息")
@PreventDuplicateSubmit
public Result<List<DeviceLinkVO>> remoteDeviceLinkInfo(@PathVariable Long devId) {
Long count = remoteOperateTaskService.sendTaskByDevId(devId, SecurityUtils.getUsername(), RemoteOperateMsgEnum.BASIC_PARAMETER.getValue());
log.info("{}任务执行中: {}", RemoteOperateMsgEnum.TOUCH_DEVICE.getLabel(), count);
try {
TimeUnit.MILLISECONDS.sleep(SystemConstants.TASK_TIME_OUT_CONST1);
List<DeviceLinkVO> result = operateResultArgsService.getDeviceLinkInfo(devId);
return Result.success(result);
} catch (InterruptedException e) {
throw new BusinessException(ResultCode.QUERY_DEV_ONLINE_ERROR);
}
}
} }

@ -0,0 +1,46 @@
package com.bellmann.controller;
import com.bellmann.common.result.Result;
import com.bellmann.model.vo.DeviceLinkVO;
import com.bellmann.plugin.dupsubmit.annotation.PreventDuplicateSubmit;
import com.bellmann.service.OperateResultArgsService;
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-11
*/
@Tag(name = "26.设备操作结果参数")
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/operate-result-args/v1")
public class OperateResultArgsController {
private final OperateResultArgsService operateResultArgsService;
@GetMapping("/device-link-info/{devId}")
@Operation(summary = "远程操作-获取设备链路信息")
@PreventDuplicateSubmit
public Result<List<DeviceLinkVO>> getDeviceLinkInfo(@PathVariable Long devId) {
List<DeviceLinkVO> result = operateResultArgsService.getDeviceLinkInfo(devId);
return Result.success(result);
}
}

@ -83,10 +83,10 @@ public class OrderInfoController {
Page<OrderInfoTableVO> page = orderInfoService.deviceOrderPage(query); Page<OrderInfoTableVO> page = orderInfoService.deviceOrderPage(query);
return PageResult.success(page); return PageResult.success(page);
} }
@GetMapping("check-dev/{devSnoOui}") @GetMapping("check-dev/{adNo}")
@Operation(summary = "检验设备是否存在") @Operation(summary = "检验设备是否存在")
public Result<Map<Object,Object>> checkDev(@PathVariable String devSnoOui){ public Result<Map<Object,Object>> checkDev(@PathVariable String adNo){
return orderInfoService.checkDev(devSnoOui); return orderInfoService.checkDev(adNo);
} }
} }

@ -20,7 +20,7 @@ public class TypeVerExtController {
@Operation(summary = "设备能力信息表单接口") @Operation(summary = "设备能力信息表单接口")
@GetMapping("/{typeAndVerId}") @GetMapping("/{typeAndVerId}")
public Result<CapabilityForm> getCapabilityForm(@PathVariable String typeAndVerId){ public Result<CapabilityForm> getCapabilityForm(@PathVariable Long typeAndVerId){
CapabilityForm capabilityForm = typeVerExtService.getCapabilityForm(typeAndVerId); CapabilityForm capabilityForm = typeVerExtService.getCapabilityForm(typeAndVerId);
return Result.success(capabilityForm); return Result.success(capabilityForm);
} }

@ -3,7 +3,9 @@ package com.bellmann.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.bellmann.model.entity.DeviceStaticDetail; import com.bellmann.model.entity.DeviceStaticDetail;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper @Mapper
public interface DeviceStaticDetailMapper extends BaseMapper<DeviceStaticDetail> { public interface DeviceStaticDetailMapper extends BaseMapper<DeviceStaticDetail> {
String getDeviceAccessType(@Param("devId") long devId);
} }

@ -6,6 +6,7 @@ import com.bellmann.model.bo.DevOnlineStatus;
import com.bellmann.model.bo.DeviceDetailBO; import com.bellmann.model.bo.DeviceDetailBO;
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.DeviceDetail;
import com.bellmann.model.entity.DeviceStatic; import com.bellmann.model.entity.DeviceStatic;
import com.bellmann.model.vo.EquipmentDetailVO; import com.bellmann.model.vo.EquipmentDetailVO;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
@ -30,4 +31,6 @@ public interface DeviceStaticMapper extends BaseMapper<DeviceStatic> {
DevOnlineStatus devOnlineStatusBySno(@Param("devSno") String devSno); DevOnlineStatus devOnlineStatusBySno(@Param("devSno") String devSno);
DevOnlineStatus devOnlineStatusByPppoe(@Param("pppoe") String pppoe); DevOnlineStatus devOnlineStatusByPppoe(@Param("pppoe") String pppoe);
DeviceDetail findRDeviceDetailStructByDevId(@Param("devId") Long devId);
} }

@ -3,6 +3,7 @@ package com.bellmann.mapper;
import com.bellmann.model.entity.OperateResult2; import com.bellmann.model.entity.OperateResult2;
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 OperateResult2Mapper extends BaseMapper<OperateResult2> { public interface OperateResult2Mapper extends BaseMapper<OperateResult2> {
OperateResult2 findDOperateResultDetailStructByTaskIdAndDevId(@Param("operateTaskId") Long operateTaskId, @Param("devId") Long devId);
} }

@ -0,0 +1,18 @@
package com.bellmann.mapper;
import com.bellmann.model.entity.OperateResultArgs;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* <p>
* Mapper 接口
* </p>
*
* @author 李小林
* @since 2024-07-11
*/
@Mapper
public interface OperateResultArgsMapper extends BaseMapper<OperateResultArgs> {
}

@ -5,6 +5,7 @@ import com.bellmann.model.bo.OperateTask2TableBO;
import com.bellmann.model.entity.OperateTask2; import com.bellmann.model.entity.OperateTask2;
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>
@ -18,4 +19,8 @@ import org.apache.ibatis.annotations.Mapper;
public interface OperateTask2Mapper extends BaseMapper<OperateTask2> { public interface OperateTask2Mapper extends BaseMapper<OperateTask2> {
Page<OperateTask2TableBO> tablePage(Page<OperateTask2TableBO> page, Long devId); Page<OperateTask2TableBO> tablePage(Page<OperateTask2TableBO> page, Long devId);
OperateTask2 findDOperateTask2StructByDevIdAndOperateName(@Param("devId") Long devId, @Param("operateName")String operateName);
OperateTask2 getLatestTaskByOperateName(@Param("devId") Long devId, @Param("operateName") String operateName);
} }

@ -29,5 +29,5 @@ public interface OrderInfoMapper extends BaseMapper<OrderInfo> {
String selectOui(@Param("devOuiSno") String devOuiSno, @Param("userSnNo") String userSnNo); String selectOui(@Param("devOuiSno") String devOuiSno, @Param("userSnNo") String userSnNo);
List<OrderInfoTableVO> deviceOrderPage(Page<OrderInfoTableVO> page,@Param("devSnoOui") String devSnoOui,@Param("pppoeAccount") String pppoeAccount,@Param("domain") Long domain); List<OrderInfoTableVO> deviceOrderPage(Page<OrderInfoTableVO> page,@Param("devAdNo") String devAdNo,@Param("domain") Long domain);
} }

@ -0,0 +1,54 @@
package com.bellmann.model.dto;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class DeviceDetail {
private Long devId;
private Long typeAndVerId;
private Long custId;
private Long regionAreaId;
private Long corpAreaId;
private String devSno;
private String devMac;
private String devPppoe;
private String devAdNo;
private String devStatus;
private LocalDateTime devCreateTime;
private LocalDateTime devModifyTime;
private String devSoapFlag;
private String devInformFlag;
private String devRemark1;
private String devRemark2;
private String devRemark3;
private String devRemark4;
private String devRemark5;
private String connectReqUrl;
private String devIp;
private String devOnline;
private LocalDateTime devOnlineTime;
}

@ -0,0 +1,22 @@
package com.bellmann.model.dto;
import lombok.Data;
@Data
public class OperationResultArguments {
/**
* 参数名
*/
private String argumentName ;
/**
* 参数值
*/
private String argumentValue ;
/**
* 时间值
*/
private String argumentTime;
}

@ -0,0 +1,52 @@
package com.bellmann.model.dto;
import lombok.Data;
@Data
public class OperationTask {
/**
* 操作任务ID
*/
private long operationTaskId = -1;
/**
* 设备ID
*/
private long deviceId = -1;
/**
* 操作创建用户名
*/
private String createUser ;
/**
* 操作说明
*/
private String operationTaskDescription ;
/**
* 监控时长分钟
*/
private int monitorTime = -1 ;
/**
* 监控间隔
*/
private int monitorPeriod = -1 ;
/**
* 操作创建时间
*/
private long createTime = -1;
/**
* 操作名称(对应ITMS_DEV_OPER_TYPE中OPER_NAME)
*/
private String operationName ;
/**
* 文件ID
*/
private String fileId ;
}

@ -0,0 +1,159 @@
package com.bellmann.model.dto;
import com.bellmann.common.constant.SystemConstants;
import com.bellmann.model.entity.OperateResult2;
import com.bellmann.model.entity.OperateTask2;
import lombok.Data;
import java.text.SimpleDateFormat;
import java.util.Map;
@Data
public class RemoteOperation {
/**
* 远程操作编号
*/
private long operationId = -1 ;
/**
* 设备ID
*/
private long deviceId = -1 ;
private String deviceSno;
/**
* 远程操作任务名称
*/
private String operationTaskName ;
/**
* 操作描述
*/
private String operationDescription ;
/**
* 创建时间
*/
private String createTime ;
/**
* 创建人
*/
private String createUser ;
/**
* 执行开始时间
*/
private String beginTime ;
/**
* 执行结束时间
*/
private String endTime ;
/**
* 操作结果
*/
private String operationResult ;
/**
* 结果CODE
*/
private String resultCode ;
/**
* 结果描述
*/
private String resultDescription ;
/**
* 结果参数信息
*/
private OperationResultArguments[] arguments ;
/**
* 参数名称列表
*/
private Map<Object,Object> parameterNameList;
/**
* 参数名称
*/
private String parameterName;
//用于设备监控:从数据库中取出设备监控信息
/**
* 设备监控信息监控时长字符描述 MONITOR_PERIOD
*/
private String monitorPeriod;
/**
* 设备监控信息监控时长值:()
*/
private String monitorPeriodValue;
/**
* 设备监控信息采样周期字符描述 MONITOR_INTERVAL
*/
private String monitorInterval;
/**
* 设备监控信息采样周期值:()
*/
private String monitorIntervalValue;
/**
* 设备ID编号
*/
private String devADNo;
/**
* 卡信息
*/
private String cardId;
private String cardNo;
/**
* 构造函数
*/
public RemoteOperation(){
}
public RemoteOperation(OperateTask2 operateTask2, DeviceDetail deviceDetail, OperateResult2 operateResult2){
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
this.createTime = operateTask2.getOperTaskCreateTime()==null?"":dateFormat.format(operateTask2.getOperTaskCreateTime());
this.createUser = operateTask2.getUserName();
this.deviceId = operateTask2.getDevId();
this.operationTaskName = operateTask2.getOperName();
this.operationDescription = operateTask2.getOperTaskDesc();
this.operationId = operateTask2.getOperTaskId();
if (operateResult2!=null){
this.operationResult = operateResult2.getResultState();
this.resultCode = operateResult2.getErrorCode();
this.resultDescription =operateResult2.getErrorDesc();
this.beginTime =operateResult2.getOperStartTime()==null?"":dateFormat.format(operateResult2.getOperStartTime());
this.endTime = operateResult2.getOperEndTime()==null?"":dateFormat.format(operateResult2.getOperEndTime());
}else {
this.operationResult = SystemConstants.NULL_RESULT;
this.resultCode = "";
this.resultDescription = SystemConstants.NULL_RESULT;
this.beginTime = "";
this.endTime = "";
}
}
}

@ -1,13 +1,14 @@
package com.bellmann.model.entity; package com.bellmann.model.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import java.io.Serializable;
/** /**
* <p> * <p>
* *
@ -62,6 +63,7 @@ public class FileServer implements Serializable {
/** /**
* ftp跟路径 * ftp跟路径
*/ */
@TableField("ftp_rootdir")
private String ftpRootDir; private String ftpRootDir;
/** /**

@ -0,0 +1,34 @@
package com.bellmann.model.entity;
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-11
*/
@Data
@EqualsAndHashCode(callSuper = false)
@TableName("itms_oper_result_args")
public class OperateResultArgs implements Serializable {
private static final long serialVersionUID = 1L;
private Long operTaskId;
private String argsName;
private String argsValue;
private Date recTime;
}

@ -15,7 +15,7 @@ import java.io.Serializable;
public class TypeVerExt implements Serializable { public class TypeVerExt implements Serializable {
private static final long serialVersionUID = -1903207386413130730L; private static final long serialVersionUID = -1903207386413130730L;
private String typeAndVerId; private Long typeAndVerId;
@TableField("displayname") @TableField("displayname")
private String displayName; private String displayName;

@ -8,7 +8,7 @@ import lombok.Data;
public class CapabilityForm { public class CapabilityForm {
@Schema(description = "设备类型软件版本ID") @Schema(description = "设备类型软件版本ID")
private String typeAndVerId; private Long typeAndVerId;
@Schema(description = "LAN口数量") @Schema(description = "LAN口数量")
private String lanNumber=""; private String lanNumber="";

@ -10,12 +10,7 @@ import lombok.EqualsAndHashCode;
@Data @Data
public class DeviceOrderQuery extends BasePageQuery { public class DeviceOrderQuery extends BasePageQuery {
@Schema(description="设备序列号") @Schema(description = "设备AD编号")
private String devSno; private String devAdNo;
@Schema(description="Oui")
private String devOui;
@Schema(description = "pppoe账号")
private String pppoeAccount;
} }

@ -8,7 +8,7 @@ import lombok.Data;
public class CapabilityVO { public class CapabilityVO {
@Schema(description = "设备类型软件版本ID") @Schema(description = "设备类型软件版本ID")
private String typeAndVerId; private Long typeAndVerId;
@Schema(description = "LAN口数量") @Schema(description = "LAN口数量")
private String lanNumber; private String lanNumber;

@ -0,0 +1,17 @@
package com.bellmann.model.vo;
import com.bellmann.model.dto.ParamInfo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Builder;
import lombok.Data;
import java.util.List;
@Data
@Schema(description = "设备链路信息视图")
@Builder
public class DeviceLinkVO {
private String title;
private List<ParamInfo> list;
}

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

@ -16,7 +16,7 @@ public class ServiceManagerRunner implements ApplicationRunner {
new Thread("ServiceManager") { new Thread("ServiceManager") {
@Override @Override
public void run() { public void run() {
InterfaceService.getInstance().start(); UIService.getInstance().start();
} }
}.start(); }.start();
log.info("ServiceManager started"); log.info("ServiceManager started");

@ -10,14 +10,14 @@ import com.zznode.itms.api.OAMManager;
import lombok.Getter; import lombok.Getter;
public class InterfaceService extends ServiceManager { public class UIService extends ServiceManager {
static InterfaceService service = null; static UIService service = null;
//任务超时的时间 //任务超时的时间
@Getter @Getter
private static String task_timeOut; private static String task_timeOut;
public InterfaceService(String[] args) { public UIService(String[] args) {
super(args); super(args);
} }
@Override @Override
@ -37,12 +37,12 @@ public class InterfaceService extends ServiceManager {
} }
public synchronized static InterfaceService getInstance(){ public synchronized static UIService getInstance(){
if(service != null){ if(service != null){
return service; return service;
} }
String[] arg = new String[] { "-ServerName", "UIServer" }; String[] arg = new String[] { "-ServerName", "UIServer" };
service = new InterfaceService(arg); service = new UIService(arg);
return service; return service;
} }

@ -0,0 +1,19 @@
package com.bellmann.service;
import com.bellmann.model.vo.DeviceLinkVO;
import java.util.List;
/**
* <p>
* 服务类
* </p>
*
* @author 李小林
* @since 2024-07-11
*/
public interface OperateResultArgsService{
List<DeviceLinkVO> getDeviceLinkInfo(Long devId);
}

@ -36,5 +36,5 @@ public interface OrderInfoService {
Page<OrderInfoTableVO> deviceOrderPage(DeviceOrderQuery query); Page<OrderInfoTableVO> deviceOrderPage(DeviceOrderQuery query);
Result<Map<Object,Object>> checkDev(String devSnoOui); Result<Map<Object,Object>> checkDev(String adNo);
} }

@ -0,0 +1,15 @@
package com.bellmann.service;
import com.bellmann.model.dto.OperationTask;
import com.bellmann.model.vo.RemoteOperateResult;
public interface RemoteOperateTaskService {
public Long sendTaskByDevId(Long devId,String createUser,String command);
public long insertOperationTask(OperationTask operationTask);
RemoteOperateResult findDevInfoArgsByDevIdIsTimeOut(Long devId, String command);
}

@ -5,7 +5,7 @@ import com.bellmann.model.form.CapabilityForm;
import com.bellmann.model.vo.CapabilityVO; import com.bellmann.model.vo.CapabilityVO;
public interface TypeVerExtService { public interface TypeVerExtService {
CapabilityForm getCapabilityForm(String typeAndVerId); CapabilityForm getCapabilityForm(Long typeAndVerId);
Result<String> editCapabilityForm(CapabilityForm form); Result<String> editCapabilityForm(CapabilityForm form);

@ -6,15 +6,10 @@ import com.bellmann.common.base.BasePageQuery;
import com.bellmann.common.result.PageResult; import com.bellmann.common.result.PageResult;
import com.bellmann.common.util.CommonUtils; import com.bellmann.common.util.CommonUtils;
import com.bellmann.mapper.DeviceLogMapper; import com.bellmann.mapper.DeviceLogMapper;
import com.bellmann.model.dto.ParamInfo;
import com.bellmann.model.entity.DeviceLog; import com.bellmann.model.entity.DeviceLog;
import com.bellmann.model.vo.DeviceLogVO; import com.bellmann.model.vo.DeviceLogVO;
import com.bellmann.service.DeviceLogService; import com.bellmann.service.DeviceLogService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList; import java.util.ArrayList;
@ -56,7 +51,7 @@ public class DeviceLogServiceImpl implements DeviceLogService {
String paramValue = desc.substring(startIndex + targetText.length()).trim(); String paramValue = desc.substring(startIndex + targetText.length()).trim();
if (!paramValue.isEmpty()&& CommonUtils.containsHtmlTag(paramValue)){ if (!paramValue.isEmpty()&& CommonUtils.containsHtmlTag(paramValue)){
desc = desc.substring(0,startIndex); desc = desc.substring(0,startIndex);
deviceLogVO.setParamInfoList(parseHtmlToParamInfo(paramValue)); deviceLogVO.setParamInfoList(CommonUtils.parseHtmlToParamInfo(paramValue));
} }
} }
deviceLogVO.setDevId(obj.getDevId()); deviceLogVO.setDevId(obj.getDevId());
@ -72,20 +67,4 @@ public class DeviceLogServiceImpl implements DeviceLogService {
return PageResult.success(voPage); return PageResult.success(voPage);
} }
private static List<ParamInfo> parseHtmlToParamInfo(String html){
List<ParamInfo> list = new ArrayList<>();
Document doc = Jsoup.parse(html);
Element table = doc.select("table.tableFormTable").first();
assert table != null;
Elements rows = table.select("tr");
for (int i = 2; i < rows.size(); i++) {
ParamInfo paramInfo = new ParamInfo();
Elements cols = rows.get(i).select("td");
paramInfo.setParameterName(cols.get(0).text().trim());
paramInfo.setActualValue(cols.get(1).text().trim());
paramInfo.setRemarks(cols.get(2).text().trim());
list.add(paramInfo);
}
return list;
}
} }

@ -0,0 +1,62 @@
package com.bellmann.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.bellmann.common.enums.RemoteOperateMsgEnum;
import com.bellmann.common.util.CommonUtils;
import com.bellmann.mapper.OperateResultArgsMapper;
import com.bellmann.mapper.OperateTask2Mapper;
import com.bellmann.model.dto.ParamInfo;
import com.bellmann.model.entity.OperateResultArgs;
import com.bellmann.model.entity.OperateTask2;
import com.bellmann.model.vo.DeviceLinkVO;
import com.bellmann.service.OperateResultArgsService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
/**
* <p>
* 服务实现类
* </p>
*
* @author 李小林
* @since 2024-07-11
*/
@Service
@RequiredArgsConstructor
@Slf4j
public class OperateResultArgsServiceImpl implements OperateResultArgsService {
private final OperateTask2Mapper operateTask2Mapper;
private final OperateResultArgsMapper operateResultArgsMapper;
@Override
public List<DeviceLinkVO> getDeviceLinkInfo(Long devId) {
OperateTask2 operateTask2 = operateTask2Mapper.getLatestTaskByOperateName(devId, RemoteOperateMsgEnum.BASIC_PARAMETER.getValue());
List<OperateResultArgs> list = operateResultArgsMapper.selectList(new LambdaQueryWrapper<OperateResultArgs>()
.eq(OperateResultArgs::getOperTaskId, operateTask2.getOperTaskId())
);
StringBuilder html = new StringBuilder();
if (list.isEmpty()){
return new ArrayList<DeviceLinkVO>();
}
for (OperateResultArgs args:list){
html.append(args.getArgsValue());
}
SimpleDateFormat dateFormat = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
List<ParamInfo> paramInfos = CommonUtils.parseHtmlToParamInfo(html.toString());
List<DeviceLinkVO> links = new ArrayList<>();
DeviceLinkVO deviceLinkVO = DeviceLinkVO
.builder()
.title("设备链路信息: " + dateFormat.format(operateTask2.getOperTaskCreateTime()))
.list(paramInfos)
.build();
links.add(deviceLinkVO);
return links;
}
}

@ -413,9 +413,8 @@ public class OrderInfoServiceImpl implements OrderInfoService {
int pageSize = query.getPageSize(); int pageSize = query.getPageSize();
Page<OrderInfoTableVO> page = new Page<>(pageNum, pageSize); Page<OrderInfoTableVO> page = new Page<>(pageNum, pageSize);
Long domain = SecurityUtils.getGroupId(); Long domain = SecurityUtils.getGroupId();
String devSnoOui = query.getDevOui() + "-" + query.getDevSno(); String devAdNo = query.getDevAdNo();
String pppoeAccount = query.getPppoeAccount(); List<OrderInfoTableVO> list = orderInfoMapper.deviceOrderPage(page, devAdNo, domain);
List<OrderInfoTableVO> list = orderInfoMapper.deviceOrderPage(page, devSnoOui, pppoeAccount, domain);
return getOrderInfoTableVOPage(page, list); return getOrderInfoTableVOPage(page, list);
} }
@ -449,18 +448,14 @@ public class OrderInfoServiceImpl implements OrderInfoService {
} }
@Override @Override
public Result<Map<Object, Object>> checkDev(String devSnoOui) { public Result<Map<Object, Object>> checkDev(String adNo) {
if (devSnoOui == null || !devSnoOui.contains("-")) { if (adNo.isEmpty()) {
return Result.failed(ResultCode.NOT_GET_DEVICE); return Result.failed(ResultCode.NOT_GET_DEVICE);
} }
String[] split = devSnoOui.split("-");
DeviceStatic deviceStatic = deviceStaticMapper.selectOne(new QueryWrapper<DeviceStatic>() DeviceStatic deviceStatic = deviceStaticMapper.selectOne(new QueryWrapper<DeviceStatic>()
.eq("dev_sno", split[1]) .eq("dev_ad_no", adNo)
.eq("dev_remark3", split[0])
.select("dev_id", "type_and_ver_id") .select("dev_id", "type_and_ver_id")
); );
if (deviceStatic != null) { if (deviceStatic != null) {
Map<Object, Object> map = MapUtil Map<Object, Object> map = MapUtil
.builder() .builder()

@ -0,0 +1,205 @@
package com.bellmann.service.impl;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.bellmann.common.base.IBaseEnum;
import com.bellmann.common.constant.StringUtilsConstants;
import com.bellmann.common.enums.DevAccessTypeEnum;
import com.bellmann.common.enums.DevOnlineEnum;
import com.bellmann.common.enums.RemoteOperateMsgEnum;
import com.bellmann.common.exception.BusinessException;
import com.bellmann.common.result.ResultCode;
import com.bellmann.mapper.*;
import com.bellmann.model.dto.DeviceDetail;
import com.bellmann.model.dto.OperationTask;
import com.bellmann.model.dto.RemoteOperation;
import com.bellmann.model.entity.DeviceDynamic;
import com.bellmann.model.entity.OperateResult2;
import com.bellmann.model.entity.OperateTask2;
import com.bellmann.model.vo.RemoteOperateResult;
import com.bellmann.runner.UIService;
import com.bellmann.service.RemoteOperateTaskService;
import com.zznode.itms.api.InventoryManager;
import com.zznode.itms.api.OAMManager;
import com.zznode.itms.api.Utils;
import com.zznode.itms.idl.device.DOperTask2DetailStruct;
import com.zznode.itms.idl.device.DOperTask2DetailStructHolder;
import com.zznode.itms.idl.device.DOperTask2Struct;
import com.zznode.itms.idl.device.DOperTaskArgsStruct;
import com.zznode.itms.idl.resourcedefinition.RFileInfoListHolder;
import com.zznode.itms.idl.resourcedefinition.RFileInfoStruct;
import com.zznode.itms.idl.resourcedefinition.RFileServerDetailListHolder;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import static com.bellmann.common.constant.SystemConstants.TASK_TIME_OUT_CONST;
@Service
@RequiredArgsConstructor
public class RemoteOperateTaskServiceImpl implements RemoteOperateTaskService {
private final DeviceStaticDetailMapper deviceStaticDetailMapper;
private final OperateTask2Mapper operateTask2Mapper;
private final DeviceStaticMapper deviceStaticMapper;
private final OperateResult2Mapper operateResult2Mapper;
private final DeviceDynamicMapper deviceDynamicMapper;
@Override
public Long sendTaskByDevId(Long devId, String createUser, String command) {
OperationTask operationTask = new OperationTask();
operationTask.setDeviceId(devId);
operationTask.setOperationName(command);
operationTask.setOperationTaskDescription("test");
operationTask.setCreateUser(createUser);
return insertOperationTask(operationTask);
}
@Override
public long insertOperationTask(OperationTask operationTask) {
DOperTask2DetailStruct detailStruct = new DOperTask2DetailStruct();
DOperTask2Struct operateTaskStruct = new DOperTask2Struct();
operateTaskStruct.devId = operationTask.getDeviceId()==0? StringUtilsConstants.LONG_NULL:operationTask.getDeviceId();
operateTaskStruct.operName = (null == operationTask.getOperationName() ? ""
: operationTask.getOperationName());
operateTaskStruct.operTaskCreateTime = (new Date()).getTime();
operateTaskStruct.operTaskDesc = IBaseEnum.getLabelByValue(operationTask.getOperationName(), RemoteOperateMsgEnum.class);
operateTaskStruct.operTaskId = operationTask.getOperationTaskId() == 0 ? Utils.LONG_NULL
: operationTask.getOperationTaskId();
operateTaskStruct.userName = (null == operationTask.getCreateUser() ? ""
: operationTask.getCreateUser());
detailStruct.operTask = operateTaskStruct;
DOperTaskArgsStruct[] argsStruct = new DOperTaskArgsStruct[2];
argsStruct[0] = new DOperTaskArgsStruct();
argsStruct[0].argsName = "FILE_URL";
argsStruct[0].argsValue = findFileURLByOperation(Long
.parseLong(null == operationTask.getFileId() ? "0"
: operationTask.getFileId()), operateTaskStruct.operName);
argsStruct[0].operTaskId = operateTaskStruct.operTaskId;
String accessType = deviceStaticDetailMapper.getDeviceAccessType(operateTaskStruct.devId);
argsStruct[1] = new DOperTaskArgsStruct();
argsStruct[1].argsName = "AccessType";
argsStruct[1].argsValue = accessType == null ? "" : IBaseEnum.getLabelByValue(accessType, DevAccessTypeEnum.class);
;
argsStruct[1].operTaskId = operateTaskStruct.operTaskId;
detailStruct.operTaskArgsList = argsStruct;
DOperTask2DetailStructHolder detailStructHolder = new DOperTask2DetailStructHolder(
detailStruct);
int result = 0;
try {
result = OAMManager.sendDeviceOper2Task(detailStructHolder);
}catch (Exception e){
throw new BusinessException(ResultCode.NOT_GET_DEVICE);
}
if (result != 0) {
throw new BusinessException(ResultCode.OAM_INTERFACE_ERROR);
}
return detailStructHolder.value.operTask.operTaskId;
}
private String findFileURLByOperation(long fileId, String operation){
String url = "";
if ("DownloadSoftVerFile".equals(operation)) {
url = findFileURLByFileId(fileId);
} else if ("DownloadConfig".equals(operation)) {
url = findFileURLByFileId(fileId);
}
return url;
}
private String findFileURLByFileId(long fileId){
StringBuffer sb = new StringBuffer("FTP://");
RFileInfoListHolder fileInfoListHolder = new RFileInfoListHolder();
String sql = "from ITMS_FILE where ITMS_FILE.FILE_ID= " + fileId;
int result = InventoryManager.getFilesBySql(sql, 1, 10,
fileInfoListHolder);
if (result != 0) {
throw new BusinessException(ResultCode.DATA_NOT_FOUND);
}
if (fileInfoListHolder.value.length > 0) {
RFileInfoStruct fileInfoStruct = fileInfoListHolder.value[0];
RFileServerDetailListHolder fileServerDetailListHolder = new RFileServerDetailListHolder();
result = InventoryManager
.getFileServerDetailByFileServerID(
fileInfoStruct.fileServerId,
fileServerDetailListHolder);
if (result != 0) {
throw new BusinessException(ResultCode.DATA_NOT_FOUND);
}
if (fileServerDetailListHolder.value.length > 0) {
sb.append(fileServerDetailListHolder.value[0].fileServer.ftpUsername)
.append(":")
.append(fileServerDetailListHolder.value[0].fileServer.ftpPassword)
.append("@").append(fileServerDetailListHolder.value[0].fileServer.ftpIp)
.append(":").append(fileServerDetailListHolder.value[0].fileServer.ftpPort)
.append("/").append(fileServerDetailListHolder.value[0].fileServer.ftpRootdir);
}
sb.append(fileInfoStruct.fileURL).append(fileInfoStruct.fileName);
}
return sb.toString();
}
@Override
public RemoteOperateResult findDevInfoArgsByDevIdIsTimeOut(Long devId, String command) {
String taskTimeOut = UIService.getTask_timeOut();
if (StringUtils.isEmpty(taskTimeOut)) {
taskTimeOut = "10";
}
long time = Long.parseLong(taskTimeOut) * TASK_TIME_OUT_CONST;
RemoteOperation operation = findDevInfoArgsByDevId(devId, command);
String tasktime = operation.getCreateTime();
if (StringUtils.isNotEmpty(tasktime)) {
SimpleDateFormat dateFormat = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
Date date0;
try {
date0 = dateFormat.parse(tasktime);
} catch (ParseException e) {
date0 = new Date();
}
Date date1 = new Date();
long taskTime = date1.getTime() - date0.getTime();
// 连接设备超过20秒为超时
if (command.equalsIgnoreCase("TouchDevice")) {
if (taskTime > 11 * 60 * 1000) //原30分钟
// 连接超时时间设为11分钟
{
operation.setOperationResult("1");
deviceDynamicMapper.update(null,new LambdaUpdateWrapper<DeviceDynamic>()
.eq(DeviceDynamic::getDevId,devId)
.set(DeviceDynamic::getDevOnline, DevOnlineEnum.OFF_LINE.getValue())
);
}
} else if (taskTime >= time) {
operation.setOperationResult("2");
}
// 连接设备超过20秒为超时
}
return RemoteOperateResult.
builder()
.resultState(operation.getOperationResult())
.resultCode(operation.getResultCode())
.build();
}
private RemoteOperation findDevInfoArgsByDevId (Long devId, String operateName){
OperateTask2 operateTask2 = operateTask2Mapper.findDOperateTask2StructByDevIdAndOperateName(devId,operateName);
if (operateTask2==null){
return new RemoteOperation();
}
DeviceDetail deviceDetail = deviceStaticMapper.findRDeviceDetailStructByDevId(devId);
if (deviceDetail!=null){
OperateResult2 operateResult2 = operateResult2Mapper.findDOperateResultDetailStructByTaskIdAndDevId(operateTask2.getOperTaskId(),operateTask2.getDevId());
return new RemoteOperation(operateTask2,deviceDetail,operateResult2);
}
return new RemoteOperation();
}
}

@ -24,7 +24,7 @@ public class TypeVerExtServiceImpl implements TypeVerExtService {
private final TypeVerExtMapper typeVerExtMapper; private final TypeVerExtMapper typeVerExtMapper;
@Override @Override
public CapabilityForm getCapabilityForm(String typeAndVerId) { public CapabilityForm getCapabilityForm(Long typeAndVerId) {
List<TypeVerExt> list = typeVerExtMapper.selectList( List<TypeVerExt> list = typeVerExtMapper.selectList(
new LambdaUpdateWrapper<TypeVerExt>() new LambdaUpdateWrapper<TypeVerExt>()
.eq(TypeVerExt::getTypeAndVerId, typeAndVerId) .eq(TypeVerExt::getTypeAndVerId, typeAndVerId)
@ -150,7 +150,7 @@ public class TypeVerExtServiceImpl implements TypeVerExtService {
@Override @Override
public Result<CapabilityVO> devCapabilityInfo(Long typeAndVerId) { public Result<CapabilityVO> devCapabilityInfo(Long typeAndVerId) {
CapabilityForm capabilityForm = getCapabilityForm(typeAndVerId.toString()); CapabilityForm capabilityForm = getCapabilityForm(typeAndVerId);
if (capabilityForm==null){ if (capabilityForm==null){
return Result.success(new CapabilityVO()); return Result.success(new CapabilityVO());
} }

@ -0,0 +1,17 @@
<?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.DeviceStaticDetailMapper">
<select id="getDeviceAccessType" resultType="java.lang.String">
SELECT
DEV_ACCESS_TYPE
FROM
ITMS_DEVICE_STATIC DEV,
ITMS_DEVICE_TYPE_VER_DETAIL DETAIL
WHERE
DEV.TYPE_AND_VER_ID = DETAIL.TYPE_AND_VER_ID
AND DEV.DEV_ID = #{devId}
</select>
</mapper>

@ -279,4 +279,36 @@
and b.dev_sno= #{pppoe} and b.dev_sno= #{pppoe}
limit 1 limit 1
</select> </select>
<select id="findRDeviceDetailStructByDevId" resultType="com.bellmann.model.dto.DeviceDetail">
SELECT
ITMS_DEVICE_STATIC.DEV_ID,
ITMS_DEVICE_STATIC.TYPE_AND_VER_ID,
ITMS_DEVICE_STATIC.CUST_ID,
ITMS_DEVICE_STATIC.REGION_AREA_ID,
ITMS_DEVICE_STATIC.CORP_AREA_ID,
ITMS_DEVICE_STATIC.DEV_SNO,
ITMS_DEVICE_STATIC.DEV_MAC,
ITMS_DEVICE_STATIC.DEV_PPPOE,
ITMS_DEVICE_STATIC.DEV_AD_NO,
ITMS_DEVICE_STATIC.DEV_STATUS,
ITMS_DEVICE_STATIC.DEV_CREATE_TIME,
ITMS_DEVICE_STATIC.DEV_MODIFY_TIME,
ITMS_DEVICE_STATIC.DEV_SOAP_FLAG,
ITMS_DEVICE_STATIC.DEV_INFORM_FLAG,
ITMS_DEVICE_STATIC.DEV_REMARK1,
ITMS_DEVICE_STATIC.DEV_REMARK2,
ITMS_DEVICE_STATIC.DEV_REMARK3,
ITMS_DEVICE_STATIC.DEV_REMARK4,
ITMS_DEVICE_STATIC.DEV_REMARK5,
ITMS_DEVICE_DYNAMIC.CONNECT_REQ_URL,
ITMS_DEVICE_DYNAMIC.DEV_IP,
ITMS_DEVICE_DYNAMIC.DEV_ONLINE,
ITMS_DEVICE_DYNAMIC.DEV_ONLINE_TIME
FROM
ITMS_DEVICE_STATIC
LEFT JOIN ITMS_DEVICE_DYNAMIC ON ITMS_DEVICE_STATIC.DEV_ID = ITMS_DEVICE_DYNAMIC.DEV_ID
WHERE
ITMS_DEVICE_STATIC.DEV_ID = #{devId}
limit 1
</select>
</mapper> </mapper>

@ -19,4 +19,21 @@
oper_task_id, dev_id, oper_start_time, oper_end_time, action_name, error_code, error_desc, result_state oper_task_id, dev_id, oper_start_time, oper_end_time, action_name, error_code, error_desc, result_state
</sql> </sql>
<select id="findDOperateResultDetailStructByTaskIdAndDevId" resultType="com.bellmann.model.entity.OperateResult2">
SELECT DISTINCT
ITMS_OPER_RESULT_2.OPER_TASK_ID,
ITMS_OPER_RESULT_2.DEV_ID,
ITMS_OPER_RESULT_2.OPER_START_TIME,
ITMS_OPER_RESULT_2.OPER_END_TIME,
ITMS_OPER_RESULT_2.ACTION_NAME,
ITMS_OPER_RESULT_2.RESULT_STATE,
ITMS_OPER_RESULT_2.ERROR_CODE,
ITMS_OPER_RESULT_2.ERROR_DESC
FROM
ITMS_OPER_RESULT_2
LEFT JOIN ITMS_OPER_RESULT_ARGS ON ITMS_OPER_RESULT_2.OPER_TASK_ID = ITMS_OPER_RESULT_ARGS.OPER_TASK_ID
WHERE
ITMS_OPER_RESULT_2.OPER_TASK_ID = #{operateTaskId}
AND DEV_ID = #{devId}
</select>
</mapper> </mapper>

@ -0,0 +1,18 @@
<?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.OperateResultArgsMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.bellmann.model.entity.OperateResultArgs">
<id column="oper_task_id" property="operTaskId" />
<result column="args_name" property="argsName" />
<result column="args_value" property="argsValue" />
<result column="rec_time" property="recTime" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
oper_task_id, args_name, args_value, rec_time
</sql>
</mapper>

@ -59,4 +59,46 @@
ORDER BY aa.OPER_TASK_CREATE_TIME DESC ORDER BY aa.OPER_TASK_CREATE_TIME DESC
limit 1 limit 1
</select> </select>
<select id="findDOperateTask2StructByDevIdAndOperateName" resultType="com.bellmann.model.entity.OperateTask2">
SELECT
*
FROM
(
SELECT DISTINCT
ITMS_OPER_TASK_2.OPER_TASK_ID,
ITMS_OPER_TASK_2.DEV_ID,
ITMS_OPER_TASK_2.USER_NAME,
ITMS_OPER_TASK_2.OPER_TASK_DESC,
ITMS_OPER_TASK_2.OPER_TASK_CREATE_TIME,
ITMS_OPER_TASK_2.OPER_NAME
FROM
ITMS_OPER_TASK_2
WHERE
ITMS_OPER_TASK_2.DEV_ID = #{devId}
AND ITMS_OPER_TASK_2.OPER_NAME = #{operateName}
ORDER BY
ITMS_OPER_TASK_2.OPER_TASK_CREATE_TIME DESC
) AS SQL
WHERE
1 = 1
limit 1
</select>
<select id="getLatestTaskByOperateName" resultType="com.bellmann.model.entity.OperateTask2">
SELECT DISTINCT
ITMS_OPER_TASK_2.OPER_TASK_ID,
ITMS_OPER_TASK_2.DEV_ID,
ITMS_OPER_TASK_2.USER_NAME,
ITMS_OPER_TASK_2.OPER_TASK_DESC,
ITMS_OPER_TASK_2.OPER_TASK_CREATE_TIME,
ITMS_OPER_TASK_2.OPER_NAME
FROM
ITMS_OPER_TASK_2
WHERE
ITMS_OPER_TASK_2.DEV_ID = #{devId}
AND ITMS_OPER_TASK_2.OPER_NAME = #{operateName}
ORDER BY
ITMS_OPER_TASK_2.OPER_TASK_CREATE_TIME DESC
limit 1
</select>
</mapper> </mapper>

@ -161,11 +161,8 @@
LEFT JOIN ITMS_ORDER_INFO_DETAIL BB ON AA.ORDER_ID = BB.ORDER_ID LEFT JOIN ITMS_ORDER_INFO_DETAIL BB ON AA.ORDER_ID = BB.ORDER_ID
where where
aa.system_domain &gt;= #{domain} aa.system_domain &gt;= #{domain}
<if test="devSnoOui !=null and devSnoOui!= ''"> <if test="devAdNo !=null and devAdNo!= ''">
and aa.dev_sno_oui = #{devSnoOui} and aa.ad_no = #{devAdNo}
</if>
<if test="pppoeAccount!=null and pppoeAccount!= ''">
and aa.pppoe_account = #{pppoeAccount}
</if> </if>
</select> </select>
</mapper> </mapper>

Loading…
Cancel
Save