feat: 故障管理-基本信息-诊断

master
李小林 7 months ago
parent 4d9910bbc8
commit bdff7398e2
  1. 19
      src/main/java/com/bellmann/common/enums/RemoteOperateMsgEnum.java
  2. 4
      src/main/java/com/bellmann/common/result/ResultCode.java
  3. 6
      src/main/java/com/bellmann/common/util/CommonUtils.java
  4. 13
      src/main/java/com/bellmann/controller/FaultController.java
  5. 5
      src/main/java/com/bellmann/manger/impl/DataDictManager.java
  6. 24
      src/main/java/com/bellmann/manger/impl/DataDictManagerImpl.java
  7. 2
      src/main/java/com/bellmann/mapper/DataDictMapper.java
  8. 17
      src/main/java/com/bellmann/model/vo/FaultDiagnosisResult.java
  9. 3
      src/main/java/com/bellmann/service/FaultService.java
  10. 135
      src/main/java/com/bellmann/service/impl/FaultServiceImpl.java
  11. 18
      src/main/resources/mapper/DataDictMapper.xml

@ -46,7 +46,24 @@ public enum RemoteOperateMsgEnum implements IBaseEnum<String> {
IPV6_INFO_QUERY("Ipv6InfoQuery","Ipv6InfoQuery"), IPV6_INFO_QUERY("Ipv6InfoQuery","Ipv6InfoQuery"),
GET_LAND_HCP_INFO("GETLANDHCPINFO","GETLANDHCPINFO"), GET_LAND_HCP_INFO("GETLANDHCPINFO","GETLANDHCPINFO"),
WBAND("wband","查询上网业务"), WBAND("wband","查询上网业务"),
BASIC_COMMON_QUERY("basicCommonQuery","basicCommonQuery") BASIC_COMMON_QUERY("basicCommonQuery","basicCommonQuery"),
PON112_NET_FAILED("1-1", "Pon112NetFailed"),
PON112_NET_UNSTABLE("1-2", "Pon112NetUnstable"),
PON112_NET_SLOW("1-3", "Pon112NetSlow"),
PON112_WIFI_FAILED("1-4", "Pon112WifiFailed"),
PON112_BUSY_TONE("2-1", "Pon112BusyTone"),
PON112_NO_TONE("2-2", "Pon112NoTone"),
PON112_CALL_OUT("2-3", "Pon112CallOut"),
PON112_CALL_IN("2-4", "Pon112CallIn"),
PON112_SINGLE_LINE("2-5", "Pon112SingleLine"),
PON112_VOICE_UNSTABLE("2-6", "Pon112VoiceUnstable"),
PON112_FAX("2-7", "Pon112Fax"),
PON112_ALG_SIP("2-8", "Pon112AlgSip"),
PON112_IPTV_UNABLE("3-1", "Pon112IPTVUnable"),
PON112_IPTV_UNSTABLE("3-2", "Pon112IPTVUnstable"),
; ;
@Getter @Getter
private String value; private String value;

@ -137,7 +137,9 @@ public enum ResultCode implements IResultCode, Serializable {
MUST_NOT_CONTAIN_KEY_SORTING_PASSWORDS("F0043","不得包含键盘排序密码"), MUST_NOT_CONTAIN_KEY_SORTING_PASSWORDS("F0043","不得包含键盘排序密码"),
FAILED_TO_CHANGE_THE_PASSWORD("F0044","修改密码失败"), FAILED_TO_CHANGE_THE_PASSWORD("F0044","修改密码失败"),
FAILED_TO_READ_DEVICE_SEQUENCE_FILE("F0045","读取设备序列号文件失败"), FAILED_TO_READ_DEVICE_SEQUENCE_FILE("F0045","读取设备序列号文件失败"),
PLEASE_UPLOAD_THE_TXT_FILE_TYPE("F0046","请上传txt文件类型" ); PLEASE_UPLOAD_THE_TXT_FILE_TYPE("F0046","请上传txt文件类型" ),
THE_INTERFACE_CONNECTION_TIMED_OUT("F0047","接口连接超时,请检查设备是否在线")
;
@Override @Override
public String getCode() { public String getCode() {

@ -82,4 +82,10 @@ public class CommonUtils {
return str; return str;
} }
public static boolean isNeedlanOrEpon(String key) {
return key.equalsIgnoreCase("1-1") || key.equalsIgnoreCase("1-2")
|| key.equalsIgnoreCase("1-3") || key.equalsIgnoreCase("1-4")
|| key.equalsIgnoreCase("3-1") || key.equalsIgnoreCase("3-2");
}
} }

@ -3,15 +3,13 @@ package com.bellmann.controller;
import com.bellmann.common.result.Result; import com.bellmann.common.result.Result;
import com.bellmann.model.query.FaultQuery; import com.bellmann.model.query.FaultQuery;
import com.bellmann.model.vo.FaultBasicInfoVO; import com.bellmann.model.vo.FaultBasicInfoVO;
import com.bellmann.model.vo.FaultDiagnosisResult;
import com.bellmann.model.vo.FaultQueryVO; import com.bellmann.model.vo.FaultQueryVO;
import com.bellmann.service.FaultService; import com.bellmann.service.FaultService;
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 org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List; import java.util.List;
@ -36,4 +34,11 @@ public class FaultController {
FaultBasicInfoVO faultBasicInfoVO = faultService.basicInfoQuery(query); FaultBasicInfoVO faultBasicInfoVO = faultService.basicInfoQuery(query);
return Result.success(faultBasicInfoVO); return Result.success(faultBasicInfoVO);
} }
@Operation(summary = "基本信息诊断")
@GetMapping("/basic_info/diagnosis")
public Result<FaultDiagnosisResult> basicInfoDiagnosis(@RequestParam Long devId,@RequestParam String remote){
FaultDiagnosisResult result = faultService.basicInfoDiagnosis(devId,remote);
return Result.success(result);
}
} }

@ -0,0 +1,5 @@
package com.bellmann.manger.impl;
public interface DataDictManager {
String AddEponOrLan(Long devId);
}

@ -0,0 +1,24 @@
package com.bellmann.manger.impl;
import com.bellmann.mapper.DataDictMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
@Component
@RequiredArgsConstructor
public class DataDictManagerImpl implements DataDictManager{
private final DataDictMapper dataDictMapper;
@Override
public String AddEponOrLan(Long devId) {
String result = dataDictMapper.AddEponOrLan(devId);
if (result.equalsIgnoreCase("EPON")) {
return "Epon";
} else if (result.equalsIgnoreCase("LAN")) {
return "Lan";
} else if (result.equalsIgnoreCase("GPON")) {
return "Gpon";
}
return "Epon";
}
}

@ -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.DataDict; import com.bellmann.model.entity.DataDict;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@Mapper @Mapper
public interface DataDictMapper extends BaseMapper<DataDict> { public interface DataDictMapper extends BaseMapper<DataDict> {
String AddEponOrLan(@Param("devId") Long devId);
} }

@ -0,0 +1,17 @@
package com.bellmann.model.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import java.util.Date;
@Data
public class FaultDiagnosisResult {
private String errorDesc;
private String testResult;
@JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss")
private Date endTime;
}

@ -2,6 +2,7 @@ package com.bellmann.service;
import com.bellmann.model.query.FaultQuery; import com.bellmann.model.query.FaultQuery;
import com.bellmann.model.vo.FaultBasicInfoVO; import com.bellmann.model.vo.FaultBasicInfoVO;
import com.bellmann.model.vo.FaultDiagnosisResult;
import com.bellmann.model.vo.FaultQueryVO; import com.bellmann.model.vo.FaultQueryVO;
import java.util.List; import java.util.List;
@ -10,4 +11,6 @@ public interface FaultService {
List<FaultQueryVO> queryList(FaultQuery query); List<FaultQueryVO> queryList(FaultQuery query);
FaultBasicInfoVO basicInfoQuery(FaultQuery query); FaultBasicInfoVO basicInfoQuery(FaultQuery query);
FaultDiagnosisResult basicInfoDiagnosis(Long devId, String remote);
} }

@ -1,23 +1,42 @@
package com.bellmann.service.impl; package com.bellmann.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.bellmann.common.base.IBaseEnum; import com.bellmann.common.base.IBaseEnum;
import com.bellmann.common.enums.CustomTypeEnum; import com.bellmann.common.constant.SystemConstants;
import com.bellmann.common.enums.DevAccessTypeEnum; import com.bellmann.common.enums.*;
import com.bellmann.common.enums.DevStatusEnum; import com.bellmann.common.exception.BusinessException;
import com.bellmann.common.result.ResultCode;
import com.bellmann.common.util.CommonUtils;
import com.bellmann.manger.CustomerManager; import com.bellmann.manger.CustomerManager;
import com.bellmann.manger.impl.DataDictManager;
import com.bellmann.mapper.DeviceStaticMapper; import com.bellmann.mapper.DeviceStaticMapper;
import com.bellmann.mapper.DeviceTypeVerDetailMapper; import com.bellmann.mapper.DeviceTypeVerDetailMapper;
import com.bellmann.mapper.OperateResult2Mapper;
import com.bellmann.mapper.OperateResultArgsMapper;
import com.bellmann.model.dto.OperationTask;
import com.bellmann.model.entity.Customer; import com.bellmann.model.entity.Customer;
import com.bellmann.model.entity.DeviceTypeVerDetail; import com.bellmann.model.entity.DeviceTypeVerDetail;
import com.bellmann.model.entity.OperateResult2;
import com.bellmann.model.entity.OperateResultArgs;
import com.bellmann.model.query.FaultQuery; import com.bellmann.model.query.FaultQuery;
import com.bellmann.model.vo.FaultBasicInfoVO; import com.bellmann.model.vo.FaultBasicInfoVO;
import com.bellmann.model.vo.FaultDiagnosisResult;
import com.bellmann.model.vo.FaultQueryVO; import com.bellmann.model.vo.FaultQueryVO;
import com.bellmann.security.util.SecurityUtils;
import com.bellmann.service.FaultService; import com.bellmann.service.FaultService;
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 lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.concurrent.TimeUnit;
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
@ -29,6 +48,12 @@ public class FaultServiceImpl implements FaultService {
private final DeviceTypeVerDetailMapper deviceTypeVerDetailMapper; private final DeviceTypeVerDetailMapper deviceTypeVerDetailMapper;
private final DataDictManager dataDictManager;
private final OperateResult2Mapper operateResult2Mapper;
private final OperateResultArgsMapper operateResultArgsMapper;
@Override @Override
public List<FaultQueryVO> queryList(FaultQuery query) { public List<FaultQueryVO> queryList(FaultQuery query) {
return deviceStaticMapper.faultQueryList(query.getLabel(), query.getValue()); return deviceStaticMapper.faultQueryList(query.getLabel(), query.getValue());
@ -59,4 +84,108 @@ public class FaultServiceImpl implements FaultService {
} }
return faultBasicInfoQuery; return faultBasicInfoQuery;
} }
@Override
public FaultDiagnosisResult basicInfoDiagnosis(Long devId, String remote) {
if (devId==null || devId==0L || remote==null){
throw new BusinessException(ResultCode.PARAM_IS_NULL);
}
String operateName = "";
String addEponOrLan = dataDictManager.AddEponOrLan(devId);
boolean flag = CommonUtils.isNeedlanOrEpon(remote);
if (flag){
operateName = IBaseEnum.getLabelByValue(remote, RemoteOperateMsgEnum.class) + addEponOrLan;
}else {
operateName = IBaseEnum.getLabelByValue(remote, RemoteOperateMsgEnum.class);
}
OperationTask operationTask = new OperationTask();
operationTask.setDeviceId(devId);
operationTask.setOperationName(operateName);
operationTask.setOperationTaskDescription(operateName);
operationTask.setCreateUser(SecurityUtils.getUsername());
long taskId = getDiagnosisResult(operationTask);
boolean isSuccess = taskIsSuccess(taskId);
FaultDiagnosisResult result = new FaultDiagnosisResult();
OperateResult2 operateResult2 = operateResult2Mapper.selectOne(
new QueryWrapper<OperateResult2>()
.eq("oper_task_id", taskId)
);
if (isSuccess){
List<OperateResultArgs> list = operateResultArgsMapper.selectList(new LambdaQueryWrapper<OperateResultArgs>()
.eq(OperateResultArgs::getOperTaskId, taskId)
);
result.setErrorDesc(operateResult2.getErrorDesc());
if (!list.isEmpty()){
result.setEndTime(list.get(0).getRecTime());
result.setTestResult(list.get(0).getArgsValue());
}
return result;
}else {
result.setErrorDesc(ResultCode.THE_INTERFACE_CONNECTION_TIMED_OUT.getMsg());
result.setEndTime(operateResult2.getOperEndTime());
return result;
}
}
public long getDiagnosisResult(OperationTask operationTask) {
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 = operationTask.getOperationTaskDescription();
operTaskStruct.operTaskId = operationTask.getOperationTaskId() == 0 ? Utils.LONG_NULL
: operationTask.getOperationTaskId();
operTaskStruct.userName = operationTask.getCreateUser() == null ? ""
: operationTask.getCreateUser();
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;
}
private boolean taskIsSuccess(Long taskId) {
int attempt = 0;
while (attempt < 10) {
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);
} else if (OperateTaskStateEnum.EXECUTION_FAILED.getValue().equals(state)) {
return true;
} else if (OperateTaskStateEnum.THE_DEVICE_IS_NOT_ONLINE.getValue().equals(state)) {
return true;
} else if (OperateTaskStateEnum.THE_EXECUTION_WAS_SUCCESSFUL.getValue().equals(state)) {
return true;
}
try {
TimeUnit.MILLISECONDS.sleep(SystemConstants.TASK_TIME_OUT_CONST4);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
attempt++;
}
return false;
}
} }

@ -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.DataDictMapper">
<select id="AddEponOrLan" resultType="java.lang.String">
SELECT DISTINCT C.VALUE
FROM ITMS_DEVICE_STATIC A,
ITMS_DEVICE_TYPE_VER_DETAIL B,
ITMS_DATA_DICT C
WHERE A.TYPE_AND_VER_ID = B.TYPE_AND_VER_ID
AND C.TABLE_NAME = 'ITMS_DEVICE_TYPE_VER_DETAIL'
AND C.COLUMN_NAME = 'DEV_ACCESS_TYPE'
AND B.DEV_ACCESS_TYPE = C.KEY
AND A.DEV_ID = #{devId}
</select>
</mapper>
Loading…
Cancel
Save