Browse Source

版本管理

everydatestudy 3 năm trước cách đây
mục cha
commit
e2bd279e5b

+ 11 - 2
java/sp-app/src/main/java/com/anji/sp/controller/SpAppReqController.java

@@ -5,8 +5,12 @@ import com.anji.sp.model.ResponseModel;
 import com.anji.sp.model.vo.AppUpdateReqVo;
 import com.anji.sp.model.vo.SpAppReqDataVO;
 import com.anji.sp.service.SpAppReqService;
+import com.anji.sp.service.impl.SpAppReqServiceImpl;
+
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -22,6 +26,7 @@ import javax.servlet.http.HttpServletRequest;
 @RestController
 @RequestMapping("/phone")
 @Api(tags = "手机端请求接口")
+@Slf4j
 public class SpAppReqController {
 
 	@Autowired
@@ -45,15 +50,19 @@ public class SpAppReqController {
 		return spAppReqService.getAppNotice(spAppReqDataVO, request);
 	}
 
-	@ApiOperation(value = "下载app", httpMethod = "get")
+	@ApiOperation(value = "下载app", httpMethod = "GET")
 	@GetMapping("/download")
 	public JSONObject download(AppUpdateReqVo spAppReqDataVO) {
 		try {
-			return spAppReqService.download(spAppReqDataVO);
+			log.info("版本更新请求参数:{}", spAppReqDataVO);
+			JSONObject jsonObj = spAppReqService.download(spAppReqDataVO);
+			log.info("版本更新请求结果值:{}", jsonObj);
+			return jsonObj;
 		} catch (Exception e) {
 			JSONObject json = new JSONObject();
 			json.put("code", 70002);
 			json.put("msg", "版本更新失败!");
+			log.error("请求下载接口异常:{}", e.getMessage());
 			return json;
 		}
 

+ 2 - 0
java/sp-app/src/main/java/com/anji/sp/model/vo/AppUpdateReqVo.java

@@ -3,9 +3,11 @@ package com.anji.sp.model.vo;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;
+import lombok.ToString;
 
 @Getter
 @Setter
+@ToString
 public class AppUpdateReqVo {
 	@ApiModelProperty(value = "平台(ios/android)", required = true)
 	private String platform = "Android";

+ 2 - 2
java/sp-app/src/main/java/com/anji/sp/model/vo/AppUpdateRespVo.java

@@ -9,8 +9,8 @@ public class AppUpdateRespVo {
 	private String code="0";
 	private String msg="";
 	private String updateStatus;
-	private String versionCode;
-	private String versionName;
+	private String versionCode="0";
+	private String versionName="0";
 	private String modifyContent;
 	private String downloadUrl;
 	private String apkSize;

+ 45 - 6
java/sp-app/src/main/java/com/anji/sp/service/impl/SpAppReqServiceImpl.java

@@ -45,10 +45,14 @@ import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Objects;
+import java.util.Set;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
@@ -226,7 +230,7 @@ public class SpAppReqServiceImpl implements SpAppReqService {
 					}
 					spVersionForAPPVO.setMustUpdate(vo.getNeedUpdateVersionList().contains(spAppLogPO.getVersionName())
 							|| vo.getVersionConfigStrList().contains(osVersion));
-//                        spVersionForAPPVO.setMustUpdate(spVersionAppTempVO.getVersionConfig().contains(osVersion));
+					spVersionForAPPVO.setMustUpdate(spVersionAppTempVO.getVersionConfig().contains(osVersion));
 				}
 				return ResponseModel.successData(spVersionForAPPVO);
 			}
@@ -235,6 +239,7 @@ public class SpAppReqServiceImpl implements SpAppReqService {
 		}
 		return ResponseModel.errorMsg("获取失败");
 	}
+
 	@Override
 	public JSONObject download(AppUpdateReqVo spAppReqDataVO) {
 		JSONObject json = new JSONObject();
@@ -248,28 +253,62 @@ public class SpAppReqServiceImpl implements SpAppReqService {
 		SpVersionVO vo = spVersionService.getEffectiveVersionVO(spVersionVO);
 
 		if (Objects.nonNull(vo)) {
+			// 判断是否和数据库的值一样
+			if (vo.getVersionName().equals(spAppReqDataVO.getVersionName())
+					&& vo.getVersionNumber().equals(spAppReqDataVO.getVersionCode())) {
+				respVo.setUpdateStatus("0");
+				respVo.setVersionCode(spAppReqDataVO.getVersionCode());
+				respVo.setVersionName(spAppReqDataVO.getVersionName());
+				json.put("code", 100);
+				json.put("msg", "当前版本已是最新!");
+				json.put("data", respVo);
+				return json;
+			}
+			long paramVersion = Long.parseLong(spAppReqDataVO.getVersionCode());
+			long effectiveVersion = Long.parseLong(vo.getVersionNumber());
+			//if()
+			//如果版本号太新,则返回不更新
+			if(paramVersion>effectiveVersion) {
+				json.put("code", 100);
+				json.put("msg", "当前版本号比服务器的新!");
+				json.put("data", respVo);
+				return json;
+			}
 			// 版的数据中的版本号是否大于接口传过来的版本号
 			String url = vo.getDownloadUrl();
 			int index = url.lastIndexOf("/");
-			String fileId = url.substring(index+1);
-			QueryWrapper<SpFilePO> fileqw=new QueryWrapper<>();
+			String fileId = url.substring(index + 1);
+			QueryWrapper<SpFilePO> fileqw = new QueryWrapper<>();
 			fileqw.eq("file_id", fileId);
 			SpFilePO filepo = fileMapper.selectOne(fileqw);
 			respVo.setApkMd5(filepo.getApkMd5());
 			respVo.setApkSize(filepo.getApkSize());
 			respVo.setDownloadUrl(url);
 			respVo.setUpdateStatus("1");
+			// 判断是否需要强制更新
+
+			if (paramVersion < effectiveVersion) {
+				// 查询是否需要强制更新
+				List<String> list = vo.getNeedUpdateVersionList();
+				long version = spVersionService.selectUpdateVersion(list, vo.getCreateDate(), vo.getAppId());
+				if (paramVersion < version) {
+					respVo.setUpdateStatus("2");
+				}
+			}
 			respVo.setVersionName(vo.getVersionName());
 			respVo.setVersionCode(vo.getVersionNumber());
 			respVo.setModifyContent(vo.getUpdateLog());
 			json.put("code", 100);
+			json.put("msg", "当前最新版本:"+vo.getVersionName());
 			json.put("data", respVo);
 			return json;
 		}
-		json.put("code", 70001);
-		json.put("msg","版本更新失败");
+
+		respVo.setUpdateStatus("0");
+		json.put("code", 100);
+		json.put("msg", "没有可更新的版本!");
+		json.put("data", respVo);
 		return json;
-		 
 	}
 
 	/**

+ 1 - 1
java/sp-app/src/main/resources/application.properties

@@ -69,7 +69,7 @@ pagehelper.params=count=countSql
 #服务器地址
 customer.environment.path=https://openappsp.anji-plus.com
 #apk 下载路径前缀
-file.apk.url=http://192.168.0.105:8081/sp/download/
+file.apk.url=http://192.168.0.105:8831/sp/download/
 # 上传你文件地址  upload.filename + /apk  查看 sp-version util FileProfileConfig、FileNameEnum、FileUploadUtils
 upload.filename=/app/file-sp
 #debuge mac file

+ 0 - 1
java/sp-auth/src/main/java/com/anji/sp/aspect/AuthorizeAspect.java

@@ -72,7 +72,6 @@ public class AuthorizeAspect {
                 throw new AccessDeniedException("权限不足");
             }
         }
-
         //执行方法
         return point.proceed();
     }

+ 59 - 39
java/sp-auth/src/main/resources/logback.xml

@@ -1,47 +1,67 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <configuration>
-    <property name="LOG_HOME" value="./logs"/>
-    <property name="LOG_NAME" value="sp"/>
+	<property name="LOG_HOME" value="./logs" />
+	<property name="LOG_NAME" value="sp" />
 
-    <!--控制台-->
-    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
-        <encoder>
-            <pattern>%d{MM-dd HH:mm:ss.SSS} | %thread |-%-5level %logger{36}:%L - %msg%n</pattern>
-        </encoder>
-        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
-            <level>INFO</level>
-        </filter>
-    </appender>
+	<!--控制台 -->
+	<appender name="STDOUT"
+		class="ch.qos.logback.core.ConsoleAppender">
+		<encoder>
+			<pattern>%d{MM-dd HH:mm:ss.SSS} | %thread |-%-5level %logger{36}:%L -
+				%msg%n</pattern>
+		</encoder>
+		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+			<level>debug</level>
+		</filter>
+	</appender>
 
-    <!-- 日志文件 -->
-    <appender name="LOGFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${LOG_HOME}/${LOG_NAME}.log</file>
-        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
-            <fileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}/${LOG_NAME}-%i.log</fileNamePattern>
-            <maxFileSize>50MB</maxFileSize>
-            <maxHistory>30</maxHistory>
-        </rollingPolicy>
-        <layout class="ch.qos.logback.classic.PatternLayout">
-            <pattern>%d{MM-dd HH:mm:ss.SSS} |-%-5level %logger{36}:%L - %m%n</pattern>
-        </layout>
-    </appender>
+	<!-- 日志文件 -->
+	<appender name="LOGFILE"
+		class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<file>${LOG_HOME}/${LOG_NAME}.log</file>
+		<rollingPolicy
+			class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+			<fileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}/${LOG_NAME}-%i.log
+			</fileNamePattern>
+			<maxFileSize>50MB</maxFileSize>
+			<maxHistory>30</maxHistory>
+		</rollingPolicy>
+		<layout class="ch.qos.logback.classic.PatternLayout">
+			<pattern>%d{MM-dd HH:mm:ss.SSS} |-%-5level %logger{36}:%L - %m%n
+			</pattern>
+		</layout>
+	</appender>
 
-    <!-- sql文件 -->
-    <appender name="LOGSQL" class="ch.qos.logback.core.rolling.RollingFileAppender">
-        <file>${LOG_HOME}/${LOG_NAME}-sql.log</file>
-        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
-            <fileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}/${LOG_NAME}-sql-%i.log</fileNamePattern>
-            <maxFileSize>50MB</maxFileSize>
-            <maxHistory>30</maxHistory>
-        </rollingPolicy>
-        <layout class="ch.qos.logback.classic.PatternLayout">
-            <pattern>%d{MM-dd HH:mm:ss.SSS} |-%-5level %logger{36}:%L - %m%n</pattern>
-        </layout>
-    </appender>
+	<!-- sql文件 -->
+	<appender name="LOGSQL"
+		class="ch.qos.logback.core.rolling.RollingFileAppender">
+		<file>${LOG_HOME}/${LOG_NAME}-sql.log</file>
+		<rollingPolicy
+			class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+			<fileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}/${LOG_NAME}-sql-%i.log
+			</fileNamePattern>
+			<maxFileSize>50MB</maxFileSize>
+			<maxHistory>30</maxHistory>
+		</rollingPolicy>
+		<layout class="ch.qos.logback.classic.PatternLayout">
+			<pattern>%d{MM-dd HH:mm:ss.SSS} |-%-5level %logger{36}:%L - %m%n
+			</pattern>
+		</layout>
+	</appender>
+	<logger name="com.baomidou.mybatisplus.samples.pagination"
+		level="debug" />
+	<logger name="com.**.monitor" level="debug" />
+	<logger name="org.mybatis" level="debug" />
+	<logger name="org.apache.ibatis" level="debug" />
+	<logger name="java.sql.Connection" level="debug" />
+	<logger name="java.sql.Statement" level="debug" />
+	<logger name="java.sql.PreparedStatement" level="debug" />
+	<logger name="com.alibaba.druid" level="debug" />
 
 
-    <root level="INFO">
-        <appender-ref ref="STDOUT" />
-        <appender-ref ref="LOGFILE" />
-    </root>
+
+	<root level="debug">
+		<appender-ref ref="STDOUT" />
+		<appender-ref ref="LOGFILE" />
+	</root>
 </configuration>

+ 8 - 0
java/sp-version/src/main/java/com/anji/sp/mapper/SpVersionMapper.java

@@ -1,5 +1,10 @@
 package com.anji.sp.mapper;
 
+import java.util.Date;
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+
 import com.anji.sp.model.po.SpVersionPO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
@@ -9,4 +14,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @author Kean 2020-06-23
  */
 public interface SpVersionMapper extends BaseMapper<SpVersionPO> {
+
+	String selectUpdateVersion(@Param("appId") long appId, @Param("startDate") Date startDate,
+			@Param("list") List<String> list);
 }

+ 4 - 0
java/sp-version/src/main/java/com/anji/sp/model/vo/SpVersionForAPPVO.java

@@ -3,6 +3,8 @@ package com.anji.sp.model.vo;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
 
 import java.io.Serializable;
 
@@ -12,6 +14,8 @@ import java.io.Serializable;
  * @author kean 2020-06-26
  */
 @Data
+@Getter
+@Setter
 @ApiModel("给APP的版本信息")
 public class SpVersionForAPPVO implements Serializable {
     @ApiModelProperty("下载地址")

+ 5 - 0
java/sp-version/src/main/java/com/anji/sp/service/SpVersionService.java

@@ -1,5 +1,8 @@
 package com.anji.sp.service;
 
+import java.util.Date;
+import java.util.List;
+
 import com.anji.sp.model.ResponseModel;
 import com.anji.sp.model.vo.SpVersionForAPPVO;
 import com.anji.sp.model.vo.SpVersionVO;
@@ -100,4 +103,6 @@ public interface SpVersionService {
      * 删除无效apk文件
      */
     void deleteInvalidFile();
+    
+    long selectUpdateVersion(List<String> list, Date startDate, long appId);
 }

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 574 - 568
java/sp-version/src/main/java/com/anji/sp/service/impl/SpVersionServiceImpl.java


+ 14 - 2
java/sp-version/src/main/resources/mapper/SpVersionMapper.xml

@@ -41,6 +41,18 @@
                 remarks
     </sql>
 
-
-
+	<select id="selectUpdateVersion" resultType="java.lang.String">
+	       select max(version_number) from sp_version where app_id=#{appId} 
+	        <if test="startDate != null">
+		      <![CDATA[
+		      and create_date < #{startDate}
+		    ]]>
+           </if>
+	       <if test="list!=null and list.size>0">
+	         and version_name in 
+	       <foreach collection="list" item="item" open="(" close=")" separator="," >
+			#{item}
+ 			</foreach>
+	       </if>
+	 </select>
 </mapper>