فهرست منبع

Merge remote-tracking branch 'origin/V1.1.1' into V1.1.1

syh 4 سال پیش
والد
کامیت
decd481877
75فایلهای تغییر یافته به همراه2215 افزوده شده و 576 حذف شده
  1. 0 203
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/MaterialCutFrameController.java
  2. 64 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/MaterialVideoAuthorController.java
  3. 113 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/MaterialVideoCoverController.java
  4. 96 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/MaterialVideoFrameController.java
  5. 80 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/MaterialVideoInfoController.java
  6. 84 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/MaterialVideoProjectController.java
  7. 62 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/MaterialVideoWatermarkController.java
  8. 4 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/controller/DesignerCommitProcessCtrl.java
  9. 4 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/controller/OperatorApprovalProcessCtrl.java
  10. 40 6
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/controller/PlatformFileCtrl.java
  11. 63 10
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/controller/PlatformMaterialCtrl.java
  12. 124 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/controller/PlatformScriptController.java
  13. 76 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/controller/PlatformVideoController.java
  14. 41 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/entity/PlatformScript.java
  15. 46 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/entity/PlatformVideo.java
  16. 6 2
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/mapper/PlatformMaterialMapper.java
  17. 11 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/mapper/PlatformScriptMapper.java
  18. 14 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/mapper/PlatformVideoMapper.java
  19. 34 16
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/mapper/xml/PlatformMaterialMapper.xml
  20. 5 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/mapper/xml/PlatformScriptMapper.xml
  21. 13 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/mapper/xml/PlatformVideoMapper.xml
  22. 17 2
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/service/IPlatformMaterialService.java
  23. 11 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/service/IPlatformScriptService.java
  24. 14 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/service/IPlatformVideoService.java
  25. 160 13
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/service/impl/PlatformMaterialServiceImpl.java
  26. 1 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/service/impl/PlatformOrderServiceImpl.java
  27. 15 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/service/impl/PlatformScriptServiceImpl.java
  28. 146 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/service/impl/PlatformVideoServiceImpl.java
  29. 94 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/util/ApprovalNodeNoticeHandler.java
  30. 1 1
      jeecg-boot-module-system/src/main/resources/application-test.yml
  31. 9 24
      module-alarm/src/main/java/cn/com/ctop/alarm/modules/constant/MatchLogic.java
  32. 6 6
      module-check/src/main/java/cn/com/ctop/notice/handler/SendWeChatHandle.java
  33. 2 0
      module-common/src/main/java/cn/com/ctop/common/module/mapper/ProjectMapper.java
  34. 4 0
      module-common/src/main/java/cn/com/ctop/common/module/mapper/xml/ProjectMapper.xml
  35. 46 0
      module-common/src/main/java/cn/com/ctop/common/module/material/entity/MaterialVideoAuthor.java
  36. 40 0
      module-common/src/main/java/cn/com/ctop/common/module/material/entity/MaterialVideoCover.java
  37. 30 0
      module-common/src/main/java/cn/com/ctop/common/module/material/entity/MaterialVideoFrame.java
  38. 46 0
      module-common/src/main/java/cn/com/ctop/common/module/material/entity/MaterialVideoInfo.java
  39. 28 0
      module-common/src/main/java/cn/com/ctop/common/module/material/entity/MaterialVideoProject.java
  40. 32 0
      module-common/src/main/java/cn/com/ctop/common/module/material/entity/MaterialVideoWatermark.java
  41. 11 0
      module-common/src/main/java/cn/com/ctop/common/module/material/mapper/MaterialVideoAuthorMapper.java
  42. 14 0
      module-common/src/main/java/cn/com/ctop/common/module/material/mapper/MaterialVideoCoverMapper.java
  43. 14 0
      module-common/src/main/java/cn/com/ctop/common/module/material/mapper/MaterialVideoFrameMapper.java
  44. 14 0
      module-common/src/main/java/cn/com/ctop/common/module/material/mapper/MaterialVideoInfoMapper.java
  45. 11 0
      module-common/src/main/java/cn/com/ctop/common/module/material/mapper/MaterialVideoProjectMapper.java
  46. 11 0
      module-common/src/main/java/cn/com/ctop/common/module/material/mapper/MaterialVideoWatermarkMapper.java
  47. 5 0
      module-common/src/main/java/cn/com/ctop/common/module/material/mapper/xml/MaterialVideoAuthorMapper.xml
  48. 13 0
      module-common/src/main/java/cn/com/ctop/common/module/material/mapper/xml/MaterialVideoCoverMapper.xml
  49. 8 0
      module-common/src/main/java/cn/com/ctop/common/module/material/mapper/xml/MaterialVideoFrameMapper.xml
  50. 8 0
      module-common/src/main/java/cn/com/ctop/common/module/material/mapper/xml/MaterialVideoInfoMapper.xml
  51. 5 0
      module-common/src/main/java/cn/com/ctop/common/module/material/mapper/xml/MaterialVideoProjectMapper.xml
  52. 5 0
      module-common/src/main/java/cn/com/ctop/common/module/material/mapper/xml/MaterialVideoWatermarkMapper.xml
  53. 11 0
      module-common/src/main/java/cn/com/ctop/common/module/material/service/IMaterialVideoAuthorService.java
  54. 13 0
      module-common/src/main/java/cn/com/ctop/common/module/material/service/IMaterialVideoCoverService.java
  55. 15 0
      module-common/src/main/java/cn/com/ctop/common/module/material/service/IMaterialVideoFrameService.java
  56. 13 0
      module-common/src/main/java/cn/com/ctop/common/module/material/service/IMaterialVideoInfoService.java
  57. 11 0
      module-common/src/main/java/cn/com/ctop/common/module/material/service/IMaterialVideoProjectService.java
  58. 11 0
      module-common/src/main/java/cn/com/ctop/common/module/material/service/IMaterialVideoWatermarkService.java
  59. 15 0
      module-common/src/main/java/cn/com/ctop/common/module/material/service/impl/MaterialVideoAuthorServiceImpl.java
  60. 23 0
      module-common/src/main/java/cn/com/ctop/common/module/material/service/impl/MaterialVideoCoverServiceImpl.java
  61. 82 0
      module-common/src/main/java/cn/com/ctop/common/module/material/service/impl/MaterialVideoFrameServiceImpl.java
  62. 23 0
      module-common/src/main/java/cn/com/ctop/common/module/material/service/impl/MaterialVideoInfoServiceImpl.java
  63. 15 0
      module-common/src/main/java/cn/com/ctop/common/module/material/service/impl/MaterialVideoProjectServiceImpl.java
  64. 15 0
      module-common/src/main/java/cn/com/ctop/common/module/material/service/impl/MaterialVideoWatermarkServiceImpl.java
  65. 0 6
      module-common/src/main/java/cn/com/ctop/common/module/service/IMaterialCutFrameService.java
  66. 2 0
      module-common/src/main/java/cn/com/ctop/common/module/service/IProjectService.java
  67. 1 166
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/MaterialCutFrameServiceImpl.java
  68. 1 6
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/MaterialInfoServiceImpl.java
  69. 6 3
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/MaterialTagInfoServiceImpl.java
  70. 5 0
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/ProjectServiceImpl.java
  71. 84 105
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/entity/KuaishouReportDailyImage.java
  72. 2 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/service/IKuaishouReportDailyImageService.java
  73. 65 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/service/impl/KuaishouReportDailyImageServiceImpl.java
  74. 0 5
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/material/entity/ByteDanceAdvertisePlan.java
  75. 1 1
      module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/service/impl/ReportServiceImpl.java

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

@@ -47,12 +47,6 @@ public class MaterialCutFrameController {
 
     /**
      * 分页列表查询
-     *
-     * @param materialCutFrame
-     * @param pageNo
-     * @param pageSize
-     * @param req
-     * @return
      */
     @AutoLog(value = "截屏-分页列表查询")
     @ApiOperation(value = "截屏-分页列表查询", notes = "截屏-分页列表查询")
@@ -73,201 +67,4 @@ public class MaterialCutFrameController {
         result.setResult(pageList);
         return result;
     }
-
-
-    /**
-     * 添加
-     *
-     * @param materialCutFrame
-     * @return
-     */
-    @AutoLog(value = "截屏-添加")
-    @ApiOperation(value = "截屏-添加", notes = "截屏-添加")
-    @PostMapping(value = "/add")
-    public Result<MaterialCutFrame> add(@RequestBody MaterialCutFrame materialCutFrame) {
-        Result<MaterialCutFrame> result = new Result<MaterialCutFrame>();
-        try {
-            materialCutFrameService.save(materialCutFrame);
-            result.success("添加成功!");
-        } catch (Exception e) {
-            log.error(e.getMessage(), e);
-            result.error500("操作失败");
-        }
-        return result;
-    }
-
-    /**
-     * 编辑
-     *
-     * @param materialCutFrame
-     * @return
-     */
-    @AutoLog(value = "截屏-编辑")
-    @ApiOperation(value = "截屏-编辑", notes = "截屏-编辑")
-    @PutMapping(value = "/edit")
-    public Result<MaterialCutFrame> edit(@RequestBody MaterialCutFrame materialCutFrame) {
-        Result<MaterialCutFrame> result = new Result<MaterialCutFrame>();
-        MaterialCutFrame materialCutFrameEntity = materialCutFrameService.getById(materialCutFrame.getId());
-        if (materialCutFrameEntity == null) {
-            result.error500("未找到对应实体");
-        } else {
-            boolean ok = materialCutFrameService.updateById(materialCutFrame);
-            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 {
-            materialCutFrameService.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<MaterialCutFrame> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
-        Result<MaterialCutFrame> result = new Result<MaterialCutFrame>();
-        if (ids == null || "".equals(ids.trim())) {
-            result.error500("参数不识别!");
-        } else {
-            this.materialCutFrameService.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<MaterialCutFrame> queryById(@RequestParam(name = "id", required = true) String id) {
-        Result<MaterialCutFrame> result = new Result<MaterialCutFrame>();
-        MaterialCutFrame materialCutFrame = materialCutFrameService.getById(id);
-        if (materialCutFrame == null) {
-            result.error500("未找到对应实体");
-        } else {
-            result.setResult(materialCutFrame);
-            result.setSuccess(true);
-        }
-        return result;
-    }
-
-
-    @AutoLog(value = "腾讯云抽帧按照素材创建时间筛选素材进行抽帧操作")
-    @ApiOperation(value = "腾讯云抽帧", notes = "腾讯云抽帧")
-    @GetMapping(value = "/getCosCutFrameByTime")
-    public Result getCosCutFrameByTime(@RequestParam(name = "startDate", required = true) String startDate,
-                                 @RequestParam(name = "endDate", required = true) String endDate) {
-        Result result = new Result();
-        result.setSuccess(true);
-
-        try {
-            List<MaterialInfo> materialInfos = materialInfoService.getListByDate(startDate, endDate);
-            if (!Check.isNull(materialInfos)) {
-                for (MaterialInfo materialInfo : materialInfos) {
-                    if (!Check.isNull(materialInfo)) {
-                        String code = materialInfo.getCode();
-                        materialCutFrameService.getCosCutFrame(materialInfo.getUrl(), code);
-                    }
-                }
-            }
-        }catch (Exception e){
-            log.error(e.getMessage());
-            e.printStackTrace();
-            result.setSuccess(false);
-        }
-
-        return result;
-    }
-
-    @AutoLog(value = "腾讯云抽帧--根据md5抽帧")
-    @ApiOperation(value = "腾讯云抽帧", notes = "腾讯云抽帧")
-    @GetMapping(value = "/getCosCutFrame")
-    public Result getCosCutFrame(@RequestParam(name = "code", required = true) String code) {
-        Result result = new Result();
-        result.setSuccess(true);
-
-        try {
-            MaterialInfo materialInfo = materialInfoService.getMaterialInfoByCode(code);
-            if (!Check.isNull(materialInfo)) {
-                materialCutFrameService.getCosCutFrame(materialInfo.getUrl(), code);
-            }
-        }catch (Exception e){
-            log.error(e.getMessage());
-            e.printStackTrace();
-            result.setSuccess(false);
-        }
-
-        return result;
-    }
-
-
-    @AutoLog(value = "腾讯云抽帧--获取任务状态并将图片入库")
-    @ApiOperation(value = "腾讯云抽帧", notes = "腾讯云抽帧")
-    @GetMapping(value = "/loadCosCutFrame")
-    public Result loadCosCutFrame() {
-        Result result = new Result();
-        result.setSuccess(true);
-
-        log.info("开始抽帧定时任务");
-        QueryWrapper<MaterialCutFrameTask> taskQueryWrapper = new QueryWrapper<>();
-        taskQueryWrapper.eq("job_status", 0);
-        taskQueryWrapper.eq("cloud_type",2);  //2为腾讯云 1为阿里云
-        List<MaterialCutFrameTask> list = materialCutFrameTaskServiceTask.list(taskQueryWrapper);
-
-        if (Check.isNull(list)) {
-            result.setCode(500);
-            result.setSuccess(false);
-            return result;
-        }
-
-        ExecutorService executorService = Executors.newFixedThreadPool(5);
-        list.forEach(cutFrameTask -> {
-            executorService.submit(new Runnable() {
-                @Override
-                public void run() {
-                    try {
-                    //获取广告计划信息数据
-                    materialCutFrameService.loadCosCutFrame(cutFrameTask.getJobId(), cutFrameTask.getVideoSignature());
-                    }catch (Exception e){
-                        log.error(e.getMessage());
-                        e.printStackTrace();
-                    }
-                }
-            });
-        });
-
-        return result;
-    }
-
-
-
 }

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

@@ -0,0 +1,64 @@
+package org.jeecg.modules.ctop.controller;
+
+import cn.com.ctop.common.module.material.entity.MaterialVideoAuthor;
+import cn.com.ctop.common.module.material.service.IMaterialVideoAuthorService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+
+
+/**
+ * 视频素材作者信息
+ */
+@Slf4j
+@RestController
+@RequestMapping("/com.cn/materialVideoAuthor")
+public class MaterialVideoAuthorController {
+	@Autowired
+	private IMaterialVideoAuthorService materialVideoAuthorService;
+
+	/**
+     * 分页列表查询
+	 */
+	@GetMapping(value = "/list")
+	public Result<IPage<MaterialVideoAuthor>> queryPageList(MaterialVideoAuthor materialVideoAuthor,
+                                                            @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+                                                            @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+                                                            HttpServletRequest req) {
+		Result<IPage<MaterialVideoAuthor>> result = new Result<>();
+		QueryWrapper<MaterialVideoAuthor> queryWrapper = QueryGenerator.initQueryWrapper(materialVideoAuthor, req.getParameterMap());
+		Page<MaterialVideoAuthor> page = new Page<>(pageNo, pageSize);
+		IPage<MaterialVideoAuthor> pageList = materialVideoAuthorService.page(page, queryWrapper);
+		result.setSuccess(true);
+		result.setResult(pageList);
+		return result;
+	}
+
+	/**
+     *  编辑
+	 */
+	@PostMapping(value = "/edit")
+	public Result<MaterialVideoAuthor> edit(@RequestBody MaterialVideoAuthor materialVideoAuthor) {
+		Result<MaterialVideoAuthor> result = new Result<MaterialVideoAuthor>();
+		MaterialVideoAuthor materialVideoAuthorEntity = materialVideoAuthorService.getById(materialVideoAuthor.getId());
+		if(materialVideoAuthorEntity==null) {
+			result.error500("未找到对应实体");
+		}else {
+			boolean ok = materialVideoAuthorService.updateById(materialVideoAuthor);
+			if(ok) {
+				result.success("修改成功!");
+			}
+		}
+
+		return result;
+	}
+
+}

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

@@ -0,0 +1,113 @@
+package org.jeecg.modules.ctop.controller;
+
+import java.util.Arrays;
+
+import javax.servlet.http.HttpServletRequest;
+
+import cn.com.ctop.common.module.material.entity.MaterialVideoCover;
+import cn.com.ctop.common.module.material.service.IMaterialVideoCoverService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import io.swagger.annotations.ApiOperation;
+
+ /**
+ * 视频素材封面信息
+ */
+@Slf4j
+@RestController
+@RequestMapping("/com.cn/materialVideoCover")
+public class MaterialVideoCoverController {
+
+	@Autowired
+	private IMaterialVideoCoverService materialVideoCoverService;
+
+	/**
+	 * 分页列表查询
+	 */
+	@GetMapping(value = "/list")
+	public Result<IPage<MaterialVideoCover>> queryPageList(MaterialVideoCover materialVideoCover,
+														   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+														   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+														   HttpServletRequest req) {
+		Result<IPage<MaterialVideoCover>> result = new Result<>();
+		QueryWrapper<MaterialVideoCover> queryWrapper = QueryGenerator.initQueryWrapper(materialVideoCover, req.getParameterMap());
+		Page<MaterialVideoCover> page = new Page<>(pageNo, pageSize);
+		IPage<MaterialVideoCover> pageList = materialVideoCoverService.page(page, queryWrapper);
+		result.setSuccess(true);
+		result.setResult(pageList);
+		return result;
+	}
+
+	/**
+	 *  编辑
+	 */
+	@PostMapping(value = "/edit")
+	public Result<MaterialVideoCover> edit(@RequestBody MaterialVideoCover materialVideoCover) {
+		Result<MaterialVideoCover> result = new Result<MaterialVideoCover>();
+		MaterialVideoCover materialVideoCoverEntity = materialVideoCoverService.getById(materialVideoCover.getId());
+		if(materialVideoCoverEntity==null) {
+			result.error500("未找到对应实体");
+		}else {
+			boolean ok = materialVideoCoverService.updateById(materialVideoCover);
+			if(ok) {
+				result.success("修改成功!");
+			}
+		}
+		return result;
+	}
+
+	/**
+	 *   通过id删除
+	 */
+	@PostMapping(value = "/delete")
+	public Result<?> delete(@RequestParam(name="id",required=true) String id) {
+		try {
+			materialVideoCoverService.removeById(id);
+		} catch (Exception e) {
+			log.error("删除失败",e.getMessage());
+			return Result.error("删除失败!");
+		}
+		return Result.ok("删除成功!");
+	}
+
+	/**
+	 *  批量删除
+	 */
+	@ApiOperation(value="视频素材封面信息-批量删除", notes="视频素材封面信息-批量删除")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<MaterialVideoCover> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		Result<MaterialVideoCover> result = new Result<>();
+		if(ids==null || "".equals(ids.trim())) {
+			result.error500("参数不识别!");
+		}else {
+			this.materialVideoCoverService.removeByIds(Arrays.asList(ids.split(",")));
+			result.success("删除成功!");
+		}
+		return result;
+	}
+
+	/**
+	 * 通过id查询
+	 */
+	@GetMapping(value = "/queryById")
+	public Result<MaterialVideoCover> queryById(@RequestParam(name="id",required=true) String id) {
+		Result<MaterialVideoCover> result = new Result<>();
+		MaterialVideoCover materialVideoCover = materialVideoCoverService.getById(id);
+		if(materialVideoCover==null) {
+			result.error500("未找到对应实体");
+		}else {
+			result.setResult(materialVideoCover);
+			result.setSuccess(true);
+		}
+		return result;
+	}
+
+}

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

@@ -0,0 +1,96 @@
+package org.jeecg.modules.ctop.controller;
+
+import javax.servlet.http.HttpServletRequest;
+
+import cn.com.ctop.common.module.material.entity.MaterialVideoFrame;
+import cn.com.ctop.common.module.material.service.IMaterialVideoFrameService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+ /**
+ * 视频素材截帧信息
+ */
+@Slf4j
+@RestController
+@RequestMapping("/com.cn/materialVideoFrame")
+public class MaterialVideoFrameController {
+	@Autowired
+	private IMaterialVideoFrameService materialVideoFrameService;
+
+	/**
+	  * 分页列表查询
+	 */
+	@GetMapping(value = "/list")
+	public Result<IPage<MaterialVideoFrame>> queryPageList(MaterialVideoFrame materialVideoFrame,
+														   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+														   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+														   HttpServletRequest req) {
+		Result<IPage<MaterialVideoFrame>> result = new Result<>();
+		QueryWrapper<MaterialVideoFrame> queryWrapper = QueryGenerator.initQueryWrapper(materialVideoFrame, req.getParameterMap());
+		Page<MaterialVideoFrame> page = new Page<>(pageNo, pageSize);
+		IPage<MaterialVideoFrame> pageList = materialVideoFrameService.page(page, queryWrapper);
+		result.setSuccess(true);
+		result.setResult(pageList);
+		return result;
+	}
+
+	/**
+	 *   添加
+	 */
+	@PostMapping(value = "/add")
+	public Result<MaterialVideoFrame> add(@RequestBody MaterialVideoFrame materialVideoFrame) {
+		Result<MaterialVideoFrame> result = new Result<>();
+		try {
+			materialVideoFrameService.save(materialVideoFrame);
+			result.success("添加成功!");
+		} catch (Exception e) {
+			log.error(e.getMessage(),e);
+			result.error500("操作失败");
+		}
+		return result;
+	}
+
+	/**
+	 *  编辑
+	 */
+	@PutMapping(value = "/edit")
+	public Result<MaterialVideoFrame> edit(@RequestBody MaterialVideoFrame materialVideoFrame) {
+		Result<MaterialVideoFrame> result = new Result<MaterialVideoFrame>();
+		MaterialVideoFrame materialVideoFrameEntity = materialVideoFrameService.getById(materialVideoFrame.getId());
+		if(materialVideoFrameEntity==null) {
+			result.error500("未找到对应实体");
+		}else {
+			boolean ok = materialVideoFrameService.updateById(materialVideoFrame);
+			if(ok) {
+				result.success("修改成功!");
+			}
+		}
+
+		return result;
+	}
+
+	/**
+	 * 通过id查
+	 */
+	@GetMapping(value = "/queryById")
+	public Result<MaterialVideoFrame> queryById(@RequestParam(name="id",required=true) String id) {
+		Result<MaterialVideoFrame> result = new Result<>();
+		MaterialVideoFrame materialVideoFrame = materialVideoFrameService.getById(id);
+		if(materialVideoFrame==null) {
+			result.error500("未找到对应实体");
+		}else {
+			result.setResult(materialVideoFrame);
+			result.setSuccess(true);
+		}
+		return result;
+	}
+
+}

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

@@ -0,0 +1,80 @@
+package org.jeecg.modules.ctop.controller;
+
+import javax.servlet.http.HttpServletRequest;
+
+import cn.com.ctop.common.module.material.entity.MaterialVideoInfo;
+import cn.com.ctop.common.module.material.service.IMaterialVideoInfoService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+ /**
+ * 视频素材基础信息
+ */
+@Slf4j
+@RestController
+@RequestMapping("/com.cn/materialVideoInfo")
+public class MaterialVideoInfoController {
+	@Autowired
+	private IMaterialVideoInfoService materialVideoInfoService;
+
+	/**
+	  * 分页列表查询
+	 */
+	@GetMapping(value = "/list")
+	public Result<IPage<MaterialVideoInfo>> queryPageList(MaterialVideoInfo materialVideoInfo,
+														  @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+														  @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+														  HttpServletRequest req) {
+		Result<IPage<MaterialVideoInfo>> result = new Result<>();
+		QueryWrapper<MaterialVideoInfo> queryWrapper = QueryGenerator.initQueryWrapper(materialVideoInfo, req.getParameterMap());
+		Page<MaterialVideoInfo> page = new Page(pageNo, pageSize);
+		IPage<MaterialVideoInfo> pageList = materialVideoInfoService.page(page, queryWrapper);
+		result.setSuccess(true);
+		result.setResult(pageList);
+		return result;
+	}
+
+	/**
+	 *   添加
+	 */
+	@PostMapping(value = "/add")
+	public Result<MaterialVideoInfo> add(@RequestBody MaterialVideoInfo materialVideoInfo) {
+		Result<MaterialVideoInfo> result = new Result<>();
+		try {
+			materialVideoInfoService.save(materialVideoInfo);
+			result.success("添加成功!");
+		} catch (Exception e) {
+			log.error(e.getMessage(),e);
+			result.error500("操作失败");
+		}
+		return result;
+	}
+
+	/**
+	  *  编辑
+	 */
+	@PutMapping(value = "/edit")
+	public Result<MaterialVideoInfo> edit(@RequestBody MaterialVideoInfo materialVideoInfo) {
+		Result<MaterialVideoInfo> result = new Result<MaterialVideoInfo>();
+		MaterialVideoInfo materialVideoInfoEntity = materialVideoInfoService.getById(materialVideoInfo.getId());
+		if(materialVideoInfoEntity==null) {
+			result.error500("未找到对应实体");
+		}else {
+			boolean ok = materialVideoInfoService.updateById(materialVideoInfo);
+			if(ok) {
+				result.success("修改成功!");
+			}
+		}
+
+		return result;
+	}
+
+}

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

@@ -0,0 +1,84 @@
+package org.jeecg.modules.ctop.controller;
+
+import javax.servlet.http.HttpServletRequest;
+
+import cn.com.ctop.common.module.annotation.AutoLog;
+import cn.com.ctop.common.module.material.entity.MaterialVideoProject;
+import cn.com.ctop.common.module.material.service.IMaterialVideoProjectService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+
+import lombok.extern.slf4j.Slf4j;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import io.swagger.annotations.ApiOperation;
+
+ /**
+ * 视频素材关联项目信息
+ */
+@Slf4j
+@RestController
+@RequestMapping("/com.cn/materialVideoProject")
+public class MaterialVideoProjectController {
+
+	@Autowired
+	private IMaterialVideoProjectService materialVideoProjectService;
+
+	/**
+	  * 分页列表查询
+	 */
+	@GetMapping(value = "/list")
+	public Result<IPage<MaterialVideoProject>> queryPageList(MaterialVideoProject materialVideoProject,
+															 @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+															 @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+															 HttpServletRequest req) {
+		Result<IPage<MaterialVideoProject>> result = new Result<>();
+		QueryWrapper<MaterialVideoProject> queryWrapper = QueryGenerator.initQueryWrapper(materialVideoProject, req.getParameterMap());
+		Page<MaterialVideoProject> page = new Page<>(pageNo, pageSize);
+		IPage<MaterialVideoProject> pageList = materialVideoProjectService.page(page, queryWrapper);
+		result.setSuccess(true);
+		result.setResult(pageList);
+		return result;
+	}
+
+	/**
+	 *   添加
+	 */
+	@AutoLog(value = "视频素材关联项目信息-添加")
+	@ApiOperation(value="视频素材关联项目信息-添加", notes="视频素材关联项目信息-添加")
+	@PostMapping(value = "/add")
+	public Result<MaterialVideoProject> add(@RequestBody MaterialVideoProject materialVideoProject) {
+		Result<MaterialVideoProject> result = new Result<>();
+		try {
+			materialVideoProjectService.save(materialVideoProject);
+			result.success("添加成功!");
+		} catch (Exception e) {
+			log.error(e.getMessage(),e);
+			result.error500("操作失败");
+		}
+		return result;
+	}
+
+	/**
+	  *  编辑
+	 */
+	@PutMapping(value = "/edit")
+	public Result<MaterialVideoProject> edit(@RequestBody MaterialVideoProject materialVideoProject) {
+		Result<MaterialVideoProject> result = new Result<MaterialVideoProject>();
+		MaterialVideoProject materialVideoProjectEntity = materialVideoProjectService.getById(materialVideoProject.getId());
+		if(materialVideoProjectEntity==null) {
+			result.error500("未找到对应实体");
+		}else {
+			boolean ok = materialVideoProjectService.updateById(materialVideoProject);
+			if(ok) {
+				result.success("修改成功!");
+			}
+		}
+
+		return result;
+	}
+}

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

@@ -0,0 +1,62 @@
+package org.jeecg.modules.ctop.controller;
+
+import javax.servlet.http.HttpServletRequest;
+
+import cn.com.ctop.common.module.material.entity.MaterialVideoWatermark;
+import cn.com.ctop.common.module.material.service.IMaterialVideoWatermarkService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+
+import lombok.extern.slf4j.Slf4j;
+
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+ /**
+ * 视频素材水印信息
+ */
+@Slf4j
+@RestController
+@RequestMapping("/com.cn/materialVideoWatermark")
+public class MaterialVideoWatermarkController {
+	@Autowired
+	private IMaterialVideoWatermarkService materialVideoWatermarkService;
+
+	/**
+	  * 分页列表查询
+	 */
+	@GetMapping(value = "/list")
+	public Result<IPage<MaterialVideoWatermark>> queryPageList(MaterialVideoWatermark materialVideoWatermark,
+															   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+															   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+															   HttpServletRequest req) {
+		Result<IPage<MaterialVideoWatermark>> result = new Result<>();
+		QueryWrapper<MaterialVideoWatermark> queryWrapper = QueryGenerator.initQueryWrapper(materialVideoWatermark, req.getParameterMap());
+		Page<MaterialVideoWatermark> page = new Page<>(pageNo, pageSize);
+		IPage<MaterialVideoWatermark> pageList = materialVideoWatermarkService.page(page, queryWrapper);
+		result.setSuccess(true);
+		result.setResult(pageList);
+		return result;
+	}
+
+	/**
+	 *   添加
+	 */
+	@PostMapping(value = "/add")
+	public Result<MaterialVideoWatermark> add(@RequestBody MaterialVideoWatermark materialVideoWatermark) {
+		Result<MaterialVideoWatermark> result = new Result<>();
+		try {
+			materialVideoWatermarkService.save(materialVideoWatermark);
+			result.success("添加成功!");
+		} catch (Exception e) {
+			log.error(e.getMessage(),e);
+			result.error500("操作失败");
+		}
+		return result;
+	}
+
+}

+ 4 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/controller/DesignerCommitProcessCtrl.java

@@ -6,6 +6,7 @@ import org.jeecg.modules.orderplatform.entity.PlatformMaterial;
 import org.jeecg.modules.orderplatform.entity.PlatformOrder;
 import org.jeecg.modules.orderplatform.service.IPlatformMaterialService;
 import org.jeecg.modules.orderplatform.service.IPlatformOrderService;
+import org.jeecg.modules.orderplatform.util.ApprovalNodeNoticeHandler;
 import org.jeecg.modules.orderplatform.util.OperateRecordHandler;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -28,6 +29,9 @@ DesignerCommitProcessCtrl {
     @Autowired
     private OperateRecordHandler operateRecordHandler;
 
+    @Autowired
+    private ApprovalNodeNoticeHandler approvalNodeNoticeHandler;
+
     /**
      * 设计组长接单,根据订单中的物料数量按类型发起物料审批流程
      */

+ 4 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/controller/OperatorApprovalProcessCtrl.java

@@ -4,6 +4,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.modules.orderplatform.entity.PlatformOrder;
 import org.jeecg.modules.orderplatform.service.IPlatformOrderService;
+import org.jeecg.modules.orderplatform.util.ApprovalNodeNoticeHandler;
 import org.jeecg.modules.orderplatform.util.OperateRecordHandler;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -24,6 +25,9 @@ public class OperatorApprovalProcessCtrl {
     @Autowired
     private OperateRecordHandler operateRecordHandler;
 
+    @Autowired
+    private ApprovalNodeNoticeHandler approvalNodeNoticeHandler;
+
     /**
      * 运营下单
      */

+ 40 - 6
jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/controller/PlatformFileCtrl.java

@@ -1,8 +1,8 @@
 package org.jeecg.modules.orderplatform.controller;
 
-import cn.com.ctop.common.module.service.IMaterialInfoService;
 import cn.com.ctop.common.module.utils.CosUtils;
 import com.alibaba.fastjson.JSONObject;
+import com.xxl.job.core.biz.model.ReturnT;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.api.vo.Result;
@@ -10,6 +10,7 @@ import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.util.DateUtils;
 import org.jeecg.modules.orderplatform.entity.PlatformMaterial;
 import org.jeecg.modules.orderplatform.service.IPlatformMaterialService;
+import org.jeecg.modules.orderplatform.service.IPlatformVideoService;
 import org.jeecg.modules.orderplatform.util.OperateRecordHandler;
 import org.jeecg.modules.wps.entity.WpsFile;
 import org.jeecg.modules.wps.service.IWpsFileService;
@@ -31,10 +32,10 @@ import java.util.Map;
 public class PlatformFileCtrl {
 
     @Autowired
-    private IWpsFileService wpsFileService;
+    private IPlatformVideoService platformVideoService;
 
     @Autowired
-    private IMaterialInfoService materialInfoService;
+    private IWpsFileService wpsFileService;
 
     @Autowired
     private IPlatformMaterialService platformMaterialService;
@@ -110,8 +111,8 @@ public class PlatformFileCtrl {
      * 剪辑上传视频
      * Todo 在下单制正式上线后,这个接口会改造
      */
-    @PostMapping("/uploadVideo")
-    public Result<Object> uploadVideo(@RequestBody JSONObject requestBody) {
+/*    @PostMapping("/uploadVideo")
+    public Result<Object> uploadVideoOld(@RequestBody JSONObject requestBody) {
         Result<Object> result = new Result<>();
         String videoId = materialInfoService.platformUploadVideo(requestBody);
         if (videoId.isEmpty()) {
@@ -130,6 +131,39 @@ public class PlatformFileCtrl {
             }
         }
         return result;
-    }
+    }*/
 
+    /*
+     * 改造上传视频接口,视频上传后会存在下单制视频列表,审核通过后会被写入汇创思拓素材库ctop_material_video_info
+     * 下单制视频列表不会有删除操作,被驳回后标记逻辑删除
+     *  审批通过后视频关联信息被写入ctop_material_video_project、ctop_material_video_author、ctop_material_video_frame
+     *  ctop_material_video_cover、ctop_material_video_tag、ctop_material_video_watermark
+     */
+    @PostMapping("/uploadVideo")
+    public Result<Object> uploadVideo(@RequestBody JSONObject requestBody){
+        Result<Object> result = new Result<>();
+        //同一个视频不能出现在不同的物料下
+        int repeat=platformMaterialService.queryCountByMaterialAndVideo(requestBody.getString("materialCode"),requestBody.getString("md5"));
+        if(repeat>0){
+            result.error500("视频已被其他物料上传,请重新选择视频");
+            return result;
+        }
+        String videoMd5 = platformVideoService.uploadVideo(requestBody);
+        if(videoMd5.isEmpty()){
+            result.error500("素材视频上传失败,参数为空");
+        }else {
+            //物料状态->视频已上传,待审核
+            PlatformMaterial platformMaterial = new PlatformMaterial();
+            platformMaterial.setId(requestBody.getLong("materialId"));
+            platformMaterial.setMaterialStatus(5);
+            platformMaterial.setVideoStatus(1);
+            platformMaterial.setVideoId(videoMd5);
+            boolean save = platformMaterialService.updateById(platformMaterial);
+            if (save) {
+                operateRecordHandler.Submit(platformMaterialService.getById(requestBody.getString("materialId")).getMaterialCode(), "VIDEO");
+                result.success("素材视频上传成功");
+            }
+        }
+        return result;
+    }
 }

+ 63 - 10
jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/controller/PlatformMaterialCtrl.java

@@ -7,6 +7,7 @@ import com.github.pagehelper.PageInfo;
 import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.modules.orderplatform.entity.PlatformMaterial;
+import org.jeecg.modules.orderplatform.entity.PlatformScript;
 import org.jeecg.modules.orderplatform.service.IPlatformMaterialService;
 import org.jeecg.modules.orderplatform.service.IPlatformOrderService;
 import org.jeecg.modules.orderplatform.util.DictHandler;
@@ -16,6 +17,7 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 物料审批流程
@@ -42,14 +44,14 @@ public class PlatformMaterialCtrl {
      */
     @GetMapping(value = "/listByOrderCode")
     public Result<PageInfo<PlatformMaterial>> listByOrderCode(PlatformMaterial platformMaterial,
-                                                         @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
-                                                         @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
-                                                         HttpServletRequest req) {
+                                                              @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                              @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                              HttpServletRequest req) {
         Result<PageInfo<PlatformMaterial>> result = new Result<>();
         QueryWrapper<PlatformMaterial> queryWrapper = new QueryWrapper<>();
         queryWrapper.setEntity(platformMaterial);
-        PageHelper.startPage(pageNo,pageSize);
-        List<PlatformMaterial> platformMaterialList= platformMaterialService.list(queryWrapper);
+        PageHelper.startPage(pageNo, pageSize);
+        List<PlatformMaterial> platformMaterialList = platformMaterialService.list(queryWrapper);
         result.setSuccess(true);
         result.setResult(new PageInfo<>(dictHandler.dictHandlerMaterial(platformMaterialList)));
         return result;
@@ -86,6 +88,22 @@ public class PlatformMaterialCtrl {
         return result;
     }
 
+    /**
+     * 脚本是否可更新
+     */
+    @GetMapping(value = "/verifyScript")
+    public Result<Object> verifyScript(String materialCode, String scriptId) {
+        Result<Object> result = new Result<>();
+        QueryWrapper<PlatformMaterial> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("material_code", materialCode);
+        PlatformMaterial platformMaterial = platformMaterialService.getOne(queryWrapper);
+        if (platformMaterial.getScriptId().equals(scriptId)) {
+            result.setSuccess(true);
+        } else {
+            result.error500("脚本信息已被更改,请刷新后操作");
+        }
+        return result;
+    }
 
     /**
      * 运营审核脚本
@@ -99,7 +117,7 @@ public class PlatformMaterialCtrl {
         platformMaterial.setVideoStatus(0);
         boolean ok = platformMaterialService.updateById(platformMaterial);
         if (ok) {
-            operateRecordHandler.Approval(platformMaterial.getMaterialCode(),"ACCEPT_SCRIPT");
+            operateRecordHandler.Approval(platformMaterial.getMaterialCode(), "ACCEPT_SCRIPT");
             result.success("脚本审核通过!");
         } else {
             result.error500("脚本审核失败!请联系管理员");
@@ -116,7 +134,7 @@ public class PlatformMaterialCtrl {
         platformMaterial.setScriptStatus(2);
         boolean ok = platformMaterialService.updateById(platformMaterial);
         if (ok) {
-            operateRecordHandler.Approval(platformMaterial.getMaterialCode(),"REJECT_SCRIPT");
+            operateRecordHandler.Approval(platformMaterial.getMaterialCode(), "REJECT_SCRIPT");
             result.success("脚本已驳回!");
         } else {
             result.error500("脚本驳回失败!请联系管理员");
@@ -137,11 +155,34 @@ public class PlatformMaterialCtrl {
     }
 
     /**
+     * 视频是否可以更新
+     */
+    @GetMapping(value = "/verifyVideo")
+    public Result<Object> verifyVideo(String materialCode, String videoId) {
+        Result<Object> result = new Result<>();
+        QueryWrapper<PlatformMaterial> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("material_code", materialCode);
+        PlatformMaterial platformMaterial = platformMaterialService.getOne(queryWrapper);
+        if (platformMaterial.getVideoId().equals(videoId)) {
+            result.setSuccess(true);
+        } else {
+            result.error500("视频信息已被更改,请刷新后操作");
+        }
+        return result;
+    }
+
+    /**
      * 运营审核视频
      */
     @PostMapping(value = "/video/accept")
     public Result<Object> acceptVideo(@RequestBody PlatformMaterial platformMaterial) {
         Result<Object> result = new Result<>();
+        //视频通过同步到素材库
+        boolean sync = platformMaterialService.syncVideo2CTopMaterial(platformMaterial);
+        if (!sync) {
+            result.error500("视频同步素材库失败");
+            return result;
+        }
         //物料状态->视频审核通过
         platformMaterial.setMaterialStatus(7);
         platformMaterial.setVideoStatus(3);
@@ -150,9 +191,9 @@ public class PlatformMaterialCtrl {
             //更新订单的素材完成数
             boolean order = platformOrderService.updateOrderFinishAmount(platformMaterial.getOrderCode());
             if (order) {
-                operateRecordHandler.Approval(platformMaterial.getMaterialCode(),"ACCEPT_VIDEO");
+                operateRecordHandler.Approval(platformMaterial.getMaterialCode(), "ACCEPT_VIDEO");
                 //修改素材库审核状态
-                platformMaterialService.updateMaterialStatusById(platformMaterial.getVideoId());
+                //platformMaterialService.updateMaterialStatusById(platformMaterial.getVideoId());
                 result.success("视频审核通过!");
             }
         } else {
@@ -170,7 +211,7 @@ public class PlatformMaterialCtrl {
         platformMaterial.setVideoStatus(2);
         boolean ok = platformMaterialService.updateById(platformMaterial);
         if (ok) {
-            operateRecordHandler.Approval(platformMaterial.getMaterialCode(),"REJECT_VIDEO");
+            operateRecordHandler.Approval(platformMaterial.getMaterialCode(), "REJECT_VIDEO");
             result.success("视频已驳回!");
         } else {
             result.error500("视频驳回失败!请联系管理员");
@@ -190,4 +231,16 @@ public class PlatformMaterialCtrl {
         return result;
     }
 
+    /**
+     * 视频修改回显
+     */
+    @GetMapping(value = "/videoEcho")
+    public Result<Map<String, Object>> videoEcho(String videoId) {
+        Result<Map<String, Object>> result = new Result<>();
+        Map<String, Object> scriptDetail = platformMaterialService.videoEcho(videoId);
+        result.setResult(scriptDetail);
+        result.setSuccess(true);
+        return result;
+    }
+
 }

+ 124 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/controller/PlatformScriptController.java

@@ -0,0 +1,124 @@
+package org.jeecg.modules.orderplatform.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.modules.orderplatform.entity.PlatformScript;
+import org.jeecg.modules.orderplatform.service.IPlatformScriptService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Arrays;
+
+/**
+ * 下单平台关联脚本
+ */
+@Slf4j
+@RestController
+@RequestMapping("/com.cn/platformScript")
+public class PlatformScriptController {
+	@Autowired
+	private IPlatformScriptService platformScriptService;
+
+	/**
+	 * 分页列表查询
+	 */
+	@GetMapping(value = "/list")
+	public Result<IPage<PlatformScript>> queryPageList(PlatformScript platformScript,
+													   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+													   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+													   HttpServletRequest req) {
+		Result<IPage<PlatformScript>> result = new Result<>();
+		QueryWrapper<PlatformScript> queryWrapper = QueryGenerator.initQueryWrapper(platformScript, req.getParameterMap());
+		Page<PlatformScript> page = new Page<>(pageNo, pageSize);
+		IPage<PlatformScript> pageList = platformScriptService.page(page, queryWrapper);
+		result.setSuccess(true);
+		result.setResult(pageList);
+		return result;
+	}
+
+	/**
+	 *   添加
+	 */
+	@PostMapping(value = "/add")
+	public Result<PlatformScript> add(@RequestBody PlatformScript platformScript) {
+		Result<PlatformScript> result = new Result<>();
+		try {
+			platformScriptService.save(platformScript);
+			result.success("添加成功!");
+		} catch (Exception e) {
+			log.error(e.getMessage(),e);
+			result.error500("操作失败");
+		}
+		return result;
+	}
+
+	/**
+	 *  编辑
+	 */
+	@PostMapping(value = "/edit")
+	public Result<PlatformScript> edit(@RequestBody PlatformScript platformScript) {
+		Result<PlatformScript> result = new Result<PlatformScript>();
+		PlatformScript platformScriptEntity = platformScriptService.getById(platformScript.getId());
+		if(platformScriptEntity==null) {
+			result.error500("未找到对应实体");
+		}else {
+			boolean ok = platformScriptService.updateById(platformScript);
+			if(ok) {
+				result.success("修改成功!");
+			}
+		}
+
+		return result;
+	}
+
+	/**
+	 * 通过id删除
+	 */
+	@PostMapping(value = "/delete")
+	public Result<?> delete(@RequestParam(name="id",required=true) String id) {
+		try {
+			platformScriptService.removeById(id);
+		} catch (Exception e) {
+			log.error("删除失败",e.getMessage());
+			return Result.error("删除失败!");
+		}
+		return Result.ok("删除成功!");
+	}
+
+	/**
+	 *  批量删除
+	 */
+	@PostMapping(value = "/deleteBatch")
+	public Result<PlatformScript> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		Result<PlatformScript> result = new Result<>();
+		if(ids==null || "".equals(ids.trim())) {
+			result.error500("参数不识别!");
+		}else {
+			this.platformScriptService.removeByIds(Arrays.asList(ids.split(",")));
+			result.success("删除成功!");
+		}
+		return result;
+	}
+
+	/**
+	 * 通过id查询
+	 */
+	@GetMapping(value = "/queryById")
+	public Result<PlatformScript> queryById(@RequestParam(name="id",required=true) String id) {
+		Result<PlatformScript> result = new Result<>();
+		PlatformScript platformScript = platformScriptService.getById(id);
+		if(platformScript==null) {
+			result.error500("未找到对应实体");
+		}else {
+			result.setResult(platformScript);
+			result.setSuccess(true);
+		}
+		return result;
+	}
+
+}

+ 76 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/controller/PlatformVideoController.java

@@ -0,0 +1,76 @@
+package org.jeecg.modules.orderplatform.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.modules.orderplatform.entity.PlatformVideo;
+import org.jeecg.modules.orderplatform.service.IPlatformVideoService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Arrays;
+
+/**
+  * 下单平台关联视频
+  */
+@Slf4j
+@RestController
+@RequestMapping("/platformVideo")
+public class PlatformVideoController {
+
+	@Autowired
+	private IPlatformVideoService platformVideoService;
+
+	@PostMapping(value = "/updateVideo")
+	public Result<PlatformVideo> add(@RequestBody PlatformVideo platformVideo) {
+		Result<PlatformVideo> result = new Result<>();
+		try {
+			platformVideoService.save(platformVideo);
+			result.success("添加成功!");
+		} catch (Exception e) {
+			log.error(e.getMessage(),e);
+			result.error500("操作失败");
+		}
+		return result;
+	}
+
+
+	/**
+	 *  通过id删除
+	 */
+	@DeleteMapping(value = "/delete")
+	public Result<?> delete(@RequestParam Integer id) {
+		try {
+			PlatformVideo  platformVideo=new PlatformVideo();
+			platformVideo.setId(id);
+			platformVideo.setIsDelete(1);
+			boolean result = platformVideoService.updateById(platformVideo);
+		} catch (Exception e) {
+			log.error("删除失败",e.getMessage());
+			return Result.error("删除失败!");
+		}
+		return Result.ok("删除成功!");
+	}
+
+
+	/**
+	 * 通过id查询
+	 */
+	@GetMapping(value = "/queryById")
+	public Result<PlatformVideo> queryById(@RequestParam(name="id",required=true) String id) {
+		Result<PlatformVideo> result = new Result<>();
+		PlatformVideo platformVideo = platformVideoService.getById(id);
+		if(platformVideo==null) {
+			result.error500("未找到对应实体");
+		}else {
+			result.setResult(platformVideo);
+			result.setSuccess(true);
+		}
+		return result;
+	}
+
+}

+ 41 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/entity/PlatformScript.java

@@ -0,0 +1,41 @@
+package org.jeecg.modules.orderplatform.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+
+/**
+ * 下单平台关联脚本
+ */
+@Data
+@TableName("ctop_platform_script")
+public class PlatformScript {
+    
+	/**id*/
+	@TableId(type = IdType.AUTO)
+	private String id;
+	/**name*/
+	private String name;
+	/**version*/
+	private Integer version;
+	/**size*/
+	private Integer size;
+	/**creator*/
+	private String creator;
+	/**createTime*/
+	private Integer createTime;
+	/**modifier*/
+	private String modifier;
+	/**modifyTime*/
+	private Integer modifyTime;
+	/**downloadUrl*/
+	private Object downloadUrl;
+	/**projectId*/
+	private Integer projectId;
+	/**deleted*/
+	private String deleted;
+	/**canDelete*/
+	private String canDelete;
+}

+ 46 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/entity/PlatformVideo.java

@@ -0,0 +1,46 @@
+package org.jeecg.modules.orderplatform.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 下单平台关联视频
+ */
+@Data
+@TableName("ctop_platform_video")
+public class PlatformVideo {
+    
+	/**id*/
+	@TableId(type = IdType.AUTO)
+	private Integer id;
+	/**物料code*/
+	private String materialCode;
+	/**物料code*/
+	private String name;
+	/**视频md5*/
+	private String md5;
+	/**视频url*/
+	private String url;
+	/**封面url*/
+	private String coverUrl;
+	/**视频描述*/
+	private String description;
+	/**格式*/
+	private String format;
+	/**时长(秒)*/
+	private Integer duration;
+	/**大小(kb)*/
+	private Integer size;
+	/**高*/
+	private Integer height;
+	/**宽*/
+	private Integer width;
+	/**是否已删除*/
+	private Integer isDelete;
+	/**createTime*/
+	private Date createTime;
+}

+ 6 - 2
jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/mapper/PlatformMaterialMapper.java

@@ -18,13 +18,17 @@ public interface PlatformMaterialMapper extends BaseMapper<PlatformMaterial> {
 
     List<JSONObject> queryMaterialsByDesignUserId(@Param("materialStatus") JSONArray materialStatus, @Param("designUserId") String designUserId);
 
-    //指派的物料
+    //指派的物料
     List<JSONObject> queryMaterialsByDesignLeader(@Param("materialStatus") JSONArray materialStatus, @Param("designLeader") String designLeader);
 
     List<JSONObject> queryMaterialsByOperatorUserId(@Param("operatorUserId") String designUserId);
 
     JSONObject queryScriptDetailById(@Param("scriptId") String scriptId);
 
-    JSONObject queryVideoDetailById(@Param("videoId") String videoId);
+    JSONObject queryVideoDetailById(@Param("md5") String md5);
+
+    PlatformMaterial queryByCode(@Param("materialCode") String materialCode);
+
+    int queryCountByMaterialAndVideo(@Param("materialCode") String materialCode,@Param("videoMd5") String videoMd5);
 
 }

+ 11 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/mapper/PlatformScriptMapper.java

@@ -0,0 +1,11 @@
+package org.jeecg.modules.orderplatform.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.jeecg.modules.orderplatform.entity.PlatformScript;
+
+/**
+ * 下单平台关联脚本
+ */
+public interface PlatformScriptMapper extends BaseMapper<PlatformScript> {
+
+}

+ 14 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/mapper/PlatformVideoMapper.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.orderplatform.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.orderplatform.entity.PlatformVideo;
+
+/**
+ * 下单平台关联
+ */
+public interface PlatformVideoMapper extends BaseMapper<PlatformVideo> {
+
+    int deleteByMd5(@Param("md5") String  md5);
+
+}

+ 34 - 16
jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/mapper/xml/PlatformMaterialMapper.xml

@@ -115,7 +115,7 @@
             t1.shot,
             (SELECT realname from sys_user where id=t1.shot) as shotName,
             t1.clip,
-            (SELECT realname from sys_user where id=t1.shot) as clipName,
+            (SELECT realname from sys_user where id=t1.clip) as clipName,
             t1.plan,
             (SELECT realname from sys_user where id=t1.plan) as planName
         FROM
@@ -144,25 +144,43 @@
 
     <select id="queryVideoDetailById" resultType="com.alibaba.fastjson.JSONObject">
         SELECT
-            t.code,
+            t.md5,
             t.url,
             t1.video_id as videoId,
             t1.video_status as videoStatus,
             t1.video_advise as videoAdvise,
-            t2.second,
-            t2.width,
-            t2.height,
-            t2.size,
-            (SELECT realname from sys_user where id=t3.clip_id limit 1) as clipName,
-            (SELECT realname from sys_user where id=t3.shot_id limit 1) as shotName,
-            (SELECT realname from sys_user where id=t3.plan_id limit 1) as planName,
-            (SELECT GROUP_CONCAT(tag_name) from ctop_material_tag_info where code=t.code) as tag,
-            (SELECT GROUP_CONCAT(url) from ctop_material_image_info where video_id=t.code) as imageUrl
+            t.duration,
+            t.width,
+            t.height,
+            t.size,
+            t1.project_id as projectId,
+            t1.clip,
+            t1.shot,
+            t1.plan,
+            (SELECT realname from sys_user where id=t1.clip limit 1) as clipName,
+            (SELECT realname from sys_user where id=t1.shot limit 1) as shotName,
+            (SELECT realname from sys_user where id=t1.plan limit 1) as planName,
+            (SELECT GROUP_CONCAT(tag_name) from ctop_material_tag_info where code=t.md5 and status=1) as tag,
+            (SELECT GROUP_CONCAT(url) from ctop_material_video_cover where video_md5=t.md5) as imageUrl
+        FROM
+            ctop_platform_video t
+                LEFT JOIN  ctop_platform_material t1 on t.md5=t1.video_id
+        where t.md5=#{md5}
+          and t.is_delete=0
+        limit 1
+    </select>
+
+    <select id="queryByCode" resultType="org.jeecg.modules.orderplatform.entity.PlatformMaterial">
+        select * from ctop_platform_material where material_code=#{materialCode}
+    </select>
+
+    <select id="queryCountByMaterialAndVideo" resultType="java.lang.Integer">
+        SELECT
+            count(id)
         FROM
-            ctop_material_info t
-                LEFT JOIN  ctop_platform_material t1 on t.id=t1.video_id
-                LEFT JOIN  ctop_material_parameter t2 ON t. CODE = t2.material_id
-                left join  ctop_material_ascription t3 on t.code=t3. material_id
-        where t.id=#{videoId}
+            ctop_platform_material
+        WHERE
+            material_code != #{materialCode}
+          AND video_id = #{videoMd5}
     </select>
 </mapper>

+ 5 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/mapper/xml/PlatformScriptMapper.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.orderplatform.mapper.PlatformScriptMapper">
+
+</mapper>

+ 13 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/mapper/xml/PlatformVideoMapper.xml

@@ -0,0 +1,13 @@
+<?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.orderplatform.mapper.PlatformVideoMapper">
+
+    <update id="deleteByMd5" >
+        UPDATE
+            ctop_platform_video
+        SET is_delete = 1
+        WHERE
+            md5 = #{md5}
+    </update>
+
+</mapper>

+ 17 - 2
jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/service/IPlatformMaterialService.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import org.jeecg.modules.orderplatform.entity.PlatformMaterial;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 物料审批流程
@@ -36,8 +37,22 @@ public interface IPlatformMaterialService extends IService<PlatformMaterial> {
     JSONObject queryVideoDetailById(String videoId);
 
     /**
-     *  视频审核通过后修改素材库审核状态
+     *  查询上传视频是否出现在其他物料中
      */
-    void updateMaterialStatusById(String id);
+    int queryCountByMaterialAndVideo(String  materialCode, String videoMd5);
+    /**
+     *  同步视频到汇创素材库(包括关联的项目)
+     */
+    boolean syncVideo2CTopMaterial(PlatformMaterial platformMaterial);
+
+    /**
+     *  视频驳回编辑回显
+     */
+    Map<String,Object> videoEcho(String videoId);
+
+    /**
+     *  根据
+     */
+
 
 }

+ 11 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/service/IPlatformScriptService.java

@@ -0,0 +1,11 @@
+package org.jeecg.modules.orderplatform.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.orderplatform.entity.PlatformScript;
+
+/**
+ *  下单平台关联脚本
+ */
+public interface IPlatformScriptService extends IService<PlatformScript> {
+
+}

+ 14 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/service/IPlatformVideoService.java

@@ -0,0 +1,14 @@
+package org.jeecg.modules.orderplatform.service;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.orderplatform.entity.PlatformVideo;
+
+/**
+ *  下单平台关联视频
+ */
+public interface IPlatformVideoService extends IService<PlatformVideo> {
+
+    String uploadVideo (JSONObject params);
+
+}

+ 160 - 13
jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/service/impl/PlatformMaterialServiceImpl.java

@@ -1,19 +1,32 @@
 package org.jeecg.modules.orderplatform.service.impl;
 
-import cn.com.ctop.common.module.entity.MaterialInfo;
-import cn.com.ctop.common.module.service.IMaterialInfoService;
+import cn.com.ctop.common.module.entity.MaterialTagInfo;
+import cn.com.ctop.common.module.material.entity.MaterialVideoAuthor;
+import cn.com.ctop.common.module.material.entity.MaterialVideoCover;
+import cn.com.ctop.common.module.material.entity.MaterialVideoInfo;
+import cn.com.ctop.common.module.material.entity.MaterialVideoProject;
+import cn.com.ctop.common.module.material.service.*;
+import cn.com.ctop.common.module.service.IMaterialCutFrameService;
+import cn.com.ctop.common.module.service.IMaterialTagInfoService;
+import cn.com.ctop.common.module.service.IProjectService;
 import com.alibaba.fastjson.JSONArray;
 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.orderplatform.entity.PlatformMaterial;
+import org.jeecg.modules.orderplatform.entity.PlatformVideo;
 import org.jeecg.modules.orderplatform.mapper.PlatformMaterialMapper;
 import org.jeecg.modules.orderplatform.service.IPlatformMaterialService;
+import org.jeecg.modules.orderplatform.service.IPlatformVideoService;
 import org.jeecg.modules.orderplatform.util.JsonArrayUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.net.URLDecoder;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 物料审批流程
@@ -25,16 +38,40 @@ public class PlatformMaterialServiceImpl extends ServiceImpl<PlatformMaterialMap
     PlatformMaterialMapper platformMaterialMapper;
 
     @Autowired
-    IMaterialInfoService materialInfoService;
+    IPlatformVideoService platformVideoService;
+
+    @Autowired
+    IMaterialVideoInfoService materialVideoInfoService;
+
+    @Autowired
+    IMaterialVideoCoverService materialVideoCoverService;
+
+    @Autowired
+    IMaterialTagInfoService materialTagInfoService;
+
+    @Autowired
+    IMaterialVideoAuthorService materialVideoAuthorService;
+
+    @Autowired
+    IMaterialVideoProjectService materialVideoProjectService;
+
+    @Autowired
+    IMaterialVideoFrameService materialVideoFrameService;
+
+    @Autowired
+    IMaterialCutFrameService materialCutFrameService;
+
+    @Autowired
+    IProjectService projectService;
 
     @Override
     public List<JSONObject> queryMaterialsByDesignUserId(String materialStatus, String designUserId) {
         JSONArray materialStatusJsonArray = JsonArrayUtil.Varchar2JSONArray(materialStatus);
-        List<JSONObject> result=new ArrayList<>();
-        if(materialStatus.equals("0")){
-            result=platformMaterialMapper.queryMaterialsByDesignLeader(materialStatusJsonArray,designUserId);
-        }else {
-            result=platformMaterialMapper.queryMaterialsByDesignUserId(materialStatusJsonArray, designUserId);
+        List<JSONObject> result = new ArrayList<>();
+        if (materialStatus.equals("0")) {
+            result = platformMaterialMapper.queryMaterialsByDesignLeader(materialStatusJsonArray, designUserId);
+        } else {
+            result = platformMaterialMapper.queryMaterialsByDesignUserId(materialStatusJsonArray, designUserId);
         }
         return result;
     }
@@ -55,10 +92,120 @@ public class PlatformMaterialServiceImpl extends ServiceImpl<PlatformMaterialMap
     }
 
     @Override
-    public void updateMaterialStatusById(String id) {
-        MaterialInfo materialInfo = new MaterialInfo();
-        materialInfo.setId(id);
-        materialInfo.setStatus(1);
-        materialInfoService.updateById(materialInfo);
+    public int queryCountByMaterialAndVideo(String materialCode, String videoMd5) {
+
+        return platformMaterialMapper.queryCountByMaterialAndVideo(materialCode, videoMd5);
+    }
+
+    @Override
+    public boolean syncVideo2CTopMaterial(PlatformMaterial platformMaterial) {
+        boolean result=false;
+        //step1: 查询下单制物料、视频信息
+        QueryWrapper<PlatformVideo> wrapperPV = new QueryWrapper<>();
+        wrapperPV.eq("md5", platformMaterial.getVideoId());
+        wrapperPV.eq("is_delete", 0);
+        PlatformVideo video = platformVideoService.getOne(wrapperPV);
+        //查询物料信息
+        QueryWrapper<PlatformMaterial> wrapper = new QueryWrapper<>();
+        wrapper.eq("material_code", platformMaterial.getMaterialCode());
+        platformMaterial= this.getOne(wrapper);
+        boolean mv = materialVideoInfoHandle(video, platformMaterial.getMaterialType(), projectService.getSupplierCodeById(platformMaterial.getProjectId()));
+        if(mv){
+            result = materialVideoCorrelateHandle(video.getMd5());
+            if(result){
+                //启动截帧
+                materialCutFrameHandle(video);
+            }
+        }else {
+            materialVideoInfoService.deleteByMd5(video.getMd5());
+        }
+        return result;
+    }
+
+    @Override
+    public Map<String, Object> videoEcho(String videoId) {
+        Map<String, Object> result = new HashMap<>();
+        QueryWrapper<PlatformVideo> wrapperPV = new QueryWrapper<>();
+        wrapperPV.eq("md5", videoId);
+        wrapperPV.eq("is_delete", 0);
+        result.put("video", platformVideoService.getOne(wrapperPV));
+        QueryWrapper<MaterialVideoCover> wrapperMVC = new QueryWrapper<>();
+        wrapperMVC.eq("video_md5", videoId);
+        result.put("covers", materialVideoCoverService.list(wrapperMVC));
+        MaterialTagInfo materialTagInfo = new MaterialTagInfo();
+        materialTagInfo.setCode(videoId);
+        materialTagInfo.setStatus(1);
+        result.put("tags", materialTagInfoService.getTagDetail(materialTagInfo));
+        return result;
+    }
+
+    /**
+     * 同步素材视频
+     */
+    private boolean materialVideoInfoHandle(PlatformVideo platformVideo, int materialType, String supplierCode) {
+
+        MaterialVideoInfo materialVideoInfo = new MaterialVideoInfo();
+        materialVideoInfo.setName(platformVideo.getName());
+        materialVideoInfo.setMd5(platformVideo.getMd5());
+        materialVideoInfo.setUrl(platformVideo.getUrl());
+        materialVideoInfo.setCoverUrl(platformVideo.getCoverUrl());
+        materialVideoInfo.setMaterialType(materialType);
+        materialVideoInfo.setSupplierCode(supplierCode);
+        materialVideoInfo.setDescription(platformVideo.getDescription());
+        materialVideoInfo.setFormat(platformVideo.getFormat());
+        materialVideoInfo.setDuration(platformVideo.getDuration());
+        materialVideoInfo.setSize(platformVideo.getSize());
+        materialVideoInfo.setHeight(platformVideo.getHeight());
+        materialVideoInfo.setWidth(platformVideo.getWidth());
+        //先验证是否有重复
+        materialVideoInfoService.deleteByMd5(platformVideo.getMd5());
+        //再同步视频
+        return materialVideoInfoService.save(materialVideoInfo);
+    }
+
+    /**
+     * 保存视频素材关联项目、作者信息
+     */
+    private boolean materialVideoCorrelateHandle(String videoMd5) {
+
+        JSONObject videoDetail = platformMaterialMapper.queryVideoDetailById(videoMd5);
+        //项目绑定
+        MaterialVideoProject materialVideoProject = new MaterialVideoProject();
+        materialVideoProject.setProjectId(videoDetail.getLong("projectId"));
+        materialVideoProject.setVideoMd5(videoMd5);
+        //作者信息绑定
+        MaterialVideoAuthor materialVideoAuthor = new MaterialVideoAuthor();
+        materialVideoAuthor.setVideoMd5(videoMd5);
+        materialVideoAuthor.setClipId(videoDetail.getString("clip"));
+        materialVideoAuthor.setClipName(videoDetail.getString("clipName"));
+        materialVideoAuthor.setShotId(videoDetail.getString("shot"));
+        materialVideoAuthor.setShotName(videoDetail.getString("shotName"));
+        materialVideoAuthor.setPlanId(videoDetail.getString("plan"));
+        materialVideoAuthor.setPlanName(videoDetail.getString("planName"));
+        materialVideoAuthor.setPlaneId(videoDetail.getString("plane"));
+        materialVideoAuthor.setPlaneName(videoDetail.getString("plane_name"));
+
+        return materialVideoProjectService.save(materialVideoProject) && materialVideoAuthorService.save(materialVideoAuthor);
+    }
+
+    /**
+     * 开启截帧任务
+     */
+    private void materialCutFrameHandle(PlatformVideo platformVideo) {
+        int cutFrame = materialVideoFrameService.getFrameCountByCode(platformVideo.getMd5());
+        if (cutFrame == 0) {
+            String videoUrl = URLDecoder.decode(platformVideo.getUrl()).replace("https://media-1301855440.cos.ap-chongqing.myqcloud.com/", "");
+            Thread thread = new Thread() {
+                @Override
+                public void run() {
+                    try {
+                        materialVideoFrameService.getTencentCutFrame(videoUrl, platformVideo.getMd5(), platformVideo.getCoverUrl());
+                    } catch (Exception e) {
+                        log.error("智能抽帧任务失败,视频md5:" + platformVideo.getMd5());
+                    }
+                }
+            };
+            thread.start();
+        }
     }
 }

+ 1 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/service/impl/PlatformOrderServiceImpl.java

@@ -55,7 +55,7 @@ public class PlatformOrderServiceImpl extends ServiceImpl<PlatformOrderMapper, P
         PlatformOrder platformOrder= this.getOne(queryWrapper);
         platformOrder.setMaterialFinishAmount(platformOrder.getMaterialFinishAmount()+1);
         platformOrder.setMaterialFinishTime(DateUtils.getDate());
-        if(platformOrder.getMaterialAmount()==platformOrder.getMaterialFinishAmount()+1){
+        if(platformOrder.getMaterialAmount().equals(platformOrder.getMaterialFinishAmount())){
             platformOrder.setOrderStatus(3);
             platformOrder.setOrderFinishTime(DateUtils.getDate());
         }

+ 15 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/service/impl/PlatformScriptServiceImpl.java

@@ -0,0 +1,15 @@
+package org.jeecg.modules.orderplatform.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.modules.orderplatform.entity.PlatformScript;
+import org.jeecg.modules.orderplatform.mapper.PlatformScriptMapper;
+import org.jeecg.modules.orderplatform.service.IPlatformScriptService;
+import org.springframework.stereotype.Service;
+
+/**
+ * 下单平台关联脚本
+ */
+@Service
+public class PlatformScriptServiceImpl extends ServiceImpl<PlatformScriptMapper, PlatformScript> implements IPlatformScriptService {
+
+}

+ 146 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/service/impl/PlatformVideoServiceImpl.java

@@ -0,0 +1,146 @@
+package org.jeecg.modules.orderplatform.service.impl;
+
+import cn.com.ctop.common.module.entity.*;
+import cn.com.ctop.common.module.material.entity.MaterialVideoCover;
+import cn.com.ctop.common.module.material.service.IMaterialVideoCoverService;
+import cn.com.ctop.common.module.service.IMaterialTagInfoService;
+import cn.com.ctop.common.module.service.ITagInfoService;
+import cn.com.ctop.common.module.utils.CloudVideoProcessUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+import org.jeecg.modules.orderplatform.entity.PlatformVideo;
+import org.jeecg.modules.orderplatform.mapper.PlatformMaterialMapper;
+import org.jeecg.modules.orderplatform.mapper.PlatformVideoMapper;
+import org.jeecg.modules.orderplatform.service.IPlatformVideoService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.net.URLDecoder;
+import java.util.Map;
+
+
+/**
+ * 下单平台关联视频
+ */
+@Service
+public class PlatformVideoServiceImpl extends ServiceImpl<PlatformVideoMapper, PlatformVideo> implements IPlatformVideoService {
+
+    @Autowired
+    IMaterialVideoCoverService materialVideoCoverService;
+
+    @Autowired
+    IMaterialTagInfoService materialTagInfoService;
+
+    @Autowired
+    private ITagInfoService tagInfoService;
+
+    @Autowired
+    PlatformMaterialMapper platformMaterialMapper;
+
+    @Autowired
+    PlatformVideoMapper platformVideoMapper;
+
+    @Override
+    public String uploadVideo(JSONObject params) {
+        String md5 = params.getString("md5");
+        if (null == md5 || md5.isEmpty()) {
+            return "";
+        }
+        //入库下单制视频库
+        boolean result = videoHandle(params);
+        if (result) {
+            //封面入库
+            coverHandler(params);
+            //标签相关入库
+            tagHandler(params);
+            return md5;
+        }
+        return "";
+    }
+
+    /**
+     * 视频入库
+     */
+    private boolean videoHandle(JSONObject params) {
+
+        PlatformVideo platformVideo = new PlatformVideo();
+        //查询视频关联的物料信息
+        platformVideo.setMaterialCode(params.getString("materialCode"));
+        platformVideo.setName(params.getString("name"));
+        platformVideo.setMd5(params.getString("md5"));
+        platformVideo.setUrl(params.getString("url") == null ? "" : "https:" + params.getString("url"));
+        platformVideo.setCoverUrl(getFirstFrame(platformVideo.getUrl(), params.getString("md5")));
+        platformVideo.setDescription(params.getString("description"));
+        platformVideo.setFormat(params.getString("format"));
+        platformVideo.setDuration(params.getInteger("duration"));
+        platformVideo.setSize(params.getInteger("size"));
+        platformVideo.setHeight(params.getInteger("height"));
+        platformVideo.setWidth(params.getInteger("width"));
+
+        //查看是否已有
+        platformVideoMapper.deleteByMd5(params.getString("md5"));
+
+        return this.save(platformVideo);
+    }
+
+    /**
+     * 封面处理
+     */
+    private void coverHandler(JSONObject params) {
+        //删除以重复
+        materialVideoCoverService.deleteByVideoMd5(params.getString("md5"));
+        JSONArray covers = params.getJSONArray("covers");
+        String videoMd5 = params.getString("md5");
+        covers.forEach(cover -> {
+            insertCover((Map)cover, videoMd5);
+        });
+    }
+
+    private void insertCover(Map<String,Object> cover, String videoMd5) {
+        MaterialVideoCover materialVideoCover = new MaterialVideoCover();
+        materialVideoCover.setVideoMd5(videoMd5);
+        materialVideoCover.setName(cover.get("name").toString());
+        materialVideoCover.setMd5(cover.get("md5").toString());
+        materialVideoCover.setUrl(cover.get("url").toString());
+        materialVideoCover.setFormat(cover.get("format").toString());
+        materialVideoCover.setSize((int) cover.get("size"));
+        materialVideoCover.setHeight((int) cover.get("height"));
+        materialVideoCover.setWidth((int)cover.get("width"));
+        materialVideoCoverService.save(materialVideoCover);
+    }
+
+    /**
+     * 标签处理
+     */
+    private void tagHandler(JSONObject params) {
+        //处理标签。延续之前的逻辑,每次上传视频先删后加
+        materialTagInfoService.deleteByCode(params.getString("md5"));
+        insertTagList(params.getString("md5"), params.getString("userId"), params.getJSONArray("modalityTagList"));
+        insertTagList(params.getString("md5"), params.getString("userId"), params.getJSONArray("contentTagList"));
+        insertTagList(params.getString("md5"), params.getString("userId"), params.getJSONArray("senceTagList"));
+        insertTagList(params.getString("md5"), params.getString("userId"), params.getJSONArray("modTagList"));
+    }
+
+    private void insertTagList(String code, String userId, JSONArray tagList) {
+        if (null != tagList && !tagList.isEmpty()) {
+            for (int m = 0; m < tagList.size(); m++) {
+                Long tagId = tagList.getLong(m);
+                TagInfo tagInfo = tagInfoService.getById(tagId);
+                MaterialTagInfo setTag = new MaterialTagInfo(code, tagInfo, userId);
+                setTag.setCategoryId(tagInfo.getTagCategoryId());
+                materialTagInfoService.save(setTag);
+            }
+        }
+    }
+
+    /**
+     * 获取视频首帧封面
+     */
+    private String getFirstFrame(String initialUrl, String videoMd5) {
+        String decoderUrl = URLDecoder.decode(initialUrl).replace("https://media-1301855440.cos.ap-chongqing.myqcloud.com/", "");
+        String loadImage = "cutFrame/" + videoMd5 + "/zero.jpg";
+        return CloudVideoProcessUtil.videoCutPictureHandle(decoderUrl, loadImage);
+    }
+}

+ 94 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/util/ApprovalNodeNoticeHandler.java

@@ -0,0 +1,94 @@
+package org.jeecg.modules.orderplatform.util;
+
+import cn.com.ctop.common.module.mapper.MailLogMapper;
+import cn.com.ctop.common.module.utils.CorpWexinUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.modules.orderplatform.service.IPlatformMaterialService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+@Slf4j
+@Service
+public class ApprovalNodeNoticeHandler {
+
+    @Autowired
+    MailLogMapper mailLogMapper;
+
+    @Autowired
+    IPlatformMaterialService platformMaterialService;
+
+    /**
+     * 审批节点发送
+     */
+    public void notice(String operate, Set<String> acceptor) {
+        switch (operate) {
+            //设计组长接单,暂时不通知
+            case "ACCEPT_ORDER":
+                sendWeChat(acceptor, "您发起的订单接单成功");
+                break;
+            //设计组长驳回订单,通知下单运营订单已被驳回
+            case "REJECT_ORDER":
+                sendWeChat(acceptor, "您有订单被驳回,请前往汇创平台处理");
+                break;
+            //脚本审批通过,通知剪辑上传视频
+            case "ACCEPT_SCRIPT":
+                sendWeChat(acceptor, "有物料需要您上传视频,请前往汇创平台处理");
+                break;
+            //脚本被驳回,通知编导重新上传脚本
+            case "REJECT_SCRIPT":
+                sendWeChat(acceptor, "您上传的脚本被驳回,请前往汇创平台处理");
+                break;
+            //视频通过暂不通知
+            case "ACCEPT_VIDEO":
+                sendWeChat(acceptor, "审批通过了视频,请前往汇创平台处理");
+                break;
+            //视频被驳回,通知剪辑重新上传视频
+            case "REJECT_VIDEO":
+                sendWeChat(acceptor, "您上传的视频被驳回,请前往汇创平台处理");
+                break;
+            //运营下单,通知设计组长接单派单
+            case "PAYOUT":
+                sendWeChat(acceptor, "有一个订单需要您审批,请前往汇创平台处理");
+                break;
+            //设计上传脚本,通知运营审核
+            case "SCRIPT":
+                sendWeChat(acceptor, "有一个脚本需要您审批,请前往汇创平台处理");
+                break;
+            //设计上传视频,通知运营审核
+            case "VIDEO":
+                sendWeChat(acceptor, "有一个视频需要您审批,请前往汇创平台处理");
+                break;
+        }
+    }
+
+    /**
+     *  查询消息接收者
+     */
+    private Map<String, Map<String,String>> relatePerson(String orderCode,String materialCode){
+        Map<String,Map<String,String>> result= new HashMap<>();
+        if(materialCode.isEmpty()){
+
+        }else {
+
+        }
+        return result;
+    }
+    /**
+     *  发送通知消息到企业微信
+     */
+    private void sendWeChat(Set<String> users, String message) {
+        users.forEach(userId->{
+            String weChatId = mailLogMapper.getWChatIdByUserId(userId);
+            if (weChatId.isEmpty()) {
+                log.error(String.format("User WeChat not found. userId =%s", userId));
+                //TODO 通知管理员添加邮箱
+            } else {
+                CorpWexinUtils.sendMessageByWeChatId(weChatId, message);
+            }
+        });
+    }
+}

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

@@ -1,5 +1,5 @@
 server:
-  port: 8088
+  port: 8804
   servlet:
     context-path: /jeecg-boot
     compression:

+ 9 - 24
module-alarm/src/main/java/cn/com/ctop/alarm/modules/constant/MatchLogic.java

@@ -136,23 +136,12 @@ public class MatchLogic {
                         } else {
                             //不包含,阈值中,存在任一目标则不报警,都不存在时则报警,出现阈值之外的亦报警
                             boolean flag = true;
-                            if ("retargetingTagsInclude".equals(indicatorCode) || "population".equals(indicatorCode) || "region".equals(indicatorCode) || "district".equals(indicatorCode)) {
-                                //人群包判断是否存在该对象
-                                for (String thr : thresholds) {
-                                    if (values.contains(thr)) {
-                                        flag = false;
-                                    } else {
-                                        return true;
-                                    }
-                                }
-                            } else {
-                                //判断是否存在关键字。
-                                for (String thr : thresholds) {
-                                    if (values.toString().contains(thr)) {
-                                        flag = false;
-                                    } else {
-                                        return true;
-                                    }
+                            //人群包判断是否存在该对象
+                            for (String v : values) {
+                                if (threshold.contains(v)) {
+                                    flag = false;
+                                } else {
+                                    return true;
                                 }
                             }
                             return flag;
@@ -167,21 +156,17 @@ public class MatchLogic {
                             }
                         }
                     } else {
-                        boolean flag = true;
                         for (String thr : thresholds) {
-                            if (value.toString().contains(thr)) {
-                                flag = false;
-                            } else {
+                            if (!value.contains(thr)) {
                                 return true;
                             }
                         }
-                        return flag;
                     }
                 } else {
                     if ("contain".equals(condition)) {
-                        return value.toString().contains(threshold);
+                        return value.contains(threshold);
                     } else {
-                        return !value.toString().contains(threshold);
+                        return !value.contains(threshold);
                     }
                 }
             }

+ 6 - 6
module-check/src/main/java/cn/com/ctop/notice/handler/SendWeChatHandle.java

@@ -20,13 +20,13 @@ public class SendWeChatHandle {
     public void sendWeChatByMail(String mail,String message){
         String weChatId=mailLogMapper.getWeChatByMail(mail);
         if(weChatId.isEmpty()){
-            log.error(String.format("mail's WeChat not found. mail =%s", mail));
-            //TODO 通知管理员添加邮箱
-        }else{
-            List<String> messageList= splitMessage(message);
-            messageList.forEach(it->CorpWexinUtils.sendMessageByWeChatId(weChatId,it));
-        }
+        log.error(String.format("mail's WeChat not found. mail =%s", mail));
+        //TODO 通知管理员添加邮箱
+    }else{
+        List<String> messageList= splitMessage(message);
+        messageList.forEach(it->CorpWexinUtils.sendMessageByWeChatId(weChatId,it));
     }
+}
 
     /**
      * 发送多人,邮箱逗号隔开

+ 2 - 0
module-common/src/main/java/cn/com/ctop/common/module/mapper/ProjectMapper.java

@@ -17,4 +17,6 @@ public interface ProjectMapper extends BaseMapper<Project> {
     String getNameByAccountId(@Param("accountId") Long accountId);
 
     JSONObject getWarningInfoByProjectId(@Param("projectId") Long projectId);
+
+    String querySupplierCodeById(@Param("projectId") Long projectId);
 }

+ 4 - 0
module-common/src/main/java/cn/com/ctop/common/module/mapper/xml/ProjectMapper.xml

@@ -21,4 +21,8 @@
      where id = #{projectId}
     </select>
 
+    <select id="querySupplierCodeById" resultType="java.lang.String">
+        select supplier_code from ctop_project where id=#{projectId}
+    </select>
+
 </mapper>

+ 46 - 0
module-common/src/main/java/cn/com/ctop/common/module/material/entity/MaterialVideoAuthor.java

@@ -0,0 +1,46 @@
+package cn.com.ctop.common.module.material.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 视频素材作者信息
+ */
+@Data
+@TableName("ctop_material_video_author")
+public class MaterialVideoAuthor {
+    
+	/**id*/
+	@TableId(type = IdType.AUTO)
+	private Integer id;
+	/**视频md5*/
+	private String videoMd5;
+	/**运营id*/
+	private String operatorId;
+	/**运营姓名*/
+	private String operatorName;
+	/**剪辑id*/
+	private String clipId;
+	/**剪辑姓名*/
+	private String clipName;
+	/**拍摄id*/
+	private String shotId;
+	/**拍摄姓名*/
+	private String shotName;
+	/**编导id*/
+	private String planId;
+	/**编导姓名*/
+	private String planName;
+	/**平面id*/
+	private String planeId;
+	/**平面姓名*/
+	private String planeName;
+	/**createTime*/
+	private Date createTime;
+	/**updateTime*/
+	private Date updateTime;
+}

+ 40 - 0
module-common/src/main/java/cn/com/ctop/common/module/material/entity/MaterialVideoCover.java

@@ -0,0 +1,40 @@
+package cn.com.ctop.common.module.material.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 视频素材封面信息
+ */
+@Data
+@TableName("ctop_material_video_cover")
+public class MaterialVideoCover {
+    
+	/**id*/
+	@TableId(type = IdType.AUTO)
+	private Integer id;
+	/**视频md5*/
+	private String videoMd5;
+	/**封面名称*/
+	private String name;
+	/**封面唯一标识*/
+	private String md5;
+	/**封面url地址*/
+	private String url;
+	/**封面描述*/
+	private String description;
+	/**格式*/
+	private String format;
+	/**大小(kb)*/
+	private Integer size;
+	/**高*/
+	private Integer height;
+	/**宽*/
+	private Integer width;
+	/**createTime*/
+	private Date createTime;
+}

+ 30 - 0
module-common/src/main/java/cn/com/ctop/common/module/material/entity/MaterialVideoFrame.java

@@ -0,0 +1,30 @@
+package cn.com.ctop.common.module.material.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 视频素材截帧信息
+ */
+@Data
+@TableName("ctop_material_video_frame")
+public class MaterialVideoFrame {
+    
+	/**id*/
+	@TableId(type = IdType.AUTO)
+	private Integer id;
+	/**视频md5*/
+	private String videoMd5;
+	/**图片唯一标识*/
+	private String md5;
+	/**图片url地址*/
+	private String url;
+	/**图片截帧顺序*/
+	private Integer frameIndex;
+	/**createTime*/
+	private Date createTime;
+}

+ 46 - 0
module-common/src/main/java/cn/com/ctop/common/module/material/entity/MaterialVideoInfo.java

@@ -0,0 +1,46 @@
+package cn.com.ctop.common.module.material.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 视频素材基础信息
+ */
+@Data
+@TableName("ctop_material_video_info")
+public class MaterialVideoInfo {
+    
+	/**id*/
+	@TableId(type = IdType.AUTO)
+	private Integer id;
+	/**视频名称*/
+	private String name;
+	/**视频md5*/
+	private String md5;
+	/**视频url*/
+	private String url;
+	/**封面url*/
+	private String coverUrl;
+	/**素材类型*/
+	private Integer materialType;
+	/**代理商信息*/
+	private String supplierCode;
+	/**视频描述*/
+	private String description;
+	/**格式*/
+	private String format;
+	/**时长(秒)*/
+	private Integer duration;
+	/**大小(kb)*/
+	private Integer size;
+	/**高*/
+	private Integer height;
+	/**宽*/
+	private Integer width;
+	/**createTime*/
+	private Date createTime;
+}

+ 28 - 0
module-common/src/main/java/cn/com/ctop/common/module/material/entity/MaterialVideoProject.java

@@ -0,0 +1,28 @@
+package cn.com.ctop.common.module.material.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 视频素材关联项目信息
+ */
+@Data
+@TableName("ctop_material_video_project")
+public class MaterialVideoProject {
+    
+	/**id*/
+	@TableId(type = IdType.AUTO)
+	private Integer id;
+	/**视频md5*/
+	private String videoMd5;
+	/**关联项目id*/
+	private Long projectId;
+	/**createTime*/
+	private Date createTime;
+	/**updateTime*/
+	private Date updateTime;
+}

+ 32 - 0
module-common/src/main/java/cn/com/ctop/common/module/material/entity/MaterialVideoWatermark.java

@@ -0,0 +1,32 @@
+package cn.com.ctop.common.module.material.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 视频素材水印信息
+ */
+@Data
+@TableName("ctop_material_video_watermark")
+public class MaterialVideoWatermark {
+    
+	/**id*/
+	@TableId(type = IdType.AUTO)
+	private Integer id;
+	/**视频md5*/
+	private String videoMd5;
+	/**水印视频名称*/
+	private String name;
+	/**水印视频唯一标识*/
+	private String md5;
+	/**水印视频url*/
+	private String url;
+	/**水印创建人*/
+	private String createBy;
+	/**createTime*/
+	private Date createTime;
+}

+ 11 - 0
module-common/src/main/java/cn/com/ctop/common/module/material/mapper/MaterialVideoAuthorMapper.java

@@ -0,0 +1,11 @@
+package cn.com.ctop.common.module.material.mapper;
+
+import cn.com.ctop.common.module.material.entity.MaterialVideoAuthor;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 视频素材作者信息
+ */
+public interface MaterialVideoAuthorMapper extends BaseMapper<MaterialVideoAuthor> {
+
+}

+ 14 - 0
module-common/src/main/java/cn/com/ctop/common/module/material/mapper/MaterialVideoCoverMapper.java

@@ -0,0 +1,14 @@
+package cn.com.ctop.common.module.material.mapper;
+
+import cn.com.ctop.common.module.material.entity.MaterialVideoCover;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 视频素材封面信息
+ */
+public interface MaterialVideoCoverMapper extends BaseMapper<MaterialVideoCover> {
+
+    void deleteByVideoMd5(@Param("videoMd5") String videoMd5);
+
+}

+ 14 - 0
module-common/src/main/java/cn/com/ctop/common/module/material/mapper/MaterialVideoFrameMapper.java

@@ -0,0 +1,14 @@
+package cn.com.ctop.common.module.material.mapper;
+
+import cn.com.ctop.common.module.material.entity.MaterialVideoFrame;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 视频素材截帧信息
+ */
+public interface MaterialVideoFrameMapper extends BaseMapper<MaterialVideoFrame> {
+
+    int queryFrameCountByCode(@Param("videoMd5") String videoMd5);
+
+}

+ 14 - 0
module-common/src/main/java/cn/com/ctop/common/module/material/mapper/MaterialVideoInfoMapper.java

@@ -0,0 +1,14 @@
+package cn.com.ctop.common.module.material.mapper;
+
+import cn.com.ctop.common.module.material.entity.MaterialVideoInfo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 视频素材基础信息
+ */
+public interface MaterialVideoInfoMapper extends BaseMapper<MaterialVideoInfo> {
+
+    void deleteByMd5(@Param("md5") String md5);
+
+}

+ 11 - 0
module-common/src/main/java/cn/com/ctop/common/module/material/mapper/MaterialVideoProjectMapper.java

@@ -0,0 +1,11 @@
+package cn.com.ctop.common.module.material.mapper;
+
+import cn.com.ctop.common.module.material.entity.MaterialVideoProject;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 视频素材关联项目信息
+ */
+public interface MaterialVideoProjectMapper extends BaseMapper<MaterialVideoProject> {
+
+}

+ 11 - 0
module-common/src/main/java/cn/com/ctop/common/module/material/mapper/MaterialVideoWatermarkMapper.java

@@ -0,0 +1,11 @@
+package cn.com.ctop.common.module.material.mapper;
+
+import cn.com.ctop.common.module.material.entity.MaterialVideoWatermark;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 视频素材水印信息
+ */
+public interface MaterialVideoWatermarkMapper extends BaseMapper<MaterialVideoWatermark> {
+
+}

+ 5 - 0
module-common/src/main/java/cn/com/ctop/common/module/material/mapper/xml/MaterialVideoAuthorMapper.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="cn.com.ctop.common.module.material.mapper.MaterialVideoAuthorMapper">
+
+</mapper>

+ 13 - 0
module-common/src/main/java/cn/com/ctop/common/module/material/mapper/xml/MaterialVideoCoverMapper.xml

@@ -0,0 +1,13 @@
+<?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="cn.com.ctop.common.module.material.mapper.MaterialVideoCoverMapper">
+
+    <delete id="deleteByVideoMd5">
+        DELETE
+        FROM
+            ctop_material_video_cover
+        WHERE
+            video_md5 = #{videoMd5}
+    </delete>
+
+</mapper>

+ 8 - 0
module-common/src/main/java/cn/com/ctop/common/module/material/mapper/xml/MaterialVideoFrameMapper.xml

@@ -0,0 +1,8 @@
+<?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="cn.com.ctop.common.module.material.mapper.MaterialVideoFrameMapper">
+
+    <select id="queryFrameCountByCode" resultType="java.lang.Integer">
+        select count(id) from ctop_material_video_frame where video_md5=#{videoMd5}
+    </select>
+</mapper>

+ 8 - 0
module-common/src/main/java/cn/com/ctop/common/module/material/mapper/xml/MaterialVideoInfoMapper.xml

@@ -0,0 +1,8 @@
+<?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="cn.com.ctop.common.module.material.mapper.MaterialVideoInfoMapper">
+
+    <delete id="deleteByMd5" >
+        delete from ctop_material_video_info where md5=#{md5}
+    </delete>
+</mapper>

+ 5 - 0
module-common/src/main/java/cn/com/ctop/common/module/material/mapper/xml/MaterialVideoProjectMapper.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="cn.com.ctop.common.module.material.mapper.MaterialVideoProjectMapper">
+
+</mapper>

+ 5 - 0
module-common/src/main/java/cn/com/ctop/common/module/material/mapper/xml/MaterialVideoWatermarkMapper.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="cn.com.ctop.common.module.material.mapper.MaterialVideoWatermarkMapper">
+
+</mapper>

+ 11 - 0
module-common/src/main/java/cn/com/ctop/common/module/material/service/IMaterialVideoAuthorService.java

@@ -0,0 +1,11 @@
+package cn.com.ctop.common.module.material.service;
+
+import cn.com.ctop.common.module.material.entity.MaterialVideoAuthor;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ *  视频素材作者信息
+ */
+public interface IMaterialVideoAuthorService extends IService<MaterialVideoAuthor> {
+
+}

+ 13 - 0
module-common/src/main/java/cn/com/ctop/common/module/material/service/IMaterialVideoCoverService.java

@@ -0,0 +1,13 @@
+package cn.com.ctop.common.module.material.service;
+
+import cn.com.ctop.common.module.material.entity.MaterialVideoCover;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ *  视频素材封面信息
+ */
+public interface IMaterialVideoCoverService extends IService<MaterialVideoCover> {
+
+    void deleteByVideoMd5(String videoMd5);
+
+}

+ 15 - 0
module-common/src/main/java/cn/com/ctop/common/module/material/service/IMaterialVideoFrameService.java

@@ -0,0 +1,15 @@
+package cn.com.ctop.common.module.material.service;
+
+import cn.com.ctop.common.module.material.entity.MaterialVideoFrame;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ *  视频素材截帧信息
+ */
+public interface IMaterialVideoFrameService extends IService<MaterialVideoFrame> {
+
+    int getFrameCountByCode(String videoMd5);
+
+    void getTencentCutFrame(String videoUrl, String videoMd5, String coverUrl);
+
+}

+ 13 - 0
module-common/src/main/java/cn/com/ctop/common/module/material/service/IMaterialVideoInfoService.java

@@ -0,0 +1,13 @@
+package cn.com.ctop.common.module.material.service;
+
+import cn.com.ctop.common.module.material.entity.MaterialVideoInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 视频素材基础信息
+ */
+public interface IMaterialVideoInfoService extends IService<MaterialVideoInfo> {
+
+    void deleteByMd5(String md5);
+
+}

+ 11 - 0
module-common/src/main/java/cn/com/ctop/common/module/material/service/IMaterialVideoProjectService.java

@@ -0,0 +1,11 @@
+package cn.com.ctop.common.module.material.service;
+
+import cn.com.ctop.common.module.material.entity.MaterialVideoProject;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ *  视频素材关联项目信息
+ */
+public interface IMaterialVideoProjectService extends IService<MaterialVideoProject> {
+
+}

+ 11 - 0
module-common/src/main/java/cn/com/ctop/common/module/material/service/IMaterialVideoWatermarkService.java

@@ -0,0 +1,11 @@
+package cn.com.ctop.common.module.material.service;
+
+import cn.com.ctop.common.module.material.entity.MaterialVideoWatermark;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ *  视频素材水印信息
+ */
+public interface IMaterialVideoWatermarkService extends IService<MaterialVideoWatermark> {
+
+}

+ 15 - 0
module-common/src/main/java/cn/com/ctop/common/module/material/service/impl/MaterialVideoAuthorServiceImpl.java

@@ -0,0 +1,15 @@
+package cn.com.ctop.common.module.material.service.impl;
+
+import cn.com.ctop.common.module.material.entity.MaterialVideoAuthor;
+import cn.com.ctop.common.module.material.mapper.MaterialVideoAuthorMapper;
+import cn.com.ctop.common.module.material.service.IMaterialVideoAuthorService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * 视频素材作者信息
+ */
+@Service
+public class MaterialVideoAuthorServiceImpl extends ServiceImpl<MaterialVideoAuthorMapper, MaterialVideoAuthor> implements IMaterialVideoAuthorService {
+
+}

+ 23 - 0
module-common/src/main/java/cn/com/ctop/common/module/material/service/impl/MaterialVideoCoverServiceImpl.java

@@ -0,0 +1,23 @@
+package cn.com.ctop.common.module.material.service.impl;
+
+import cn.com.ctop.common.module.material.entity.MaterialVideoCover;
+import cn.com.ctop.common.module.material.mapper.MaterialVideoCoverMapper;
+import cn.com.ctop.common.module.material.service.IMaterialVideoCoverService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * 视频素材封面信息
+ */
+@Service
+public class MaterialVideoCoverServiceImpl extends ServiceImpl<MaterialVideoCoverMapper, MaterialVideoCover> implements IMaterialVideoCoverService {
+
+    @Autowired
+    MaterialVideoCoverMapper materialVideoCoverMapper;
+
+    @Override
+    public void deleteByVideoMd5(String videoMd5) {
+        materialVideoCoverMapper.deleteByVideoMd5(videoMd5);
+    }
+}

+ 82 - 0
module-common/src/main/java/cn/com/ctop/common/module/material/service/impl/MaterialVideoFrameServiceImpl.java

@@ -0,0 +1,82 @@
+package cn.com.ctop.common.module.material.service.impl;
+
+import cn.com.ctop.common.module.material.entity.MaterialVideoFrame;
+import cn.com.ctop.common.module.material.mapper.MaterialVideoFrameMapper;
+import cn.com.ctop.common.module.material.service.IMaterialVideoFrameService;
+import cn.com.ctop.common.module.utils.Check;
+import cn.com.ctop.common.module.utils.CloudVideoProcessUtil;
+import cn.com.ctop.common.module.utils.LoadFileUtil;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 视频素材截帧信息
+ */
+@Slf4j
+@Service
+public class MaterialVideoFrameServiceImpl extends ServiceImpl<MaterialVideoFrameMapper, MaterialVideoFrame> implements IMaterialVideoFrameService {
+
+    @Autowired
+    MaterialVideoFrameMapper  materialVideoFrameMapper;
+
+    @Value("${jeecg.path.image-upload}")
+    private String imageUpLoadPath;
+
+    @Override
+    public int getFrameCountByCode(String videoMd5) {
+        return materialVideoFrameMapper.queryFrameCountByCode(videoMd5);
+    }
+
+    @Override
+    public void getTencentCutFrame(String videoUrl, String videoMd5, String coverUrl) {
+        try {
+            String loadImage = "cutFrame/" + videoMd5 + "/${Number}.jpg";
+            Map<String, Object> coverMap = CloudVideoProcessUtil.videoCutFrameHandle(videoUrl, loadImage);
+            List<MaterialVideoFrame> batch = new ArrayList<>();
+            for (int i = 0; i <= 13; i++) {
+                String url = (String) coverMap.get(String.valueOf(i));
+                if (!Check.isNull(url)) {
+                    String cutFramePath = LoadFileUtil.downLoadFromUrl(url, imageUpLoadPath);
+                    String cutFrameMd5 = LoadFileUtil.getMD5(cutFramePath);
+                    MaterialVideoFrame materialVideoFrame = new MaterialVideoFrame();
+                    materialVideoFrame.setMd5(cutFrameMd5);
+                    materialVideoFrame.setUrl(url);
+                    materialVideoFrame.setVideoMd5(videoMd5);
+                    materialVideoFrame.setFrameIndex(i+1);
+                    batch.add(materialVideoFrame);
+                    this.save(materialVideoFrame);
+                    LoadFileUtil.delFile(cutFramePath);
+                }
+            }
+            insertFrames(batch,videoMd5,coverUrl);
+        } catch (Exception e) {
+            log.info("抽帧异常,code:{}", videoMd5);
+            log.error("获取截帧图片MD5错误");
+        }
+    }
+
+    private void insertFrames(List<MaterialVideoFrame> batch,  String videoMd5, String coverUrl){
+        String cutFramePath = LoadFileUtil.downLoadFromUrl(coverUrl, imageUpLoadPath);
+        String cutFrameMd5 = null;
+        try {
+            cutFrameMd5 = LoadFileUtil.getMD5(cutFramePath);
+        } catch (IOException e) {
+            log.error("获取截帧图片MD5错误");
+        }
+        MaterialVideoFrame materialVideoFrame = new MaterialVideoFrame();
+        materialVideoFrame.setMd5(cutFrameMd5);
+        materialVideoFrame.setUrl(coverUrl);
+        materialVideoFrame.setVideoMd5(videoMd5);
+        materialVideoFrame.setFrameIndex(0);
+        batch.add(materialVideoFrame);
+        this.saveBatch(batch);
+    }
+}

+ 23 - 0
module-common/src/main/java/cn/com/ctop/common/module/material/service/impl/MaterialVideoInfoServiceImpl.java

@@ -0,0 +1,23 @@
+package cn.com.ctop.common.module.material.service.impl;
+
+import cn.com.ctop.common.module.material.entity.MaterialVideoInfo;
+import cn.com.ctop.common.module.material.mapper.MaterialVideoInfoMapper;
+import cn.com.ctop.common.module.material.service.IMaterialVideoInfoService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * 视频素材基础信息
+ */
+@Service
+public class MaterialVideoInfoServiceImpl extends ServiceImpl<MaterialVideoInfoMapper, MaterialVideoInfo> implements IMaterialVideoInfoService {
+
+    @Autowired
+    MaterialVideoInfoMapper materialVideoInfoMapper;
+
+    @Override
+    public void deleteByMd5(String md5) {
+        materialVideoInfoMapper.deleteByMd5(md5);
+    }
+}

+ 15 - 0
module-common/src/main/java/cn/com/ctop/common/module/material/service/impl/MaterialVideoProjectServiceImpl.java

@@ -0,0 +1,15 @@
+package cn.com.ctop.common.module.material.service.impl;
+
+import cn.com.ctop.common.module.material.entity.MaterialVideoProject;
+import cn.com.ctop.common.module.material.mapper.MaterialVideoProjectMapper;
+import cn.com.ctop.common.module.material.service.IMaterialVideoProjectService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * 视频素材关联项目信息
+ */
+@Service
+public class MaterialVideoProjectServiceImpl extends ServiceImpl<MaterialVideoProjectMapper, MaterialVideoProject> implements IMaterialVideoProjectService {
+
+}

+ 15 - 0
module-common/src/main/java/cn/com/ctop/common/module/material/service/impl/MaterialVideoWatermarkServiceImpl.java

@@ -0,0 +1,15 @@
+package cn.com.ctop.common.module.material.service.impl;
+
+import cn.com.ctop.common.module.material.entity.MaterialVideoWatermark;
+import cn.com.ctop.common.module.material.mapper.MaterialVideoWatermarkMapper;
+import cn.com.ctop.common.module.material.service.IMaterialVideoWatermarkService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * 视频素材水印信息
+ */
+@Service
+public class MaterialVideoWatermarkServiceImpl extends ServiceImpl<MaterialVideoWatermarkMapper, MaterialVideoWatermark> implements IMaterialVideoWatermarkService {
+
+}

+ 0 - 6
module-common/src/main/java/cn/com/ctop/common/module/service/IMaterialCutFrameService.java

@@ -18,14 +18,8 @@ import java.util.List;
 public interface IMaterialCutFrameService extends IService<MaterialCutFrame> {
     void getCutFrame(String url, String materialId, Long secondDuration, String height, String width) throws IOException;
 
-    void loadCutFrame(String jobId, String videoSignature);
-
     List<MaterialCutFrame> getListByVideoSignature(String signature);
 
-    void getCosCutFrame(String url, String materialId) throws IOException;  //腾讯云抽帧
-
-    void loadCosCutFrame(String jobId, String videoSignature);  //腾讯云抽帧任务状态查询以及数据入库
-
     void getTencentCutFrame(String videoUrl, String materialId, String coveUrl);
 
     boolean updateTencentCutFrame(String videoMD5);

+ 2 - 0
module-common/src/main/java/cn/com/ctop/common/module/service/IProjectService.java

@@ -17,4 +17,6 @@ public interface IProjectService extends IService<Project> {
     List<Project> listByMediaType(int projectType, int checkLink);
 
     String getNameByAccountId(Long accountId);
+
+    String getSupplierCodeById(Long projectId);
 }

+ 1 - 166
module-common/src/main/java/cn/com/ctop/common/module/service/impl/MaterialCutFrameServiceImpl.java

@@ -45,7 +45,6 @@ public class MaterialCutFrameServiceImpl extends ServiceImpl<MaterialCutFrameMap
 
     private static String ossLocation = "oss-cn-beijing";
     private static String ossBucket = "ctop-media";
-    private static String ossOutputObject = "output_{Count}.jpg";
 
     @Value("${jeecg.path.image-upload}")
     private String imageUpLoadPath;
@@ -117,6 +116,7 @@ public class MaterialCutFrameServiceImpl extends ServiceImpl<MaterialCutFrameMap
             output.put("Bucket", ossBucket);
 
 
+            String ossOutputObject = "output_{Count}.jpg";
             output.put("Object", URLEncoder.encode(ossOutputObject1 + ossOutputObject, "utf-8"));
 
             snapshotConfig.put("OutputFile", output.toJSONString());
@@ -152,172 +152,11 @@ public class MaterialCutFrameServiceImpl extends ServiceImpl<MaterialCutFrameMap
 
     }
 
-
-    @Override
-    public void loadCutFrame(String jobId, String videoSignature) {
-        try {
-            DefaultProfile profile = DefaultProfile.getProfile(
-                    "cn-beijing",
-                    "LTAIbNbqWzSOklQV",
-                    "1rkPz7JNoXk8sJevPaeYHWqfkQXBGh");
-            IAcsClient client = new DefaultAcsClient(profile);
-
-            QuerySnapshotJobListRequest request = new QuerySnapshotJobListRequest();
-            request.setSnapshotJobIds(jobId);
-            QuerySnapshotJobListResponse response = client.getAcsResponse(request);
-            JSONObject jsonObject = JSONObject.parseObject(JSON.toJSONString(response));
-            if (jsonObject == null) {
-                return;
-            }
-            JSONObject json = (JSONObject) jsonObject.getJSONArray("snapshotJobList").get(0);
-            String state = json.getString("state");
-            if (null == state || !"Success".equals(state)) {
-                return;
-            }
-            String loadImage = "cutFrame/" + videoSignature + "/";
-
-            Integer count = json.getInteger("count");
-            for (int j = 1; j <= count; j++) {
-                String urlStr = null;
-                if (j < 10) {
-                    urlStr = String.format(
-                            OssConstant.formatUrl + loadImage + "output_0000" + j + ".jpg",
-                            ossBucket,
-                            ossLocation);
-                } else if (j < 100) {
-                    urlStr = String.format(
-                            OssConstant.formatUrl + loadImage + "output_000" + j + ".jpg",
-                            ossBucket,
-                            ossLocation);
-                } else if (j > 100) {
-                    urlStr = String.format(
-                            OssConstant.formatUrl + loadImage + "output_00" + j + ".jpg",
-                            ossBucket,
-                            ossLocation);
-                }
-                String cutFramePath = LoadFileUtil.downLoadFromUrl(urlStr, imageUpLoadPath);
-                String cutFrameMd5 = LoadFileUtil.getMD5(cutFramePath);
-
-                MaterialCutFrame cutFrame = new MaterialCutFrame();
-                cutFrame.setSignature(cutFrameMd5);
-                cutFrame.setUrl(urlStr);
-                cutFrame.setVideoSignature(videoSignature);
-                cutFrame.setImageIndex(j);
-                this.save(cutFrame);
-                LoadFileUtil.delFile(cutFramePath);
-
-            }
-
-            QueryWrapper<MaterialCutFrameTask> updateQueryWrapper = new QueryWrapper<>();
-            updateQueryWrapper.eq("job_id", jobId);
-            updateQueryWrapper.eq("video_signature", videoSignature);
-            MaterialCutFrameTask updateTask = new MaterialCutFrameTask();
-            updateTask.setJobStatus(1);
-            cutFrameTaskService.update(updateTask, updateQueryWrapper);
-        } catch (Exception e) {
-            log.error(e.getMessage());
-        }
-
-    }
-
     @Override
     public List<MaterialCutFrame> getListByVideoSignature(String videoSignature) {
         return materialCutFrameMapper.getListByVideoSignature(videoSignature);
     }
 
-
-    //腾讯云抽帧
-    @Override
-    public void getCosCutFrame(String url, String materialId) throws IOException {
-        try {
-
-            QueryWrapper<MaterialCutFrameTask> queryWrapper = new QueryWrapper<>();
-            queryWrapper.eq("video_signature", materialId);
-            queryWrapper.last("limit 1");
-            MaterialCutFrameTask checkCutFrame = cutFrameTaskService.getOne(queryWrapper);
-            if (!Check.isNull(checkCutFrame)) {
-                log.info("已存推荐封面");
-                return;
-            }
-
-            //抽帧ossOutputObject1
-            String ossOutputObject1 = "/cutFrame/" + materialId + "/_";
-            String replaceUrl = url.replace("https://" + CosUtil.bucket + ".cos.ap-chongqing.myqcloud.com", "");  //地址
-            String resp = CosUtil.processMedia(replaceUrl, ossOutputObject1);
-            JSONObject respJson = JSONObject.parseObject(resp);
-            String jobId = respJson.getString("TaskId"); //{"Response": {"TaskId": "2600000655-WorkflowTask-c0b385f27c4993437029b5da175542aet0","RequestId": "4c23ce23-087f-4d4b-b73b-907d77d6d78d" } }
-            MaterialCutFrameTask cutFrameTask = new MaterialCutFrameTask();
-            cutFrameTask.setJobStatus(0);
-            cutFrameTask.setJobId(jobId);
-            cutFrameTask.setCloud_type(2);
-            cutFrameTask.setVideoSignature(materialId);
-            cutFrameTaskService.save(cutFrameTask);
-        } catch (Exception e) {
-            log.error(e.getMessage());
-        }
-    }
-
-
-    //抽帧任务状态查询,如果完成则把抽帧入库
-    @Override
-    public void loadCosCutFrame(String jobId, String videoSignature) {
-        try {
-            String resp = CosUtil.describeTaskDetail(jobId);
-            if (StringUtils.isBlank(resp)) {
-                return;
-            }
-
-            JSONObject respJson = JSONObject.parseObject(resp);
-            String status = respJson.getString("Status");
-
-            if (!"FINISH".equals(status)) {
-                return;
-            }
-
-
-            JSONArray resultSetArray = respJson.getJSONObject("WorkflowTask").getJSONArray("MediaProcessResultSet");
-            if (Check.isNull(resultSetArray)) {
-                return;
-            }
-            JSONObject resultSetObject = resultSetArray.getJSONObject(0);
-            if (Check.isNull(resultSetObject)) {
-                return;
-            }
-            JSONArray snapshotArray = resultSetObject.getJSONObject("SampleSnapshotTask").getJSONObject("Output").getJSONArray("ImagePathSet");
-
-            if (Check.isNull(snapshotArray)) {
-                return;
-            }
-
-            for (int i = 0; i < snapshotArray.size(); i++) {
-                String imagePath = snapshotArray.getString(i);
-                String urlStr = "https://" + CosUtil.bucket + ".cos.ap-chongqing.myqcloud.com" + imagePath;
-
-                //下载到本地获取图片md5
-                String cutFramePath = LoadFileUtil.downLoadFromUrl(urlStr, imageUpLoadPath);
-                String cutFrameMd5 = LoadFileUtil.getMD5(cutFramePath);
-
-                MaterialCutFrame cutFrame = new MaterialCutFrame();
-                cutFrame.setSignature(cutFrameMd5);
-                cutFrame.setUrl(urlStr);
-                cutFrame.setVideoSignature(videoSignature);
-                cutFrame.setImageIndex(i);
-                this.save(cutFrame);
-            }
-
-            QueryWrapper<MaterialCutFrameTask> updateQueryWrapper = new QueryWrapper<>();
-            updateQueryWrapper.eq("job_id", jobId);
-            updateQueryWrapper.eq("video_signature", videoSignature);
-            MaterialCutFrameTask updateTask = new MaterialCutFrameTask();
-            updateTask.setJobStatus(1);
-            cutFrameTaskService.update(updateTask, updateQueryWrapper);
-        } catch (Exception e) {
-            log.error(e.getMessage());
-        }
-
-    }
-
-
     @Override
     public void getTencentCutFrame(String videoUrl, String materialId, String coveUrl) {
         try {
@@ -349,11 +188,8 @@ public class MaterialCutFrameServiceImpl extends ServiceImpl<MaterialCutFrameMap
         } catch (Exception e) {
             e.printStackTrace();
         }
-
-
     }
 
-
     private void getCut(String materialId, String videoUrl, String loadImage, Integer count) {
         try {
             Map<String, Object> coverMap = CloudVideoProcessUtil.videoCutFrameHandle(videoUrl, loadImage);
@@ -383,7 +219,6 @@ public class MaterialCutFrameServiceImpl extends ServiceImpl<MaterialCutFrameMap
                 return;
             }
             getCut(materialId, videoUrl, loadImage, count + 1);
-
         }
 
     }

+ 1 - 6
module-common/src/main/java/cn/com/ctop/common/module/service/impl/MaterialInfoServiceImpl.java

@@ -110,7 +110,6 @@ public class MaterialInfoServiceImpl extends ServiceImpl<MaterialInfoMapper, Mat
     @Override
     public String watermarkVideoBySupplierCode(String videoSignature, String videoUrl, Long templateId) {
         try {
-
             QueryWrapper<SupplierWatermark> supplierWatermarkQueryWrapper = new QueryWrapper<>();
             supplierWatermarkQueryWrapper.eq("video_signature", videoSignature);
             supplierWatermarkQueryWrapper.last("limit 1");
@@ -146,16 +145,11 @@ public class MaterialInfoServiceImpl extends ServiceImpl<MaterialInfoMapper, Mat
                 }
                 return watermarkUrl;
             }
-
-
         } catch (Exception e) {
             log.info("供应商水印生成异常,videoCode:{}", videoSignature);
             e.printStackTrace();
-
-
         }
         return null;
-
     }
 
 
@@ -606,6 +600,7 @@ public class MaterialInfoServiceImpl extends ServiceImpl<MaterialInfoMapper, Mat
         String url = "";
         if (!Check.isNull(json.getString("url"))) {
             url = "https:" + json.getString("url");
+
         }
         Long projectId = json.getLong("projectId");
         String code = json.getString("code");

+ 6 - 3
module-common/src/main/java/cn/com/ctop/common/module/service/impl/MaterialTagInfoServiceImpl.java

@@ -11,6 +11,7 @@ import cn.com.ctop.common.module.utils.ResultMapUtils;
 import cn.com.ctop.common.module.utils.StatusCode;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -35,6 +36,8 @@ public class MaterialTagInfoServiceImpl extends ServiceImpl<MaterialTagInfoMappe
     private IMaterialInfoService materialInfoService;
     @Autowired
     private ITagInfoService tagInfoService;
+    @Autowired
+    private MaterialTagInfoMapper materialTagInfoMapper;
     @Override
     public Map<String, Object> mark(JSONObject data, LoginUser user) {
         Map<String,Object>result = new HashMap<>();
@@ -98,8 +101,8 @@ public class MaterialTagInfoServiceImpl extends ServiceImpl<MaterialTagInfoMappe
 
     @Override
     public void deleteByCode(String code) {
-        UpdateWrapper<MaterialTagInfo>updateWrapper = new UpdateWrapper<>();
-        updateWrapper.eq("code",code).set("status",0).set("update_time",new Date());
-        this.update(updateWrapper);
+        QueryWrapper<MaterialTagInfo> wrapper = new QueryWrapper<>();
+        wrapper.eq("code",code);
+        materialTagInfoMapper.delete(wrapper);
     }
 }

+ 5 - 0
module-common/src/main/java/cn/com/ctop/common/module/service/impl/ProjectServiceImpl.java

@@ -35,4 +35,9 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
     public String getNameByAccountId(Long accountId) {
         return projectMapper.getNameByAccountId(accountId);
     }
+
+    @Override
+    public String getSupplierCodeById(Long projectId) {
+        return projectMapper.querySupplierCodeById(projectId);
+    }
 }

+ 84 - 105
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/entity/KuaishouReportDailyImage.java

@@ -1,52 +1,31 @@
 package cn.com.ctop.kuaishou.modules.report.entity;
 
+import java.math.BigDecimal;
+import java.util.Date;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.fasterxml.jackson.annotation.JsonFormat;
-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 org.springframework.format.annotation.DateTimeFormat;
 
-import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
 
 /**
  * 快手图片报表
- * @author jeecg-boot
- * @date   2020-09-28
- * @version V1.0
  */
 @Data
 @TableName("ctop_kuaishou_report_daily_image")
-@EqualsAndHashCode(callSuper = false)
-@Accessors(chain = true)
-@ApiModel(value="ctop_kuaishou_report_daily_image对象", description="快手图片报表")
-public class KuaishouReportDailyImage {
 
+public class KuaishouReportDailyImage {
+    
 	/**id*/
-	@TableId(type = IdType.UUID)
-    @ApiModelProperty(value = "id")
-	private Integer id;
-	/**账户ID*/
-	@Excel(name = "账户ID", width = 15)
-    @ApiModelProperty(value = "账户ID")
-	private Integer coverId;
-	/**计划ID*/
-	@Excel(name = "计划ID", width = 15)
-    @ApiModelProperty(value = "计划ID")
-	private Integer photoId;
-	/**channelType*/
-	@Excel(name = "channelType", width = 15)
-    @ApiModelProperty(value = "channelType")
-	private Integer channelType;
-	/**signature*/
-	@Excel(name = "signature", width = 15)
-    @ApiModelProperty(value = "signature")
-	private String signature;
+	@TableId(type = IdType.AUTO)
+	private Long id;
+	/**封面ID*/
+	private Long coverId;
 	/**封面token*/
 	@Excel(name = "封面token", width = 15)
     @ApiModelProperty(value = "封面token")
@@ -55,14 +34,6 @@ public class KuaishouReportDailyImage {
 	@Excel(name = "封面url", width = 15)
     @ApiModelProperty(value = "封面url")
 	private String coverUrl;
-	/**视频uel*/
-	@Excel(name = "视频uel", width = 15)
-    @ApiModelProperty(value = "视频uel")
-	private String photoUrl;
-	/**素材类型*/
-	@Excel(name = "素材类型", width = 15)
-    @ApiModelProperty(value = "素材类型")
-	private String creativeMaterialTypeString;
 	/**场景*/
 	@Excel(name = "场景", width = 15)
     @ApiModelProperty(value = "场景")
@@ -70,75 +41,79 @@ public class KuaishouReportDailyImage {
 	/**花费(元)*/
 	@Excel(name = "花费(元)", width = 15)
     @ApiModelProperty(value = "花费(元)")
-	private java.math.BigDecimal charge;
+	private BigDecimal charge;
 	/**曝光数*/
 	@Excel(name = "曝光数", width = 15)
     @ApiModelProperty(value = "曝光数")
-	private Integer photoShow;
+	private Long photoShow;
 	/**素材曝光数*/
 	@Excel(name = "素材曝光数", width = 15)
     @ApiModelProperty(value = "素材曝光数")
-	private Integer aclick;
+	private Long aclick;
 	/**行为数*/
 	@Excel(name = "行为数", width = 15)
     @ApiModelProperty(value = "行为数")
-	private Integer bclick;
+	private Long bclick;
 	/**分享数*/
 	@Excel(name = "分享数", width = 15)
     @ApiModelProperty(value = "分享数")
-	private Integer photoShare;
+	private Long photoShare;
 	/**评论数*/
 	@Excel(name = "评论数", width = 15)
     @ApiModelProperty(value = "评论数")
-	private Integer photoComment;
+	private Long photoComment;
 	/**点赞数*/
 	@Excel(name = "点赞数", width = 15)
     @ApiModelProperty(value = "点赞数")
-	private Integer photoLike;
+	private Long photoLike;
 	/**新增关注数*/
 	@Excel(name = "新增关注数", width = 15)
     @ApiModelProperty(value = "新增关注数")
-	private Integer follow;
+	private Long follow;
 	/**取消关注数*/
 	@Excel(name = "取消关注数", width = 15)
     @ApiModelProperty(value = "取消关注数")
-	private Integer cancelFollow;
+	private Long cancelFollow;
 	/**举报数*/
 	@Excel(name = "举报数", width = 15)
     @ApiModelProperty(value = "举报数")
-	private Integer report;
+	private Long report;
 	/**拉黑数*/
 	@Excel(name = "拉黑数", width = 15)
     @ApiModelProperty(value = "拉黑数")
-	private Integer block;
+	private Long block;
 	/**减少此类作品数*/
 	@Excel(name = "减少此类作品数", width = 15)
     @ApiModelProperty(value = "减少此类作品数")
-	private Integer negative;
+	private Long negative;
 	/**应用下载数据-安卓下载开始数*/
 	@Excel(name = "应用下载数据-安卓下载开始数", width = 15)
     @ApiModelProperty(value = "应用下载数据-安卓下载开始数")
-	private Integer downloadStarted;
+	private Long downloadStarted;
 	/**应用下载数据-安卓下载完成数*/
 	@Excel(name = "应用下载数据-安卓下载完成数", width = 15)
     @ApiModelProperty(value = "应用下载数据-安卓下载完成数")
-	private Integer downloadCompleted;
+	private Long downloadCompleted;
 	/**应用下载数据-激活数*/
 	@Excel(name = "应用下载数据-激活数", width = 15)
     @ApiModelProperty(value = "应用下载数据-激活数")
-	private Integer activation;
+	private Long activation;
 	/**提交按钮点击数*/
 	@Excel(name = "提交按钮点击数", width = 15)
     @ApiModelProperty(value = "提交按钮点击数")
-	private Integer submit;
+	private Long submit;
 	/**日期*/
 	@Excel(name = "日期", width = 15)
     @ApiModelProperty(value = "日期")
 	private String statDate;
+	/**statHour*/
+	@Excel(name = "statHour", width = 15)
+    @ApiModelProperty(value = "statHour")
+	private String statHour;
 	/**封面点击数*/
 	@Excel(name = "封面点击数", width = 15)
     @ApiModelProperty(value = "封面点击数")
-	private Integer photoClick;
+	private Long photoClick;
 	/**封面点击率*/
 	@Excel(name = "封面点击率", width = 15)
     @ApiModelProperty(value = "封面点击率")
@@ -147,26 +122,14 @@ public class KuaishouReportDailyImage {
 	@Excel(name = "行为率", width = 15)
     @ApiModelProperty(value = "行为率")
 	private Double actionRatio;
-	/**平均千次曝光花费(元)*/
-	@Excel(name = "平均千次曝光花费(元)", width = 15)
-    @ApiModelProperty(value = "平均千次曝光花费(元)")
-	private java.math.BigDecimal impression1kCost;
-	/**平均点击单价(元)*/
-	@Excel(name = "平均点击单价(元)", width = 15)
-    @ApiModelProperty(value = "平均点击单价(元)")
-	private java.math.BigDecimal photoClickCost;
-	/**平均行为单价(元)*/
-	@Excel(name = "平均行为单价(元)", width = 15)
-    @ApiModelProperty(value = "平均行为单价(元)")
-	private java.math.BigDecimal actionCost;
 	/**应用下载数据-首日付费次数*/
 	@Excel(name = "应用下载数据-首日付费次数", width = 15)
     @ApiModelProperty(value = "应用下载数据-首日付费次数")
-	private Integer eventPayFirstDay;
+	private Long eventPayFirstDay;
 	/**应用下载数据-首日付费金额*/
 	@Excel(name = "应用下载数据-首日付费金额", width = 15)
     @ApiModelProperty(value = "应用下载数据-首日付费金额")
-	private java.math.BigDecimal eventPayPurchaseAmountFirstDay;
+	private BigDecimal eventPayPurchaseAmountFirstDay;
 	/**应用下载数据-首日ROI*/
 	@Excel(name = "应用下载数据-首日ROI", width = 15)
     @ApiModelProperty(value = "应用下载数据-首日ROI")
@@ -174,11 +137,11 @@ public class KuaishouReportDailyImage {
 	/**应用下载数据-付费次数*/
 	@Excel(name = "应用下载数据-付费次数", width = 15)
     @ApiModelProperty(value = "应用下载数据-付费次数")
-	private Integer eventPay;
+	private Long eventPay;
 	/**应用下载数据-付费金额*/
 	@Excel(name = "应用下载数据-付费金额", width = 15)
     @ApiModelProperty(value = "应用下载数据-付费金额")
-	private java.math.BigDecimal eventPayPurchaseAmount;
+	private BigDecimal eventPayPurchaseAmount;
 	/**应用下载数据-ROI*/
 	@Excel(name = "应用下载数据-ROI", width = 15)
     @ApiModelProperty(value = "应用下载数据-ROI")
@@ -186,11 +149,11 @@ public class KuaishouReportDailyImage {
 	/**应用下载数据-注册数*/
 	@Excel(name = "应用下载数据-注册数", width = 15)
     @ApiModelProperty(value = "应用下载数据-注册数")
-	private Integer eventRegister;
+	private Long eventRegister;
 	/**应用下载数据-注册成本*/
 	@Excel(name = "应用下载数据-注册成本", width = 15)
     @ApiModelProperty(value = "应用下载数据-注册成本")
-	private java.math.BigDecimal eventRegisterCost;
+	private BigDecimal eventRegisterCost;
 	/**应用下载数据-注册率*/
 	@Excel(name = "应用下载数据-注册率", width = 15)
     @ApiModelProperty(value = "应用下载数据-注册率")
@@ -198,19 +161,19 @@ public class KuaishouReportDailyImage {
 	/**应用下载数据-完件数*/
 	@Excel(name = "应用下载数据-完件数", width = 15)
     @ApiModelProperty(value = "应用下载数据-完件数")
-	private Integer eventJinJianApp;
+	private Long eventJinJianApp;
 	/**应用下载数据-完件成本*/
 	@Excel(name = "应用下载数据-完件成本", width = 15)
     @ApiModelProperty(value = "应用下载数据-完件成本")
-	private java.math.BigDecimal eventJinJianAppCost;
+	private BigDecimal eventJinJianAppCost;
 	/**应用下载数据-授信数*/
 	@Excel(name = "应用下载数据-授信数", width = 15)
     @ApiModelProperty(value = "应用下载数据-授信数")
-	private Integer eventCreditGrantApp;
+	private Long eventCreditGrantApp;
 	/**应用下载数据-授信成本*/
 	@Excel(name = "应用下载数据-授信成本", width = 15)
     @ApiModelProperty(value = "应用下载数据-授信成本")
-	private java.math.BigDecimal eventCreditGrantAppCost;
+	private BigDecimal eventCreditGrantAppCost;
 	/**应用下载数据-授信率*/
 	@Excel(name = "应用下载数据-授信率", width = 15)
     @ApiModelProperty(value = "应用下载数据-授信率")
@@ -218,27 +181,43 @@ public class KuaishouReportDailyImage {
 	/**应用下载数据-付款成功数*/
 	@Excel(name = "应用下载数据-付款成功数", width = 15)
     @ApiModelProperty(value = "应用下载数据-付款成功数")
-	private Integer eventOrderPaid;
+	private Long eventOrderPaid;
 	/**应用下载数据-付款成功金额*/
 	@Excel(name = "应用下载数据-付款成功金额", width = 15)
     @ApiModelProperty(value = "应用下载数据-付款成功金额")
-	private java.math.BigDecimal eventOrderPaidPurchaseAmount;
+	private BigDecimal eventOrderPaidPurchaseAmount;
+	/**应用下载数据-单次付款成本*/
+	@Excel(name = "应用下载数据-单次付款成本", width = 15)
+    @ApiModelProperty(value = "应用下载数据-单次付款成本")
+	private BigDecimal eventOrderPaidCost;
+	/**落地页数据-表单提交数*/
+	@Excel(name = "落地页数据-表单提交数", width = 15)
+    @ApiModelProperty(value = "落地页数据-表单提交数")
+	private Long formCount;
+	/**落地页数据-表单提交单价*/
+	@Excel(name = "落地页数据-表单提交单价", width = 15)
+    @ApiModelProperty(value = "落地页数据-表单提交单价")
+	private BigDecimal formCost;
+	/**落地页数据-表单提交点击率*/
+	@Excel(name = "落地页数据-表单提交点击率", width = 15)
+    @ApiModelProperty(value = "落地页数据-表单提交点击率")
+	private Double formActionRatio;
 	/**落地页数据-落地页完件数*/
 	@Excel(name = "落地页数据-落地页完件数", width = 15)
     @ApiModelProperty(value = "落地页数据-落地页完件数")
-	private Integer eventJinJianLandingPage;
+	private Long eventJinJianLandingPage;
 	/**落地页数据-落地页完件成本*/
 	@Excel(name = "落地页数据-落地页完件成本", width = 15)
     @ApiModelProperty(value = "落地页数据-落地页完件成本")
-	private java.math.BigDecimal eventJinJianLandingPageCost;
+	private BigDecimal eventJinJianLandingPageCost;
 	/**落地页数据-落地页授信数*/
 	@Excel(name = "落地页数据-落地页授信数", width = 15)
     @ApiModelProperty(value = "落地页数据-落地页授信数")
-	private Integer eventCreditGrantLandingPage;
+	private Long eventCreditGrantLandingPage;
 	/**落地页数据-落地页授信成本*/
 	@Excel(name = "落地页数据-落地页授信成本", width = 15)
     @ApiModelProperty(value = "落地页数据-落地页授信成本")
-	private java.math.BigDecimal eventCreditGrantLandingPageCost;
+	private BigDecimal eventCreditGrantLandingPageCost;
 	/**落地页数据-落地页授信率*/
 	@Excel(name = "落地页数据-落地页授信率", width = 15)
     @ApiModelProperty(value = "落地页数据-落地页授信率")
@@ -246,31 +225,15 @@ public class KuaishouReportDailyImage {
 	/**应用下载数据-次留成本(仅支持分日查询)*/
 	@Excel(name = "应用下载数据-次留成本(仅支持分日查询)", width = 15)
     @ApiModelProperty(value = "应用下载数据-次留成本(仅支持分日查询)")
-	private java.math.BigDecimal eventNextDayStayCost;
+	private BigDecimal eventNextDayStayCost;
 	/**应用下载数据-次留率(仅支持分日查询)*/
 	@Excel(name = "应用下载数据-次留率(仅支持分日查询)", width = 15)
     @ApiModelProperty(value = "应用下载数据-次留率(仅支持分日查询)")
-	private Integer eventNextDayStayRatio;
-	/**落地页数据-表单提交点击率*/
-	@Excel(name = "落地页数据-表单提交点击率", width = 15)
-    @ApiModelProperty(value = "落地页数据-表单提交点击率")
-	private Double formActionRatio;
-	/**应用下载数据-单次付款成本*/
-	@Excel(name = "应用下载数据-单次付款成本", width = 15)
-    @ApiModelProperty(value = "应用下载数据-单次付款成本")
-	private java.math.BigDecimal eventOrderPaidCost;
+	private Long eventNextDayStayRatio;
 	/**应用下载数据-次留数(仅支持分日查询)*/
 	@Excel(name = "应用下载数据-次留数(仅支持分日查询)", width = 15)
     @ApiModelProperty(value = "应用下载数据-次留数(仅支持分日查询)")
-	private Integer eventNextDayStay;
-	/**落地页数据-表单提交单价*/
-	@Excel(name = "落地页数据-表单提交单价", width = 15)
-    @ApiModelProperty(value = "落地页数据-表单提交单价")
-	private java.math.BigDecimal formCost;
-	/**落地页数据-表单提交数*/
-	@Excel(name = "落地页数据-表单提交数", width = 15)
-    @ApiModelProperty(value = "落地页数据-表单提交数")
-	private Integer formCount;
+	private Long eventNextDayStay;
 	/**3s播放率*/
 	@Excel(name = "3s播放率", width = 15)
     @ApiModelProperty(value = "3s播放率")
@@ -287,4 +250,20 @@ public class KuaishouReportDailyImage {
     @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
     @ApiModelProperty(value = "修改时间")
 	private Date updateTime;
+	/**accountId*/
+	@Excel(name = "accountId", width = 15)
+    @ApiModelProperty(value = "accountId")
+	private Long accountId;
+	/**code*/
+	@Excel(name = "code", width = 15)
+    @ApiModelProperty(value = "code")
+	private String code;
+	/**userId*/
+	@Excel(name = "userId", width = 15)
+    @ApiModelProperty(value = "userId")
+	private String userId;
+	/**realname*/
+	@Excel(name = "realname", width = 15)
+    @ApiModelProperty(value = "realname")
+	private String realname;
 }

+ 2 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/service/IKuaishouReportDailyImageService.java

@@ -11,4 +11,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IKuaishouReportDailyImageService extends IService<KuaishouReportDailyImage> {
 
+    void getMaterialImageReport(Long accountId, String accessToken, String startDate, String endDate, Integer page);
+
 }

+ 65 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/report/service/impl/KuaishouReportDailyImageServiceImpl.java

@@ -1,18 +1,83 @@
 package cn.com.ctop.kuaishou.modules.report.service.impl;
 
+import cn.com.ctop.common.module.utils.Check;
+import cn.com.ctop.common.module.utils.HttpUtils;
+import cn.com.ctop.common.module.utils.KuaishouInterfaceConstant;
+import cn.com.ctop.common.module.utils.PropertiesUtils;
+import cn.com.ctop.kuaishou.modules.batch.entity.KuaiShouCreative;
 import cn.com.ctop.kuaishou.modules.report.entity.KuaishouReportDailyImage;
 import cn.com.ctop.kuaishou.modules.report.mapper.KuaishouReportDailyImageMapper;
 import cn.com.ctop.kuaishou.modules.report.service.IKuaishouReportDailyImageService;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
+import org.checkerframework.checker.units.qual.K;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 /**
  * 快手图片报表
  * @author jeecg-boot
  * @date   2020-09-28
  * @version V1.0
  */
+@Slf4j
 @Service
 public class KuaishouReportDailyImageServiceImpl extends ServiceImpl<KuaishouReportDailyImageMapper, KuaishouReportDailyImage> implements IKuaishouReportDailyImageService {
 
+    @Autowired
+    KuaishouReportDailyImageMapper kuaishouReportDailyImageMapper;
+
+    @Override
+    public void getMaterialImageReport(Long accountId, String accessToken, String startDate, String endDate, Integer page) {
+
+        Map<String, String> headers = new HashMap<>();
+        headers.put("Content-Type", " application/json");
+        headers.put("Access-Token", accessToken);
+
+        JSONObject param = new JSONObject();
+        param.put("advertiser_id", accountId);
+        param.put("start_date",startDate);
+        param.put("end_date",endDate);
+        param.put("view_type",7);
+        param.put("temporal_granularity","DAILY");
+        param.put("page_size", 1000);
+        param.put("page", page);
+
+        JSONObject resultJson = JSONObject.parseObject(HttpUtils.kuaiShouhttpPostRequest("https://ad.e.kuaishou.com/rest/openapi/v1/report/material_report", param.toJSONString(), headers));
+        if (Check.isNull(resultJson)) {
+            log.error("获取素材图片报表返回结果为空,advertiserId:{}", accountId);
+            return;
+        }
+
+        JSONArray details = resultJson.getJSONArray("details");
+        if (null == details || details.size() <= 0) {
+            return;
+        }
+        List<KuaishouReportDailyImage> imageReports = new ArrayList<>();
+        details.forEach(detail->{
+            JSONObject detailJSON = (JSONObject) detail;
+            if (!Check.isNull(detailJSON)) {
+                detailJSON.put("photo_like", detailJSON.getInteger("like"));
+                detailJSON.put("photo_share", detailJSON.getInteger("share"));
+                detailJSON.put("photo_comment", detailJSON.getInteger("comment"));
+                detailJSON.put("photo_show", detailJSON.getInteger("show"));
+                KuaishouReportDailyImage kuaishouReportDailyImage = JSONObject.toJavaObject(detailJSON,KuaishouReportDailyImage.class);
+                kuaishouReportDailyImage.setAccountId(accountId);
+
+                imageReports.add(kuaishouReportDailyImage);
+            }
+        });
+        this.saveBatch(imageReports);
+        if(resultJson.getInteger("total_count")>(1000*page)){
+            getMaterialImageReport(accountId, accessToken, startDate, endDate, page + 1);
+        }
+    }
+
 }

+ 0 - 5
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/material/entity/ByteDanceAdvertisePlan.java

@@ -140,7 +140,6 @@ public class ByteDanceAdvertisePlan {
 
     private String convertedTimeDuration;
 
-    private String inventoryType;
 
     // audience
     private String audience;
@@ -392,10 +391,6 @@ public class ByteDanceAdvertisePlan {
         if (null != externalUrl && !"".equals(externalUrl.trim())) {
             this.externalUrl = externalUrl;
         }
-        String inventoryType = dataObject.getString("inventory_type");
-        if(null!=inventoryType&&!"".equals(inventoryType.trim())){
-            this.inventoryType  =inventoryType;
-        }
     }
 
     public ByteDanceAdvertisePlan(String advertiserId, Long adId, JSONObject params) {

+ 1 - 1
module-toutiao/src/main/java/cn/com/ctop/toutiao/modules/report/service/impl/ReportServiceImpl.java

@@ -236,7 +236,7 @@ public class ReportServiceImpl implements IReportService {
                 target.setHideIfConverted(plan.getHideIfConverted());
                 target.setHideIfExists(plan.getHideIfExists());
 
-                target.setInventoryType(plan.getInventoryType());
+                //target.setInventoryType(plan.getInventoryType());
                 if(null!=audienceObject.getString("city")){
                     target.setDistrict(audienceObject.getString("city"));
                 }