From 23d0d2bd37cc8789b35f60f2c6d6e0727c284c7b Mon Sep 17 00:00:00 2001
From: shicf <shi_chongfu@163.com>
Date: 星期四, 24 四月 2025 11:01:52 +0800
Subject: [PATCH] 移动端app自动升级,安装包下载 ,版本检测

---
 src/main/java/com/product/file/service/FileManagerService.java       |  138 ++++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/product/file/controller/FileManagerController.java |   35 +++++++++++
 2 files changed, 172 insertions(+), 1 deletions(-)

diff --git a/src/main/java/com/product/file/controller/FileManagerController.java b/src/main/java/com/product/file/controller/FileManagerController.java
index f09ebbf..e1acd6a 100644
--- a/src/main/java/com/product/file/controller/FileManagerController.java
+++ b/src/main/java/com/product/file/controller/FileManagerController.java
@@ -274,7 +274,40 @@
 			return error(FileCode.UPLOAD_FILE_FAIL.getValue(), FileCode.UPLOAD_FILE_FAIL.getText());
 		}
 	}
-
+	/**
+	 * 绉诲姩绔崌绾т笅杞藉畨瑁呮枃浠�
+	 * 姝ゆ帴鍙i渶瑕佸姞鍏ョ櫧鍚嶅崟
+	 *
+	 * @return 缁撴灉
+	 */
+	@RequestMapping(value = "/upgrade-download/{version}", method = RequestMethod.GET)
+	@ApiVersion(1)
+	public String getAppFileContents(@RequestParam("uuid") String uuid,HttpServletRequest request, HttpServletResponse response) {
+		try {
+			FieldSetEntity fse = null;
+			Object bean = request.getAttribute(CoreConst.API_POST_REQUEST_DATA);
+			RequestParameterEntity rpe = (RequestParameterEntity) bean;
+			if (null != rpe && null != rpe.getFormData()) {
+				fse = rpe.getFormData();
+			}
+			if (fse == null) {
+				fse=new FieldSetEntity();
+				fse.setTableName("product_sys_attachments");
+				fse.setValue("uuid",uuid);
+				fse.setValue("needOnlineView", 0); 
+				SpringMVCContextHolder.getSystemLogger().error(FileCode.FORM_NODATA.getValue(), FileCode.FORM_NODATA.getText());
+//				return this.error(FileCode.FORM_NODATA.getValue(), FileCode.FORM_NODATA.getText());
+			}
+			SpringMVCContextHolder.getSystemLogger().info("閫氳繃GET璇锋眰鑾峰彇闄勪欢鍐呭");
+			// 姝e紡浠g爜
+			fileManagerService.getFileContent(fse, response ,true);
+			return OK();
+		} catch (Exception e) {
+			SpringMVCContextHolder.getSystemLogger().error(e);
+			e.printStackTrace();
+			return error(FileCode.GET_FILE_CONTENT_FAIL.getValue(), FileCode.GET_FILE_CONTENT_FAIL.getText());
+		}
+	}
 	/**
 	 * 涓嬭浇鏂囦欢鎴栬�呭湪绾块瑙�
 	 *
diff --git a/src/main/java/com/product/file/service/FileManagerService.java b/src/main/java/com/product/file/service/FileManagerService.java
index e8d3efe..b20eae9 100644
--- a/src/main/java/com/product/file/service/FileManagerService.java
+++ b/src/main/java/com/product/file/service/FileManagerService.java
@@ -445,7 +445,145 @@
 			}
 		}
 	}
+	/**
+	 * 绉诲姩绔崌绾э紝瀹夎鍖呬笅杞�
+	 *
+	 * @param fse
+	 * @param response
+	 */
+	public void getFileContent(FieldSetEntity fse, HttpServletResponse response,boolean isUpgrade) throws IOException {
+		if(isUpgrade) {
+			FieldSetEntity attachmentFse = baseDao.getFieldSetEntity(CmnConst.PRODUCT_SYS_ATTACHMENTS, fse.getUUID(), false);
+			if (attachmentFse == null || !"product_sys_app_version".equals(attachmentFse.getString("attachment_data_table")) ) {
+				return;
+			}
+			logger.info("姝e湪鑾峰彇鏂囦欢娴�...");
+			boolean needDownloadFromServerFlag = "1".equals(attachmentFse.getString(CmnConst.UPLOAD_SIGN));
+			String dir = attachmentFse.getString(CmnConst.ATTACHMENT_URL);
+			String fileName = attachmentFse.getString(CmnConst.ATTACHMENT_TITLE);
+			//鐪熷疄鏂囦欢鍚�
+			String realFileName = attachmentFse.getString(CmnConst.FILE_NAME);
+			String viewOnlineSign = attachmentFse.getString(CmnConst.VIEW_ONLINE_SIGN);
+			boolean encrptSignFlag = "1".equals(attachmentFse.getString(CmnConst.ENCRPT_SIGN));
+			boolean needOnlineViewFlag = "1".equals(fse.getString(CmnConst.NEED_ONLINE_VIEW)) && "1".equals(viewOnlineSign);
+			
+			String clientType =CoreConst.CLIENT_TYPE_APP;
 
+			String contentType = "multipart/form-data";
+			boolean isExcel = realFileName.endsWith(".xlsx") || realFileName.endsWith(".xls");
+			if (needOnlineViewFlag) {
+				//鐗规畩澶勭悊锛� 濡傛灉瀹㈡埛绔笉鏄疉pp 浣嗛瑙堢殑鏂囦欢鏄疎xcel 鐩存帴杩斿洖excel婧愭枃浠� content澶存爣璇嗘槸excel cheng 2025骞�2鏈�11鏃�10:41:41
+				if (isExcel && !CoreConst.CLIENT_TYPE_APP.equals(clientType)) {
+					contentType = "application/vnd.ms-excel";
+				} else {
+					dir += File.separator + CmnConst.TRANSFER_DIR_NAME;
+				}
+			}
+
+			String path = dir + File.separator + fileName;
+			if (needDownloadFromServerFlag) {
+				// 闇�瑕佷粠闄勪欢鏈嶅姟鍣ㄤ笂鍙栨枃浠�
+				FTPService ftpService = new FTPService();
+				logger.info("闇�瑕佷粠闄勪欢鏈嶅姟鍣ㄤ笂鍙栨枃浠�...");
+				response.setHeader("Access-Control-Expose-Headers", "*");
+
+				response.setContentType(contentType);
+				response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(realFileName, "UTF-8"));
+				//璁剧疆澶翠腑鐨勬枃浠剁被鍨�
+				if (!needOnlineViewFlag && !encrptSignFlag) {
+					logger.info("涓嶉渶瑕佽В瀵嗕笖鑾峰彇鍘熸枃浠�...");
+					try (ServletOutputStream os = response.getOutputStream()) {
+						ftpService.downloadFile(path, os);
+					}
+				} else {
+					logger.info("闇�瑕佽В瀵嗘垨鑰呰幏鍙栬浆鎹㈠悗鐨勬枃浠�...");
+					String localTempPath = Global.getSystemConfig("temp.dir", "") + File.separator + fileName;
+					File localTempFile = new File(localTempPath);
+					OutputStream tempOs = new FileOutputStream(localTempFile);
+					ftpService.downloadFile(path, tempOs);
+					tempOs.flush();
+					tempOs.close();
+					if (needOnlineViewFlag && localTempFile.length() == 0L) {
+						// 鑻ユ槸棰勮锛屼絾鏄浆鎹㈠悗鐨勬枃浠朵笉瀛樺湪锛岄偅涔堥噸鏂版墽琛岃浆鎹㈡搷浣�
+						File sourceFile = fileUtils.getFile(true, attachmentFse.getString(CmnConst.ATTACHMENT_URL), fileName, encrptSignFlag);
+						File tempSourceFile = new File(sourceFile.getParentFile().getAbsolutePath() + File.separator + attachmentFse.getString(CmnConst.FILE_NAME));
+						sourceFile.renameTo(tempSourceFile);
+						FileUtils.convertPdf(false, true, encrptSignFlag, true, tempSourceFile, dir, fileName, attachmentFse.getString(CmnConst.FILE_NAME));
+						tempSourceFile.delete();
+
+						// 閲嶆柊鎷夋枃浠�
+						tempOs = new FileOutputStream(localTempFile);
+						ftpService = new FTPService();
+						ftpService.downloadFile(path, tempOs);
+						tempOs.flush();
+						tempOs.close();
+					}
+					response.setContentLengthLong(localTempFile.length());
+					InputStream is = new FileInputStream(localTempFile);
+					int len;
+					byte[] b = new byte[1024];
+					try (ServletOutputStream os = response.getOutputStream()) {
+						while ((len = is.read(b)) > 0) {
+							os.write(encrptSignFlag ? FileUtil.decryption(b) : b, 0, len);
+						}
+						os.flush();
+						is.close();
+					}
+					// 鍒犻櫎涓存椂鏂囦欢
+					localTempFile.delete();
+				}
+			} else {
+				// 鐩存帴鍦ㄦ湰鍦扮殑鐩綍涓壘鏂囦欢
+				logger.info("鐩存帴鍦ㄦ湰鍦扮殑鐩綍涓壘鏂囦欢...");
+				String localBasePath = Global.getSystemConfig("local.dir", "");
+				path = localBasePath + File.separator + path;
+				File file = new File(path);
+				if (needOnlineViewFlag && file.exists() && CoreConst.CLIENT_TYPE_APP.equals(clientType)) {
+					//鐗规畩澶勭悊锛� 鏄疉pp 浣嗛瑙堢殑鏂囦欢鏄疎xcel 闇�瑕佸皢涔嬪墠宸茶浆鎹负鐨勬枃浠跺垹闄ゆ帀閲嶆柊杞崲锛堝洜杞崲鍚庣殑鏍煎紡涓嶆槸pdf)
+					String changeTime = "2025-02-11 23:59:59";
+					Date changeDate = DateUtil.parse(changeTime, "yyyy-MM-dd HH:mm:ss");
+					long fileTime = file.lastModified();
+					//濡傛灉鏃堕棿鏄� 2025骞�2鏈�10鏃�23:59:59锛岄偅涔堝氨閲嶆柊杞崲
+					//鍒犻櫎鏂囦欢
+					if (fileTime <= changeDate.getTime()) {
+						file.delete();
+					}
+				}
+				if (needOnlineViewFlag && !file.exists()) {
+					// 鑻ユ槸棰勮锛屼絾鏄浆鎹㈠悗鐨勬枃浠朵笉瀛樺湪锛岄偅涔堥噸鏂版墽琛岃浆鎹㈡搷浣�
+					File sourceFile = fileUtils.getFile(false, attachmentFse.getString(CmnConst.ATTACHMENT_URL), fileName, encrptSignFlag);
+					File tempSourceFile = new File(sourceFile.getParentFile().getAbsolutePath() + File.separator + attachmentFse.getString(CmnConst.FILE_NAME));
+					sourceFile.renameTo(tempSourceFile);
+					FileUtils.convertPdf(false, false, encrptSignFlag, true, tempSourceFile, dir, fileName, attachmentFse.getString(CmnConst.FILE_NAME));
+					tempSourceFile.delete();
+				}
+				int len;
+				byte[] b = new byte[1024];
+				InputStream is = new FileInputStream(file);
+				response.setHeader("Access-Control-Expose-Headers", "*");
+
+				response.setContentType(contentType);
+				response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(realFileName, "UTF-8"));
+				response.setContentLengthLong(file.length());
+				try (ServletOutputStream os = response.getOutputStream()) {
+					while ((len = is.read(b)) > 0) {
+						if (encrptSignFlag) {
+							// 闇�瑕佽В瀵�
+							logger.info("闇�瑕佽В瀵�...");
+							os.write(FileUtil.decryption(b), 0, len);
+						} else {
+							// 鏃犻渶瑙e瘑
+							os.write(b, 0, len);
+						}
+					}
+					os.flush();
+				}
+				is.close();
+			}
+			logger.info("鏂囦欢娴佽幏鍙栨垚鍔�");
+		}
+	
+	}
 	/**
 	 * 鎻愬彇鏂囦欢淇℃伅-涓嬭浇鏂囦欢鎴栬�呭湪绾块瑙堟枃浠�
 	 *

--
Gitblit v1.9.2