Forráskód Böngészése

Merge branch 'V1.1.2'

syh 4 éve
szülő
commit
0ac967367f
26 módosított fájl, 295 hozzáadás és 136 törlés
  1. 30 57
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/controller/PlatformFileCtrl.java
  2. 9 38
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/controller/PlatformScriptController.java
  3. 21 4
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/entity/PlatformScript.java
  4. 1 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/mapper/PlatformMaterialMapper.java
  5. 6 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/mapper/PlatformScriptMapper.java
  6. 1 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/mapper/PlatformVideoMapper.java
  7. 6 3
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/mapper/xml/PlatformMaterialMapper.xml
  8. 25 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/mapper/xml/PlatformScriptMapper.xml
  9. 1 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/service/IPlatformMaterialService.java
  10. 7 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/service/IPlatformScriptService.java
  11. 1 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/service/IPlatformVideoService.java
  12. 5 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/service/impl/PlatformOrderServiceImpl.java
  13. 46 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/service/impl/PlatformScriptServiceImpl.java
  14. 15 4
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/orderplatform/util/ApprovalNodeNoticeHandler.java
  15. 18 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/wps/controller/UserImplController.java
  16. 2 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/wps/service/IWpsFileService.java
  17. 34 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/wps/service/impl/WpsFileServiceImpl.java
  18. 8 8
      jeecg-boot-module-system/src/main/resources/application-wps.yml
  19. 8 8
      jeecg-boot-module-system/src/test/java/org/jeecg/SampleTest.java
  20. 1 1
      module-job-kuaishou/src/main/java/cn/com/ctop/job/kuaishou/handler/KuaiShouDailyImageReportLoadJob.java
  21. 27 5
      module-job-kuaishou/src/main/java/cn/com/ctop/job/kuaishou/handler/KuaishouAiAdsNewMaterialCreativityJob.java
  22. 3 1
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/ai/controller/AiKuaishouAdvertiserStrategyController.java
  23. 3 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/ai/entity/AiKuaishouAccountTargetTemplate.java
  24. 1 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/ai/service/IAiKuaishouAccountTargetTemplateService.java
  25. 11 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/ai/service/impl/AiKuaishouAccountTargetTemplateServiceImpl.java
  26. 5 3
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/ai/service/impl/AiKuaishouNewCreateCampaignServiceImpl.java

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

@@ -2,18 +2,16 @@ package org.jeecg.modules.orderplatform.controller;
 
 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;
-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.entity.PlatformScript;
 import org.jeecg.modules.orderplatform.service.IPlatformMaterialService;
+import org.jeecg.modules.orderplatform.service.IPlatformScriptService;
 import org.jeecg.modules.orderplatform.service.IPlatformVideoService;
+import org.jeecg.modules.orderplatform.util.ApprovalNodeNoticeHandler;
 import org.jeecg.modules.orderplatform.util.OperateRecordHandler;
-import org.jeecg.modules.wps.entity.WpsFile;
-import org.jeecg.modules.wps.service.IWpsFileService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
@@ -35,7 +33,7 @@ public class PlatformFileCtrl {
     private IPlatformVideoService platformVideoService;
 
     @Autowired
-    private IWpsFileService wpsFileService;
+    private IPlatformScriptService platformScriptService;
 
     @Autowired
     private IPlatformMaterialService platformMaterialService;
@@ -43,6 +41,9 @@ public class PlatformFileCtrl {
     @Autowired
     private OperateRecordHandler operateRecordHandler;
 
+    @Autowired
+    private ApprovalNodeNoticeHandler approvalNodeNoticeHandler;
+
     /**
      * 新建订单上传附件
      */
@@ -53,7 +54,7 @@ public class PlatformFileCtrl {
         if (file.isEmpty() || !((file.getOriginalFilename().endsWith(".zip") || file.getOriginalFilename().endsWith(".rar") || file.getOriginalFilename().endsWith(".7z")))) {
             result.error500("请上传正确的压缩文件");
         } else {
-            String fileName = projectId + "_" + System.currentTimeMillis()+"_"+file.getOriginalFilename();
+            String fileName = projectId + "_" + System.currentTimeMillis() + "_" + file.getOriginalFilename();
             InputStream inputStream = null;
             try {
                 inputStream = file.getInputStream();
@@ -79,27 +80,26 @@ public class PlatformFileCtrl {
                                        @RequestParam("projectId") Long projectId) {
         Result<Object> result = new Result<>();
         try {
-            LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
             // 脚本上传成功需要返回脚本id,更新物料表,更新完成后去更新脚本库的绑定项目
-            WpsFile wpsFile = wpsFileService.uploadFile(file, user.getId());
-            if (null == wpsFile) {
+            PlatformScript script = platformScriptService.saveScript(file,projectId);
+            if (null == script) {
                 result.error500("脚本上传失败");
                 return result;
             }
             //物料状态->脚本已上传,待审核
-            PlatformMaterial platformMaterial = new PlatformMaterial();
+            PlatformMaterial platformMaterial = platformMaterialService.getById(materialId);
+            if (platformMaterial.getScriptStatus() ==3) {
+                result.error500("数据已更新,请刷新页面");
+                return result;
+            }
             platformMaterial.setId(materialId);
             platformMaterial.setMaterialStatus(2);
             platformMaterial.setScriptStatus(1);
-            platformMaterial.setScriptId(wpsFile.getId());
+            platformMaterial.setScriptId(script.getId());
             boolean save = platformMaterialService.updateById(platformMaterial);
             if (save) {
-                // 更新脚本库的绑定项目
-                wpsFile.setProjectId(projectId);
-                //  Todo 暂时兼容题库
-                wpsFile.setIsScript(0);
-                wpsFileService.updateById(wpsFile);
-                operateRecordHandler.Submit(platformMaterialService.getById(materialId).getMaterialCode(), "SCRIPT");
+                operateRecordHandler.Submit(platformMaterial.getMaterialCode(), "SCRIPT");
+                approvalNodeNoticeHandler.NOTICE_WE_CHAT_MATERIAL("SCRIPT", platformMaterial.getMaterialCode());
             }
         } catch (Exception e) {
             e.printStackTrace();
@@ -107,60 +107,33 @@ public class PlatformFileCtrl {
         return result;
     }
 
-    /**
-     * 剪辑上传视频
-     * Todo 在下单制正式上线后,这个接口会改造
-     */
-/*    @PostMapping("/uploadVideo")
-    public Result<Object> uploadVideoOld(@RequestBody JSONObject requestBody) {
-        Result<Object> result = new Result<>();
-        String videoId = materialInfoService.platformUploadVideo(requestBody);
-        if (videoId.isEmpty()) {
-            result.error500("同步素材库失败,请联系管理员");
-        } else {
-            //物料状态->视频已上传,待审核
-            PlatformMaterial platformMaterial = new PlatformMaterial();
-            platformMaterial.setId(requestBody.getLong("materialId"));
-            platformMaterial.setMaterialStatus(5);
-            platformMaterial.setVideoStatus(1);
-            platformMaterial.setVideoId(videoId);
-            boolean save = platformMaterialService.updateById(platformMaterial);
-            if (save) {
-                operateRecordHandler.Submit(platformMaterialService.getById(requestBody.getString("materialId")).getMaterialCode(), "VIDEO");
-                result.success("同步素材库成功");
-            }
-        }
-        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){
+    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){
+        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()){
+        if (videoMd5.isEmpty()) {
             result.error500("素材视频上传失败,参数为空");
-        }else {
+        } else {
             //物料状态->视频已上传,待审核
-            PlatformMaterial platformMaterial = new PlatformMaterial();
+            PlatformMaterial platformMaterial = platformMaterialService.getById(requestBody.getString("materialId"));
+            if (platformMaterial.getVideoStatus() ==3) {
+                result.error500("数据已更新,请刷新页面");
+                return result;
+            }
             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");
+                operateRecordHandler.Submit(platformMaterial.getMaterialCode(), "VIDEO");
+                approvalNodeNoticeHandler.NOTICE_WE_CHAT_MATERIAL("VIDEO", platformMaterial.getMaterialCode());
                 result.success("素材视频上传成功");
             }
         }

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

@@ -1,8 +1,10 @@
 package org.jeecg.modules.orderplatform.controller;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.pagehelper.PageInfo;
 import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.system.query.QueryGenerator;
@@ -19,7 +21,7 @@ import java.util.Arrays;
  */
 @Slf4j
 @RestController
-@RequestMapping("/com.cn/platformScript")
+@RequestMapping("/platformScript")
 public class PlatformScriptController {
 	@Autowired
 	private IPlatformScriptService platformScriptService;
@@ -28,14 +30,12 @@ public class PlatformScriptController {
 	 * 分页列表查询
 	 */
 	@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);
+	public Result<PageInfo<JSONObject>> queryPageList(PlatformScript platformScript,
+													  @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+													  @RequestParam(name="pageSize", defaultValue="10") Integer pageSize
+													  ) {
+		Result<PageInfo<JSONObject>> result = new Result<>();
+		PageInfo<JSONObject> pageList = platformScriptService.page(platformScript.getProjectId(),platformScript.getName(),platformScript.getCreator(),pageNo,pageSize);
 		result.setSuccess(true);
 		result.setResult(pageList);
 		return result;
@@ -77,35 +77,6 @@ public class PlatformScriptController {
 	}
 
 	/**
-	 * 通过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")

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

@@ -14,7 +14,7 @@ import lombok.Data;
 public class PlatformScript {
     
 	/**id*/
-	@TableId(type = IdType.AUTO)
+	@TableId(type = IdType.UUID)
 	private String id;
 	/**name*/
 	private String name;
@@ -25,17 +25,34 @@ public class PlatformScript {
 	/**creator*/
 	private String creator;
 	/**createTime*/
-	private Integer createTime;
+	private Long createTime;
 	/**modifier*/
 	private String modifier;
 	/**modifyTime*/
-	private Integer modifyTime;
+	private Long modifyTime;
 	/**downloadUrl*/
 	private Object downloadUrl;
 	/**projectId*/
-	private Integer projectId;
+	private Long projectId;
 	/**deleted*/
 	private String deleted;
 	/**canDelete*/
 	private String canDelete;
+
+	public PlatformScript(){super();}
+
+	public PlatformScript(String name, int version, int size, String creator,
+				   String modifier, Long createTime, Long modifyTime, String downloadUrl ,Long projectId) {
+		this.name = name;
+		this.version = version;
+		this.size = size;
+		this.creator = creator;
+		this.modifier = modifier;
+		this.createTime = createTime;
+		this.modifyTime = modifyTime;
+		this.downloadUrl = downloadUrl;
+		this.projectId=projectId;
+		this.deleted = "N";
+		this.canDelete = "Y";
+	}
 }

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

@@ -29,7 +29,7 @@ public interface PlatformMaterialMapper extends BaseMapper<PlatformMaterial> {
 
     PlatformMaterial queryByCode(@Param("materialCode") String materialCode);
 
-    int queryCountByMaterialAndVideo(@Param("materialCode") String materialCode,@Param("videoMd5") String videoMd5);
+    int queryCountByMaterialAndVideo(@Param("materialCode") String materialCode, @Param("videoMd5") String videoMd5);
 
     //查询物料相关人员
     JSONObject queryMaterialRelatePersonByMaterialCode(@Param("materialCode") String materialCode);

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

@@ -1,11 +1,17 @@
 package org.jeecg.modules.orderplatform.mapper;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
 import org.jeecg.modules.orderplatform.entity.PlatformScript;
 
+import java.util.List;
+
 /**
  * 下单平台关联脚本
  */
 public interface PlatformScriptMapper extends BaseMapper<PlatformScript> {
 
+    List<JSONObject> pageQuery(@Param("projectId") Long projectId,@Param("name") String name,@Param("creator") String creator);
+
 }

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

@@ -9,6 +9,6 @@ import org.jeecg.modules.orderplatform.entity.PlatformVideo;
  */
 public interface PlatformVideoMapper extends BaseMapper<PlatformVideo> {
 
-    int deleteByMd5(@Param("md5") String  md5);
+    int deleteByMd5(@Param("md5") String md5);
 
 }

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

@@ -138,7 +138,7 @@
             t2.download_url as url
         FROM
             ctop_platform_material t1
-            LEFT JOIN wps_file t2 ON t1.script_id = t2.id
+            LEFT JOIN ctop_platform_script t2 ON t1.script_id = t2.id
         where t2.id=#{scriptId}
     </select>
 
@@ -206,15 +206,17 @@
         FROM
             ctop_platform_material t1
                 LEFT JOIN ctop_platform_order t2 ON t1.order_code = t2.order_code
-                LEFT JOIN wps_file t3 ON t1.script_id = t3.id
+                LEFT JOIN ctop_platform_script t3 ON t1.script_id = t3.id
                 LEFT JOIN ctop_platform_video t4 ON t1.video_id = t4.md5
         where t1.material_code=#{materialCode}
+        limit 1
     </select>
 
     <select id="queryOrderRelatePersonByMaterialCode" resultType="com.alibaba.fastjson.JSONObject">
         SELECT
             id AS orderId,
             order_title AS orderTitle,
+            order_advice as orderAdvice,
             t1.design,
             t1.create_by as operator,
             (SELECT realname from sys_user where id=t1.create_by limit 1) as operatorName,
@@ -223,5 +225,6 @@
             ctop_platform_order t1
         WHERE
             order_code = #{orderCode}
+        limit 1
     </select>
-</mapper>
+</mapper>

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

@@ -2,4 +2,29 @@
 <!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">
 
+    <select id="pageQuery" resultType="com.alibaba.fastjson.JSONObject">
+        SELECT
+            t1.id,
+            t1.`name`,
+            t1.size,
+            t1.create_time,
+            FROM_UNIXTIME(CAST(t1.create_time/1000 AS INT)) as createTime,
+            (SELECT realname from sys_user where id=t1.creator limit 1) as creatorName,
+            (SELECT project_name from ctop_project where id=t1.project_id limit 1) as projectName,
+            t2.material_name as materialName
+
+        FROM
+            ctop_platform_script t1
+                LEFT JOIN ctop_platform_material t2 ON t1.id = t2.script_id
+        where t2.material_code is not null
+        <if test="projectId != null">
+            AND t1.project_id= #{projectId}
+        </if>
+        <if test="name != null">
+            AND t1.name like '%${name}%'
+        </if>
+        <if test="creator != null">
+            AND t1.creator = #{creator}
+        </if>
+    </select>
 </mapper>

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

@@ -39,7 +39,7 @@ public interface IPlatformMaterialService extends IService<PlatformMaterial> {
     /**
      *  查询上传视频是否出现在其他物料中
      */
-    int queryCountByMaterialAndVideo(String  materialCode, String videoMd5);
+    int queryCountByMaterialAndVideo(String materialCode, String videoMd5);
     /**
      *  同步视频到汇创素材库(包括关联的项目)
      */

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

@@ -1,11 +1,18 @@
 package org.jeecg.modules.orderplatform.service;
 
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.github.pagehelper.PageInfo;
 import org.jeecg.modules.orderplatform.entity.PlatformScript;
+import org.springframework.web.multipart.MultipartFile;
 
 /**
  *  下单平台关联脚本
  */
 public interface IPlatformScriptService extends IService<PlatformScript> {
 
+    PlatformScript saveScript(MultipartFile file ,Long projectId);
+
+    PageInfo<JSONObject> page(Long projectId , String name, String creator, int pageNo, int  pageSize);
+
 }

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

@@ -9,6 +9,6 @@ import org.jeecg.modules.orderplatform.entity.PlatformVideo;
  */
 public interface IPlatformVideoService extends IService<PlatformVideo> {
 
-    String uploadVideo (JSONObject params);
+    String uploadVideo(JSONObject params);
 
 }

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

@@ -9,6 +9,7 @@ import org.jeecg.modules.orderplatform.entity.PlatformOrder;
 import org.jeecg.modules.orderplatform.mapper.PlatformOrderMapper;
 import org.jeecg.modules.orderplatform.service.IPlatformMaterialService;
 import org.jeecg.modules.orderplatform.service.IPlatformOrderService;
+import org.jeecg.modules.orderplatform.util.ApprovalNodeNoticeHandler;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -28,6 +29,9 @@ public class PlatformOrderServiceImpl extends ServiceImpl<PlatformOrderMapper, P
     @Autowired
     PlatformOrderMapper platformOrderMapper;
 
+    @Autowired
+    ApprovalNodeNoticeHandler approvalNodeNoticeHandler;
+
     @Override
     public boolean generateMaterials(PlatformOrder platformOrder) {
         boolean result=false;
@@ -58,6 +62,7 @@ public class PlatformOrderServiceImpl extends ServiceImpl<PlatformOrderMapper, P
         if(platformOrder.getMaterialAmount().equals(platformOrder.getMaterialFinishAmount())){
             platformOrder.setOrderStatus(3);
             platformOrder.setOrderFinishTime(DateUtils.getDate());
+            approvalNodeNoticeHandler.NOTICE_WE_CHAT_ORDER("ORDER_END",code);
         }
         return this.updateById(platformOrder);
     }

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

@@ -1,10 +1,23 @@
 package org.jeecg.modules.orderplatform.service.impl;
 
+import cn.com.ctop.common.module.utils.CosUtils;
+import cn.com.ctop.common.module.vo.ResFileDTO;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.modules.orderplatform.entity.PlatformScript;
 import org.jeecg.modules.orderplatform.mapper.PlatformScriptMapper;
 import org.jeecg.modules.orderplatform.service.IPlatformScriptService;
+import org.jeecg.modules.wps.service.IWpsFileWatermarkService;
+import org.jeecg.modules.wps.service.IWpsUserAclService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
 
 /**
  * 下单平台关联脚本
@@ -12,4 +25,37 @@ import org.springframework.stereotype.Service;
 @Service
 public class PlatformScriptServiceImpl extends ServiceImpl<PlatformScriptMapper, PlatformScript> implements IPlatformScriptService {
 
+    @Autowired
+    private IWpsUserAclService wpsUserAclService;
+
+    @Autowired
+    private IWpsFileWatermarkService wpsFileWatermarkService;
+
+    @Autowired
+    private PlatformScriptMapper platformScriptMapper;
+
+    @Override
+    public PlatformScript saveScript(MultipartFile file,Long projectId) {
+        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        //上传文件到cos
+        ResFileDTO resFileDTO = CosUtils.uploadMultipartFile(file,"script-lib/wps/");
+        //构造下单制脚本库参数
+        PlatformScript script=new PlatformScript(resFileDTO.getFileName(),1,((int) resFileDTO.getFileSize()),
+                user.getId(),user.getId(),System.currentTimeMillis(),System.currentTimeMillis(), resFileDTO.getFileUrl(),projectId);
+        this.save(script);
+        // 处理权限
+        wpsUserAclService.saveUserFileAcl(user.getId(),script.getId());
+        // 处理水印
+        wpsFileWatermarkService.saveWatermark(script.getId());
+
+        return script;
+
+    }
+
+    @Override
+    public PageInfo<JSONObject> page(Long projectId, String name, String creator, int pageNo, int  pageSize) {
+        PageHelper.startPage(pageNo,pageSize);
+        List<JSONObject> result = platformScriptMapper.pageQuery(projectId,name,creator);
+        return new PageInfo<>(result);
+    }
 }

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

@@ -90,6 +90,15 @@ public class ApprovalNodeNoticeHandler {
                                 orderRelatePerson.getString("operatorName")));
                 break;
 
+            //订单完结
+            case "ORDER_END":
+                sendWeChat(orderRelatePerson.getString("design"),
+                        String.format("您的订单“%s”物料已全部制作完成,订单已被系统自动完结\n 订单ID:%s\n操作人:%s",
+                                orderRelatePerson.getString("orderTitle"),
+                                orderRelatePerson.getLong("orderId"),
+                                orderRelatePerson.getString("operatorName")));
+                break;
+
             //脚本上传成功,通知运营审核
             case "SCRIPT":
                 sendWeChat(materialRelatePerson.getString("operator"),
@@ -131,21 +140,23 @@ public class ApprovalNodeNoticeHandler {
             //脚本被驳回,通知编导重新上传脚本
             case "REJECT_SCRIPT":
                 sendWeChat(materialRelatePerson.getString("plan"),
-                        String.format("您的脚本“%s”被驳回,请及时查看!\n 所属订单:%s\n 订单ID:%s\n审核人:%s",
+                        String.format("您的脚本“%s”被驳回,请及时查看!\n 所属订单:%s\n 订单ID:%s\n审核人:%s\n驳回原因:%s",
                                 materialRelatePerson.getString("scriptName"),
                                 materialRelatePerson.getString("orderTitle"),
                                 materialRelatePerson.getLong("orderId"),
-                                materialRelatePerson.getString("operatorName")));
+                                materialRelatePerson.getString("operatorName"),
+                                materialRelatePerson.getString("scriptAdvise")));
                 break;
 
             //视频被驳回,通知剪辑重新上传视频
             case "REJECT_VIDEO":
                 sendWeChat(materialRelatePerson.getString("clip"),
-                        String.format("您的视频“%s”被驳回,请及时查看!\n 所属订单:%s\n 订单ID:%s\n审核人:%s",
+                        String.format("您的视频“%s”被驳回,请及时查看!\n 所属订单:%s\n 订单ID:%s\n审核人:%s\n驳回原因:%s",
                                 materialRelatePerson.getString("videoName"),
                                 materialRelatePerson.getString("orderTitle"),
                                 materialRelatePerson.getLong("orderId"),
-                                materialRelatePerson.getString("operatorName")));
+                                materialRelatePerson.getString("operatorName"),
+                                materialRelatePerson.getString("videoAdvise")));
 
         }
     }

+ 18 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/wps/controller/UserImplController.java

@@ -1,6 +1,7 @@
 package org.jeecg.modules.wps.controller;
 
 import lombok.extern.slf4j.Slf4j;
+import org.jeecg.modules.orderplatform.service.IPlatformScriptService;
 import org.jeecg.modules.wps.base.Response;
 import org.jeecg.modules.wps.dto.FileListDTO;
 import org.jeecg.modules.wps.service.IWpsFileService;
@@ -20,6 +21,7 @@ import java.util.Map;
 @RestController
 @RequestMapping("v1/api/file")
 public class UserImplController{
+
     @Autowired
     private IWpsFileService wpsFileService;
 
@@ -90,4 +92,20 @@ public class UserImplController{
         }
     }
 
+    /**
+     * 通过fileId获取wpsUrl以及token
+     * @param fileId 文件id
+     * @return token(包含url)
+     */
+    @GetMapping("getPlatformScriptViewUrlDbPath")
+    public ResponseEntity<Object> getPlatformScriptViewUrlDbPath(String fileId, String userId){
+        log.info("getViewUrlDbPath:fileId={},userId={}",fileId,userId);
+        Token t = wpsFileService.getPlatformScriptViewUrl(fileId,userId,true);
+        if (t != null){
+            return Response.success(t);
+        }else {
+            return Response.bad("文件不存在或其它异常!");
+        }
+    }
+
 }

+ 2 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/wps/service/IWpsFileService.java

@@ -34,6 +34,8 @@ public interface IWpsFileService extends IService<WpsFile> {
 
     Token getViewUrl(String fileUrl, String userId,boolean b);
 
+    Token getPlatformScriptViewUrl(String fileUrl, String userId,boolean b);
+
     List<FileListDTO> getFileList();
 
     Map<String,Object> getFileListByPage(int pageNum,int pageSize);

+ 34 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/wps/service/impl/WpsFileServiceImpl.java

@@ -14,6 +14,8 @@ import com.github.pagehelper.PageInfo;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.modules.orderplatform.entity.PlatformScript;
+import org.jeecg.modules.orderplatform.service.IPlatformScriptService;
 import org.jeecg.modules.system.service.ISysUserService;
 import org.jeecg.modules.wps.config.Context;
 import org.jeecg.modules.wps.dto.*;
@@ -54,6 +56,8 @@ public class WpsFileServiceImpl extends ServiceImpl<WpsFileMapper, WpsFile> impl
     private WpsUtil wpsUtil;
     @Autowired
     private ISysUserService sysUserService;
+    @Autowired
+    private IPlatformScriptService platformScriptService;
 
     private static final String OSS_URL_PREFIX = "https://ctop-media.oss-cn-beijing.aliyuncs.com/script-lib/wps/";
     @Override
@@ -117,6 +121,36 @@ public class WpsFileServiceImpl extends ServiceImpl<WpsFileMapper, WpsFile> impl
     }
 
     @Override
+    public Token getPlatformScriptViewUrl(String fileId, String userId, boolean checkToken) {
+        PlatformScript fileEntity = platformScriptService.getById(fileId);
+        if (fileEntity != null){
+            Token t = new Token();
+            String fileName = fileEntity.getName();
+            String fileType = FileUtil.getFileTypeByName(fileName);
+
+            UUID randomUuid = UUID.randomUUID();
+            String uuid = randomUuid.toString().replace("-","");
+
+            Map<String,String> values = new HashMap<>();
+            values.put("_w_appid", WpsUtil.appid);
+            if (checkToken){
+                values.put("_w_tokentype","1");
+            }
+            values.put("_w_filepath",fileName);
+            values.put("_w_userid", userId);
+            values.put("_w_filetype","db");
+
+            String wpsUrl = wpsUtil.getWpsUrl(values,fileType,fileEntity.getId());
+            t.setToken(uuid);
+            t.setExpires_in(600);
+            t.setWpsUrl(wpsUrl);
+
+            return t;
+        }
+        return null;
+    }
+
+    @Override
     public Map<String,Object> getFileInfo(String userId, String filePath,String fileType,String fileId){
         if ("web".equalsIgnoreCase(fileType)){
             return getWebFileInfo(filePath);

+ 8 - 8
jeecg-boot-module-system/src/main/resources/application-wps.yml

@@ -95,16 +95,16 @@ spring:
         # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
         connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
       datasource:
-        master:
-          url: jdbc:mysql://139.186.151.174:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true
-          username: hcst
-          password: hcst@2020
-          driver-class-name: com.mysql.jdbc.Driver
 #        master:
-#          url: jdbc:mysql://139.186.27.96:4000/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false
-#          username: data
-#          password: hcst@2021
+#          url: jdbc:mysql://139.186.151.174:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true
+#          username: hcst
+#          password: hcst@2020
 #          driver-class-name: com.mysql.jdbc.Driver
+        master:
+          url: jdbc:mysql://139.186.27.96:4000/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false
+          username: data
+          password: hcst@2021
+          driver-class-name: com.mysql.jdbc.Driver
   #redis 配置
   redis:
     database: 0

+ 8 - 8
jeecg-boot-module-system/src/test/java/org/jeecg/SampleTest.java

@@ -501,15 +501,15 @@ public class SampleTest {
 //        if (null == accountTargetTemplates || accountTargetTemplates.isEmpty()) {
 //            return;
 //        }
+//        for (AiKuaishouAccountTargetTemplate template:accountTargetTemplates){
+//            if(template.getAccountId()!=9556344L){
+//                AiKuaishouAccountTargetTemplate accountTargetTemplate2 = aiKuaishouAccountTargetTemplateService.getByAccountId(template.getAccountId());
+//                aiKuaishouNewCreateCampaign.kuaishouAiAddNewMaterialCreativity(accountTargetTemplate2,50);
+//            }
+//        }
 
-//        AiKuaishouAccountTargetTemplate accountTargetTemplate0 = aiKuaishouAccountTargetTemplateService.getById(1);
-//        aiKuaishouNewCreateCampaign.kuaishouAiAddNewMaterialCreativity(accountTargetTemplate0,50);
-//
-//        AiKuaishouAccountTargetTemplate accountTargetTemplate1 = aiKuaishouAccountTargetTemplateService.getById(30002);
-//        aiKuaishouNewCreateCampaign.kuaishouAiAddNewMaterialCreativity(accountTargetTemplate1,50);
-
-        AiKuaishouAccountTargetTemplate accountTargetTemplate2 = aiKuaishouAccountTargetTemplateService.getById(90005);
-        aiKuaishouNewCreateCampaign.kuaishouAiAdsNewMaterialCreativity(accountTargetTemplate2);
+        AiKuaishouAccountTargetTemplate accountTargetTemplate2 = aiKuaishouAccountTargetTemplateService.getById(120001);
+        aiKuaishouNewCreateCampaign.kuaishouAiAddNewMaterialCreativity(accountTargetTemplate2,1);
     }
 
     @Test

+ 1 - 1
module-job-kuaishou/src/main/java/cn/com/ctop/job/kuaishou/handler/KuaiShouDailyImageReportLoadJob.java

@@ -1,4 +1,4 @@
-package com.ctop.job.kuaishou.handler;
+package cn.com.ctop.job.kuaishou.handler;
 
 import cn.com.ctop.common.module.entity.CtopOauthToken;
 import cn.com.ctop.common.module.service.ICtopOauthTokenService;

+ 27 - 5
module-job-kuaishou/src/main/java/cn/com/ctop/job/kuaishou/handler/KuaishouAiAdsNewMaterialCreativityJob.java

@@ -3,24 +3,30 @@ package cn.com.ctop.job.kuaishou.handler;
 import cn.com.ctop.kuaishou.modules.ai.entity.AiKuaishouAccountTargetTemplate;
 import cn.com.ctop.kuaishou.modules.ai.service.IAiKuaishouAccountTargetTemplateService;
 import cn.com.ctop.kuaishou.modules.ai.service.IAiKuaishouNewCreateCampaign;
+import com.xxl.job.core.context.XxlJobHelper;
 import com.xxl.job.core.handler.annotation.XxlJob;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 
 @Component
 public class KuaishouAiAdsNewMaterialCreativityJob {
 
     @Autowired
     IAiKuaishouNewCreateCampaign aiKuaishouNewCreateCampaign;
+    static ExecutorService executorService = Executors.newFixedThreadPool(5);
+    static CountDownLatch countDownLatch = null;
+
     @Autowired
     private IAiKuaishouAccountTargetTemplateService aiKuaishouAccountTargetTemplateService;
-
     @XxlJob("kuaishouAiAdsNewMaterialCreativityJob")
     public void kuaishouAiAdsNewMaterialCreativityJob() {
         List<AiKuaishouAccountTargetTemplate> accountTargetTemplates = aiKuaishouAccountTargetTemplateService.getAllEffectTemplate();
-        if (null == accountTargetTemplates || accountTargetTemplates.isEmpty()) {
+        if(null==accountTargetTemplates||accountTargetTemplates.isEmpty()){
             return;
         }
         accountTargetTemplates.forEach(targetTemplate -> aiKuaishouNewCreateCampaign.kuaishouAiAdsNewMaterialCreativity(targetTemplate));
@@ -30,16 +36,32 @@ public class KuaishouAiAdsNewMaterialCreativityJob {
     @XxlJob("kuaishouAiAddNewMaterialCreativityJob")
     public void kuaishouAiAddNewMaterialCreativityJob() {
         List<AiKuaishouAccountTargetTemplate> accountTargetTemplates = aiKuaishouAccountTargetTemplateService.getAllEffectTemplate();
-        if (null == accountTargetTemplates || accountTargetTemplates.isEmpty()) {
+        if(null==accountTargetTemplates||accountTargetTemplates.isEmpty()){
             return;
         }
-        accountTargetTemplates.forEach(targetTemplate -> aiKuaishouNewCreateCampaign.kuaishouAiAddNewMaterialCreativity(targetTemplate, 10));
+        countDownLatch = new CountDownLatch(accountTargetTemplates.size());
+        accountTargetTemplates.forEach(targetTemplate -> executorService.submit(()->{
+            try {
+                aiKuaishouNewCreateCampaign.kuaishouAiAddNewMaterialCreativity(targetTemplate, 10);
+                XxlJobHelper.log("账户上新结束=>accountId:{}",targetTemplate.getAccountId());
+            }catch (Exception e) {
+                e.printStackTrace();
+            }finally {
+                countDownLatch.countDown();
+            }
+        }));
+        try {
+            countDownLatch.await();
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+        XxlJobHelper.log("全部账户上新结束");
     }
 
     @XxlJob("kuaishouAiAdsHotMaterialCreativityJob")
     public void kuaishouAiAdsHotMaterialCreativityJob() {
         List<AiKuaishouAccountTargetTemplate> accountTargetTemplates = aiKuaishouAccountTargetTemplateService.getAllEffectTemplate();
-        if (null == accountTargetTemplates || accountTargetTemplates.isEmpty()) {
+        if(null==accountTargetTemplates||accountTargetTemplates.isEmpty()){
             return;
         }
         accountTargetTemplates.forEach(targetTemplate -> aiKuaishouNewCreateCampaign.kuaishouAiAdsHotMaterialCreativity(targetTemplate));

+ 3 - 1
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/ai/controller/AiKuaishouAdvertiserStrategyController.java

@@ -57,7 +57,9 @@ public class AiKuaishouAdvertiserStrategyController {
 			records.forEach(record->{
 				Long accountId = record.getAccountId();
 				UserAllocation allocation = allocationService.getByAccountId(accountId);
-				record.setAuthName(allocation.getAuthName());
+				if(null !=allocation){
+					record.setAuthName(allocation.getAuthName());
+				}
 				setData.add(record);
 			});
 			pageList.setRecords(setData);

+ 3 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/ai/entity/AiKuaishouAccountTargetTemplate.java

@@ -119,6 +119,9 @@ public class AiKuaishouAccountTargetTemplate {
      * 创建时间
      */
     private Date createTime;
+    private Integer  filterConvertedLevel;
+    private String actionBarText;
+    private String creativeDescription;
     /**
      * updateTime
      */

+ 1 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/ai/service/IAiKuaishouAccountTargetTemplateService.java

@@ -15,4 +15,5 @@ public interface IAiKuaishouAccountTargetTemplateService extends IService<AiKuai
 
     List<AiKuaishouAccountTargetTemplate> getAllEffectTemplate();
 
+    AiKuaishouAccountTargetTemplate getByAccountId(Long accountId);
 }

+ 11 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/ai/service/impl/AiKuaishouAccountTargetTemplateServiceImpl.java

@@ -24,4 +24,15 @@ public class AiKuaishouAccountTargetTemplateServiceImpl extends ServiceImpl<AiKu
         queryWrapper.eq("status",1);
         return this.list(queryWrapper);
     }
+
+    @Override
+    public AiKuaishouAccountTargetTemplate getByAccountId(Long accountId) {
+        QueryWrapper<AiKuaishouAccountTargetTemplate> queryWrapper = new QueryWrapper<>();
+        if(null!=accountId&&accountId!=0){
+            queryWrapper.eq("account_id",accountId);
+        }
+        queryWrapper.eq("status",1);
+        queryWrapper.last("limit 1");
+        return this.getOne(queryWrapper);
+    }
 }

+ 5 - 3
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/ai/service/impl/AiKuaishouNewCreateCampaignServiceImpl.java

@@ -318,13 +318,12 @@ public class AiKuaishouNewCreateCampaignServiceImpl implements IAiKuaishouNewCre
         creativeParams.put("unit_id",unitId);
         creativeParams.put("photo_id",videoItem.getPhotoId());
         creativeParams.put("creative_material_type",videoItem.getMaterialType());
-        creativeParams.put("action_bar_text","下载抢购");
-        creativeParams.put("description","不买亏大了!众多商品低至一元!看看你多花了多少冤枉钱!");
+        creativeParams.put("action_bar_text",targetTemplate.getActionBarText());
+        creativeParams.put("description",targetTemplate.getCreativeDescription());
         // 安卓下载中间页ID
         JSONArray siteIdArray = JSONArray.parseArray(targetTemplate.getSiteId());
         if(null == siteIdArray||!siteIdArray.isEmpty()){
             JSONObject siteObject = siteIdArray.getJSONObject(0);
-            Long appId = siteObject.getLong("appId");
             Long siteId = siteObject.getLong("siteId");
             if(null!=siteId){
                 creativeParams.put("site_id",siteId);
@@ -407,6 +406,9 @@ public class AiKuaishouNewCreateCampaignServiceImpl implements IAiKuaishouNewCre
         if(null!=population&&!population.isEmpty()){
             targetJsonObject.put("population",population);
         }
+        if(null!=targetTemplate.getFilterConvertedLevel()&&targetTemplate.getFilterConvertedLevel()!=0){
+            targetJsonObject.put("filter_converted_level",targetTemplate.getFilterConvertedLevel());
+        }
         JSONArray excludePopulation = JSONArray.parseArray(targetTemplate.getExcludePopulation());
         if(null!=excludePopulation&&!excludePopulation.isEmpty()){
             targetJsonObject.put("exclude_population",excludePopulation);