Commit 7417f5ee authored by hanfeng's avatar hanfeng

Merge branch 'master_activity-hf' into base-modify

parents 141313ed c9cfe1d6
......@@ -8,16 +8,16 @@ package com.xxfc.platform.summit.model;
import java.io.Serializable;
import java.util.Map;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import lombok.Data;
/**
* 封装 access_token
*/
@Data
public class AccessToken implements Serializable {
private static final long serialVersionUID = -822464425433824314L;
......@@ -41,8 +41,11 @@ public class AccessToken implements Serializable {
expires_in = temp.getInteger("expires_in");
if (expires_in != null)
if (expires_in != null){
expiredTime = System.currentTimeMillis() + ((expires_in -5) * 1000);
System.out.println("----expiredTime==="+expiredTime);
}
} catch (Exception e) {
throw new RuntimeException(e);
......@@ -69,17 +72,6 @@ public class AccessToken implements Serializable {
return access_token != null;
}
public void setAccess_token(String access_token) {
this.access_token = access_token;
}
public void setExpires_in(Integer expires_in) {
this.expires_in = expires_in;
}
public void setExpiredTime(Long expiredTime) {
this.expiredTime = expiredTime;
}
public void setJson(String json) {
this.json = json;
......@@ -90,13 +82,6 @@ public class AccessToken implements Serializable {
return number == null ? null : number.intValue();
}
public String getAccessToken() {
return access_token;
}
public Integer getExpiresIn() {
return expires_in;
}
}
package com.xxfc.platform.summit.pojo;
public enum SummitStatus {
ENROLL("报名中",1),IN_PROGRESS("进行中",2),End("已结束",3);
private String msg;
private Integer code;
SummitStatus(String msg, Integer code) {
this.msg = msg;
this.code = code;
}
public String getMsg() {
return msg;
}
public Integer getCode() {
return code;
}
}
......@@ -7,6 +7,7 @@ import com.xxfc.platform.summit.entity.Activity;
import com.xxfc.platform.summit.mapper.ActivityMapper;
import com.xxfc.platform.summit.pojo.AccessType;
import com.xxfc.platform.summit.pojo.ActivityQuery;
import com.xxfc.platform.summit.pojo.SummitStatus;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
......@@ -40,10 +41,23 @@ public class ActivityBiz extends BaseBiz<ActivityMapper, Activity> {
criteria.andLike("title", String.format("%%%s%%", query.getTitle().trim()));
}
if (query.getStartTime() != null) {
criteria.andLike("startTime", query.getStartTime()/(1000*60*60)+"%");
criteria.andLike("startTime", query.getStartTime() / (1000 * 60 * 60) + "%");
}
if (query.getStatus() != null) {
criteria.andEqualTo("status", query.getStatus());
switch (query.getStatus()) {
case 1:
criteria.orLessThan("startTime", System.currentTimeMillis());
break;
case 2:
criteria.orBetween("startTime", System.currentTimeMillis(),"endTime");
break;
case 3:
criteria.orGreaterThan("endTime", System.currentTimeMillis());
break;
default:
throw new IllegalStateException("Unexpected value: " + query.getStatus());
}
}
if (query.getType() != null && AccessType.PUBLIC.getCode().equals(query.getType())) {
......
......@@ -17,10 +17,8 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
......@@ -33,7 +31,6 @@ import javax.servlet.http.HttpSession;
public class WeixinController {
public static final String WECHAT_AUTOLOGIN_CALLBACKURL_KEY = "callback";
public static final String WECHAT_REDIS_KEY = "key";
@Autowired
WeixinService weixinService;
......@@ -55,15 +52,16 @@ public class WeixinController {
@RequestMapping(value ="/app/unauth/wxLogin",method = RequestMethod.GET)
@IgnoreUserToken
public String index(@RequestParam(value = "redirec_url")String redirec_url,
@RequestParam(value = "key")String key){
log.info("-----微信wxLogin---redirec_url=="+redirec_url);
if (StringUtils.isBlank(redirec_url)){
public String index(@RequestParam(value = "redirec_url",defaultValue = "")String redirec_url,
@RequestParam(value = "key",defaultValue = "")String key){
log.info("-----微信wxLogin---redirec_url=="+redirec_url+"-----key===="+key);
if (StringUtils.isBlank(redirec_url)||StringUtils.isBlank(key)){
redirec_url="";
}
try {
String encrypt_curr_url = Base64.encode(redirec_url.getBytes("utf-8"));
redirec_url=url+"?" + WECHAT_AUTOLOGIN_CALLBACKURL_KEY+ "=" + encrypt_curr_url+"&"+WECHAT_REDIS_KEY+"="+key;
encrypt_curr_url+=","+key;
redirec_url=url+"?" + WECHAT_AUTOLOGIN_CALLBACKURL_KEY+ "=" + encrypt_curr_url;
String oauth_api=weixinService.getAuthorize(redirec_url);
return String.format("redirect:"+oauth_api);
}catch (Exception e){
......@@ -80,17 +78,22 @@ public class WeixinController {
* @return
*/
@GetMapping(value = "/app/unauth/userInfo")
public String getUserInformation(String code, String callback,String key, HttpServletRequest request) {
log.info("-----微信回调userInfo---code=="+code+"----redirec_url==="+callback+"---key==="+key);
public String getUserInformation(String code, String callback, HttpServletRequest request) {
log.info("-----微信回调userInfo---code=="+code+"----redirec_url==="+callback);
try {
String [] params=callback.split(",");
String key=params[1];
callback=params[0];
userBiz.authUser(code,key,request);
callback =new String(Base64.decode(callback), "utf-8");
log.info("callback===" + callback);
return String.format("redirect:"+callback);
}catch (Exception e){
e.printStackTrace();
log.info("网络异常===" + e.getMessage());
return String.format("网络异常");
}
return String.format("redirect:"+callback);
}
/**
......@@ -99,7 +102,7 @@ public class WeixinController {
* @return
*/
@GetMapping(value = "/app/unauth/share")
public ObjectRestResponse share(@RequestParam("url") String url) {
public @ResponseBody ObjectRestResponse share(@RequestParam("url") String url) {
log.info("-----微信分享share---url=="+url);
try {
return ObjectRestResponse.succ(wXjsService.getShareData(url));
......
......@@ -59,17 +59,17 @@ public class WeChatH5LoginInterceptor extends HandlerInterceptorAdapter {
return true;
}
String redisKey=redisInfo(request);
Map<String,Object> result=new HashMap<>();
JSONObject result=new JSONObject();
JSONObject json = new JSONObject();
if (StringUtils.isNotBlank(redisKey)){
json.put("key",redisKey);
}
json.put("url","https://dev.dfangche.com/api/summit/auth/app/unauth/wxLogin?redirec_url=https://dev.dfangche.com/h5/appHtml/view/wxh5/index.html");
json.put("url","https://dev.dfangche.com/api/summit/auth/app/unauth/wxLogin");
result.put("data",json);
result.put("status",1001);
response.setCharacterEncoding("utf-8");
response.setContentType("application/json; charset=utf-8");
response.getWriter().write(result.toString());
response.getWriter().append(result.toString());
return false;
}
return true;
......@@ -89,15 +89,17 @@ public class WeChatH5LoginInterceptor extends HandlerInterceptorAdapter {
{
e.printStackTrace();
}
String redisLockKey=null;
String key=null;
if (StringUtils.isNotBlank(jb)){
redisLockKey= RedisKey.CONSTANT_CODE_PREFIX + UUID.randomUUID();
Boolean suc = summbitRedisTemplate.opsForValue().setIfAbsent(redisLockKey, jb);
key= UUID.randomUUID()+"";
String redisLockKey= RedisKey.CONSTANT_CODE_PREFIX +key;
log.info("-----jb====="+jb.toString());
Boolean suc = summbitRedisTemplate.opsForValue().setIfAbsent(redisLockKey, jb.toString());
if (suc) {
summbitRedisTemplate.expire(redisLockKey, 5, TimeUnit.MINUTES);//5分钟内过期
}
}
return redisLockKey;
return key;
}
......
......@@ -58,9 +58,11 @@ public class AccessTokenService {
{
JSONObject obj = JSONObject.parseObject(accessTokenRedis).getJSONObject(wy_appid);
AccessToken accessToken = new AccessToken(obj.getString("json"),obj.getString("accessToken"),obj.getInteger("expiresIn"));
if(accessToken.isAvailable())
if(accessToken.isAvailable()){
return accessToken;
}
summbitRedisTemplate.delete(wy_appid);
}
refreshAccessToken();
accessTokenRedis = summbitRedisTemplate.opsForValue().get(wy_appid) == null ? "" : summbitRedisTemplate.opsForValue().get(wy_appid).toString();
......@@ -94,11 +96,10 @@ public class AccessTokenService {
String json = HttpRequestUtil.httpGet(url+"&appid="+wy_appid+"&secret="+wy_secret);
log.info("---json===="+json);
result = new AccessToken(json);
log.info("---result===="+result.toString());
if (result.isAvailable())
break;
}
// 三次请求如果仍然返回了不可用的 access token 仍然 put 进去,便于上层通过 AccessToken 中的属性判断底层的情况
JSONObject obj = new JSONObject();
obj.put(wy_appid, result);
......
......@@ -76,7 +76,7 @@ public class JsTicketService {
{
JSONObject objTemp = new JSONObject();
objTemp = JSONObject.parseObject(jsTicketRedis).getJSONObject(key);
jsTicket.setExpiredTime(objTemp.getLong("expiresIn"));
jsTicket.setExpiredTime(objTemp.getLong("expiredTime"));
jsTicket.setTicket(objTemp.getString("ticket"));
jsTicket.setExpires_in(objTemp.getInteger("expiresIn"));
......@@ -85,6 +85,7 @@ public class JsTicketService {
//(JsTicket) JSON.parseObject(redisUtil.get(key)).get(key);
if(!jsTicket.isAvailable())
{
log.info("---jsTicket----失效");
// https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=wx_card
String json = HttpRequestUtil.httpGet(apiUrl+"access_token="+ tokenService.getAccessTokenStr()+"&type="+jsApiType.name());
log.info("---json===="+json);
......@@ -92,6 +93,7 @@ public class JsTicketService {
/*Element element = new Element(SystemConfig.WINXIN_AppID, jsTicket);
ehcache.put(element);*/
JSONObject obj = new JSONObject();
summbitRedisTemplate.delete(key);
Boolean suc=summbitRedisTemplate.opsForValue().setIfAbsent(key, obj.toJSONString());
if (suc) {
summbitRedisTemplate.expire(wy_appid, jsTicket.getExpiresIn(), TimeUnit.MINUTES);
......
......@@ -98,4 +98,9 @@ public class RedisKey {
public static final String CACHE_DICTIONARY_ALL =CACHE_DICTIONARY_PREFIX + "all:";
public static final String CACHE_DICTIONARY_ALL_MAP =CACHE_DICTIONARY_ALL + "map:";
public static final String ILLEGAL_VEHICLE_ENQUIRIES ="cache:violation";
/**
* 服务器上传压缩包文件序号
*/
public static final String UPLOAD_ZIP_NO_PREFIX ="upload:zip:no:";
}
......@@ -183,9 +183,9 @@ public class UploadController{
@PostMapping(value="/app/unauth/pictureZip")
public ObjectRestResponse pictureZip(
@RequestBody MultipartFile file,
@RequestBody String password) throws Exception {
return uploadZipService.uploadPictureZip(file,password);
@RequestParam("file")MultipartFile file,
@RequestParam(value = "prefix",defaultValue = "summit")String prefix) throws Exception {
return uploadZipService.uploadPictureZip(file,prefix);
}
}
......@@ -7,5 +7,5 @@ import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
public interface UploadZipService {
ObjectRestResponse uploadPictureZip(MultipartFile file, String password) throws IOException;
ObjectRestResponse uploadPictureZip(MultipartFile file, String prefix) throws IOException;
}
package com.xxfc.platform.universal.service.impl;
import com.alibaba.druid.sql.visitor.functions.If;
import com.github.wxiaoqi.security.common.msg.ObjectRestResponse;
import com.github.wxiaoqi.security.common.util.process.ResultCode;
import com.github.wxiaoqi.security.common.util.process.SystemConfig;
import com.xxfc.platform.universal.constant.RedisKey;
import com.xxfc.platform.universal.constant.enumerate.FileTypeEnum;
import com.xxfc.platform.universal.service.UploadZipService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import org.codehaus.plexus.util.IOUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.nio.charset.Charset;
import java.util.Enumeration;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
......@@ -22,60 +29,74 @@ public class UploadZipServiceImpl implements UploadZipService {
@Value("${universal.uploadPath}")
private String uploadPath ;
@Value("${universal.url}")
private String xx_url ;
private static final String APK_SUFFIX=".apk";
private static final String APK_NAME="xxfc.apk";
private static final String JPG=".jpg";
private static final String PNG=".png";
@Value("${photo.format}")
private String PHOTO_FORMAT=".png/.jpg/.git/.bmp";
@Autowired
RedisTemplate redisTemplate;
@Override
public ObjectRestResponse uploadPictureZip(MultipartFile file, String password) throws IOException {
if (Objects.isNull(file)) {
public ObjectRestResponse uploadPictureZip(MultipartFile uFile, String prefix) throws IOException {
if (Objects.isNull(uFile)) {
return ObjectRestResponse.createFailedResult(ResultCode.FAILED_CODE,"请上传压缩文件!");
}
String fileContentType = file.getContentType();
String fileContentType = uFile.getContentType();
//将压缩包保存在指定路径
String packFilePath = uploadPath + File.separator + file.getName();
String packFilePath = uploadPath + File.separator + uFile.getName();
if (FileTypeEnum.FILE_TYPE_ZIP.type.equals(fileContentType)||FileTypeEnum.FILE_TYPE_X_ZIP.type.equals(fileContentType)) {
//zip解压缩处理
packFilePath += FileTypeEnum.FILE_TYPE_ZIP.fileStufix;
} else {
return ObjectRestResponse.createFailedResult(ResultCode.FAILED_CODE,"上传的压缩包格式不正确,仅支持zip压缩文件!");
}
File fi = new File(packFilePath);
File file = new File(packFilePath);
try {
file.transferTo(fi);
//保存压缩包
FileOutputStream os = new FileOutputStream(file);
IOUtil.copy(uFile.getInputStream(),os);
os.close();
} catch (IOException e) {
log.error("zip file save to " + uploadPath + " error", e.getMessage(), e);
return ObjectRestResponse.createFailedResult(ResultCode.FAILED_CODE,"保存压缩文件到:" + uploadPath + " 失败!");
}
//zip压缩包
return unPackZip(fi, password, uploadPath);
//zip压缩包解压
return unPackZip(file, prefix);
}
public ObjectRestResponse unPackZip(File file, String password, String destPath) throws IOException {
ZipFile zipFile = new ZipFile(file);
public ObjectRestResponse<String> unPackZip(File file, String prefix) throws IOException {
ZipFile zipFile = new ZipFile(file, Charset.forName("GBK"));
Enumeration<? extends ZipEntry> entries = zipFile.entries();
long millis = System.currentTimeMillis();
String dirPathToday = prefix+ File.separator + millis;
String redisNoKey = RedisKey.UPLOAD_FILE_NO_PREFIX +millis;
StringBuffer result = new StringBuffer();
Integer index = 0;
while (entries.hasMoreElements()) {
ZipEntry entry = entries.nextElement();
if (entry.isDirectory()) {
destPath =destPath+File.separator+ entry.getName();
File dir = new File(destPath);
if (entry.isDirectory() && index++ == 0) {
File dir = new File(uploadPath+dirPathToday);
dir.mkdir();
}else {
File targetFile = new File(destPath+File.separator+entry.getName());
if (targetFile.getParentFile().exists()){
} else if (!entry.isDirectory()) {
Long no = redisTemplate.opsForValue().increment(redisNoKey);
if(no.equals(1l)){
redisTemplate.expire(redisNoKey,1, TimeUnit.DAYS);
}
String name = entry.getName();
String format = name.substring(name.lastIndexOf("."));
if (PHOTO_FORMAT.contains(format)) {
String realFileRelPath = dirPathToday + File.separator + no +format;
File targetFile = new File(uploadPath+realFileRelPath);
FileUtils.copyInputStreamToFile(zipFile.getInputStream(entry),targetFile);
realFileRelPath=xx_url+ SystemConfig.XXMP_URL+realFileRelPath;
result.append(realFileRelPath+",");
}
}
return null;
}
return ObjectRestResponse.succ(result.substring(0, result.length()-1));
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment