提交信息

此提交包含在:
Your Name
2021-08-18 10:30:07 +08:00
當前提交 68a003cb27
共有 23 個檔案被更改,包括 1546 行新增0 行删除

查看文件

@@ -0,0 +1,18 @@
package com.update.update;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.update.update.dao.freshMapper")
public class UpdateApplication {
public static void main(String[] args) {
SpringApplication.run(UpdateApplication.class, args);
}
}

查看文件

@@ -0,0 +1,31 @@
package com.update.update.bean;
public class fresh {
public String VersionId;
public String apkUrl;
public String updateDescription;
public String getVersionId() {
return VersionId;
}
public void setVersionId(String versionId) {
VersionId = versionId;
}
public String getApkUrl() {
return apkUrl;
}
public void setApkUrl(String apkUrl) {
this.apkUrl = apkUrl;
}
public String getUpdateDescription() {
return updateDescription;
}
public void setUpdateDescription(String updateDescription) {
this.updateDescription = updateDescription;
}
}

查看文件

@@ -0,0 +1,67 @@
package com.update.update.controller;
import com.update.update.bean.fresh;
import com.update.update.util.GJson;
import org.json.JSONException;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.update.update.service.impl.freshServiceImpl;
import com.update.update.service.impl.refreshServiceImpl;
import com.update.update.util.ServletUtil;
import com.update.update.util.StringUtil;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@RestController
public class freshController {
@Autowired
freshServiceImpl freshS = new freshServiceImpl();
@RequestMapping(value = "/add", method = RequestMethod.POST)
public void addVersion(HttpServletRequest request, HttpServletResponse response) throws JSONException {
JSONObject result = new JSONObject();
String VersionId = request.getParameter("VersionId");
String apkUrl = request.getParameter("apkUrl");
String updateDescription = request.getParameter("updateDescription");
if (StringUtil.isNull(VersionId)) {
result.put("message", "不能为空!");
result.put("flag", false);
ServletUtil.createSuccessResponse(200, result, response);
return;
}
if (StringUtil.isNull(apkUrl)) {
result.put("message", "不能为空!");
result.put("flag", false);
ServletUtil.createSuccessResponse(200, result, response);
return;
}
if (StringUtil.isNull(updateDescription)) {
result.put("message", "不能为空!");
result.put("flag", false);
ServletUtil.createSuccessResponse(200, result, response);
return;
}
fresh f = new fresh();
f.setVersionId(VersionId);
f.setApkUrl(apkUrl);
f.setUpdateDescription(updateDescription);
int index = freshS.add(f);
if (index > 0) {
result.put("message", "信息添加成功!");
result.put("flag", true);
} else {
result.put("message", "信息添加失败!");
result.put("flag", false);
}
ServletUtil.createSuccessResponse(200, result, response);
}
@RequestMapping(value = "/updating",method = RequestMethod.POST)
public void updating(HttpServletRequest request, HttpServletResponse response) throws Exception {
ServletUtil.createSuccessResponse(200, GJson.toJson(new refreshServiceImpl().new_version()),response);
}
}

查看文件

@@ -0,0 +1,29 @@
package com.update.update.dao;
import com.update.update.bean.fresh;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Component;
@Component
@Mapper
public interface freshMapper {
@Insert("insert into fresh(VersionId,apkUrl,updateDescription) values(#{VersionId},#{apkUrl},#{updateDescription})")
int add(fresh learnResouce);
@DeleteProvider(type = fresh.class, method = "deleteByids")
int deleteByIds(@Param("ids") String[] ids);
@Select("SELECT * FROM fresh ORDER BY id DESC LIMIT 1")
@Results(value = {
@Result(column = "VersionId", property = "VersionId", javaType = String.class),
@Result(property = "apkUrl", column = "apkUrl", javaType = String.class),
@Result(property = "updateDescription", column = "updateDescription", javaType = String.class)
})
fresh query();
}

查看文件

@@ -0,0 +1,9 @@
package com.update.update.service;
import com.update.update.bean.fresh;
public interface freshService {
int add(fresh version);
fresh query();
}

查看文件

@@ -0,0 +1,25 @@
package com.update.update.service.impl;
import com.update.update.bean.fresh;
import com.update.update.dao.freshMapper;
import com.update.update.service.freshService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class freshServiceImpl implements freshService {
freshMapper f;
@Override
public int add(fresh newOne) {
return this.f.add(newOne);
}
@Override
public fresh query() {
return this.f.query();
}
}

查看文件

@@ -0,0 +1,48 @@
package com.update.update.service.impl;
import android.app.Application;
import android.content.Context;
import com.update.update.bean.fresh;
import com.update.update.service.refreshService;
import com.update.update.util.APKVersionCodeUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class refreshServiceImpl implements refreshService {
freshServiceImpl ser=new freshServiceImpl();
//version1大返回一个正数,小返回一个负数,相等返回0
public static int compareVersion(String version1, String version2) throws Exception {
if (version1 == null || version2 == null) {
throw new Exception("compareVersion error:illegal params.");
}
String[] versionArray1 = version1.split("\\.");
String[] versionArray2 = version2.split("\\.");
int idx = 0;
int minLength = Math.min(versionArray1.length, versionArray2.length);
int diff = 0;
while (idx < minLength
&& (diff = versionArray1[idx].length() - versionArray2[idx].length()) == 0
&& (diff = versionArray1[idx].compareTo(versionArray2[idx])) == 0) {
++idx;
}
//如果已经分出大小,则直接返回,如果未分出大小,则再比较位数,有子版本的为大;
diff = (diff != 0) ? diff : versionArray1.length - versionArray2.length;
return diff;
}
Application application = new Application();
Context ass = application.getApplicationContext();
String oldVersion = APKVersionCodeUtils.getVerName(ass);
String newVersion = ser.query().VersionId;
@Override
public fresh new_version() throws Exception {
if (compareVersion(oldVersion, newVersion) < 0){
return ser.query();
}
return null;
}
}

查看文件

@@ -0,0 +1,8 @@
package com.update.update.service;
import com.update.update.bean.fresh;
public interface refreshService {
//判断是否需要更新,比对是否有新的版本
public fresh new_version() throws Exception;
}

查看文件

@@ -0,0 +1,24 @@
package com.update.update.util;
import android.content.Context;
import android.content.pm.PackageManager;
public class APKVersionCodeUtils {
/**
* 获取版本号名称
*
* @param context 上下文
* @return
*/
public static String getVerName(Context context) {
String verName = "";
try {
verName = context.getPackageManager().
getPackageInfo(context.getPackageName(), 0).versionName;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
return verName;
}
}

查看文件

@@ -0,0 +1,57 @@
package com.update.update.util;
public class ErrorCode {
// 成员变量
private int httpStatus;
private String code;
private String message;
private int res_code;
// 构造方法
private ErrorCode(int httpStatus, String code, String message) {
this.setHttpStatus(200);
this.setRes_code(httpStatus);
this.setCode(code);
this.setMessage(message);
}
private ErrorCode() {
this.setHttpStatus(httpStatus);
this.setCode(code);
this.setMessage(message);
}
public int getHttpStatus() {
return httpStatus;
}
public void setHttpStatus(int httpStatus) {
this.httpStatus = httpStatus;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public int getRes_code() {
return res_code;
}
public void setRes_code(int res_code) {
this.res_code = res_code;
}
}

查看文件

@@ -0,0 +1,28 @@
package com.update.update.util;
import com.google.gson.Gson;
import com.google.gson.JsonSyntaxException;
import com.google.gson.internal.Primitives;
import java.lang.reflect.Type;
public class GJson {
/**
* @description: 进行各种字符串转换
**/
public static <T> T fromJson(String json, Class<T> classOfT) throws JsonSyntaxException {
return Primitives.wrap(classOfT).cast(new Gson().fromJson(json, classOfT));
}
public static <T> T fromJson(String json, Type typeOf) {
return new Gson().fromJson(json, typeOf);
}
public static String toJson(Object src) {
return new Gson().toJson(src);
}
}

查看文件

@@ -0,0 +1,370 @@
package com.update.update.util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializeConfig;
import com.alibaba.fastjson.serializer.SerializeFilter;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.serializer.SimpleDateFormatSerializer;
import org.apache.log4j.Logger;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ServletUtil {
//服务器标识
private static String hostName = "";
//响应的ContentType内容
private static final String RESPONSE_CONTENTTYPE = "application/json";
//响应编码
private static final String RESPONSE_CHARACTERENCODING = "utf-8";
//业务名称的缩写
private static final String BIZ_NAME = "";
private static Logger log = Logger.getLogger(ServletUtil.class);
static{
try {
InetAddress netAddress = InetAddress.getLocalHost();
hostName = netAddress.getHostName();
} catch (UnknownHostException e) {
log.error("netAddress.getHostName failed", e);
}
}
/**
* 生成系统异常错误报文
* @param response
*/
public static String createSysErrorResponse(HttpServletResponse response){
final String code = "INTERNAL_SERVER_ERROR";
String message = "服务器内部错误";
return createErrorResponse(500,500,code, message,response);
}
/**
* 生成参数不正确报文
* @param response
*/
public static String createParamErrorResponse(HttpServletResponse response) {
final String code = "REQUIRE_ARGUMENT";
String message = "缺少参数";
return createErrorResponse(400,400,code,message,response);
}
/**
* 生成参数不正确报文
* @param param 缺少的参数名称
* @param response
*/
public static String createParamErrorResponse(String param,HttpServletResponse response) {
final String code = "REQUIRE_ARGUMENT";
String message = "缺少参数:" + param;
return createErrorResponse(400,400,code,message,response);
}
/**
* 授权失败
* @param response
*/
public static String createAuthorizeErrorResponse(HttpServletResponse response) {
final String code = "AUTH_DENIED";
String message = "请求失败,没有访问或操作该资源的权限!";
return createErrorResponse(403,403,code, message,response);
}
/**
* 生成错误报文
* @param errorCode
* @param response
*/
public static String createErrorResponse(ErrorCode errorCode,
HttpServletResponse response){
return createErrorResponse(errorCode.getHttpStatus(),errorCode.getRes_code(),errorCode.getCode(),
errorCode.getMessage(),response);
}
/**
* 生成错误报文
* @param httpStatus
* @param code
* @param message
* @param response
*/
public static String createErrorResponse(Integer httpStatus, Object code,
String message, HttpServletResponse response){
code = BIZ_NAME + code;
PrintWriter printWriter = null;
String jsonString = "";
try {
response.setCharacterEncoding(RESPONSE_CHARACTERENCODING);
response.setContentType(RESPONSE_CONTENTTYPE);
response.setStatus(httpStatus);
Map<String, Object> map = new HashMap<String, Object>();
map.put("code", code);
map.put("message", message);
printWriter = response.getWriter();
jsonString = JSON.toJSONString(map, SerializerFeature.WriteMapNullValue);
printWriter.write(jsonString);
printWriter.flush();
} catch (Exception e) {
log.error("createResponse failed", e);
} finally {
if(null!=printWriter)printWriter.close();
}
return jsonString;
}
/**
* 生成错误报文
* @param httpStatus
* @param res_code
* @param code
* @param message
* @param response
* @return
*/
public static String createErrorResponse(Integer httpStatus,Integer res_code, Object code,
String message, HttpServletResponse response){
code = BIZ_NAME + code;
PrintWriter printWriter = null;
String jsonString = "";
try {
response.setCharacterEncoding(RESPONSE_CHARACTERENCODING);
response.setContentType(RESPONSE_CONTENTTYPE);
response.setStatus(httpStatus);
Map<String, Object> map = new HashMap<String, Object>();
map.put("code", code);
map.put("message", message);
//map.put("request_id", requestId==null?"":requestId);
//map.put("host_id", hostName);
map.put("res_code", res_code);
printWriter = response.getWriter();
jsonString = JSON.toJSONString(map, SerializerFeature.WriteMapNullValue);
printWriter.write(jsonString);
printWriter.flush();
} catch (Exception e) {
log.error("createResponse failed", e);
} finally {
if(null!=printWriter)printWriter.close();
}
return jsonString;
}
/**
* 生成成功报文
* @param httpCode
* @param result
* @param response
*/
public static String createSuccessResponse(Integer httpCode, Object result, HttpServletResponse response){
return createSuccessResponse(httpCode, result, SerializerFeature.WriteMapNullValue,null,response);
}
public static String createSuccessResponse(Integer httpCode,String message,Object result,HttpServletResponse response){
return createSuccessResponse(httpCode,message,result, SerializerFeature.WriteMapNullValue,null,response);
}
/**
* 生成登录传成功报文
* @param httpCode
* @param result
* @param response
*/
public static String createLoginSuccessResponse(Integer httpCode, Object result, HttpServletResponse response){
/*response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods","POST, GET, PATCH, DELETE, PUT");
response.setHeader("Access-Control-Allow-Headers",request.getHeader("Access-Control-Request-Headers"));*/
return createSuccessResponse(httpCode, result, SerializerFeature.WriteMapNullValue,null,response);
}
public static String createSuccessResponse(Integer httpCode, Object result, SerializeFilter filter, HttpServletResponse response){
return createSuccessResponse(httpCode, result, SerializerFeature.PrettyFormat,filter,response);
}
public static String createSuccessResponse(Integer httpCode, Object result, SerializerFeature serializerFeature, HttpServletResponse response){
return createSuccessResponse(httpCode, result,serializerFeature,null,response);
}
public static String createSuccessResponse(Integer httpCode, Object result, SerializerFeature serializerFeature, SerializeFilter filter, HttpServletResponse response){
PrintWriter printWriter = null;
String jsonString = "";
try {
response.setCharacterEncoding(RESPONSE_CHARACTERENCODING);
response.setContentType(RESPONSE_CONTENTTYPE);
response.setStatus(httpCode);
printWriter = response.getWriter();
if(null != result){
if(null!=filter){
jsonString = JSONObject.toJSONString(result,filter,serializerFeature);
}else{
// jsonString = JSONObject.toJSONString(result, serializerFeature);
jsonString = JSONObject.toJSONStringWithDateFormat(result,"yyyy-MM-dd HH:ss:mm",serializerFeature);
}
printWriter.write(jsonString);
}
printWriter.flush();
} catch (Exception e) {
log.error("createResponse failed", e);
} finally {
if(null!=printWriter)printWriter.close();
}
return jsonString;
}
public static String createSuccessResponse(Integer httpCode, String message, Object result, SerializerFeature serializerFeature, SerializeFilter filter, HttpServletResponse response){
PrintWriter printWriter = null;
String jsonString = "";
try {
response.setCharacterEncoding(RESPONSE_CHARACTERENCODING);
response.setContentType(RESPONSE_CONTENTTYPE);
response.setStatus(httpCode);
printWriter = response.getWriter();
SerializeConfig config = new SerializeConfig();
config.put(Date.class, new SimpleDateFormatSerializer("yyyy-MM-dd"));
Map<String, Object> map = new HashMap<String, Object>();
if(null != result){
map.put("res_code", httpCode);
map.put("message", message);
map.put("data",result);
if(null!=filter){
jsonString = JSONObject.toJSONString(map,filter,serializerFeature);
}else{
// jsonString = JSONObject.toJSONString(map,config,serializerFeature);
jsonString = JSONObject.toJSONStringWithDateFormat(map,"yyyy-MM-dd");
}
printWriter.write(jsonString);
}
printWriter.flush();
} catch (Exception e) {
log.error("createResponse failed", e);
} finally {
if(null!=printWriter)printWriter.close();
}
return jsonString;
}
/**
* 获取报文IP
* @param request
* @return
*/
public static String getRemortIP(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
if(ip.startsWith(",")){
ip = ip.substring(1, ip.length());
}
return ip;
}
/**
* 获取带参数的URL串
*/
public static String getUrlWithParams(HttpServletRequest request) {
String url = request.getRequestURI();
if (!StringUtil.isNull(request.getQueryString())) {
url = url + "?" + request.getQueryString();
}
return url;
}
/**
* 获取AccessToken
* @param request
* @return
*/
public static String getAccessToken(HttpServletRequest request){
String accessToken = null;
String authorization = request.getHeader("Authorization");
if(StringUtil.isNull(authorization)){
return accessToken;
}
if(authorization.startsWith("MAC")){
Pattern p = Pattern.compile("MAC id=\"(.*)\",nonce=\"(.*)\",mac=\"(.*)\"");
Matcher m = p.matcher(authorization);
if(m.find() && !StringUtil.isNull(m.group(1))){
return m.group(1);
}
}else if(authorization.startsWith("Bearer")){
Pattern p = Pattern.compile("Bearer \"(.*)\"");
Matcher m = p.matcher(authorization);
if(m.find() && !StringUtil.isNull(m.group(1))){
return m.group(1);
}
}
return accessToken;
}
/**
* 判断是否是Mac Token
* @param request
* @return
*/
public static boolean isExistMacToken(HttpServletRequest request){
String authorization = request.getHeader("Authorization");
if(!StringUtil.isNull(authorization) && authorization.startsWith("MAC id=")){
return true;
}
return false;
}
/**
* 设置让浏览器弹出下载对话框的Header.
* 根据浏览器的不同设置不同的编码格式 防止中文乱码
* @param fileName 下载后的文件名.
*/
public static void setFileDownloadHeader(HttpServletRequest request, HttpServletResponse response, String fileName) {
try {
//中文文件名支持
String encodedfileName = java.net.URLEncoder.encode(fileName,"UTF-8");
response.setHeader("Content-Disposition", "attachment; filename=\"" + encodedfileName + "\"");
response.setContentType("application/force-download");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}

查看文件

@@ -0,0 +1,55 @@
package com.update.update.util;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class StringUtil {
/**
* 判断字符串是否为null、“ ”、“null”
* @param obj
* @return
*/
public static boolean isNull(String obj) {
if (obj == null){
return true;
}else if (obj.toString().trim().equals("")){
return true;
}else if(obj.toString().trim().toLowerCase().equals("null")){
return true;
}
return false;
}
/**
* 正则验证是否是数字
* @param str
* @return
*/
public static boolean isNumber(String str) {
Pattern pattern = Pattern.compile("[+-]?[0-9]+[0-9]*(\\.[0-9]+)?");
Matcher match = pattern.matcher(str);
return match.matches();
}
/**
* 将一个长整数转换位字节数组(8个字节),b[0]存储高位字符,大端
*
* @param l
* 长整数
* @return 代表长整数的字节数组
*/
public static byte[] longToBytes(long l) {
byte[] b = new byte[8];
b[0] = (byte) (l >>> 56);
b[1] = (byte) (l >>> 48);
b[2] = (byte) (l >>> 40);
b[3] = (byte) (l >>> 32);
b[4] = (byte) (l >>> 24);
b[5] = (byte) (l >>> 16);
b[6] = (byte) (l >>> 8);
b[7] = (byte) (l);
return b;
}
}