package com.saite.energy.ids.controller;
import com.saite.energy.ids.enums.IdsHttpStatusEnum;
import com.saite.energy.ids.enums.ResponseResult;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;
/**
* @Description:
* @author: ljh
* @createDate: 2021-11-04 20:48
* @version: 1.0
*/
@RestController
@RequestMapping("/mac")
public class MacAddressController {
@PostMapping("/getMacAddress")
public ResponseResult<String> getMacAddress(String ip) throws SocketException {
InetAddress inetAddress = null;
// 遍历所有的网络接口
for (Enumeration networkInterfaces = NetworkInterface.getNetworkInterfaces(); networkInterfaces.hasMoreElements(); ) {
NetworkInterface ni = (NetworkInterface) networkInterfaces.nextElement();
// 在所有的接口下再遍历IP
for (Enumeration addresses = ni.getInetAddresses(); addresses.hasMoreElements(); ) {
InetAddress address = (InetAddress) addresses.nextElement();
//排除LoopbackAddress、SiteLocalAddress、LinkLocalAddress、MulticastAddress类型的IP地址
if (!address.isLoopbackAddress() /*&& !inetAddr.isSiteLocalAddress()*/
&& !address.isLinkLocalAddress() && !address.isMulticastAddress() && ip.equals(address.getHostAddress())) {
inetAddress = address;
}
}
}
if (inetAddress != null){
try {
byte[] mac = NetworkInterface.getByInetAddress(inetAddress).getHardwareAddress();
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < mac.length; i++) {
if (i != 0) {
stringBuilder.append("-");
}
/** 将十六进制byte转化为字符串 */
String temp = Integer.toHexString(mac[i] & 0xff);
if (temp.length() == 1) {
stringBuilder.append("0").append(temp);
} else {
stringBuilder.append(temp);
}
}
return ResponseResult.ok().data(stringBuilder.toString().toUpperCase());
} catch (SocketException e) {
e.printStackTrace();
}
return null;
}else {
return ResponseResult.error(IdsHttpStatusEnum.LICENSE_IP_ERROR);
}
}
}
package com.saite.energy.ids.enums;
import lombok.Getter;
import java.util.Arrays;
import java.util.Optional;
/**
* 20000是请求成功 定义业务处理的错误码 方便给前端做国际化处理
* <p>
* 错误码和错误信息的定义 1.错误码的定义规则为5位数字 2.前方两位表示业务场景,最后3位表示错误码。例如:100001。10:通用 001:系统未知异常
*
* 3.维护错误码后需要维护错误码描述,将他们定义位枚举形式 错误码列表: 10:通用 001:参数格式校验
* 接下来的业务的错误码,就每一个业务给100个错误码的提示信息,如果不够,可以再在后面拍一个,比如授权模块 110 不够 可以使用120[00 - 99]
*
*
* </p>
*
* @author lijinghui
* @version v1.0.0
* @since 2021-02-07 15:27:08
* @see IdsHttpStatusEnum
*
*/
@Getter
public enum IdsHttpStatusEnum {
OK(20000, "成功"),
// 用户模块 111[00-99]
NO_USER_ID_ERROR(11100, "无用户ID"), NO_ROLE_ID_ERROR(11101, "缺少角色ID"), ENTERPRISE_DEPT_DELETE(11102,"企业删除失败,请先删除该企业下的所有部门和电站"),
AUTH_TOO_HIGH(11103,"该角色含有过高权限"),ROLE_DETAIL_FAUL(11104,"该角色详情不可查看"),
ROLE_TOO_HIGH(11105,"该用户含有过高角色"),USER_DETAIL_FAUL(11106,"该用户详情不可查看"),
NO_DEPT(11107,"部门不能为空"),LOGIN_NAME_NULL(11108,"用户名不能为空"),LOGIN_NAME_EXIST(11109,"用户名已存在"),
SMS_SEND_TOO_OFTEN(11110,"短信发送太频繁"), VER_CODE_ERROR(11111, "验证码错误"),
EMAIL_SEND_TO_OFTEN(11112, "邮件发送太频繁"), REGISTER_TYPE_ERROR(11113, "注册类型错误"), FORGET_TYPE_ERROR(11114, "找回密码类型错误"),
USER_UNREGISTER(11115, "账号未注册"),ROLE_CAN_NOT_UPDATE(11116,"该角色为内置角色,不可修改"),REGISTER_ROLE_ERROR(11117, "注册角色有误"),
INSTALLER_OR_AGENT_ENTERPRISE_NOT_NULL(11118,"安装商或代理商所属企业不能为空"),USER_USERNAME_ERROR(11119,"用户姓名不能为空"),
USER_GENDER_ERROR(11120,"用户性别有误"),USER_ORIGINAL_PASSWORD_ERROR(11121,"旧密码有误"),USER_NEW_PASSWORD_ERROR(11122,"新密码有误"),
LICENSE_FILETYPE_NOTMATCH(11123,"license文件类型不匹配"),LICENSE_IMPORT_FAIL(11124,"license导入失败"),LICENSE_IP_ERROR(11125,"license导入失败,没有对应ip"),
;
private int code;
private String msg;
IdsHttpStatusEnum(int code, String msg) {
this.code = code;
this.msg = msg;
}
/**
* 通过编号获取对应的枚举类型
* @param code
* @return
*/
public static IdsHttpStatusEnum getByCode(int code) {
Optional<IdsHttpStatusEnum> first = Arrays.stream(IdsHttpStatusEnum.values()).filter(item -> item.code == code).findFirst();
if(first.isPresent()) {
return first.get();
}
return null;
}
}
package com.saite.energy.ids.enums;
import lombok.Data;
/**
* @Description: TODO
* @author: lijinghui
* @date: 2021年02月07日 13:49
*/
@Data
public class ResponseResult<T> {
/**
* 用户码: 20000 ok
*/
private int code;
private String msg;
private T data;
public static ResponseResult error(IdsHttpStatusEnum bizCodeEnum) {
ResponseResult r = new ResponseResult<>();
r.setCode(bizCodeEnum.getCode());
r.setMsg(bizCodeEnum.getMsg());
return r;
}
public static ResponseResult ok() {
ResponseResult<?> r = new ResponseResult<>();
r.setCode(IdsHttpStatusEnum.OK.getCode());
return r;
}
public ResponseResult data(T data) {
this.setData(data);
return this;
}
/**
* 错误消息是不确定的方式
* @param dynamicError
* @return
*/
public static ResponseResult error(String dynamicError) {
ResponseResult r = new ResponseResult<>();
r.setCode(IdsHttpStatusEnum.DYNAMIC_ERROR.getCode());
r.setMsg(dynamicError);
return r;
}
/**
* 是否请求成功
* @return
*/
public boolean isSuccess() {
return code == IdsHttpStatusEnum.OK.getCode();
}
}
版权声明:本文为weixin_42287451原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。