Commit fe7a09b0 by guojx

好办小程序埋点数据统计接口

parent aec33295
package com.gic.haoban.manage.web.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.gic.api.base.commons.JSONResponse;
import com.gic.api.base.commons.Page;
import com.gic.commons.util.DataApiUtils;
import com.gic.commons.webapi.reponse.RestResponse;
import com.gic.haoban.manage.web.handle.WechatEventTrackingClerkDetailHandle;
import com.gic.haoban.manage.web.handle.WechatEventTrackingStoreGroupHandle;
import com.gic.haoban.manage.web.qo.eventtracking.WechatEventTrackingClerkDetailQO;
import com.gic.haoban.manage.web.qo.eventtracking.WechatEventTrackingStoreGroupQO;
import com.gic.haoban.manage.web.qo.eventtracking.WechatOverviewQO;
import com.gic.haoban.manage.web.qo.wechatwork.StoreGroupCommonQO;
import com.gic.haoban.manage.web.utils.AuthorizedUserUtils;
import com.gic.haoban.manage.web.utils.data.ConcurrencyUtils;
import com.gic.haoban.manage.web.utils.data.MapThreadHandlerRequest;
import com.gic.haoban.manage.web.utils.data.StoreAuthUtils;
import com.gic.haoban.manage.web.vo.eventtracking.ViewModuleVO;
import com.gic.haoban.manage.web.vo.eventtracking.WechatEventTrackingClerkVO;
import com.gic.haoban.manage.web.vo.eventtracking.WechatEventTrackingStoreGroupVO;
import com.gic.haoban.manage.web.vo.wechatwork.DataPageVO;
import com.gic.qcloud.BucketNameEnum;
import com.gic.web.common.controller.NewBaseController;
import com.gic.web.common.download.DownloadTask;
import com.gic.web.common.download.DownloadTaskUtil;
import com.gic.web.common.download.constants.TaskTypeEnum;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
......@@ -33,6 +49,10 @@ import java.util.Map;
public class EventTrackingController extends NewBaseController {
@Autowired
private StoreAuthUtils storeAuthUtils;
@Autowired
private WechatEventTrackingStoreGroupHandle wechatEventTrackingStoreGroupHandle;
@Autowired
private WechatEventTrackingClerkDetailHandle wechatEventTrackingClerkDetailHandle;
/**
* 概览
......@@ -97,6 +117,166 @@ public class EventTrackingController extends NewBaseController {
return RestResponse.successResult(voList);
}
/**
* 门店分组下钻
* @param qo
* @return
*/
@RequestMapping(value = "store-group")
public RestResponse<DataPageVO<WechatEventTrackingStoreGroupVO>> storeGroup(@RequestBody WechatEventTrackingStoreGroupQO qo) {
JSONObject jsonObject = new JSONObject();
qo.dealWithParam(jsonObject);
storeAuthUtils.setStoreGroupJsonParam(jsonObject, qo);
jsonObject.put("apolloKey", "data_point_anal_hb_app_store");
DataPageVO vo = storeAuthUtils.getDataCommon(jsonObject.toJSONString(), qo.getPageNum(), "data_point_anal_hb_app_store", qo.getPageSize(), true);
if (CollectionUtils.isNotEmpty(vo.getRows())) {
vo.setRows(JSONArray.parseArray(JSON.toJSONString(vo.getRows()), WechatEventTrackingStoreGroupVO.class));
}
return RestResponse.successResult(vo);
}
/**
* 门店明细导出
* @param qo
* @return
*/
@RequestMapping(value = "export-store-group")
public RestResponse exportStoreGroup(@RequestBody WechatEventTrackingStoreGroupQO qo) {
DownloadTask task = new DownloadTask();
task.setTaskTypeEnum(TaskTypeEnum.HAOBAN_WECHAT_EVENT_STORE);
task.setDataType(qo.getDataType());
task.setUser(AuthorizedUserUtils.getUserInfo());
task.setTotalCount(storeGroup(qo).getResult().getTotalNum());
JSONObject jsonObject = new JSONObject();
qo.dealWithParam(jsonObject);
storeAuthUtils.setStoreGroupJsonParam(jsonObject, qo);
jsonObject.put("apolloKey", "data_point_anal_hb_app_store");
//Excel的标题是字段进行计算
List<String> indexList = new ArrayList<>();
List<String> fieldList = new ArrayList<>();
Integer storeGroup = jsonObject.getInteger("storeGroup");
boolean isStore = storeGroup != null && storeGroup == 7;
if (isStore) {
indexList.add("门店名称");
fieldList.add("storeName");
indexList.add("门店code");
fieldList.add("storeCode");
} else {
indexList.add("分组名称");
fieldList.add("storeGroupName");
}
indexList.add("上级分组");
fieldList.add("parentStoreGroupName");
indexList.add("员工总人数");
fieldList.add("clerkNum");
indexList.add("绑定人数");
fieldList.add("bindingNum");
indexList.add("绑定率");
fieldList.add("bindingRate");
indexList.add("活跃人数");
fieldList.add("visitNum");
indexList.add("活跃率");
fieldList.add("visitRate");
task.setFileName( "门店明细数据-" + qo.getStartDate() + (StringUtils.isNotBlank(qo.getEndDate()) ? "_" + qo.getEndDate() : ""));
task.setChannelName("数据-登录数据-好办使用详情");
task.setBucketName(BucketNameEnum.REPORT_50000.getName());
jsonObject.put("indexList", indexList);
jsonObject.put("fieldList", fieldList);
task.setSearchDataParams(jsonObject.toJSONString());
task.setHandler(wechatEventTrackingStoreGroupHandle);
JSONResponse downloadTask = DownloadTaskUtil.createDownloadTask(task);
return RestResponse.successResult(downloadTask.getResult());
}
/**
* 导购明细
* @param qo
* @return
*/
@RequestMapping(value = "clerk")
public RestResponse<DataPageVO<WechatEventTrackingClerkVO>> clerk(@RequestBody WechatEventTrackingClerkDetailQO qo) {
JSONObject jsonObject = new JSONObject();
qo.dealWithParam(jsonObject);
storeAuthUtils.setStoreGroupJsonParam(jsonObject, new StoreGroupCommonQO()
.setStoreGroupId(qo.getStoreGroupId()).setStoreId(qo.getStoreId()));
Map<String, Object> res = DataApiUtils.http(jsonObject.toJSONString(), "data_point_anal_hb_app_clerk");
DataPageVO<WechatEventTrackingClerkVO> vo = new DataPageVO<>();
Page page = DataApiUtils.getPageData(res);
vo.setTotalNum(page.getTotalCount());
vo.setPageNum(page.getCurrentPage());
vo.setPageSize(page.getPageSize());
List<JSONObject> list = page.getResult();
if (CollectionUtils.isNotEmpty(list)) {
vo.setRows(JSONArray.parseArray(JSON.toJSONString(list), WechatEventTrackingClerkVO.class));
}
return RestResponse.successResult(vo);
}
/**
* 导购明细导出
* @param qo
* @return
*/
@RequestMapping(value = "export-clerk")
public RestResponse exportClerk(@RequestBody WechatEventTrackingClerkDetailQO qo) {
DownloadTask task = new DownloadTask();
task.setTaskTypeEnum(TaskTypeEnum.HAOBAN_WECHAT_EVENT_CLERK);
task.setDataType(qo.getDataType());
task.setUser(AuthorizedUserUtils.getUserInfo());
task.setTotalCount(clerk(qo).getResult().getTotalNum());
JSONObject jsonObject = new JSONObject();
qo.dealWithParam(jsonObject);
storeAuthUtils.setStoreGroupJsonParam(jsonObject, new StoreGroupCommonQO()
.setStoreGroupId(qo.getStoreGroupId()).setStoreId(qo.getStoreId()));
jsonObject.put("apolloKey", "data_point_anal_hb_app_clerk");
//Excel的标题是字段进行计算
List<String> indexList = new ArrayList<>();
List<String> fieldList = new ArrayList<>();
indexList.add("导购code");
fieldList.add("clerkCode");
indexList.add("导购名称");
fieldList.add("clerkName");
indexList.add("归属门店名称");
fieldList.add("storeName");
indexList.add("归属门店code");
fieldList.add("storeCode");
indexList.add("是否绑定");
fieldList.add("isBinding");
indexList.add("是否登陆");
fieldList.add("isLogin");
indexList.add("登陆次数");
fieldList.add("visitCnt");
indexList.add("日均访问时长");
fieldList.add("visitTimeStr");
indexList.add("最近一次登陆时间");
fieldList.add("lastVisitTime");
task.setFileName("导购明细数据-" + qo.getStartDate() + (StringUtils.isNotBlank(qo.getEndDate()) ? "_" + qo.getEndDate() : ""));
task.setChannelName("数据-登录数据-好办使用详情");
task.setBucketName(BucketNameEnum.REPORT_50000.getName());
jsonObject.put("indexList", indexList);
jsonObject.put("fieldList", fieldList);
task.setSearchDataParams(jsonObject.toJSONString());
task.setHandler(wechatEventTrackingClerkDetailHandle);
JSONResponse downloadTask = DownloadTaskUtil.createDownloadTask(task);
return RestResponse.successResult(downloadTask.getResult());
}
private JSONObject getOverviewParam(WechatOverviewQO qo) {
JSONObject jsonObject = (JSONObject) JSONObject.toJSON(qo);
jsonObject.remove("storeGroupId");
......
......@@ -15,6 +15,7 @@ import com.gic.haoban.manage.web.handle.WechatWorkLostClerkHandle;
import com.gic.haoban.manage.web.handle.WechatWorkLostDetailHandle;
import com.gic.haoban.manage.web.handle.WechatWorkLostStoreGroupHandle;
import com.gic.haoban.manage.web.qo.wechatwork.*;
import com.gic.haoban.manage.web.utils.AuthorizedUserUtils;
import com.gic.haoban.manage.web.utils.data.ConcurrencyUtils;
import com.gic.haoban.manage.web.utils.data.MapThreadHandlerRequest;
import com.gic.haoban.manage.web.utils.data.StoreAuthUtils;
......@@ -160,7 +161,7 @@ public class WechatWorkController extends NewBaseController {
public RestResponse exportLostStoreGroup(@RequestBody WechatWorkLostStoreGroupQO qo) {
DownloadTask task = new DownloadTask();
task.setTaskTypeEnum(TaskTypeEnum.STORE_RANK_DOWNLOAD);
task.setTaskTypeEnum(TaskTypeEnum.WECHAT_WORK_STORE_GROUP);
task.setDataType(qo.getDataType());
task.setUser(getUserInfo());
......@@ -255,7 +256,7 @@ public class WechatWorkController extends NewBaseController {
@RequestMapping(value = "export-lost-clerk")
public RestResponse exportLostClerk(@RequestBody WechatWorkLostClerkQO qo) {
DownloadTask task = new DownloadTask();
task.setTaskTypeEnum(TaskTypeEnum.STORE_RANK_DOWNLOAD);
task.setTaskTypeEnum(TaskTypeEnum.WECHAT_WORK_CLERK_DETAIL);
task.setDataType(qo.getDataType());
task.setUser(getUserInfo());
......@@ -331,7 +332,7 @@ public class WechatWorkController extends NewBaseController {
@RequestMapping(value = "export-lost-detail")
public RestResponse exportLostDetail(@RequestBody WechatWorkLostDetailQO qo) {
DownloadTask task = new DownloadTask();
task.setTaskTypeEnum(TaskTypeEnum.STORE_RANK_DOWNLOAD);
task.setTaskTypeEnum(TaskTypeEnum.WECHAT_WORK_MEMBER_DETAIL);
task.setDataType(qo.getDataType());
task.setUser(getUserInfo());
......@@ -382,12 +383,7 @@ public class WechatWorkController extends NewBaseController {
}
private AuthorizedUser getUserInfo() {
WebLoginDTO loginUser = AuthWebRequestUtil.getLoginUser();
AuthorizedUser user = new AuthorizedUser();
user.setUserId(loginUser.getClerkId());
user.setEnterpriseId(loginUser.getEnterpriseId());
user.setRealName(loginUser.getClerkName());
return user;
return AuthorizedUserUtils.getUserInfo();
}
}
package com.gic.haoban.manage.web.handle;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gic.commons.util.DataApiUtils;
import com.gic.enterprise.api.dto.security.DownloadReportDTO;
import com.gic.haoban.manage.web.vo.eventtracking.WechatEventTrackingClerkVO;
import com.gic.web.common.download.DownloadHandlerAbstract;
import com.gic.web.common.download.context.Context;
import org.apache.commons.collections.CollectionUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.stereotype.Component;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
* 数据-登录数据-好办使用详情
*/
@Component
public class WechatEventTrackingClerkDetailHandle extends DownloadHandlerAbstract<WechatEventTrackingClerkVO> {
private static final Logger LOGGER = LogManager.getLogger(WechatEventTrackingClerkDetailHandle.class);
@Override
public List<WechatEventTrackingClerkVO> getData(Context context, String searchDataParams, Integer currentPage) {
boolean isFirst = currentPage != null && currentPage == 1;
if (isFirst) {
LOGGER.info("数据-登录数据-好办使用导购详情导出日志");
}
JSONObject jsonObject = JSON.parseObject(searchDataParams);
Map<String, Object> res = DataApiUtils.http(jsonObject.toJSONString(), "data_point_anal_hb_app_clerk");
List<JSONObject> list = DataApiUtils.getPageList(res);
if (CollectionUtils.isNotEmpty(list)) {
List<WechatEventTrackingClerkVO> result = JSONObject.parseArray(JSON.toJSONString(list), WechatEventTrackingClerkVO.class);
return result;
}
return Collections.EMPTY_LIST;
}
@Override
public List<String> getColumnNames() {
return Collections.EMPTY_LIST;
}
@Override
public List<String> getColumnNames(Context context){
DownloadReportDTO downloadReportDTO = context.getDownloadReportDTO();
String searchDataParams = downloadReportDTO.getSearchDataParams();
JSONObject jsonObject = JSONObject.parseObject(searchDataParams);
List<String> list = (List<String>) jsonObject.get("indexList");
return list;
}
@Override
public LinkedHashMap<String, List<String>> doubleColumnNames() {
return null;
}
@Override
public List<String> getColumns() {
return Collections.EMPTY_LIST;
}
@Override
public List<String> getColumns(Context context) {
DownloadReportDTO downloadReportDTO = context.getDownloadReportDTO();
String searchDataParams = downloadReportDTO.getSearchDataParams();
JSONObject jsonObject = JSONObject.parseObject(searchDataParams);
List<String> list = (List<String>) jsonObject.get("fieldList");
return list;
}
}
package com.gic.haoban.manage.web.handle;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.gic.enterprise.api.dto.security.DownloadReportDTO;
import com.gic.haoban.manage.web.utils.data.StoreAuthUtils;
import com.gic.haoban.manage.web.vo.eventtracking.WechatEventTrackingStoreGroupVO;
import com.gic.web.common.download.DownloadHandlerAbstract;
import com.gic.web.common.download.context.Context;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.List;
/**
* 数据-登录数据-好办使用详情
*/
@Component
public class WechatEventTrackingStoreGroupHandle extends DownloadHandlerAbstract<WechatEventTrackingStoreGroupVO> {
@Autowired
private StoreAuthUtils storeAuthUtils;
@Override
public List<WechatEventTrackingStoreGroupVO> getData(Context context, String searchDataParams, Integer currentPage) {
List<JSONObject> list = storeAuthUtils.getDataCommon(searchDataParams, currentPage,
"数据-登录数据-好办使用详情导出日志进来", getPageSize(), false).getRows();
if (CollectionUtils.isNotEmpty(list)) {
List<WechatEventTrackingStoreGroupVO> result = JSONObject.parseArray(JSON.toJSONString(list), WechatEventTrackingStoreGroupVO.class);
return result;
}
return Collections.EMPTY_LIST;
}
@Override
public List<String> getColumnNames() {
return Collections.EMPTY_LIST;
}
@Override
public List<String> getColumnNames(Context context){
DownloadReportDTO downloadReportDTO = context.getDownloadReportDTO();
String searchDataParams = downloadReportDTO.getSearchDataParams();
JSONObject jsonObject = JSONObject.parseObject(searchDataParams);
List<String> list = (List<String>) jsonObject.get("indexList");
return list;
}
@Override
public LinkedHashMap<String, List<String>> doubleColumnNames() {
return null;
}
@Override
public List<String> getColumns() {
return Collections.EMPTY_LIST;
}
@Override
public List<String> getColumns(Context context) {
DownloadReportDTO downloadReportDTO = context.getDownloadReportDTO();
String searchDataParams = downloadReportDTO.getSearchDataParams();
JSONObject jsonObject = JSONObject.parseObject(searchDataParams);
List<String> list = (List<String>) jsonObject.get("fieldList");
return list;
}
}
package com.gic.haoban.manage.web.qo.eventtracking;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
/**
* @Author guojx
* @Date 2024/5/21 14:12
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class WechatEventTrackingClerkDetailQO implements Serializable {
/**
* yyyy-MM-dd
*/
private String startDate;
/**
* yyyy-MM-dd
*/
private String endDate;
/**
* 导购名称/code
*/
private String vagueQueryClerk;
/**
* 数据类型 1天 2近7天 3近30天 4周 5月
*/
private Integer dateType;
/**
* 排序类型 1 正序 2 倒序
*/
private Integer orderByType;
/**
* 排序字段名称
*/
private String orderByFields;
/**
* 分组ID,可为空
*/
private String storeGroupId;
/**
* 门店ID。可为空
*/
private String storeId;
private Integer pageNum;
private Integer pageSize;
/**
* 下载导出参数:数据脱敏 1:脱敏 2:完整
*/
private Integer dataType = 1;
/**
* 下载导出参数:为了兼容前端传参
*/
private String requestProject;
public Integer getDataApiOrderField() {
Map<String, Integer> map = new HashMap<>(8);
map.put("visitTime", 1);
map.put("lastVisitTime", 2);
return map.get(orderByFields) == null ? 1 : map.get(orderByFields);
}
public void dealWithParam(JSONObject jsonObject) {
if (jsonObject == null) {
jsonObject = new JSONObject();
}
if (StringUtils.isNotBlank(startDate)) {
jsonObject.put("startDate", startDate);
}
if (StringUtils.isNotBlank(endDate)) {
jsonObject.put("endDate", endDate);
}
if (dateType != null) {
jsonObject.put("dateType", dateType);
}
if (orderByType != null) {
jsonObject.put("orderByType", orderByType);
}
if (orderByFields != null) {
jsonObject.put("orderByFields", getDataApiOrderField());
}
jsonObject.put("pageNum", pageNum);
jsonObject.put("pageSize", pageSize);
if (StringUtils.isNotBlank(vagueQueryClerk)) {
jsonObject.put("vagueQueryClerk", vagueQueryClerk);
}
}
}
package com.gic.haoban.manage.web.qo.eventtracking;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.gic.haoban.manage.web.qo.wechatwork.StoreGroupCommonQO;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
/**
* @Author guojx
* @Date 2024/5/22 9:27
*/
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class WechatEventTrackingStoreGroupQO extends StoreGroupCommonQO implements Serializable {
/**
* 周期起始时间
*/
private String startDate;
/**
* 结束时间
*/
private String endDate;
/**
* 数据类型 1天 2近7天 3近30天 4周 5月
*/
private Integer dateType;
/**
* 排序类型 1 正序 2 倒序
*/
private Integer orderByType;
/**
* 排序字段名称
*/
private String orderByFields;
private Integer pageNum;
private Integer pageSize;
/**
* 下载导出参数:数据脱敏 1:脱敏 2:完整
*/
private Integer dataType = 1;
/**
* 下载导出参数:为了兼容前端传参
*/
private String requestProject;
public Integer getDataApiOrderField() {
Map<String, Integer> map = new HashMap<>(8);
map.put("clerkNum", 1);
map.put("bindingNum", 2);
map.put("bindingRate", 3);
map.put("visitNum", 4);
map.put("visitRate", 5);
map.put("visitCnt", 6);
return map.get(orderByFields) == null ? 1 : map.get(orderByFields);
}
public void dealWithParam(JSONObject jsonObject) {
if (jsonObject == null) {
jsonObject = new JSONObject();
}
if (StringUtils.isNotBlank(startDate)) {
jsonObject.put("startDate", startDate);
}
if (dateType != null) {
jsonObject.put("dateType", dateType);
}
if (orderByType != null) {
jsonObject.put("orderByType", orderByType);
}
if (orderByFields != null) {
jsonObject.put("orderByFields", getDataApiOrderField());
}
jsonObject.put("pageNum", pageNum);
jsonObject.put("pageSize", pageSize);
}
}
package com.gic.haoban.manage.web.utils;
import com.gic.clerk.api.dto.AuthorizedUser;
import com.gic.haoban.base.api.common.pojo.dto.WebLoginDTO;
import com.gic.haoban.common.utils.AuthWebRequestUtil;
/**
* @Author guojx
* @Date 2024/5/30 10:59
*/
public class AuthorizedUserUtils {
public static AuthorizedUser getUserInfo() {
WebLoginDTO loginUser = AuthWebRequestUtil.getLoginUser();
AuthorizedUser user = new AuthorizedUser();
user.setUserId(loginUser.getClerkId());
user.setEnterpriseId(loginUser.getEnterpriseId());
user.setRealName(loginUser.getClerkName());
return user;
}
}
package com.gic.haoban.manage.web.vo.eventtracking;
import com.gic.haoban.manage.web.vo.wechatwork.StoreGroupCommonVO;
import lombok.Data;
import java.io.Serializable;
/**
* @Author guojx
* @Date 2024/5/21 15:56
*/
@Data
public class WechatEventTrackingClerkVO extends StoreGroupCommonVO implements Serializable {
/**
* 1访问时长 单位秒
*/
private Long visitTime;
/**
* 访问时长 00:00:00格式
*/
private String visitTimeStr;
/**
* 2最后一次登陆时间
*/
private String lastVisitTime;
/**
* 是否绑定
*/
private String isBinding;
/**
* 是否登陆
*/
private String isLogin;
/**
* 登陆次数
*/
private Integer visitCnt;
/**
* 导购id
*/
private String clerkId;
private String clerkName;
private String clerkCode;
public String getVisitTimeStr() {
if (visitTime != null) {
int hour = (int) (visitTime / 3600);
String str = getTimeStr(hour);
if (hour > 0) {
visitTime = visitTime - (3600 * hour);
}
int minute = (int) (visitTime / 60);
str = str + ":" + getTimeStr(minute);
if (minute > 0) {
visitTime = visitTime - (60 * minute);
}
str = str +":"+ getTimeStr(visitTime.shortValue());
return str;
}
return visitTimeStr;
}
private static String getTimeStr(int time) {
String str = "";
if (time == 0) {
str = "00";
} else if (time < 10) {
str = "0" + time + "";
} else {
str = "" + time;
}
return str;
}
}
package com.gic.haoban.manage.web.vo.eventtracking;
import com.gic.haoban.manage.web.vo.wechatwork.StoreGroupCommonVO;
import lombok.Data;
import java.io.Serializable;
/**
* @Author guojx
* @Date 2024/5/21 15:56
*/
@Data
public class WechatEventTrackingStoreGroupVO extends StoreGroupCommonVO implements Serializable {
/**
* 1员工总人数
*/
private Integer clerkNum;
/**
* 2绑定人数
*/
private Integer bindingNum;
/**
* 3绑定率
*/
private Double bindingRate;
/**
* 4活跃人数
*/
private Integer visitNum;
/**
* 5活跃率
*/
private Double visitRate;
/**
* 6访问次数
*/
private Integer visitCnt;
}
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