From 048be33c8a5d61325b1d92ff9f6425945f626d80 Mon Sep 17 00:00:00 2001 From: Stormeye Wu Date: Fri, 15 Mar 2019 18:18:53 +0800 Subject: [PATCH] =?UTF-8?q?[=E5=BE=AE=E4=BF=A1=E5=B0=8F=E7=A8=8B=E5=BA=8Fv?= =?UTF-8?q?isit=E4=BF=A1=E6=81=AF=E5=AF=BC=E5=85=A5][=E4=BF=AE=E6=94=B9]:?= =?UTF-8?q?=E4=BB=8E=E5=BE=AE=E4=BF=A1=E8=8E=B7=E5=8F=96=E6=B5=8F=E8=A7=88?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/WxUserGrantController.java | 2 +- .../iformall/schedule/WxAppVisitSchedule.java | 124 +++++++----------- .../iformall/service/WxAppinfoService.java | 9 ++ .../iformall/service/WxUserVisitService.java | 12 +- .../service/impl/WxAppinfoServiceImpl.java | 7 +- .../service/impl/WxUserVisitServiceImpl.java | 5 + 6 files changed, 82 insertions(+), 77 deletions(-) diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java index ee9e9df96..108f6fa5d 100755 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java @@ -114,7 +114,7 @@ public class WxUserGrantController extends BaseController { wxMaService = getWeappServiceByAppInfo(wxAppinfo); } else { - // 检查token是否已过期, 小时就重新获取 + // 检查token是否已过期, 1小时就重新获取 Date curDate = new Date(); if(curDate.getTime() > wxAppinfo.getLastTokenTime().getTime() + 3600000) { updateAppAccessToken(wxAppinfo, wxMaService); diff --git a/mallinkSchedule/src/main/java/com/iformall/schedule/WxAppVisitSchedule.java b/mallinkSchedule/src/main/java/com/iformall/schedule/WxAppVisitSchedule.java index a3ca73824..dfdf881d2 100644 --- a/mallinkSchedule/src/main/java/com/iformall/schedule/WxAppVisitSchedule.java +++ b/mallinkSchedule/src/main/java/com/iformall/schedule/WxAppVisitSchedule.java @@ -1,26 +1,19 @@ package com.iformall.schedule; import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.Date; -import java.util.HashMap; -import java.util.Map; +import java.util.*; +import cn.binarywang.wx.miniapp.api.WxMaService; +import cn.binarywang.wx.miniapp.bean.analysis.WxMaVisitTrend; +import com.iformall.utils.MaUtil; +import me.chanjar.weixin.common.error.WxErrorException; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; -import org.springframework.web.client.RestTemplate; -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONArray; -import com.alibaba.fastjson.JSONObject; import com.github.pagehelper.PageInfo; import com.iformall.domain.po.WxAppinfo; import com.iformall.domain.po.WxUserVisit; @@ -32,11 +25,6 @@ import com.iformall.service.WxUserVisitService; public class WxAppVisitSchedule { private final Logger logger = LoggerFactory.getLogger(this.getClass()); - private static String visit = "https://api.weixin.qq.com/datacube/getweanalysisappiddailyvisittrend?access_token="; - - @Autowired - private RestTemplate restTemplate; - @Autowired private WxUserVisitService wxUserVisitService; @@ -48,18 +36,20 @@ public class WxAppVisitSchedule { public void daliyVisitRetrive() { try { - WxAppinfo appInfo = new WxAppinfo(); - appInfo.setType(EnumAppType.C.getCode()); - PageInfo page = WxAppinfoService.listAsPage(appInfo, 1, 10000); - for(WxAppinfo w :page.getList()) { - if(StringUtils.isBlank(w.getAppId())||StringUtils.isBlank(w.getSecret())) { + WxAppinfo appInfoQ = new WxAppinfo(); + appInfoQ.setType(EnumAppType.C.getCode()); + List apps = WxAppinfoService.getList(appInfoQ); + for(WxAppinfo app:apps) { + if(StringUtils.isBlank(app.getAppId())||StringUtils.isBlank(app.getSecret())) { continue; } Calendar c = Calendar.getInstance(); - c.add(Calendar.DAY_OF_YEAR, -1); - String date = new SimpleDateFormat("yyyyMMdd").format(c.getTime()); - if (!checkData(date,w)) - getData(date,w); + c.add(Calendar.DAY_OF_YEAR, -1); + Date lastDate = c.getTime(); + String date = new SimpleDateFormat("yyyyMMdd").format(lastDate); + if (!checkData(date,app)) { + getData(lastDate, app); + } } }catch(Exception e) { logger.error("获取微信访问数据失败",e); @@ -73,18 +63,20 @@ public class WxAppVisitSchedule { WxAppinfo appInfo = new WxAppinfo(); appInfo.setType(EnumAppType.C.getCode()); - PageInfo page = WxAppinfoService.listAsPage(appInfo, 1, 10000); - for(WxAppinfo w :page.getList()) { - if(StringUtils.isBlank(w.getAppId())||StringUtils.isBlank(w.getSecret())) { + List apps = WxAppinfoService.getList(appInfo); + for(WxAppinfo appinfo :apps) { + if(StringUtils.isBlank(appinfo.getAppId())||StringUtils.isBlank(appinfo.getSecret())) { continue; } Calendar c = Calendar.getInstance(); String date; - for(int i = 0; i < 7; i++) { //查找最近7天有没有漏掉的数据 - c.add(Calendar.DAY_OF_YEAR, -2); + for(int i = 2;i <=7;i++) { //查找最近7天有没有漏掉的数据 + c.add(Calendar.DAY_OF_YEAR, -1*i); + Date lastDate = c.getTime(); date = new SimpleDateFormat("yyyyMMdd").format(c.getTime()); - if (!checkData(date,w)) - getData(date,w); + if (!checkData(date,appinfo)) { + getData(lastDate, appinfo); + } } } }catch(Exception e) { @@ -103,45 +95,31 @@ public class WxAppVisitSchedule { return false; } - private void getData(String date,WxAppinfo appInfo) throws Exception { - String accessToken = appInfo.getAccessToken(); - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_JSON); - Map map = new HashMap(); - map.put("begin_date", date); - map.put("end_date", date); - RestTemplate restTemplate = new RestTemplate(); - HttpEntity> entity = new HttpEntity>(map, headers); - String reqUrl =visit+accessToken; - ResponseEntity responseEntity = restTemplate.postForEntity(reqUrl, entity, String.class); - logger.info("获取wx访问数据:"+JSON.toJSONString(responseEntity)); - if(responseEntity.hasBody()) { - String body = responseEntity.getBody(); - Map maps = (Map)JSON.parse(body); - JSONArray jSONArray = (JSONArray)maps.get("list"); - if(jSONArray==null || jSONArray.isEmpty()) { - logger.error("获取数据失败:"+body); - return; - } - JSONObject jsonObject = jSONArray.getJSONObject(0); - Map itemMap = JSONObject.toJavaObject(jsonObject, Map.class); - logger.info(JSON.toJSONString(itemMap)); - WxUserVisit v = new WxUserVisit(); - // TODO hardcode appId - v.setAppId(appInfo.getAppId()); - String time = itemMap.get("ref_date")+""; - Date dayDate = new SimpleDateFormat("yyyyMMdd").parse(time); - v.setDayDate(dayDate); - v.setRefDate(time); - v.setSessionCnt(Integer.valueOf(itemMap.get("session_cnt")+"")); - v.setVisitPv(Integer.valueOf(itemMap.get("visit_pv")+"")); - v.setVisitUv(Integer.valueOf(itemMap.get("visit_uv")+"")); - v.setVisitUvNew(Integer.valueOf(itemMap.get("visit_uv_new")+"")); - v.setStayTimeSession(itemMap.get("stay_time_session")+""); - v.setVisitDepth(itemMap.get("visit_depth")+""); - v.setStayTimeUv(itemMap.get("stay_time_uv")+""); - v.setTenantId(appInfo.getTenantId()); - wxUserVisitService.saveOrUpdate(v); - } + private void getData(Date lastDate,WxAppinfo appInfo) throws Exception { + WxMaService wxMaService = MaUtil.getWeappService(appInfo); + try { + List vtList = wxMaService.getAnalysisService().getDailyVisitTrend(lastDate, lastDate); + + System.out.println(vtList.toString()); + for(WxMaVisitTrend maVisitTrend: vtList) { + WxUserVisit v = new WxUserVisit(); + v.setAppId(appInfo.getAppId()); + v.setTenantId(appInfo.getTenantId()); + String time = maVisitTrend.getRefDate(); + Date dayDate = new SimpleDateFormat("yyyyMMdd").parse(time); + v.setDayDate(dayDate); + v.setRefDate(time); + v.setSessionCnt(Integer.valueOf(maVisitTrend.getSessionCnt() + "")); + v.setVisitPv(Integer.valueOf(maVisitTrend.getVisitPv()+"")); + v.setVisitUv(Integer.valueOf(maVisitTrend.getVisitUv()+"")); + v.setVisitUvNew(Integer.valueOf(maVisitTrend.getVisitUvNew()+"")); + v.setStayTimeSession(maVisitTrend.getStayTimeSession()+""); + v.setVisitDepth(maVisitTrend.getVisitDepth()+""); + v.setStayTimeUv(maVisitTrend.getStayTimeUv()+""); + wxUserVisitService.saveOrUpdate(v); + } + } catch (WxErrorException e) { + logger.error(e.getMessage()); + } } } diff --git a/mallinkService/src/main/java/com/iformall/service/WxAppinfoService.java b/mallinkService/src/main/java/com/iformall/service/WxAppinfoService.java index e65a3cb45..de26477ef 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxAppinfoService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxAppinfoService.java @@ -5,6 +5,7 @@ import com.iformall.domain.po.WxAppinfo; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.util.List; public interface WxAppinfoService { @@ -17,6 +18,14 @@ public interface WxAppinfoService { * @return */ PageInfo listAsPage(WxAppinfo record, Integer pageIndex, Integer pageSize); + + /** + * 根据实体查询分页列表 + * + * @param record + * @return + */ + List getList(WxAppinfo record); /** * 根据Id获得实体 diff --git a/mallinkService/src/main/java/com/iformall/service/WxUserVisitService.java b/mallinkService/src/main/java/com/iformall/service/WxUserVisitService.java index 0978b2098..d4aae5264 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxUserVisitService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxUserVisitService.java @@ -11,11 +11,19 @@ public interface WxUserVisitService { * 根据实体查询分页列表 * * @param record - * @param offset - * @param limit + * @param pageIndex + * @param pageSize * @return */ PageInfo listAsPage(WxUserVisit record, Integer pageIndex, Integer pageSize); + + /** + * 根据实体查询列表 + * + * @param record + * @return + */ + List getList(WxUserVisit record); /** * 根据Id获得实体 diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxAppinfoServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxAppinfoServiceImpl.java index 4f542a1d5..aab18ea67 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxAppinfoServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxAppinfoServiceImpl.java @@ -61,6 +61,11 @@ public class WxAppinfoServiceImpl implements WxAppinfoService { return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxAppinfoMapper.findList(record)); } + @Override + public List getList(WxAppinfo record) { + return wxAppinfoMapper.findList(record); + } + @Override public WxAppinfo getById(Long id) { return wxAppinfoMapper.selectByPrimaryKey(id); @@ -104,7 +109,7 @@ public class WxAppinfoServiceImpl implements WxAppinfoService { config.setSecret(appinfo.getSecret()); if (null != appinfo.getAccessToken()) { config.setAccessToken(appinfo.getAccessToken()); - config.setExpiresTime(appinfo.getLastTokenTime().getTime()); + config.setExpiresTime(appinfo.getLastTokenTime().getTime()+appinfo.getExpiresIn()*1000); } WxMaService wxMaService = new WxMaServiceImpl(); wxMaService.setWxMaConfig(config); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxUserVisitServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxUserVisitServiceImpl.java index d0dc48b9e..86f32abaa 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxUserVisitServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxUserVisitServiceImpl.java @@ -26,6 +26,11 @@ public class WxUserVisitServiceImpl implements WxUserVisitService { return PageHelper.startPage(pageIndex, pageSize).doSelectPageInfo(() -> wxUserVisitMapper.findList(record)); } + @Override + public List getList(WxUserVisit record) { + return wxUserVisitMapper.findList(record); + } + @Override public WxUserVisit getById(Long id) { return wxUserVisitMapper.selectByPrimaryKey(id);