Selaa lähdekoodia

用户优化1.0.3

huangzhiguo 1 vuosi sitten
vanhempi
commit
7b9160e250
26 muutettua tiedostoa jossa 1058 lisäystä ja 206 poistoa
  1. 9 3
      pom.xml
  2. 10 3
      src/main/java/com/caimei365/manager/controller/caimei/user/CmMarketShopApi.java
  3. 3 3
      src/main/java/com/caimei365/manager/dao/user/CmBehaviorRecordDao.java
  4. 117 1
      src/main/java/com/caimei365/manager/dao/user/CmMarketShopDao.java
  5. 40 0
      src/main/java/com/caimei365/manager/entity/caimei/ReturnData.java
  6. 5 1
      src/main/java/com/caimei365/manager/entity/caimei/ReturnEntity.java
  7. 8 2
      src/main/java/com/caimei365/manager/entity/caimei/shopImport/AdvertHits.java
  8. 9 3
      src/main/java/com/caimei365/manager/entity/caimei/shopImport/ArticleReadVolume.java
  9. 25 1
      src/main/java/com/caimei365/manager/entity/caimei/shopImport/CmMarketShop.java
  10. 12 6
      src/main/java/com/caimei365/manager/entity/caimei/shopImport/FunnelModel.java
  11. 11 5
      src/main/java/com/caimei365/manager/entity/caimei/shopImport/Impressions.java
  12. 8 2
      src/main/java/com/caimei365/manager/entity/caimei/shopImport/PageDuration.java
  13. 11 5
      src/main/java/com/caimei365/manager/entity/caimei/shopImport/Proportion.java
  14. 11 5
      src/main/java/com/caimei365/manager/entity/caimei/shopImport/ReadVolume.java
  15. 8 2
      src/main/java/com/caimei365/manager/entity/caimei/shopImport/Remark.java
  16. 7 1
      src/main/java/com/caimei365/manager/entity/caimei/shopImport/Stage.java
  17. 8 2
      src/main/java/com/caimei365/manager/entity/caimei/shopImport/Summary.java
  18. 9 3
      src/main/java/com/caimei365/manager/entity/caimei/shopImport/Visits.java
  19. 1 1
      src/main/java/com/caimei365/manager/service/caimei/listener/StageListener.java
  20. 1 1
      src/main/java/com/caimei365/manager/service/caimei/user/CmMarketShopService.java
  21. 4 4
      src/main/java/com/caimei365/manager/service/caimei/user/impl/CmBehaviorRecordServiceImpl.java
  22. 352 15
      src/main/java/com/caimei365/manager/service/caimei/user/impl/CmMarketShopServiceImpl.java
  23. 78 0
      src/main/java/com/caimei365/manager/utils/ExtractCallback.java
  24. 28 33
      src/main/java/com/caimei365/manager/utils/FileUtil.java
  25. 2 2
      src/main/resources/mapper/CmBehaciorRecordDao.xml
  26. 281 102
      src/main/resources/mapper/user/CmMarketShopDao.xml

+ 9 - 3
pom.xml

@@ -137,10 +137,16 @@
             <artifactId>jsoup</artifactId>
             <artifactId>jsoup</artifactId>
             <version>1.9.2</version>
             <version>1.9.2</version>
         </dependency>
         </dependency>
+        <!--rar解压-->
         <dependency>
         <dependency>
-            <groupId>com.github.junrar</groupId>
-            <artifactId>junrar</artifactId>
-            <version>7.4.1</version>
+            <groupId>net.sf.sevenzipjbinding</groupId>
+            <artifactId>sevenzipjbinding</artifactId>
+            <version>16.02-2.01</version>
+        </dependency>
+        <dependency>
+            <groupId>net.sf.sevenzipjbinding</groupId>
+            <artifactId>sevenzipjbinding-all-platforms</artifactId>
+            <version>16.02-2.01</version>
         </dependency>
         </dependency>
 
 
         <dependency>
         <dependency>

+ 10 - 3
src/main/java/com/caimei365/manager/controller/caimei/user/CmMarketShopApi.java

@@ -116,6 +116,7 @@ public class CmMarketShopApi {
     /**
     /**
      * 保存报表数据
      * 保存报表数据
      * @param marketId
      * @param marketId
+     * @param id
      * @param reportDate
      * @param reportDate
      * @param reportName
      * @param reportName
      * @param filePath
      * @param filePath
@@ -123,7 +124,7 @@ public class CmMarketShopApi {
      * @throws IOException
      * @throws IOException
      */
      */
     @GetMapping("/saveReport")
     @GetMapping("/saveReport")
-    public ResponseJson saveReport(Integer marketId, String reportDate, String reportName, String filePath) throws IOException {
+    public ResponseJson saveReport(Integer marketId, Integer id, String reportDate, String reportName, String filePath) throws IOException {
         if (marketId == null) {
         if (marketId == null) {
             return ResponseJson.error(-1, "供应商营销Id不能为空", null);
             return ResponseJson.error(-1, "供应商营销Id不能为空", null);
         }
         }
@@ -136,14 +137,20 @@ public class CmMarketShopApi {
         if (StringUtils.isBlank(filePath) || StringUtils.isEmpty(filePath)) {
         if (StringUtils.isBlank(filePath) || StringUtils.isEmpty(filePath)) {
             return ResponseJson.error(-1, "报表路径不能为空", null);
             return ResponseJson.error(-1, "报表路径不能为空", null);
         }
         }
-        return marketShopService.saveReport(marketId, reportDate, reportName, filePath);
+        return marketShopService.saveReport(marketId, id, reportDate, reportName, filePath);
     }
     }
 
 
+    /**
+     * 报表数据预览
+     * @param id
+     * @return
+     */
+    @GetMapping("/preview")
     public ResponseJson<Map<String, Object>> preview(Integer id) {
     public ResponseJson<Map<String, Object>> preview(Integer id) {
         if (id == null) {
         if (id == null) {
             return ResponseJson.error(-1, "报表id不能为空", null);
             return ResponseJson.error(-1, "报表id不能为空", null);
         }
         }
-        return null;
+        return marketShopService.preview(id);
     }
     }
 
 
 }
 }

+ 3 - 3
src/main/java/com/caimei365/manager/dao/user/CmBehaviorRecordDao.java

@@ -2,7 +2,7 @@ package com.caimei365.manager.dao.user;
 
 
 import com.caimei365.manager.entity.caimei.CmBehaviorRecord;
 import com.caimei365.manager.entity.caimei.CmBehaviorRecord;
 import com.caimei365.manager.entity.caimei.CmPageType;
 import com.caimei365.manager.entity.caimei.CmPageType;
-import com.caimei365.manager.entity.caimei.RetuenEntity;
+import com.caimei365.manager.entity.caimei.ReturnEntity;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Param;
 
 
@@ -21,7 +21,7 @@ public interface CmBehaviorRecordDao {
      * @param keyword
      * @param keyword
      * @return
      * @return
      */
      */
-    List<RetuenEntity> getkeyword(@Param("keyword") String keyword);
+    List<ReturnEntity> getkeyword(@Param("keyword") String keyword);
 
 
     /**
     /**
      * 页面标签
      * 页面标签
@@ -60,7 +60,7 @@ public interface CmBehaviorRecordDao {
      * 标签库
      * 标签库
      * @return 返回
      * @return 返回
      */
      */
-    List<RetuenEntity> searchList();
+    List<ReturnEntity> searchList();
 
 
     /**
     /**
      * 供应商信息
      * 供应商信息

+ 117 - 1
src/main/java/com/caimei365/manager/dao/user/CmMarketShopDao.java

@@ -1,6 +1,7 @@
 package com.caimei365.manager.dao.user;
 package com.caimei365.manager.dao.user;
 
 
 import com.caimei365.manager.entity.caimei.CmShop;
 import com.caimei365.manager.entity.caimei.CmShop;
+import com.caimei365.manager.entity.caimei.ReturnEntity;
 import com.caimei365.manager.entity.caimei.shopImport.*;
 import com.caimei365.manager.entity.caimei.shopImport.*;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Param;
@@ -60,7 +61,7 @@ public interface CmMarketShopDao {
      * 阶段描述
      * 阶段描述
      * @param stage
      * @param stage
      */
      */
-    void insertMarketStaget(Stage stage);
+    void insertMarketStage(Stage stage);
 
 
     /**
     /**
      * 漏斗模型数据
      * 漏斗模型数据
@@ -122,6 +123,90 @@ public interface CmMarketShopDao {
      */
      */
     void insertMarketRemark(Remark remark);
     void insertMarketRemark(Remark remark);
 
 
+    /**
+     * 修改阶段信息
+     * @param marketReportId
+     * @param reportDate
+     */
+    void updateMarketStage(@Param("marketReportId") Integer marketReportId, @Param("reportDate") String reportDate);
+
+    /**
+     * 修改漏斗模型数据
+     * @param marketReportId
+     * @param reportDate
+     */
+    void updateMarketFunnelModel(@Param("marketReportId") Integer marketReportId, @Param("reportDate") String reportDate);
+
+    /**
+     * 修改推文数据
+     * @param marketReportId
+     * @param reportDate
+     */
+    void updateMarketArticleReadVolume(@Param("marketReportId") Integer marketReportId, @Param("reportDate") String reportDate);
+
+    /**
+     * 修改展现量
+     * @param marketReportId
+     * @param reportDate
+     */
+    void updateMarketImpressions(@Param("marketReportId") Integer marketReportId, @Param("reportDate") String reportDate);
+
+    /**
+     * 修改点击量
+     * @param marketReportId
+     * @param reportDate
+     */
+    void updateMarketReadVolume(@Param("marketReportId") Integer marketReportId, @Param("reportDate") String reportDate);
+
+    /**
+     * 修改SEO汇总数据
+     * @param marketReportId
+     * @param reportDate
+     */
+    void updateMarketSummary(@Param("marketReportId") Integer marketReportId, @Param("reportDate") String reportDate);
+
+    /**
+     * 修改访问量数据
+     * @param marketReportId
+     * @param reportDate
+     */
+    void updateMarketVisits(@Param("marketReportId") Integer marketReportId, @Param("reportDate") String reportDate);
+
+    /**
+     * 修改方可来源分布数据
+     * @param marketReportId
+     * @param reportDate
+     */
+    void updateMarketProportion(@Param("marketReportId") Integer marketReportId, @Param("reportDate") String reportDate);
+
+    /**
+     * 修改页面平均时长数据
+     * @param marketReportId
+     * @param reportDate
+     */
+    void updateMarketPageDuration(@Param("marketReportId") Integer marketReportId, @Param("reportDate") String reportDate);
+
+    /**
+     * 修改广告图点击量数据
+     * @param marketReportId
+     * @param reportDate
+     */
+    void updateMarketAdvertHits(@Param("marketReportId") Integer marketReportId, @Param("reportDate") String reportDate);
+
+    /**
+     * 修改咨询数量数据
+     * @param marketReportId
+     * @param reportDate
+     */
+    void updateMarketRemark(@Param("marketReportId") Integer marketReportId, @Param("reportDate") String reportDate);
+
+    /**
+     * 获取报表对应的供应商信息
+     * @param id
+     * @return
+     */
+    CmMarketShop getShopInfoById(@Param("id") Integer id);
+
     /**
     /**
      * 获取阶段描述
      * 获取阶段描述
      * @param marketReportId
      * @param marketReportId
@@ -198,4 +283,35 @@ public interface CmMarketShopDao {
      * @return
      * @return
      */
      */
     List<Remark> getMarketRemark(@Param("marketReportId") Integer marketReportId);
     List<Remark> getMarketRemark(@Param("marketReportId") Integer marketReportId);
+
+    /**
+     * 供应商包含的标签词
+     * @param shopId
+     * @return
+     */
+    List<String> getShopKeyword(@Param("shopId") Integer shopId);
+
+    /**
+     * 访问供应商相关用户所在地区
+     * @param accessDate
+     * @param labels
+     * @return
+     */
+    List<String> getRegion(@Param("accessDate") String accessDate, @Param("labels") List<String> labels);
+
+    /**
+     * 用户身份
+     * @param accessDate
+     * @param labels
+     * @return
+     */
+    List<ReturnEntity> getUserIdentity(@Param("accessDate") String accessDate, @Param("labels") List<String> labels);
+
+    /**
+     * 机构类型
+     * @param accessDate
+     * @param labels
+     * @return
+     */
+    List<ReturnEntity> getClubType(@Param("accessDate") String accessDate, @Param("labels") List<String> labels);
 }
 }

+ 40 - 0
src/main/java/com/caimei365/manager/entity/caimei/ReturnData.java

@@ -0,0 +1,40 @@
+package com.caimei365.manager.entity.caimei;
+
+import lombok.Data;
+
+import java.util.ArrayList;
+
+
+/**
+ * Description
+ *
+ * @author : hzg
+ * @date : 2023/12/21
+ */
+@Data
+public class ReturnData {
+    /**
+     * 名称
+     */
+    private String name;
+    /**
+     * 值
+     */
+    private Integer value;
+    /**
+     * seo图片地址
+     */
+    private String seo;
+    /**
+     * 名称集合
+     */
+    private ArrayList<String> names;
+    /**
+     * 值集合
+     */
+    private ArrayList<Integer> values;
+    /**
+     * 备份(第二个值)值集合
+     */
+    private ArrayList<Integer> backupsValues;
+}

+ 5 - 1
src/main/java/com/caimei365/manager/entity/caimei/RetuenEntity.java → src/main/java/com/caimei365/manager/entity/caimei/ReturnEntity.java

@@ -9,11 +9,15 @@ import lombok.Data;
  * @date : 2023/3/16
  * @date : 2023/3/16
  */
  */
 @Data
 @Data
-public class RetuenEntity {
+public class ReturnEntity {
     /**
     /**
      * key
      * key
      */
      */
     private String id;
     private String id;
+    /**
+     * 名称
+     */
+    private String name;
     /**
     /**
      * value
      * value
      */
      */

+ 8 - 2
src/main/java/com/caimei365/manager/entity/caimei/shopImport/AdvertHits.java

@@ -1,5 +1,6 @@
 package com.caimei365.manager.entity.caimei.shopImport;
 package com.caimei365.manager.entity.caimei.shopImport;
 
 
+import com.alibaba.excel.annotation.ExcelIgnore;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.annotation.ExcelProperty;
 import lombok.Data;
 import lombok.Data;
 
 
@@ -19,7 +20,7 @@ public class AdvertHits {
     /**
     /**
      * 日期
      * 日期
      */
      */
-    private String dateTime;
+    private String addTime;
     /**
     /**
      * 广告位置
      * 广告位置
      */
      */
@@ -39,5 +40,10 @@ public class AdvertHits {
      * 点击量
      * 点击量
      */
      */
     @ExcelProperty("点击量")
     @ExcelProperty("点击量")
-    private String hits;
+    private Integer hits;
+    /**
+     * 删除标记 0 未删除 1 已删除
+     */
+    @ExcelIgnore
+    private String delFlag;
 }
 }

+ 9 - 3
src/main/java/com/caimei365/manager/entity/caimei/shopImport/ArticleReadVolume.java

@@ -1,5 +1,6 @@
 package com.caimei365.manager.entity.caimei.shopImport;
 package com.caimei365.manager.entity.caimei.shopImport;
 
 
+import com.alibaba.excel.annotation.ExcelIgnore;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.annotation.ExcelProperty;
 import lombok.Data;
 import lombok.Data;
 
 
@@ -18,7 +19,7 @@ public class ArticleReadVolume {
     /**
     /**
      * 日期
      * 日期
      */
      */
-    private String dateTime;
+    private String addTime;
     /**
     /**
      * 发文主题
      * 发文主题
      */
      */
@@ -58,11 +59,16 @@ public class ArticleReadVolume {
      * 公众号阅读量
      * 公众号阅读量
      */
      */
     @ExcelProperty("总点击量")
     @ExcelProperty("总点击量")
-    private String wechatNumber;
+    private Integer wechatNumber;
     /**
     /**
      * 触达用户量
      * 触达用户量
      */
      */
     @ExcelProperty("总展现量")
     @ExcelProperty("总展现量")
-    private String touchNumber;
+    private Integer touchNumber;
+    /**
+     * 删除标记 0 未删除 1 已删除
+     */
+    @ExcelIgnore
+    private String delFlag;
 
 
 }
 }

+ 25 - 1
src/main/java/com/caimei365/manager/entity/caimei/shopImport/CmMarketShop.java

@@ -33,7 +33,7 @@ public class CmMarketShop {
     /**
     /**
      * 供应商名称
      * 供应商名称
      */
      */
-    private String shopName;
+    private String name;
     /**
     /**
      * 供应商联系人
      * 供应商联系人
      */
      */
@@ -50,4 +50,28 @@ public class CmMarketShop {
      * 最近报表时间
      * 最近报表时间
      */
      */
     private String recentlyTime;
     private String recentlyTime;
+    /**
+     * 报表名称
+     */
+    private String chartTitle;
+    /**
+     * 展现量
+     */
+    private Integer impressions;
+    /**
+     * 点击量
+     */
+    private Integer hits;
+    /**
+     * 访问量
+     */
+    private Integer visits;
+    /**
+     * 咨询量
+     */
+    private Integer consultation;
+    /**
+     * 报备&成交量
+     */
+    private Integer report;
 }
 }

+ 12 - 6
src/main/java/com/caimei365/manager/entity/caimei/shopImport/FunnelModel.java

@@ -1,5 +1,6 @@
 package com.caimei365.manager.entity.caimei.shopImport;
 package com.caimei365.manager.entity.caimei.shopImport;
 
 
+import com.alibaba.excel.annotation.ExcelIgnore;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.annotation.ExcelProperty;
 import lombok.Data;
 import lombok.Data;
 
 
@@ -18,7 +19,7 @@ public class FunnelModel {
     /**
     /**
      * 日期
      * 日期
      */
      */
-    private String dateTime;
+    private String addTime;
     /**
     /**
      * 是否可见 1 可见 2 不可见
      * 是否可见 1 可见 2 不可见
      */
      */
@@ -27,25 +28,30 @@ public class FunnelModel {
      * 展现量
      * 展现量
      */
      */
     @ExcelProperty("展现量")
     @ExcelProperty("展现量")
-    private String impressions;
+    private Integer impressions;
     /**
     /**
      * 点击量
      * 点击量
      */
      */
     @ExcelProperty("点击量")
     @ExcelProperty("点击量")
-    private String hits;
+    private Integer hits;
     /**
     /**
      * 访问量
      * 访问量
      */
      */
     @ExcelProperty("访问量")
     @ExcelProperty("访问量")
-    private String visits;
+    private Integer visits;
     /**
     /**
      * 咨询量
      * 咨询量
      */
      */
     @ExcelProperty("咨询量")
     @ExcelProperty("咨询量")
-    private String consultation;
+    private Integer consultation;
     /**
     /**
      * 报备&成交量
      * 报备&成交量
      */
      */
     @ExcelProperty("报备&成交量")
     @ExcelProperty("报备&成交量")
-    private String report;
+    private Integer report;
+    /**
+     * 删除标记 0 未删除 1 已删除
+     */
+    @ExcelIgnore
+    private Integer delFlag;
 }
 }

+ 11 - 5
src/main/java/com/caimei365/manager/entity/caimei/shopImport/Impressions.java

@@ -1,5 +1,6 @@
 package com.caimei365.manager.entity.caimei.shopImport;
 package com.caimei365.manager.entity.caimei.shopImport;
 
 
+import com.alibaba.excel.annotation.ExcelIgnore;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.annotation.ExcelProperty;
 import lombok.Data;
 import lombok.Data;
 
 
@@ -19,25 +20,30 @@ public class Impressions {
     /**
     /**
      * 日期
      * 日期
      */
      */
-    private String dateTime;
+    private String addTime;
     /**
     /**
      * 公众号
      * 公众号
      */
      */
     @ExcelProperty("公众号")
     @ExcelProperty("公众号")
-    private String generalNumber;
+    private Integer generalNumber;
     /**
     /**
      * 微博
      * 微博
      */
      */
     @ExcelProperty("微博")
     @ExcelProperty("微博")
-    private String microBlog;
+    private Integer microBlog;
     /**
     /**
      * 小红书
      * 小红书
      */
      */
     @ExcelProperty("小红书")
     @ExcelProperty("小红书")
-    private String redBookNumber;
+    private Integer redBookNumber;
     /**
     /**
      * 其它自媒体渠道
      * 其它自媒体渠道
      */
      */
     @ExcelProperty("其它自媒体渠道")
     @ExcelProperty("其它自媒体渠道")
-    private String otherNumber;
+    private Integer otherNumber;
+    /**
+     * 删除标记 0 未删除 1 已删除
+     */
+    @ExcelIgnore
+    private String delFlag;
 }
 }

+ 8 - 2
src/main/java/com/caimei365/manager/entity/caimei/shopImport/PageDuration.java

@@ -1,5 +1,6 @@
 package com.caimei365.manager.entity.caimei.shopImport;
 package com.caimei365.manager.entity.caimei.shopImport;
 
 
+import com.alibaba.excel.annotation.ExcelIgnore;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.annotation.ExcelProperty;
 import lombok.Data;
 import lombok.Data;
 
 
@@ -18,7 +19,7 @@ public class PageDuration {
     /**
     /**
      * 日期
      * 日期
      */
      */
-    private String dateTime;
+    private String addTime;
     /**
     /**
      * 页面类型
      * 页面类型
      */
      */
@@ -28,5 +29,10 @@ public class PageDuration {
      * 平均停留时间
      * 平均停留时间
      */
      */
     @ExcelProperty("平均停留时间")
     @ExcelProperty("平均停留时间")
-    private String accessDuration;
+    private Integer accessDuration;
+    /**
+     * 删除标记 0 未删除 1 已删除
+     */
+    @ExcelIgnore
+    private String delFlag;
 }
 }

+ 11 - 5
src/main/java/com/caimei365/manager/entity/caimei/shopImport/Proportion.java

@@ -1,5 +1,6 @@
 package com.caimei365.manager.entity.caimei.shopImport;
 package com.caimei365.manager.entity.caimei.shopImport;
 
 
+import com.alibaba.excel.annotation.ExcelIgnore;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.annotation.ExcelProperty;
 import lombok.Data;
 import lombok.Data;
 
 
@@ -18,25 +19,30 @@ public class Proportion {
     /**
     /**
      * 日期
      * 日期
      */
      */
-    private String dateTime;
+    private String addTime;
     /**
     /**
      * 搜索引擎
      * 搜索引擎
      */
      */
     @ExcelProperty("搜索引擎")
     @ExcelProperty("搜索引擎")
-    private String search;
+    private Integer search;
     /**
     /**
      * 微信平台
      * 微信平台
      */
      */
     @ExcelProperty("微信平台")
     @ExcelProperty("微信平台")
-    private String general;
+    private Integer general;
     /**
     /**
      * 微博
      * 微博
      */
      */
     @ExcelProperty("微博")
     @ExcelProperty("微博")
-    private String microBlog;
+    private Integer microBlog;
     /**
     /**
      * 直接访问
      * 直接访问
      */
      */
     @ExcelProperty("直接访问")
     @ExcelProperty("直接访问")
-    private String directAccess;
+    private Integer directAccess;
+    /**
+     * 删除标记 0 未删除 1 已删除
+     */
+    @ExcelIgnore
+    private String delFlag;
 }
 }

+ 11 - 5
src/main/java/com/caimei365/manager/entity/caimei/shopImport/ReadVolume.java

@@ -1,5 +1,6 @@
 package com.caimei365.manager.entity.caimei.shopImport;
 package com.caimei365.manager.entity.caimei.shopImport;
 
 
+import com.alibaba.excel.annotation.ExcelIgnore;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.annotation.ExcelProperty;
 import lombok.Data;
 import lombok.Data;
 
 
@@ -19,25 +20,30 @@ public class ReadVolume {
     /**
     /**
      * 日期
      * 日期
      */
      */
-    private String dateTime;
+    private String addTime;
     /**
     /**
      * 公众号
      * 公众号
      */
      */
     @ExcelProperty("公众号")
     @ExcelProperty("公众号")
-    private String generalNumber;
+    private Integer generalNumber;
     /**
     /**
      * 微博
      * 微博
      */
      */
     @ExcelProperty("微博")
     @ExcelProperty("微博")
-    private String microBlog;
+    private Integer microBlog;
     /**
     /**
      * 小红书
      * 小红书
      */
      */
     @ExcelProperty("小红书")
     @ExcelProperty("小红书")
-    private String redBookNumber;
+    private Integer redBookNumber;
     /**
     /**
      * 其它自媒体渠道
      * 其它自媒体渠道
      */
      */
     @ExcelProperty("其它自媒体渠道")
     @ExcelProperty("其它自媒体渠道")
-    private String otherNumber;
+    private Integer otherNumber;
+    /**
+     * 删除标记 0 未删除 1 已删除
+     */
+    @ExcelIgnore
+    private String delFlag;
 }
 }

+ 8 - 2
src/main/java/com/caimei365/manager/entity/caimei/shopImport/Remark.java

@@ -1,5 +1,6 @@
 package com.caimei365.manager.entity.caimei.shopImport;
 package com.caimei365.manager.entity.caimei.shopImport;
 
 
+import com.alibaba.excel.annotation.ExcelIgnore;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.annotation.ExcelProperty;
 import lombok.Data;
 import lombok.Data;
 
 
@@ -18,10 +19,15 @@ public class Remark {
     /**
     /**
      * 日期
      * 日期
      */
      */
-    private String dateTime;
+    private String addTime;
     /**
     /**
      * 咨询数量
      * 咨询数量
      */
      */
     @ExcelProperty("咨询数量")
     @ExcelProperty("咨询数量")
-    private String remarkNumber;
+    private Integer remarkNumber;
+    /**
+     * 删除标记 0 未删除 1 已删除
+     */
+    @ExcelIgnore
+    private String delFlag;
 }
 }

+ 7 - 1
src/main/java/com/caimei365/manager/entity/caimei/shopImport/Stage.java

@@ -1,5 +1,6 @@
 package com.caimei365.manager.entity.caimei.shopImport;
 package com.caimei365.manager.entity.caimei.shopImport;
 
 
+import com.alibaba.excel.annotation.ExcelIgnore;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.annotation.ExcelProperty;
 import lombok.Data;
 import lombok.Data;
 
 
@@ -18,7 +19,7 @@ public class Stage {
     /**
     /**
      * 添加时间
      * 添加时间
      */
      */
-    private String dateTime;
+    private String addTime;
     /**
     /**
      * 阶段
      * 阶段
      */
      */
@@ -29,4 +30,9 @@ public class Stage {
      */
      */
     @ExcelProperty("主题")
     @ExcelProperty("主题")
     private String theme;
     private String theme;
+    /**
+     * 删除标记 0 未删除 1 已删除
+     */
+    @ExcelIgnore
+    private String delFlag;
 }
 }

+ 8 - 2
src/main/java/com/caimei365/manager/entity/caimei/shopImport/Summary.java

@@ -1,5 +1,6 @@
 package com.caimei365.manager.entity.caimei.shopImport;
 package com.caimei365.manager.entity.caimei.shopImport;
 
 
+import com.alibaba.excel.annotation.ExcelIgnore;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.annotation.ExcelProperty;
 import lombok.Data;
 import lombok.Data;
 
 
@@ -18,7 +19,7 @@ public class Summary {
     /**
     /**
      * 日期
      * 日期
      */
      */
-    private String dateTime;
+    private String addTime;
     /**
     /**
      * 关键词
      * 关键词
      */
      */
@@ -33,5 +34,10 @@ public class Summary {
      * 占比
      * 占比
      */
      */
     @ExcelProperty("月度搜索量")
     @ExcelProperty("月度搜索量")
-    private String searchVolume;
+    private Integer searchVolume;
+    /**
+     * 删除标记 0 未删除 1 已删除
+     */
+    @ExcelIgnore
+    private String delFlag;
 }
 }

+ 9 - 3
src/main/java/com/caimei365/manager/entity/caimei/shopImport/Visits.java

@@ -1,5 +1,6 @@
 package com.caimei365.manager.entity.caimei.shopImport;
 package com.caimei365.manager.entity.caimei.shopImport;
 
 
+import com.alibaba.excel.annotation.ExcelIgnore;
 import com.alibaba.excel.annotation.ExcelProperty;
 import com.alibaba.excel.annotation.ExcelProperty;
 import lombok.Data;
 import lombok.Data;
 
 
@@ -19,15 +20,20 @@ public class Visits {
     /**
     /**
      * 日期
      * 日期
      */
      */
-    private String dateTime;
+    private String addTime;
     /**
     /**
      * 机构访问量
      * 机构访问量
      */
      */
     @ExcelProperty("机构访问量")
     @ExcelProperty("机构访问量")
-    private String clubNumber;
+    private Integer clubNumber;
     /**
     /**
      * 游客访问量
      * 游客访问量
      */
      */
     @ExcelProperty("游客访问量")
     @ExcelProperty("游客访问量")
-    private String touristNumber;
+    private Integer touristNumber;
+    /**
+     * 删除标记 0 未删除 1 已删除
+     */
+    @ExcelIgnore
+    private String delFlag;
 }
 }

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

@@ -57,7 +57,7 @@ public class StageListener extends AnalysisEventListener<Stage> {
     public void saveData(List<Stage> dataList) {
     public void saveData(List<Stage> dataList) {
         dataList.forEach( stage -> {
         dataList.forEach( stage -> {
             stage.setMarketReportId(marketReportId);
             stage.setMarketReportId(marketReportId);
-            marketShopDao.insertMarketStaget(stage);
+            marketShopDao.insertMarketStage(stage);
         });
         });
     }
     }
 }
 }

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

@@ -72,7 +72,7 @@ public interface CmMarketShopService {
      * @param filePath
      * @param filePath
      * @return
      * @return
      */
      */
-    ResponseJson saveReport(Integer marketId, String reportDate, String reportName, String filePath) throws IOException;
+    ResponseJson saveReport(Integer marketId, Integer id, String reportDate, String reportName, String filePath) throws IOException;
 
 
     /**
     /**
      * 报表数据预览
      * 报表数据预览

+ 4 - 4
src/main/java/com/caimei365/manager/service/caimei/user/impl/CmBehaviorRecordServiceImpl.java

@@ -7,7 +7,7 @@ import com.caimei365.manager.entity.PaginationVo;
 import com.caimei365.manager.entity.ResponseJson;
 import com.caimei365.manager.entity.ResponseJson;
 import com.caimei365.manager.entity.caimei.CmBehaviorRecord;
 import com.caimei365.manager.entity.caimei.CmBehaviorRecord;
 import com.caimei365.manager.entity.caimei.CmPageType;
 import com.caimei365.manager.entity.caimei.CmPageType;
-import com.caimei365.manager.entity.caimei.RetuenEntity;
+import com.caimei365.manager.entity.caimei.ReturnEntity;
 import com.caimei365.manager.service.caimei.user.CmBehaviorRecordService;
 import com.caimei365.manager.service.caimei.user.CmBehaviorRecordService;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageHelper;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
@@ -174,7 +174,7 @@ public class CmBehaviorRecordServiceImpl implements CmBehaviorRecordService {
         // 供应商信息
         // 供应商信息
         List<CmBehaviorRecord> shopNameList = cmBehaviorRecordDao.behaviorShopNameList();
         List<CmBehaviorRecord> shopNameList = cmBehaviorRecordDao.behaviorShopNameList();
         // 标签总结
         // 标签总结
-        List<RetuenEntity> label = new ArrayList<>();
+        List<ReturnEntity> label = new ArrayList<>();
         AtomicReference<Integer> returnId = new AtomicReference<>(0);
         AtomicReference<Integer> returnId = new AtomicReference<>(0);
         // 计算访问时长,填入信息
         // 计算访问时长,填入信息
         recordList.forEach(r -> {
         recordList.forEach(r -> {
@@ -224,13 +224,13 @@ public class CmBehaviorRecordServiceImpl implements CmBehaviorRecordService {
             }
             }
             if ("6".equals(r.getPageType()) || "8".equals(r.getPageType()) || "9".equals(r.getPageType()) || "11".equals(r.getPageType())) {
             if ("6".equals(r.getPageType()) || "8".equals(r.getPageType()) || "9".equals(r.getPageType()) || "11".equals(r.getPageType())) {
                 if(StringUtils.isNotBlank(r.getPageLabel()) && StringUtils.isNotEmpty(r.getPageLabel()) && !label.contains(r.getPageLabel())) {
                 if(StringUtils.isNotBlank(r.getPageLabel()) && StringUtils.isNotEmpty(r.getPageLabel()) && !label.contains(r.getPageLabel())) {
-                    RetuenEntity retuenEntity = new RetuenEntity();
+                    ReturnEntity retuenEntity = new ReturnEntity();
                     if (r.getPageLabel().contains(",")) {
                     if (r.getPageLabel().contains(",")) {
                         log.info("contains");
                         log.info("contains");
                         String[] split = r.getPageLabel().split(",");
                         String[] split = r.getPageLabel().split(",");
                         for (String str : split) {
                         for (String str : split) {
                             if (StringUtils.isNotBlank(str) &&  !label.contains(str)) {
                             if (StringUtils.isNotBlank(str) &&  !label.contains(str)) {
-                                retuenEntity = new RetuenEntity();
+                                retuenEntity = new ReturnEntity();
                                 returnId.updateAndGet(v -> v + 1);
                                 returnId.updateAndGet(v -> v + 1);
                                 retuenEntity.setId(returnId.get().toString());
                                 retuenEntity.setId(returnId.get().toString());
                                 retuenEntity.setValue(str);
                                 retuenEntity.setValue(str);

+ 352 - 15
src/main/java/com/caimei365/manager/service/caimei/user/impl/CmMarketShopServiceImpl.java

@@ -3,10 +3,14 @@ package com.caimei365.manager.service.caimei.user.impl;
 import cn.hutool.core.util.ZipUtil;
 import cn.hutool.core.util.ZipUtil;
 import com.alibaba.excel.EasyExcel;
 import com.alibaba.excel.EasyExcel;
 import com.alibaba.excel.support.ExcelTypeEnum;
 import com.alibaba.excel.support.ExcelTypeEnum;
+import com.caimei.utils.MathUtil;
+import com.caimei.utils.StringUtils;
 import com.caimei365.manager.dao.user.CmMarketShopDao;
 import com.caimei365.manager.dao.user.CmMarketShopDao;
 import com.caimei365.manager.entity.PaginationVo;
 import com.caimei365.manager.entity.PaginationVo;
 import com.caimei365.manager.entity.ResponseJson;
 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.ReturnEntity;
 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;
@@ -23,10 +27,10 @@ import org.springframework.web.multipart.commons.CommonsMultipartFile;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
 import java.io.*;
 import java.io.*;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.stream.Collectors;
 
 
 /**
 /**
  * Description
  * Description
@@ -39,7 +43,7 @@ import java.util.Map;
 public class CmMarketShopServiceImpl implements CmMarketShopService {
 public class CmMarketShopServiceImpl implements CmMarketShopService {
 
 
     private final static String ZIP_FILE = "zip";
     private final static String ZIP_FILE = "zip";
-    private final static String RAR_FILE = "rar";
+    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 = "/mnt/newdatadrive/data/runtime/jar-instance/manager-api/extract";
     private final static String extract = "E:\\Users\\Desktop\\extract";
     private final static String extract = "E:\\Users\\Desktop\\extract";
@@ -109,7 +113,20 @@ public class CmMarketShopServiceImpl implements CmMarketShopService {
      */
      */
     @Override
     @Override
     public ResponseJson updateMarketReport(Integer id) {
     public ResponseJson updateMarketReport(Integer id) {
+        // 删除数据报表
         marketShopDao.updateMarketReport(id);
         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);
         return ResponseJson.success();
         return ResponseJson.success();
     }
     }
 
 
@@ -126,6 +143,7 @@ public class CmMarketShopServiceImpl implements CmMarketShopService {
 
 
         //不存在则创建
         //不存在则创建
         File packFile = new File(extract);
         File packFile = new File(extract);
+        packFile.delete();
         if (!packFile.exists()) {
         if (!packFile.exists()) {
             boolean mkdirs = packFile.mkdirs();
             boolean mkdirs = packFile.mkdirs();
         }
         }
@@ -160,7 +178,7 @@ public class CmMarketShopServiceImpl implements CmMarketShopService {
             FileUtil.unZip(packFilePath, extract);
             FileUtil.unZip(packFilePath, extract);
         } else {
         } else {
             //rar压缩包
             //rar压缩包
-            FileUtil.unPackRar(file, extract);
+            FileUtil.unPackRar(file, filename, extract);
         }
         }
         //获取压缩包名称
         //获取压缩包名称
         filename = filename.substring(0, filename.lastIndexOf("."));
         filename = filename.substring(0, filename.lastIndexOf("."));
@@ -169,7 +187,12 @@ public class CmMarketShopServiceImpl implements CmMarketShopService {
         if (file.exists()) {
         if (file.exists()) {
             file.delete();
             file.delete();
         }
         }
-        String filePath = extract + "/" + filename;
+        String filePath = "";
+        if (isZipPack) {
+            filePath = extract + "/" + filename;
+        } else {
+            filePath = extract;
+        }
         return ResponseJson.success(filePath);
         return ResponseJson.success(filePath);
     }
     }
 
 
@@ -183,14 +206,38 @@ public class CmMarketShopServiceImpl implements CmMarketShopService {
      * @return
      * @return
      */
      */
     @Override
     @Override
-    public ResponseJson saveReport(Integer marketId, String reportDate, String reportName, String filePath) throws IOException {
-        CmMarketReport marketReport = new CmMarketReport();
-        marketReport.setMarketId(marketId);
-        marketReport.setReportDate(reportDate);
-        marketReport.setReportName(reportName);
-        marketShopDao.insertMarketReport(marketReport);
-        // 读取文件,处理数据
-        readFile(marketReport.getId(), filePath);
+    public ResponseJson saveReport(Integer marketId, Integer id, String reportDate, String reportName, String filePath) throws IOException {
+        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM");
+        try {
+            String reportTime = dateFormat.format(dateFormat.parse(reportDate));
+            if (id == null) {
+                CmMarketReport marketReport = new CmMarketReport();
+                marketReport.setMarketId(marketId);
+                marketReport.setReportDate(reportTime);
+                marketReport.setReportName(reportName);
+                marketShopDao.insertMarketReport(marketReport);
+                // 读取文件,处理数据
+                readFile(marketReport.getId(), filePath);
+            } 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);
+                // 读取文件,处理数据
+                readFile(id, filePath);
+            }
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+
         return ResponseJson.success();
         return ResponseJson.success();
     }
     }
 
 
@@ -203,7 +250,297 @@ public class CmMarketShopServiceImpl implements CmMarketShopService {
     @Override
     @Override
     public ResponseJson<Map<String, Object>> preview(Integer id) {
     public ResponseJson<Map<String, Object>> preview(Integer id) {
         Map<String, Object> map = new HashMap<>();
         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);
         return ResponseJson.success(map);
     }
     }
 
 

+ 78 - 0
src/main/java/com/caimei365/manager/utils/ExtractCallback.java

@@ -0,0 +1,78 @@
+package com.caimei365.manager.utils;
+
+import lombok.extern.slf4j.Slf4j;
+import net.sf.sevenzipjbinding.*;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+/**
+ * Description
+ *
+ * @author : hzg
+ * @date : 2023/12/20
+ */
+@Slf4j
+public class ExtractCallback implements IArchiveExtractCallback {
+    private final IInArchive inArchive;
+    private final String extractPath;
+    public ExtractCallback(IInArchive inArchive, String extractPath) {
+        this.inArchive = inArchive;
+        if (!extractPath.endsWith("/") && !extractPath.endsWith("\\")) {
+            extractPath += File.separator;
+        }
+        this.extractPath = extractPath;
+    }
+
+    @Override
+    public void setTotal(long total) {
+
+    }
+
+    @Override
+    public void setCompleted(long complete) {
+
+    }
+
+    @Override
+    public ISequentialOutStream getStream(int index, ExtractAskMode extractAskMode) throws SevenZipException {
+        return data -> {
+            String filePath = inArchive.getStringProperty(index, PropID.PATH);
+            FileOutputStream fos = null;
+            try {
+                File path = new File(extractPath + filePath);
+                if(!path.getParentFile().exists()){
+                    path.getParentFile().mkdirs();
+                }
+
+                if(!path.exists()){
+                    path.createNewFile();
+                }
+                fos = new FileOutputStream(path, true);
+                fos.write(data);
+            } catch (IOException e) {
+                log.info("IOException while extracting " + filePath);
+            } finally{
+                try {
+                    if(fos != null){
+                        fos.flush();
+                        fos.close();
+                    }
+                } catch (IOException e) {
+                    log.error("Could not close FileOutputStream", e);
+                }
+            }
+            return data.length;
+        };
+    }
+
+    @Override
+    public void prepareOperation(ExtractAskMode extractAskMode) {
+
+    }
+
+    @Override
+    public void setOperationResult(ExtractOperationResult extractOperationResult) {
+    }
+}

+ 28 - 33
src/main/java/com/caimei365/manager/utils/FileUtil.java

@@ -1,9 +1,12 @@
 package com.caimei365.manager.utils;
 package com.caimei365.manager.utils;
 
 
-import com.github.junrar.Archive;
-import com.github.junrar.rarfile.FileHeader;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
 import net.lingala.zip4j.core.ZipFile;
 import net.lingala.zip4j.core.ZipFile;
+import net.sf.sevenzipjbinding.ArchiveFormat;
+import net.sf.sevenzipjbinding.IInArchive;
+import net.sf.sevenzipjbinding.SevenZip;
+import net.sf.sevenzipjbinding.SevenZipException;
+import net.sf.sevenzipjbinding.impl.RandomAccessFileInStream;
 import org.apache.commons.fileupload.disk.DiskFileItem;
 import org.apache.commons.fileupload.disk.DiskFileItem;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.io.IOUtils;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartFile;
@@ -93,42 +96,34 @@ public class FileUtil {
     }
     }
 
 
     /**
     /**
-     * rar文件解压(不支持有密码的压缩包)
+     * rar文件解压
      *
      *
      * @param rarFile  rar压缩包
      * @param rarFile  rar压缩包
+     * @param rarFile  解压保存路径下属名称
      * @param destPath 解压保存路径
      * @param destPath 解压保存路径
      */
      */
-    public static void unPackRar(File rarFile, String destPath) {
-        try (Archive archive = new Archive(rarFile)) {
-            if (null != archive) {
-                FileHeader fileHeader = archive.nextFileHeader();
-                File file = null;
-                while (null != fileHeader) {
-                    // 防止文件名中文乱码问题的处理
-                    String fileName = fileHeader.getFileName().isEmpty() ? fileHeader.getFileNameString() : fileHeader.getFileName();
-                    if (fileHeader.isDirectory()) {
-                        //是文件夹
-                        file = new File(destPath + File.separator + fileName);
-                        file.mkdirs();
-                    } else {
-                        //不是文件夹
-                        file = new File(destPath + File.separator + fileName.trim());
-                        if (!file.exists()) {
-                            if (!file.getParentFile().exists()) {
-                                // 相对路径可能多级,可能需要创建父目录.
-                                file.getParentFile().mkdirs();
-                            }
-                            file.createNewFile();
-                        }
-                        FileOutputStream os = new FileOutputStream(file);
-                        archive.extractFile(fileHeader, os);
-                        os.close();
-                    }
-                    fileHeader = archive.nextFileHeader();
-                }
+    public static void unPackRar(File rarFile, String filename, String destPath) {
+        try {
+            // f -  压缩文件
+            RandomAccessFile randomAccessFile = new RandomAccessFile(rarFile.getAbsolutePath(), "r");
+            IInArchive archive = SevenZip.openInArchive(ArchiveFormat.RAR5,  new RandomAccessFileInStream(randomAccessFile));
+            // 解压文件路径
+            File zdir = new File(destPath);
+            if (!zdir.exists() || !zdir.isDirectory()) {
+                zdir.mkdir();
             }
             }
-        } catch (Exception e) {
-            log.error("解压失败:", e.getMessage(), e);
+
+            int[] in = new int[archive.getNumberOfItems()];
+            for(int i=0;i<in.length;i++){
+                in[i] = i;
+            }
+            archive.extract(in, false, new ExtractCallback(archive, zdir.getAbsolutePath()));
+            archive.close();
+            randomAccessFile.close();
+        } catch (FileNotFoundException | SevenZipException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
         }
         }
     }
     }
 
 

+ 2 - 2
src/main/resources/mapper/CmBehaciorRecordDao.xml

@@ -13,7 +13,7 @@
         b.accessDate
         b.accessDate
     </sql>
     </sql>
 
 
-    <select id="getkeyword" resultType="com.caimei365.manager.entity.caimei.RetuenEntity">
+    <select id="getkeyword" resultType="com.caimei365.manager.entity.caimei.ReturnEntity">
         select
         select
             id,
             id,
             keyword as value
             keyword as value
@@ -218,7 +218,7 @@
         </where>
         </where>
         ORDER BY accessTime DESC
         ORDER BY accessTime DESC
     </select>
     </select>
-    <select id="searchList" resultType="com.caimei365.manager.entity.caimei.RetuenEntity">
+    <select id="searchList" resultType="com.caimei365.manager.entity.caimei.ReturnEntity">
         SELECT cusf.id , cusf.keyword AS VALUE
         SELECT cusf.id , cusf.keyword AS VALUE
         FROM cm_user_search_frequency cusf
         FROM cm_user_search_frequency cusf
          LEFT JOIN cm_shop_label csl ON csl.keywordId = cusf.id
          LEFT JOIN cm_shop_label csl ON csl.keywordId = cusf.id

+ 281 - 102
src/main/resources/mapper/user/CmMarketShopDao.xml

@@ -10,13 +10,13 @@
 
 
     <select id="getMarketReport" resultType="com.caimei365.manager.entity.caimei.shopImport.CmMarketReport">
     <select id="getMarketReport" resultType="com.caimei365.manager.entity.caimei.shopImport.CmMarketReport">
         SELECT
         SELECT
-            id,
-            marketId,
-            reportDate,
-            reportName,
-            visible,
-            addTime,
-            delFlag
+        id,
+        marketId,
+        reportDate,
+        reportName,
+        visible,
+        addTime,
+        delFlag
         FROM cm_market_report
         FROM cm_market_report
         <where>
         <where>
             marketId = #{marketId} AND delFlag = 0
             marketId = #{marketId} AND delFlag = 0
@@ -24,19 +24,20 @@
                 AND reportName LIKE concat('%', #{reportName}, '%')
                 AND reportName LIKE concat('%', #{reportName}, '%')
             </if>
             </if>
         </where>
         </where>
+        order by addTime desc
     </select>
     </select>
 
 
     <select id="getMarketReportById" resultType="com.caimei365.manager.entity.caimei.shopImport.CmMarketReport">
     <select id="getMarketReportById" resultType="com.caimei365.manager.entity.caimei.shopImport.CmMarketReport">
-        SELECT
-        id,
-        marketId,
-        reportDate,
-        reportName,
-        visible,
-        addTime,
-        delFlag
+        SELECT id,
+               marketId,
+               reportDate,
+               reportName,
+               visible,
+               addTime,
+               delFlag
         FROM cm_market_report
         FROM cm_market_report
-        where id = #{id} AND delFlag = 0
+        where id = #{id}
+          AND delFlag = 0
     </select>
     </select>
 
 
     <update id="updateMarketReportVisible">
     <update id="updateMarketReportVisible">
@@ -56,176 +57,354 @@
         values (#{marketId}, #{reportDate}, #{reportName}, 1, now(), 0)
         values (#{marketId}, #{reportDate}, #{reportName}, 1, now(), 0)
     </insert>
     </insert>
 
 
-    <insert id="insertMarketStaget">
-        insert into cm_market_staget (marketReportId, stage, theme, addTime)
-        values (#{marketReportId}, #{stage}, #{theme}, now())
+    <insert id="insertMarketStage">
+        insert into cm_market_stage (marketReportId, stage, theme, addTime, delFlag)
+        values (#{marketReportId}, #{stage}, #{theme}, now(), 0)
     </insert>
     </insert>
 
 
     <insert id="insertMarketFunnelModel">
     <insert id="insertMarketFunnelModel">
-        insert into cm_market_funnelModel (marketReportId, impressions, hits, visits, consultation, report, addTime)
-        values (#{marketReportId}, #{impressions}, #{hits}, #{visits}, #{consultation}, #{report}, now())
+        insert into cm_market_funnelModel (marketReportId, impressions, hits, visits, consultation, report, addTime,
+                                           delFlag)
+        values (#{marketReportId}, #{impressions}, #{hits}, #{visits}, #{consultation}, #{report}, now(), 0)
     </insert>
     </insert>
 
 
     <insert id="insertMarketArticleReadVolume">
     <insert id="insertMarketArticleReadVolume">
-        insert into cm_market_articleReadVolume (marketReportId, title, link, titleReferred, type, keyword, channel, touchNumber, wechatNumber, addTime)
-        values (#{marketReportId}, #{title}, #{link}, #{titleReferred}, #{type}, #{keyword}, #{channel}, #{touchNumber}, #{wechatNumber}, now())
+        insert into cm_market_articleReadVolume (marketReportId, title, link, titleReferred, type, keyword, channel,
+                                                 touchNumber, wechatNumber, addTime, delFlag)
+        values (#{marketReportId}, #{title}, #{link}, #{titleReferred}, #{type}, #{keyword}, #{channel}, #{touchNumber},
+                #{wechatNumber}, now(), 0)
     </insert>
     </insert>
 
 
     <insert id="insertMarketImpressions">
     <insert id="insertMarketImpressions">
-        insert into cm_market_impressions (marketReportId, generalNumber, microBlog, redBookNumber, otherNumber, addTime)
-        values (#{marketReportId}, #{generalNumber}, #{microBlog}, #{redBookNumber}, #{otherNumber}, now())
+        insert into cm_market_impressions (marketReportId, generalNumber, microBlog, redBookNumber, otherNumber,
+                                           addTime, delFlag)
+        values (#{marketReportId}, #{generalNumber}, #{microBlog}, #{redBookNumber}, #{otherNumber}, now(), 0)
     </insert>
     </insert>
 
 
     <insert id="insertMarketReadVolume">
     <insert id="insertMarketReadVolume">
-        insert into cm_market_readVolume (marketReportId, generalNumber, microBlog, redBookNumber, otherNumber, addTime)
-        values (#{marketReportId}, #{generalNumber}, #{microBlog}, #{redBookNumber}, #{otherNumber}, now())
+        insert into cm_market_readVolume (marketReportId, generalNumber, microBlog, redBookNumber, otherNumber, addTime,
+                                          delFlag)
+        values (#{marketReportId}, #{generalNumber}, #{microBlog}, #{redBookNumber}, #{otherNumber}, now(), 0)
     </insert>
     </insert>
 
 
     <insert id="insertMarketSummary">
     <insert id="insertMarketSummary">
-        insert into cm_market_summary (marketReportId, keyword, seoRanking, searchVolume, addTime)
-        values (#{marketReportId}, #{keyword}, #{seoRanking}, #{searchVolume}, now())
+        insert into cm_market_summary (marketReportId, keyword, seoRanking, searchVolume, addTime, delFlag)
+        values (#{marketReportId}, #{keyword}, #{seoRanking}, #{searchVolume}, now(), 0)
     </insert>
     </insert>
 
 
     <insert id="insertMarketVisits">
     <insert id="insertMarketVisits">
-        insert into cm_market_visits (marketReportId, clubNumber, touristNumber, addTime)
-        values (#{marketReportId}, #{clubNumber}, #{touristNumber}, now())
+        insert into cm_market_visits (marketReportId, clubNumber, touristNumber, addTime, delFlag)
+        values (#{marketReportId}, #{clubNumber}, #{touristNumber}, now(), 0)
     </insert>
     </insert>
 
 
     <insert id="insertMarketProportion">
     <insert id="insertMarketProportion">
-        insert into cm_market_proportion (marketReportId, search, general, microBlog, directAccess, addTime)
-        values (#{marketReportId}, #{search}, #{general}, #{microBlog}, #{directAccess}, now())
+        insert into cm_market_proportion (marketReportId, search, general, microBlog, directAccess, addTime, delFlag)
+        values (#{marketReportId}, #{search}, #{general}, #{microBlog}, #{directAccess}, now(), 0)
     </insert>
     </insert>
 
 
     <insert id="insertMarketPageDuration">
     <insert id="insertMarketPageDuration">
-        insert into cm_market_pageDuration (marketReportId, pageLabel, accessDuration, addTime)
-        values (#{marketReportId}, #{pageLabel}, #{accessDuration}, now())
+        insert into cm_market_pageDuration (marketReportId, pageLabel, accessDuration, addTime, delFlag)
+        values (#{marketReportId}, #{pageLabel}, #{accessDuration}, now(), 0)
     </insert>
     </insert>
 
 
     <insert id="insertMarketAdvertHits">
     <insert id="insertMarketAdvertHits">
-        insert into cm_market_advertHits (marketReportId, position, home, infoCenter, hits, addTime)
-        values (#{marketReportId}, #{position}, #{home}, #{infoCenter}, #{hits}, now())
+        insert into cm_market_advertHits (marketReportId, position, home, infoCenter, hits, addTime, delFlag)
+        values (#{marketReportId}, #{position}, #{home}, #{infoCenter}, #{hits}, now(), 0)
     </insert>
     </insert>
 
 
     <insert id="insertMarketRemark">
     <insert id="insertMarketRemark">
-        insert into cm_market_remark (marketReportId, remarkNumber, addTime)
-        values (#{marketReportId}, #{remarkNumber}, now())
+        insert into cm_market_remark (marketReportId, remarkNumber, addTime, delFlag)
+        values (#{marketReportId}, #{remarkNumber}, now(), 0)
+    </insert>
+
+    <insert id="updateMarketStage">
+        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>
 
 
+    <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">
+        SELECT cmr.reportDate,
+               cmr.addTime,
+               s.shopId,
+               s.name,
+               s.linkMan,
+               s.contractMobile,
+               css.logo
+        FROM cm_market_report cmr
+                 LEFT JOIN cm_shop_statistics css ON css.id = cmr.marketId
+                 LEFT JOIN shop s ON s.shopId = css.shopId
+        WHERE cmr.delFlag = 0
+          and cmr.id = #{id}
+        limit 1
+    </select>
+
     <select id="getMarketStage" resultType="com.caimei365.manager.entity.caimei.shopImport.Stage">
     <select id="getMarketStage" resultType="com.caimei365.manager.entity.caimei.shopImport.Stage">
-        SELECT
-            id,
-            stage,
-            theme
+        SELECT id,
+               stage,
+               theme,
+               addTime
         FROM cm_market_stage
         FROM cm_market_stage
         WHERE marketReportId = #{marketReportId}
         WHERE marketReportId = #{marketReportId}
     </select>
     </select>
 
 
     <select id="getMarketFunnelModel" resultType="com.caimei365.manager.entity.caimei.shopImport.FunnelModel">
     <select id="getMarketFunnelModel" resultType="com.caimei365.manager.entity.caimei.shopImport.FunnelModel">
-        SELECT
-        id,
-        impressions,
-        hits,
-        visits,
-        consultation,
-        report
+        SELECT id,
+               impressions,
+               hits,
+               visits,
+               consultation,
+               report
         FROM cm_market_funnelModel
         FROM cm_market_funnelModel
         WHERE marketReportId = #{marketReportId}
         WHERE marketReportId = #{marketReportId}
     </select>
     </select>
 
 
-    <select id="getMarketArticleReadVolume" resultType="com.caimei365.manager.entity.caimei.shopImport.ArticleReadVolume">
-        SELECT
-            id,
-            title,
-            link,
-            titleReferred,
-            type,
-            keyword,
-            channel,
-            touchNumber,
-            wechatNumber
+    <select id="getMarketArticleReadVolume"
+            resultType="com.caimei365.manager.entity.caimei.shopImport.ArticleReadVolume">
+        SELECT id,
+               title,
+               link,
+               titleReferred,
+               type,
+               keyword,
+               channel,
+               touchNumber,
+               wechatNumber
         FROM cm_market_articleReadVolume
         FROM cm_market_articleReadVolume
         WHERE marketReportId = #{marketReportId}
         WHERE marketReportId = #{marketReportId}
     </select>
     </select>
 
 
     <select id="getMarketImpressions" resultType="com.caimei365.manager.entity.caimei.shopImport.Impressions">
     <select id="getMarketImpressions" resultType="com.caimei365.manager.entity.caimei.shopImport.Impressions">
-        SELECT
-            id,
-            generalNumber,
-            microBlog,
-            redBookNumber,
-            otherNumber
+        SELECT id,
+               generalNumber,
+               microBlog,
+               redBookNumber,
+               otherNumber
         FROM cm_market_impressions
         FROM cm_market_impressions
         WHERE marketReportId = #{marketReportId}
         WHERE marketReportId = #{marketReportId}
     </select>
     </select>
 
 
     <select id="getMarketReadVolume" resultType="com.caimei365.manager.entity.caimei.shopImport.ReadVolume">
     <select id="getMarketReadVolume" resultType="com.caimei365.manager.entity.caimei.shopImport.ReadVolume">
-        SELECT
-            id,
-            generalNumber,
-            microBlog,
-            redBookNumber,
-            otherNumber
+        SELECT id,
+               generalNumber,
+               microBlog,
+               redBookNumber,
+               otherNumber
         FROM cm_market_readVolume
         FROM cm_market_readVolume
         WHERE marketReportId = #{marketReportId}
         WHERE marketReportId = #{marketReportId}
     </select>
     </select>
 
 
     <select id="getMarketSummary" resultType="com.caimei365.manager.entity.caimei.shopImport.Summary">
     <select id="getMarketSummary" resultType="com.caimei365.manager.entity.caimei.shopImport.Summary">
-        SELECT
-            id,
-            keyword,
-            seoRanking,
-            searchVolume
+        SELECT id,
+               keyword,
+               seoRanking,
+               searchVolume
         FROM cm_market_summary
         FROM cm_market_summary
         WHERE marketReportId = #{marketReportId}
         WHERE marketReportId = #{marketReportId}
     </select>
     </select>
 
 
     <select id="getMarketVisits" resultType="com.caimei365.manager.entity.caimei.shopImport.Visits">
     <select id="getMarketVisits" resultType="com.caimei365.manager.entity.caimei.shopImport.Visits">
-        SELECT
-            id,
-            clubNumber,
-            touristNumber
+        SELECT id,
+               clubNumber,
+               touristNumber
         FROM cm_market_visits
         FROM cm_market_visits
         WHERE marketReportId = #{marketReportId}
         WHERE marketReportId = #{marketReportId}
     </select>
     </select>
 
 
     <select id="getMarketProportion" resultType="com.caimei365.manager.entity.caimei.shopImport.Proportion">
     <select id="getMarketProportion" resultType="com.caimei365.manager.entity.caimei.shopImport.Proportion">
-        SELECT
-            id,
-            search,
-            general,
-            microBlog,
-            directAccess
+        SELECT id,
+               search,
+               general,
+               microBlog,
+               directAccess
         FROM cm_market_proportion
         FROM cm_market_proportion
         WHERE marketReportId = #{marketReportId}
         WHERE marketReportId = #{marketReportId}
     </select>
     </select>
 
 
     <select id="getMarketPageDuration" resultType="com.caimei365.manager.entity.caimei.shopImport.PageDuration">
     <select id="getMarketPageDuration" resultType="com.caimei365.manager.entity.caimei.shopImport.PageDuration">
-        SELECT
-            id,
-            pageLabel,
-            accessDuration
+        SELECT id,
+               pageLabel,
+               accessDuration
         FROM cm_market_pageDuration
         FROM cm_market_pageDuration
         WHERE marketReportId = #{marketReportId}
         WHERE marketReportId = #{marketReportId}
     </select>
     </select>
 
 
     <select id="getMarketAdvertHits" resultType="com.caimei365.manager.entity.caimei.shopImport.AdvertHits">
     <select id="getMarketAdvertHits" resultType="com.caimei365.manager.entity.caimei.shopImport.AdvertHits">
-        SELECT
-            id,
-            POSITION,
-            home,
-            infoCenter,
-            hits
+        SELECT id,
+               POSITION,
+               home,
+               infoCenter,
+               hits
         FROM cm_market_advertHits
         FROM cm_market_advertHits
         WHERE marketReportId = #{marketReportId}
         WHERE marketReportId = #{marketReportId}
     </select>
     </select>
 
 
     <select id="getMarketRemark" resultType="com.caimei365.manager.entity.caimei.shopImport.Remark">
     <select id="getMarketRemark" resultType="com.caimei365.manager.entity.caimei.shopImport.Remark">
-        SELECT
-            id,
-            remarkNumber,
-            ADDTIME
+        SELECT id,
+               remarkNumber,
+               addTime
         FROM cm_market_remark
         FROM cm_market_remark
         WHERE marketReportId = #{marketReportId}
         WHERE marketReportId = #{marketReportId}
     </select>
     </select>
 
 
+    <select id="getShopKeyword" resultType="java.lang.String">
+        SELECT cusf.keyword
+        FROM cm_user_search_frequency cusf
+                 LEFT JOIN cm_shop_label csl ON csl.keywordId = cusf.id
+                 LEFT JOIN cm_shop_relevance csr ON csr.id = csl.relevanceId
+        where csr.shopId = #{shopId}
+    </select>
+
+    <select id="getRegion" resultType="java.lang.String">
+        SELECT region FROM cm_behavior_record_index
+        where accessDate = #{accessDate}
+        AND (
+        <foreach collection="labels" item="label" open="(" separator="or" close=")">
+            label LIKE concat('%', #{label}, '%')
+        </foreach>
+        )
+    </select>
+
+    <!--用户身份-->
+    <select id="getUserIdentity" resultType="com.caimei365.manager.entity.caimei.ReturnEntity">
+        SELECT
+            (CASE c.linkManIdentity
+                WHEN 1 THEN '老板'
+                WHEN 2 THEN '采购'
+                WHEN 3 THEN '运营'
+                WHEN 4 THEN '其他'
+            END) AS name,
+            COUNT(c.userId) as value
+        FROM cm_behavior_record_index cbri
+        LEFT JOIN club c ON c.userId = cbri.userId
+        LEFT JOIN USER u ON u.userId = cbri.userId
+        WHERE cbri.accessDate = #{accessDate}
+            AND cbri.userId != 0
+            AND u.userIdentity = 2
+            AND (
+                <foreach collection="labels" item="label" open="(" separator="or" close=")">
+                    cbri.label LIKE concat('%', #{label}, '%')
+                </foreach>
+            )
+        GROUP BY c.linkManIdentity
+    </select>
+
+
+    <!--机构类型-->
+    <select id="getClubType" resultType="com.caimei365.manager.entity.caimei.ReturnEntity">
+        SELECT
+            (CASE c.firstClubType
+                WHEN 1 THEN '医美'
+                WHEN 2 THEN '生美'
+                WHEN 3 THEN '项目公司'
+                WHEN 4 THEN '个人'
+                WHEN 5 THEN '其他'
+            END) AS name,
+            COUNT(c.userId) as value
+        FROM cm_behavior_record_index cbri
+        LEFT JOIN club c ON c.userId = cbri.userId
+        LEFT JOIN USER u ON u.userId = cbri.userId
+        WHERE cbri.accessDate = #{accessDate}
+            AND cbri.userId != 0
+            AND u.userIdentity = 2
+            AND (
+                <foreach collection="labels" item="label" open="(" separator="or" close=")">
+                    cbri.label LIKE concat('%', #{label}, '%')
+                </foreach>
+            )
+        GROUP BY c.firstClubType
+    </select>
 </mapper>
 </mapper>