|
|
@@ -1,26 +1,19 @@ |
|
|
package com.iformall.schedule; |
|
|
package com.iformall.schedule; |
|
|
|
|
|
|
|
|
import java.text.SimpleDateFormat; |
|
|
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.apache.commons.lang3.StringUtils; |
|
|
import org.slf4j.Logger; |
|
|
import org.slf4j.Logger; |
|
|
import org.slf4j.LoggerFactory; |
|
|
import org.slf4j.LoggerFactory; |
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
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.scheduling.annotation.Scheduled; |
|
|
import org.springframework.stereotype.Component; |
|
|
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.github.pagehelper.PageInfo; |
|
|
import com.iformall.domain.po.WxAppinfo; |
|
|
import com.iformall.domain.po.WxAppinfo; |
|
|
import com.iformall.domain.po.WxUserVisit; |
|
|
import com.iformall.domain.po.WxUserVisit; |
|
|
@@ -32,11 +25,6 @@ import com.iformall.service.WxUserVisitService; |
|
|
public class WxAppVisitSchedule { |
|
|
public class WxAppVisitSchedule { |
|
|
private final Logger logger = LoggerFactory.getLogger(this.getClass()); |
|
|
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 |
|
|
@Autowired |
|
|
private WxUserVisitService wxUserVisitService; |
|
|
private WxUserVisitService wxUserVisitService; |
|
|
|
|
|
|
|
|
@@ -48,18 +36,20 @@ public class WxAppVisitSchedule { |
|
|
public void daliyVisitRetrive() { |
|
|
public void daliyVisitRetrive() { |
|
|
try { |
|
|
try { |
|
|
|
|
|
|
|
|
WxAppinfo appInfo = new WxAppinfo(); |
|
|
|
|
|
appInfo.setType(EnumAppType.C.getCode()); |
|
|
|
|
|
PageInfo<WxAppinfo> 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<WxAppinfo> apps = WxAppinfoService.getList(appInfoQ); |
|
|
|
|
|
for(WxAppinfo app:apps) { |
|
|
|
|
|
if(StringUtils.isBlank(app.getAppId())||StringUtils.isBlank(app.getSecret())) { |
|
|
continue; |
|
|
continue; |
|
|
} |
|
|
} |
|
|
Calendar c = Calendar.getInstance(); |
|
|
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) { |
|
|
}catch(Exception e) { |
|
|
logger.error("获取微信访问数据失败",e); |
|
|
logger.error("获取微信访问数据失败",e); |
|
|
@@ -73,18 +63,20 @@ public class WxAppVisitSchedule { |
|
|
|
|
|
|
|
|
WxAppinfo appInfo = new WxAppinfo(); |
|
|
WxAppinfo appInfo = new WxAppinfo(); |
|
|
appInfo.setType(EnumAppType.C.getCode()); |
|
|
appInfo.setType(EnumAppType.C.getCode()); |
|
|
PageInfo<WxAppinfo> page = WxAppinfoService.listAsPage(appInfo, 1, 10000); |
|
|
|
|
|
for(WxAppinfo w :page.getList()) { |
|
|
|
|
|
if(StringUtils.isBlank(w.getAppId())||StringUtils.isBlank(w.getSecret())) { |
|
|
|
|
|
|
|
|
List<WxAppinfo> apps = WxAppinfoService.getList(appInfo); |
|
|
|
|
|
for(WxAppinfo appinfo :apps) { |
|
|
|
|
|
if(StringUtils.isBlank(appinfo.getAppId())||StringUtils.isBlank(appinfo.getSecret())) { |
|
|
continue; |
|
|
continue; |
|
|
} |
|
|
} |
|
|
Calendar c = Calendar.getInstance(); |
|
|
Calendar c = Calendar.getInstance(); |
|
|
String date; |
|
|
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()); |
|
|
date = new SimpleDateFormat("yyyyMMdd").format(c.getTime()); |
|
|
if (!checkData(date,w)) |
|
|
|
|
|
getData(date,w); |
|
|
|
|
|
|
|
|
if (!checkData(date,appinfo)) { |
|
|
|
|
|
getData(lastDate, appinfo); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
}catch(Exception e) { |
|
|
}catch(Exception e) { |
|
|
@@ -103,45 +95,31 @@ public class WxAppVisitSchedule { |
|
|
return false; |
|
|
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<String, String> map = new HashMap<String, String>(); |
|
|
|
|
|
map.put("begin_date", date); |
|
|
|
|
|
map.put("end_date", date); |
|
|
|
|
|
RestTemplate restTemplate = new RestTemplate(); |
|
|
|
|
|
HttpEntity<Map<String,String>> entity = new HttpEntity<Map<String,String>>(map, headers); |
|
|
|
|
|
String reqUrl =visit+accessToken; |
|
|
|
|
|
ResponseEntity<String> responseEntity = restTemplate.postForEntity(reqUrl, entity, String.class); |
|
|
|
|
|
logger.info("获取wx访问数据:"+JSON.toJSONString(responseEntity)); |
|
|
|
|
|
if(responseEntity.hasBody()) { |
|
|
|
|
|
String body = responseEntity.getBody(); |
|
|
|
|
|
Map<String,Object> maps = (Map<String,Object>)JSON.parse(body); |
|
|
|
|
|
JSONArray jSONArray = (JSONArray)maps.get("list"); |
|
|
|
|
|
if(jSONArray==null || jSONArray.isEmpty()) { |
|
|
|
|
|
logger.error("获取数据失败:"+body); |
|
|
|
|
|
return; |
|
|
|
|
|
} |
|
|
|
|
|
JSONObject jsonObject = jSONArray.getJSONObject(0); |
|
|
|
|
|
Map<String, Object> 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<WxMaVisitTrend> 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()); |
|
|
|
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |