9abe5fe3cb54fc7fce530728559d972ab87ae149.svn-base 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. package cn.com.goldenwater.dcproj.controller.system;
  2. import cn.com.goldenwater.core.web.BaseController;
  3. import cn.com.goldenwater.core.web.BaseResponse;
  4. import cn.com.goldenwater.dcproj.model.Version;
  5. import cn.com.goldenwater.dcproj.service.GwComFileService;
  6. import cn.com.goldenwater.dcproj.service.VersionService;
  7. import cn.com.goldenwater.id.util.UuidUtil;
  8. import cn.com.goldenwater.util.common.FileUtils;
  9. import io.swagger.annotations.Api;
  10. import io.swagger.annotations.ApiOperation;
  11. import io.swagger.annotations.ApiParam;
  12. import org.apache.commons.lang3.StringUtils;
  13. import org.slf4j.Logger;
  14. import org.slf4j.LoggerFactory;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.beans.factory.annotation.Value;
  17. import org.springframework.web.bind.annotation.*;
  18. import org.springframework.web.multipart.MultipartFile;
  19. import javax.servlet.http.HttpServletResponse;
  20. import java.io.*;
  21. import java.util.Calendar;
  22. import java.util.Date;
  23. /**
  24. * @author zhaohg
  25. * @date 2018-11-9
  26. */
  27. @Api(value = "获取版本号信息", tags = "04获取版本号信息")
  28. @RestController
  29. @RequestMapping("/version")
  30. public class VersionController extends BaseController {
  31. private Logger logger = LoggerFactory.getLogger(getClass());
  32. @Autowired
  33. private VersionService versionService;
  34. @Value("${web.apk-path}")
  35. public String apkPath;
  36. @Autowired
  37. private GwComFileService gwComFileService;
  38. @ApiOperation(value = "添加文件", notes = "参数字段说明:{\n\r" +
  39. " \"file\":\"上传文件\",\n\r" +
  40. " \"versions\":\"版本号\",\n\r" +
  41. " \"updateContent\":\"更新内容\",\n\r" +
  42. " \"appName\":\"APP名称\",\n\r" +
  43. " \"forceUpdate\":\"是否强制更新\",\n\r" +
  44. " };\n\r" +
  45. "返回结构说明:{\n\r" +
  46. " \"success\":\"是否成功(true为成功,false为失败)\",\n\r" +
  47. " \"code\":\"错误代码\",\n\r" +
  48. " \"message\":\"描述信息\",\n\r" +
  49. " \"throwable\":\"异常信息\",\n\r" +
  50. " \"data(数据信息)\":{\n\r" +
  51. " {\n\r" +
  52. " \"id \":\"主键id\",\n\r" +
  53. " }\n\r" +
  54. " }")
  55. @RequestMapping(value = "/insert", method = RequestMethod.POST)
  56. public BaseResponse<String> insert(@RequestParam("file") MultipartFile file, String versions,
  57. String updateContent, String appName, Integer forceUpdate) {
  58. String uuid = UuidUtil.uuid(); // 生成uuid
  59. Version version = new Version();
  60. version.setId(uuid);
  61. version.setAppName(appName);
  62. version.setVersion(versions);
  63. version.setUpdateContent(updateContent);
  64. version.setForceUpdate(forceUpdate);
  65. version.setPubDate(new Date());
  66. version.setFileSize(file.getSize());
  67. String originalFilename = file.getOriginalFilename();
  68. version.setFileName(originalFilename);
  69. String ext = originalFilename.substring(1 + originalFilename.lastIndexOf("."));
  70. //按时间日期存文件
  71. Calendar dat = Calendar.getInstance();
  72. 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;
  73. version.setStorePath(filePath);
  74. //写入文件
  75. filePath = apkPath + dat.get(Calendar.YEAR) + File.separator + (dat.get(Calendar.MONTH) + 1) + File.separator + dat.get(Calendar.DAY_OF_MONTH);
  76. boolean success = gwComFileService.writeFile(uuid, ext, file, filePath);
  77. if (success) {
  78. int ret = versionService.insert(version);
  79. } else {
  80. return buildFailResponse(1001, "文件上传失败");
  81. }
  82. return buildSuccessResponse(uuid);
  83. }
  84. @ApiOperation(value = "获取最新版本号信息", notes = "参数字段说明:{\n\r" +
  85. " (无)\",\n\r" +
  86. " };\n\r" +
  87. "返回结构说明:{\n\r" +
  88. " \"success\":\"是否成功(true为成功,false为失败)\",\n\r" +
  89. " \"code\":\"错误代码\",\n\r" +
  90. " \"message\":\"描述信息\",\n\r" +
  91. " \"throwable\":\"异常信息\",\n\r" +
  92. " \"data(数据信息)\":\n\r" +
  93. " {\n\r" +
  94. " \"id \":\"主键\",\n\r" +
  95. " \"version \":\"版本号\",\n\r" +
  96. " \"updateContent \":\"更新内容\",\n\r" +
  97. " \"storePath \":\"下载地址\",\n\r" +
  98. " \"appName \":\"APP名称\",\n\r" +
  99. " \"fileName \":\"文件名称\",\n\r" +
  100. " \"forceUpdate \":\"是否强制更新\",\n\r" +
  101. " \"pubDate \":\"发布时间\",\n\r" +
  102. " }")
  103. @RequestMapping(value = "/getLastest", method = {RequestMethod.POST})
  104. public BaseResponse<Version> getLastest(@ApiParam(name = "version", value = "当前版本号", required = false) @RequestParam(required = false) String version) {
  105. Version v = versionService.getLatestVersion();
  106. String v1 = v.getVersion();
  107. int num1 = 0;
  108. if (!StringUtils.isBlank(v1)) {
  109. num1 = Integer.parseInt(v1);
  110. }
  111. int num2 = 0;
  112. if (StringUtils.isBlank(version)) {
  113. v.setForceUpdate(1);
  114. } else {
  115. num2 = Integer.parseInt(version);
  116. }
  117. if (num1 - num2 > 1) {
  118. v.setForceUpdate(1);
  119. }
  120. if (v.getUpdateContent() != null) {
  121. String content = v.getUpdateContent().replaceAll("\\\\n", "\n");
  122. v.setUpdateContent(content);
  123. }
  124. return buildSuccessResponse(v);
  125. }
  126. @ApiOperation(value = "下载文件", notes = "参数字段说明:{\n\r" +
  127. " \"id\":\"版本id\",\n\r" +
  128. " };\n\r" +
  129. "返回结构说明:{\n\r" +
  130. " \"success\":\"是否成功(true为成功,false为失败)\",\n\r" +
  131. " \"code\":\"错误代码\",\n\r" +
  132. " \"message\":\"描述信息\",\n\r" +
  133. " \"throwable\":\"异常信息\",\n\r" +
  134. " \"data(数据信息)\":{\n\r" +
  135. " {\n\r" +
  136. " \"file \":\"文件\",\n\r" +
  137. " }\n\r" +
  138. " }")
  139. @RequestMapping(value = "/download", method = RequestMethod.GET)
  140. public void download(HttpServletResponse response) {
  141. Version version = versionService.getLatestVersion();
  142. if (version != null) {
  143. //获取文件路径
  144. String filePath = version.getStorePath();
  145. File file = new File(filePath);
  146. //判断文件是否存在
  147. if (FileUtils.exist(filePath)) {
  148. String fileName = org.apache.commons.lang3.StringUtils.defaultString(version.getFileName(), "文件");
  149. try {
  150. response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
  151. response.setHeader("Content-Length", "" + version.getFileSize());
  152. //response.setHeader("Content-Type","application/vnd.android.package-archive");
  153. InputStream inputStream = new FileInputStream(file);
  154. if (inputStream != null) {
  155. OutputStream os = response.getOutputStream();
  156. try {
  157. int len = 0;
  158. byte[] buffer = new byte[4096];
  159. while ((len = inputStream.read(buffer, 0, buffer.length)) != -1) {
  160. os.write(buffer, 0, len);
  161. }
  162. } catch (Exception e) {
  163. e.printStackTrace();
  164. } finally {
  165. inputStream.close();
  166. }
  167. }
  168. } catch (IOException e) {
  169. e.printStackTrace();
  170. }
  171. }
  172. }
  173. }
  174. }