|
@@ -11,6 +11,7 @@ import com.caimei365.manager.entity.ResponseJson;
|
|
import com.caimei365.manager.entity.caimei.CmShop;
|
|
import com.caimei365.manager.entity.caimei.CmShop;
|
|
import com.caimei365.manager.entity.caimei.ReturnData;
|
|
import com.caimei365.manager.entity.caimei.ReturnData;
|
|
import com.caimei365.manager.entity.caimei.ReturnEntity;
|
|
import com.caimei365.manager.entity.caimei.ReturnEntity;
|
|
|
|
+import com.caimei365.manager.entity.caimei.cmUser.CmMarketCode;
|
|
import com.caimei365.manager.entity.caimei.shopImport.*;
|
|
import com.caimei365.manager.entity.caimei.shopImport.*;
|
|
import com.caimei365.manager.service.caimei.listener.*;
|
|
import com.caimei365.manager.service.caimei.listener.*;
|
|
import com.caimei365.manager.service.caimei.user.CmMarketShopService;
|
|
import com.caimei365.manager.service.caimei.user.CmMarketShopService;
|
|
@@ -287,300 +288,26 @@ public class CmMarketShopServiceImpl implements CmMarketShopService {
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
@Override
|
|
@Override
|
|
- public ResponseJson<Map<String, Object>> preview(Integer id) {
|
|
|
|
- Map<String, Object> map = new HashMap<>();
|
|
|
|
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM");
|
|
|
|
- // name集合
|
|
|
|
- ArrayList<String> name = new ArrayList<>();
|
|
|
|
- // value 集合
|
|
|
|
- ArrayList<Integer> value = new ArrayList<>();
|
|
|
|
- // 备份(第二value)集合
|
|
|
|
- ArrayList<Integer> backupsValues = new ArrayList<>();
|
|
|
|
- // 唯一name集合
|
|
|
|
- Set<String> set = new HashSet<>();
|
|
|
|
- // 获取报表对应供应商数据
|
|
|
|
- CmMarketShop shopInfo = marketShopDao.getShopInfoById(id);
|
|
|
|
- // 获取阶段描述
|
|
|
|
- List<Stage> summarize = new ArrayList<>();
|
|
|
|
- List<Stage> summarize1 = new ArrayList<>();
|
|
|
|
- List<Stage> summarize2 = new ArrayList<>();
|
|
|
|
- List<Stage> marketStage = marketShopDao.getMarketStage(id);
|
|
|
|
- if (null != marketStage && marketStage.size() > 0) {
|
|
|
|
- for (Stage stage : marketStage) {
|
|
|
|
- try {
|
|
|
|
- stage.setAddTime(dateFormat.format(dateFormat.parse(stage.getAddTime())));
|
|
|
|
- if ("1".equals(stage.getStage())) {
|
|
|
|
- summarize.add(stage);
|
|
|
|
- }
|
|
|
|
- if ("2".equals(stage.getStage())) {
|
|
|
|
- summarize1.add(stage);
|
|
|
|
- }
|
|
|
|
- if ("3".equals(stage.getStage())) {
|
|
|
|
- summarize2.add(stage);
|
|
|
|
- }
|
|
|
|
- } catch (ParseException e) {
|
|
|
|
- e.printStackTrace();
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- map.put("summarize", summarize);
|
|
|
|
- map.put("summarize1", summarize1);
|
|
|
|
- map.put("summarize2", summarize2);
|
|
|
|
- // 获取漏斗模型数据
|
|
|
|
- List<FunnelModel> marketFunnelModel = marketShopDao.getMarketFunnelModel(id);
|
|
|
|
- int impressions = 0, hits = 0, visits = 0, consultation = 0, report = 0;
|
|
|
|
- if (null != marketFunnelModel && marketFunnelModel.size() > 0) {
|
|
|
|
- for (FunnelModel funnelModel : marketFunnelModel) {
|
|
|
|
- impressions += funnelModel.getImpressions();
|
|
|
|
- hits += funnelModel.getHits();
|
|
|
|
- visits += funnelModel.getVisits();
|
|
|
|
- consultation += funnelModel.getConsultation();
|
|
|
|
- report += funnelModel.getReport();
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- try {
|
|
|
|
- shopInfo.setChartTitle("【"+shopInfo.getName()+"】"+dateFormat.format(dateFormat.parse(shopInfo.getAddTime())) + "数据报表");
|
|
|
|
- } catch (ParseException e) {
|
|
|
|
- e.printStackTrace();
|
|
|
|
- }
|
|
|
|
- shopInfo.setImpressions(impressions);
|
|
|
|
- shopInfo.setHits(hits);
|
|
|
|
- shopInfo.setVisits(visits);
|
|
|
|
- shopInfo.setConsultation(consultation);
|
|
|
|
- shopInfo.setReport(report);
|
|
|
|
- map.put("shopInfo", shopInfo);
|
|
|
|
- // 获取推文数据
|
|
|
|
- List<ArticleReadVolume> marketArticleReadVolume = marketShopDao.getMarketArticleReadVolume(id);
|
|
|
|
- List<ArticleReadVolume> articleReadVolumeList = new ArrayList<>();
|
|
|
|
- if (null != marketArticleReadVolume && marketArticleReadVolume.size() > 0) {
|
|
|
|
- for (ArticleReadVolume articleReadVolume : marketArticleReadVolume) {
|
|
|
|
- if (!set.contains(articleReadVolume.getTitle())) {
|
|
|
|
- set.add(articleReadVolume.getTitle());
|
|
|
|
- articleReadVolumeList.add(articleReadVolume);
|
|
|
|
- } else {
|
|
|
|
- // 将有重复的推文数据 总阅读量 总展现量相加为一组数据
|
|
|
|
- for (ArticleReadVolume readVolume : articleReadVolumeList) {
|
|
|
|
- if (articleReadVolume.getTitle().equals(readVolume.getTitle())) {
|
|
|
|
- readVolume.setWechatNumber(MathUtil.sub(readVolume.getWechatNumber(), articleReadVolume.getWechatNumber()).intValue());
|
|
|
|
- readVolume.setTouchNumber(MathUtil.sub(readVolume.getTouchNumber(), articleReadVolume.getTouchNumber()).intValue());
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- map.put("volumeList", articleReadVolumeList);
|
|
|
|
- // 公众号推文数据
|
|
|
|
- ReturnData articleReturnData = new ReturnData();
|
|
|
|
- if (null != articleReadVolumeList && articleReadVolumeList.size() > 0) {
|
|
|
|
- name = new ArrayList<>(articleReadVolumeList.stream().map(ArticleReadVolume::getTitleReferred).collect(Collectors.toList()));
|
|
|
|
- articleReturnData.setNames(name);
|
|
|
|
- value = new ArrayList<>(articleReadVolumeList.stream().map(ArticleReadVolume::getWechatNumber).collect(Collectors.toList()));
|
|
|
|
- articleReturnData.setValues(value);
|
|
|
|
- backupsValues = new ArrayList<>(articleReadVolumeList.stream().map(ArticleReadVolume::getTouchNumber).collect(Collectors.toList()));
|
|
|
|
- articleReturnData.setBackupsValues(backupsValues);
|
|
|
|
- }
|
|
|
|
- map.put("wechats", articleReturnData);
|
|
|
|
- // 获取展现量数据
|
|
|
|
- List<Impressions> marketImpressions = marketShopDao.getMarketImpressions(id);
|
|
|
|
- int generalNumber = 0, microBlog = 0, redBookNumber = 0, otherNumber = 0;
|
|
|
|
- if (null != marketImpressions && marketImpressions.size() > 0) {
|
|
|
|
- for (Impressions imp : marketImpressions) {
|
|
|
|
- generalNumber += imp.getGeneralNumber();
|
|
|
|
- microBlog += imp.getMicroBlog();
|
|
|
|
- redBookNumber += imp.getRedBookNumber();
|
|
|
|
- otherNumber += imp.getOtherNumber();
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- ReturnData returnData = new ReturnData();
|
|
|
|
- name.add("公众号");
|
|
|
|
- name.add("微博");
|
|
|
|
- name.add("小红书");
|
|
|
|
- name.add("其它自媒体渠道");
|
|
|
|
- returnData.setNames(name);
|
|
|
|
- value.add(generalNumber);
|
|
|
|
- value.add(microBlog);
|
|
|
|
- value.add(redBookNumber);
|
|
|
|
- value.add(otherNumber);
|
|
|
|
- returnData.setValues(value);
|
|
|
|
- map.put("intention", returnData);
|
|
|
|
- // 获取点击量数据
|
|
|
|
- name.clear();
|
|
|
|
- value.clear();
|
|
|
|
- List<ReadVolume> marketReadVolume = marketShopDao.getMarketReadVolume(id);
|
|
|
|
- if (null != marketReadVolume && marketReadVolume.size() > 0) {
|
|
|
|
- for (ReadVolume readVolume : marketReadVolume) {
|
|
|
|
- generalNumber += readVolume.getGeneralNumber();
|
|
|
|
- microBlog += readVolume.getMicroBlog();
|
|
|
|
- redBookNumber += readVolume.getRedBookNumber();
|
|
|
|
- otherNumber += readVolume.getOtherNumber();
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- ReturnData readVolumeReturnData = new ReturnData();
|
|
|
|
- name.add("公众号");
|
|
|
|
- name.add("微博");
|
|
|
|
- name.add("小红书");
|
|
|
|
- name.add("其它自媒体渠道");
|
|
|
|
- returnData.setNames(name);
|
|
|
|
- value.add(generalNumber);
|
|
|
|
- value.add(microBlog);
|
|
|
|
- value.add(redBookNumber);
|
|
|
|
- value.add(otherNumber);
|
|
|
|
- returnData.setValues(value);
|
|
|
|
- map.put("allVisits", readVolumeReturnData);
|
|
|
|
- // 获取SEO汇总数据
|
|
|
|
- set.clear();
|
|
|
|
- List<Summary> marketSummary = marketShopDao.getMarketSummary(id);
|
|
|
|
- List<Summary> summaryList = new ArrayList<>();
|
|
|
|
- List<ReturnData> returnDataList = new ArrayList<>();
|
|
|
|
- if (null != marketSummary && marketSummary.size() > 0) {
|
|
|
|
- for (Summary summary : marketSummary) {
|
|
|
|
- if (!set.contains(summary.getKeyword())) {
|
|
|
|
- set.add(summary.getKeyword());
|
|
|
|
- summaryList.add(summary);
|
|
|
|
- } else {
|
|
|
|
- for (Summary summary1 : summaryList) {
|
|
|
|
- if (summary.getKeyword().equals(summary1.getKeyword())) {
|
|
|
|
- summary1.setSearchVolume(MathUtil.sub(summary1.getSearchVolume(), summary.getSearchVolume()).intValue());
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- if (null != summaryList && summaryList.size() > 0) {
|
|
|
|
- for (Summary summary : summaryList) {
|
|
|
|
- ReturnData summaryReturnData = new ReturnData();
|
|
|
|
- summaryReturnData.setName(summary.getKeyword());
|
|
|
|
- summaryReturnData.setValue(summary.getSearchVolume());
|
|
|
|
- summaryReturnData.setSeo(summary.getSeoRanking());
|
|
|
|
- returnDataList.add(summaryReturnData);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- map.put("keywordList", summaryList);
|
|
|
|
- // 获取访问量数据
|
|
|
|
- name.clear();
|
|
|
|
- value.clear();
|
|
|
|
- List<Visits> marketVisits = marketShopDao.getMarketVisits(id);
|
|
|
|
- int clubNumber = 0, touristNumber = 0;
|
|
|
|
- if (null != marketVisits && marketVisits.size() > 0) {
|
|
|
|
- for (Visits vis : marketVisits) {
|
|
|
|
- clubNumber += vis.getClubNumber();
|
|
|
|
- touristNumber += vis.getTouristNumber();
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- ReturnData visitsReturnData = new ReturnData();
|
|
|
|
- name.add("机构访问量");
|
|
|
|
- name.add("游客访问量");
|
|
|
|
- visitsReturnData.setNames(name);
|
|
|
|
- value.add(clubNumber);
|
|
|
|
- value.add(touristNumber);
|
|
|
|
- visitsReturnData.setValues(value);
|
|
|
|
- map.put("stationVisits", visitsReturnData);
|
|
|
|
- // 获取访客来源分布数据
|
|
|
|
- name.clear();
|
|
|
|
- value.clear();
|
|
|
|
- List<Proportion> marketProportion = marketShopDao.getMarketProportion(id);
|
|
|
|
- int search = 0, general = 0, proMicroBlog = 0, directAccess = 0;
|
|
|
|
- if (null != marketProportion && marketProportion.size() > 0) {
|
|
|
|
- for (Proportion proportion : marketProportion) {
|
|
|
|
- search += proportion.getSearch();
|
|
|
|
- general += proportion.getGeneral();
|
|
|
|
- proMicroBlog += proportion.getMicroBlog();
|
|
|
|
- directAccess += proportion.getDirectAccess();
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- ReturnData proportionReturnData = new ReturnData();
|
|
|
|
- name.add("搜索引擎");
|
|
|
|
- name.add("微信平台");
|
|
|
|
- name.add("微博");
|
|
|
|
- name.add("直接访问");
|
|
|
|
- proportionReturnData.setNames(name);
|
|
|
|
- value.add(search);
|
|
|
|
- value.add(general);
|
|
|
|
- value.add(proMicroBlog);
|
|
|
|
- value.add(directAccess);
|
|
|
|
- proportionReturnData.setValues(value);
|
|
|
|
- map.put("proportion", proportionReturnData);
|
|
|
|
- // 获取页面平均访问时长数据
|
|
|
|
- set.clear();
|
|
|
|
- List<PageDuration> marketPageDuration = marketShopDao.getMarketPageDuration(id);
|
|
|
|
- List<PageDuration> pageDurationList = new ArrayList<>();
|
|
|
|
- if (null != marketPageDuration && marketPageDuration.size() > 0) {
|
|
|
|
- for (PageDuration pageDuration : marketPageDuration) {
|
|
|
|
- if (!set.contains(pageDuration.getPageLabel())) {
|
|
|
|
- set.add(pageDuration.getPageLabel());
|
|
|
|
- pageDurationList.add(pageDuration);
|
|
|
|
- } else {
|
|
|
|
- for (PageDuration pageDuration1 : pageDurationList) {
|
|
|
|
- if (pageDuration.getPageLabel().equals(pageDuration1.getPageLabel())) {
|
|
|
|
- pageDuration1.setAccessDuration(MathUtil.sub(pageDuration1.getAccessDuration(), pageDuration.getAccessDuration()).intValue());
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- ReturnData pageDurationReturnData = new ReturnData();
|
|
|
|
- name = new ArrayList<>(set);
|
|
|
|
- pageDurationReturnData.setNames(name);
|
|
|
|
- value = new ArrayList<>(pageDurationList.stream().map(PageDuration::getAccessDuration).collect(Collectors.toList()));
|
|
|
|
- pageDurationReturnData.setValues(value);
|
|
|
|
-
|
|
|
|
- map.put("visitTimes", pageDurationReturnData);
|
|
|
|
- // 获取广告图点击量数据
|
|
|
|
- List<AdvertHits> marketAdvertHits = marketShopDao.getMarketAdvertHits(id);
|
|
|
|
- map.put("bannerList", marketAdvertHits);
|
|
|
|
- // 获取咨询数量数据
|
|
|
|
- name.clear();
|
|
|
|
- value.clear();
|
|
|
|
- List<Remark> marketRemark = marketShopDao.getMarketRemark(id);
|
|
|
|
- if (null != marketRemark && marketRemark.size() > 0) {
|
|
|
|
- for (Remark remark : marketRemark) {
|
|
|
|
- try {
|
|
|
|
- name.add(dateFormat.format(dateFormat.parse(remark.getAddTime())));
|
|
|
|
- value.add(remark.getRemarkNumber());
|
|
|
|
- } catch (ParseException e) {
|
|
|
|
- e.printStackTrace();
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- ReturnData remarkReturnData = new ReturnData();
|
|
|
|
- remarkReturnData.setNames(name);
|
|
|
|
- remarkReturnData.setValues(value);
|
|
|
|
- map.put("leadUserMonthly", remarkReturnData);
|
|
|
|
- String accessDate = "";
|
|
|
|
- try {
|
|
|
|
- dateFormat.format(dateFormat.parse(shopInfo.getAddTime()));
|
|
|
|
- } catch (ParseException e) {
|
|
|
|
- e.printStackTrace();
|
|
|
|
- }
|
|
|
|
- // 供应商相关标签
|
|
|
|
- List<String> shopKeyword = marketShopDao.getShopKeyword(shopInfo.getShopId());
|
|
|
|
-
|
|
|
|
- Map<String, Integer> regionMap = new HashMap<>();
|
|
|
|
- // 访问供应商用户对应身份
|
|
|
|
- List<ReturnEntity> userIdentity = new ArrayList<>();
|
|
|
|
- // 访问供应商用户对应机构类型
|
|
|
|
- List<ReturnEntity> clubType = new ArrayList<>();
|
|
|
|
- if (StringUtils.isNotBlank(accessDate) && StringUtils.isNotEmpty(accessDate)) {
|
|
|
|
- // 访问供应商用户对于所在地区
|
|
|
|
- List<String> region = marketShopDao.getRegion(accessDate, shopKeyword);
|
|
|
|
- Set<String> province = new HashSet<>();
|
|
|
|
- String com = "";
|
|
|
|
- for (String str : region ) {
|
|
|
|
- String trim = str.trim();
|
|
|
|
- com = trim.substring(0, 2);
|
|
|
|
- province.add(com);
|
|
|
|
- }
|
|
|
|
- for (String str : province) {
|
|
|
|
- List<String> collect = region.stream().filter(pro -> pro.substring(0, 3).contains(str)).collect(Collectors.toList());
|
|
|
|
- regionMap.put(str, collect.size());
|
|
|
|
- }
|
|
|
|
- userIdentity = marketShopDao.getUserIdentity(accessDate, shopKeyword);
|
|
|
|
- clubType = marketShopDao.getClubType(accessDate, shopKeyword);
|
|
|
|
- }
|
|
|
|
- map.put("regionMap", regionMap);
|
|
|
|
- map.put("userIdentity", userIdentity);
|
|
|
|
- map.put("clubType", clubType);
|
|
|
|
- return ResponseJson.success(map);
|
|
|
|
|
|
+ public ResponseJson<CmMarketCode> preview(Integer id) {
|
|
|
|
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
|
+ // 生效到期时间
|
|
|
|
+ Calendar instance = Calendar.getInstance();
|
|
|
|
+ instance.setTime(new Date());
|
|
|
|
+ instance.add(Calendar.DAY_OF_MONTH, +1);
|
|
|
|
+ Date time = instance.getTime();
|
|
|
|
+ String recordTime = dateFormat.format(time);
|
|
|
|
+ // 生成验证码
|
|
|
|
+ Random random = new Random();
|
|
|
|
+ String code = String.format("%04d", random.nextInt(10000));
|
|
|
|
+ CmMarketCode marketCode = new CmMarketCode();
|
|
|
|
+ marketCode.setMarketReportId(id);
|
|
|
|
+ marketCode.setCode(code);
|
|
|
|
+ marketCode.setRecodeTime(recordTime);
|
|
|
|
+ // 添加预览码
|
|
|
|
+ marketShopDao.insertMarketCode(marketCode);
|
|
|
|
+ // 修改预览码状态
|
|
|
|
+ marketShopDao.updateMarketCoed(id, marketCode.getId());
|
|
|
|
+ return ResponseJson.success(marketCode);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|