Sfoglia il codice sorgente

用户行为优化1.0.5

huangzhiguo 1 anno fa
parent
commit
7e4607a34b

+ 2 - 1
src/main/java/com/caimei365/manager/controller/caimei/user/CmMarketShopApi.java

@@ -4,6 +4,7 @@ import com.caimei.utils.StringUtils;
 import com.caimei365.manager.entity.PaginationVo;
 import com.caimei365.manager.entity.ResponseJson;
 import com.caimei365.manager.entity.caimei.CmShop;
+import com.caimei365.manager.entity.caimei.cmUser.CmMarketCode;
 import com.caimei365.manager.entity.caimei.shopImport.CmMarketReport;
 import com.caimei365.manager.entity.caimei.shopImport.CmMarketShop;
 import com.caimei365.manager.service.caimei.user.CmMarketShopService;
@@ -146,7 +147,7 @@ public class CmMarketShopApi {
      * @return
      */
     @GetMapping("/preview")
-    public ResponseJson<Map<String, Object>> preview(Integer id) {
+    public ResponseJson<CmMarketCode> preview(Integer id) {
         if (id == null) {
             return ResponseJson.error(-1, "报表id不能为空", null);
         }

+ 14 - 0
src/main/java/com/caimei365/manager/dao/user/CmMarketShopDao.java

@@ -2,6 +2,7 @@ package com.caimei365.manager.dao.user;
 
 import com.caimei365.manager.entity.caimei.CmShop;
 import com.caimei365.manager.entity.caimei.ReturnEntity;
+import com.caimei365.manager.entity.caimei.cmUser.CmMarketCode;
 import com.caimei365.manager.entity.caimei.shopImport.*;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -303,4 +304,17 @@ public interface CmMarketShopDao {
      * @return
      */
     List<ReturnEntity> getClubType(@Param("accessDate") String accessDate, @Param("labels") List<String> labels);
+
+    /**
+     * 添加预览码
+     * @param cmMarketCode
+     */
+    void insertMarketCode(CmMarketCode cmMarketCode);
+
+    /**
+     * 修改预览码状态
+     * @param marketReportId
+     * @param id
+     */
+    void updateMarketCoed(@Param("marketReportId") Integer marketReportId, @Param("id") Integer id);
 }

+ 35 - 0
src/main/java/com/caimei365/manager/entity/caimei/cmUser/CmMarketCode.java

@@ -0,0 +1,35 @@
+package com.caimei365.manager.entity.caimei.cmUser;
+
+import lombok.Data;
+
+/**
+ * Description
+ *
+ * @author : hzg
+ * @date : 2024/1/23
+ */
+@Data
+public class CmMarketCode {
+
+    private Integer id;
+    /**
+     * 报表Id
+     */
+    private Integer marketReportId;
+    /**
+     * 分享码
+     */
+    private String code;
+    /**
+     * 到期时间
+     */
+    private String recodeTime;
+    /**
+     * 添加时间
+     */
+    private String addTime;
+    /**
+     * 删除标记 0 未删除 1删除
+     */
+    private Integer delFlag;
+}

+ 2 - 1
src/main/java/com/caimei365/manager/service/caimei/user/CmMarketShopService.java

@@ -3,6 +3,7 @@ package com.caimei365.manager.service.caimei.user;
 import com.caimei365.manager.entity.PaginationVo;
 import com.caimei365.manager.entity.ResponseJson;
 import com.caimei365.manager.entity.caimei.CmShop;
+import com.caimei365.manager.entity.caimei.cmUser.CmMarketCode;
 import com.caimei365.manager.entity.caimei.shopImport.CmMarketReport;
 import com.caimei365.manager.entity.caimei.shopImport.CmMarketShop;
 import org.springframework.web.multipart.MultipartFile;
@@ -79,5 +80,5 @@ public interface CmMarketShopService {
      * @param id
      * @return
      */
-    ResponseJson<Map<String, Object>> preview(Integer id);
+    ResponseJson<CmMarketCode> preview(Integer id);
 }

+ 21 - 294
src/main/java/com/caimei365/manager/service/caimei/user/impl/CmMarketShopServiceImpl.java

@@ -11,6 +11,7 @@ import com.caimei365.manager.entity.ResponseJson;
 import com.caimei365.manager.entity.caimei.CmShop;
 import com.caimei365.manager.entity.caimei.ReturnData;
 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.service.caimei.listener.*;
 import com.caimei365.manager.service.caimei.user.CmMarketShopService;
@@ -287,300 +288,26 @@ public class CmMarketShopServiceImpl implements CmMarketShopService {
      * @return
      */
     @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);
     }
 
     /**

+ 11 - 0
src/main/resources/mapper/user/CmMarketShopDao.xml

@@ -382,4 +382,15 @@
             )
         GROUP BY c.firstClubType
     </select>
+
+    <insert id="insertMarketCode" keyColumn="id" useGeneratedKeys="true">
+        insert into cm_market_code(marketReportId, code, recodeTime, addTime, delFlag)
+        values(#{marketReportId}, #{code}, #{recodeTime}, now(), 0)
+    </insert>
+
+    <update id="updateMarketCoed">
+        update cm_market_code
+        set delFlag = 1
+        where marketReportId = #{marketReportId} and id != #{id}
+    </update>
 </mapper>