Просмотр исходного кода

增加盘古活码数据相关接口

leon 5 лет назад
Родитель
Сommit
28b5110f1d

+ 47 - 11
src/main/java/com/mokamrp/privates/controller/pangu/PromoteCodeDataController.java

@@ -1,12 +1,17 @@
 package com.mokamrp.privates.controller.pangu;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.mokamrp.privates.constant.HttpStatus;
 import com.mokamrp.privates.entity.DateHandle;
 import com.mokamrp.privates.help.AjaxResult;
+import com.mokamrp.privates.mapper.data.PanCSTQRecordMapper;
 import com.mokamrp.privates.mapper.data.pojo.PanCSLTRecord;
 import com.mokamrp.privates.mapper.data.pojo.PanCSLTRecordTotal;
+import com.mokamrp.privates.mapper.data.pojo.PanCSTQRecordTotal;
 import com.mokamrp.privates.mapper.pangu.pojo.PromoteQrcodePool;
+import com.mokamrp.privates.mapper.pangu.pojo.PromoteQrcodePoolRecord;
 import com.mokamrp.privates.service.data.PanCSLTRecordService;
+import com.mokamrp.privates.service.data.PanCSTQRecordService;
 import com.mokamrp.privates.service.pangu.PromoteQrcodePoolRecordService;
 import com.mokamrp.privates.service.pangu.PromoteQrcodePoolService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -50,9 +55,9 @@ public class PromoteCodeDataController{
     @Autowired
     public PanCSLTRecordService panCSLTRecordService;
 
-    public Object getTotal(){
-        return null;
-    }
+    @Autowired
+    public PanCSTQRecordService panCSTQRecordService;
+
 
     @PostMapping("/getDataTrend")
     public Object getDataTrend(@Valid @RequestBody DateHandle dateHandle, BindingResult bindingResult){
@@ -62,26 +67,57 @@ public class PromoteCodeDataController{
         Duration duration = java.time.Duration.between(dateHandle.startDate, dateHandle.endDate);
         Map<String,Object> res = new HashMap<>();
         if (duration.toDays() > 1){
-            List<PanCSLTRecordTotal> pvRes = panCSLTRecordService.getLongTouchPvByDay(
+            List<PanCSLTRecordTotal> longTouchPvRes = panCSLTRecordService.getLongTouchPvByDay(
+                    dateHandle.startDate, dateHandle.endDate, Integer.parseInt(String.valueOf(duration.toDays()))
+            );
+            List<PanCSLTRecordTotal> longTouchUvRes = panCSLTRecordService.getLongTouchUvByDay(
+                    dateHandle.startDate, dateHandle.endDate, Integer.parseInt(String.valueOf(duration.toDays()))
+            );
+            List<PanCSTQRecordTotal> takeQrPvRes = panCSTQRecordService.getTakeQRPvByDay(
                     dateHandle.startDate, dateHandle.endDate, Integer.parseInt(String.valueOf(duration.toDays()))
             );
-            List<PanCSLTRecordTotal> uvRes = panCSLTRecordService.getLongTouchUvByDay(
+            List<PanCSTQRecordTotal> takeQrUvRes = panCSTQRecordService.getTakeQRUvByDay(
                     dateHandle.startDate, dateHandle.endDate, Integer.parseInt(String.valueOf(duration.toDays()))
             );
-            res.put("uv",uvRes);
-            res.put("pv",pvRes);
+            res.put("longtouchPv",longTouchPvRes);
+            res.put("longtouchUv",longTouchUvRes);
+            res.put("takeQrPv",takeQrPvRes);
+            res.put("takeQrUv",takeQrUvRes);
             return AjaxResult.success(res);
         }else{
-            List<PanCSLTRecordTotal> pvRes = panCSLTRecordService.getLongTouchPvByHour(
+            List<PanCSLTRecordTotal> longTouchPvRes = panCSLTRecordService.getLongTouchPvByHour(
                     dateHandle.startDate, dateHandle.endDate, Integer.parseInt(String.valueOf(duration.toHours()))
             );
-            List<PanCSLTRecordTotal> uvRes = panCSLTRecordService.getLongTouchUvByHour(
+            List<PanCSLTRecordTotal> longTouchUvRes = panCSLTRecordService.getLongTouchUvByHour(
                     dateHandle.startDate, dateHandle.endDate, Integer.parseInt(String.valueOf(duration.toHours()))
             );
-            res.put("uv",uvRes);
-            res.put("pv",pvRes);
+            List<PanCSTQRecordTotal> takeQrPvRes = panCSTQRecordService.getTakeQrPvByHour(
+                    dateHandle.startDate, dateHandle.endDate, Integer.parseInt(String.valueOf(duration.toHours()))
+            );
+            List<PanCSTQRecordTotal> takeQrUvRes = panCSTQRecordService.getTakeQrUvByHour(
+                    dateHandle.startDate, dateHandle.endDate, Integer.parseInt(String.valueOf(duration.toHours()))
+            );
+            res.put("longtouchPv",longTouchPvRes);
+            res.put("longtouchUv",longTouchUvRes);
+            res.put("takeQrPv",takeQrPvRes);
+            res.put("takeQrUv",takeQrUvRes);
             return AjaxResult.success(res);
         }
     }
+
+    @GetMapping("/getTotal")
+    public Object getTotal(){
+        PromoteQrcodePoolRecord total = promoteQrcodePoolRecordService.getOne(new QueryWrapper<PromoteQrcodePoolRecord>()
+                .select("sum(long_touch_pv) as long_touch_pv," +
+                        "sum(take_qrcode_pv) as take_qrcode_pv," +
+                        "sum(long_touch_uv) as long_touch_uv," +
+                        "sum(take_qrcode_uv) as take_qrcode_uv"));
+        Map<String,Object> res = new HashMap<>();
+        res.put("longTouchPv",total.getLongTouchPv());
+        res.put("longTouchUv",total.getLongTouchUv());
+        res.put("takeQrcodePv",total.getTakeQrcodePv());
+        res.put("takeQrcodeUv",total.getTakeQrcodePv());
+        return AjaxResult.success(res);
+    }
 }
 

+ 1 - 1
src/main/java/com/mokamrp/privates/mapper/data/PanCSLTRecordMapper.xml

@@ -11,7 +11,7 @@
         and timestamp between #{startTimestamp} and #{endTimestamp}
     </select>
     <select id="getDayUvTotal" resultType="com.mokamrp.privates.mapper.data.pojo.PanCSLTRecordTotal">
-        select timestamp,uuid
+        select DISTINCT uuid,timestamp
         from ods_hera_pangu_record_custservice_longtouch
         where promote_id is not null
         and custservice_id <![CDATA[ <> ]]> '0'

+ 1 - 1
src/main/java/com/mokamrp/privates/mapper/data/PanCSTQRecordMapper.xml

@@ -11,7 +11,7 @@
           and timestamp between #{startTimestamp} and #{endTimestamp}
     </select>
     <select id="getDayUvTotal" resultType="com.mokamrp.privates.mapper.data.pojo.PanCSTQRecordTotal">
-        select timestamp,uuid
+        select DISTINCT uuid,timestamp
         from ods_hera_pangu_record_promotecode_take_qrcode
         where promote_id is not null
           and custservice_id <![CDATA[ <> ]]> '0'

+ 2 - 0
src/main/java/com/mokamrp/privates/mapper/data/pojo/PanCSLTRecord.java

@@ -16,6 +16,8 @@ import lombok.Data;
 @TableName("ods_hera_pangu_record_custservice_longtouch")
 public class PanCSLTRecord extends Model<PanCSLTRecord>{
 
+    private String uuid = "";
+
     private Integer longTouchCnt;
 
     private Integer custserviceId = 0;

+ 2 - 0
src/main/java/com/mokamrp/privates/mapper/data/pojo/PanCSTQRecord.java

@@ -16,6 +16,8 @@ import lombok.Data;
 @TableName("ods_hera_pangu_record_promotecode_take_qrcode")
 public class PanCSTQRecord extends Model<PanCSTQRecord>{
 
+    private String uuid = "";
+
     private Integer takeQrcodeCnt;
 
     private Integer custserviceId;

+ 8 - 3
src/main/java/com/mokamrp/privates/mapper/pangu/PromoteQrcodePoolMapper.xml

@@ -32,12 +32,17 @@
             C.name AS custservice_name,
             C.qrcode,
             IFNULL(D.long_touch_pv,0) as long_touch_pv,
-            IFNULL(D.take_qrcode_pv,0) as take_qrcode_pv
+            IFNULL(D.take_qrcode_pv,0) as take_qrcode_pv,
+            IFNULL(D.today_long_touch_pv,0) as today_long_touch_pv,
+            IFNULL(D.today_take_qrcode_pv,0) as today_take_qrcode_pv,
+            IFNULL(D.long_touch_uv,0) as long_touch_uv,
+            IFNULL(D.take_qrcode_uv,0) as take_qrcode_uv,
+            IFNULL(D.today_long_touch_uv,0) as today_long_touch_uv,
+            IFNULL(D.today_take_qrcode_uv,0) as today_take_qrcode_uv
          FROM pan_promote_qrcode_pool AS A
          LEFT JOIN pan_playbill AS B ON A.playbill_id = B.id
          LEFT JOIN pan_custservice AS C ON A.custservice_id = C.id
-         LEFT JOIN (SELECT promote_id,custservice_id,long_touch_pv,take_qrcode_pv from pan_promote_qrcode_pool_record GROUP by promote_id,custservice_id)
-         as D on A.custservice_id = D.custservice_id and A.promote_id = D.promote_id
+         LEFT JOIN pan_promote_qrcode_pool_record AS D on A.custservice_id = D.custservice_id and A.promote_id = D.promote_id
         <where>
         <if test="pageHandle.promoteId != null">and A.promote_id = #{pageHandle.promoteId}</if>
         <if test="pageHandle.id != null">and A.id = #{pageHandle.id}</if>

+ 15 - 0
src/main/java/com/mokamrp/privates/mapper/pangu/pojo/PromoteQrcodePoolRecord.java

@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
 import java.time.LocalDateTime;
 import java.io.Serializable;
 
@@ -15,6 +17,7 @@ import java.io.Serializable;
  * @author leon
  * @since 2021-06-29
  */
+@Data
 @TableName("pan_promote_qrcode_pool_record")
 public class PromoteQrcodePoolRecord extends Model<PromoteQrcodePoolRecord> {
 
@@ -43,6 +46,18 @@ public class PromoteQrcodePoolRecord extends Model<PromoteQrcodePoolRecord> {
      */
     private Integer takeQrcodePv;
 
+    private Integer todayLongTouchPv;
+
+    private Integer todayTakeQrcodePv;
+
+    private Integer longTouchUv;
+
+    private Integer takeQrcodeUv;
+
+    private Integer todayLongTouchUv;
+
+    private Integer todayTakeQrcodeUv;
+
     private LocalDateTime createAt;
 
     private LocalDateTime updateAt;

+ 12 - 0
src/main/java/com/mokamrp/privates/mapper/pangu/pojo/PromoteQrcodePoolVo.java

@@ -63,6 +63,18 @@ public class PromoteQrcodePoolVo extends Model<PromoteQrcodePoolVo> {
 
     private Integer takeQrcodePv;
 
+    private Integer todayLongTouchPv;
+
+    private Integer todayTakeQrcodePv;
+
+    private Integer longTouchUv;
+
+    private Integer takeQrcodeUv;
+
+    private Integer todayLongTouchUv;
+
+    private Integer todayTakeQrcodeUv;
+
     /**
      * 创建时间
      */

+ 9 - 0
src/main/java/com/mokamrp/privates/service/data/PanCSLTRecordService.java

@@ -3,6 +3,7 @@ package com.mokamrp.privates.service.data;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.mokamrp.privates.mapper.data.pojo.PanCSLTRecord;
 import com.mokamrp.privates.mapper.data.pojo.PanCSLTRecordTotal;
+import com.mokamrp.privates.mapper.data.pojo.PanCSTQRecord;
 
 import java.time.LocalDateTime;
 import java.util.List;
@@ -10,6 +11,13 @@ import java.util.List;
 public interface PanCSLTRecordService extends IService<PanCSLTRecord> {
     //.获取客服码长按次数
     public List<PanCSLTRecord> getCustserviceLongTouchPv();
+    //.获取客服码长按人数
+    public List<PanCSLTRecord> getCustserviceLongTouchUv();
+    //.获取客服码指定日期长按次数
+    public List<PanCSLTRecord> getCustserviceLongTouchPvByDate(Long startDate, Long endDate);
+    //.获取客服码指定日器长按人数
+    public List<PanCSLTRecord> getCustserviceLongTouchUvByDate(Long startDate, Long endDate);
+
     //.获取长按识别指定范围的PV数据(天)
     public List<PanCSLTRecordTotal> getLongTouchPvByDay(LocalDateTime startDate, LocalDateTime endDate, Integer gapDay);
     //.获取长按识别指定范围的UV数据(天)
@@ -19,4 +27,5 @@ public interface PanCSLTRecordService extends IService<PanCSLTRecord> {
     //.获取长按识别指定范围的UV数据(小时)
     public List<PanCSLTRecordTotal> getLongTouchUvByHour(LocalDateTime startDate, LocalDateTime endDate, Integer gapHour);
 
+
 }

+ 8 - 0
src/main/java/com/mokamrp/privates/service/data/PanCSTQRecordService.java

@@ -10,7 +10,15 @@ import java.util.List;
 public interface PanCSTQRecordService extends IService<PanCSTQRecord> {
     //.获取客服码扫码次数
     public List<PanCSTQRecord> getCustserviceTakeQrcodePv();
+    //.获取客服码扫码人数
+    public List<PanCSTQRecord> getCustserviceTakeQrcodeUv();
+    //.获取客服码指定日期扫码次数
+    public List<PanCSTQRecord> getCustserviceTakeQrcodePvByDate(Long startDate, Long endDate);
+    //.获取客服码指定日器扫码人数
+    public List<PanCSTQRecord> getCustserviceTakeQrcodeUvByDate(Long startDate, Long endDate);
     public List<PanCSTQRecordTotal> getTakeQRPvByDay(LocalDateTime startDate, LocalDateTime endDate, Integer gapDay);
     public List<PanCSTQRecordTotal> getTakeQRUvByDay(LocalDateTime startDate, LocalDateTime endDate, Integer gapDay);
+    public List<PanCSTQRecordTotal> getTakeQrPvByHour(LocalDateTime startDate, LocalDateTime endDate, Integer gapHour);
+    public List<PanCSTQRecordTotal> getTakeQrUvByHour(LocalDateTime startDate, LocalDateTime endDate, Integer gapHour);
 
 }

+ 43 - 12
src/main/java/com/mokamrp/privates/service/data/impl/PanCSLTRecordServiceImpl.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.mokamrp.privates.mapper.data.PanCSLTRecordMapper;
 import com.mokamrp.privates.mapper.data.pojo.PanCSLTRecord;
 import com.mokamrp.privates.mapper.data.pojo.PanCSLTRecordTotal;
+import com.mokamrp.privates.mapper.data.pojo.PanCSTQRecord;
 import com.mokamrp.privates.service.data.PanCSLTRecordService;
 import org.apache.tomcat.jni.Local;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -38,6 +39,36 @@ public class PanCSLTRecordServiceImpl extends ServiceImpl<PanCSLTRecordMapper, P
         return res;
     }
 
+    //.获取客服码长按人数
+    public List<PanCSLTRecord> getCustserviceLongTouchUv(){
+        List<PanCSLTRecord> res = this.list(new QueryWrapper<PanCSLTRecord>()
+                .select("count(DISTINCT uuid) as long_touch_cnt,custservice_id,promote_id")
+                .isNotNull("custservice_id")
+                .ne("custservice_id","0")
+                .groupBy("custservice_id","promote_id"));
+        return res;
+    }
+    //.获取客服码指定日期长按次数
+    public List<PanCSLTRecord> getCustserviceLongTouchPvByDate(Long startDate, Long endDate){
+        List<PanCSLTRecord> res = this.list(new QueryWrapper<PanCSLTRecord>()
+                .select("count(event) as long_touch_cnt,custservice_id,promote_id")
+                .isNotNull("custservice_id")
+                .ne("custservice_id","0")
+                .between("timestamp",startDate,endDate)
+                .groupBy("custservice_id","promote_id"));
+        return res;
+    }
+    //.获取客服码指定日器长按人数
+    public List<PanCSLTRecord> getCustserviceLongTouchUvByDate(Long startDate, Long endDate){
+        List<PanCSLTRecord> res = this.list(new QueryWrapper<PanCSLTRecord>()
+                .select("count(DISTINCT uuid) as long_touch_cnt,custservice_id,promote_id")
+                .isNotNull("custservice_id")
+                .ne("custservice_id","0")
+                .between("timestamp",startDate,endDate)
+                .groupBy("custservice_id","promote_id"));
+        return res;
+    }
+
     /**
      * 指定时间范围内,天为单位的长按数据PV
      * @param startDate
@@ -88,13 +119,13 @@ public class PanCSLTRecordServiceImpl extends ServiceImpl<PanCSLTRecordMapper, P
             Map<String,Boolean> uuidRecord = new HashMap<>();
             for(PanCSLTRecordTotal data : res) {
                 if (data.getTimestamp() >= date1 && data.getTimestamp() <= date2){
-                    if (data.getUuid() == null){
-                        continue;
-                    }
-                    if (uuidRecord.get(data.getUuid()) == null){
+//                    if (data.getUuid() == null){
+//                        continue;
+//                    }
+//                    if (uuidRecord.get(data.getUuid()) == null){
                         cnt++;
-                        uuidRecord.put(data.getUuid(),true);
-                    }
+//                        uuidRecord.put(data.getUuid(),true);
+//                    }
                 }
             }
             PanCSLTRecordTotal total = new PanCSLTRecordTotal();
@@ -154,13 +185,13 @@ public class PanCSLTRecordServiceImpl extends ServiceImpl<PanCSLTRecordMapper, P
             Map<String,Boolean> uuidRecord = new HashMap<>();
             for(PanCSLTRecordTotal data : res) {
                 if (data.getTimestamp() >= date1 && data.getTimestamp() <= date2){
-                    if (data.getUuid() == null){
-                        continue;
-                    }
-                    if (uuidRecord.get(data.getUuid()) == null){
+//                    if (data.getUuid() == null){
+//                        continue;
+//                    }
+//                    if (uuidRecord.get(data.getUuid()) == null){
                         cnt++;
-                        uuidRecord.put(data.getUuid(),true);
-                    }
+//                        uuidRecord.put(data.getUuid(),true);
+//                    }
                 }
             }
             PanCSLTRecordTotal total = new PanCSLTRecordTotal();

+ 118 - 7
src/main/java/com/mokamrp/privates/service/data/impl/PanCSTQRecordServiceImpl.java

@@ -4,11 +4,14 @@ import com.baomidou.dynamic.datasource.annotation.DS;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.mokamrp.privates.mapper.data.PanCSTQRecordMapper;
+import com.mokamrp.privates.mapper.data.pojo.PanCSLTRecordTotal;
 import com.mokamrp.privates.mapper.data.pojo.PanCSTQRecord;
 import com.mokamrp.privates.mapper.data.pojo.PanCSTQRecordTotal;
 import com.mokamrp.privates.service.data.PanCSTQRecordService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.ZoneOffset;
 import java.time.format.DateTimeFormatter;
@@ -21,6 +24,7 @@ import java.util.Map;
 @DS("datadb")
 public class PanCSTQRecordServiceImpl  extends ServiceImpl<PanCSTQRecordMapper,PanCSTQRecord> implements PanCSTQRecordService {
 
+    @Autowired
     public PanCSTQRecordMapper panCSTQRecordMapper;
 
     /**
@@ -33,11 +37,52 @@ public class PanCSTQRecordServiceImpl  extends ServiceImpl<PanCSTQRecordMapper,P
                 .isNotNull("custservice_id")
                 .ne("custservice_id","0")
                 .groupBy("custservice_id","promote_id"));
-        System.out.println(res);
         return res;
     }
 
     /**
+     * 获取客服码扫码人数
+     * @return
+     */
+    public List<PanCSTQRecord> getCustserviceTakeQrcodeUv(){
+        List<PanCSTQRecord> res = this.list(new QueryWrapper<PanCSTQRecord>()
+                .select("count(DISTINCT uuid) as take_qrcode_cnt,custservice_id,promote_id")
+                .isNotNull("custservice_id")
+                .ne("custservice_id","0")
+                .groupBy("custservice_id","promote_id"));
+        return res;
+    }
+
+    /**
+     * 获取指定日期客服码扫码次数
+     * @return
+     */
+    public List<PanCSTQRecord> getCustserviceTakeQrcodePvByDate(Long startDate, Long endDate){
+        List<PanCSTQRecord> res = this.list(new QueryWrapper<PanCSTQRecord>()
+                .select("count(event) as take_qrcode_cnt,custservice_id,promote_id")
+                .isNotNull("custservice_id")
+                .ne("custservice_id","0")
+                .between("timestamp",startDate,endDate)
+                .groupBy("custservice_id","promote_id"));
+        return res;
+    }
+
+    /**
+     * 获取指定日期客服码扫码人数
+     * @return
+     */
+    public List<PanCSTQRecord> getCustserviceTakeQrcodeUvByDate(Long startDate, Long endDate){
+        List<PanCSTQRecord> res = this.list(new QueryWrapper<PanCSTQRecord>()
+                .select("count(DISTINCT uuid) as take_qrcode_cnt,custservice_id,promote_id")
+                .isNotNull("custservice_id")
+                .ne("custservice_id","0")
+                .between("timestamp",startDate,endDate)
+                .groupBy("custservice_id","promote_id"));
+        return res;
+    }
+
+
+    /**
      * 获取指定范围日期内 每一天的活码扫码数据PV记录
      * @param startDate
      * @param endDate
@@ -87,13 +132,79 @@ public class PanCSTQRecordServiceImpl  extends ServiceImpl<PanCSTQRecordMapper,P
             Map<String,Boolean> uuidRecord = new HashMap<>();
             for(PanCSTQRecordTotal data : res) {
                 if (data.getTimestamp() >= date1 && data.getTimestamp() <= date2){
-                    if (data.getUuid() == null){
-                        continue;
-                    }
-                    if (uuidRecord.get(data.getUuid()) == null){
+//                    if (data.getUuid() == null){
+//                        continue;
+//                    }
+//                    if (uuidRecord.get(data.getUuid()) == null){
+                        cnt++;
+//                        uuidRecord.put(data.getUuid(),true);
+//                    }
+                }
+            }
+            PanCSTQRecordTotal total = new PanCSTQRecordTotal();
+            total.setCnt(cnt);
+            total.setDate(localDate2);
+            dataList.add(total);
+        }
+        return dataList;
+    }
+
+    /**
+     * 指定时间范围内,小时为单位的曝光数据PV
+     * @param startDate
+     * @param endDate
+     * @param gapHour
+     * @return
+     */
+    public List<PanCSTQRecordTotal> getTakeQrPvByHour(LocalDateTime startDate, LocalDateTime endDate, Integer gapHour){
+        List<PanCSTQRecordTotal> dataList = new ArrayList<>();
+        DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        //.查询时间段内所有数据
+        List<PanCSTQRecordTotal> res = panCSTQRecordMapper.getDayPvTotal(startDate.plusHours(-1).toEpochSecond(ZoneOffset.of("+8")),endDate.toEpochSecond(ZoneOffset.of("+8")));
+        for (Integer i = -1;i<gapHour;i++) {
+            Long date1 = startDate.plusHours(i).toEpochSecond(ZoneOffset.of("+8"));
+            LocalDateTime localDate2 =  startDate.plusHours(i+1);
+            Long date2 = startDate.plusHours(i+1).toEpochSecond(ZoneOffset.of("+8"));
+            Integer cnt = 0;
+            for(PanCSTQRecordTotal data : res) {
+                if (data.getTimestamp() >= date1 && data.getTimestamp() <= date2){
+                    cnt++;
+                }
+            }
+            PanCSTQRecordTotal total = new PanCSTQRecordTotal();
+            total.setCnt(cnt);
+            total.setDate(localDate2);
+            dataList.add(total);
+        }
+        return dataList;
+    }
+    /**
+     * 指定时间范围内,小时为单位的曝光数据UV
+     * @param startDate
+     * @param endDate
+     * @param gapHour
+     * @return
+     */
+    public List<PanCSTQRecordTotal> getTakeQrUvByHour(LocalDateTime startDate,LocalDateTime endDate,Integer gapHour){
+        List<PanCSTQRecordTotal> dataList = new ArrayList<>();
+        DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
+        //.查询时间段内所有数据
+        List<PanCSTQRecordTotal> res = panCSTQRecordMapper.getDayUvTotal(startDate.plusHours(-1).toEpochSecond(ZoneOffset.of("+8")),endDate.toEpochSecond(ZoneOffset.of("+8")));
+        for (Integer i = -1;i<gapHour;i++) {
+            Long date1 = startDate.plusHours(i).toEpochSecond(ZoneOffset.of("+8"));
+            LocalDateTime localDate2 =  startDate.plusHours(i+1);
+            Long date2 = startDate.plusHours(i+1).toEpochSecond(ZoneOffset.of("+8"));
+            Integer cnt = 0;
+            Map<String,Boolean> uuidRecord = new HashMap<>();
+            for(PanCSTQRecordTotal data : res) {
+                if (data.getTimestamp() >= date1 && data.getTimestamp() <= date2){
+//                    if (data.getUuid() == null){
+//                        continue;
+//                    }
+//                    if (uuidRecord.get(data.getUuid()) == null){
                         cnt++;
-                        uuidRecord.put(data.getUuid(),true);
-                    }
+//                        uuidRecord.put(data.getUuid(),true);
+//                    }
                 }
             }
             PanCSTQRecordTotal total = new PanCSTQRecordTotal();

+ 72 - 8
src/main/java/com/mokamrp/privates/task/pangu/UpdatePanguDataTask.java

@@ -1,6 +1,7 @@
 package com.mokamrp.privates.task.pangu;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.generator.config.IFileCreate;
 import com.mokamrp.privates.mapper.data.pojo.PanCSLTRecord;
 import com.mokamrp.privates.mapper.data.pojo.PanCSTQRecord;
 import com.mokamrp.privates.mapper.pangu.pojo.PromoteQrcodePoolRecord;
@@ -8,10 +9,15 @@ import com.mokamrp.privates.service.data.PanCSLTRecordService;
 import com.mokamrp.privates.service.data.PanCSTQRecordService;
 import com.mokamrp.privates.service.pangu.PromoteQrcodePoolRecordService;
 import net.javacrumbs.shedlock.core.SchedulerLock;
+import org.apache.tomcat.jni.Local;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+import java.time.ZoneOffset;
 import java.util.List;
 
 @Component
@@ -30,11 +36,20 @@ public class UpdatePanguDataTask {
     @SchedulerLock(name = "pangu:UpdatePanguDataTask", lockAtLeastForString = "PT5S", lockAtMostForString = "PT15M")
     public void execute() {
         System.out.println("[cronjob]:同步盘古个微码每日数据");
+        Long startDate = LocalDateTime.of(LocalDate.now(), LocalTime.MIN).toEpochSecond(ZoneOffset.of("+8"));
+        Long endDate = LocalDateTime.of(LocalDate.now(),LocalTime.MAX).toEpochSecond(ZoneOffset.of("+8"));
         List<PromoteQrcodePoolRecord> promoteQrcodePoolRecordList = promoteQrcodePoolRecordService.list();
-        List<PanCSLTRecord> panCSLTRecordList = panCSLTRecordService.getCustserviceLongTouchPv();
-        List<PanCSTQRecord> panCSTQRecordList = panCSTQRecordService.getCustserviceTakeQrcodePv();
+        List<PanCSLTRecord> panCSLTRecordPvList = panCSLTRecordService.getCustserviceLongTouchPv();
+        List<PanCSLTRecord> panCSLTRecordUvList = panCSLTRecordService.getCustserviceLongTouchUv();
+        List<PanCSLTRecord> panCSLTRecordPvListByDate = panCSLTRecordService.getCustserviceLongTouchPvByDate(startDate,endDate);
+        List<PanCSLTRecord> panCSLTRecordUvListByDate = panCSLTRecordService.getCustserviceLongTouchUvByDate(startDate,endDate);
 
-        for (PanCSLTRecord record : panCSLTRecordList) {
+        List<PanCSTQRecord> panCSTQRecordPvList = panCSTQRecordService.getCustserviceTakeQrcodePv();
+        List<PanCSTQRecord> panCSTQRecordUvList = panCSTQRecordService.getCustserviceTakeQrcodeUv();
+        List<PanCSTQRecord> panCSTQRecordPvListByDate = panCSTQRecordService.getCustserviceTakeQrcodePvByDate(startDate,endDate);
+        List<PanCSTQRecord> panCSTQRecordUvListByDate = panCSTQRecordService.getCustserviceTakeQrcodeUvByDate(startDate,endDate);
+        //.累积长按数据
+        for (PanCSLTRecord record : panCSLTRecordPvList) {
             Integer custserviceId = record.getCustserviceId();
             Integer promoteId = record.getPromoteId();
             if (custserviceId == null || promoteId == null){
@@ -45,18 +60,33 @@ public class UpdatePanguDataTask {
             save.setPromoteId(record.getPromoteId());
             save.setCustserviceId(record.getCustserviceId());
             //.记录表没有数据则新增空数据
-            if (hasRecord == false) {
+            if (!hasRecord) {
                 promoteQrcodePoolRecordService.save(save);
             }
-            //.更新扫码次数
+            //.长按次数
             save.setLongTouchPv(record.getLongTouchCnt());
+            //.长按人数
+            PanCSLTRecord uvTotal = this.getCSLTData(panCSLTRecordUvList,promoteId,custserviceId);
+            if (uvTotal != null){
+                save.setLongTouchUv(uvTotal.getLongTouchCnt());
+            }
+            //.今日长按次数
+            PanCSLTRecord todayPv = this.getCSLTData(panCSLTRecordPvListByDate,promoteId,custserviceId);
+            if (todayPv != null){
+                save.setTodayLongTouchPv(todayPv.getLongTouchCnt());
+            }
+            //.今日长按人数
+            PanCSLTRecord todayUv = this.getCSLTData(panCSLTRecordUvListByDate,promoteId,custserviceId);
+            if (todayUv != null){
+                save.setTodayLongTouchUv(todayUv.getLongTouchCnt());
+            }
             promoteQrcodePoolRecordService.update(save, new QueryWrapper<PromoteQrcodePoolRecord>()
                     .eq("promote_id", record.getPromoteId())
                     .eq("custservice_id", record.getCustserviceId())
             );
         }
 
-        for (PanCSTQRecord record : panCSTQRecordList) {
+        for (PanCSTQRecord record : panCSTQRecordPvList) {
             Integer custserviceId = record.getCustserviceId();
             Integer promoteId = record.getPromoteId();
             if (custserviceId == null || promoteId == null){
@@ -67,17 +97,51 @@ public class UpdatePanguDataTask {
             save.setPromoteId(record.getPromoteId());
             save.setCustserviceId(record.getCustserviceId());
             //.记录表没有数据则新增空数据
-            if (hasRecord == false) {
+            if (!hasRecord) {
                 promoteQrcodePoolRecordService.save(save);
             }
-            //.更新扫码次数
+            //.扫码次数
             save.setTakeQrcodePv(record.getTakeQrcodeCnt());
+            //.扫码人数
+            PanCSTQRecord uvTotal = this.getCSTQData(panCSTQRecordUvList,promoteId,custserviceId);
+            if (uvTotal != null){
+                save.setTakeQrcodeUv(uvTotal.getTakeQrcodeCnt());
+            }
+            //.今日扫码次数
+            PanCSTQRecord todayPv = this.getCSTQData(panCSTQRecordPvListByDate,promoteId,custserviceId);
+            if (todayPv != null){
+                save.setTodayTakeQrcodePv(todayPv.getTakeQrcodeCnt());
+            }
+            //.今日扫码人数
+            PanCSTQRecord todayUv = this.getCSTQData(panCSTQRecordUvListByDate,promoteId,custserviceId);
+            if (todayUv != null){
+                save.setTodayTakeQrcodeUv(todayUv.getTakeQrcodeCnt());
+            }
             promoteQrcodePoolRecordService.update(save, new QueryWrapper<PromoteQrcodePoolRecord>()
                     .eq("promote_id", record.getPromoteId())
                     .eq("custservice_id", record.getCustserviceId())
             );
         }
     }
+
+    public PanCSTQRecord getCSTQData(List<PanCSTQRecord> row,Integer promoteId,Integer custserviceId){
+        for(PanCSTQRecord panCSTQRecord : row){
+            if (panCSTQRecord.getPromoteId().equals(promoteId) && panCSTQRecord.getCustserviceId().equals(custserviceId)){
+                return panCSTQRecord;
+            }
+        }
+        return null;
+    }
+
+    public PanCSLTRecord getCSLTData(List<PanCSLTRecord> row,Integer promoteId,Integer custserviceId){
+        for(PanCSLTRecord panCSTLRecord : row){
+            if (panCSTLRecord.getPromoteId().equals(promoteId) && panCSTLRecord.getCustserviceId().equals(custserviceId)){
+                return panCSTLRecord;
+            }
+        }
+        return null;
+    }
+
     public Boolean checkHasRecord(List<PromoteQrcodePoolRecord> promoteQrcodePoolRecordList,Integer promoteId,Integer custserviceId){
         Boolean hasRecord = false;
         for (PromoteQrcodePoolRecord promoteQrcodePoolRecord : promoteQrcodePoolRecordList) {