Ver Fonte

用户行为优化1.0.3

huangzhiguo há 1 ano atrás
pai
commit
567655de47

+ 11 - 22
src/main/java/com/caimei365/manager/dao/user/CmMarketShopDao.java

@@ -126,79 +126,68 @@ public interface CmMarketShopDao {
     /**
      * 修改阶段信息
      * @param marketReportId
-     * @param reportDate
      */
-    void updateMarketStage(@Param("marketReportId") Integer marketReportId, @Param("reportDate") String reportDate);
+    void updateMarketStage(@Param("marketReportId") Integer marketReportId);
 
     /**
      * 修改漏斗模型数据
      * @param marketReportId
-     * @param reportDate
      */
-    void updateMarketFunnelModel(@Param("marketReportId") Integer marketReportId, @Param("reportDate") String reportDate);
+    void updateMarketFunnelModel(@Param("marketReportId") Integer marketReportId);
 
     /**
      * 修改推文数据
      * @param marketReportId
-     * @param reportDate
      */
-    void updateMarketArticleReadVolume(@Param("marketReportId") Integer marketReportId, @Param("reportDate") String reportDate);
+    void updateMarketArticleReadVolume(@Param("marketReportId") Integer marketReportId);
 
     /**
      * 修改展现量
      * @param marketReportId
-     * @param reportDate
      */
-    void updateMarketImpressions(@Param("marketReportId") Integer marketReportId, @Param("reportDate") String reportDate);
+    void updateMarketImpressions(@Param("marketReportId") Integer marketReportId);
 
     /**
      * 修改点击量
      * @param marketReportId
-     * @param reportDate
      */
-    void updateMarketReadVolume(@Param("marketReportId") Integer marketReportId, @Param("reportDate") String reportDate);
+    void updateMarketReadVolume(@Param("marketReportId") Integer marketReportId);
 
     /**
      * 修改SEO汇总数据
      * @param marketReportId
-     * @param reportDate
      */
-    void updateMarketSummary(@Param("marketReportId") Integer marketReportId, @Param("reportDate") String reportDate);
+    void updateMarketSummary(@Param("marketReportId") Integer marketReportId);
 
     /**
      * 修改访问量数据
      * @param marketReportId
-     * @param reportDate
      */
-    void updateMarketVisits(@Param("marketReportId") Integer marketReportId, @Param("reportDate") String reportDate);
+    void updateMarketVisits(@Param("marketReportId") Integer marketReportId);
 
     /**
      * 修改方可来源分布数据
      * @param marketReportId
-     * @param reportDate
      */
-    void updateMarketProportion(@Param("marketReportId") Integer marketReportId, @Param("reportDate") String reportDate);
+    void updateMarketProportion(@Param("marketReportId") Integer marketReportId);
 
     /**
      * 修改页面平均时长数据
      * @param marketReportId
-     * @param reportDate
      */
-    void updateMarketPageDuration(@Param("marketReportId") Integer marketReportId, @Param("reportDate") String reportDate);
+    void updateMarketPageDuration(@Param("marketReportId") Integer marketReportId);
 
     /**
      * 修改广告图点击量数据
      * @param marketReportId
-     * @param reportDate
      */
-    void updateMarketAdvertHits(@Param("marketReportId") Integer marketReportId, @Param("reportDate") String reportDate);
+    void updateMarketAdvertHits(@Param("marketReportId") Integer marketReportId);
 
     /**
      * 修改咨询数量数据
      * @param marketReportId
-     * @param reportDate
      */
-    void updateMarketRemark(@Param("marketReportId") Integer marketReportId, @Param("reportDate") String reportDate);
+    void updateMarketRemark(@Param("marketReportId") Integer marketReportId);
 
     /**
      * 获取报表对应的供应商信息

+ 7 - 2
src/main/java/com/caimei365/manager/entity/caimei/shopImport/ArticleReadVolume.java

@@ -20,6 +20,11 @@ public class ArticleReadVolume {
      * 日期
      */
     private String addTime;
+    /**
+     * 首发时间
+     */
+    @ExcelProperty("发布时间")
+    private String firstTime;
     /**
      * 发文主题
      */
@@ -56,12 +61,12 @@ public class ArticleReadVolume {
     @ExcelProperty("分发渠道")
     private String channel;
     /**
-     * 公众号阅读
+     * 总点击
      */
     @ExcelProperty("总点击量")
     private Integer wechatNumber;
     /**
-     * 触达用户
+     * 总展现
      */
     @ExcelProperty("总展现量")
     private Integer touchNumber;

+ 12 - 0
src/main/java/com/caimei365/manager/entity/caimei/shopImport/CmMarketReport.java

@@ -18,14 +18,26 @@ public class CmMarketReport {
      * 营销id
      */
     private Integer marketId;
+    /**
+     * 供应商Id
+     */
+    private Integer shopId;
     /**
      * 报表日期
      */
     private String reportDate;
+    /**
+     * 报表生成时间
+     */
+    private String reportTime;
     /**
      * 报表名称
      */
     private String reportName;
+    /**
+     * 文件名
+     */
+    private String fileName;
     /**
      * 是否启用 1 启用 2 未启用
      */

+ 4 - 1
src/main/java/com/caimei365/manager/service/caimei/listener/AdvertHitsListener.java

@@ -4,6 +4,7 @@ import com.alibaba.excel.context.AnalysisContext;
 import com.alibaba.excel.event.AnalysisEventListener;
 import com.caimei365.manager.dao.user.CmMarketShopDao;
 import com.caimei365.manager.entity.caimei.shopImport.AdvertHits;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
@@ -16,6 +17,7 @@ import java.util.Map;
  * @author : hzg
  * @date : 2023/11/23
  */
+@Slf4j
 public class AdvertHitsListener extends AnalysisEventListener<AdvertHits> {
 
     private Integer marketReportId;
@@ -62,7 +64,8 @@ public class AdvertHitsListener extends AnalysisEventListener<AdvertHits> {
      * 保存数据
      */
     public void saveData(List<AdvertHits> dataList) {
-
+        log.info("advertImageHomeList==="+advertImageHomeList);
+        log.info("advertImageInfoList==="+advertImageInfoList);
         for (AdvertHits advertHits : dataList){
             advertHits.setMarketReportId(marketReportId);
             advertHits.setHome(advertImageHomeList.get(advertHits.getHome()));

+ 3 - 0
src/main/java/com/caimei365/manager/service/caimei/listener/SummaryListener.java

@@ -4,6 +4,7 @@ import com.alibaba.excel.context.AnalysisContext;
 import com.alibaba.excel.event.AnalysisEventListener;
 import com.caimei365.manager.dao.user.CmMarketShopDao;
 import com.caimei365.manager.entity.caimei.shopImport.Summary;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
@@ -16,6 +17,7 @@ import java.util.Map;
  * @author : hzg
  * @date : 2023/11/23
  */
+@Slf4j
 public class SummaryListener extends AnalysisEventListener<Summary> {
 
     private Integer marketReportId;
@@ -59,6 +61,7 @@ public class SummaryListener extends AnalysisEventListener<Summary> {
      * 保存数据
      */
     public void saveData(List<Summary> dataList) {
+        log.info("seoImagePathList===="+seoImagePathList);
         dataList.forEach(summary -> {
             summary.setMarketReportId(marketReportId);
             summary.setSeoRanking(seoImagePathList.get(summary.getSeoRanking()));

+ 68 - 34
src/main/java/com/caimei365/manager/service/caimei/user/impl/CmMarketShopServiceImpl.java

@@ -45,8 +45,9 @@ public class CmMarketShopServiceImpl implements CmMarketShopService {
     private final static String ZIP_FILE = "zip";
     private final static String RAR_FILE = "octet";
 
-//    private final static String extract = "/mnt/newdatadrive/data/runtime/jar-instance/manager-api/extract";
-    private final static String extract = "E:\\Users\\Desktop\\extract";
+    private final static String extract = "/mnt/newdatadrive/data/runtime/jar-instance/manager-api/extract";
+
+    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:dd");
 
     @Resource private CmMarketShopDao marketShopDao;
 
@@ -78,6 +79,17 @@ public class CmMarketShopServiceImpl implements CmMarketShopService {
     public ResponseJson<PaginationVo<CmMarketReport>> getMarketReport(Integer marketId, String reportName, int pageNum, int pageSize) {
         PageHelper.startPage(pageNum, pageSize);
         List<CmMarketReport> marketReport = marketShopDao.getMarketReport(marketId, reportName);
+        if (null != marketReport && marketReport.size() > 0) {
+            marketReport.forEach(report -> {
+                try {
+                    if (StringUtils.isNotBlank(report.getReportTime())) {
+                        report.setReportTime(simpleDateFormat.format(simpleDateFormat.parse(report.getReportTime())));
+                    }
+                } catch (ParseException e) {
+                    e.printStackTrace();
+                }
+            });
+        }
         PaginationVo<CmMarketReport> page = new PaginationVo<>(marketReport);
         return ResponseJson.success(page);
     }
@@ -90,7 +102,17 @@ public class CmMarketShopServiceImpl implements CmMarketShopService {
      */
     @Override
     public ResponseJson<CmMarketReport> getMarketReportById(Integer id) {
-        return ResponseJson.success(marketShopDao.getMarketReportById(id));
+        CmMarketReport marketReportById = marketShopDao.getMarketReportById(id);
+        if (null != marketReportById) {
+            try {
+                if (StringUtils.isNotBlank(marketReportById.getReportTime())) {
+                    marketReportById.setReportTime(simpleDateFormat.format(simpleDateFormat.parse(marketReportById.getReportTime())));
+                }
+            } catch (ParseException e) {
+                e.printStackTrace();
+            }
+        }
+        return ResponseJson.success(marketReportById);
     }
 
     /**
@@ -116,17 +138,17 @@ public class CmMarketShopServiceImpl implements CmMarketShopService {
         // 删除数据报表
         marketShopDao.updateMarketReport(id);
         // 删除数据报表具体数据
-        marketShopDao.updateMarketStage(id, null);
-        marketShopDao.updateMarketFunnelModel(id, null);
-        marketShopDao.updateMarketArticleReadVolume(id, null);
-        marketShopDao.updateMarketImpressions(id, null);
-        marketShopDao.updateMarketReadVolume(id, null);
-        marketShopDao.updateMarketSummary(id, null);
-        marketShopDao.updateMarketVisits(id, null);
-        marketShopDao.updateMarketProportion(id, null);
-        marketShopDao.updateMarketPageDuration(id, null);
-        marketShopDao.updateMarketAdvertHits(id, null);
-        marketShopDao.updateMarketRemark(id, null);
+        marketShopDao.updateMarketStage(id);
+        marketShopDao.updateMarketFunnelModel(id);
+        marketShopDao.updateMarketArticleReadVolume(id);
+        marketShopDao.updateMarketImpressions(id);
+        marketShopDao.updateMarketReadVolume(id);
+        marketShopDao.updateMarketSummary(id);
+        marketShopDao.updateMarketVisits(id);
+        marketShopDao.updateMarketProportion(id);
+        marketShopDao.updateMarketPageDuration(id);
+        marketShopDao.updateMarketAdvertHits(id);
+        marketShopDao.updateMarketRemark(id);
         return ResponseJson.success();
     }
 
@@ -210,29 +232,33 @@ public class CmMarketShopServiceImpl implements CmMarketShopService {
         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM");
         try {
             String reportTime = dateFormat.format(dateFormat.parse(reportDate));
+            File file = new File(filePath);
             if (id == null) {
                 CmMarketReport marketReport = new CmMarketReport();
                 marketReport.setMarketId(marketId);
                 marketReport.setReportDate(reportTime);
                 marketReport.setReportName(reportName);
+                marketReport.setFileName(file.getName());
                 marketShopDao.insertMarketReport(marketReport);
                 // 读取文件,处理数据
                 readFile(marketReport.getId(), filePath);
+                file.delete();
             } else {
                 // 删除数据报表具体数据
-                marketShopDao.updateMarketStage(id, reportTime);
-                marketShopDao.updateMarketFunnelModel(id, reportTime);
-                marketShopDao.updateMarketArticleReadVolume(id, reportTime);
-                marketShopDao.updateMarketImpressions(id, reportTime);
-                marketShopDao.updateMarketReadVolume(id, reportTime);
-                marketShopDao.updateMarketSummary(id, reportTime);
-                marketShopDao.updateMarketVisits(id, reportTime);
-                marketShopDao.updateMarketProportion(id, reportTime);
-                marketShopDao.updateMarketPageDuration(id, reportTime);
-                marketShopDao.updateMarketAdvertHits(id, reportTime);
-                marketShopDao.updateMarketRemark(id, reportTime);
+                marketShopDao.updateMarketStage(id);
+                marketShopDao.updateMarketFunnelModel(id);
+                marketShopDao.updateMarketArticleReadVolume(id);
+                marketShopDao.updateMarketImpressions(id);
+                marketShopDao.updateMarketReadVolume(id);
+                marketShopDao.updateMarketSummary(id);
+                marketShopDao.updateMarketVisits(id);
+                marketShopDao.updateMarketProportion(id);
+                marketShopDao.updateMarketPageDuration(id);
+                marketShopDao.updateMarketAdvertHits(id);
+                marketShopDao.updateMarketRemark(id);
                 // 读取文件,处理数据
                 readFile(id, filePath);
+                file.delete();
             }
         } catch (ParseException e) {
             e.printStackTrace();
@@ -562,30 +588,38 @@ public class CmMarketShopServiceImpl implements CmMarketShopService {
             for (File fileSpecific: file.listFiles()) {
                 if (fileSpecific.getName().equals("SEO汇总图片") && fileSpecific.exists() && fileSpecific.isDirectory()) {
                     for (File fileSpecificContain : fileSpecific.listFiles()) {
-                        if (fileSpecificContain.getName().contains("SEO")) {
-                            // 上传图到服务器并获取图链接,存入数据库,图片顺序需与 SEO 列表顺序一致
+                        if (fileSpecificContain.getName().contains("seo")) {
+                            // 上传图到服务器并获取图链接,存入数据库,图片名称需与 SEO 列表名称一致
                             MultipartFile filex = FileUtil.fileToMultipartFileConverter(fileSpecificContain);
                             String seoImagePath = formDataUtils.saveShopFile(filex);
-                            seoImagePathList.put(filex.getName(), seoImagePath);
+                            String name = fileSpecificContain.getName().substring(0, fileSpecificContain.getName().lastIndexOf("."));
+                            seoImagePathList.put(name, seoImagePath);
                         }
                     }
                 }
-                if (fileSpecific.getName().equals("广告图片") && fileSpecific.exists() && fileSpecific.isDirectory()) {
+                log.info("fileSpecific.getName()======"+fileSpecific.getName());
+                if (fileSpecific.getName().equals("advert广告图片") && fileSpecific.exists() && fileSpecific.isDirectory()) {
                     for (File fileSpecificContain : fileSpecific.listFiles()) {
+                        log.info("fileSpecificContain.getName()======"+fileSpecificContain.getName());
                         if (fileSpecificContain.getName().contains("首页")) {
-                            // 上传图到服务器并获取图链接,存入数据库,图片顺序需与 广告图点击量 列表顺序一致
+                            // 上传图到服务器并获取图链接,存入数据库,图片名称需与 广告图点击量 列表名称一致
                             MultipartFile filex = FileUtil.fileToMultipartFileConverter(fileSpecificContain);
                             String advertImagePath = formDataUtils.saveShopFile(filex);
-                            advertImageHomeList.put(filex.getName(), advertImagePath);
+                            String name = fileSpecificContain.getName().substring(0, fileSpecificContain.getName().lastIndexOf("."));
+                            advertImageHomeList.put(name, advertImagePath);
                         }
                         if (fileSpecificContain.getName().contains("信息中心")) {
-                            // 上传图到服务器并获取图链接,存入数据库,图片顺序需与 广告图点击量 列表顺序一致
+                            // 上传图到服务器并获取图链接,存入数据库,图片名称需与 广告图点击量 列表名称一致
                             MultipartFile filex = FileUtil.fileToMultipartFileConverter(fileSpecificContain);
                             String advertImagePath = formDataUtils.saveShopFile(filex);
-                            advertImageInfoList.put(filex.getName(), advertImagePath);
+                            String name = fileSpecificContain.getName().substring(0, fileSpecificContain.getName().lastIndexOf("."));
+                            advertImageInfoList.put(name, advertImagePath);
                         }
                     }
                 }
+            }
+            // 读取完图片文件后在读取数据文件 xlsx
+            for (File fileSpecific: file.listFiles()) {
                 if (fileSpecific.getName().endsWith(".xlsx") || fileSpecific.getName().endsWith(".xls")) {
                     readExcel(marketReportId, fileSpecific, seoImagePathList, advertImageHomeList, advertImageInfoList);
                 }
@@ -615,7 +649,7 @@ public class CmMarketShopServiceImpl implements CmMarketShopService {
         is = new BufferedInputStream(multipartFile.getInputStream());
         EasyExcel.read(is, FunnelModel.class, new FunnelModelListener(marketReportId, marketShopDao)).excelType(ExcelTypeEnum.valueOf(excelType)).sheet("漏斗模型数据").doRead();
         is = new BufferedInputStream(multipartFile.getInputStream());
-        EasyExcel.read(is, ArticleReadVolume.class, new ArticleReadVolumeListener(marketReportId, marketShopDao)).excelType(ExcelTypeEnum.valueOf(excelType)).sheet("推文阅读量").doRead();
+        EasyExcel.read(is, ArticleReadVolume.class, new ArticleReadVolumeListener(marketReportId, marketShopDao)).excelType(ExcelTypeEnum.valueOf(excelType)).sheet("推文数据").doRead();
         is = new BufferedInputStream(multipartFile.getInputStream());
         EasyExcel.read(is, Impressions.class, new ImpressionsListener(marketReportId, marketShopDao)).excelType(ExcelTypeEnum.valueOf(excelType)).sheet("展现量").doRead();
         is = new BufferedInputStream(multipartFile.getInputStream());

+ 1 - 0
src/main/java/com/caimei365/manager/utils/formDataUtils.java

@@ -81,6 +81,7 @@ public class formDataUtils {
         file.transferTo(new File(filePath));
         log.info(">>>>>>>>>>>>>>>>图片上传路径:" + filePath);
         String file1 = client.uploadFile(filePath);
+        file1 = imageDomain + "/" + file1;
         return file1;
     }
 }

+ 24 - 50
src/main/resources/mapper/user/CmMarketShopDao.xml

@@ -9,29 +9,35 @@
     </update>
 
     <select id="getMarketReport" resultType="com.caimei365.manager.entity.caimei.shopImport.CmMarketReport">
-        SELECT
-        id,
-        marketId,
-        reportDate,
-        reportName,
-        visible,
-        addTime,
-        delFlag
-        FROM cm_market_report
+        select
+        cmr.id,
+        cmr.marketId,
+        cmr.reportDate,
+        cmr.reportTime,
+        cmr.fileName,
+        cmr.reportName,
+        css.shopId,
+        cmr.visible,
+        cmr.addTime,
+        cmr.delFlag
+        FROM cm_market_report cmr
+        LEFT JOIN cm_shop_statistics css ON css.id = cmr.marketId
         <where>
-            marketId = #{marketId} AND delFlag = 0
+            cmr.marketId = #{marketId} AND cmr.delFlag = 0
             <if test="reportName != null and reportName != ''">
-                AND reportName LIKE concat('%', #{reportName}, '%')
+                AND cmr.reportName LIKE concat('%', #{reportName}, '%')
             </if>
         </where>
-        order by addTime desc
+        order by cmr.addTime desc
     </select>
 
     <select id="getMarketReportById" resultType="com.caimei365.manager.entity.caimei.shopImport.CmMarketReport">
         SELECT id,
                marketId,
                reportDate,
+               reportTime,
                reportName,
+               fileName,
                visible,
                addTime,
                delFlag
@@ -42,7 +48,8 @@
 
     <update id="updateMarketReportVisible">
         update cm_market_report
-        set visible = 1
+        set visible = 1,
+            reportTime = now()
         where id = #{id}
     </update>
 
@@ -53,8 +60,8 @@
     </update>
 
     <insert id="insertMarketReport" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-        insert into cm_market_report (marketId, reportDate, reportName, visible, addTime, delFlag)
-        values (#{marketId}, #{reportDate}, #{reportName}, 1, now(), 0)
+        insert into cm_market_report (marketId, reportDate, reportTime, reportName, fileName, visible, addTime, delFlag)
+        values (#{marketId}, #{reportDate}, #{reportTime}, #{reportName}, #{fileName}, 2, now(), 0)
     </insert>
 
     <insert id="insertMarketStage">
@@ -69,9 +76,9 @@
     </insert>
 
     <insert id="insertMarketArticleReadVolume">
-        insert into cm_market_articleReadVolume (marketReportId, title, link, titleReferred, type, keyword, channel,
+        insert into cm_market_articleReadVolume (marketReportId, firstTime, title, link, titleReferred, type, keyword, channel,
                                                  touchNumber, wechatNumber, addTime, delFlag)
-        values (#{marketReportId}, #{title}, #{link}, #{titleReferred}, #{type}, #{keyword}, #{channel}, #{touchNumber},
+        values (#{marketReportId}, #{firstTime}, #{title}, #{link}, #{titleReferred}, #{type}, #{keyword}, #{channel}, #{touchNumber},
                 #{wechatNumber}, now(), 0)
     </insert>
 
@@ -121,99 +128,66 @@
         update cm_market_stage
         set delFlag = 1
         where marketReportId = #{marketReportId}
-        <if test="reportDate != null and reportDate!= ''">
-            and reportDate = #{reportDate}
-        </if>
     </insert>
 
     <insert id="updateMarketFunnelModel">
         update cm_market_funnelModel
         set delFlag = 1
         where marketReportId = #{marketReportId}
-        <if test="reportDate != null and reportDate!= ''">
-            and reportDate = #{reportDate}
-        </if>
     </insert>
 
     <insert id="updateMarketArticleReadVolume">
         update cm_market_articleReadVolume
         set delFlag = 1
         where marketReportId = #{marketReportId}
-        <if test="reportDate != null and reportDate!= ''">
-            and reportDate = #{reportDate}
-        </if>
     </insert>
 
     <insert id="updateMarketImpressions">
         update cm_market_impressions
         set delFlag = 1
         where marketReportId = #{marketReportId}
-        <if test="reportDate != null and reportDate!= ''">
-            and reportDate = #{reportDate}
-        </if>
     </insert>
 
     <insert id="updateMarketReadVolume">
         update cm_market_readVolume
         set delFlag = 1
         where marketReportId = #{marketReportId}
-        <if test="reportDate != null and reportDate!= ''">
-            and reportDate = #{reportDate}
-        </if>
     </insert>
 
     <insert id="updateMarketSummary">
         update cm_market_summary
         set delFlag = 1
         where marketReportId = #{marketReportId}
-        <if test="reportDate != null and reportDate!= ''">
-            and reportDate = #{reportDate}
-        </if>
     </insert>
 
     <insert id="updateMarketVisits">
         update cm_market_visits
         set delFlag = 1
         where marketReportId = #{marketReportId}
-        <if test="reportDate != null and reportDate!= ''">
-            and reportDate = #{reportDate}
-        </if>
     </insert>
 
     <insert id="updateMarketProportion">
         update cm_market_proportion
         set delFlag = 1
         where marketReportId = #{marketReportId}
-        <if test="reportDate != null and reportDate!= ''">
-            and reportDate = #{reportDate}
-        </if>
     </insert>
 
     <insert id="updateMarketPageDuration">
         update cm_market_pageDuration
         set delFlag = 1
         where marketReportId = #{marketReportId}
-        <if test="reportDate != null and reportDate!= ''">
-            and reportDate = #{reportDate}
-        </if>
     </insert>
 
     <insert id="updateMarketAdvertHits">
         update cm_market_advertHits
         set delFlag = 1
         where marketReportId = #{marketReportId}
-        <if test="reportDate != null and reportDate!= ''">
-            and reportDate = #{reportDate}
-        </if>
     </insert>
 
     <insert id="updateMarketRemark">
         update cm_market_remark
         set delFlag = 1
         where marketReportId = #{marketReportId}
-        <if test="reportDate != null and reportDate!= ''">
-            and reportDate = #{reportDate}
-        </if>
     </insert>
 
     <select id="getShopInfoById" resultType="com.caimei365.manager.entity.caimei.shopImport.CmMarketShop">