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 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 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); } }