package cn.com.goldenwater.dcproj.controller.system; import cn.com.goldenwater.core.web.BaseController; import cn.com.goldenwater.core.web.BaseResponse; import cn.com.goldenwater.dcproj.model.Version; import cn.com.goldenwater.dcproj.service.GwComFileService; import cn.com.goldenwater.dcproj.service.VersionService; import cn.com.goldenwater.id.util.UuidUtil; import cn.com.goldenwater.util.common.FileUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.*; import java.util.Calendar; import java.util.Date; /** * @author zhaohg * @date 2018-11-9 */ @Api(value = "获取版本号信息", tags = "04获取版本号信息") @RestController @RequestMapping("/version") public class VersionController extends BaseController { private Logger logger = LoggerFactory.getLogger(getClass()); @Autowired private VersionService versionService; @Value("${web.apk-path}") public String apkPath; @Autowired private GwComFileService gwComFileService; @ApiOperation(value = "添加文件", notes = "参数字段说明:{\n\r" + " \"file\":\"上传文件\",\n\r" + " \"versions\":\"版本号\",\n\r" + " \"updateContent\":\"更新内容\",\n\r" + " \"appName\":\"APP名称\",\n\r" + " \"forceUpdate\":\"是否强制更新\",\n\r" + " };\n\r" + "返回结构说明:{\n\r" + " \"success\":\"是否成功(true为成功,false为失败)\",\n\r" + " \"code\":\"错误代码\",\n\r" + " \"message\":\"描述信息\",\n\r" + " \"throwable\":\"异常信息\",\n\r" + " \"data(数据信息)\":{\n\r" + " {\n\r" + " \"id \":\"主键id\",\n\r" + " }\n\r" + " }") @RequestMapping(value = "/insert", method = RequestMethod.POST) public BaseResponse insert(@RequestParam("file") MultipartFile file, String versions, String updateContent, String appName, Integer forceUpdate) { String uuid = UuidUtil.uuid(); // 生成uuid Version version = new Version(); version.setId(uuid); version.setAppName(appName); version.setVersion(versions); version.setUpdateContent(updateContent); version.setForceUpdate(forceUpdate); version.setPubDate(new Date()); version.setFileSize(file.getSize()); String originalFilename = file.getOriginalFilename(); version.setFileName(originalFilename); String ext = originalFilename.substring(1 + originalFilename.lastIndexOf(".")); //按时间日期存文件 Calendar dat = Calendar.getInstance(); String filePath = apkPath + dat.get(Calendar.YEAR) + File.separator + (dat.get(Calendar.MONTH) + 1) + File.separator + dat.get(Calendar.DAY_OF_MONTH) + File.separator + uuid + "." + ext; version.setStorePath(filePath); //写入文件 filePath = apkPath + dat.get(Calendar.YEAR) + File.separator + (dat.get(Calendar.MONTH) + 1) + File.separator + dat.get(Calendar.DAY_OF_MONTH); boolean success = gwComFileService.writeFile(uuid, ext, file, filePath); if (success) { int ret = versionService.insert(version); } else { return buildFailResponse(1001, "文件上传失败"); } return buildSuccessResponse(uuid); } @ApiOperation(value = "获取最新版本号信息", notes = "参数字段说明:{\n\r" + " (无)\",\n\r" + " };\n\r" + "返回结构说明:{\n\r" + " \"success\":\"是否成功(true为成功,false为失败)\",\n\r" + " \"code\":\"错误代码\",\n\r" + " \"message\":\"描述信息\",\n\r" + " \"throwable\":\"异常信息\",\n\r" + " \"data(数据信息)\":\n\r" + " {\n\r" + " \"id \":\"主键\",\n\r" + " \"version \":\"版本号\",\n\r" + " \"updateContent \":\"更新内容\",\n\r" + " \"storePath \":\"下载地址\",\n\r" + " \"appName \":\"APP名称\",\n\r" + " \"fileName \":\"文件名称\",\n\r" + " \"forceUpdate \":\"是否强制更新\",\n\r" + " \"pubDate \":\"发布时间\",\n\r" + " }") @RequestMapping(value = "/getLastest", method = {RequestMethod.POST}) public BaseResponse getLastest(@ApiParam(name = "version", value = "当前版本号", required = false) @RequestParam(required = false) String version) { Version v = versionService.getLatestVersion(); String v1 = v.getVersion(); int num1 = 0; if (!StringUtils.isBlank(v1)) { num1 = Integer.parseInt(v1); } int num2 = 0; if (StringUtils.isBlank(version)) { v.setForceUpdate(1); } else { num2 = Integer.parseInt(version); } if (num1 - num2 > 1) { v.setForceUpdate(1); } if (v.getUpdateContent() != null) { String content = v.getUpdateContent().replaceAll("\\\\n", "\n"); v.setUpdateContent(content); } return buildSuccessResponse(v); } @ApiOperation(value = "下载文件", notes = "参数字段说明:{\n\r" + " \"id\":\"版本id\",\n\r" + " };\n\r" + "返回结构说明:{\n\r" + " \"success\":\"是否成功(true为成功,false为失败)\",\n\r" + " \"code\":\"错误代码\",\n\r" + " \"message\":\"描述信息\",\n\r" + " \"throwable\":\"异常信息\",\n\r" + " \"data(数据信息)\":{\n\r" + " {\n\r" + " \"file \":\"文件\",\n\r" + " }\n\r" + " }") @RequestMapping(value = "/download", method = RequestMethod.GET) public void download(HttpServletResponse response) { Version version = versionService.getLatestVersion(); if (version != null) { //获取文件路径 String filePath = version.getStorePath(); File file = new File(filePath); //判断文件是否存在 if (FileUtils.exist(filePath)) { String fileName = org.apache.commons.lang3.StringUtils.defaultString(version.getFileName(), "文件"); try { response.setHeader("Content-Disposition", "attachment; filename=" + fileName); response.setHeader("Content-Length", "" + version.getFileSize()); //response.setHeader("Content-Type","application/vnd.android.package-archive"); InputStream inputStream = new FileInputStream(file); if (inputStream != null) { OutputStream os = response.getOutputStream(); try { int len = 0; byte[] buffer = new byte[4096]; while ((len = inputStream.read(buffer, 0, buffer.length)) != -1) { os.write(buffer, 0, len); } } catch (Exception e) { e.printStackTrace(); } finally { inputStream.close(); } } } catch (IOException e) { e.printStackTrace(); } } } } }