package com.ruoyi.project.mobile.controller; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.file.FileUploadUtils; import com.ruoyi.framework.config.RuoYiConfig; import com.ruoyi.framework.config.ServerConfig; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.project.mobile.domain.ApiRequestHeader; import com.ruoyi.project.mobile.domain.ApiResult; import com.ruoyi.project.mobile.service.ApiService; import com.ruoyi.project.mobile.service.ApiSystemService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** * APP使用的统一接口 */ @Api("安卓总控制器") @Controller @RequestMapping(value = "/mobile/api") public class ApiController extends BaseMobileController { private static Logger logger = LoggerFactory.getLogger(ApiController.class); @Autowired ApiService service; @Autowired private ServerConfig serverConfig; @Autowired ApiSystemService apiSystemService; @ApiOperation("登录Index") @RequestMapping(value = "/index", method = RequestMethod.POST) @ResponseBody public ApiResult index(@RequestBody String str, HttpServletRequest request) { ApiResult apiResult = null; ApiRequestHeader header = parseHeader(request); try { logger.debug("╔════════════════════════════════════════════════════════════════════════════════════════"); logger.debug("║ " + header.code); logger.debug("╟────────────────────────────────────────────────────────────────────────────────────────"); logger.debug("║ token:" + header.token); logger.debug("║ deviceType:" + header.deviceType); logger.debug("║ deviceId:" + header.deviceId); logger.debug("║ appType:" + header.appType); logger.debug("║ loginName:" + header.loginName); logger.debug("║ userId:" + header.userId); logger.debug("╟────────────────────────────────────────────────────────────────────────────────────────"); logger.debug("║ " + str); logger.debug("╚════════════════════════════════════════════════════════════════════════════════════════"); if (StringUtils.isEmpty(header.deviceType)) { return ApiResult.error("设备类型不能为空"); } if (StringUtils.isEmpty(header.deviceId)) { return ApiResult.error("设备id不能为空"); } if (StringUtils.isEmpty(header.appType)) { return ApiResult.error("app类型不能为空"); } if (StringUtils.isEmpty(header.loginName)) { return ApiResult.error("用户登录帐号不能为空"); }else{ String loginName = java.net.URLDecoder.decode(header.loginName,"utf-8"); header.loginName = loginName; } if (StringUtils.isEmpty(header.code)) { return ApiResult.error("请求类型不能为空"); } apiResult = processByReflect(str, header); } catch (Exception ex) { logger.error(ex.getLocalizedMessage()); ApiResult.error("异常"); } return apiResult; } private ApiResult processByReflect(String str, ApiRequestHeader header) { Class clazz = service.getClass(); Method mehtod; try { mehtod = clazz.getDeclaredMethod(header.code, String.class, ApiRequestHeader.class); } catch (Exception ex) { logger.error(ex.getLocalizedMessage()); return ApiResult.error("业务[" + header.code + "]不存在!"); } ApiResult apiResult; //分发 try { apiResult = (ApiResult) mehtod.invoke(service, str, header); } catch (IllegalAccessException ex) { logger.error(ex.getLocalizedMessage()); //TODO:正式部署,把后面的异常信息移除 apiResult = ApiResult.error("业务[" + header.code + "]process1执行异常!" + ex.getLocalizedMessage()); } catch (InvocationTargetException ex) { logger.error(ex.getLocalizedMessage()); String msg = ex.getTargetException().getLocalizedMessage(); logger.error("targetexception: " + msg); //TODO:正式部署,把后面的异常信息移除 apiResult = ApiResult.error("业务[" + header.code + "]process2执行异常!" + msg); } return apiResult; } /** * 手机用上传方法 * @param file * @return * @throws Exception */ @PostMapping("/upload") @ResponseBody public AjaxResult uploadImg(MultipartFile file) throws Exception { try { // 上传文件路径 String filePath = RuoYiConfig.getUploadPath(); // 上传并返回新文件名称 String fileName = FileUploadUtils.upload(filePath, file); String url = serverConfig.getUrl() + fileName; AjaxResult ajax = AjaxResult.success(); ajax.put("imageName", fileName); ajax.put("imageUrl", url); return ajax; } catch (Exception e) { return AjaxResult.error(e.getMessage()); } } }