소스 검색

[微信小程序visit信息导入][修改]:从微信获取浏览信息

release_toaliyun_real
Stormeye Wu 7 년 전
부모
커밋
048be33c8a
6개의 변경된 파일82개의 추가작업 그리고 77개의 파일을 삭제
  1. +1
    -1
      mallinkCApi/src/main/java/com/iformall/controller/WxUserGrantController.java
  2. +51
    -73
      mallinkSchedule/src/main/java/com/iformall/schedule/WxAppVisitSchedule.java
  3. +9
    -0
      mallinkService/src/main/java/com/iformall/service/WxAppinfoService.java
  4. +10
    -2
      mallinkService/src/main/java/com/iformall/service/WxUserVisitService.java
  5. +6
    -1
      mallinkService/src/main/java/com/iformall/service/impl/WxAppinfoServiceImpl.java
  6. +5
    -0
      mallinkService/src/main/java/com/iformall/service/impl/WxUserVisitServiceImpl.java

+ 1
- 1
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);


+ 51
- 73
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<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;
}
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<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;
}
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<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());
}
}
}

+ 9
- 0
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<WxAppinfo> listAsPage(WxAppinfo record, Integer pageIndex, Integer pageSize);

/**
* 根据实体查询分页列表
*
* @param record
* @return
*/
List<WxAppinfo> getList(WxAppinfo record);
/**
* 根据Id获得实体


+ 10
- 2
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<WxUserVisit> listAsPage(WxUserVisit record, Integer pageIndex, Integer pageSize);

/**
* 根据实体查询列表
*
* @param record
* @return
*/
List<WxUserVisit> getList(WxUserVisit record);
/**
* 根据Id获得实体


+ 6
- 1
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<WxAppinfo> 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);


+ 5
- 0
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<WxUserVisit> getList(WxUserVisit record) {
return wxUserVisitMapper.findList(record);
}

@Override
public WxUserVisit getById(Long id) {
return wxUserVisitMapper.selectByPrimaryKey(id);


불러오는 중...
취소
저장