package com.ruoyi.system.service.impl;
|
|
import com.ruoyi.common.utils.http.HttpUtils;
|
import com.ruoyi.system.domain.GpsLoginRequest;
|
import com.ruoyi.system.domain.GpsLoginResponse;
|
import com.ruoyi.system.service.IGpsCollectService;
|
import com.ruoyi.system.config.GpsServiceConfig;
|
import com.ruoyi.common.utils.MD5Util;
|
import org.springframework.stereotype.Service;
|
import org.springframework.web.client.RestTemplate;
|
import org.springframework.http.HttpEntity;
|
import org.springframework.http.HttpHeaders;
|
import org.springframework.http.MediaType;
|
import org.springframework.http.ResponseEntity;
|
import java.util.HashMap;
|
import java.util.Map;
|
import org.springframework.util.StringUtils;
|
import com.ruoyi.common.utils.HttpUtil;
|
import com.alibaba.fastjson.JSONObject;
|
import com.ruoyi.common.exception.ServiceException;
|
|
/**
|
* GPS采集服务实现
|
*/
|
@Service
|
public class GpsCollectServiceImpl implements IGpsCollectService {
|
|
private final RestTemplate restTemplate;
|
private final GpsServiceConfig gpsServiceConfig;
|
|
public GpsCollectServiceImpl(GpsServiceConfig gpsServiceConfig) {
|
this.restTemplate = new RestTemplate();
|
this.gpsServiceConfig = gpsServiceConfig;
|
}
|
|
@Override
|
public GpsLoginResponse login(GpsLoginRequest request) {
|
// 参数校验
|
if (StringUtils.isEmpty(request.getType()) || StringUtils.isEmpty(request.getFrom())) {
|
throw new ServiceException("参数不能为空");
|
}
|
|
// 构建请求URL
|
String url = gpsServiceConfig.getDomain() + "/webapi?action=login";
|
|
// 设置请求参数
|
Map<String, String> params = new HashMap<>();
|
params.put("username", gpsServiceConfig.getUsername());
|
params.put("password", MD5Util.md5(gpsServiceConfig.getPassword()));
|
params.put("type", request.getType());
|
params.put("from", request.getFrom());
|
params.put("browser", request.getBrowser());
|
|
StringBuilder paramStr = new StringBuilder();
|
for (Map.Entry<String, String> entry : params.entrySet()) {
|
if (paramStr.length() > 0) {
|
paramStr.append("&");
|
}
|
paramStr.append(entry.getKey()).append("=").append(entry.getValue());
|
}
|
|
// 发送请求
|
String response = HttpUtil.post(url,params);
|
|
// 解析响应
|
GpsLoginResponse loginResponse = new GpsLoginResponse();
|
try {
|
JSONObject jsonResponse = JSONObject.parseObject(response);
|
int status = jsonResponse.getIntValue("status");
|
String username = jsonResponse.getString("username");
|
|
// 根据返回码设置响应信息
|
switch (status) {
|
case 0:
|
loginResponse.setSuccess(true);
|
loginResponse.setMessage("登录成功");
|
loginResponse.setToken(jsonResponse.getString("token"));
|
break;
|
case -1:
|
loginResponse.setSuccess(false);
|
loginResponse.setMessage("登录失败");
|
break;
|
case 1:
|
loginResponse.setSuccess(false);
|
loginResponse.setMessage("密码错误");
|
break;
|
case 2:
|
loginResponse.setSuccess(false);
|
loginResponse.setMessage("禁止登录");
|
break;
|
case 3:
|
loginResponse.setSuccess(false);
|
loginResponse.setMessage("账号已禁用");
|
break;
|
case 4:
|
loginResponse.setSuccess(false);
|
loginResponse.setMessage("设备到期");
|
break;
|
case 5:
|
loginResponse.setSuccess(false);
|
loginResponse.setMessage("设备过期");
|
break;
|
case 9903:
|
loginResponse.setSuccess(false);
|
loginResponse.setMessage("Token过期");
|
break;
|
case 9906:
|
loginResponse.setSuccess(false);
|
loginResponse.setMessage("账号在其他地方登录");
|
break;
|
default:
|
loginResponse.setSuccess(false);
|
loginResponse.setMessage("未知错误");
|
break;
|
}
|
} catch (Exception e) {
|
loginResponse.setSuccess(false);
|
loginResponse.setMessage("解析响应失败:" + e.getMessage());
|
}
|
|
return loginResponse;
|
}
|
|
/**
|
* 校验登录来源
|
*/
|
private boolean isValidFrom(String from) {
|
if (from == null) {
|
return false;
|
}
|
return "ANDROID".equals(from) || "IPHONE".equals(from) ||
|
"WEB".equals(from) || "WEIXIN".equals(from);
|
}
|
|
/**
|
* 校验登录类型
|
*/
|
private boolean isValidType(String type) {
|
if (type == null) {
|
return false;
|
}
|
return "USER".equals(type) || "DEVICE".equals(type);
|
}
|
}
|