瀏覽代碼

Merge branch 'test' of https://gitee.com/hcst/adsp-boot into test

xuzuoyun 5 年之前
父節點
當前提交
5ebe399c8f
共有 26 個文件被更改,包括 780 次插入30 次删除
  1. 1 1
      jeecg-boot-module-system/src/main/java/org/jeecg/config/ureport/ServletConfig.java
  2. 103 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/HotInformationCtroller.java
  3. 184 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/UReportFileBindUserController.java
  4. 20 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/UReportFileController.java
  5. 1 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/entity/UReportFile.java
  6. 69 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/entity/UReportFileBindUser.java
  7. 11 13
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/OceanengineJob.java
  8. 15 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/UReportFileBindUserMapper.java
  9. 5 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/xml/UReportFileBindUserMapper.xml
  10. 23 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/IUReportFileBindUserService.java
  11. 6 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/IUReportFileService.java
  12. 60 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/UReportFileBindUserServiceImpl.java
  13. 92 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/UReportFileServiceImpl.java
  14. 1 0
      jeecg-boot-module-system/src/main/resources/application-dev.yml
  15. 1 0
      jeecg-boot-module-system/src/main/resources/application-prod.yml
  16. 2 0
      module-common/src/main/java/cn/com/ctop/common/module/utils/CtopAdConstant.java
  17. 6 0
      module-common/src/main/java/cn/com/ctop/common/module/utils/ResultMapUtils.java
  18. 7 3
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/oceanengine/entity/DouyinHot.java
  19. 8 7
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/oceanengine/entity/EffectCase.java
  20. 8 4
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/oceanengine/entity/HotMaterial.java
  21. 3 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/oceanengine/service/IDouyinHotService.java
  22. 6 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/oceanengine/service/IEffectCaseService.java
  23. 2 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/oceanengine/service/IHotMaterialService.java
  24. 23 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/oceanengine/service/impl/DouyinHotServiceImpl.java
  25. 103 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/oceanengine/service/impl/EffectCaseServiceImpl.java
  26. 20 0
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/oceanengine/service/impl/HotMaterialServiceImpl.java

+ 1 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/config/ureport/ServletConfig.java

@@ -9,7 +9,7 @@ import org.springframework.context.annotation.ImportResource;
 import javax.servlet.Servlet;
 
 @Configuration
-//@ImportResource("classpath:ureport-console-context.xml")
+@ImportResource("classpath:ureport-console-context.xml")
 public class ServletConfig {
 
     @Bean

+ 103 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/HotInformationCtroller.java

@@ -0,0 +1,103 @@
+package org.jeecg.modules.ctop.controller;
+
+import cn.com.ctop.common.module.utils.ResultMapUtils;
+import cn.com.ctop.common.module.utils.StatusCode;
+import cn.com.ctop.crawler.modules.oceanengine.entity.DouyinHot;
+import cn.com.ctop.crawler.modules.oceanengine.entity.EffectCase;
+import cn.com.ctop.crawler.modules.oceanengine.entity.HotMaterial;
+import cn.com.ctop.crawler.modules.oceanengine.service.IDouyinHotService;
+import cn.com.ctop.crawler.modules.oceanengine.service.IEffectCaseService;
+import cn.com.ctop.crawler.modules.oceanengine.service.IHotMaterialService;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author jeecg-boot
+ */
+@RestController
+@RequestMapping("/ctop/hot")
+@Slf4j
+public class HotInformationCtroller {
+
+    @Autowired
+    private IDouyinHotService douyinHotService;
+    @Autowired
+    private IEffectCaseService effectCaseService;
+    @Autowired
+    private IHotMaterialService hotMaterialService;
+
+    @ResponseBody
+    @RequestMapping(value = "/douyin/feeds", method = RequestMethod.GET)
+    public Result<IPage<DouyinHot>> getVideoList(HttpServletRequest req) {
+        Result<IPage<DouyinHot>> result = new Result<>();
+        DouyinHot hot = new DouyinHot();
+        Map<String, String[]> paramMap = req.getParameterMap();
+        String userName = paramMap.get("userName") != null ? paramMap.get("userName")[0] : null;
+        String start = paramMap.get("start") != null ? paramMap.get("start")[0] : null;
+        String end = paramMap.get("end") != null ? paramMap.get("end")[0] : null;
+        String orderByColumn = paramMap.get("orderByColumn") != null ? paramMap.get("orderByColumn")[0] : null;
+        String orderByType = paramMap.get("orderByType") != null ? paramMap.get("orderByType")[0] : null;
+        Integer pageSize = paramMap.get("pageSize") != null ? Integer.parseInt(paramMap.get("pageSize")[0]) : null;
+        Integer pageNo = paramMap.get("pageNo") != null ? Integer.parseInt(paramMap.get("pageNo")[0]) : null;
+        IPage<DouyinHot> list = douyinHotService.queryHotFeeds(userName, start, end, orderByColumn, orderByType, pageNo, pageSize);
+        result.setResult(list);
+        result.setSuccess(true);
+        return result;
+    }
+
+    @ResponseBody
+    @RequestMapping(value = "/effectcase/feeds", method = RequestMethod.GET)
+    public Result<IPage<EffectCase>> getEffectcaseList(HttpServletRequest req) {
+        Result<IPage<EffectCase>> result = new Result<>();
+        Map<String, String[]> paramMap = req.getParameterMap();
+        String userName = paramMap.get("userName") != null ? paramMap.get("userName")[0] : null;
+        String start = paramMap.get("start") != null ? paramMap.get("start")[0] : null;
+        String end = paramMap.get("end") != null ? paramMap.get("end")[0] : null;
+        String orderByColumn = paramMap.get("orderByColumn") != null ? paramMap.get("orderByColumn")[0] : null;
+        String orderByType = paramMap.get("orderByType") != null ? paramMap.get("orderByType")[0] : null;
+        Integer pageSize = paramMap.get("pageSize") != null ? Integer.parseInt(paramMap.get("pageSize")[0]) : null;
+        Integer pageNo = paramMap.get("pageNo") != null ? Integer.parseInt(paramMap.get("pageNo")[0]) : null;
+        IPage<EffectCase> list = effectCaseService.queryHotFeeds(userName, start, end, orderByColumn, orderByType, pageNo, pageSize);
+        result.setResult(list);
+        result.setSuccess(true);
+        return result;
+    }
+
+    @ResponseBody
+    @RequestMapping(value = "/material/feeds", method = RequestMethod.GET)
+    public Result<IPage<HotMaterial>> getMaterialList(HttpServletRequest req) {
+        Result<IPage<HotMaterial>> result = new Result<>();
+        Map<String, String[]> paramMap = req.getParameterMap();
+        String userName = paramMap.get("userName") != null ? paramMap.get("userName")[0] : null;
+        String start = paramMap.get("start") != null ? paramMap.get("start")[0] : null;
+        String end = paramMap.get("end") != null ? paramMap.get("end")[0] : null;
+        String orderByColumn = paramMap.get("orderByColumn") != null ? paramMap.get("orderByColumn")[0] : null;
+        String orderByType = paramMap.get("orderByType") != null ? paramMap.get("orderByType")[0] : null;
+        Integer pageSize = paramMap.get("pageSize") != null ? Integer.parseInt(paramMap.get("pageSize")[0]) : null;
+        Integer pageNo = paramMap.get("pageNo") != null ? Integer.parseInt(paramMap.get("pageNo")[0]) : null;
+        IPage<HotMaterial> list = hotMaterialService.queryHotFeeds(userName, start, end, orderByColumn, orderByType, pageNo, pageSize);
+        result.setResult(list);
+        result.setSuccess(true);
+        return result;
+    }
+
+    @ResponseBody
+    @RequestMapping(value = "/video/url", method = RequestMethod.GET)
+    public Map<String, Object> getVideoUrl(@RequestParam(name = "id") String id, @RequestParam(name = "type") Integer type) {
+        try {
+            return effectCaseService.getVideoUrl(id, type);
+        } catch (Exception e) {
+            e.printStackTrace();
+            Map<String, Object> result = new HashMap<>();
+            ResultMapUtils.setResultMap(result, StatusCode.COMMON_SERVER_ERROR);
+            return result;
+        }
+    }
+}

+ 184 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/UReportFileBindUserController.java

@@ -0,0 +1,184 @@
+package org.jeecg.modules.ctop.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.modules.ctop.entity.UReportFileBindUser;
+import org.jeecg.modules.ctop.service.IUReportFileBindUserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Arrays;
+import java.util.Map;
+
+/**
+ * 用户绑定报表信息
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-01-16
+ */
+@Slf4j
+@Api(tags = "用户绑定报表信息")
+@RestController
+@RequestMapping("/ctop/uReportFileBindUser")
+public class UReportFileBindUserController {
+    @Autowired
+    private IUReportFileBindUserService uReportFileBindUserService;
+
+    /**
+     * 分页列表查询
+     *
+     * @param uReportFileBindUser
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    @AutoLog(value = "用户绑定报表信息-分页列表查询")
+    @ApiOperation(value = "用户绑定报表信息-分页列表查询", notes = "用户绑定报表信息-分页列表查询")
+    @GetMapping(value = "/list")
+    public Result<IPage<UReportFileBindUser>> queryPageList(UReportFileBindUser uReportFileBindUser,
+                                                            @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                            @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                            HttpServletRequest req) {
+        Result<IPage<UReportFileBindUser>> result = new Result<>();
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        uReportFileBindUser.setUserId(user.getId());
+        QueryWrapper<UReportFileBindUser> queryWrapper = QueryGenerator.initQueryWrapper(uReportFileBindUser, req.getParameterMap());
+        Page<UReportFileBindUser> page = new Page<>(pageNo, pageSize);
+        IPage<UReportFileBindUser> pageList = uReportFileBindUserService.page(page, queryWrapper);
+        result.setSuccess(true);
+        result.setResult(pageList);
+        return result;
+    }
+
+    /**
+     * 分页列表查询
+     *
+     * @param req
+     * @return
+     */
+    @AutoLog(value = "用户绑定报表信息-分页列表查询")
+    @ApiOperation(value = "用户绑定报表信息-分页列表查询", notes = "用户绑定报表信息-分页列表查询")
+    @PostMapping(value = "/userList")
+    public Map<String, Object> queryPageList(@RequestBody JSONObject data,
+                                             HttpServletRequest req) {
+        return uReportFileBindUserService.getListByFileId(data);
+    }
+
+    /**
+     * 添加
+     *
+     * @param uReportFileBindUser
+     * @return
+     */
+    @AutoLog(value = "用户绑定报表信息-添加")
+    @ApiOperation(value = "用户绑定报表信息-添加", notes = "用户绑定报表信息-添加")
+    @PostMapping(value = "/add")
+    public Result<UReportFileBindUser> add(@RequestBody UReportFileBindUser uReportFileBindUser) {
+        Result<UReportFileBindUser> result = new Result<>();
+        try {
+            uReportFileBindUserService.save(uReportFileBindUser);
+            result.success("添加成功!");
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            result.error500("操作失败");
+        }
+        return result;
+    }
+
+    /**
+     * 编辑
+     *
+     * @param uReportFileBindUser
+     * @return
+     */
+    @AutoLog(value = "用户绑定报表信息-编辑")
+    @ApiOperation(value = "用户绑定报表信息-编辑", notes = "用户绑定报表信息-编辑")
+    @PutMapping(value = "/edit")
+    public Result<UReportFileBindUser> edit(@RequestBody UReportFileBindUser uReportFileBindUser) {
+        Result<UReportFileBindUser> result = new Result<>();
+        UReportFileBindUser uReportFileBindUserEntity = uReportFileBindUserService.getById(uReportFileBindUser.getId());
+        if (uReportFileBindUserEntity == null) {
+            result.error500("未找到对应实体");
+        } else {
+            boolean ok = uReportFileBindUserService.updateById(uReportFileBindUser);
+            if (ok) {
+                result.success("修改成功!");
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * 通过id删除
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "用户绑定报表信息-通过id删除")
+    @ApiOperation(value = "用户绑定报表信息-通过id删除", notes = "用户绑定报表信息-通过id删除")
+    @DeleteMapping(value = "/delete")
+    public Result<?> delete(@RequestParam(name = "id", required = true) String id) {
+        try {
+            uReportFileBindUserService.removeById(id);
+        } catch (Exception e) {
+            log.error("删除失败", e.getMessage());
+            return Result.error("删除失败!");
+        }
+        return Result.ok("删除成功!");
+    }
+
+    /**
+     * 批量删除
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "用户绑定报表信息-批量删除")
+    @ApiOperation(value = "用户绑定报表信息-批量删除", notes = "用户绑定报表信息-批量删除")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<UReportFileBindUser> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        Result<UReportFileBindUser> result = new Result<>();
+        if (ids == null || "".equals(ids.trim())) {
+            result.error500("参数不识别!");
+        } else {
+            this.uReportFileBindUserService.removeByIds(Arrays.asList(ids.split(",")));
+            result.success("删除成功!");
+        }
+        return result;
+    }
+
+    /**
+     * 通过id查询
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "用户绑定报表信息-通过id查询")
+    @ApiOperation(value = "用户绑定报表信息-通过id查询", notes = "用户绑定报表信息-通过id查询")
+    @GetMapping(value = "/queryById")
+    public Result<UReportFileBindUser> queryById(@RequestParam(name = "id", required = true) String id) {
+        Result<UReportFileBindUser> result = new Result<>();
+        UReportFileBindUser uReportFileBindUser = uReportFileBindUserService.getById(id);
+        if (uReportFileBindUser == null) {
+            result.error500("未找到对应实体");
+        } else {
+            result.setResult(uReportFileBindUser);
+            result.setSuccess(true);
+        }
+        return result;
+    }
+}

+ 20 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/UReportFileController.java

@@ -1,6 +1,7 @@
 package org.jeecg.modules.ctop.controller;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -119,6 +120,25 @@ public class UReportFileController {
     }
 
     /**
+     * 绑定用户
+     *
+     * @return
+     */
+    @AutoLog(value = "报表文件绑定用户")
+    @ApiOperation(value = "报表文件绑定用户", notes = "报表文件绑定用户")
+    @PostMapping(value = "/bindUser")
+    public Map<String, Object> bindUser(@RequestBody JSONObject data) {
+        return uReportFileService.bindUsers(data);
+    }
+
+    @AutoLog(value = "报表文件解除绑定用户")
+    @ApiOperation(value = "报表文件解除绑定用户", notes = "报表文件解除绑定用户")
+    @PostMapping(value = "/unbindUser")
+    public Map<String, Object> unbindUser(@RequestBody JSONObject data) {
+        return uReportFileService.unbindUser(data);
+    }
+
+    /**
      * 通过id删除
      *
      * @param id
@@ -244,5 +264,4 @@ public class UReportFileController {
         }
         return Result.ok("文件导入失败!");
     }
-
 }

+ 1 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/entity/UReportFile.java

@@ -44,6 +44,7 @@ public class UReportFile {
     @Excel(name = "报表内容", width = 15)
     @ApiModelProperty(value = "报表内容")
     private String content;
+
     /**
      * 创建时间
      */
@@ -56,6 +57,5 @@ public class UReportFile {
     private Date updateTime;
 
     public UReportFile() {
-        this.updateTime = new Date();
     }
 }

+ 69 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/entity/UReportFileBindUser.java

@@ -0,0 +1,69 @@
+package org.jeecg.modules.ctop.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+import java.util.Date;
+
+/**
+ * 用户绑定报表信息
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-01-16
+ */
+@Data
+@TableName("ureport_file_bind_user")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ureport_file_bind_user对象", description = "用户绑定报表信息")
+public class UReportFileBindUser {
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "id")
+    private Long id;
+    /**
+     * fileId
+     */
+    @Excel(name = "fileId", width = 15)
+    @ApiModelProperty(value = "fileId")
+    private String fileId;
+    /**
+     * userId
+     */
+    @Excel(name = "userId", width = 15)
+    @ApiModelProperty(value = "userId")
+    private String userId;
+    /**
+     * userName
+     */
+    @Excel(name = "userName", width = 15)
+    @ApiModelProperty(value = "userName")
+    private String userName;
+    /**
+     * fileName
+     */
+    @Excel(name = "fileName", width = 15)
+    @ApiModelProperty(value = "fileName")
+    private String fileName;
+    /**
+     * createTime
+     */
+    @ApiModelProperty(value = "createTime")
+    private Date createTime;
+    /**
+     * updateTime
+     */
+    @ApiModelProperty(value = "updateTime")
+    private Date updateTime;
+}

+ 11 - 13
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/OceanengineJob.java

@@ -2,8 +2,6 @@ package org.jeecg.modules.ctop.job;
 
 import cn.com.ctop.common.module.utils.Base64Utils;
 import cn.com.ctop.common.module.utils.HttpUtils2;
-import cn.com.ctop.common.module.utils.ResultMapUtils;
-import cn.com.ctop.common.module.utils.StatusCode;
 import cn.com.ctop.crawler.modules.core.util.FateadmHttpUtil;
 import cn.com.ctop.crawler.modules.core.util.FateadmUtil;
 import cn.com.ctop.crawler.modules.oceanengine.entity.DouyinHot;
@@ -16,9 +14,7 @@ import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import javafx.scene.effect.Effect;
 import org.apache.http.impl.cookie.BasicClientCookie;
-import org.apache.poi.hslf.blip.Bitmap;
 import org.bytedeco.javacpp.opencv_core;
 import org.bytedeco.javacv.FFmpegFrameGrabber;
 import org.bytedeco.javacv.Frame;
@@ -30,17 +26,15 @@ import org.quartz.Job;
 import org.quartz.JobExecutionContext;
 import org.quartz.JobExecutionException;
 import org.springframework.beans.factory.annotation.Autowired;
-import sun.misc.BASE64Encoder;
 
 import javax.imageio.ImageIO;
 import java.awt.*;
 import java.awt.image.BufferedImage;
 import java.io.ByteArrayOutputStream;
-import java.io.File;
 import java.net.HttpURLConnection;
 import java.net.URL;
-import java.util.*;
 import java.util.List;
+import java.util.*;
 
 public class OceanengineJob implements Job {
     @Autowired
@@ -50,11 +44,15 @@ public class OceanengineJob implements Job {
     @Autowired
     private IHotMaterialService hotMaterialService;
     public static void main(String[] args){
-        OceanengineJob oceanengineJob = new OceanengineJob();
-        oceanengineJob.getVideoFirstImage("http://v5-dy.ixigua.com/4651275f4a249f78f7c20bda0a1aa7bb/5e2524c0/video/m/2202d662c8f1cc54dce8a3670f57aa7f1f91154c11b000109273b87f177/?a=1128&br=2754&bt=1377&cr=0&cs=0&dr=0&ds=3&er=&l=20200120105447010012034216116D5EDE&lr=aweme&qs=0&rc=O2dpZGU8ZGg4ZDM0aThnZ0ApNmg2OWllaGU3N2g0ZjZoPGcuYmEtYi8wXzYxYjAzNTYxczMvY18tNS5eMjUyLjAvXjY6Yw%3D%3D");
+        System.out.println(getRealVideoUrl(""));
+    }
 
+    public static String getVideoUrlByVid(String vid) {
+        String url = "https://aweme.snssdk.com/aweme/v1/playwm/?video_id=" + vid + "&line=0";
+        return getRealVideoUrl(url);
     }
-    private String getRealVideoUrl(String url){
+
+    public static String getRealVideoUrl(String url) {
         try {
             URL serverUrl = new URL(url);
             HttpURLConnection conn = (HttpURLConnection) serverUrl
@@ -107,7 +105,8 @@ public class OceanengineJob implements Job {
             e.printStackTrace();
         }
     }
-    private String getVideoUrl(String vid) throws Exception{
+
+    public static String getVideoUrl(String vid) throws Exception {
         String url = "http://i.snssdk.com/video/urls/1/toutiao/mp4/"+vid;
         String result = HttpUtils2.httpGetRequest(url);
         ObjectMapper mapper = new ObjectMapper();
@@ -195,8 +194,7 @@ public class OceanengineJob implements Job {
             ByteArrayOutputStream baos = new ByteArrayOutputStream();//io流
             ImageIO.write(bi, "jpg", baos);
             byte[] bytes = baos.toByteArray();//转换成字节
-            BASE64Encoder encoder = new BASE64Encoder();
-            String png_base64 = encoder.encodeBuffer(bytes).trim();//转换成base64串
+            String png_base64 = Base64.getEncoder().encodeToString(bytes).trim();//转换成base64串
             png_base64 = png_base64.replaceAll("\n", "").replaceAll("\r", "");//删除 \r\n
             //        ImageIO.write(bufferedImage, "png", new File("D:/qrcode1.png"));
             return "data:image/jpg;base64,"+png_base64;

+ 15 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/UReportFileBindUserMapper.java

@@ -0,0 +1,15 @@
+package org.jeecg.modules.ctop.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.ctop.entity.UReportFileBindUser;
+
+/**
+ * 用户绑定报表信息
+ *
+ * @author: jeecg-boot
+ * @date: 2020-01-16
+ * @cersion: V1.0
+ */
+public interface UReportFileBindUserMapper extends BaseMapper<UReportFileBindUser> {
+
+}

+ 5 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/xml/UReportFileBindUserMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.ctop.mapper.UReportFileBindUserMapper">
+
+</mapper>

+ 23 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/IUReportFileBindUserService.java

@@ -0,0 +1,23 @@
+package org.jeecg.modules.ctop.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.ctop.entity.UReportFileBindUser;
+
+import java.util.Map;
+
+/**
+ * 用户绑定报表信息
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-01-16
+ */
+public interface IUReportFileBindUserService extends IService<UReportFileBindUser> {
+
+    UReportFileBindUser getByUserIdAndFileId(String id, String fileId);
+
+    void deleteByUserIdAndFileId(String userId, String fileId);
+
+    Map<String, Object> getListByFileId(JSONObject data);
+}

+ 6 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/IUReportFileService.java

@@ -1,9 +1,11 @@
 package org.jeecg.modules.ctop.service;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.service.IService;
 import org.jeecg.modules.ctop.entity.UReportFile;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 报表文件存储
@@ -49,4 +51,8 @@ public interface IUReportFileService extends IService<UReportFile> {
      * 更新报表
      */
     boolean updateReportFile(UReportFile entity);
+
+    Map<String, Object> bindUsers(JSONObject data);
+
+    Map<String, Object> unbindUser(JSONObject data);
 }

+ 60 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/UReportFileBindUserServiceImpl.java

@@ -0,0 +1,60 @@
+package org.jeecg.modules.ctop.service.impl;
+
+import cn.com.ctop.common.module.utils.ResultMapUtils;
+import cn.com.ctop.common.module.utils.StatusCode;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.ctop.entity.UReportFileBindUser;
+import org.jeecg.modules.ctop.mapper.UReportFileBindUserMapper;
+import org.jeecg.modules.ctop.service.IUReportFileBindUserService;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 用户绑定报表信息
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2020-01-16
+ */
+@Service
+public class UReportFileBindUserServiceImpl extends ServiceImpl<UReportFileBindUserMapper, UReportFileBindUser> implements IUReportFileBindUserService {
+
+    @Override
+    public UReportFileBindUser getByUserIdAndFileId(String userId, String fileId) {
+        QueryWrapper<UReportFileBindUser> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("user_id", userId)
+                .eq("file_id", fileId)
+                .orderByDesc("id")
+                .last("limit 1");
+        return this.getOne(queryWrapper);
+    }
+
+    @Override
+    public void deleteByUserIdAndFileId(String userId, String fileId) {
+        QueryWrapper<UReportFileBindUser> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("user_id", userId)
+                .eq("file_id", fileId);
+        this.remove(queryWrapper);
+    }
+
+    @Override
+    public Map<String, Object> getListByFileId(JSONObject data) {
+        Map<String, Object> result = new HashMap<>();
+        if (null == data || null == data.getString("fileId") || data.getString("fileId").equals("")) {
+            ResultMapUtils.setResultMap(result, StatusCode.COMMON_PARAM_ERROR);
+            return result;
+        }
+        String fileId = data.getString("fileId");
+        QueryWrapper<UReportFileBindUser> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("file_id", fileId);
+        List<UReportFileBindUser> bindUsers = this.list(queryWrapper);
+        result.put("data", bindUsers);
+        ResultMapUtils.setResultMap(result, StatusCode.COMMON_SUCCESS);
+        return result;
+    }
+}

+ 92 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/UReportFileServiceImpl.java

@@ -1,13 +1,24 @@
 package org.jeecg.modules.ctop.service.impl;
 
+import cn.com.ctop.common.module.utils.ResultMapUtils;
+import cn.com.ctop.common.module.utils.StatusCode;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.jeecg.modules.ctop.entity.UReportFile;
+import org.jeecg.modules.ctop.entity.UReportFileBindUser;
 import org.jeecg.modules.ctop.mapper.UReportFileMapper;
+import org.jeecg.modules.ctop.service.IUReportFileBindUserService;
 import org.jeecg.modules.ctop.service.IUReportFileService;
+import org.jeecg.modules.system.entity.SysUser;
+import org.jeecg.modules.system.service.ISysUserService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.Date;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 报表文件存储
@@ -34,6 +45,7 @@ public class UReportFileServiceImpl extends ServiceImpl<UReportFileMapper, URepo
 
     @Override
     public List<UReportFile> listAllReportFile() {
+
         return this.list();
     }
 
@@ -46,11 +58,91 @@ public class UReportFileServiceImpl extends ServiceImpl<UReportFileMapper, URepo
 
     @Override
     public boolean saveReportFile(UReportFile entity) {
+        entity.setUpdateTime(new Date());
         return this.save(entity);
     }
 
     @Override
     public boolean updateReportFile(UReportFile entity) {
+        entity.setUpdateTime(new Date());
         return this.updateById(entity);
     }
+
+    @Autowired
+    private IUReportFileBindUserService bindUserService;
+
+    @Override
+    public Map<String, Object> bindUsers(JSONObject data) {
+        Map<String, Object> result = new HashMap<>();
+        if (null == data) {
+            ResultMapUtils.setResultMap(result, StatusCode.COMMON_PARAM_ERROR);
+            return result;
+        }
+        String fileId = data.getString("fileId");
+        String userIds = data.getString("userIds");
+        if (null == userIds || userIds.trim().equals("") || null == fileId || fileId.trim().equals("")) {
+            ResultMapUtils.setResultMap(result, StatusCode.COMMON_PARAM_ERROR);
+            return result;
+        }
+        UReportFile file = getById(fileId);
+        if (file == null) {
+            result.put("message", "此报表模板不存在或者已经被删除");
+            result.put("success", false);
+            result.put("code", "-1");
+            return result;
+        }
+        String[] ids = userIds.split(",");
+        for (int i = 0; i < ids.length; i++) {
+            //用户绑定报表信息
+            UReportFileBindUser bindUser = bindUserService.getByUserIdAndFileId(ids[i], fileId);
+            if (null != bindUser) {
+                continue;
+            }
+            SysUser sysUser = sysUserService.getById(ids[i]);
+            bindUser = new UReportFileBindUser();
+            bindUser.setUserId(ids[i]);
+            bindUser.setUserName(sysUser.getRealname());
+            bindUser.setFileId(fileId);
+            bindUser.setFileName(file.getName());
+            bindUser.setCreateTime(new Date());
+            bindUser.setUpdateTime(new Date());
+            bindUserService.save(bindUser);
+        }
+        result.put("message", "报表模板绑定用户成功");
+        result.put("success", true);
+        result.put("code", "0");
+        return result;
+    }
+
+    @Autowired
+    private ISysUserService sysUserService;
+
+    @Override
+    public Map<String, Object> unbindUser(JSONObject data) {
+        Map<String, Object> result = new HashMap<>();
+        if (null == data) {
+            ResultMapUtils.setResultMap(result, StatusCode.COMMON_PARAM_ERROR);
+            return result;
+        }
+        String userId = data.getString("userId");
+        String fileId = data.getString("fileId");
+        if (null == userId || userId.trim().equals("") || null == fileId || fileId.trim().equals("")) {
+            ResultMapUtils.setResultMap(result, StatusCode.COMMON_PARAM_ERROR);
+            return result;
+        }
+        UReportFile file = getById(fileId);
+        if (file == null) {
+            result.put("message", "此报表模板不存在或者已经被删除");
+            result.put("success", false);
+            result.put("code", "-1");
+            return result;
+        }
+
+        //用户解除绑定
+        bindUserService.deleteByUserIdAndFileId(userId, fileId);
+        result.put("message", "用户解绑成功");
+        result.put("code", "0");
+        result.put("success", true);
+        return result;
+    }
 }

+ 1 - 0
jeecg-boot-module-system/src/main/resources/application-dev.yml

@@ -1,6 +1,7 @@
 
 server:
   port: 8080
+  ip: 39.106.184.70
   servlet:
     context-path: /jeecg-boot
     compression:

+ 1 - 0
jeecg-boot-module-system/src/main/resources/application-prod.yml

@@ -1,5 +1,6 @@
 server:
   port: 8080
+  ip: 39.97.120.42
   servlet:
     context-path: /jeecg-boot
     compression:

+ 2 - 0
module-common/src/main/java/cn/com/ctop/common/module/utils/CtopAdConstant.java

@@ -13,5 +13,7 @@ public class CtopAdConstant {
     public static final String BYTEDANCE_REPORT_TYPE_DAILY = "STAT_TIME_GRANULARITY_DAILY";
     public static final String BYTEDANCE_REPORT_TYPE_HOURLY = "STAT_TIME_GRANULARITY_HOURLY";
 
+    public static final String UREPORT_PREVIEW_URL_PREFIX = "/jeecg-boot/ureport/designer?_u=mysql:";
+
 
 }

+ 6 - 0
module-common/src/main/java/cn/com/ctop/common/module/utils/ResultMapUtils.java

@@ -16,4 +16,10 @@ public class ResultMapUtils {
         map.put(MAP_MESSAGE, StatusCode.getDesc(statusCode));
         map.put(MAP_SUCCESS, StatusCode.getFlag(statusCode));
     }
+
+    public static void setResultMap(Map<String, Object> map, StatusCode statusCode) {
+        map.put(MAP_CODE, statusCode.getCode());
+        map.put(MAP_MESSAGE, statusCode.getDesc());
+        map.put(MAP_SUCCESS, statusCode.getFlag());
+    }
 }

+ 7 - 3
module-crawler/src/main/java/cn/com/ctop/crawler/modules/oceanengine/entity/DouyinHot.java

@@ -6,18 +6,21 @@ import com.baomidou.mybatisplus.annotation.TableName;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
 
+import java.util.Date;
+
 @Data
 @TableName("ctop_oceanengine_douyin_hot")
 public class DouyinHot {
     @TableId(value = "id", type = IdType.INPUT)
-    private Long id;
-    private Long mid;
+    private String id;
+    private String mid;
     @JsonProperty("video_id")
     private String videoId;
     @JsonProperty("core_user_id")
     private Long userId;
     @JsonProperty("core_user_name")
     private String userName;
+    private String coverImage;
     private String title;
     @JsonProperty("head_image_uri")
     private String headImageUri;
@@ -27,5 +30,6 @@ public class DouyinHot {
     private Integer share;
     private Integer comment;
     private String url;
-    private String coverImage;
+    private Date createTime;
+    private Date updateTime;
 }

+ 8 - 7
module-crawler/src/main/java/cn/com/ctop/crawler/modules/oceanengine/entity/EffectCase.java

@@ -4,19 +4,18 @@ import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.annotation.JsonIgnore;
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
-
-import java.util.List;
+import java.util.Date;
 
 @Data
-@JsonIgnoreProperties({ "methods", "effect","creativeLabel","tag" })
 @TableName("ctop_oceanengine_effect_case")
+/**
+ * 效果案例
+ */
 public class EffectCase {
     @TableId(value = "id", type = IdType.INPUT)
-    private Long id;
+    private String id;
     private String vid;
     @JsonProperty("creative_label_1")
     @TableField(value = "creative_label_1")
@@ -35,6 +34,7 @@ public class EffectCase {
     private String effect;
     @JsonProperty("conversion_type")
     private String conversionType;
+    private String coverImage;
     private String creativeLabel;
     private String tag;
     @JsonProperty("creative_title")
@@ -45,5 +45,6 @@ public class EffectCase {
     private String creativeScore;
     @JsonProperty("industry_tag")
     private String industryTag;
-    private String coverImage;
+    private Date createTime;
+    private Date updateTime;
 }

+ 8 - 4
module-crawler/src/main/java/cn/com/ctop/crawler/modules/oceanengine/entity/HotMaterial.java

@@ -3,21 +3,25 @@ package cn.com.ctop.crawler.modules.oceanengine.entity;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
+import java.util.Date;
 
+/**
+ * 广告雷达
+ */
 @Data
-@JsonIgnoreProperties({ "appCode", "appName" })
 @TableName("ctop_oceanengine_hot_material")
 public class HotMaterial {
     @TableId(value = "id",type = IdType.INPUT)
     @JsonProperty("material_id")
-    private Long id;
+    private String id;
     private String vid;
     private String videoUrl;
     private String title;
     private Integer appCode;
-    private String appName;
     private String coverImage;
+    private String appName;
+    private Date createTime;
+    private Date updateTime;
 }

+ 3 - 0
module-crawler/src/main/java/cn/com/ctop/crawler/modules/oceanengine/service/IDouyinHotService.java

@@ -1,10 +1,13 @@
 package cn.com.ctop.crawler.modules.oceanengine.service;
 
 import cn.com.ctop.crawler.modules.oceanengine.entity.DouyinHot;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 
 import java.util.List;
 
 public interface IDouyinHotService extends IService<DouyinHot> {
     public void replaceBatch(List<DouyinHot> list);
+
+    IPage<DouyinHot> queryHotFeeds(String userName, String start, String end, String orderByColumn, String orderByType, Integer pageNo, Integer pageSize);
 }

+ 6 - 0
module-crawler/src/main/java/cn/com/ctop/crawler/modules/oceanengine/service/IEffectCaseService.java

@@ -1,7 +1,13 @@
 package cn.com.ctop.crawler.modules.oceanengine.service;
 
 import cn.com.ctop.crawler.modules.oceanengine.entity.EffectCase;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.Map;
+
 public interface IEffectCaseService extends IService<EffectCase> {
+    IPage<EffectCase> queryHotFeeds(String userName, String start, String end, String orderByColumn, String orderByType, Integer pageNo, Integer pageSize);
+
+    Map<String, Object> getVideoUrl(String id, Integer type) throws Exception;
 }

+ 2 - 0
module-crawler/src/main/java/cn/com/ctop/crawler/modules/oceanengine/service/IHotMaterialService.java

@@ -1,7 +1,9 @@
 package cn.com.ctop.crawler.modules.oceanengine.service;
 
 import cn.com.ctop.crawler.modules.oceanengine.entity.HotMaterial;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 
 public interface IHotMaterialService extends IService<HotMaterial> {
+    IPage<HotMaterial> queryHotFeeds(String userName, String start, String end, String orderByColumn, String orderByType, Integer pageNo, Integer pageSize);
 }

+ 23 - 0
module-crawler/src/main/java/cn/com/ctop/crawler/modules/oceanengine/service/impl/DouyinHotServiceImpl.java

@@ -3,6 +3,9 @@ package cn.com.ctop.crawler.modules.oceanengine.service.impl;
 import cn.com.ctop.crawler.modules.oceanengine.entity.DouyinHot;
 import cn.com.ctop.crawler.modules.oceanengine.mapper.DouyinHotMapper;
 import cn.com.ctop.crawler.modules.oceanengine.service.IDouyinHotService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -13,7 +16,27 @@ import java.util.List;
 public class DouyinHotServiceImpl extends ServiceImpl<DouyinHotMapper, DouyinHot> implements IDouyinHotService {
     @Autowired
     private DouyinHotMapper douyinHotMapper;
+
+    @Override
     public void replaceBatch(List<DouyinHot> list){
         douyinHotMapper.replaceBatch(list);
     }
+
+    @Override
+    public IPage<DouyinHot> queryHotFeeds(String userName, String start, String end, String orderByColumn, String orderByType, Integer pageNo, Integer pageSize) {
+        QueryWrapper<DouyinHot> queryWrapper = new QueryWrapper<>();
+        if (null != userName && !"".equals(userName)) {
+            queryWrapper.like("user_name", "%" + userName + "%");
+        }
+        if (null != start && !"".equals(start) && null != end && !"".equals(end)) {
+            queryWrapper.between("create_time", start, end);
+        }
+        if (null != orderByType && orderByType.equals("desc")) {
+            queryWrapper.orderByDesc(orderByColumn);
+        } else {
+            queryWrapper.orderByAsc(orderByColumn);
+        }
+        Page<DouyinHot> page = new Page<>(pageNo, pageSize);
+        return this.page(page, queryWrapper);
+    }
 }

+ 103 - 0
module-crawler/src/main/java/cn/com/ctop/crawler/modules/oceanengine/service/impl/EffectCaseServiceImpl.java

@@ -1,11 +1,114 @@
 package cn.com.ctop.crawler.modules.oceanengine.service.impl;
 
+import cn.com.ctop.common.module.utils.Base64Utils;
+import cn.com.ctop.common.module.utils.HttpUtils2;
+import cn.com.ctop.common.module.utils.ResultMapUtils;
+import cn.com.ctop.common.module.utils.StatusCode;
+import cn.com.ctop.crawler.modules.oceanengine.entity.DouyinHot;
 import cn.com.ctop.crawler.modules.oceanengine.entity.EffectCase;
+import cn.com.ctop.crawler.modules.oceanengine.entity.HotMaterial;
 import cn.com.ctop.crawler.modules.oceanengine.mapper.EffectCaseMapper;
+import cn.com.ctop.crawler.modules.oceanengine.service.IDouyinHotService;
 import cn.com.ctop.crawler.modules.oceanengine.service.IEffectCaseService;
+import cn.com.ctop.crawler.modules.oceanengine.service.IHotMaterialService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+
 @Service
 public class EffectCaseServiceImpl extends ServiceImpl<EffectCaseMapper, EffectCase> implements IEffectCaseService {
+    @Autowired
+    private IDouyinHotService douyinHotService;
+    @Autowired
+    private IHotMaterialService hotMaterialService;
+    @Override
+    public IPage<EffectCase> queryHotFeeds(String userName, String start, String end, String orderByColumn, String orderByType, Integer pageNo, Integer pageSize) {
+        QueryWrapper<EffectCase> queryWrapper = new QueryWrapper<>();
+        if (null != userName && !"".equals(userName)) {
+            queryWrapper.like("author", "%" + userName + "%");
+        }
+        if (null != start && !"".equals(start) && null != end && !"".equals(end)) {
+            queryWrapper.between("create_time", start, end);
+        }
+        if (null != orderByType && orderByType.equals("desc")) {
+            queryWrapper.orderByDesc(orderByColumn);
+        } else {
+            queryWrapper.orderByAsc(orderByColumn);
+        }
+        Page<EffectCase> page = new Page<>(pageNo, pageSize);
+        return this.page(page, queryWrapper);
+    }
+
+    @Override
+    public Map<String, Object> getVideoUrl(String id, Integer type) throws Exception {
+        Map<String, Object> result = new HashMap<>();
+        String url = null;
+        String vid = null;
+        if (null != type && type == 1) {
+            //抖音热门
+            DouyinHot douyinHot = douyinHotService.getById(id);
+            vid = douyinHot.getVideoId();
+        } else if (type == 2) {
+            //效果案例
+            EffectCase effectCase = this.getById(id);
+            vid = effectCase.getVid();
+        } else {
+            //广告雷达
+            HotMaterial hotMaterial = hotMaterialService.getById(id);
+            vid = hotMaterial.getVid();
+        }
+        url = getRealVideoUrl("https://aweme.snssdk.com/aweme/v1/playwm/?video_id=" + vid + "&line=0");
+        if (null == url || url.trim().equals("")) {
+            url = getVideoUrl(vid);
+        }
+        result.put("url", url);
+        ResultMapUtils.setResultMap(result, StatusCode.COMMON_SUCCESS);
+        return result;
+    }
+
+    public static String getVideoUrl(String vid) throws Exception {
+        String url = "http://i.snssdk.com/video/urls/1/toutiao/mp4/" + vid;
+        String result = HttpUtils2.httpGetRequest(url);
+        ObjectMapper mapper = new ObjectMapper();
+        if (result != null) {
+            JsonNode node = mapper.readTree(result);
+            String mainUrl = node.get("data").get("video_list").get("video_1").get("main_url").asText();
+            return Base64Utils.decode(mainUrl);
+        }
+        return null;
+    }
+
+    public static String getVideoUrlByVid(String vid) {
+        String url = "https://aweme.snssdk.com/aweme/v1/playwm/?video_id=" + vid + "&line=0";
+        return getRealVideoUrl(url);
+    }
+
+    public static String getRealVideoUrl(String url) {
+        try {
+            URL serverUrl = new URL(url);
+            HttpURLConnection conn = (HttpURLConnection) serverUrl
+                    .openConnection();
+            conn.setRequestMethod("GET");
+            // 必须设置false,否则会自动redirect到Location的地址
+            conn.setInstanceFollowRedirects(false);
+            conn.addRequestProperty("User-Agent",
+                    "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.8) Firefox/3.6.8");
+            conn.connect();
+            String location = conn.getHeaderField("Location");
+            return location;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
 }

+ 20 - 0
module-crawler/src/main/java/cn/com/ctop/crawler/modules/oceanengine/service/impl/HotMaterialServiceImpl.java

@@ -3,9 +3,29 @@ package cn.com.ctop.crawler.modules.oceanengine.service.impl;
 import cn.com.ctop.crawler.modules.oceanengine.entity.HotMaterial;
 import cn.com.ctop.crawler.modules.oceanengine.mapper.HotMaterialMapper;
 import cn.com.ctop.crawler.modules.oceanengine.service.IHotMaterialService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 
 @Service
 public class HotMaterialServiceImpl extends ServiceImpl<HotMaterialMapper, HotMaterial> implements IHotMaterialService {
+    @Override
+    public IPage<HotMaterial> queryHotFeeds(String userName, String start, String end, String orderByColumn, String orderByType, Integer pageNo, Integer pageSize) {
+        QueryWrapper<HotMaterial> queryWrapper = new QueryWrapper<>();
+        if (null != userName && !"".equals(userName)) {
+            queryWrapper.like("author", "%" + userName + "%");
+        }
+        if (null != start && !"".equals(start) && null != end && !"".equals(end)) {
+            queryWrapper.between("create_time", start, end);
+        }
+        if (null != orderByType && orderByType.equals("desc")) {
+            queryWrapper.orderByDesc(orderByColumn);
+        } else {
+            queryWrapper.orderByAsc(orderByColumn);
+        }
+        Page<HotMaterial> page = new Page<>(pageNo, pageSize);
+        return this.page(page, queryWrapper);
+    }
 }