Browse Source

Merge remote-tracking branch 'ctop/master'

hcst_sunzhen 4 years ago
parent
commit
e2ea2fd426
100 changed files with 1586 additions and 1675 deletions
  1. 4 0
      jeecg-boot-base-common/src/main/java/org/jeecg/common/aspect/annotation/Dict.java
  2. 30 93
      jeecg-boot-base-common/src/main/java/org/jeecg/common/util/DateUtils.java
  3. 5 2
      jeecg-boot-module-system/src/main/java/org/jeecg/JeecgApplication.java
  4. 1 4
      jeecg-boot-module-system/src/main/java/org/jeecg/config/ShiroConfig.java
  5. 0 3
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ActorController.java
  6. 4 37
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ByteDanceTemplateController.java
  7. 59 64
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/MaterialInfoController.java
  8. 30 43
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/TestController.java
  9. 11 110
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/VideoWatermarkTemplateController.java
  10. 1 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/AccountBidJob.java
  11. 1 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/AccountCpaBidJob.java
  12. 0 45
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/BakDataBaseJob.java
  13. 1 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/ByteDanceCleanMaterialJob.java
  14. 1 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/ByteDanceHourlyAccountWarningLoadJob.java
  15. 4 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/ByteDanceRefreshTokenJob.java
  16. 1 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/BytedanceAdvertiserDailyReportLoadJob.java
  17. 6 5
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/BytedanceAdvertiserDataLoadJob.java
  18. 1 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/BytedanceAdvertiserHourlyReportLoadJob.java
  19. 1 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/BytedanceCreativeDailyReportLoadJob.java
  20. 1 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/BytedanceCreativeHourlyReportLoadJob.java
  21. 1 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/BytedancePlanDailyReportLoadJob.java
  22. 1 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/BytedancePlanHourlyReportLoadJob.java
  23. 3 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/BytedancePlanLoadJob.java
  24. 2 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/BytedancePlanRealTimeLoadJob.java
  25. 4 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/BytedanceSameDayCreativeLoadJob.java
  26. 0 61
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/CutFrameJob.java
  27. 0 2
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/DailyFlowsJob.java
  28. 3 7
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/KuaishouMaterialsLoadJob.java
  29. 1 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/KuaishouNowDateCampaignJob.java
  30. 1 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/KuaishouNowDateCreativeJob.java
  31. 1 3
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/KuaishouNowDateGroupJob.java
  32. 2 2
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/KuaishouSuZaoLoadJob.java
  33. 7 29
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/ToutiaoMaterialsLoadJob.java
  34. 80 80
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/xml/MaterialTopMapper.xml
  35. 193 338
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/xml/MediaReportMapper.xml
  36. 1 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/xml/ProjectMemberMapper.xml
  37. 0 52
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/BidWarningServiceImpl.java
  38. 0 50
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/CpaBidWarningServiceImpl.java
  39. 18 20
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/KuaiShouUploadServiceImpl.java
  40. 12 16
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/ProjectMemberServiceImpl.java
  41. 6 4
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/aspect/DictAspect.java
  42. 2 2
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDictController.java
  43. 17 25
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDictItemController.java
  44. 10 10
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysDictMapper.java
  45. 7 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysDictMapper.xml
  46. 11 12
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysDictService.java
  47. 20 12
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysDictServiceImpl.java
  48. 17 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/util/ExtMappingJackson2HttpMessageConverter.java
  49. 1 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/wps/service/impl/WpsFileServiceImpl.java
  50. 3 7
      jeecg-boot-module-system/src/main/resources/application-wps.yml
  51. 4 0
      jeecg-boot-module-system/src/main/resources/quartz.properties
  52. 0 58
      jeecg-boot-module-system/src/test/java/org/jeecg/ChromeTest.java
  53. 22 52
      jeecg-boot-module-system/src/test/java/org/jeecg/SampleTest.java
  54. 19 0
      module-common/src/main/java/cn/com/ctop/common/module/constant/CosConstant.java
  55. 0 1
      module-common/src/main/java/cn/com/ctop/common/module/entity/CtopOauthToken.java
  56. 26 0
      module-common/src/main/java/cn/com/ctop/common/module/entity/TencentWatermarkTemplate.java
  57. 0 61
      module-common/src/main/java/cn/com/ctop/common/module/entity/VideoWatermarkTemplate.java
  58. 8 0
      module-common/src/main/java/cn/com/ctop/common/module/mapper/TencentWatermarkTemplateMapper.java
  59. 0 17
      module-common/src/main/java/cn/com/ctop/common/module/mapper/VideoWatermarkTemplateMapper.java
  60. 1 1
      module-common/src/main/java/cn/com/ctop/common/module/mapper/xml/CtopOauthTokenMapper.xml
  61. 1 1
      module-common/src/main/java/cn/com/ctop/common/module/mapper/xml/VideoWatermarkTemplateMapper.xml
  62. 1 1
      module-common/src/main/java/cn/com/ctop/common/module/service/ICtopOauthTokenService.java
  63. 5 0
      module-common/src/main/java/cn/com/ctop/common/module/service/IMaterialCutFrameService.java
  64. 1 1
      module-common/src/main/java/cn/com/ctop/common/module/service/IMaterialInfoService.java
  65. 1 1
      module-common/src/main/java/cn/com/ctop/common/module/service/IRefreshTokenService.java
  66. 0 1
      module-common/src/main/java/cn/com/ctop/common/module/service/ISendMessageService.java
  67. 7 0
      module-common/src/main/java/cn/com/ctop/common/module/service/ITencentWatermarkTemplateService.java
  68. 0 14
      module-common/src/main/java/cn/com/ctop/common/module/service/IVideoWatermarkTemplateService.java
  69. 33 26
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/CtopOauthTokenServiceImpl.java
  70. 2 2
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/FileInfoServiceImpl.java
  71. 85 8
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/MaterialCutFrameServiceImpl.java
  72. 1 8
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/MaterialImageInfoServiceImpl.java
  73. 74 68
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/MaterialInfoServiceImpl.java
  74. 14 6
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/RefreshTokenServiceImpl.java
  75. 0 18
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/SendMessageServiceImpl.java
  76. 11 0
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/TencentWatermarkTemplateServiceImpl.java
  77. 0 21
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/VideoWatermarkTemplateServiceImpl.java
  78. 301 0
      module-common/src/main/java/cn/com/ctop/common/module/utils/CloudVideoProcessUtil.java
  79. 163 0
      module-common/src/main/java/cn/com/ctop/common/module/utils/JQCOSUtils.java
  80. 6 1
      module-common/src/main/java/cn/com/ctop/common/module/utils/KuaishouInterfaceConstant.java
  81. 62 0
      module-common/src/main/java/cn/com/ctop/common/module/utils/XmlToMapUtil.java
  82. 9 0
      module-common/src/main/resources/config.properties
  83. 1 4
      module-ctop/src/main/java/cn/com/ctop/manage/modules/material/service/impl/MaterialUploadImageServiceImpl.java
  84. 17 18
      module-ctop/src/main/java/cn/com/ctop/manage/modules/material/service/impl/MaterialUploadServiceImpl.java
  85. 1 2
      module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/ByteDanceCleanMaterialJob.java
  86. 4 6
      module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/ByteDanceHourlyAccountWarningLoadJob.java
  87. 2 2
      module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/ByteDanceRefreshTokenJob.java
  88. 11 15
      module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedanceAdvertiserDailyReportLoadJob.java
  89. 12 17
      module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedanceAdvertiserHourlyReportLoadJob.java
  90. 17 18
      module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedanceAdvertisingDataLoadJob.java
  91. 10 13
      module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedanceCampaignDailyReportLoadJob.java
  92. 10 15
      module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedanceCampaignHourlyReportLoadJob.java
  93. 3 4
      module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedanceCreativeDailyReportLoadJob.java
  94. 13 19
      module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedanceCreativeHourlyReportLoadJob.java
  95. 24 0
      module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedanceEffectVideoJob.java
  96. 4 11
      module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedanceFlowFundJob.java
  97. 9 8
      module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedancePlanDailyReportLoadJob.java
  98. 3 5
      module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedancePlanHourlyReportLoadJob.java
  99. 2 4
      module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedancePlanLoadJob.java
  100. 0 0
      module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedancePlanRealTimeLoadJob.java

+ 4 - 0
jeecg-boot-base-common/src/main/java/org/jeecg/common/aspect/annotation/Dict.java

@@ -39,4 +39,8 @@ public @interface Dict {
      * @return 返回类型: String
      */
     String dictTable() default "";
+
+    String extendsKey() default "";
+
+    String extendsValue() default "";
 }

+ 30 - 93
jeecg-boot-base-common/src/main/java/org/jeecg/common/util/DateUtils.java

@@ -32,12 +32,14 @@ public class DateUtils extends PropertyEditorSupport {
     private static final long SECOND_IN_MILLIS = 1000L;
 
 
+    public static String getNowHour(Date date){
+        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH");
+        return simpleDateFormat.format(date);
+    }
     public static Date getNowDate() throws ParseException {
         SimpleDateFormat dsdf = new SimpleDateFormat("yyyy-MM-dd");
         String nowDate = getNowDate("yyyy-MM-dd");
-        Date parse = dsdf.parse(nowDate);
-        return parse;
-
+        return dsdf.parse(nowDate);
     }
 
 
@@ -47,28 +49,14 @@ public class DateUtils extends PropertyEditorSupport {
         //将字符串形式的时间转化为Date类型的时间
         Date a = sdf.parse(beginDate);
         Date b = sdf.parse(nowDate);
-        //Date类的一个方法,如果a早于b返回true,否则返回false
-        if (a.before(b)) {
-            return true;
-        } else {
-            return false;
-        }
-
-		/*
-		 * 如果你不喜欢用上面这个太流氓的方法,也可以根据将Date转换成毫秒
-		if(a.getTime()-b.getTime()<0)
-			return true;
-		else
-			return false;
-		*/
+        return a.before(b);
     }
 
 
     public static String getDateByDateStr(String dateStr) throws ParseException {
         SimpleDateFormat dsdf = new SimpleDateFormat("yyyy-MM-dd");
         Date parse = dsdf.parse(dateStr);
-        String day = dsdf.format(parse);
-        return day;
+        return dsdf.format(parse);
     }
 
     public static Integer getHour(String dateStr) throws ParseException {
@@ -76,10 +64,7 @@ public class DateUtils extends PropertyEditorSupport {
         Calendar cal = Calendar.getInstance();
         Date date = sdf.parse(dateStr);
         cal.setTime(date);
-        Integer hour = cal.get(Calendar.HOUR_OF_DAY);
-        return hour;
-
-
+        return cal.get(Calendar.HOUR_OF_DAY);
     }
 
     /**
@@ -113,20 +98,6 @@ public class DateUtils extends PropertyEditorSupport {
         return cal;
     }
 
-    // ////////////////////////////////////////////////////////////////////////////
-    // getDate
-    // 各种方式获取的Date
-    // ////////////////////////////////////////////////////////////////////////////
-
-    /**
-     * 当前日期
-     *
-     * @return 系统当前时间
-     */
-    public static Date getDate() {
-        return new Date();
-    }
-
     /**
      * 字符串转换成日期
      *
@@ -147,17 +118,6 @@ public class DateUtils extends PropertyEditorSupport {
         }
         return null;
     }
-
-    /**
-     * 日期转换为字符串
-     *
-     * @return 字符串
-     */
-    public static String date2Str() {
-        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
-        return format.format(new Date());
-    }
-
     /**
      * 格式化时间
      *
@@ -251,8 +211,7 @@ public class DateUtils extends PropertyEditorSupport {
         Date dt = new Date();
         DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         String nowTime = df.format(dt);
-        Timestamp buydate = Timestamp.valueOf(nowTime);
-        return buydate;
+        return Timestamp.valueOf(nowTime);
     }
 
     // ////////////////////////////////////////////////////////////////////////////
@@ -516,10 +475,9 @@ public class DateUtils extends PropertyEditorSupport {
      * @param src     将要转换的原始字符窜
      * @param pattern 转换的匹配格式
      * @return 如果转换成功则返回转换后的日期
-     * @throws ParseException
      * @throws
      */
-    public static Calendar parseCalendar(String src, String pattern) throws ParseException {
+    public static Calendar parseCalendar(String src, String pattern){
 
         Date date = parseDate(src, pattern);
         Calendar cal = Calendar.getInstance();
@@ -527,7 +485,7 @@ public class DateUtils extends PropertyEditorSupport {
         return cal;
     }
 
-    public static String formatAddDate(String src, String pattern, int amount) throws ParseException {
+    public static String formatAddDate(String src, String pattern, int amount) {
         Calendar cal;
         cal = parseCalendar(src, pattern);
         cal.add(Calendar.DATE, amount);
@@ -543,7 +501,7 @@ public class DateUtils extends PropertyEditorSupport {
      * @throws ParseException
      * @throws
      */
-    public static Timestamp parseTimestamp(String src, String pattern) throws ParseException {
+    public static Timestamp parseTimestamp(String src, String pattern) {
         Date date = parseDate(src, pattern);
         return new Timestamp(date.getTime());
     }
@@ -593,13 +551,10 @@ public class DateUtils extends PropertyEditorSupport {
         SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
         Date date = sdf1.parse(createTime);
         SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-        String str = sdf2.format(date);
-
-        return str;
+        return sdf2.format(date);
     }
 
     public static Map<String, Object> getStartEndTime(String createTime) throws ParseException {
-
         SimpleDateFormat smf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         Date parse = smf.parse(createTime);
         Calendar calendar = Calendar.getInstance();
@@ -646,7 +601,7 @@ public class DateUtils extends PropertyEditorSupport {
      * HH:mm:ss“ * @param text String类型的时间值
      */
     @Override
-    public void setAsText(String text) throws IllegalArgumentException {
+    public void setAsText(String text) {
         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
         SimpleDateFormat datetimeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         if (StringUtils.hasText(text)) {
@@ -692,13 +647,13 @@ public class DateUtils extends PropertyEditorSupport {
         String splitDate = DateUtils.addDay(endDate, -1);
         splitDate = DateUtils.addDay(splitDate, 1);
         if (DateUtils.compareDate(startDate, splitDate) >= 0) {
-            Map<String, String> map = new HashMap<String, String>();
+            Map<String, String> map = new HashMap<>();
             map.put("startDate", startDate);
             map.put("endDate", endDate);
             list.add(map);
         } else {
             while (DateUtils.compareDate(startDate, splitDate) < 0 || DateUtils.compareDate(startDate, endDate) <= 0) {
-                Map<String, String> map = new HashMap<String, String>();
+                Map<String, String> map = new HashMap<>();
                 map.put("startDate", splitDate);
                 map.put("endDate", endDate);
                 list.add(map);
@@ -713,17 +668,17 @@ public class DateUtils extends PropertyEditorSupport {
     }
 
     public static List<Map<String, String>> getDateWeekRange(String startDate, String endDate) throws ParseException {
-        List<Map<String, String>> list = new ArrayList<Map<String, String>>();
+        List<Map<String, String>> list = new ArrayList<>();
         String splitDate = DateUtils.addWeek(endDate, -1);
         splitDate = DateUtils.addDay(splitDate, 1);
         if (DateUtils.compareDate(startDate, splitDate) >= 0) {
-            Map<String, String> map = new HashMap<String, String>();
+            Map<String, String> map = new HashMap<>();
             map.put("startDate", startDate);
             map.put("endDate", endDate);
             list.add(map);
         } else {
             while (DateUtils.compareDate(startDate, splitDate) < 0 || DateUtils.compareDate(startDate, endDate) <= 0) {
-                Map<String, String> map = new HashMap<String, String>();
+                Map<String, String> map = new HashMap<>();
                 map.put("startDate", splitDate);
                 map.put("endDate", endDate);
                 list.add(map);
@@ -738,17 +693,17 @@ public class DateUtils extends PropertyEditorSupport {
     }
 
     public static List<Map<String, String>> getDateMonthRange(String startDate, String endDate) throws ParseException {
-        List<Map<String, String>> list = new ArrayList<Map<String, String>>();
+        List<Map<String, String>> list = new ArrayList<>();
         String splitDate = DateUtils.addMonth(endDate, -1);
         splitDate = DateUtils.addDay(splitDate, 1);
         if (DateUtils.compareDate(startDate, splitDate) >= 0) {
-            Map<String, String> map = new HashMap<String, String>();
+            Map<String, String> map = new HashMap<>();
             map.put("startDate", startDate);
             map.put("endDate", endDate);
             list.add(map);
         } else {
             while (DateUtils.compareDate(startDate, splitDate) < 0 || DateUtils.compareDate(startDate, endDate) <= 0) {
-                Map<String, String> map = new HashMap<String, String>();
+                Map<String, String> map = new HashMap<>();
                 map.put("startDate", splitDate);
                 map.put("endDate", endDate);
                 list.add(map);
@@ -844,11 +799,10 @@ public class DateUtils extends PropertyEditorSupport {
 
     public static Map<String, Object> getBeforeDate() {
         Date dNow = new Date();
-        Date dBefore = new Date();
         Calendar calendar = Calendar.getInstance();
         calendar.setTime(dNow);
         calendar.add(Calendar.DAY_OF_MONTH, -1);
-        dBefore = calendar.getTime();
+        Date dBefore = calendar.getTime();
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
         String defaultStartDate = sdf.format(dBefore);
         defaultStartDate = defaultStartDate + " 00:00:00";
@@ -865,7 +819,6 @@ public class DateUtils extends PropertyEditorSupport {
      * @param date   传入的初始日期
      * @param num    天数
      * @return
-     * @throws ParseException
      */
     public static String getAnotherDay(String format, String date, Integer num) {
 
@@ -914,8 +867,6 @@ public class DateUtils extends PropertyEditorSupport {
     }
 
     public static Map<String, Object> compareDate(String format, String date1, String date2) {
-
-
         DateFormat df = new SimpleDateFormat(format);
         Map<String, Object> map = new HashMap<>();
         try {
@@ -945,11 +896,9 @@ public class DateUtils extends PropertyEditorSupport {
      * @throws ParseException
      */
     public static String getYear(String format, String date) throws ParseException {
-
         SimpleDateFormat df = new SimpleDateFormat(format);
         Date parse = df.parse(date);
         return String.format("%tY", parse);
-
     }
 
     /**
@@ -975,7 +924,6 @@ public class DateUtils extends PropertyEditorSupport {
      * @throws ParseException
      */
     public static String getDay(String format, String date) throws ParseException {
-
         SimpleDateFormat df = new SimpleDateFormat(format);
         Date parse = df.parse(date);
         return String.format("%td", parse);
@@ -1016,7 +964,6 @@ public class DateUtils extends PropertyEditorSupport {
         calendar.setTime(date);
         calendar.setFirstDayOfWeek(Calendar.FRIDAY);
         calendar.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
-        DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
         return calendar.getTime();
     }
 
@@ -1026,13 +973,12 @@ public class DateUtils extends PropertyEditorSupport {
      */
     public static Map<String, Integer> getYearQuarter(Date date) {
         Map<String, Integer> dateMap = new HashMap<>();
-
         Calendar calendar = new GregorianCalendar();
         calendar.setTime(date);
         int originYear = calendar.get(Calendar.YEAR);
         int originMonth = calendar.get(Calendar.MONTH);
-        int originQuarter = DateUtils.getQuarter(date); //本月所在季度(按照日期来的)
-
+        //本月所在季度(按照日期来的)
+        int originQuarter = DateUtils.getQuarter(date);
         Calendar calendar1 = new GregorianCalendar();
         calendar1.setTime(date);
         calendar1.setFirstDayOfWeek(Calendar.FRIDAY);
@@ -1054,7 +1000,8 @@ public class DateUtils extends PropertyEditorSupport {
         //如果本周第一天(周五)和当前天不在一个月内,说明周跨月了
         if (fridayMonth == originMonth && thursdayMonth == originMonth) {
             dateMap.put("year", originYear);
-            dateMap.put("month", originMonth + 1);  //最后一个月是11,应该+1
+            //最后一个月是11,应该+1
+            dateMap.put("month", originMonth + 1);
             dateMap.put("quarter", originQuarter);
             return dateMap;
         } else if (fridayYear < originYear || (fridayYear == originYear && fridayMonth < originMonth)) {
@@ -1248,14 +1195,10 @@ public class DateUtils extends PropertyEditorSupport {
         startCalendar.setTime(start);
         GregorianCalendar endCalendar = new GregorianCalendar();
         endCalendar.setTime(end);
-
         int startYear = startCalendar.get(Calendar.YEAR);
         int startMonth = startCalendar.get(Calendar.MONTH) + 1;
-        int startDay = startCalendar.get(Calendar.DAY_OF_MONTH);
         int endYear = endCalendar.get(Calendar.YEAR);
         int endMonth = endCalendar.get(Calendar.MONTH) + 1;
-        int endDay = endCalendar.get(Calendar.DAY_OF_MONTH);
-
         return (endYear - startYear) * 12 + (endMonth - startMonth);
     }
 
@@ -1317,12 +1260,6 @@ public class DateUtils extends PropertyEditorSupport {
         return (int) betweenDate;
     }
 
-    public static Date addMonth(Date date) {
-        Calendar calendar = Calendar.getInstance();//日历对象
-        calendar.add(Calendar.MONTH, -1);//月份减一
-        return calendar.getTime();
-    }
-
     /**
      * 判断两个日期间隔是否大于半年
      *
@@ -1334,13 +1271,13 @@ public class DateUtils extends PropertyEditorSupport {
         long time1 = c.getTimeInMillis();
         c.setTime(Objects.requireNonNull(parseDate(endDate, SystemDateConstant.yyyy_MM_dd)));
         long time2 = c.getTimeInMillis();
-        long between_days = (time2 - time1) / (1000 * 3600 * 24);
-        int day = Integer.parseInt(String.valueOf(between_days));
+        long betweenDays = (time2 - time1) / (1000 * 3600 * 24);
+        int day = Integer.parseInt(String.valueOf(betweenDays));
         return day > 180;
     }
 
     public static List<Date> findDates(Date dBegin, Date dEnd) {
-        List<Date> lDate = new ArrayList<Date>();
+        List<Date> lDate = new ArrayList<>();
         lDate.add(dBegin);
         Calendar calBegin = Calendar.getInstance();
         // 使用给定的 Date 设置此 Calendar 的时间

+ 5 - 2
jeecg-boot-module-system/src/main/java/org/jeecg/JeecgApplication.java

@@ -4,6 +4,7 @@ import cn.com.ctop.common.module.utils.SpringUtils;
 import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
 import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.constant.AccountReportConstants;
+import org.jeecg.modules.system.util.ExtMappingJackson2HttpMessageConverter;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.context.ConfigurableApplicationContext;
@@ -41,8 +42,10 @@ public class JeecgApplication {
     }
 
     @Bean
-    public RestTemplate restTemplate() {
-        return new RestTemplate();
+    RestTemplate restTemplate(){
+        RestTemplate restTemplate = new RestTemplate();
+        restTemplate.getMessageConverters().add(new ExtMappingJackson2HttpMessageConverter());
+        return restTemplate;
     }
 
     @Bean

+ 1 - 4
jeecg-boot-module-system/src/main/java/org/jeecg/config/ShiroConfig.java

@@ -114,15 +114,13 @@ public class ShiroConfig {
         //oauth接口
         filterChainDefinitionMap.put("/auth/**", "anon");
         filterChainDefinitionMap.put("/ctop/syncdata/**", "anon");
+        filterChainDefinitionMap.put("/sys/dictItem/list", "anon");
         //头条接口
         filterChainDefinitionMap.put("/bytedance", "anon");
-        filterChainDefinitionMap.put("/toutiao/dictitem/list", "anon");
         filterChainDefinitionMap.put("/toutiao/loadAllData", "anon");
         filterChainDefinitionMap.put("/toutiao/loadSingleData", "anon");
         filterChainDefinitionMap.put("/kuaishou/getReport/historyData", "anon");
         filterChainDefinitionMap.put("/toutiao/advertiser/**", "anon");
-        filterChainDefinitionMap.put("/toutiao/industry/list", "anon");
-        filterChainDefinitionMap.put("/template/bytedance/industry/list", "anon");
         filterChainDefinitionMap.put("/template/convert/list", "anon");
         filterChainDefinitionMap.put("/template/convert/list/url", "anon");
         //文件上传接口
@@ -144,7 +142,6 @@ public class ShiroConfig {
         filterChainDefinitionMap.put("/graphql/video", "anon");
         filterChainDefinitionMap.put("/ks/web/test", "anon");
         filterChainDefinitionMap.put("/ureport/**", "anon");
-        //filterChainDefinitionMap.put("/ctop/performance/show/**", "anon");
         filterChainDefinitionMap.put("/job/test/*", "anon");
 
         // 添加自己的过滤器并且取名为jwt

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

@@ -65,7 +65,6 @@ public class ActorController {
         QueryWrapper<Actor> queryWrapper = QueryGenerator.initQueryWrapper(actor, req.getParameterMap());
         Page<Actor> page = new Page<>(pageNo, pageSize);
         IPage<Actor> pageList = actorService.page(page, queryWrapper);
-
         result.setSuccess(true);
         result.setResult(pageList);
         return result;
@@ -77,7 +76,6 @@ public class ActorController {
                                                         @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
                                                         HttpServletRequest req) {
         Result<IPage<ActorPhoto>> result = new Result<>();
-
         QueryWrapper<ActorPhoto> queryWrapper = QueryGenerator.initQueryWrapper(actorPhoto, req.getParameterMap());
         Page<ActorPhoto> page = new Page<>(pageNo, pageSize);
         IPage<ActorPhoto> pageList = actorPhotoService.page(page, queryWrapper);
@@ -92,7 +90,6 @@ public class ActorController {
                                                             @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
                                                             HttpServletRequest req) {
         Result<IPage<ActorComment>> result = new Result<>();
-
         QueryWrapper<ActorComment> queryWrapper = QueryGenerator.initQueryWrapper(actorComment, req.getParameterMap());
         Page<ActorComment> page = new Page<>(pageNo, pageSize);
         IPage<ActorComment> pageList = actorCommentService.page(page, queryWrapper);

+ 4 - 37
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ByteDanceTemplateController.java

@@ -1,14 +1,12 @@
 package org.jeecg.modules.ctop.controller;
 
-import cn.com.ctop.common.module.utils.CtopAdConstant;
-import cn.com.ctop.common.module.entity.BindAccountLogin;
 import cn.com.ctop.common.module.entity.UserAllocation;
-import cn.com.ctop.common.module.service.IBindAccountLoginService;
 import cn.com.ctop.common.module.service.IFileInfoService;
 import cn.com.ctop.common.module.service.IUserAllocationService;
 import cn.com.ctop.toutiao.modules.material.entity.ByteDanceAdvertisePlan;
 import cn.com.ctop.toutiao.modules.material.entity.ByteDanceCampaign;
-import cn.com.ctop.toutiao.modules.material.service.*;
+import cn.com.ctop.toutiao.modules.material.service.IByteDanceAdvertisePlanService;
+import cn.com.ctop.toutiao.modules.material.service.IByteDanceCampaignService;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -33,8 +31,6 @@ import java.util.Map;
 @RequestMapping("template")
 public class ByteDanceTemplateController {
     @Autowired
-    private IByteDanceCreativeService creativeService;
-    @Autowired
     private IUserAllocationService userAllocationService;
     @Autowired
     private IFileInfoService fileInfoService;
@@ -67,35 +63,6 @@ public class ByteDanceTemplateController {
         return result;
     }
 
-    @Autowired
-    private IBindAccountLoginService bindAccountLoginService;
-
-    /**
-     * 获取头条授权用户信息列表
-     *
-     * @param accountLogin
-     * @param pageNo
-     * @param pageSize
-     * @param req
-     * @return
-     */
-    @PostMapping(value = "bind/login/list")
-    public Result<IPage<BindAccountLogin>> queryBindLoginList(@RequestBody BindAccountLogin accountLogin,
-                                                              @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
-                                                              @RequestParam(name = "pageSize", defaultValue = "100") Integer pageSize,
-                                                              HttpServletRequest req) {
-        Result<IPage<BindAccountLogin>> result = new Result<>();
-        QueryWrapper<BindAccountLogin> queryWrapper = QueryGenerator.initQueryWrapper(accountLogin, req.getParameterMap());
-        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
-        queryWrapper.eq("user_id", user.getId()).eq("login_type", CtopAdConstant.PLATFORM_TYPE_BYTEDANCE_PY);
-        Page<BindAccountLogin> page = new Page<>(pageNo, pageSize);
-        IPage<BindAccountLogin> pageList = bindAccountLoginService.page(page, queryWrapper);
-        result.setSuccess(true);
-        result.setResult(pageList);
-        return result;
-    }
-
-
     /**
      * @param pageNo
      * @param pageSize
@@ -108,7 +75,7 @@ public class ByteDanceTemplateController {
                                                              @RequestParam(name = "pageSize", defaultValue = "1000") Integer pageSize, HttpServletRequest req) {
         Result<IPage<ByteDanceCampaign>> result = new Result<>();
         QueryWrapper<ByteDanceCampaign> queryWrapper = QueryGenerator.initQueryWrapper(campaign, req.getParameterMap());
-        queryWrapper.eq("toutiao_id", campaign.getToutiaoId()).orderByAsc("id");
+        queryWrapper.eq("account_id", campaign.getId()).orderByAsc("id");
         Page<ByteDanceCampaign> page = new Page<>(pageNo, pageSize);
         IPage<ByteDanceCampaign> pageList = campaignService.page(page, queryWrapper);
         result.setSuccess(true);
@@ -140,7 +107,7 @@ public class ByteDanceTemplateController {
                                                               @RequestParam(name = "pageSize", defaultValue = "1000") Integer pageSize, HttpServletRequest req) {
         Result<IPage<ByteDanceAdvertisePlan>> result = new Result<>();
         QueryWrapper<ByteDanceAdvertisePlan> queryWrapper = QueryGenerator.initQueryWrapper(plan, req.getParameterMap());
-        queryWrapper.eq("toutiao_id", plan.getToutiaoId()).orderByDesc("id");
+        queryWrapper.eq("account_id", plan.getAccountId()).orderByDesc("id");
         Page<ByteDanceAdvertisePlan> page = new Page<>(pageNo, pageSize);
         IPage<ByteDanceAdvertisePlan> pageList = planService.page(page, queryWrapper);
         result.setSuccess(true);

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

@@ -90,7 +90,7 @@ public class MaterialInfoController {
     }
 
     @PostMapping("watermark")
-    public Result<Object> watermarkVideo(@RequestParam(name = "id") String id, @RequestParam(name = "watermarkTemplateId") Integer watermarkTemplateId) {
+    public Result<Object> watermarkVideo(@RequestParam(name = "id") String id, @RequestParam(name = "watermarkTemplateId") Long watermarkTemplateId) {
         Result<Object> result = new Result<>();
         LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
         materialInfoService.watermarkVideo(id, watermarkTemplateId, sysUser.getId());
@@ -340,75 +340,74 @@ public class MaterialInfoController {
         Result<MaterialInfo> result = new Result<>();
         MaterialInfo materialInfoEntity = materialInfoService.getById(materialInfo.getId());
         if (materialInfoEntity == null) {
-            return result.error500("未找到对应实体");
-        }
-        String url = materialInfo.getUrl();
-        if (!Check.isNull(url)) {
-            if (!url.contains(KuaishouInterfaceConstant.HTTPS_PREFIX)) {
-                url = KuaishouInterfaceConstant.HTTPS_PREFIX + url;
+            result.error500("未找到对应实体");
+        } else {
+            String url = materialInfo.getUrl();
+            if (!Check.isNull(url)) {
+                if (!url.contains(KuaishouInterfaceConstant.HTTPS_PREFIX)) {
+                    url = KuaishouInterfaceConstant.HTTPS_PREFIX + url;
+                }
+                materialInfo.setUrl(url);
             }
-            materialInfo.setUrl(url);
-        }
 
-        //  修改素材库 相关联code
-        if (!Check.isNull(materialInfo.getCode())) {
-            String code = materialInfoEntity.getCode();
-            if (!Check.isNull(code)) {
-                MaterialTag updateMaterialTag = new MaterialTag();
-                updateMaterialTag.setMaterialId(materialInfo.getCode());
-                QueryWrapper<MaterialTag> tagQueryWrapper = new QueryWrapper<>();
-                tagQueryWrapper.eq("material_id", code);
-                materialTagService.update(updateMaterialTag, tagQueryWrapper);
-                MaterialParameter updateParameter = new MaterialParameter();
-                updateParameter.setMaterialId(materialInfo.getCode());
-                QueryWrapper<MaterialParameter> parameterQueryWrapper = new QueryWrapper<>();
-                parameterQueryWrapper.eq("material_id", code);
-                materialParameterService.update(updateParameter, parameterQueryWrapper);
-                MaterialAscription updateMaterialAscription = new MaterialAscription();
-                updateMaterialAscription.setMaterialId(materialInfo.getCode());
-                QueryWrapper<MaterialAscription> ascriptionQueryWrapper = new QueryWrapper<>();
-                ascriptionQueryWrapper.eq("material_id", code);
-                materialAscriptionService.update(updateMaterialAscription, ascriptionQueryWrapper);
+            //  修改素材库 相关联code
+            if (!Check.isNull(materialInfo.getCode())) {
+                String code = materialInfoEntity.getCode();
+                if (!Check.isNull(code)) {
+                    MaterialTag updateMaterialTag = new MaterialTag();
+                    updateMaterialTag.setMaterialId(materialInfo.getCode());
+                    QueryWrapper<MaterialTag> tagQueryWrapper = new QueryWrapper<>();
+                    tagQueryWrapper.eq("material_id", code);
+                    materialTagService.update(updateMaterialTag, tagQueryWrapper);
+                    MaterialParameter updateParameter = new MaterialParameter();
+                    updateParameter.setMaterialId(materialInfo.getCode());
+                    QueryWrapper<MaterialParameter> parameterQueryWrapper = new QueryWrapper<>();
+                    parameterQueryWrapper.eq("material_id", code);
+                    materialParameterService.update(updateParameter, parameterQueryWrapper);
+                    MaterialAscription updateMaterialAscription = new MaterialAscription();
+                    updateMaterialAscription.setMaterialId(materialInfo.getCode());
+                    QueryWrapper<MaterialAscription> ascriptionQueryWrapper = new QueryWrapper<>();
+                    ascriptionQueryWrapper.eq("material_id", code);
+                    materialAscriptionService.update(updateMaterialAscription, ascriptionQueryWrapper);
+                }
             }
-        }
 
-        //  审核通过自动同步到到媒体后台
-       /* Long projectId = materialInfoEntity.getProjectId();
-        Project project = projectService.getById(projectId);
-        if (!Check.isNull(projectId)) {
-            if ("2".equals(project.getMediaId())) {
-                if (!Check.isNull(materialInfo.getStatus())) {
-                    Integer status = materialInfo.getStatus();
-                    if (status == 1) {
-                        Thread thread = new Thread() {
-                            @Override
-                            public void run() {
-                                log.info("开始自动同步素材,code:{}", materialInfoEntity.getCode());
-                                uploadService.upload(materialInfoEntity);
-                            }
-                        };
-                        thread.start();
+            //  审核通过自动同步到到媒体后台
+           /* Long projectId = materialInfoEntity.getProjectId();
+            Project project = projectService.getById(projectId);
+            if (!Check.isNull(projectId)) {
+                if ("2".equals(project.getMediaId())) {
+                    if (!Check.isNull(materialInfo.getStatus())) {
+                        Integer status = materialInfo.getStatus();
+                        if (status == 1) {
+                            Thread thread = new Thread() {
+                                @Override
+                                public void run() {
+                                    log.info("开始自动同步素材,code:{}", materialInfoEntity.getCode());
+                                    uploadService.upload(materialInfoEntity);
+                                }
+                            };
+                            thread.start();
+                        }
                     }
                 }
-            }
 
-        }*/
+            }*/
 
-        boolean ok = materialInfoService.updateById(materialInfo);
-        if (ok) {
-            result.success("修改成功!");
-        }
-
-        Integer status = materialInfo.getStatus();
-        // 如果状态为2 审核拒绝 给上传人发送消息
-        if (status == 2) {
-            Project project = projectService.getById(materialInfoEntity.getProjectId());
-            String text = messageTemplate.getMaterialRejectTemplate(project.getProjectName(), materialInfoEntity.getMaterialName(), materialInfo.getRefuseReason());
-            sendMessageService.sendMessage(materialInfoEntity.getUserId(), text);
+            boolean ok = materialInfoService.updateById(materialInfo);
+            if (ok) {
+                result.success("修改成功!");
+            }
 
-            String feishuText = messageTemplate.getFeishuMaterialRejectTemplate(project.getProjectName(), materialInfoEntity.getMaterialName(), materialInfo.getRefuseReason());
-            sendMessageService.sendFeishuMessage(materialInfoEntity.getUserId(), feishuText);
+            Integer status = materialInfo.getStatus();
+            // 如果状态为2 审核拒绝 给上传人发送消息
+            if (status == 2) {
+                Project project = projectService.getById(materialInfoEntity.getProjectId());
+                String text = messageTemplate.getMaterialRejectTemplate(project.getProjectName(), materialInfoEntity.getMaterialName(), materialInfo.getRefuseReason());
+                sendMessageService.sendMessage(materialInfoEntity.getUserId(), text);
+            }
         }
+
         return result;
 
     }
@@ -498,10 +497,6 @@ public class MaterialInfoController {
         List<String> effiList = materialInfoService.getEffiCode();
         Object createTime = materialInfo.getCreateTime();
         materialInfo.setCreateTime(null);
-        Long projectId = materialInfo.getProjectId();
-        if (projectId != null) {
-            queryWrapper.eq("project_id", projectId);
-        }
         queryWrapper.in("code", effiList);
         queryWrapper.groupBy("code");
         //queryWrapper = QueryGenerator.initQueryWrapper(materialInfo, req.getParameterMap());

+ 30 - 43
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/TestController.java

@@ -10,6 +10,7 @@ import cn.com.ctop.common.module.utils.StatusCode;
 import cn.com.ctop.kuaishou.modules.batch.service.*;
 import cn.com.ctop.kuaishou.modules.graphql.service.IKuaishouWebInterfaceService;
 import cn.com.ctop.toutiao.modules.material.service.IByteDanceAdvertiserDataService;
+import cn.com.ctop.toutiao.modules.material.service.IBytedanceEffectVideoInfoService;
 import cn.com.ctop.toutiao.modules.report.service.IBytedancePlanDailyReportService;
 import cn.com.ctop.toutiao.modules.report.service.IBytedancePlanHourlyReportService;
 import cn.com.ctop.toutiao.modules.report.service.IBytedanceReportService;
@@ -41,8 +42,17 @@ import static org.jeecg.common.util.DateUtils.getAnotherDay;
 @Slf4j
 public class TestController {
     @Autowired
+    private CtopOauthTokenMapper tokenMapper;
+    @Autowired
+    private IKuaishouInterfaceService kuaishouInterfaceService;
+    @Autowired
+    private ICtopOauthTokenService oauthTokenService;
+    @Autowired
+    private IMaterialCutFrameService cutFrameService;
+    @Autowired
+    IKuaiShouVideoGetService videoGetService;
+    @Autowired
     private IKuaishouWebInterfaceService kuaishouWebInterfaceService;
-
     @Autowired
     private CtopOauthTokenMapper oauthTokenMapper;
     @Autowired
@@ -63,6 +73,7 @@ public class TestController {
     static ExecutorService videoService = Executors.newFixedThreadPool(5);
     static ExecutorService suzhaoService = Executors.newFixedThreadPool(5);
 
+
     @GetMapping(value = "/t")
     public String test() {
         Result<String> result = new Result<>();
@@ -83,26 +94,10 @@ public class TestController {
     }
 
 
-    @Autowired
-    private CtopOauthTokenMapper tokenMapper;
-    @Autowired
-    private IKuaishouInterfaceService kuaishouInterfaceService;
-
-
-    @Autowired
-    private ICtopOauthTokenService oauthTokenService;
-
-    @Autowired
-    private IMaterialCutFrameService cutFrameService;
-    @Autowired
-    IKuaiShouVideoGetService videoGetService;
-
 
     @GetMapping(value = "/getSuZhao")
     public void getSuZhao() throws JobExecutionException {
-
         try {
-
             //1:查询当日数据
             QueryWrapper<CtopOauthToken> queryWrapper = new QueryWrapper<>();
             queryWrapper.eq("media_id", 2);
@@ -113,9 +108,8 @@ public class TestController {
                 return;
             }
 
-            executorService = Executors.newFixedThreadPool(8);
             tokens.forEach(token -> {
-                executorService.submit(new Runnable() {
+                suzhaoService.submit(new Runnable() {
                     @Override
                     public void run() {
                         //1: 获取广告主信息数据
@@ -172,35 +166,32 @@ public class TestController {
 
     @GetMapping(value = "/getVideo")
     public String getVideo(String startDate, String endDate) throws IOException {
-
         try {
-
             Thread thread = new Thread() {
                 @Override
                 public void run() {
                     QueryWrapper<CtopOauthToken> tokenQueryWrapper = new QueryWrapper<>();
                     tokenQueryWrapper.eq("media_id", 2);
                     List<CtopOauthToken> list = tokenService.list(tokenQueryWrapper);
-
-                    executorService = Executors.newFixedThreadPool(8);
                     list.forEach(token -> {
-                        executorService.submit(new Runnable() {
+                        videoService.submit(new Runnable() {
                             @Override
                             public void run() {
                                 try {
                                     kuaishouInterfaceService.getSuZaoList(token.getAccessToken(), token.getAccountId(), 1, null, null);
-                                    String nowDate = DateUtils.getNowDate("yyyy-MM-dd");
+                                    kuaishouInterfaceService.getVideoList(token, null, null);
+                                    Thread.sleep(5000);
+                                     /*String nowDate = DateUtils.getNowDate("yyyy-MM-dd");
                                     String videoEndDate = DateUtils.addDay(nowDate, -180);
-                                    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
+                                   SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
                                     Date end = simpleDateFormat.parse(nowDate);
                                     Date start = simpleDateFormat.parse(videoEndDate);
                                     List<Date> dates = DateUtils.findDates(start, end);
                                     for (int i = 0; i < dates.size(); i++) {
                                         String formatDate = simpleDateFormat.format(dates.get(i));
-                                        kuaishouInterfaceService.getVideoList(token, formatDate);
                                         kuaishouInterfaceService.getImageList(token, formatDate);
                                         Thread.sleep(500);
-                                    }
+                                    }*/
 
                                 } catch (Exception e) {
                                     e.printStackTrace();
@@ -222,9 +213,7 @@ public class TestController {
 
     @GetMapping(value = "/getVideoByAccountId")
     public String getVideoByAccountId(Long accountId) throws IOException {
-
         try {
-
             Thread thread = new Thread() {
                 @Override
                 public void run() {
@@ -234,6 +223,7 @@ public class TestController {
                     CtopOauthToken one = tokenService.getOne(tokenQueryWrapper);
                     try {
                         kuaishouInterfaceService.getSuZaoList(one.getAccessToken(), one.getAccountId(), 1, null, null);
+                        kuaishouInterfaceService.getVideoList(one, null, null);
                         String nowDate = DateUtils.getNowDate("yyyy-MM-dd");
                         String videoEndDate = DateUtils.addDay(nowDate, -180);
                         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
@@ -242,7 +232,7 @@ public class TestController {
                         List<Date> dates = DateUtils.findDates(start, end);
                         for (int i = 0; i < dates.size(); i++) {
                             String formatDate = simpleDateFormat.format(dates.get(i));
-                            kuaishouInterfaceService.getVideoList(one, formatDate);
+
                             kuaishouInterfaceService.getImageList(one, formatDate);
                             Thread.sleep(100);
                         }
@@ -250,8 +240,6 @@ public class TestController {
                         e.printStackTrace();
                     } finally {
                     }
-
-
                     log.info("快手物料数据同步完成");
                 }
             };
@@ -265,7 +253,6 @@ public class TestController {
 
     @GetMapping(value = "/createCutTask")
     public String createCutTask(String startDate, String endDate) throws IOException {
-
         List<MaterialInfo> materialInfos = materialInfoService.getListByDate(startDate, endDate);
         if (!Check.isNull(materialInfos)) {
             for (MaterialInfo materialInfo : materialInfos) {
@@ -279,11 +266,8 @@ public class TestController {
                         cutFrameService.getCutFrame(materialInfo.getUrl(), code, materialParameter.getSecond(), materialParameter.getHeight(), materialParameter.getWidth());
 
                     }
-
                 }
-
             }
-
         }
         return "Success";
     }
@@ -318,7 +302,6 @@ public class TestController {
             SimpleDateFormat sim = new SimpleDateFormat("yyyy-MM-dd");
             Date date1 = sim.parse(startDate);
             Date date2 = sim.parse(endDate);
-
             QueryWrapper<CtopOauthToken> tokenQueryWrapper = new QueryWrapper<>();
             tokenQueryWrapper.eq("media_id", 2);
             List<CtopOauthToken> ctopOauthTokens = oauthTokenMapper.selectList(tokenQueryWrapper);
@@ -326,7 +309,6 @@ public class TestController {
                 for (CtopOauthToken token : ctopOauthTokens) {
                     kuaishouInterfaceService.getAdvertiserReportDaily(token, date1, date2);
                 }
-
             }
         } catch (Exception e) {
             e.printStackTrace();
@@ -370,14 +352,12 @@ public class TestController {
             parameterService.update(updateMaterialParameter, parameterQueryWrapper);
         }
 
-
         List<String> codeList = iMaterialImageInfoService.getCodeList();
         if (!Check.isNull(codeList)) {
             for (int i = 0; i < codeList.size(); i++) {
                 String code = codeList.get(i);
                 QueryWrapper<MaterialImageInfo> materialImageInfoQueryWrapper = new QueryWrapper<>();
                 materialImageInfoQueryWrapper.eq("code", code);
-
                 List<MaterialImageInfo> list2 = iMaterialImageInfoService.list(materialImageInfoQueryWrapper);
                 if (list2.size() > 1) {
                     for (int j = 0; j < list2.size(); j++) {
@@ -387,7 +367,6 @@ public class TestController {
                         MaterialImageInfo materialImageInfo = list2.get(j);
                         iMaterialImageInfoService.removeById(String.valueOf(materialImageInfo.getId()));
                     }
-
                 }
             }
         }
@@ -786,5 +765,13 @@ public class TestController {
             bytedanceReportService.bytedanceAsyncTaskCreate(startDate, endDate, token, 4);
         }
     }
-
+    @Autowired
+    private IBytedanceEffectVideoInfoService effectVideoInfoService;
+    @GetMapping("/bytedance/effectVideo/get")
+    public Map<String,Object>effectVideoGet(String date){
+        Map<String,Object>result = new HashMap<>();
+        effectVideoInfoService.loadEffectVideo(date);
+        ResultMapUtils.setResultMap(result,StatusCode.COMMON_SUCCESS);
+        return result;
+    }
 }

+ 11 - 110
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/VideoWatermarkTemplateController.java

@@ -1,7 +1,7 @@
 package org.jeecg.modules.ctop.controller;
 
-import cn.com.ctop.common.module.entity.VideoWatermarkTemplate;
-import cn.com.ctop.common.module.service.IVideoWatermarkTemplateService;
+import cn.com.ctop.common.module.entity.TencentWatermarkTemplate;
+import cn.com.ctop.common.module.service.ITencentWatermarkTemplateService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -29,7 +29,7 @@ import java.util.Arrays;
 @RequestMapping("/ctop/videoWatermarkTemplate")
 public class VideoWatermarkTemplateController {
 	@Autowired
-	private IVideoWatermarkTemplateService videoWatermarkTemplateService;
+	private ITencentWatermarkTemplateService tencentWatermarkTemplateService;
 
      /**
 	  * 分页列表查询
@@ -42,116 +42,17 @@ public class VideoWatermarkTemplateController {
 	@AutoLog(value = "水印模板-分页列表查询")
 	@ApiOperation(value="水印模板-分页列表查询", notes="水印模板-分页列表查询")
 	@GetMapping(value = "/list")
-	public Result<IPage<VideoWatermarkTemplate>> queryPageList(VideoWatermarkTemplate videoWatermarkTemplate,
-									  @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
-									  @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
-									  HttpServletRequest req) {
-        Result<IPage<VideoWatermarkTemplate>> result = new Result<>();
-		QueryWrapper<VideoWatermarkTemplate> queryWrapper = QueryGenerator.initQueryWrapper(videoWatermarkTemplate, req.getParameterMap());
-        Page<VideoWatermarkTemplate> page = new Page<>(pageNo, pageSize);
-		IPage<VideoWatermarkTemplate> pageList = videoWatermarkTemplateService.page(page, queryWrapper);
+	public Result<IPage<TencentWatermarkTemplate>> queryPageList(TencentWatermarkTemplate videoWatermarkTemplate,
+																 @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+																 @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+																 HttpServletRequest req) {
+        Result<IPage<TencentWatermarkTemplate>> result = new Result<>();
+		QueryWrapper<TencentWatermarkTemplate> queryWrapper = QueryGenerator.initQueryWrapper(videoWatermarkTemplate, req.getParameterMap());
+        Page<TencentWatermarkTemplate> page = new Page<>(pageNo, pageSize);
+		IPage<TencentWatermarkTemplate> pageList = tencentWatermarkTemplateService.page(page, queryWrapper);
 		result.setSuccess(true);
 		result.setResult(pageList);
 		return result;
 	}
 
-     /**
-	  *   添加
-	 * @param videoWatermarkTemplate
-	 * @return
-	 */
-	@AutoLog(value = "水印模板-添加")
-	@ApiOperation(value="水印模板-添加", notes="水印模板-添加")
-	@PostMapping(value = "/add")
-	public Result<VideoWatermarkTemplate> add(@RequestBody VideoWatermarkTemplate videoWatermarkTemplate) {
-        Result<VideoWatermarkTemplate> result = new Result<>();
-		try {
-			videoWatermarkTemplateService.save(videoWatermarkTemplate);
-			result.success("添加成功!");
-		} catch (Exception e) {
-			log.error(e.getMessage(),e);
-			result.error500("操作失败");
-		}
-		return result;
-	}
-
-     /**
-	  *  编辑
-	 * @param videoWatermarkTemplate
-	 * @return
-	 */
-	@AutoLog(value = "水印模板-编辑")
-	@ApiOperation(value="水印模板-编辑", notes="水印模板-编辑")
-	@PutMapping(value = "/edit")
-	public Result<VideoWatermarkTemplate> edit(@RequestBody VideoWatermarkTemplate videoWatermarkTemplate) {
-        Result<VideoWatermarkTemplate> result = new Result<>();
-		VideoWatermarkTemplate videoWatermarkTemplateEntity = videoWatermarkTemplateService.getById(videoWatermarkTemplate.getId());
-		if(videoWatermarkTemplateEntity==null) {
-			result.error500("未找到对应实体");
-		}else {
-			boolean ok = videoWatermarkTemplateService.updateById(videoWatermarkTemplate);
-			if(ok) {
-				result.success("修改成功!");
-			}
-		}
-
-        return result;
-	}
-
-     /**
-	  *   通过id删除
-	 * @param id
-	 * @return
-	 */
-	@AutoLog(value = "水印模板-通过id删除")
-	@ApiOperation(value="水印模板-通过id删除", notes="水印模板-通过id删除")
-	@DeleteMapping(value = "/delete")
-    public Result<Object> delete(@RequestParam(name = "id", required = true) String id) {
-		try {
-			videoWatermarkTemplateService.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<VideoWatermarkTemplate> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
-        Result<VideoWatermarkTemplate> result = new Result<>();
-		if(ids==null || "".equals(ids.trim())) {
-			result.error500("参数不识别!");
-		}else {
-			this.videoWatermarkTemplateService.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<VideoWatermarkTemplate> queryById(@RequestParam(name="id",required=true) String id) {
-        Result<VideoWatermarkTemplate> result = new Result<>();
-		VideoWatermarkTemplate videoWatermarkTemplate = videoWatermarkTemplateService.getById(id);
-		if(videoWatermarkTemplate==null) {
-			result.error500("未找到对应实体");
-		}else {
-			result.setResult(videoWatermarkTemplate);
-			result.setSuccess(true);
-		}
-		return result;
-	}
 }

+ 1 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/AccountBidJob.java

@@ -7,6 +7,7 @@ import org.quartz.JobExecutionException;
 import org.springframework.beans.factory.annotation.Autowired;
 
 /**
+ * DONE
  * 出价预警
  */
 public class AccountBidJob implements Job {

+ 1 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/AccountCpaBidJob.java

@@ -17,6 +17,7 @@ import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
 /**
+ * DONE
  * 深度转化出价预警
  */
 public class AccountCpaBidJob implements Job {

+ 0 - 45
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/BakDataBaseJob.java

@@ -1,45 +0,0 @@
-package org.jeecg.modules.ctop.job;
-
-import cn.com.ctop.common.module.utils.LoadFileUtil;
-import lombok.extern.slf4j.Slf4j;
-import org.jeecg.common.util.DateUtils;
-import org.quartz.Job;
-import org.quartz.JobExecutionContext;
-import org.quartz.JobExecutionException;
-import org.springframework.beans.factory.annotation.Value;
-
-import java.util.Date;
-
-@Slf4j
-public class BakDataBaseJob implements Job {
-    @Value("${spring.datasource.username}")
-    private String userName;
-    @Value("${spring.datasource.password}")
-    private String password;
-    @Value("${jeecg.path.bak-database-file}")
-    private String filePath;
-
-    @Override
-    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
-        String currentFileName = filePath + "db-" + DateUtils.formatDate(new Date()) + ".sql";
-        String historyFileName = filePath + "db-" + DateUtils.formatDate(DateUtils.addDay(new Date(), -4)) + ".sql";
-        String command = "mysqldump jeecg-boot -h 127.0.0.1 -u" + userName + " -p" + password + " --default-character-set=utf8mb4 --result-file=" + currentFileName;
-        //1:删除历史数据
-        LoadFileUtil.delFile(historyFileName);
-        //2:导出当天数据
-        Runtime runtime = Runtime.getRuntime();
-        Process pro = null;
-        try {
-            pro = runtime.exec(command);
-            int status = pro.waitFor();
-            if (status == 0) {
-                log.info("数据备份shell脚本执行成功");
-            } else {
-                log.info("数据备份shell脚本执行失败");
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-
-    }
-}

+ 1 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/ByteDanceCleanMaterialJob.java

@@ -3,7 +3,6 @@ package org.jeecg.modules.ctop.job;
 import cn.com.ctop.common.module.utils.Check;
 import cn.com.ctop.toutiao.modules.report.service.IByteDanceCleanMaterialReportService;
 import lombok.extern.slf4j.Slf4j;
-import org.jeecg.modules.ctop.service.ICleanMaterialService;
 import org.quartz.Job;
 import org.quartz.JobExecutionContext;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -13,6 +12,7 @@ import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
 /**
+ * DONE
  * 清洗素材报表
  */
 @Slf4j

+ 1 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/ByteDanceHourlyAccountWarningLoadJob.java

@@ -18,6 +18,7 @@ import java.util.concurrent.Executors;
 import static org.jeecg.common.util.DateUtils.getAnotherDay;
 
 /**
+ * DONE
  * 头条预警
  *
  * @author yumeng

+ 4 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/ByteDanceRefreshTokenJob.java

@@ -6,6 +6,9 @@ import org.quartz.JobExecutionContext;
 import org.quartz.JobExecutionException;
 import org.springframework.beans.factory.annotation.Autowired;
 
+/**
+ * DONE
+ */
 public class ByteDanceRefreshTokenJob implements Job {
     @Autowired
     private IRefreshTokenService refreshTokenService;
@@ -21,7 +24,7 @@ public class ByteDanceRefreshTokenJob implements Job {
         Thread thread = new Thread() {
             @Override
             public void run() {
-                refreshTokenService.byteDanceRefresh();
+                refreshTokenService.byteDanceRefresh(null);
             }
         };
         thread.start();

+ 1 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/BytedanceAdvertiserDailyReportLoadJob.java

@@ -17,6 +17,7 @@ import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
 /**
+ * DONE
  * @author syh
  * 头条广告主日报数据获取任务
  * 第二天凌晨跑前一天的数据

+ 6 - 5
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/BytedanceAdvertiserDataLoadJob.java

@@ -4,6 +4,7 @@ import cn.com.ctop.common.module.entity.CtopOauthToken;
 import cn.com.ctop.common.module.service.ICtopOauthTokenService;
 import cn.com.ctop.common.module.utils.CtopAdConstant;
 import cn.com.ctop.toutiao.modules.material.service.IByteDanceAdvertiserDataService;
+import cn.com.ctop.toutiao.modules.material.service.IByteDanceCampaignService;
 import cn.com.ctop.toutiao.modules.material.service.IByteDanceCreativeService;
 import lombok.extern.slf4j.Slf4j;
 import org.quartz.Job;
@@ -24,12 +25,13 @@ import java.util.concurrent.Executors;
 public class BytedanceAdvertiserDataLoadJob implements Job {
     @Autowired
     private ICtopOauthTokenService tokenService;
-    static ExecutorService executorService = null;
+    static ExecutorService executorService = Executors.newFixedThreadPool(5);
     @Autowired
     private IByteDanceAdvertiserDataService advertiserDataService;
     @Autowired
     private IByteDanceCreativeService creativeService;
-
+    @Autowired
+    private IByteDanceCampaignService byteDanceCampaignService;
     @Override
     public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
         Date getDate = new Date();
@@ -37,14 +39,13 @@ public class BytedanceAdvertiserDataLoadJob implements Job {
         String dateString = dateFormat.format(getDate);
         //1:查询当日数据
         List<CtopOauthToken> tokens = tokenService.getTokenListByType(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE);
-        executorService = Executors.newFixedThreadPool(5);
         tokens.forEach(token -> executorService.submit(() -> {
             //1:获取当日广告组数据
-            advertiserDataService.getAdvertiserCampaign(token.getAccountId() + "", "", dateString);
+            byteDanceCampaignService.getAdvertiserCampaign(token, null, dateString);
             //2:获取当日广告计划数据
             advertiserDataService.getAdvertiserPlan(token, "", dateString, null);
             //3:获取当日创意数据
-            creativeService.getAdvertiserCreative(token.getAccountId() + "", "", dateString);
+            creativeService.getAdvertiserCreative(token, "", dateString);
         }));
         log.info("物料数据同步完成");
     }

+ 1 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/BytedanceAdvertiserHourlyReportLoadJob.java

@@ -18,6 +18,7 @@ import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
 /**
+ * DONE
  * @author syh
  * 头条广告主时报获取任务
  */

+ 1 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/BytedanceCreativeDailyReportLoadJob.java

@@ -17,6 +17,7 @@ import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
 /**
+ * DONE
  * @author syh
  * 头条创意日报数据获取任务
  * 第二天凌晨跑前一天的数据

+ 1 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/BytedanceCreativeHourlyReportLoadJob.java

@@ -18,6 +18,7 @@ import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
 /**
+ * DONE
  * @author syh
  * 头条创意时报获取任务
  */

+ 1 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/BytedancePlanDailyReportLoadJob.java

@@ -21,6 +21,7 @@ import java.util.Date;
 import java.util.List;
 
 /**
+ * DONE
  * 头条计划日报数据任务
  * @author 宋英豪
  */

+ 1 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/BytedancePlanHourlyReportLoadJob.java

@@ -20,6 +20,7 @@ import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
 /**
+ * done
  * 头条计划时报数据任务
  */
 @Slf4j

+ 3 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/BytedancePlanLoadJob.java

@@ -15,6 +15,9 @@ import java.util.List;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
+/**
+ * DONE
+ */
 @Slf4j
 public class BytedancePlanLoadJob implements Job {
     @Autowired

+ 2 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/BytedancePlanRealTimeLoadJob.java

@@ -16,6 +16,7 @@ import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
 /**
+ * DONE
  * 头条当日计划素材获取任务
  */
 @Slf4j
@@ -36,7 +37,7 @@ public class BytedancePlanRealTimeLoadJob implements Job {
                 //1:查询当日数据
                 List<CtopOauthToken> tokens = tokenService.getTokenListByType(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE);
                 executorService = Executors.newFixedThreadPool(4);
-                String nowDate = DateUtils.date2Str();
+                String nowDate = DateUtils.formatDate();
                 tokens.forEach(token -> {
                     executorService.submit(new Runnable() {
                         @Override

+ 4 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/BytedanceSameDayCreativeLoadJob.java

@@ -17,6 +17,9 @@ import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
+/**
+ * DONE
+ */
 @Slf4j
 public class BytedanceSameDayCreativeLoadJob implements Job {
     @Autowired
@@ -39,7 +42,7 @@ public class BytedanceSameDayCreativeLoadJob implements Job {
                 public void run() {
                     try {
                         String getDateString = DateUtils.formatDate(new Date());
-                        advertiserDataService.getAdvertiserCreative(token, getDateString);
+//                        advertiserDataService.getAdvertiserCreative(token, getDateString);
                     } catch (Exception e) {
                         e.printStackTrace();
                     } finally {

+ 0 - 61
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/CutFrameJob.java

@@ -1,61 +0,0 @@
-package org.jeecg.modules.ctop.job;
-
-import cn.com.ctop.common.module.entity.MaterialCutFrameTask;
-import cn.com.ctop.common.module.service.IMaterialCutFrameService;
-import cn.com.ctop.common.module.service.IMaterialCutFrameTaskService;
-import cn.com.ctop.common.module.utils.Check;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import lombok.extern.slf4j.Slf4j;
-import org.quartz.Job;
-import org.quartz.JobExecutionContext;
-import org.quartz.JobExecutionException;
-import org.springframework.beans.factory.annotation.Autowired;
-
-import java.util.List;
-import java.util.concurrent.Executors;
-
-import static org.jeecg.modules.ctop.job.KuaishouDailyGroupReportLoadJob.executorService;
-
-/**
- * 获取抽帧视频
- */
-@Slf4j
-public class CutFrameJob implements Job {
-    @Autowired
-    private IMaterialCutFrameService materialCutFrameService;
-    @Autowired
-    private IMaterialCutFrameTaskService taskService;
-
-    @Override
-    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
-        Thread thread = new Thread() {
-            @Override
-            public void run() {
-
-                log.info("开始抽帧定时任务");
-                QueryWrapper<MaterialCutFrameTask> taskQueryWrapper = new QueryWrapper<>();
-                taskQueryWrapper.eq("job_status", 0);
-                //taskQueryWrapper.eq("cloud_type", 2);
-                List<MaterialCutFrameTask> list = taskService.list(taskQueryWrapper);
-
-                if (Check.isNull(list)) {
-                    return;
-                }
-                executorService = Executors.newFixedThreadPool(5);
-                list.forEach(cutFrameTask -> {
-                    executorService.submit(new Runnable() {
-                        @Override
-                        public void run() {
-                            //获取广告计划信息数据
-                            materialCutFrameService.loadCutFrame(cutFrameTask.getJobId(), cutFrameTask.getVideoSignature());
-                            //materialCutFrameService.loadCosCutFrame(cutFrameTask.getJobId(), cutFrameTask.getVideoSignature());  //腾讯云任务状态查询以及图片下载
-                        }
-                    });
-                });
-            }
-        };
-        thread.start();
-
-
-    }
-}

+ 0 - 2
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/DailyFlowsJob.java

@@ -16,8 +16,6 @@ public class DailyFlowsJob implements Job {
     private IKuaishouInterfaceService kuaishouInterfaceService;
     @Autowired
     private ICtopOauthTokenService oauthTokenService;
-
-
     /**
      * 刷新token
      *

+ 3 - 7
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/KuaishouMaterialsLoadJob.java

@@ -10,7 +10,6 @@ import org.quartz.JobExecutionContext;
 import org.quartz.JobExecutionException;
 import org.springframework.beans.factory.annotation.Autowired;
 
-import java.util.Date;
 import java.util.List;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
@@ -29,11 +28,9 @@ public class KuaishouMaterialsLoadJob implements Job {
         Thread thread = new Thread() {
             @Override
             public void run() {
-                //增加接口的开始和结束日期
-                Date startDate = DateUtils.addDay(new Date(), -1);
-                Date endDate = new Date();
-                //1:查询当日数据
                 List<CtopOauthToken> tokens = tokenService.selectKuaiShouToken();
+                String endDate = DateUtils.getNowDate("yyyy-MM-dd");
+                String startDate = DateUtils.getAnotherDay("yyyy-MM-dd", endDate, -1);
                 executorService = Executors.newFixedThreadPool(8);
                 tokens.forEach(token -> {
                     executorService.submit(new Runnable() {
@@ -42,7 +39,7 @@ public class KuaishouMaterialsLoadJob implements Job {
                             try {
 
                                 //获取全量视频素材数据
-                                kuaishouInterfaceService.getVideoList(token, DateUtils.getNowDate("yyyy-MM-dd"));
+                                kuaishouInterfaceService.getVideoList(token, startDate, endDate);
                                 // 获取图片信息数据
                                 kuaishouInterfaceService.getImageList(token, DateUtils.getNowDate("yyyy-MM-dd"));
                             } catch (Exception e) {
@@ -56,6 +53,5 @@ public class KuaishouMaterialsLoadJob implements Job {
             }
         };
         thread.start();
-
     }
 }

+ 1 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/KuaishouNowDateCampaignJob.java

@@ -35,7 +35,7 @@ public class KuaishouNowDateCampaignJob implements Job {
             @Override
             public void run() {
                 //1:查询当日数据
-                Date endDate  = DateUtils.getDate();
+                Date endDate  = new Date();
                 String anotherDay = DateUtils.getAnotherDay("yyyy-MM-dd", DateUtils.formatDate(endDate), -1);
                 SimpleDateFormat sim = new SimpleDateFormat("yyyy-MM-dd");
                 Date startDate = sim.parse(anotherDay);

+ 1 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/KuaishouNowDateCreativeJob.java

@@ -35,7 +35,7 @@ public class KuaishouNowDateCreativeJob implements Job {
             @Override
             public void run() {
                 //1:查询当日数据
-                Date endDate  = DateUtils.getDate();
+                Date endDate  = new Date();
                 String anotherDay = DateUtils.getAnotherDay("yyyy-MM-dd", DateUtils.formatDate(endDate), -1);
                 SimpleDateFormat sim = new SimpleDateFormat("yyyy-MM-dd");
                 Date startDate = sim.parse(anotherDay);

+ 1 - 3
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/KuaishouNowDateGroupJob.java

@@ -2,7 +2,6 @@ package org.jeecg.modules.ctop.job;
 
 import cn.com.ctop.common.module.entity.CtopOauthToken;
 import cn.com.ctop.common.module.service.ICtopOauthTokenService;
-import cn.com.ctop.common.module.utils.CtopAdConstant;
 import cn.com.ctop.kuaishou.modules.batch.service.IKuaishouInterfaceService;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
@@ -12,7 +11,6 @@ import org.quartz.JobExecutionContext;
 import org.quartz.JobExecutionException;
 import org.springframework.beans.factory.annotation.Autowired;
 
-import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.List;
@@ -37,7 +35,7 @@ public class KuaishouNowDateGroupJob implements Job {
             @Override
             public void run() {
                 //1:查询当日数据
-                Date endDate  = DateUtils.getDate();
+                Date endDate  = new Date();
                 String anotherDay = DateUtils.getAnotherDay("yyyy-MM-dd", DateUtils.formatDate(endDate), -1);
                 SimpleDateFormat sim = new SimpleDateFormat("yyyy-MM-dd");
                 Date startDate = sim.parse(anotherDay);

+ 2 - 2
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/KuaishouSuZaoLoadJob.java

@@ -36,8 +36,8 @@ public class KuaishouSuZaoLoadJob implements Job {
                         public void run() {
                             try {
                                 String nowDate = DateUtils.getNowDate("yyyy-MM-dd");
-                                String endDate = DateUtils.getAnotherDay("yyyy-mm-dd", nowDate, 1);
-                                String startDate = DateUtils.getAnotherDay("yyyy-mm-dd", nowDate, -1);
+                                String endDate = DateUtils.getAnotherDay("yyyy-MM-dd", nowDate, 1);
+                                String startDate = DateUtils.getAnotherDay("yyyy-MM-dd", nowDate, -1);
                                 kuaishouInterfaceService.getSuZaoList(token.getAccessToken(), token.getAccountId(), 1, startDate, endDate);
                             } catch (Exception e) {
                                 e.printStackTrace();

+ 7 - 29
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/ToutiaoMaterialsLoadJob.java

@@ -23,37 +23,15 @@ public class ToutiaoMaterialsLoadJob implements Job {
     @Autowired
     private IBytedanceReportService bytedanceReportService;
 
-    static ExecutorService executorService = null;
+    static ExecutorService executorService = Executors.newFixedThreadPool(8);
 
     @Override
     public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
-        Thread thread = new Thread() {
-            @Override
-            public void run() {
-                //增加接口的开始和结束日期
-                String startDate = DateUtils.formatDate(DateUtils.addDay(new Date(), -1));
-                String endDate = startDate;
-                //获取头条token数据
-                List<CtopOauthToken> tokens = tokenService.selectToutiaoToken();
-                executorService = Executors.newFixedThreadPool(8);
-                tokens.forEach(token -> {
-                    executorService.submit(new Runnable() {
-                        @Override
-                        public void run() {
-                            try {
-                                //获取头条素材报表数据
-                                bytedanceReportService.bytedanceMaterialReport(token,startDate,endDate);
-                            } catch (Exception e) {
-                                e.printStackTrace();
-                            } finally {
-                            }
-                        }
-                    });
-                });
-                log.info("头条素材数据同步完成,"+ "开始时间:" + startDate + ",结束时间:" + endDate);
-            }
-        };
-        thread.start();
-
+        //增加接口的开始和结束日期
+        String startDate = DateUtils.formatDate(DateUtils.addDay(new Date(), -1));
+        //获取头条token数据
+        List<CtopOauthToken> tokens = tokenService.selectToutiaoToken();
+        tokens.forEach(token -> executorService.submit(()-> bytedanceReportService.bytedanceMaterialReport(token,startDate,startDate)));
+        log.info("头条素材数据同步完成,"+ "开始时间:" + startDate + ",结束时间:" + startDate);
     }
 }

+ 80 - 80
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/xml/MaterialTopMapper.xml

@@ -2,27 +2,27 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="org.jeecg.modules.ctop.mapper.MaterialTopMapper">
     <select id="selectMapsPage" resultType="org.jeecg.modules.ctop.vo.MaterialTopVO">
-       SELECT
-          url,
-          cover_url,
-          name,
-          stat_date ,
-          sum(cost) as cost,
-          sum(click) as click,
-          sum(show_num) as show_num,
-          sum(active) as active,
-          sum(register) as register,
-          sum(pay) as pay,
-          sum(phone_convert) as phone_convert,
-          sum(form_convert) as form_convert,
-          convert_rate,
-          sum(residue) as residue,
-          sum(play3s) as play3s,
-          sum(play10s) as play10s
-       FROM
-          ctop_material_report_total_result
-       where
-        ${ew.sqlSegment}
+        SELECT
+            url,
+            cover_url,
+            name,
+            stat_date ,
+            sum(cost) as cost,
+            sum(click) as click,
+            sum(show_num) as show_num,
+            sum(active) as active,
+            sum(register) as register,
+            sum(pay) as pay,
+            sum(phone_convert) as phone_convert,
+            sum(form_convert) as form_convert,
+            convert_rate,
+            sum(residue) as residue,
+            sum(play3s) as play3s,
+            sum(play10s) as play10s
+        FROM
+            ctop_material_report_total_result
+        where
+            ${ew.sqlSegment}
     </select>
 
     <insert id="insertByteDanceMaterialReportAccountByDate">
@@ -47,35 +47,35 @@
         ) SELECT
               t2.signature,
               IFNULL((SELECT
-                              info.url
-                          FROM
-                              ctop_material_info info
-                          WHERE
-                              info.CODE = t2.signature
-                          ORDER BY
-                              create_time DESC
-                          LIMIT 1),'') AS url,
-              			IFNULL((SELECT
-                              info.cover_url
-                          FROM
-                              ctop_material_info info
-                          WHERE
-                              info.CODE = t2.signature
-                          ORDER BY
-                              create_time DESC
-                          LIMIT 1),'') AS cover_url,
-                      IFNULL((
-                          SELECT
-                              info.material_name
-                          FROM
-                              ctop_material_info info
-                          WHERE
-                              info.CODE = t2.signature
-                          ORDER BY
-                              create_time DESC
-                          LIMIT 1
-                      ),'')
-                   AS NAME,
+                          info.url
+                      FROM
+                          ctop_material_info info
+                      WHERE
+                          info.CODE = t2.signature
+                      ORDER BY
+                          create_time DESC
+                      LIMIT 1),'') AS url,
+              IFNULL((SELECT
+                          info.cover_url
+                      FROM
+                          ctop_material_info info
+                      WHERE
+                          info.CODE = t2.signature
+                      ORDER BY
+                          create_time DESC
+                      LIMIT 1),'') AS cover_url,
+              IFNULL((
+                         SELECT
+                             info.material_name
+                         FROM
+                             ctop_material_info info
+                         WHERE
+                             info.CODE = t2.signature
+                         ORDER BY
+                             create_time DESC
+                         LIMIT 1
+                     ),'')
+                                   AS NAME,
               t1.stat_datetime AS statDate,
               sum(t1.cost) AS cost,
               sum(t1.click) click,
@@ -95,7 +95,7 @@
         WHERE
             1 = 1
           AND t1.stat_datetime = #{statDate}
-          AND t1.image_mode != 'MATERIAL_IMAGE_MODE_TITLE'
+          AND t1.image_mode in ('CREATIVE_IMAGE_MODE_VIDEO','CREATIVE_IMAGE_MODE_VIDEO_VERTICAL')
           AND t2.signature IS NOT NULL
           AND t2.signature != ""
         GROUP BY
@@ -120,35 +120,35 @@
         ) SELECT
               t1.signature AS 'code',
               IFNULL((SELECT
-                              info.url
-                          FROM
-                              ctop_material_info info
-                          WHERE
-                              info.CODE = t2.signature
-                          ORDER BY
-                              create_time DESC
-                          LIMIT 1),'') AS url,
-              			IFNULL((SELECT
-                              info.cover_url
-                          FROM
-                              ctop_material_info info
-                          WHERE
-                              info.CODE = t2.signature
-                          ORDER BY
-                              create_time DESC
-                          LIMIT 1),'') AS cover_url,
-                      IFNULL((
-                          SELECT
-                              info.material_name
-                          FROM
-                              ctop_material_info info
-                          WHERE
-                              info.CODE = t2.signature
-                          ORDER BY
-                              create_time DESC
-                          LIMIT 1
-                      ),'')
-                   AS NAME,
+                          info.url
+                      FROM
+                          ctop_material_info info
+                      WHERE
+                          info.CODE = t2.signature
+                      ORDER BY
+                          create_time DESC
+                      LIMIT 1),'') AS url,
+              IFNULL((SELECT
+                          info.cover_url
+                      FROM
+                          ctop_material_info info
+                      WHERE
+                          info.CODE = t2.signature
+                      ORDER BY
+                          create_time DESC
+                      LIMIT 1),'') AS cover_url,
+              IFNULL((
+                         SELECT
+                             info.material_name
+                         FROM
+                             ctop_material_info info
+                         WHERE
+                             info.CODE = t2.signature
+                         ORDER BY
+                             create_time DESC
+                         LIMIT 1
+                     ),'')
+                  AS NAME,
               t1.stat_date AS 'stat_date',
               sum(t1.charge) AS 'cost',
               sum(t1.photo_click) AS 'click',

+ 193 - 338
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/xml/MediaReportMapper.xml

@@ -18,395 +18,250 @@
     <select id="queryAllBy" resultType="com.alibaba.fastjson.JSONObject">
         SELECT e.*
         from (
-                 SELECT r.*, (r.todayCost - r.yesterdayCost) as diffCost
+                 SELECT r.*, (r.todayCost - r.yesterdayCost) as diffCost, (r.todayCost + r.yesterdayCost) as sumCost
+
                  from (
-                          SELECT t1.advertiser_type                                                      as mediaType,
-                                 t1.company_id                                                           as companyId,
-                                 t1.id                                                                   as advertiserId,
-                                 t1.NAME                                                                 as advertiserName,
-                                 t2.id                                                                   as projectId,
-                                 t2.project_name                                                         as projectName,
-                                 t2.responsible_name                                                     as operatorManger,
-                                 t2.design_responsible_name                                              as designManger,
+                          SELECT t2.media_id                                                           as mediaType,
+                                 t1.company_id                                                         as companyId,
+                                 t1.id                                                                 as advertiserId,
+                                 t1.NAME                                                               as advertiserName,
+                                 t2.id                                                                 as projectId,
+                                 t2.project_name                                                       as projectName,
+                                 t2.responsible_name                                                   as operatorManger,
+                                 t2.design_responsible_name                                            as designManger,
                                  (SELECT GROUP_CONCAT(DISTINCT user_name)
                                   from ctop_user_allocation t3
-                                  where t2.id = t3.project_id)                                           as operator,
-                                 (SELECT realname from sys_user u WHERE u.id = t1.sale_id)               as sale,
+                                  where t2.id = t3.project_id)                                         as operator,
+                                 (SELECT realname from sys_user u WHERE u.id = t1.sale_id)             as sale,
                                  (SELECT GROUP_CONCAT(DISTINCT user_name)
                                   from ctop_project_member member
                                   where t2.id = member.project_id
-                                    and role_code = 'plan')                                              as plan,
+                                    and role_code = 'plan')                                            as plan,
                                  (SELECT GROUP_CONCAT(DISTINCT user_name)
                                   from ctop_project_member member
                                   where t2.id = member.project_id
-                                    and role_code = 'shot')                                              as shot,
+                                    and role_code = 'shot')                                            as shot,
                                  (SELECT GROUP_CONCAT(DISTINCT user_name)
                                   from ctop_project_member member
                                   where t2.id = member.project_id
-                                    and role_code = 'clip')                                              as clip,
-                                 case
-                                     when
-                                         (SELECT sum(cost)
-                                          from ctop_bytedance_report_advertiser_daily report
-                                          where report.advertiser_id in (SELECT account_id
-                                                                         from ctop_user_allocation t3
-                                                                         where t2.id = t3.project_id)
-                                            and report.stat_datetime = '${todayDate} 00:00:00') is null then 0
-                                     else (SELECT sum(cost)
-                                           from ctop_bytedance_report_advertiser_daily report
-                                           where report.advertiser_id in (SELECT account_id
-                                                                          from ctop_user_allocation t3
-                                                                          where t2.id = t3.project_id)
-                                             and report.stat_datetime = '${todayDate} 00:00:00') END     as todayCost,
-                                 case
-                                     when
-                                         (SELECT sum(cost)
-                                          from ctop_bytedance_report_advertiser_daily report
-                                          where report.advertiser_id in (SELECT account_id
-                                                                         from ctop_user_allocation t3
-                                                                         where t2.id = t3.project_id)
-                                            and report.stat_datetime = '${yesterdayDate} 00:00:00') is null then 0
-                                     else (SELECT sum(cost)
-                                           from ctop_bytedance_report_advertiser_daily report
-                                           where report.advertiser_id in (SELECT account_id
-                                                                          from ctop_user_allocation t3
-                                                                          where t2.id = t3.project_id)
-                                             and report.stat_datetime = '${yesterdayDate} 00:00:00') end as yesterdayCost
+                                    and role_code = 'clip')                                            as clip,
+                                 IFNULL((SELECT sum(cost)
+                                         from ctop_bytedance_report_advertiser_daily report
+                                         where report.advertiser_id in (SELECT account_id
+                                                                        from ctop_user_allocation t3
+                                                                        where t2.id = t3.project_id)
+                                           and report.stat_datetime = '${todayDate} 00:00:00'), 0)     as todayCost,
+                                 IFNULL((SELECT sum(cost)
+                                         from ctop_bytedance_report_advertiser_daily report
+                                         where report.advertiser_id in (SELECT account_id
+                                                                        from ctop_user_allocation t3
+                                                                        where t2.id = t3.project_id)
+                                           and report.stat_datetime = '${yesterdayDate} 00:00:00'), 0) as yesterdayCost
                           FROM ctop_advertiser t1
                                    LEFT JOIN ctop_project t2 ON t1.id = t2.advertiser_id
-                          where t1.advertiser_type = 1 and t2.id is not null) as r
+                          where t2.media_id in(1,3)
+                            and t2.id is not null) as r
 
                  UNION
 
-                 SELECT r.*, (r.todayCost - r.yesterdayCost) as diffCost
+                 SELECT r.*, (r.todayCost - r.yesterdayCost) as diffCost, (r.todayCost + r.yesterdayCost) as sumCost
                  from (
-                          SELECT t1.advertiser_type                                         as mediaType,
-                                 t1.company_id                                              as companyId,
-                                 t1.id                                                      as advertiserId,
-                                 t1.NAME                                                    as advertiserName,
-                                 t2.id                                                      as projectId,
-                                 t2.project_name                                            as projectName,
-                                 t2.responsible_name                                        as operatorManger,
-                                 t2.design_responsible_name                                 as designManger,
+                          SELECT t2.media_id                                               as mediaType,
+                                 t1.company_id                                             as companyId,
+                                 t1.id                                                     as advertiserId,
+                                 t1.NAME                                                   as advertiserName,
+                                 t2.id                                                     as projectId,
+                                 t2.project_name                                           as projectName,
+                                 t2.responsible_name                                       as operatorManger,
+                                 t2.design_responsible_name                                as designManger,
                                  (SELECT GROUP_CONCAT(DISTINCT user_name)
                                   from ctop_user_allocation t3
-                                  where t2.id = t3.project_id)                              as operator,
-                                 (SELECT realname from sys_user u WHERE u.id = t1.sale_id)  as sale,
+                                  where t2.id = t3.project_id)                             as operator,
+                                 (SELECT realname from sys_user u WHERE u.id = t1.sale_id) as sale,
                                  (SELECT GROUP_CONCAT(DISTINCT user_name)
                                   from ctop_project_member member
                                   where t2.id = member.project_id
-                                    and role_code = 'plan')                                 as plan,
+                                    and role_code = 'plan')                                as plan,
                                  (SELECT GROUP_CONCAT(DISTINCT user_name)
                                   from ctop_project_member member
                                   where t2.id = member.project_id
-                                    and role_code = 'shot')                                 as shot,
+                                    and role_code = 'shot')                                as shot,
                                  (SELECT GROUP_CONCAT(DISTINCT user_name)
                                   from ctop_project_member member
                                   where t2.id = member.project_id
-                                    and role_code = 'clip')                                 as clip,
-                                 case
-                                     when
-                                         (SELECT sum(charge)
-                                          from ctop_kuaishou_report_daily_account report
-                                          where report.account_id in (SELECT account_id
-                                                                      from ctop_user_allocation t3
-                                                                      where t2.id = t3.project_id)
-                                            and report.stat_date = '${todayDate}') is null then 0
-                                     ELSE (SELECT sum(charge)
-                                           from ctop_kuaishou_report_daily_account report
-                                           where report.account_id in (SELECT account_id
-                                                                       from ctop_user_allocation t3
-                                                                       where t2.id = t3.project_id)
-                                             and report.stat_date = '${todayDate}') END     as todayCost,
-                                 case
-                                     when
-                                         (SELECT sum(charge)
-                                          from ctop_kuaishou_report_daily_account report
-                                          where report.account_id in (SELECT account_id
-                                                                      from ctop_user_allocation t3
-                                                                      where t2.id = t3.project_id)
-                                            and report.stat_date = '${yesterdayDate}') is null then 0
-                                     ELSE (SELECT sum(charge)
-                                           from ctop_kuaishou_report_daily_account report
-                                           where report.account_id in (SELECT account_id
-                                                                       from ctop_user_allocation t3
-                                                                       where t2.id = t3.project_id)
-                                             and report.stat_date = '${yesterdayDate}') end as yesterdayCost
+                                    and role_code = 'clip')                                as clip,
+                                 IFNULL((SELECT sum(charge)
+                                         from ctop_kuaishou_report_daily_account report
+                                         where report.account_id in (SELECT account_id
+                                                                     from ctop_user_allocation t3
+                                                                     where t2.id = t3.project_id)
+                                           and report.stat_date = '${todayDate}'), 0)      as todayCost,
+                                 IFNULL((SELECT sum(charge)
+                                         from ctop_kuaishou_report_daily_account report
+                                         where report.account_id in (SELECT account_id
+                                                                     from ctop_user_allocation t3
+                                                                     where t2.id = t3.project_id)
+                                           and report.stat_date = '${yesterdayDate}'), 0)  as yesterdayCost
                           FROM ctop_advertiser t1
                                    LEFT JOIN ctop_project t2 ON t1.id = t2.advertiser_id
-                          where t1.advertiser_type = 2 and t2.id is not null) as r
+                          where t2.media_id  in(2,4)
+                            and t2.id is not null) as r
 
                  union
 
-                 SELECT r.*, (r.todayCost - r.yesterdayCost) as diffCost
+                 SELECT r.*, (r.todayCost - r.yesterdayCost) as diffCost, (r.todayCost + r.yesterdayCost) as sumCost
                  from (
-                          SELECT '0'                                                               as mediaType,
-                                 '-'                                                                as companyId,
-                                 id                                                                as advertiserId,
-                                 corporation_name                                                  as advertiserName,
-                                 '-'                                                                as projectId,
-                                 account_name                                                      as projectName,
-                                 '-'                                                                as operatorManger,
-                                 '-'                                                                as designManger,
-                                 '-'                                                                as operator,
-                                 '-'                                                                as sale,
-                                 '-'                                                                as plan,
-                                 '-'                                                                as shot,
-                                 '-'                                                                as clip,
-                                 case
-                                     WHEN
-                                         (SELECT sum(balance)
-                                          from ctop_kuaishou_agent_account report
-                                          where report.id = t1.id
-                                            and report.create_time like '%${todayDate}%') is null THEN 0
-                                     ELSE (SELECT sum(balance)
-                                           from ctop_kuaishou_agent_account report
-                                           where report.id = t1.id
-                                             and report.create_time like '%${todayDate}%') end     as todayCost,
-                                 case
-                                     WHEN
-                                         (SELECT sum(balance)
-                                          from ctop_kuaishou_agent_account report
-                                          where report.id = t1.id
-                                            and report.create_time like '%${yesterdayDate}%') is null THEN 0
-                                     ELSE (SELECT sum(balance)
-                                           from ctop_kuaishou_agent_account report
-                                           where report.id = t1.id
-                                             and report.create_time like '%${yesterdayDate}%') end as yesterdayCost
+                          SELECT '- '                                                            as mediaType,
+                                 '-'                                                             as companyId,
+                                 id                                                              as advertiserId,
+                                 corporation_name                                                as advertiserName,
+                                 '-'                                                             as projectId,
+                                 account_name                                                    as projectName,
+                                 '-'                                                             as operatorManger,
+                                 '-'                                                             as designManger,
+                                 '-'                                                             as operator,
+                                 '-'                                                             as sale,
+                                 '-'                                                             as plan,
+                                 '-'                                                             as shot,
+                                 '-'                                                             as clip,
+                                 IFNULL((SELECT sum(balance)
+                                         from ctop_kuaishou_agent_account report
+                                         where report.id = t1.id
+                                           and report.create_time like '%${todayDate}%'), 0)     as todayCost,
+                                 IFNULL((SELECT sum(balance)
+                                         from ctop_kuaishou_agent_account report
+                                         where report.id = t1.id
+                                           and report.create_time like '%${yesterdayDate}%'), 0) as yesterdayCost
                           from ctop_kuaishou_agent_account t1
                           where t1.create_time like '%${yesterdayDate}%'
                           GROUP by advertiserName, projectName) as r) as e
+        ORDER BY sumCost desc
     </select>
 
     <select id="queryMediaReportBy" resultType="com.alibaba.fastjson.JSONObject">
         SELECT e.*
         FROM (
-                 SELECT r.*,
-                        (r.todayCost - r.yesterdayCost) AS diffCost
-                 FROM (
-                          SELECT t1.advertiser_type         AS mediaType,
-                                 t1.company_id              as companyId,
-                                 t1.id                      as advertiserId,
-                                 t1.NAME                    as advertiserName,
-                                 t2.id                      as projectId,
-                                 t2.project_name            AS projectName,
-                                 t2.responsible_name        AS operatorManger,
-                                 t2.design_responsible_name AS designManger,
-                                 (
-                                     SELECT GROUP_CONCAT(DISTINCT user_name)
-                                     FROM ctop_user_allocation t3
-                                     WHERE t2.id = t3.project_id
-                                 )                          AS operator,
-                                 (
-                                     SELECT realname
-                                     FROM sys_user u
-                                     WHERE u.id = t1.sale_id
-                                 )                          AS sale,
-                                 (
-                                     SELECT GROUP_CONCAT(DISTINCT user_name)
-                                     FROM ctop_project_member member
-                                     WHERE t2.id = member.project_id
-                                       AND role_code = 'plan'
-                                 )                          AS plan,
-                                 (
-                                     SELECT GROUP_CONCAT(DISTINCT user_name)
-                                     FROM ctop_project_member member
-                                     WHERE t2.id = member.project_id
-                                       AND role_code = 'shot'
-                                 )                          AS shot,
-                                 (
-                                     SELECT GROUP_CONCAT(DISTINCT user_name)
-                                     FROM ctop_project_member member
-                                     WHERE t2.id = member.project_id
-                                       AND role_code = 'clip'
-                                 )                          AS clip,
-                                 CASE
-                                     WHEN (
-                                         SELECT sum(cost)
-                                         FROM ctop_bytedance_report_advertiser_daily report
-                                         WHERE report.advertiser_id IN (
-                                             SELECT account_id
-                                             FROM ctop_user_allocation t3
-                                             WHERE t2.id = t3.project_id
-                                         )
-                                           AND report.stat_datetime = '${todayDate} 00:00:00'
-                                     ) IS NULL THEN
-                                         0
-                                     ELSE
-                                         (
-                                             SELECT sum(cost)
-                                             FROM ctop_bytedance_report_advertiser_daily report
-                                             WHERE report.advertiser_id IN (
-                                                 SELECT account_id
-                                                 FROM ctop_user_allocation t3
-                                                 WHERE t2.id = t3.project_id
-                                             )
-                                               AND report.stat_datetime = '${todayDate} 00:00:00'
-                                         )
-                                     END                    AS todayCost,
-                                 CASE
-                                     WHEN (
-                                         SELECT sum(cost)
-                                         FROM ctop_bytedance_report_advertiser_daily report
-                                         WHERE report.advertiser_id IN (
-                                             SELECT account_id
-                                             FROM ctop_user_allocation t3
-                                             WHERE t2.id = t3.project_id
-                                         )
-                                           AND report.stat_datetime = '${yesterdayDate} 00:00:00'
-                                     ) IS NULL THEN
-                                         0
-                                     ELSE
-                                         (
-                                             SELECT sum(cost)
-                                             FROM ctop_bytedance_report_advertiser_daily report
-                                             WHERE report.advertiser_id IN (
-                                                 SELECT account_id
-                                                 FROM ctop_user_allocation t3
-                                                 WHERE t2.id = t3.project_id
-                                             )
-                                               AND report.stat_datetime = '${yesterdayDate} 00:00:00'
-                                         )
-                                     END                    AS yesterdayCost
+                 SELECT r.*, (r.todayCost - r.yesterdayCost) as diffCost, (r.todayCost + r.yesterdayCost) as sumCost
+
+                 from (
+                          SELECT t2.media_id                                                           as mediaType,
+                                 t1.company_id                                                         as companyId,
+                                 t1.id                                                                 as advertiserId,
+                                 t1.NAME                                                               as advertiserName,
+                                 t2.id                                                                 as projectId,
+                                 t2.project_name                                                       as projectName,
+                                 t2.responsible_name                                                   as operatorManger,
+                                 t2.design_responsible_name                                            as designManger,
+                                 (SELECT GROUP_CONCAT(DISTINCT user_name)
+                                  from ctop_user_allocation t3
+                                  where t2.id = t3.project_id)                                         as operator,
+                                 (SELECT realname from sys_user u WHERE u.id = t1.sale_id)             as sale,
+                                 (SELECT GROUP_CONCAT(DISTINCT user_name)
+                                  from ctop_project_member member
+                                  where t2.id = member.project_id
+                                    and role_code = 'plan')                                            as plan,
+                                 (SELECT GROUP_CONCAT(DISTINCT user_name)
+                                  from ctop_project_member member
+                                  where t2.id = member.project_id
+                                    and role_code = 'shot')                                            as shot,
+                                 (SELECT GROUP_CONCAT(DISTINCT user_name)
+                                  from ctop_project_member member
+                                  where t2.id = member.project_id
+                                    and role_code = 'clip')                                            as clip,
+                                 IFNULL((SELECT sum(cost)
+                                         from ctop_bytedance_report_advertiser_daily report
+                                         where report.advertiser_id in (SELECT account_id
+                                                                        from ctop_user_allocation t3
+                                                                        where t2.id = t3.project_id)
+                                           and report.stat_datetime = '${todayDate} 00:00:00'), 0)     as todayCost,
+                                 IFNULL((SELECT sum(cost)
+                                         from ctop_bytedance_report_advertiser_daily report
+                                         where report.advertiser_id in (SELECT account_id
+                                                                        from ctop_user_allocation t3
+                                                                        where t2.id = t3.project_id)
+                                           and report.stat_datetime = '${yesterdayDate} 00:00:00'), 0) as yesterdayCost
                           FROM ctop_advertiser t1
                                    LEFT JOIN ctop_project t2 ON t1.id = t2.advertiser_id
-                          WHERE t1.advertiser_type = 1 and t2.id is not null
-                      ) AS r
+                          where t2.media_id  in(1,3)
+                            and t2.id is not null) as r
+
                  UNION
-                 SELECT r.*,
-                        (r.todayCost - r.yesterdayCost) AS diffCost
-                 FROM (
-                          SELECT t1.advertiser_type         AS mediaType,
-                                 t1.company_id              as companyId,
-                                 t1.id                      as advertiserId,
-                                 t1.NAME                    as advertiserName,
-                                 t2.id                      as projectId,
-                                 t2.project_name            AS projectName,
-                                 t2.responsible_name        AS operatorManger,
-                                 t2.design_responsible_name AS designManger,
-                                 (
-                                     SELECT GROUP_CONCAT(DISTINCT user_name)
-                                     FROM ctop_user_allocation t3
-                                     WHERE t2.id = t3.project_id
-                                 )                          AS operator,
-                                 (
-                                     SELECT realname
-                                     FROM sys_user u
-                                     WHERE u.id = t1.sale_id
-                                 )                          AS sale,
-                                 (
-                                     SELECT GROUP_CONCAT(DISTINCT user_name)
-                                     FROM ctop_project_member member
-                                     WHERE t2.id = member.project_id
-                                       AND role_code = 'plan'
-                                 )                          AS plan,
-                                 (
-                                     SELECT GROUP_CONCAT(DISTINCT user_name)
-                                     FROM ctop_project_member member
-                                     WHERE t2.id = member.project_id
-                                       AND role_code = 'shot'
-                                 )                          AS shot,
-                                 (
-                                     SELECT GROUP_CONCAT(DISTINCT user_name)
-                                     FROM ctop_project_member member
-                                     WHERE t2.id = member.project_id
-                                       AND role_code = 'clip'
-                                 )                          AS clip,
-                                 CASE
-                                     WHEN (
-                                         SELECT sum(charge)
-                                         FROM ctop_kuaishou_report_daily_account report
-                                         WHERE report.account_id IN (
-                                             SELECT account_id
-                                             FROM ctop_user_allocation t3
-                                             WHERE t2.id = t3.project_id
-                                         )
-                                           AND report.stat_date = '${todayDate}'
-                                     ) IS NULL THEN
-                                         0
-                                     ELSE
-                                         (
-                                             SELECT sum(charge)
-                                             FROM ctop_kuaishou_report_daily_account report
-                                             WHERE report.account_id IN (
-                                                 SELECT account_id
-                                                 FROM ctop_user_allocation t3
-                                                 WHERE t2.id = t3.project_id
-                                             )
-                                               AND report.stat_date = '${todayDate}'
-                                         )
-                                     END                    AS todayCost,
-                                 CASE
-                                     WHEN (
-                                         SELECT sum(charge)
-                                         FROM ctop_kuaishou_report_daily_account report
-                                         WHERE report.account_id IN (
-                                             SELECT account_id
-                                             FROM ctop_user_allocation t3
-                                             WHERE t2.id = t3.project_id
-                                         )
-                                           AND report.stat_date = '${yesterdayDate}'
-                                     ) IS NULL THEN
-                                         0
-                                     ELSE
-                                         (
-                                             SELECT sum(charge)
-                                             FROM ctop_kuaishou_report_daily_account report
-                                             WHERE report.account_id IN (
-                                                 SELECT account_id
-                                                 FROM ctop_user_allocation t3
-                                                 WHERE t2.id = t3.project_id
-                                             )
-                                               AND report.stat_date = '${yesterdayDate}'
-                                         )
-                                     END                    AS yesterdayCost
+
+                 SELECT r.*, (r.todayCost - r.yesterdayCost) as diffCost, (r.todayCost + r.yesterdayCost) as sumCost
+                 from (
+                          SELECT t2.media_id                                               as mediaType,
+                                 t1.company_id                                             as companyId,
+                                 t1.id                                                     as advertiserId,
+                                 t1.NAME                                                   as advertiserName,
+                                 t2.id                                                     as projectId,
+                                 t2.project_name                                           as projectName,
+                                 t2.responsible_name                                       as operatorManger,
+                                 t2.design_responsible_name                                as designManger,
+                                 (SELECT GROUP_CONCAT(DISTINCT user_name)
+                                  from ctop_user_allocation t3
+                                  where t2.id = t3.project_id)                             as operator,
+                                 (SELECT realname from sys_user u WHERE u.id = t1.sale_id) as sale,
+                                 (SELECT GROUP_CONCAT(DISTINCT user_name)
+                                  from ctop_project_member member
+                                  where t2.id = member.project_id
+                                    and role_code = 'plan')                                as plan,
+                                 (SELECT GROUP_CONCAT(DISTINCT user_name)
+                                  from ctop_project_member member
+                                  where t2.id = member.project_id
+                                    and role_code = 'shot')                                as shot,
+                                 (SELECT GROUP_CONCAT(DISTINCT user_name)
+                                  from ctop_project_member member
+                                  where t2.id = member.project_id
+                                    and role_code = 'clip')                                as clip,
+                                 IFNULL((SELECT sum(charge)
+                                         from ctop_kuaishou_report_daily_account report
+                                         where report.account_id in (SELECT account_id
+                                                                     from ctop_user_allocation t3
+                                                                     where t2.id = t3.project_id)
+                                           and report.stat_date = '${todayDate}'), 0)      as todayCost,
+                                 IFNULL((SELECT sum(charge)
+                                         from ctop_kuaishou_report_daily_account report
+                                         where report.account_id in (SELECT account_id
+                                                                     from ctop_user_allocation t3
+                                                                     where t2.id = t3.project_id)
+                                           and report.stat_date = '${yesterdayDate}'), 0)  as yesterdayCost
                           FROM ctop_advertiser t1
                                    LEFT JOIN ctop_project t2 ON t1.id = t2.advertiser_id
-                          WHERE t1.advertiser_type = 2 and t2.id is not null
-                      ) AS r) as e
+                          where t2.media_id  in(2,4)
+                            and t2.id is not null) as r) as e
         where companyId = ${condition}
+        ORDER BY sumCost desc
     </select>
 
     <select id="queryAgentReportBy" resultType="com.alibaba.fastjson.JSONObject">
-        SELECT e.* from(
-                           SELECT r.*, (r.todayCost - r.yesterdayCost) as diffCost
-                           from (
-                                    SELECT '0'                                                               as mediaType,
-                                           '-'                                                                as companyId,
-                                           id                                                                as advertiserId,
-                                           corporation_name                                                  as advertiserName,
-                                           '-'                                                                as projectId,
-                                           account_name                                                      as projectName,
-                                           '-'                                                                as operatorManger,
-                                           '-'                                                                as designManger,
-                                           '-'                                                                as operator,
-                                           '-'                                                                as sale,
-                                           '-'                                                                as plan,
-                                           '-'                                                                as shot,
-                                           '-'                                                                as clip,
-                                           case
-                                               WHEN
-                                                   (SELECT sum(balance)
-                                                    from ctop_kuaishou_agent_account report
-                                                    where report.id = t1.id
-                                                      and report.create_time like '%${todayDate}%') is null THEN 0
-                                               ELSE (SELECT sum(balance)
-                                                     from ctop_kuaishou_agent_account report
-                                                     where report.id = t1.id
-                                                       and report.create_time like '%${todayDate}%') end     as todayCost,
-                                           case
-                                               WHEN
-                                                   (SELECT sum(balance)
-                                                    from ctop_kuaishou_agent_account report
-                                                    where report.id = t1.id
-                                                      and report.create_time like '%${yesterdayDate}%') is null THEN 0
-                                               ELSE (SELECT sum(balance)
-                                                     from ctop_kuaishou_agent_account report
-                                                     where report.id = t1.id
-                                                       and report.create_time like '%${yesterdayDate}%') end as yesterdayCost
-                                    from ctop_kuaishou_agent_account t1
-                                    where t1.create_time like '%${yesterdayDate}%'
-                                    GROUP by advertiserName, projectName
-                                )as r) as e
+        SELECT e.*
+        from (
+                 SELECT r.*, (r.todayCost - r.yesterdayCost) as diffCost, (r.todayCost + r.yesterdayCost) as sumCost
+                 from (
+                          SELECT '-'                                                             as mediaType,
+                                 '-'                                                             as companyId,
+                                 id                                                              as advertiserId,
+                                 corporation_name                                                as advertiserName,
+                                 '-'                                                             as projectId,
+                                 account_name                                                    as projectName,
+                                 '-'                                                             as operatorManger,
+                                 '-'                                                             as designManger,
+                                 '-'                                                             as operator,
+                                 '-'                                                             as sale,
+                                 '-'                                                             as plan,
+                                 '-'                                                             as shot,
+                                 '-'                                                             as clip,
+                                 IFNULL((SELECT sum(balance)
+                                         from ctop_kuaishou_agent_account report
+                                         where report.id = t1.id
+                                           and report.create_time like '%${todayDate}%'), 0)     as todayCost,
+                                 IFNULL((SELECT sum(balance)
+                                         from ctop_kuaishou_agent_account report
+                                         where report.id = t1.id
+                                           and report.create_time like '%${yesterdayDate}%'), 0) as yesterdayCost
+                          from ctop_kuaishou_agent_account t1
+                          where t1.create_time like '%${yesterdayDate}%'
+                          GROUP by advertiserName, projectName) as r) as e
+        ORDER BY sumCost desc
     </select>
 </mapper>

+ 1 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/xml/ProjectMemberMapper.xml

@@ -111,7 +111,7 @@
         b.project_name as projectName,
         a.advertiser_id as advertiserId,
         a.advertiser_name as advertiserName,
-        a.media_id as mediaId
+        (SELECT media_id from ctop_project c where c.id=a.project_id limit 1) as mediaId
         from
         ctop_user_allocation a
         left join ctop_project_member b on a.project_id = b.project_id

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

@@ -5,7 +5,6 @@ import cn.com.ctop.common.module.entity.Project;
 import cn.com.ctop.common.module.entity.UserAllocation;
 import cn.com.ctop.common.module.mapper.MailLogMapper;
 import cn.com.ctop.common.module.mapper.ProjectMapper;
-import cn.com.ctop.common.module.service.ICorpFeishuUserService;
 import cn.com.ctop.common.module.service.IUserAllocationService;
 import cn.com.ctop.common.module.utils.BigDecimalUtil;
 import cn.com.ctop.common.module.utils.Check;
@@ -13,9 +12,7 @@ import cn.com.ctop.common.module.utils.CorpWexinUtils;
 import cn.com.ctop.common.module.utils.SendMailUtil;
 import cn.com.ctop.kuaishou.modules.batch.mapper.KuaiShouGroupMapper;
 import cn.com.ctop.toutiao.modules.material.service.IByteDanceAdvertisePlanService;
-import cn.com.feishu.provider.MessageProvider;
 import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.util.DateUtils;
@@ -83,7 +80,6 @@ public class BidWarningServiceImpl implements IBidWarningService {
 
                             if (!Check.isNull(unitWarning)) {
                                 sendMessage(project.getMediaId(), accountId, projectId, project.getProjectName(), userAllocation.getAuthName(), unitWarning, maxBid);
-                                sendFeishumessage(project.getMediaId(), accountId, projectId, project.getProjectName(), userAllocation.getAuthName(), unitWarning, maxBid);
                             }
                         }
                     }
@@ -94,55 +90,7 @@ public class BidWarningServiceImpl implements IBidWarningService {
         } catch (Exception e) {
             e.printStackTrace();
         }
-
-
     }
-    private void sendFeishumessage(String mediaId, Long accountId, Long projectId, String projectName, String authName, List<String> unitWarning, Long maxBid) throws Exception {
-        String createTime = DateUtils.getNowDate("yyyy-MM-dd");
-        Integer count = mailLogMapper.selectCountByAccountIdAndDate(accountId, createTime, Integer.getInteger(mediaId));
-        StringBuilder text = new StringBuilder();
-        String s = "";
-        for (int i = 0; i < unitWarning.size(); i++) {
-            s += unitWarning.get(i) + "," + "\n\r";
-
-        }
-        text.append("项目出价预警").append("\n\r").append("您的项目:").append(projectName + ",").append("\n\r")
-                .append("授权名称为:" + authName + " 下的,").append("\n\r").append(s)
-                .append("大于项目设置的最高出价:").append(maxBid / 1000).append(" 元! 请您及时调整。");
-        if (count < 3) {
-            List<String> mailList = mailLogMapper.selectMailList(projectId);
-            String subject;
-            if ("1".equals(mediaId)) {
-                subject = "头条-广告计划出价预警";
-
-            } else {
-                subject = "快手-广告组出价预警";
-            }
-            try {
-                SendMailUtil.sendMail(mailList, subject, text.toString());
-                MailLog mailLog = new MailLog();
-                mailLog.setAccountId(accountId);
-                mailLog.setMailType(1);
-                mailLog.setContent(text.toString());
-                mailLog.setSendEmil(JSON.toJSONString(mailList));
-                mailLog.setSubject(subject);
-                mailLogMapper.insert(mailLog);
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-
-        JSONArray openIds = corpFeishuUserService.getOpenIdByParams(projectId);
-        if(null == openIds||openIds.isEmpty()){
-            log.error("该项目下运营飞书账号尚未绑定邮箱=>projectId:{}",projectId);
-            return;
-        }
-        MessageProvider.batchSend(null,openIds,null,text.toString());
-    }
-
-    @Autowired
-    private ICorpFeishuUserService corpFeishuUserService;
-
     private void sendMessage(String mediaId, Long accountId, Long projectId, String projectName, String authName, List<String> unitWarning, Long maxBid) {
         String createTime = DateUtils.getNowDate("yyyy-MM-dd");
         Integer count = mailLogMapper.selectCountByAccountIdAndDate(accountId, createTime, 1);

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

@@ -4,7 +4,6 @@ import cn.com.ctop.common.module.entity.MailLog;
 import cn.com.ctop.common.module.entity.Project;
 import cn.com.ctop.common.module.entity.UserAllocation;
 import cn.com.ctop.common.module.mapper.MailLogMapper;
-import cn.com.ctop.common.module.service.ICorpFeishuUserService;
 import cn.com.ctop.common.module.service.IUserAllocationService;
 import cn.com.ctop.common.module.utils.BigDecimalUtil;
 import cn.com.ctop.common.module.utils.Check;
@@ -12,9 +11,7 @@ import cn.com.ctop.common.module.utils.CorpWexinUtils;
 import cn.com.ctop.common.module.utils.SendMailUtil;
 import cn.com.ctop.kuaishou.modules.batch.mapper.KuaiShouGroupMapper;
 import cn.com.ctop.toutiao.modules.material.service.IByteDanceAdvertisePlanService;
-import cn.com.feishu.provider.MessageProvider;
 import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
 import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.util.DateUtils;
 import org.jeecg.modules.ctop.service.ICpaBidWarningService;
@@ -40,8 +37,6 @@ public class CpaBidWarningServiceImpl implements ICpaBidWarningService {
     private MailLogMapper mailLogMapper;
     @Autowired
     private IByteDanceAdvertisePlanService byteDanceAdvertisePlanService;
-    @Autowired
-    private ICorpFeishuUserService corpFeishuUserService;
 
     /**
      * 预警
@@ -67,7 +62,6 @@ public class CpaBidWarningServiceImpl implements ICpaBidWarningService {
 
                     if (!Check.isNull(unitWarning)) {
                         sendMessage(project.getMediaId(), accountId, project.getId(), project.getProjectName(), userAllocation.getAuthName(), unitWarning, maxDeepCpaBid);
-                        sendFeishuMessage(project.getMediaId(), accountId, project.getId(), project.getProjectName(), userAllocation.getAuthName(), unitWarning, maxDeepCpaBid);
                     }
                 }
             }
@@ -77,50 +71,6 @@ public class CpaBidWarningServiceImpl implements ICpaBidWarningService {
         }
     }
 
-    private void sendFeishuMessage(String mediaId, Long accountId, Long projectId, String projectName, String authName, List<String> unitWarning, BigDecimal maxCpaBid) throws Exception {
-        BigDecimal maxBid = BigDecimalUtil.divideBigDecimal(maxCpaBid, new BigDecimal(1000));
-        String createTime = DateUtils.getNowDate("yyyy-MM-dd");
-        Integer count = mailLogMapper.selectCountByAccountIdAndDate(accountId, createTime, Integer.getInteger(mediaId));
-        StringBuilder text = new StringBuilder();
-        String s = "";
-        for (int i = 0; i < unitWarning.size(); i++) {
-            s += unitWarning.get(i) + "," + "\n\r";
-
-        }
-        text.append("项目深度出价预警").append("\n\r").append("您的项目:").append(projectName + ",").append("\n\r")
-                .append("授权名称为:" + authName + " 下的,").append("\n\r").append(s)
-                .append("大于项目设置的最高深度转化出价:").append(maxBid).append(" 元! 请您及时调整。");
-        if (count < 3) {
-            List<String> mailList = mailLogMapper.selectMailList(projectId);
-            String subject;
-            if ("1".equals(mediaId)) {
-                subject = "头条-广告计划深度转化出价预警";
-
-            } else {
-                subject = "快手-广告组深度转化出价预警";
-            }
-
-            try {
-                SendMailUtil.sendMail(mailList, subject, text.toString());
-                MailLog mailLog = new MailLog();
-                mailLog.setAccountId(accountId);
-                mailLog.setMailType(1);
-                mailLog.setContent(text.toString());
-                mailLog.setSendEmil(JSON.toJSONString(mailList));
-                mailLog.setSubject(subject);
-                mailLogMapper.insert(mailLog);
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-        JSONArray openIds = corpFeishuUserService.getOpenIdByParams(projectId);
-        if(null == openIds||openIds.isEmpty()){
-            log.error("该项目下运营飞书账号尚未绑定邮箱=>projectId:{}",projectId);
-            return;
-        }
-        MessageProvider.batchSend(null,openIds,null,text.toString());
-    }
-
     private void sendMessage(String mediaId, Long accountId, Long projectId, String projectName, String authName, List<String> unitWarning, BigDecimal maxCpaBid) {
         BigDecimal maxBid = BigDecimalUtil.divideBigDecimal(maxCpaBid, new BigDecimal(1000));
         String createTime = DateUtils.getNowDate("yyyy-MM-dd");

+ 18 - 20
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/KuaiShouUploadServiceImpl.java

@@ -14,11 +14,11 @@ import cn.com.ctop.common.module.utils.LoadFileUtil;
 import cn.com.ctop.common.module.utils.PropertiesUtils;
 import cn.com.ctop.kuaishou.modules.batch.entity.KuaiShouVideoGet;
 import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouVideoGetService;
+import cn.com.ctop.kuaishou.modules.batch.service.IKuaishouInterfaceService;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.http.ParseException;
-import org.jeecg.common.util.DateUtils;
 import org.jeecg.modules.ctop.service.IKuaiShouUploadService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -43,11 +43,6 @@ import java.util.concurrent.Executors;
 @Service
 public class KuaiShouUploadServiceImpl implements IKuaiShouUploadService {
     private static ExecutorService executorService = Executors.newFixedThreadPool(6);
-
-    @Value("${oss.replace.replace-value}")
-    private String replaceValue;
-    @Value("${oss.replace.replace-old-value}")
-    private String replaceOldValue;
     @Value("${oss.replace.download}")
     private String downloadUrl;
 
@@ -60,11 +55,13 @@ public class KuaiShouUploadServiceImpl implements IKuaiShouUploadService {
     private MaterialParameterMapper parameterMapper;
     @Autowired
     private IKuaiShouVideoGetService kuaiShouVideoGetService;
+    @Autowired
+    private IKuaishouInterfaceService kuaishouInterfaceService;
 
     @Override
     public void upload(MaterialInfo materialInfo) {
         try {
-            String url = materialInfo.getUrl().replace(replaceOldValue, replaceValue);
+            String url = materialInfo.getUrl();
             log.info("replaceUrl:{}", url);
             String localUrl = LoadFileUtil.downLoadFromUrl(url, downloadUrl);
             FileSystemResource resource = new FileSystemResource(new File(localUrl));
@@ -95,7 +92,7 @@ public class KuaiShouUploadServiceImpl implements IKuaiShouUploadService {
             if (!Check.isNull(list)) {
                 for (UserAllocation allocation : list) {
                     Long accountId = allocation.getAccountId();
-                    CtopOauthToken ctopOauthToken = oauthTokenService.getAccessTokenByAccountIdAndMediaId(2,accountId);
+                    CtopOauthToken ctopOauthToken = oauthTokenService.getAccessTokenByAccountIdAndMediaId(2, accountId);
                     if (Check.isNull(ctopOauthToken)) {
                         log.error("快手账户信息为空,accountId:{}", accountId);
                         continue;
@@ -125,18 +122,19 @@ public class KuaiShouUploadServiceImpl implements IKuaiShouUploadService {
                                     if (resultJson.getInteger("code") == 0) {
                                         JSONObject dataJson = resultJson.getJSONObject("data");
                                         if (!Check.isNull(dataJson)) {
-                                            String photoId = dataJson.getString("photo_id");
-                                            String signature = dataJson.getString("signature");
-                                            KuaiShouVideoGet videoGet = new KuaiShouVideoGet();
-                                            videoGet.setAccountId(accountId);
-                                            videoGet.setId(accountId + photoId);
-                                            videoGet.setUrl(materialInfo.getUrl());
-                                            videoGet.setCoverUrl(materialInfo.getUrl()+ "?x-oss-process=video/snapshot,t_00000,m_fast");
-                                            videoGet.setStatDate(DateUtils.getNowDate());
-                                            videoGet.setMaterialType(finalType);
-                                            videoGet.setPhotoId(photoId);
-                                            videoGet.setSignature(signature);
-                                            kuaiShouVideoGetService.saveOrUpdate(videoGet);
+                                            Thread thread = new Thread() {
+                                                @Override
+                                                public void run() {
+                                                    try {
+                                                        Thread.sleep(2 * 1000L);
+                                                        kuaishouInterfaceService.getVideoInfo(ctopOauthToken.getAccessToken(), ctopOauthToken.getAccountId(), dataJson.getString("photo_id"));
+                                                    } catch (InterruptedException e) {
+                                                        e.printStackTrace();
+                                                    }
+                                                }
+                                            };
+                                            thread.start();
+
                                         }
                                         log.info("快手素材同步完成,accountId:{},code:{},返回信息:{}", accountId, materialInfo.getCode(), resultJson);
                                     } else {

+ 12 - 16
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/ProjectMemberServiceImpl.java

@@ -8,6 +8,7 @@ import cn.com.ctop.common.module.utils.Check;
 import cn.com.ctop.common.module.utils.CtopAdConstant;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.commons.lang.ArrayUtils;
 import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.modules.ctop.entity.ProjectMember;
@@ -39,6 +40,8 @@ public class ProjectMemberServiceImpl extends ServiceImpl<ProjectMemberMapper, P
     @Autowired
     private UserAllocationMapper userAllocationMapper;
 
+    private static final String[] PERMISSION_VIEW_PROJECT = {"admin", "saleDirector", "sale", "saleAssistant", "saleAm"};
+
     @Override
     public void addMember(SysUser sysUser, Project project) {
         Map<String, Object> map = new HashMap<>();
@@ -70,7 +73,6 @@ public class ProjectMemberServiceImpl extends ServiceImpl<ProjectMemberMapper, P
     }
 
     //视频报表
-    @Override
     public List<ProjectMember> getProjects(List<Integer> mediaIds) {
         LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
         String userId = sysUser.getId();
@@ -86,15 +88,9 @@ public class ProjectMemberServiceImpl extends ServiceImpl<ProjectMemberMapper, P
         } else if (roleCode.equals("admin")) {
             projectMemberList = memberMapper.adminProjects(mediaIds);
         } else if (roleCode.equals("operator") || roleCode.equals("operationAssistant") || roleCode.equals("touTiaoOperationManager")) {
-            projectMemberList = memberMapper.designProjects(userId, mediaIds);
-        }else{
-            //如果以上角色都不是的话直接查询此角色所属项目
-            projectMemberList = memberMapper.designProjects(userId, mediaIds);
+            projectMemberList = memberMapper.operationProjects(userId, mediaIds);
         }
 
-        if(null == projectMemberList){
-            projectMemberList = new ArrayList<>();
-        }
         return projectMemberList;
     }
 
@@ -105,13 +101,13 @@ public class ProjectMemberServiceImpl extends ServiceImpl<ProjectMemberMapper, P
         mediaList.add(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE_INT);
         mediaList.add(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE_INSIDE_INT);
         //查询登录账号下的项目
-        List<ProjectMember> projectMemberList = this.queryProjectMemberBy(userId,mediaList);
+        List<ProjectMember> projectMemberList = this.queryProjectMemberBy(userId, mediaList);
         if (projectMemberList.isEmpty()) {
             return result;
         }
         projectMemberList.forEach(ProjectMember -> {
-            Map<String, Object> temp=this.queryAccountByProjectId(ProjectMember);
-            if(temp!=null){
+            Map<String, Object> temp = this.queryAccountByProjectId(ProjectMember);
+            if (temp != null) {
                 result.add(temp);
             }
         });
@@ -126,9 +122,9 @@ public class ProjectMemberServiceImpl extends ServiceImpl<ProjectMemberMapper, P
         queryWrapper.eq("project_id", projectMember.getProjectId());
         queryWrapper.isNotNull("account_id");
         List<UserAllocation> userAllocations = userAllocationMapper.selectList(queryWrapper);
-        if(userAllocations.isEmpty()){
-            temp=null;
-        }else {
+        if (userAllocations.isEmpty()) {
+            temp = null;
+        } else {
             temp.put("account", userAllocations);
         }
         return temp;
@@ -136,9 +132,9 @@ public class ProjectMemberServiceImpl extends ServiceImpl<ProjectMemberMapper, P
 
     private List<ProjectMember> queryProjectMemberBy(String userId, List<Integer> mediaIds) {
         String roleCode = memberMapper.getRoleCodeByUserId(userId);
-        if(roleCode.equals("admin")){
+        if (ArrayUtils.contains(PERMISSION_VIEW_PROJECT, roleCode)) {
             return memberMapper.adminProjects(mediaIds);
         }
-        return memberMapper.queryProjectMemberByUserId(userId,mediaIds);
+        return memberMapper.queryProjectMemberByUserId(userId, mediaIds);
     }
 }

+ 6 - 4
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/aspect/DictAspect.java

@@ -102,9 +102,11 @@ public class DictAspect {
                             String code = field.getAnnotation(Dict.class).dicCode();
                             String text = field.getAnnotation(Dict.class).dicText();
                             String table = field.getAnnotation(Dict.class).dictTable();
+                            String extendsKey = field.getAnnotation(Dict.class).extendsKey();
+                            String extendsValue = field.getAnnotation(Dict.class).extendsValue();
                             String key = String.valueOf(item.get(field.getName()));
                             //翻译字典值对应的txt
-                            String textValue = translateDictValue(code, text, table, key);
+                            String textValue = translateDictValue(code, text, table, key,extendsKey,extendsValue);
 
                             log.debug(" 字典Val : "+ textValue);
                             log.debug(" __翻译字典字段__ "+field.getName() + CommonConstant.DICT_TEXT_SUFFIX+": "+ textValue);
@@ -132,7 +134,7 @@ public class DictAspect {
      * @param key
      * @return
      */
-    private String translateDictValue(String code, String text, String table, String key) {
+    private String translateDictValue(String code, String text, String table, String key,String extendsKey,String extendsValue) {
     	if(oConvertUtils.isEmpty(key)) {
     		return null;
     	}
@@ -145,9 +147,9 @@ public class DictAspect {
                 continue; //跳过循环
             }
             if (!StringUtils.isEmpty(table)){
-                tmpValue= dictService.queryTableDictTextByKey(table,text,code,k.trim());
+                tmpValue= dictService.queryTableDictTextByKey(table,text,code,k.trim(),extendsKey,extendsValue);
             }else {
-                tmpValue = dictService.queryDictTextByKey(code, k.trim());
+                tmpValue = dictService.queryDictTextByKey(code, k.trim(),extendsKey,extendsValue);
             }
 
             if (tmpValue != null) {

+ 2 - 2
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDictController.java

@@ -167,7 +167,7 @@ public class SysDictController {
 		Result<String> result = new Result<String>();
 		String text = null;
 		try {
-			text = sysDictService.queryDictTextByKey(dictCode, key);
+			text = sysDictService.queryDictTextByKey(dictCode, key,null,null);
 			 result.setSuccess(true);
 			 result.setResult(text);
 		} catch (Exception e) {
@@ -380,7 +380,7 @@ public class SysDictController {
 					result.error500("字典Code格式不正确!");
 					return result;
 				}
-				String text = sysDictService.queryTableDictTextByKey(params[0], params[1], params[2], key);
+				String text = sysDictService.queryTableDictTextByKey(params[0], params[1], params[2], key,null,null);
 				result.setSuccess(true);
 				result.setResult(text);
 				log.info(result.toString());

+ 17 - 25
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDictItemController.java

@@ -1,30 +1,22 @@
 package org.jeecg.modules.system.controller;
 
 
-import java.util.Arrays;
-import java.util.Date;
-
-import javax.servlet.http.HttpServletRequest;
-
+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.constant.CacheConstant;
 import org.jeecg.common.system.query.QueryGenerator;
-import org.jeecg.common.util.oConvertUtils;
 import org.jeecg.modules.system.entity.SysDictItem;
 import org.jeecg.modules.system.service.ISysDictItemService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.CacheEvict;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
-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 javax.servlet.http.HttpServletRequest;
+import java.util.Arrays;
+import java.util.Date;
 
 /**
  * <p>
@@ -41,7 +33,7 @@ public class SysDictItemController {
 
 	@Autowired
 	private ISysDictItemService sysDictItemService;
-	
+
 	/**
 	 * @功能:查询字典数据
 	 * @param sysDictItem
@@ -50,19 +42,19 @@ public class SysDictItemController {
 	 * @param req
 	 * @return
 	 */
-	@RequestMapping(value = "/list", method = RequestMethod.GET)
+	@GetMapping(value = "/list")
 	public Result<IPage<SysDictItem>> queryPageList(SysDictItem sysDictItem,@RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
 									  @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,HttpServletRequest req) {
-		Result<IPage<SysDictItem>> result = new Result<IPage<SysDictItem>>();
+		Result<IPage<SysDictItem>> result = new Result<>();
 		QueryWrapper<SysDictItem> queryWrapper = QueryGenerator.initQueryWrapper(sysDictItem, req.getParameterMap());
 		queryWrapper.orderByAsc("sort_order");
-		Page<SysDictItem> page = new Page<SysDictItem>(pageNo, pageSize);
+		Page<SysDictItem> page = new Page<>(pageNo, pageSize);
 		IPage<SysDictItem> pageList = sysDictItemService.page(page, queryWrapper);
 		result.setSuccess(true);
 		result.setResult(pageList);
 		return result;
 	}
-	
+
 	/**
 	 * @功能:新增
 	 * @param sysDictItem
@@ -82,7 +74,7 @@ public class SysDictItemController {
 		}
 		return result;
 	}
-	
+
 	/**
 	 * @功能:编辑
 	 * @param sysDictItem
@@ -105,7 +97,7 @@ public class SysDictItemController {
 		}
 		return result;
 	}
-	
+
 	/**
 	 * @功能:删除字典数据
 	 * @param id
@@ -126,7 +118,7 @@ public class SysDictItemController {
 		}
 		return result;
 	}
-	
+
 	/**
 	 * @功能:批量删除字典数据
 	 * @param ids
@@ -144,5 +136,5 @@ public class SysDictItemController {
 		}
 		return result;
 	}
-	
+
 }

+ 10 - 10
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/SysDictMapper.java

@@ -1,13 +1,13 @@
 package org.jeecg.modules.system.mapper;
 
-import java.util.List;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Param;
 import org.jeecg.common.system.vo.DictModel;
 import org.jeecg.modules.system.entity.SysDict;
 import org.jeecg.modules.system.model.DuplicateCheckVo;
 import org.jeecg.modules.system.model.TreeSelectModel;
 
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import java.util.List;
 
 /**
  * <p>
@@ -18,36 +18,36 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @since 2018-12-28
  */
 public interface SysDictMapper extends BaseMapper<SysDict> {
-	
+
 	/**
 	  *  重复检查SQL
 	 * @return
 	 */
 	public Long duplicateCheckCountSql(DuplicateCheckVo duplicateCheckVo);
 	public Long duplicateCheckCountSqlNoDataId(DuplicateCheckVo duplicateCheckVo);
-	
+
 	public List<DictModel> queryDictItemsByCode(@Param("code") String code);
 	public List<DictModel> queryTableDictItemsByCode(@Param("table") String table,@Param("text") String text,@Param("code") String code);
 	public List<DictModel> queryTableDictItemsByCodeAndFilter(@Param("table") String table,@Param("text") String text,@Param("code") String code,@Param("filterSql") String filterSql);
 
 
-	public String queryDictTextByKey(@Param("code") String code,@Param("key") String key);
+	String queryDictTextByKey(@Param("code") String code,@Param("key") String key,@Param(value = "extendsKey") String extendsKey,@Param(value = "extendsValue") String extendsValue);
+
+	String queryTableDictTextByKey(@Param("table") String table,@Param("text") String text,@Param("code") String code,@Param("key") String key,@Param(value = "extendsKey") String extendsKey,@Param(value = "extendsValue") String extendsValue);
 
-	public String queryTableDictTextByKey(@Param("table") String table,@Param("text") String text,@Param("code") String code,@Param("key") String key);
 
-	
 	/**
 	 * 查询所有部门 作为字典信息 id -->value,departName -->text
 	 * @return
 	 */
 	public List<DictModel> queryAllDepartBackDictModel();
-	
+
 	/**
 	 * 查询所有用户  作为字典信息 username -->value,realname -->text
 	 * @return
 	 */
 	public List<DictModel> queryAllUserBackDictModel();
-	
+
 	/**
 	 * 通过关键字查询出字典表
 	 * @param table
@@ -56,7 +56,7 @@ public interface SysDictMapper extends BaseMapper<SysDict> {
 	 * @param keyword
 	 * @return
 	 */
-	public List<DictModel> queryTableDictItems(@Param("table") String table,@Param("text") String text,@Param("code") String code,@Param("keyword") String keyword); 
+	public List<DictModel> queryTableDictItems(@Param("table") String table,@Param("text") String text,@Param("code") String code,@Param("keyword") String keyword);
 
 	/**
 	  * 根据表名、显示字段名、存储字段名 查询树

+ 7 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/mapper/xml/SysDictMapper.xml

@@ -12,9 +12,12 @@
 
     <!-- 通过字典code获取字典数据 -->
     <select id="queryDictTextByKey" parameterType="String" resultType="String">
-		   select s.item_text from sys_dict_item s 
+		   select s.item_text from sys_dict_item s
 		   where s.dict_id = (select id from sys_dict where dict_code = #{code})
 		   and s.item_value = #{key}
+		   <if test="extendsKey!=null and extendsValue!=null">
+			   and s.${extendsKey} = #{extendsValue}
+		   </if>
 	</select>
 
 
@@ -33,6 +36,9 @@
     <!--通过查询指定table的 text code key 获取字典值-->
     <select id="queryTableDictTextByKey" parameterType="String" resultType="String">
 		   select ${text} as 'text' from ${table} where ${code}= #{key}
+		   <if test="extendsKey != null and extendsValue != null">
+			   and ${extendsKey} = #{extendsValue}
+		   </if>
 	</select>
 
     <!-- 重复校验 sql语句 -->

+ 11 - 12
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysDictService.java

@@ -1,14 +1,13 @@
 package org.jeecg.modules.system.service;
 
-import java.util.List;
-import java.util.Map;
-
+import com.baomidou.mybatisplus.extension.service.IService;
 import org.jeecg.common.system.vo.DictModel;
 import org.jeecg.modules.system.entity.SysDict;
-import com.baomidou.mybatisplus.extension.service.IService;
 import org.jeecg.modules.system.entity.SysDictItem;
 import org.jeecg.modules.system.model.TreeSelectModel;
 
+import java.util.List;
+
 /**
  * <p>
  * 字典表 服务类
@@ -19,14 +18,14 @@ import org.jeecg.modules.system.model.TreeSelectModel;
  */
 public interface ISysDictService extends IService<SysDict> {
 
-    public List<DictModel> queryDictItemsByCode(String code);
+    List<DictModel> queryDictItemsByCode(String code);
 
     List<DictModel> queryTableDictItemsByCode(String table, String text, String code);
 
-	public List<DictModel> queryTableDictItemsByCodeAndFilter(String table, String text, String code, String filterSql);
-    public String queryDictTextByKey(String code, String key);
+	List<DictModel> queryTableDictItemsByCodeAndFilter(String table, String text, String code, String filterSql);
+    String queryDictTextByKey(String code, String key,String extendsKey,String extendsValue);
 
-    String queryTableDictTextByKey(String table, String text, String code, String key);
+    String queryTableDictTextByKey(String table, String text, String code, String key,String extendsKey,String extendsValue);
 
     /**
      * 根据字典类型删除关联表中其对应的数据
@@ -40,19 +39,19 @@ public interface ISysDictService extends IService<SysDict> {
      * 添加一对多
      */
     public void saveMain(SysDict sysDict, List<SysDictItem> sysDictItemList);
-    
+
     /**
 	 * 查询所有部门 作为字典信息 id -->value,departName -->text
 	 * @return
 	 */
 	public List<DictModel> queryAllDepartBackDictModel();
-	
+
 	/**
 	 * 查询所有用户  作为字典信息 username -->value,realname -->text
 	 * @return
 	 */
 	public List<DictModel> queryAllUserBackDictModel();
-	
+
 	/**
 	 * 通过关键字查询字典表
 	 * @param table
@@ -62,7 +61,7 @@ public interface ISysDictService extends IService<SysDict> {
 	 * @return
 	 */
 	public List<DictModel> queryTableDictItems(String table, String text, String code,String keyword);
-	
+
 	/**
 	  * 根据表名、显示字段名、存储字段名 查询树
 	 * @param table

+ 20 - 12
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysDictServiceImpl.java

@@ -1,8 +1,7 @@
 package org.jeecg.modules.system.service.impl;
 
-import java.util.List;
-
-
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.constant.CacheConstant;
 import org.jeecg.common.constant.CommonConstant;
 import org.jeecg.common.system.vo.DictModel;
@@ -10,7 +9,6 @@ import org.jeecg.modules.system.entity.SysDict;
 import org.jeecg.modules.system.entity.SysDictItem;
 import org.jeecg.modules.system.mapper.SysDictItemMapper;
 import org.jeecg.modules.system.mapper.SysDictMapper;
-
 import org.jeecg.modules.system.model.TreeSelectModel;
 import org.jeecg.modules.system.service.ISysDictService;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -18,9 +16,7 @@ import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-
-import lombok.extern.slf4j.Slf4j;
+import java.util.List;
 
 /**
  * <p>
@@ -60,9 +56,15 @@ public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDict> impl
 
 	@Override
 	@Cacheable(value = CacheConstant.DICT_CACHE)
-	public String queryDictTextByKey(String code, String key) {
+	public String queryDictTextByKey(String code, String key,String extendsKey,String extendsValue) {
 		log.info("无缓存dictText的时候调用这里!");
-		return sysDictMapper.queryDictTextByKey(code, key);
+		if(null == extendsKey||extendsKey.trim().equals("")){
+			extendsKey = null;
+		}
+		if(null == extendsValue||extendsValue.trim().equals("")){
+			extendsValue = null;
+		}
+		return sysDictMapper.queryDictTextByKey(code, key,extendsKey,extendsValue);
 	}
 
 	/**
@@ -96,9 +98,15 @@ public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDict> impl
 	 */
 	@Override
 	@Cacheable(value = "dictTableCache")
-	public String queryTableDictTextByKey(String table,String text,String code, String key) {
+	public String queryTableDictTextByKey(String table,String text,String code, String key,String extendsKey,String extendsValue) {
 		log.info("无缓存dictTable的时候调用这里!");
-		return sysDictMapper.queryTableDictTextByKey(table,text,code,key);
+		if(null == extendsKey||extendsKey.trim().equals("")){
+			extendsKey = null;
+		}
+		if(null == extendsValue||extendsValue.trim().equals("")){
+			extendsValue = null;
+		}
+		return sysDictMapper.queryTableDictTextByKey(table,text,code,key,extendsKey,extendsValue);
 	}
 
     /**
@@ -132,7 +140,7 @@ public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDict> impl
 	public List<DictModel> queryAllUserBackDictModel() {
 		return baseMapper.queryAllUserBackDictModel();
 	}
-	
+
 	@Override
 	public List<DictModel> queryTableDictItems(String table, String text, String code, String keyword) {
 		return baseMapper.queryTableDictItems(table, text, code, "%"+keyword+"%");

+ 17 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/util/ExtMappingJackson2HttpMessageConverter.java

@@ -0,0 +1,17 @@
+package org.jeecg.modules.system.util;
+
+import org.springframework.http.MediaType;
+import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ExtMappingJackson2HttpMessageConverter extends MappingJackson2HttpMessageConverter {
+    /*解决no suitable HttpMessageConverter found for response type [class com.XXX] and content type [text/plain]*/
+    public ExtMappingJackson2HttpMessageConverter(){
+        List<MediaType> mediaTypes = new ArrayList<>();
+        mediaTypes.add(MediaType.TEXT_PLAIN);
+        setSupportedMediaTypes(mediaTypes);// tag6
+    }
+
+}

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

@@ -352,7 +352,7 @@ public class WpsFileServiceImpl extends ServiceImpl<WpsFileMapper, WpsFile> impl
 
     @Override
     public void uploadFile(MultipartFile file,String userId){
-        ResFileDTO resFileDTO = WpsOSSUtil.uploadMultipartFile(file);
+        ResFileDTO resFileDTO = CosUtils.uploadMultipartFile(file,"script-lib/wps/");
         // 上传成功后,处理数据库记录值
         Date date = new Date();
         long dataTime = date.getTime();

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

@@ -57,6 +57,7 @@ spring:
     exclude: com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure
   datasource:
     url: jdbc:mysql://139.186.27.96:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false
+#    url: jdbc:mysql://39.106.184.70:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false
     username: hcst
     password: test@20190531
     driver-class-name: com.mysql.jdbc.Driver
@@ -95,16 +96,11 @@ spring:
         connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
       datasource:
         master:
-          url: jdbc:mysql://139.186.27.96:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false
+#          url: jdbc:mysql://139.186.27.96:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false
+          url: jdbc:mysql://39.106.184.70:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false
           username: hcst
           password: test@20190531
           driver-class-name: com.mysql.jdbc.Driver
-          # 多数据源配置
-          #multi-datasource1:
-          #url: jdbc:mysql://localhost:3306/jeecg-boot2?useUnicode=true&characterEncoding=utf8&autoReconnect=true&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true
-          #username: root
-          #password: root
-          #driver-class-name: com.mysql.jdbc.Driver
   #redis 配置
   redis:
     database: 0

+ 4 - 0
jeecg-boot-module-system/src/main/resources/quartz.properties

@@ -6,3 +6,7 @@ org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread=true
 org.quartz.jobStore.misfireThreshold=600000
 org.quartz.jobStore.class=org.quartz.simpl.RAMJobStore
 
+##打开集群模式
+#org.quartz.jobStore.isClustered = true
+##调度实例失效的检查时间间隔
+#org.quartz.jobStore.clusterCheckinInterval = 20000

+ 0 - 58
jeecg-boot-module-system/src/test/java/org/jeecg/ChromeTest.java

@@ -1,58 +0,0 @@
-//package org.jeecg;
-//
-//import org.junit.AfterClass;
-//import org.junit.BeforeClass;
-//import org.junit.Test;
-//import org.junit.runner.RunWith;
-//import org.openqa.selenium.chrome.ChromeDriver;
-//import org.springframework.boot.test.context.SpringBootTest;
-//import org.springframework.test.context.junit4.SpringRunner;
-//
-//import java.util.concurrent.TimeUnit;
-//
-//@RunWith(SpringRunner.class)
-//@SpringBootTest
-//public class ChromeTest {
-//    private static ChromeDriver browser;
-//
-//    @BeforeClass
-//    public static void openBrowser() {
-//        System.setProperty("webdriver.chrome.driver","D:/chromedriver.exe");
-//        browser = new ChromeDriver();
-//        browser.manage().timeouts()
-//                .implicitlyWait(10, TimeUnit.SECONDS);
-//    }
-//
-//    @AfterClass
-//    public static void closeBrowser() {
-//        browser.quit();
-//    }
-//
-//    @Test
-//    public void addBookToEmptyList() throws InterruptedException {
-//        // 要测试的网址
-//        String baseUrl = "http://localhost:" + 3000 + "/TEST" ;
-//        browser.get(baseUrl);
-//        // 对网页表单元素进行赋值操作并提交表单
-//        assertEquals("You have no books in your book list",
-//                browser.findElementByTagName("div").getText());
-//        browser.findElementByName("title")
-//                .sendKeys("BOOK TITLE");
-//        browser.findElementByName("author")
-//                .sendKeys("BOOK AUTHOR");
-//        browser.findElementByName("isbn")
-//                .sendKeys("1234567890");
-//        browser.findElementByName("description")
-//                .sendKeys("DESCRIPTION");
-//        browser.findElementByTagName("form")
-//                .submit();
-//        // 测试运行结果是否符合预期
-//        WebElement dl =
-//                browser.findElementByCssSelector("dt.bookHeadline");
-//        assertEquals("BOOK TITLE by BOOK AUTHOR (ISBN: 1234567890)",
-//                dl.getText());
-//        WebElement dt =
-//                browser.findElementByCssSelector("dd.bookDescription");
-//        assertEquals("DESCRIPTION", dt.getText());
-//    }
-//}

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

@@ -4,28 +4,28 @@ import cn.com.ctop.common.module.entity.BindAccountLogin;
 import cn.com.ctop.common.module.entity.CtopOauthToken;
 import cn.com.ctop.common.module.service.IBindAccountLoginService;
 import cn.com.ctop.common.module.service.ICtopOauthTokenService;
+import cn.com.ctop.common.module.utils.CloudVideoProcessUtil;
 import cn.com.ctop.common.module.utils.CtopAdConstant;
+import cn.com.ctop.crawler.modules.pangolin.entity.PangolinApp;
 import cn.com.ctop.crawler.modules.pangolin.service.PangolinAppService;
 import cn.com.ctop.crawler.modules.pangolin.service.PangolinCrawlerService;
 import cn.com.ctop.crawler.modules.pangolin.service.PangolinLoginService;
 import cn.com.ctop.kuaishou.modules.graphql.service.IKuaishouWebInterfaceService;
 import cn.com.ctop.toutiao.modules.material.service.IByteDanceAdvertiserDataService;
+import cn.com.ctop.toutiao.modules.material.service.IByteDanceCampaignService;
 import cn.com.ctop.toutiao.modules.report.service.IReportService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.util.DateUtils;
-import org.jeecg.modules.ctop.entity.KuaishouMatcostAccountMay;
-import org.jeecg.modules.ctop.service.IKuaishouMatcostAccountMayService;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
-import java.math.BigDecimal;
-import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
@@ -42,19 +42,9 @@ public class SampleTest {
     private IReportService reportService;
     @Test
     public void testOceanEngineJob() {
-        CtopOauthToken token1 = oauthTokenService.getTokenByAccountId(1670725854459911L);
-        CtopOauthToken token2 = oauthTokenService.getTokenByAccountId(1670827164313607L);
-        CtopOauthToken token3 = oauthTokenService.getTokenByAccountId(1670801593147405L);
-        CtopOauthToken token4 = oauthTokenService.getTokenByAccountId(1670827163327501L);
-        CtopOauthToken token5 = oauthTokenService.getTokenByAccountId(1670827163853832L);
-        for(int i=0;i<100;i++){
-            Date startDate = DateUtils.addDay(new Date(),-i);
-            reportService.getAdvertiserReport(token1,startDate,startDate,CtopAdConstant.BYTEDANCE_REPORT_TYPE_DAILY);
-            reportService.getAdvertiserReport(token2,startDate,startDate,CtopAdConstant.BYTEDANCE_REPORT_TYPE_DAILY);
-            reportService.getAdvertiserReport(token3,startDate,startDate,CtopAdConstant.BYTEDANCE_REPORT_TYPE_DAILY);
-            reportService.getAdvertiserReport(token4,startDate,startDate,CtopAdConstant.BYTEDANCE_REPORT_TYPE_DAILY);
-            reportService.getAdvertiserReport(token5,startDate,startDate,CtopAdConstant.BYTEDANCE_REPORT_TYPE_DAILY);
-        }
+        Map<String, Object> stringObjectMap = CloudVideoProcessUtil.videoCutFrameHandle("video/2019-10-30/ios推广视频-1572428291052.mp4", "video/2019-10-30/cut/${Number}.jpg");
+        System.err.println(stringObjectMap);
+
     }
 
     @Autowired
@@ -132,33 +122,6 @@ public class SampleTest {
         }
     }
 
-    @Autowired
-    private IKuaishouMatcostAccountMayService matcostAccountMayService;
-    @Test
-    public void testLoadMinDate(){
-        loadData();
-    }
-
-    private void loadData(){
-        KuaishouMatcostAccountMay matcostAccountMay = matcostAccountMayService.getOne();
-        if(null!=matcostAccountMay){
-            BigDecimal cost = matcostAccountMayService.getCostByParams(matcostAccountMay);
-            if(null!=cost&&!cost.toString().trim().equals("")){
-                matcostAccountMayService.updateCostByCode(matcostAccountMay.getVideoCode(),cost);
-            }else{
-                matcostAccountMayService.updateCostByCode(matcostAccountMay.getVideoCode(),BigDecimal.ZERO);
-            }
-//            String minDate = matcostAccountMayService.getMinDate(matcostAccountMay.getVideoCode());
-//            if(null == minDate||minDate.trim().equals("")){
-//                matcostAccountMayService.updateByCode(matcostAccountMay.getVideoCode(),"-");
-//            }else{
-//                matcostAccountMayService.updateByCode(matcostAccountMay.getVideoCode(),minDate);
-//            }
-
-            loadData();
-        }
-    }
-
     @Test
     public void testPangolinData() {
         QueryWrapper<BindAccountLogin> queryWrapper = new QueryWrapper<>();
@@ -169,17 +132,24 @@ public class SampleTest {
         if (list != null && !list.isEmpty()) {
             for (BindAccountLogin bindAccountLogin : list) {
                 pangolinCrawlerService.getChannelList(bindAccountLogin);
-//                pangolinCrawlerService.getActivationList(bindAccountLogin, DateUtils.getNowDate("yyyy-MM-dd"), 1);
-//                pangolinCrawlerService.getCheckList(bindAccountLogin);
-//                QueryWrapper<PangolinApp> queryWrapper1 = new QueryWrapper<>();
-//                queryWrapper1.eq("account_name", bindAccountLogin.getAccountName());
-//                List<PangolinApp> appList = pangolinAppService.list(queryWrapper1);
-//                if (appList != null && !appList.isEmpty()) {
-//                    appList.forEach(pangolinApp -> pangolinCrawlerService.getRealTimeList(bindAccountLogin, pangolinApp.getAppId()));
-//                }
+                pangolinCrawlerService.getActivationList(bindAccountLogin, DateUtils.getNowDate("yyyy-MM-dd"), 1);
+                pangolinCrawlerService.getCheckList(bindAccountLogin);
+                QueryWrapper<PangolinApp> queryWrapper1 = new QueryWrapper<>();
+                queryWrapper1.eq("account_name", bindAccountLogin.getAccountName());
+                List<PangolinApp> appList = pangolinAppService.list(queryWrapper1);
+                if (appList != null && !appList.isEmpty()) {
+                    appList.forEach(pangolinApp -> pangolinCrawlerService.getRealTimeList(bindAccountLogin, pangolinApp.getAppId()));
+                }
             }
         }
     }
+    @Autowired
+    private IByteDanceCampaignService campaignService;
+    @Test
+    public void testGetCampaign(){
+        CtopOauthToken token = oauthTokenService.getOauthTokenByAccountId("1649600126891015");
+        campaignService.getAdvertiserCampaign(token,"1672261893872756",null);
+    }
 }
 
 

+ 19 - 0
module-common/src/main/java/cn/com/ctop/common/module/constant/CosConstant.java

@@ -0,0 +1,19 @@
+package cn.com.ctop.common.module.constant;
+
+public class CosConstant {
+
+    //数据万象URL
+    public static final String URL="https://media-1301855440.ci.ap-chongqing.myqcloud.com/";
+    public static final String COS_MEDIA_URL_PREFIX ="https://media-1301855440.cos.ap-chongqing.myqcloud.com";
+    //jobs接口URL
+    public static final String URL_JOBS=URL+"jobs";
+    //snapshot接口URL
+    public static final String URL_SNAPSHOT=URL+"snapshot";
+    //截帧模板ID
+    public static final String TEMPLATE_ID="t11931b0daf5bf4776b612b4136ad67d00";
+    //数据万象队列ID
+    public static final String QUEUE_ID="p91b206a0462d46cda49b02063c5c42c8";
+    //COS首帧地址
+    public static final String URL_COS_ADDRESS="https://media-1301855440.cos.ap-chongqing.myqcloud.com/";
+
+}

+ 0 - 1
module-common/src/main/java/cn/com/ctop/common/module/entity/CtopOauthToken.java

@@ -87,7 +87,6 @@ public class CtopOauthToken {
     private Date refreshTokenExpiresIn;
 
 
-
     /**
      * 创建时间
      */

+ 26 - 0
module-common/src/main/java/cn/com/ctop/common/module/entity/TencentWatermarkTemplate.java

@@ -0,0 +1,26 @@
+package cn.com.ctop.common.module.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_tencent_watermark_template")
+public class TencentWatermarkTemplate {
+
+    @TableId(type = IdType.UUID)
+    private Long id;
+
+    private String name;
+
+    private String radio;
+
+    private Long templateId;
+
+    private Date createTime;
+
+    private Date updateTime;
+}

+ 0 - 61
module-common/src/main/java/cn/com/ctop/common/module/entity/VideoWatermarkTemplate.java

@@ -1,61 +0,0 @@
-package cn.com.ctop.common.module.entity;
-
-import java.io.Serializable;
-import java.util.Date;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.annotation.TableField;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-import lombok.EqualsAndHashCode;
-import lombok.experimental.Accessors;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import org.springframework.format.annotation.DateTimeFormat;
-import org.jeecgframework.poi.excel.annotation.Excel;
-
-/**
- * 水印模板
- * @author jeecg-boot
- * @date   2019-12-20
- * @version V1.0
- */
-@Data
-@TableName("ctop_video_watermark_template")
-@EqualsAndHashCode(callSuper = false)
-@Accessors(chain = true)
-@ApiModel(value="ctop_video_watermark_template对象", description="水印模板")
-public class VideoWatermarkTemplate {
-    
-	/**id*/
-	@TableId(type = IdType.UUID)
-    @ApiModelProperty(value = "id")
-	private Integer id;
-	/**name*/
-	@Excel(name = "name", width = 15)
-    @ApiModelProperty(value = "name")
-	private String name;
-	/**width*/
-	@Excel(name = "width", width = 15)
-    @ApiModelProperty(value = "width")
-	private Integer width;
-	/**height*/
-	@Excel(name = "height", width = 15)
-    @ApiModelProperty(value = "height")
-	private Integer height;
-	/**templateId*/
-	@Excel(name = "templateId", width = 15)
-    @ApiModelProperty(value = "templateId")
-	private String templateId;
-	/**templatePath*/
-	@Excel(name = "templatePath", width = 15)
-    @ApiModelProperty(value = "templatePath")
-	private String templatePath;
-	/**createTime*/
-    @ApiModelProperty(value = "createTime")
-	private Date createTime;
-	/**updateTime*/
-    @ApiModelProperty(value = "updateTime")
-	private Date updateTime;
-}

+ 8 - 0
module-common/src/main/java/cn/com/ctop/common/module/mapper/TencentWatermarkTemplateMapper.java

@@ -0,0 +1,8 @@
+package cn.com.ctop.common.module.mapper;
+
+
+import cn.com.ctop.common.module.entity.TencentWatermarkTemplate;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+public interface TencentWatermarkTemplateMapper extends BaseMapper<TencentWatermarkTemplate> {
+}

+ 0 - 17
module-common/src/main/java/cn/com/ctop/common/module/mapper/VideoWatermarkTemplateMapper.java

@@ -1,17 +0,0 @@
-package cn.com.ctop.common.module.mapper;
-
-import java.util.List;
-
-import org.apache.ibatis.annotations.Param;
-import cn.com.ctop.common.module.entity.VideoWatermarkTemplate;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-
-/**
- * 水印模板
- * @author: jeecg-boot
- * @date:   2019-12-20
- * @cersion: V1.0
- */
-public interface VideoWatermarkTemplateMapper extends BaseMapper<VideoWatermarkTemplate> {
-
-}

+ 1 - 1
module-common/src/main/java/cn/com/ctop/common/module/mapper/xml/CtopOauthTokenMapper.xml

@@ -101,7 +101,7 @@
         from ctop_oauth_token t1
         left join ctop_user_allocation t2
         on t1.account_id = t2.account_id
-        where t1.media_id in (1,3)
+        where t1.media_id in (1,3) and t2.account_status = 0
         group by account_id
     </select>
 

+ 1 - 1
module-common/src/main/java/cn/com/ctop/common/module/mapper/xml/VideoWatermarkTemplateMapper.xml

@@ -1,5 +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.mapper.VideoWatermarkTemplateMapper">
+<mapper namespace="cn.com.ctop.common.module.mapper.TencentWatermarkTemplateMapper">
 
 </mapper>

+ 1 - 1
module-common/src/main/java/cn/com/ctop/common/module/service/ICtopOauthTokenService.java

@@ -18,7 +18,7 @@ public interface ICtopOauthTokenService extends IService<CtopOauthToken> {
 
     CtopOauthToken getTokenByAccountId(Long accountId);
 
-    Map<String, Object> getByteDanceAccessToken(String token, String refreshToken);
+    Map<String, Object> getByteDanceAccessToken(CtopOauthToken token);
 
     void getKuaiShouRefreshToken(Long accountId,String token, String refreshToken, Integer agentType);
 

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

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 
 import java.io.IOException;
 import java.util.List;
+import java.util.Map;
 
 /**
  * 截屏
@@ -25,4 +26,8 @@ public interface IMaterialCutFrameService extends IService<MaterialCutFrame> {
 
     void loadCosCutFrame(String jobId, String videoSignature);  //腾讯云抽帧任务状态查询以及数据入库
 
+    void getTencentCutFrame(String videoUrl,String materialId,String coveUrl);
+
+    MaterialCutFrame getCutFrameByCode(String code);
+
 }

+ 1 - 1
module-common/src/main/java/cn/com/ctop/common/module/service/IMaterialInfoService.java

@@ -30,7 +30,7 @@ public interface IMaterialInfoService extends IService<MaterialInfo> {
 
     String getRoleCodeByUserId(String userId);
 
-    void watermarkVideo(String materialId, Integer videoWatermarkTemplateId, String userId);
+    void watermarkVideo(String materialId, Long videoWatermarkTemplateId, String userId);
 
     void getFile(MaterialInfo materialInfo);
 

+ 1 - 1
module-common/src/main/java/cn/com/ctop/common/module/service/IRefreshTokenService.java

@@ -3,5 +3,5 @@ package cn.com.ctop.common.module.service;
 public interface IRefreshTokenService {
     void getKuaiShouRefresh();
 
-    void byteDanceRefresh();
+    void byteDanceRefresh(String accountId);
 }

+ 0 - 1
module-common/src/main/java/cn/com/ctop/common/module/service/ISendMessageService.java

@@ -2,5 +2,4 @@ package cn.com.ctop.common.module.service;
 
 public interface ISendMessageService {
     void sendMessage(String id, String text);
-    void sendFeishuMessage(String userId, String text);
 }

+ 7 - 0
module-common/src/main/java/cn/com/ctop/common/module/service/ITencentWatermarkTemplateService.java

@@ -0,0 +1,7 @@
+package cn.com.ctop.common.module.service;
+
+import cn.com.ctop.common.module.entity.TencentWatermarkTemplate;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+public interface ITencentWatermarkTemplateService extends IService<TencentWatermarkTemplate> {
+}

+ 0 - 14
module-common/src/main/java/cn/com/ctop/common/module/service/IVideoWatermarkTemplateService.java

@@ -1,14 +0,0 @@
-package cn.com.ctop.common.module.service;
-
-import cn.com.ctop.common.module.entity.VideoWatermarkTemplate;
-import com.baomidou.mybatisplus.extension.service.IService;
-
-/**
- * 水印模板
- * @author jeecg-boot
- * @date   2019-12-20
- * @version V1.0
- */
-public interface IVideoWatermarkTemplateService extends IService<VideoWatermarkTemplate> {
-
-}

+ 33 - 26
module-common/src/main/java/cn/com/ctop/common/module/service/impl/CtopOauthTokenServiceImpl.java

@@ -26,14 +26,14 @@ import java.util.*;
 @Service
 public class CtopOauthTokenServiceImpl extends ServiceImpl<CtopOauthTokenMapper, CtopOauthToken> implements ICtopOauthTokenService {
     @Autowired
-    private CtopOauthTokenMapper cTopOauthTokenMapper;
+    private CtopOauthTokenMapper ctopOauthTokenMapper;
 
     @Override
     public CtopOauthToken getOauthTokenByAccountId(String accountId) {
         QueryWrapper<CtopOauthToken> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq("account_id", accountId).orderByDesc("create_time");
         queryWrapper.last("limit 1");
-        return cTopOauthTokenMapper.selectOne(queryWrapper);
+        return this.getOne(queryWrapper);
     }
 
 
@@ -42,7 +42,7 @@ public class CtopOauthTokenServiceImpl extends ServiceImpl<CtopOauthTokenMapper,
         QueryWrapper<CtopOauthToken> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq("account_id", accountId).orderByDesc("create_time");
         queryWrapper.last("limit 1");
-        return cTopOauthTokenMapper.selectOne(queryWrapper);
+        return this.getOne(queryWrapper);
     }
 
     /**
@@ -51,19 +51,27 @@ public class CtopOauthTokenServiceImpl extends ServiceImpl<CtopOauthTokenMapper,
      * @return
      */
     @Override
-    public Map<String, Object> getByteDanceAccessToken(String token, String refreshToken) {
-        XxlJobLogger.log("刷新头条token入参,token:{},refreshToken:{}", token, refreshToken);
+    public Map<String, Object> getByteDanceAccessToken(CtopOauthToken token) {
         Map<String, Object> resultMap = new HashMap<>();
         String url = PropertiesUtils.getValue("bytedance_config", "bytedance_api_url") + "/oauth2/refresh_token";
         Map<String, Object> param = new HashMap<>();
         param.put("app_id", PropertiesUtils.getValue("bytedance_config", "bytedance_appid"));
         param.put("secret", PropertiesUtils.getValue("bytedance_config", "bytedance_secret"));
         param.put("grant_type", "refresh_token");
-        param.put("refresh_token", refreshToken);
+        param.put("refresh_token", token.getRefreshToken());
         String result = HttpUtils.httpPostRequest(url, param, new HashMap<>());
+        System.err.println(JSONObject.parseObject(result));
+        XxlJobLogger.log("头条刷新token;accountId:{},返回信息:{}", token.getAccountId(), result);
+        if(null == result||result.trim().equals("")||result.equalsIgnoreCase("null")){
+            XxlJobLogger.log("头条刷新token失败;accountId:{},返回信息:{}", token.getAccountId(), result);
+            resultMap.put("message", "token刷新失败");
+            resultMap.put("token", token);
+            resultMap.put("code", 0);
+            return resultMap;
+        }
         JSONObject resultObject = JSONObject.parseObject(result);
-        XxlJobLogger.log("头条刷新token入参,token:{},refreshToken:{},返回信息:{}", token, refreshToken, resultObject);
         Integer code = resultObject.getInteger("code");
+        String message = resultObject.getString("message");
         if (code == 0) {
             JSONObject data = resultObject.getJSONObject("data");
             CtopOauthToken updateRefreshToken = new CtopOauthToken();
@@ -75,16 +83,17 @@ public class CtopOauthTokenServiceImpl extends ServiceImpl<CtopOauthTokenMapper,
             updateRefreshToken.setRefreshTokenExpiresIn(addSecond(now, refreshTokenExpiresIn));
             updateRefreshToken.setAccessTokenExpiresIn(addSecond(now, expiresIn));
             QueryWrapper<CtopOauthToken> queryWrapper = new QueryWrapper<>();
-            queryWrapper.eq("access_token", token);
+            queryWrapper.eq("access_token", token.getAccessToken());
             queryWrapper.eq("media_id", 1);
-            int i = cTopOauthTokenMapper.update(updateRefreshToken, queryWrapper);
+            int i = ctopOauthTokenMapper.update(updateRefreshToken, queryWrapper);
             if (i > 0) {
-                XxlJobLogger.log("头条刷新token成功:token:{}", token);
+                XxlJobLogger.log("头条刷新token成功:accountId:{}", token.getAccountId());
             }
             resultMap.put("message", "token刷新成功");
             resultMap.put("code", 0);
         } else {
-            resultMap.put("message", "token刷新失败");
+            XxlJobLogger.log("头条刷新token失败;accountId:{},返回信息:{}", token.getAccountId(), message);
+            resultMap.put("message", message);
             resultMap.put("token", token);
             resultMap.put("code", 0);
         }
@@ -100,9 +109,7 @@ public class CtopOauthTokenServiceImpl extends ServiceImpl<CtopOauthTokenMapper,
      */
     @Override
     public void getKuaiShouRefreshToken(Long accountId, String token, String refreshToken, Integer agentType) {
-
         log.info("快手刷新token入参,accountId:{},token:{},refreshToken:{}", accountId, token, refreshToken);
-
         String url = PropertiesUtils.getConfig("kuaishou_api_url") + "/rest/openapi/oauth2/authorize/refresh_token";
         Map<String, String> headers = new HashMap<>();
         headers.put("Content-Type", " application/json");
@@ -117,7 +124,7 @@ public class CtopOauthTokenServiceImpl extends ServiceImpl<CtopOauthTokenMapper,
 
         param.put("refresh_token", refreshToken);
         try {
-            CtopOauthToken oauthToken = cTopOauthTokenMapper.selectByAccountId(accountId);
+            CtopOauthToken oauthToken = ctopOauthTokenMapper.selectByAccountId(accountId);
             if (null == oauthToken) {
                 log.error("查询token信息返回结果为空,accountId:{}", accountId);
                 return;
@@ -152,7 +159,7 @@ public class CtopOauthTokenServiceImpl extends ServiceImpl<CtopOauthTokenMapper,
             QueryWrapper<CtopOauthToken> queryWrapper = new QueryWrapper<>();
             queryWrapper.eq("account_id", accountId);
             queryWrapper.eq("media_id", 2);
-            int i = cTopOauthTokenMapper.update(oauthToken, queryWrapper);
+            int i = ctopOauthTokenMapper.update(oauthToken, queryWrapper);
             if (i > 0) {
                 log.info("快手刷新token成功,accountId:{}", accountId);
             }
@@ -180,7 +187,7 @@ public class CtopOauthTokenServiceImpl extends ServiceImpl<CtopOauthTokenMapper,
 
     @Override
     public List<CtopOauthToken> selectKuaiShouToken() {
-        return cTopOauthTokenMapper.selectKuaiShouToken();
+        return ctopOauthTokenMapper.selectKuaiShouToken();
     }
 
 
@@ -192,25 +199,18 @@ public class CtopOauthTokenServiceImpl extends ServiceImpl<CtopOauthTokenMapper,
 
     @Override
     public List<CtopOauthToken> selectToutiaoToken() {
-        return cTopOauthTokenMapper.selectToutiaoToken();
+        return ctopOauthTokenMapper.selectToutiaoToken();
     }
 
 
     @Override
     public CtopOauthToken getAccessTokenByAccountIdAndMediaId(Integer mediaId, Long accountId) {
-        return cTopOauthTokenMapper.getAccessTokenByAccountIdAndMediaId(mediaId, accountId);
+        return ctopOauthTokenMapper.getAccessTokenByAccountIdAndMediaId(mediaId, accountId);
     }
 
     @Override
     public List<CtopOauthToken> getToutiaoTokenByCreateTime(String createTime) {
-        return cTopOauthTokenMapper.getToutiaoTokenByCreateTime(createTime);
-    }
-
-    private static Date addSecond(Date date, int seconds) {
-        Calendar calendar = Calendar.getInstance();
-        calendar.setTime(date);
-        calendar.add(Calendar.SECOND, seconds);
-        return calendar.getTime();
+        return ctopOauthTokenMapper.getToutiaoTokenByCreateTime(createTime);
     }
     @Override
     public List<CtopOauthToken> getByProjectId(long projectId) {
@@ -219,5 +219,12 @@ public class CtopOauthTokenServiceImpl extends ServiceImpl<CtopOauthTokenMapper,
         return this.list(queryWrapper);
     }
 
+    private Date addSecond(Date date, int seconds) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        calendar.add(Calendar.SECOND, seconds);
+        return calendar.getTime();
+    }
+
 
 }

+ 2 - 2
module-common/src/main/java/cn/com/ctop/common/module/service/impl/FileInfoServiceImpl.java

@@ -73,11 +73,11 @@ public class FileInfoServiceImpl extends ServiceImpl<FileInfoMapper, FileInfo> i
                 } else {
                     UserAllocation allocation = userAllocationService.getByAccountId(Long.valueOf(accountId));
                     String message = messageTemplate.getMaterialSyncTemplate(allocation.getProjectName(), Long.valueOf(accountId), allocation.getAuthName(), materialName, jsonObject.getString("message"));
-                    String feishuMessage = messageTemplate.getFeishuMaterialSyncTemplate(allocation.getProjectName(), Long.valueOf(accountId), allocation.getAuthName(), materialName, jsonObject.getString("message"));
                     sendMessageService.sendMessage(userId, message);
-                    sendMessageService.sendFeishuMessage(userId,feishuMessage);
                 }
 
+            }else{
+                log.info("头条上传素材f返回结果为空,返回信息:{},accountId:{}", jsonObject, accountId);
             }
 
 

+ 85 - 8
module-common/src/main/java/cn/com/ctop/common/module/service/impl/MaterialCutFrameServiceImpl.java

@@ -6,10 +6,7 @@ import cn.com.ctop.common.module.entity.MaterialCutFrameTask;
 import cn.com.ctop.common.module.mapper.MaterialCutFrameMapper;
 import cn.com.ctop.common.module.service.IMaterialCutFrameService;
 import cn.com.ctop.common.module.service.IMaterialCutFrameTaskService;
-import cn.com.ctop.common.module.utils.Check;
-import cn.com.ctop.common.module.utils.CosUtil;
-import cn.com.ctop.common.module.utils.LoadFileUtil;
-import cn.com.ctop.common.module.utils.MpsUtils;
+import cn.com.ctop.common.module.utils.*;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
@@ -22,7 +19,6 @@ import com.aliyuncs.mts.model.v20140618.SubmitSnapshotJobResponse;
 import com.aliyuncs.profile.DefaultProfile;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.google.gson.JsonObject;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -32,6 +28,7 @@ import org.springframework.stereotype.Service;
 import java.io.IOException;
 import java.net.URLEncoder;
 import java.util.List;
+import java.util.Map;
 
 
 /**
@@ -265,17 +262,18 @@ public class MaterialCutFrameServiceImpl extends ServiceImpl<MaterialCutFrameMap
     public void loadCosCutFrame(String jobId, String videoSignature) {
         try {
             String resp = CosUtil.describeTaskDetail(jobId);
-            if(StringUtils.isBlank(resp)){
+            if (StringUtils.isBlank(resp)) {
                 return;
             }
 
             JSONObject respJson = JSONObject.parseObject(resp);
             String status = respJson.getString("Status");
 
-            if(!"FINISH".equals(status)){
+            if (!"FINISH".equals(status)) {
                 return;
             }
 
+
             JSONArray resultSetArray = respJson.getJSONObject("WorkflowTask").getJSONArray("MediaProcessResultSet");
             if (Check.isNull(resultSetArray)) {
                 return;
@@ -290,7 +288,7 @@ public class MaterialCutFrameServiceImpl extends ServiceImpl<MaterialCutFrameMap
                 return;
             }
 
-            for (int i=0; i< snapshotArray.size(); i++){
+            for (int i = 0; i < snapshotArray.size(); i++) {
                 String imagePath = snapshotArray.getString(i);
                 String urlStr = "https://" + CosUtil.bucket + ".cos.ap-chongqing.myqcloud.com" + imagePath;
 
@@ -319,4 +317,83 @@ public class MaterialCutFrameServiceImpl extends ServiceImpl<MaterialCutFrameMap
     }
 
 
+    @Override
+    public void getTencentCutFrame(String videoUrl, String materialId, String coveUrl) {
+        try {
+
+            if (Check.isNull(materialId)) {
+                return;
+            }
+            String loadImage = "cutFrame/" + materialId + "/${Number}.jpg";
+            QueryWrapper<MaterialCutFrame> queryWrapper = new QueryWrapper<>();
+            queryWrapper.eq("video_signature", materialId);
+            queryWrapper.last("limit 1");
+            MaterialCutFrame checkMaterialCutFrame = this.getOne(queryWrapper);
+            if (!Check.isNull(checkMaterialCutFrame)) {
+                log.info("已存推荐封面");
+                return;
+            }
+            // 添加首帧
+            String coverCutFramePath = LoadFileUtil.downLoadFromUrl(coveUrl, imageUpLoadPath);
+            String CutFrameMd5 = LoadFileUtil.getMD5(coverCutFramePath);
+            MaterialCutFrame coveCutFrame = new MaterialCutFrame();
+            coveCutFrame.setSignature(CutFrameMd5);
+            coveCutFrame.setUrl(coveUrl);
+            coveCutFrame.setVideoSignature(materialId);
+            coveCutFrame.setImageIndex(0);
+            this.save(coveCutFrame);
+            LoadFileUtil.delFile(coverCutFramePath);
+            // 请求从数据接口 获取其余14张截图
+            getCut(materialId, videoUrl, loadImage, 1);
+        } 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);
+            if (Check.isNullMap(coverMap) && count < 4) {
+                getCut(materialId, videoUrl, loadImage, count + 1);
+            }
+
+            if (Check.isNullMap(coverMap)) {
+                return;
+            }
+            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);
+                    MaterialCutFrame cutFrame = new MaterialCutFrame();
+                    cutFrame.setSignature(cutFrameMd5);
+                    cutFrame.setUrl(url);
+                    cutFrame.setVideoSignature(materialId);
+                    cutFrame.setImageIndex(i + 1);
+                    this.save(cutFrame);
+                    LoadFileUtil.delFile(cutFramePath);
+                }
+
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+
+        }
+
+
+    }
+
+    @Override
+    public MaterialCutFrame getCutFrameByCode(String code) {
+        QueryWrapper<MaterialCutFrame> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("video_signature", code);
+        queryWrapper.last("limit 1");
+        return this.getOne(queryWrapper);
+    }
+
+
 }

+ 1 - 8
module-common/src/main/java/cn/com/ctop/common/module/service/impl/MaterialImageInfoServiceImpl.java

@@ -38,11 +38,6 @@ public class MaterialImageInfoServiceImpl extends ServiceImpl<MaterialImageInfoM
 
     @Value("${oss.replace.download}")
     private String downloadUrl;
-    @Value("${oss.replace.replace-value}")
-    private String replaceValue;
-    @Value("${oss.replace.replace-old-value}")
-    private String replaceOldValue;
-
 
     @Autowired
     private MaterialImageInfoMapper materialImageInfoMapper;
@@ -72,9 +67,7 @@ public class MaterialImageInfoServiceImpl extends ServiceImpl<MaterialImageInfoM
                     materialImageInfo.setMaterialName(json.getString("materialName"));
                     materialImageInfo.setStatus(0);
                     materialImageInfo.setUserId(userId);
-                    String replaceUrl = url.replace(replaceOldValue, replaceValue);
-                    log.info("图片replaceUrl:{}", url);
-                    String localUrl = LoadFileUtil.downLoadFromUrl(replaceUrl, downloadUrl);
+                    String localUrl = LoadFileUtil.downLoadFromUrl(url, downloadUrl);
                     File picture = new File(localUrl);
                     BufferedImage sourceImg = null;
                     try {

+ 74 - 68
module-common/src/main/java/cn/com/ctop/common/module/service/impl/MaterialInfoServiceImpl.java

@@ -1,5 +1,6 @@
 package cn.com.ctop.common.module.service.impl;
 
+import cn.com.ctop.common.module.constant.CosConstant;
 import cn.com.ctop.common.module.entity.*;
 import cn.com.ctop.common.module.mapper.MaterialAscriptionMapper;
 import cn.com.ctop.common.module.mapper.MaterialInfoMapper;
@@ -9,15 +10,14 @@ import cn.com.ctop.common.module.service.*;
 import cn.com.ctop.common.module.utils.*;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.aliyuncs.mts.model.v20140618.QueryJobListResponse;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.tencentcloudapi.mps.v20190612.models.DescribeTaskDetailResponse;
 import it.sauronsoftware.jave.Encoder;
 import it.sauronsoftware.jave.EncoderException;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.context.annotation.Primary;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -27,11 +27,14 @@ import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.net.URLDecoder;
 import java.nio.channels.FileChannel;
 import java.util.*;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
-import java.util.regex.Pattern;
+
+import static cn.com.ctop.common.module.utils.CloudVideoProcessUtil.getTaskDetailResponse;
+import static cn.com.ctop.common.module.utils.CloudVideoProcessUtil.videoWatermarkHandle;
 
 /**
  * 素材信息
@@ -42,40 +45,61 @@ import java.util.regex.Pattern;
  */
 @Slf4j
 @Service
-@Primary
 public class MaterialInfoServiceImpl extends ServiceImpl<MaterialInfoMapper, MaterialInfo> implements IMaterialInfoService {
+
     private static ExecutorService uploadExecutorService = Executors.newFixedThreadPool(5);
+
     @Resource
-    private IVideoWatermarkTemplateService videoWatermarkTemplateService;
+    private ITencentWatermarkTemplateService tencentWatermarkTemplateService;
     @Resource
     private IVideoWatermarkTaskService videoWatermarkTaskService;
     @Autowired
     private MaterialInfoMapper materialInfoMapper;
     @Autowired
     private MaterialParameterMapper materialParameterMapper;
+    @Autowired
+    private MaterialAscriptionMapper materialAscriptionMapper;
+    @Autowired
+    private MaterialTagMapper materialTagMapper;
+    @Resource
+    private IMaterialCutFrameService materialCutFrameService;
+
 
-    @Value("${oss.replace.replace-value}")
-    private String replaceValue;
-    @Value("${oss.replace.replace-old-value}")
-    private String replaceOldValue;
     @Value("${oss.replace.download}")
     private String downloadUrl;
 
     @Override
-    public void watermarkVideo(String materialId, Integer videoWatermarkTemplateId, String userId) {
-        VideoWatermarkTemplate videoWatermarkTemplate = videoWatermarkTemplateService.getById(videoWatermarkTemplateId);
+    public void watermarkVideo(String materialId, Long videoWatermarkTemplateId, String userId) {
+        TencentWatermarkTemplate tentcentWatermarkTemplate = tencentWatermarkTemplateService.getById(videoWatermarkTemplateId);
         MaterialInfo materialInfo = this.getById(materialId);
-        MpsUtils mpsUtils = new MpsUtils();
-        String path = materialInfo.getUrl().substring(materialInfo.getUrl().indexOf('/', 10) + 1, materialInfo.getUrl().length());
-        String jobId = mpsUtils.videoWaterMark(path, videoWatermarkTemplate.getTemplatePath(), videoWatermarkTemplate.getTemplateId(), videoWatermarkTemplate.getHeight());
-        QueryJobListResponse.Job job = MpsUtils.getJobStatus(jobId);
-        VideoWatermarkTask videoWatermarkTask = new VideoWatermarkTask();
-        videoWatermarkTask.setJobId(jobId);
-        videoWatermarkTask.setUserId(userId);
-        videoWatermarkTask.setStatus(job.getState());
-        videoWatermarkTaskService.save(videoWatermarkTask);
-        materialInfo.setWatermarkCode(jobId);
-        this.updateById(materialInfo);
+        String path = URLDecoder.decode(materialInfo.getUrl().substring(materialInfo.getUrl().indexOf("/", 10) + 1, materialInfo.getUrl().length()));
+        String taskId = videoWatermarkHandle(path, tentcentWatermarkTemplate.getTemplateId());
+        DescribeTaskDetailResponse taskDetailResponse = null;
+        for (int i = 0; i < 10; i++) {
+            try {
+                Thread.sleep(2000);
+            } catch (InterruptedException e) {
+                log.error(e.getMessage());
+            }
+            taskDetailResponse = getTaskDetailResponse(taskId);
+            if (taskDetailResponse.getStatus().equals("FINISH")) {
+                break;
+            }
+        }
+        if (taskDetailResponse.getStatus().equals("FINISH")) {
+            String videoUrl = taskDetailResponse.getWorkflowTask().getMediaProcessResultSet()[0].getTranscodeTask().getOutput().getPath();
+            VideoWatermarkTask videoWatermarkTask = new VideoWatermarkTask();
+            videoWatermarkTask.setVideoUrl(CosConstant.COS_MEDIA_URL_PREFIX + videoUrl);
+            videoWatermarkTask.setVideoId(materialId);
+            videoWatermarkTask.setJobId(taskId);
+            videoWatermarkTask.setUserId(userId);
+            videoWatermarkTask.setStatus(taskDetailResponse.getStatus());
+            videoWatermarkTaskService.save(videoWatermarkTask);
+            materialInfo.setWatermarkUrl(CosConstant.COS_MEDIA_URL_PREFIX + videoUrl);
+            materialInfo.setWatermarkCode(taskId);
+            this.updateById(materialInfo);
+        }
+
     }
 
     @Override
@@ -112,17 +136,6 @@ public class MaterialInfoServiceImpl extends ServiceImpl<MaterialInfoMapper, Mat
         }
     }
 
-    public boolean imgLocation(String fileName) throws IOException {
-        String reg = "(mp4|flv|avi|rm|rmvb|wmv|MP4)";
-        Pattern p = Pattern.compile(reg);
-        return p.matcher(fileName).find();
-    }
-
-    @Autowired
-    private MaterialAscriptionMapper materialAscriptionMapper;
-    @Autowired
-    private MaterialTagMapper materialTagMapper;
-
     @Override
     public Map<String, Object> insert(JSONObject jsonObject) {
         Map<String, Object> resultMap = new HashMap<>();
@@ -174,13 +187,11 @@ public class MaterialInfoServiceImpl extends ServiceImpl<MaterialInfoMapper, Mat
         return resultMap;
     }
 
-    @Resource
-    private IMaterialCutFrameService materialCutFrameService;
-
     private void insertMaterialInfo(String url, String type, JSONObject jsonObject) {
         MaterialInfo info = new MaterialInfo();
         Long projectId = jsonObject.getLong("projectId");
         String code = jsonObject.getString("code");
+        info.setId(code + projectId);
         info.setCode(code);
         if (!Check.isNull(jsonObject.getString("watermarkUrl"))) {
             info.setWatermarkUrl(jsonObject.getString("watermarkUrl"));
@@ -244,9 +255,6 @@ public class MaterialInfoServiceImpl extends ServiceImpl<MaterialInfoMapper, Mat
      * @param materialId
      * @return
      */
-
-    //@Autowired
-    //private MaterialInfoMapper materialInfoMapper;
     @Override
     public JSONObject getDetail(String materialId) {
         JSONObject json = new JSONObject();
@@ -326,22 +334,18 @@ public class MaterialInfoServiceImpl extends ServiceImpl<MaterialInfoMapper, Mat
         uploadExecutorService.submit(new Runnable() {
             @Override
             public void run() {
-                /*try {*/
                 log.info("获取素材基本信息,code:{}", materialInfo.getCode());
                 if (!Check.isNull(materialInfo)) {
                     long l = System.currentTimeMillis();
-                    String videoUrl = materialInfo.getUrl();
-                    String url = videoUrl.replace(replaceOldValue, replaceValue);
+                    String url = materialInfo.getUrl();
                     log.info("replaceUrl:{}", url);
                     String localUrl = null;
                     it.sauronsoftware.jave.MultimediaInfo m = null;
                     FileInputStream fis = null;
                     try {
                         localUrl = LoadFileUtil.downLoadFromUrl(url, downloadUrl);
-
                         File file = new File(localUrl);
                         it.sauronsoftware.jave.Encoder encoder = new Encoder();
-                        /*try {*/
                         m = encoder.getInfo(file);
                         long duration = m.getDuration();
                         long secondDuration = duration / 1000;
@@ -373,19 +377,6 @@ public class MaterialInfoServiceImpl extends ServiceImpl<MaterialInfoMapper, Mat
                         if (insert > 0) {
                             log.info("素材基本信息入库完成,用时:{} s", (System.currentTimeMillis() - l) / 1000);
                         }
-                        Thread thread = new Thread() {
-                            @Override
-                            public void run() {
-                                try {
-                                    log.info("开始抽帧");
-                                    materialCutFrameService.getCutFrame(videoUrl, materialInfo.getCode(), secondDuration, height, width);
-                                    //materialCutFrameService.getCosCutFrame(videoUrl, materialInfo.getCode());  //腾讯云抽帧
-                                } catch (Exception e) {
-                                    e.printStackTrace();
-                                }
-                            }
-                        };
-                        thread.start();
                     } catch (FileNotFoundException e) {
                         e.printStackTrace();
                     } catch (IOException e) {
@@ -402,18 +393,7 @@ public class MaterialInfoServiceImpl extends ServiceImpl<MaterialInfoMapper, Mat
                             e.printStackTrace();
                         }
                     }
-
-                    /* */
-
-                       /* } catch (Exception e) {
-                            e.printStackTrace();
-                        } finally {
-                            file.delete();
-                        }*/
                 }
-                /*} catch (Exception e) {
-                    e.printStackTrace();
-                }*/
             }
 
 
@@ -473,6 +453,7 @@ public class MaterialInfoServiceImpl extends ServiceImpl<MaterialInfoMapper, Mat
             MaterialInfo info = new MaterialInfo();
             Long projectId = json.getLong("projectId");
             String code = json.getString("code");
+            info.setId(code + projectId);
             info.setCode(code);
             if (!Check.isNull(json.getString("watermarkUrl"))) {
                 info.setWatermarkUrl(json.getString("watermarkUrl"));
@@ -488,6 +469,29 @@ public class MaterialInfoServiceImpl extends ServiceImpl<MaterialInfoMapper, Mat
             info.setCreateTime(new Date());
             info.setUpdateTime(new Date());
             info.setType(type);
+
+            MaterialCutFrame cutFrame = materialCutFrameService.getCutFrameByCode(code);
+            if (Check.isNull(cutFrame)) {
+                String videoUrl = URLDecoder.decode(info.getUrl()).replace("https://media-1301855440.cos.ap-chongqing.myqcloud.com/", "");
+                String loadImage = "cutFrame/" + code + "/zero.jpg";
+                String coverUrl = CloudVideoProcessUtil.videoCutPictureHandle(videoUrl, loadImage);
+                info.setCoverUrl(coverUrl);
+                Thread thread = new Thread() {
+                    @Override
+                    public void run() {
+                        try {
+                            log.info("开始抽帧,code:{}", code);
+                            materialCutFrameService.getTencentCutFrame(videoUrl, code, coverUrl);
+                        } catch (Exception e) {
+                            e.printStackTrace();
+                        }
+                    }
+                };
+                thread.start();
+            } else {
+                info.setCoverUrl(cutFrame.getUrl());
+            }
+
             this.save(info);
 
             JSONArray imageArr = json.getJSONArray("imageArr");
@@ -565,11 +569,13 @@ public class MaterialInfoServiceImpl extends ServiceImpl<MaterialInfoMapper, Mat
         return resultMap;
     }
 
+    @Override
     public List<String> getEffiCode() {
         return materialInfoMapper.getEffiSignature();
     }
 
 
+    @Override
     public List<MaterialInfo> effiMaterialInfo() {
         List<MaterialInfo> materialInfoList = new ArrayList<>();
         List<String> effiSignatureList = materialInfoMapper.getEffiSignature();

+ 14 - 6
module-common/src/main/java/cn/com/ctop/common/module/service/impl/RefreshTokenServiceImpl.java

@@ -29,7 +29,6 @@ public class RefreshTokenServiceImpl implements IRefreshTokenService {
     @Override
     public void getKuaiShouRefresh() {
         List<CtopOauthToken> oauthTokens = oauthTokenMapper.selectKuaiShouTokens(CtopAdConstant.PLATFORM_TYPE_KUAISHOU);
-
         if (!Check.isNull(oauthTokens)) {
             for (CtopOauthToken oauthToken : oauthTokens) {
                 XxlJobLogger.log("刷新token,accountId:{}", oauthToken.getAccountId());
@@ -44,12 +43,21 @@ public class RefreshTokenServiceImpl implements IRefreshTokenService {
     }
 
     @Override
-    public void byteDanceRefresh() {
-        List<CtopOauthToken> byteDanceOauthTokens = oauthTokenMapper.selectByteDanceTokens(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE);
-        if (!Check.isNull(byteDanceOauthTokens)) {
-            for (CtopOauthToken oauthToken : byteDanceOauthTokens) {
-                oauthTokenService.getByteDanceAccessToken(oauthToken.getAccessToken(), oauthToken.getRefreshToken());
+    public void byteDanceRefresh(String accountId) {
+        if(null==accountId||"".equals(accountId.trim())||accountId.equalsIgnoreCase("null")){
+            List<CtopOauthToken> byteDanceOauthTokens = oauthTokenMapper.selectByteDanceTokens(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE);
+            if (!Check.isNull(byteDanceOauthTokens)) {
+                for (CtopOauthToken oauthToken : byteDanceOauthTokens) {
+                    oauthTokenService.getByteDanceAccessToken(oauthToken);
+                }
+            }
+        }else{
+            CtopOauthToken token = oauthTokenMapper.selectByAccountId(Long.parseLong(accountId));
+            if(token == null){
+                XxlJobLogger.log("未获取到账户数据,accountId:{}",accountId);
+                return;
             }
+            oauthTokenService.getByteDanceAccessToken(token);
         }
     }
 }

+ 0 - 18
module-common/src/main/java/cn/com/ctop/common/module/service/impl/SendMessageServiceImpl.java

@@ -1,13 +1,10 @@
 package cn.com.ctop.common.module.service.impl;
 
-import cn.com.ctop.common.module.entity.CorpFeishuUser;
 import cn.com.ctop.common.module.mapper.MailLogMapper;
 import cn.com.ctop.common.module.service.ICorpFeishuUserService;
 import cn.com.ctop.common.module.service.ISendMessageService;
 import cn.com.ctop.common.module.utils.Check;
 import cn.com.ctop.common.module.utils.CorpWexinUtils;
-import cn.com.feishu.provider.MessageProvider;
-import com.alibaba.fastjson.JSONArray;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -27,19 +24,4 @@ public class SendMessageServiceImpl implements ISendMessageService {
             log.info("消息发送成功,userId:{}", userId);
         }
     }
-
-    @Override
-    public void sendFeishuMessage(String userId, String text) {
-        CorpFeishuUser user = corpFeishuUserService.getByUserId(userId);
-        if(null!=user){
-            JSONArray openIds = new JSONArray();
-            openIds.add(user.getOpenId());
-            try {
-                MessageProvider.batchSend(null,openIds,null,text);
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-    }
-
 }

+ 11 - 0
module-common/src/main/java/cn/com/ctop/common/module/service/impl/TencentWatermarkTemplateServiceImpl.java

@@ -0,0 +1,11 @@
+package cn.com.ctop.common.module.service.impl;
+
+import cn.com.ctop.common.module.entity.TencentWatermarkTemplate;
+import cn.com.ctop.common.module.mapper.TencentWatermarkTemplateMapper;
+import cn.com.ctop.common.module.service.ITencentWatermarkTemplateService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service
+public class TencentWatermarkTemplateServiceImpl extends ServiceImpl<TencentWatermarkTemplateMapper, TencentWatermarkTemplate> implements ITencentWatermarkTemplateService {
+}

+ 0 - 21
module-common/src/main/java/cn/com/ctop/common/module/service/impl/VideoWatermarkTemplateServiceImpl.java

@@ -1,21 +0,0 @@
-package cn.com.ctop.common.module.service.impl;
-
-import cn.com.ctop.common.module.entity.VideoWatermarkTemplate;
-import cn.com.ctop.common.module.mapper.VideoWatermarkTemplateMapper;
-import cn.com.ctop.common.module.service.IVideoWatermarkTemplateService;
-import org.springframework.context.annotation.Primary;
-import org.springframework.stereotype.Service;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-
-/**
- * 水印模板
- * @author jeecg-boot
- * @date   2019-12-20
- * @version V1.0
- */
-@Service
-@Primary
-public class VideoWatermarkTemplateServiceImpl extends ServiceImpl<VideoWatermarkTemplateMapper, VideoWatermarkTemplate> implements IVideoWatermarkTemplateService {
-
-}

+ 301 - 0
module-common/src/main/java/cn/com/ctop/common/module/utils/CloudVideoProcessUtil.java

@@ -0,0 +1,301 @@
+package cn.com.ctop.common.module.utils;
+
+import cn.com.ctop.common.module.constant.CosConstant;
+import cn.hutool.core.map.MapUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.qcloud.cos.auth.BasicCOSCredentials;
+import com.qcloud.cos.auth.COSCredentials;
+import com.qcloud.cos.auth.COSSigner;
+import com.qcloud.cos.http.HttpMethodName;
+import com.tencentcloudapi.common.Credential;
+import com.tencentcloudapi.common.exception.TencentCloudSDKException;
+import com.tencentcloudapi.common.profile.ClientProfile;
+import com.tencentcloudapi.common.profile.HttpProfile;
+import com.tencentcloudapi.mps.v20190612.MpsClient;
+import com.tencentcloudapi.mps.v20190612.models.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.MediaType;
+import org.springframework.web.client.RestClientException;
+import org.springframework.web.client.RestTemplate;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
+/**
+ * Created by JQ.bi on 2020.6.28
+ */
+@Configuration
+@PropertySource("classpath:config.properties")
+public class CloudVideoProcessUtil {
+
+    private static RestTemplate restTemplate = new RestTemplate();
+
+    private static Logger logger = LoggerFactory.getLogger(CloudVideoProcessUtil.class);
+
+    private static final String SECRET_ID = "AKIDE6IpMi8fJQRCg1iuWzFajjRs43kbbets";
+    private static final String SECRET_KEY = "tXzuwMfplTTK3c9GFUyETilasvQfePu9";
+    private static final String ENDPOINT = "mps.tencentcloudapi.com";
+    private static final String COS_LOCATION = "ap-chongqing";
+    private static final String COS_BUCKET_MEDIA = "media-1301855440";
+    private static final String COS_BUCKET_PART = "part-1301855440";
+
+
+    public static DescribeTaskDetailResponse getTaskDetailResponse(String taskId) {
+        MpsClient client = getClient();
+        DescribeTaskDetailRequest describeTaskDetailRequest = new DescribeTaskDetailRequest();
+        describeTaskDetailRequest.setTaskId(taskId);
+        DescribeTaskDetailResponse resp = null;
+        try {
+            resp = client.DescribeTaskDetail(describeTaskDetailRequest);
+        } catch (TencentCloudSDKException e) {
+            e.printStackTrace();
+        }
+        return resp;
+    }
+
+    /**
+     * 发起视频水印处理请求
+     */
+    public static String videoWatermarkHandle(String videoPath, Long watermarkTemplateId) {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        MpsClient client = getClient();
+        //发起视频处理请求
+        ProcessMediaRequest request = new ProcessMediaRequest();
+        TranscodeTaskInput transcodeTaskInput = new TranscodeTaskInput();
+        transcodeTaskInput.setOutputObjectPath("/watermark/" + sdf.format(new Date()) + "/" + UUID.randomUUID() + ".mp4");
+        //水印模板信息
+        WatermarkInput watermarkInput = new WatermarkInput();
+        watermarkInput.setDefinition(watermarkTemplateId);
+        //指定视频转码模板
+        transcodeTaskInput.setDefinition(30L);
+        transcodeTaskInput.setWatermarkSet(new WatermarkInput[]{watermarkInput});
+        MediaProcessTaskInput mediaProcessTaskInput = new MediaProcessTaskInput();
+        mediaProcessTaskInput.setTranscodeTaskSet(new TranscodeTaskInput[]{transcodeTaskInput});
+        request.setMediaProcessTask(mediaProcessTaskInput);
+        //视频输入
+        CosInputInfo cosInputInfo = new CosInputInfo();
+        cosInputInfo.setRegion(COS_LOCATION);
+        cosInputInfo.setBucket(COS_BUCKET_MEDIA);
+        cosInputInfo.setObject("/" + videoPath);
+        MediaInputInfo mediaInputInfo = new MediaInputInfo();
+        mediaInputInfo.setType("COS");
+        mediaInputInfo.setCosInputInfo(cosInputInfo);
+        request.setInputInfo(mediaInputInfo);
+        //加水印视频输出
+        CosOutputStorage cosOutputStorage = new CosOutputStorage();
+        cosOutputStorage.setBucket(COS_BUCKET_MEDIA);
+        cosOutputStorage.setRegion(COS_LOCATION);
+        TaskOutputStorage taskOutputStorage = new TaskOutputStorage();
+        taskOutputStorage.setType("COS");
+        taskOutputStorage.setCosOutputStorage(cosOutputStorage);
+        request.setOutputStorage(taskOutputStorage);
+        ProcessMediaResponse response = null;
+        String taskId = "";
+        try {
+            response = client.ProcessMedia(request);
+        } catch (TencentCloudSDKException e) {
+            logger.error(e.getMessage());
+        }
+        if (null != response) {
+            taskId = response.getTaskId();
+        }
+        return taskId;
+    }
+
+    /**
+     * 查询数据万象任务状态
+     *
+     * @return
+     */
+    public static Map getMediaJobsResponse(String jobId) {
+        String auth = generateAuth(SECRET_ID, SECRET_KEY, "/jobs/" + jobId, HttpMethodName.GET);
+        if (auth.isEmpty()) {
+            logger.error("腾讯云Authorization获取失败");
+        }
+        //请求media-1301855440.ci.ap-chongqing.myqcloud.com/jobs/jobId 接口
+        HttpHeaders headers = new HttpHeaders();
+        headers.set("Authorization", auth);
+        HttpEntity<String> requestEntity = new HttpEntity<>(headers);
+        String response = null;
+        try {
+            response = restTemplate.exchange(CosConstant.URL_JOBS + "/" + jobId, HttpMethod.GET, requestEntity, String.class).getBody();
+        } catch (RestClientException e) {
+            logger.error(e.getMessage());
+        }
+        Map<String, Object> mapResp = XmlToMapUtil.multilayerXmlToMap(response);
+        Map JobsDetail = (Map) ((Map) mapResp.get("Response")).get("JobsDetail");
+        if (JobsDetail.get("Code").equals("Success")) {
+            return JobsDetail;
+        } else {
+            return MapUtil.newHashMap();
+        }
+    }
+
+    /**
+     * 数据万象发起视频抽帧处理请求
+     */
+    public static Map<String, Object> videoCutFrameHandle(String videoPath, String outputPath) {
+        Map<String, Object> result = new HashMap<>();
+        String auth = generateAuth(SECRET_ID, SECRET_KEY, "/jobs", HttpMethodName.POST);
+        if (auth.isEmpty()) {
+            logger.error("腾讯云Authorization获取失败");
+        }
+        //拼接请求数据万象jobs接口的参数
+        JSONObject input = new JSONObject();
+        input.put("Object", videoPath);
+        JSONObject output = new JSONObject();
+        output.put("Region", COS_LOCATION);
+        output.put("Bucket", COS_BUCKET_MEDIA);
+        output.put("Object", outputPath);
+        JSONObject operation = new JSONObject();
+        operation.put("TemplateId", CosConstant.TEMPLATE_ID);
+        operation.put("Output", output);
+        JSONObject request = new JSONObject();
+        request.put("Tag", "Snapshot");
+        request.put("Input", input);
+        request.put("Operation", operation);
+        request.put("QueueId", CosConstant.QUEUE_ID);
+
+        //请求media-1301855440.ci.ap-chongqing.myqcloud.com/jobs 接口
+        HttpHeaders headers = new HttpHeaders();
+        headers.set("Authorization", auth);
+        headers.setContentType(MediaType.APPLICATION_JSON);
+        HttpEntity<String> requestEntity = new HttpEntity<>(request.toJSONString(), headers);
+        String response = null;
+        try {
+            response = restTemplate.exchange(CosConstant.URL_JOBS, HttpMethod.POST, requestEntity, String.class).getBody();
+        } catch (RestClientException e) {
+            logger.error(e.getMessage());
+        }
+        Map<String, Object> mapResp = XmlToMapUtil.multilayerXmlToMap(response);
+        Map JobsDetail = (Map) ((Map) mapResp.get("Response")).get("JobsDetail");
+        if (JobsDetail.get("Code").equals("Success")) {
+            Map jobStatusMap = null;
+            for (int i = 0; i < 10; i++) {
+                try {
+                    Thread.sleep(1000);
+                } catch (InterruptedException e) {
+                    logger.error(e.getMessage());
+                }
+                jobStatusMap = getMediaJobsResponse(JobsDetail.get("JobId").toString());
+                if (jobStatusMap.get("State").equals("Success")) {
+                    break;
+                }
+            }
+            if (jobStatusMap.get("State").equals("Success")) {
+                result = getFrameUrl(outputPath);
+            } else {
+                result = getErrorUrl();
+            }
+        }
+        return result;
+    }
+
+    /**
+     * 数据万象获取截图服务
+     */
+    public static String videoCutPictureHandle(String videoPath, String outputPath) {
+        String auth = generateAuth(SECRET_ID, SECRET_KEY, "/snapshot", HttpMethodName.POST);
+        if (auth.isEmpty()) {
+            logger.error("腾讯云Authorization获取失败");
+        }
+        //拼接请求数据万象jobs接口的参数
+        JSONObject input = new JSONObject();
+        input.put("Object", videoPath);
+        JSONObject output = new JSONObject();
+        output.put("Region", COS_LOCATION);
+        output.put("Bucket", COS_BUCKET_MEDIA);
+        output.put("Object", outputPath);
+        JSONObject request = new JSONObject();
+        request.put("Input", input);
+        request.put("Output", output);
+        request.put("Time", 0);
+
+        //请求media-1301855440.ci.ap-chongqing.myqcloud.com/snapshot 接口
+        HttpHeaders headers = new HttpHeaders();
+        headers.set("Authorization", auth);
+        headers.setContentType(MediaType.APPLICATION_JSON);
+        HttpEntity<String> requestEntity = new HttpEntity<>(request.toJSONString(), headers);
+        String response = null;
+        try {
+            response = restTemplate.exchange(CosConstant.URL_SNAPSHOT, HttpMethod.POST, requestEntity, String.class).getBody();
+        } catch (RestClientException e) {
+            logger.error(e.getMessage());
+        }
+        if (response.isEmpty()) {
+            return CosConstant.URL_COS_ADDRESS + "error.jpg";
+        } else {
+            return CosConstant.URL_COS_ADDRESS + outputPath;
+        }
+    }
+
+    /**
+     * 获取视频处理服务 MpsClient
+     */
+    private static MpsClient getClient() {
+        MpsClient mpsClient = null;
+        try {
+            Credential cred = new Credential(SECRET_ID, SECRET_KEY);
+            HttpProfile httpProfile = new HttpProfile();
+            httpProfile.setEndpoint(ENDPOINT);
+            ClientProfile clientProfile = new ClientProfile();
+            clientProfile.setHttpProfile(httpProfile);
+            mpsClient = new MpsClient(cred, COS_LOCATION, clientProfile);
+        } catch (Exception ex) {
+            logger.error(ex.getMessage());
+        }
+        return mpsClient;
+    }
+
+    /**
+     * 获取数据万象认证Auth
+     *
+     * @param secretId
+     * @param secretKey
+     * @param path
+     * @param httpMethodName
+     * @return
+     */
+    public static String generateAuth(String secretId, String secretKey, String path, HttpMethodName httpMethodName) {
+        COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);
+        COSSigner signer = new COSSigner();
+        //设置过期时间为1个小时
+        Date expiredTime = new Date(System.currentTimeMillis() + 3600L * 1000L);
+        //授权的签名
+        return signer.buildAuthorizationStr(
+                httpMethodName,
+                path,
+                cred,
+                expiredTime
+        );
+    }
+
+    private static Map<String, Object> getFrameUrl(String outputPath) {
+        Map<String, Object> result = new HashMap<>();
+        for (int i = 0; i <= 13; i++) {
+            result.put("" + i + "", CosConstant.URL_COS_ADDRESS + outputPath.replace("${Number}", "" + i + ""));
+        }
+        return result;
+    }
+
+    private static Map<String, Object> getPictureUrl(String outputPath) {
+        Map<String, Object> result = new HashMap<>();
+        result.put("0", CosConstant.URL_COS_ADDRESS + outputPath);
+        return result;
+    }
+
+    private static Map<String, Object> getErrorUrl() {
+        Map<String, Object> result = new HashMap<>();
+        result.put("0", CosConstant.URL_COS_ADDRESS + "error.jpg");
+        return result;
+    }
+}

+ 163 - 0
module-common/src/main/java/cn/com/ctop/common/module/utils/JQCOSUtils.java

@@ -0,0 +1,163 @@
+package cn.com.ctop.common.module.utils;
+
+import com.qcloud.cos.COSClient;
+import com.qcloud.cos.ClientConfig;
+import com.qcloud.cos.auth.BasicCOSCredentials;
+import com.qcloud.cos.auth.COSCredentials;
+import com.qcloud.cos.exception.CosClientException;
+import com.qcloud.cos.model.*;
+import com.qcloud.cos.region.Region;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.PropertySource;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * Created by JQ.bi on 2020.6.19
+ */
+@Configuration
+@PropertySource("classpath:config.properties")
+public class JQCOSUtils {
+
+    private static Logger logger = LoggerFactory.getLogger(JQCOSUtils.class);
+
+    //腾讯云API的密钥Access Key ID
+    private static String accessKeyId;
+
+    //腾讯云API的密钥Access Key Secret
+    private static String accessKeySecret;
+
+    //腾讯云API的内或外网域名
+    private static String endpoint;
+
+    //腾讯云API的bucket名称
+    private static String bucketName;
+
+    //腾讯云API的文件夹名称
+    private static String folder;
+
+    /**
+     * 永久密钥参数初始化
+     */
+    @Value("${qcloud.accessKeyId}")
+    public void setAccessKeyId(String accessKeyId) {
+        JQCOSUtils.accessKeyId = accessKeyId;
+    }
+
+    @Value("${qcloud.accessKeySecret}")
+    public void setAccessKeySecret(String accessKeySecret) {
+        JQCOSUtils.accessKeySecret = accessKeySecret;
+    }
+
+    @Value("${qcloud.cos.endpoint}")
+    public void setEndpoint(String endpoint) {
+        JQCOSUtils.endpoint = endpoint;
+    }
+
+    @Value("${qcloud.cos.bucketName}")
+    public void setBucketName(String bucketName) {
+        JQCOSUtils.bucketName = bucketName;
+    }
+
+    @Value("${qcloud.cos.folder}")
+    public void setFolder(String folder) {
+        JQCOSUtils.folder = folder;
+    }
+
+    /**
+     * 创建COSClient实例
+     */
+    public static COSClient getCosClient() {
+        //初始化用户身份信息(secretId, secretKey)
+        COSCredentials cred = new BasicCOSCredentials(accessKeyId, accessKeySecret);
+        //设置 bucket 的区域, COS 地域的简称请参照 https://cloud.tencent.com/document/product/436/6224
+        Region region = new Region("ap-chongqing");
+        // clientConfig 中包含了设置 region, https(默认 http), 超时, 代理等 set 方法, 使用可参见源码或者常见问题 Java SDK 部分。
+        ClientConfig clientConfig = new ClientConfig(region);
+        return new COSClient(cred, clientConfig);
+    }
+
+    /**
+     * 创建桶
+     */
+    public static String createBucket(String bucketName) {
+
+        COSClient cosClient = JQCOSUtils.getCosClient();
+        CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);
+        //设置 bucket 的权限为 Private(私有读写), 其他可选有公有读私有写, 公有读写
+        createBucketRequest.setCannedAcl(CannedAccessControlList.PublicReadWrite);
+        try {
+            Bucket bucketResult = cosClient.createBucket(createBucketRequest);
+            return bucketResult.getName();
+        } catch (CosClientException serverException) {
+            logger.error(serverException.getMessage());
+        }
+        return bucketName;
+    }
+
+    /**
+     * 删除桶
+     */
+    public static void deleteBucket(String bucketName) {
+
+        COSClient cosClient = JQCOSUtils.getCosClient();
+        cosClient.deleteBucket(bucketName);
+    }
+
+    /**
+     *  上传对象 文件上传
+     */
+    public static String uploadObject(File file){
+
+        String resultStr="";
+        COSClient cosClient= JQCOSUtils.getCosClient();
+        String fileName=file.getName();
+        try {
+            PutObjectResult putObjectResult = cosClient.putObject(new PutObjectRequest(bucketName, folder+fileName, file));
+            resultStr=putObjectResult.getETag();
+        }catch (CosClientException serverException){
+            logger.error(serverException.getMessage());
+        }
+        return resultStr;
+    }
+
+    /**
+     *  上传对象 流上传
+     */
+    public static String uploadObject(InputStream inputStream, String fileName){
+
+        String resultStr="";
+        COSClient cosClient= JQCOSUtils.getCosClient();
+        try {
+            ObjectMetadata metadata = new ObjectMetadata();
+            ObjectMetadata objectMetadata = new ObjectMetadata();
+            objectMetadata.setContentLength(inputStream.available());
+            objectMetadata.setCacheControl("no-cache");
+            objectMetadata.setHeader("Pragma", "no-cache");
+            objectMetadata.setContentDisposition("inline;filename=" + fileName);
+            PutObjectResult putObjectResult = cosClient.putObject(new PutObjectRequest(bucketName, folder+fileName, inputStream,metadata));
+            resultStr=putObjectResult.getETag();
+        }catch (CosClientException | IOException serverException){
+            logger.error(serverException.getMessage());
+        }
+        return resultStr;
+    }
+    /**
+     *  删除对象
+     */
+    public static void deleteObject(String dir,String fileName){
+
+        COSClient cosClient= JQCOSUtils.getCosClient();
+        try{
+            cosClient.deleteObject(bucketName, dir+fileName);
+        }catch (CosClientException serverException){
+            logger.error(serverException.getMessage());
+        }
+
+    }
+}

+ 6 - 1
module-common/src/main/java/cn/com/ctop/common/module/utils/KuaishouInterfaceConstant.java

@@ -129,7 +129,7 @@ public class KuaishouInterfaceConstant {
     /**
      * 修改广告计划预算
      */
-    public static final String UPDATE_CAMPAIGN_BUDGET = "/rest/openapi/v1/campaign/update/";
+    public static final String UPDATE_CAMPAIGN_BUDGET = "/rest/openapi/v2/campaign/update";
 
     /**
      * 修改广告组预算
@@ -198,6 +198,11 @@ public class KuaishouInterfaceConstant {
      */
     public static final String ASYNC_TASK_DOWNLOAD = "/rest/openapi/v1/async_task/download";
 
+    /**
+     * 落地页查询
+     */
+    public static final String PAGE_LIST = "/rest/openapi/v2/lp/page/list";
+
 
     /**
      * 登录

+ 62 - 0
module-common/src/main/java/cn/com/ctop/common/module/utils/XmlToMapUtil.java

@@ -0,0 +1,62 @@
+package cn.com.ctop.common.module.utils;
+
+import org.dom4j.Document;
+import org.dom4j.DocumentException;
+import org.dom4j.DocumentHelper;
+import org.dom4j.Element;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class XmlToMapUtil {
+
+    private static Logger logger= LoggerFactory.getLogger(XmlToMapUtil.class);
+    /**
+     * (多层)xml格式字符串转换为map
+     *
+     * @param xml xml字符串
+     * @return 第一个为Root节点,Root节点之后为Root的元素,如果为多层,可以通过key获取下一层Map
+     */
+    public static Map<String, Object> multilayerXmlToMap(String xml) {
+        Document doc = null;
+        try {
+            doc = DocumentHelper.parseText(xml);
+        } catch (DocumentException e) {
+            logger.error("xml字符串解析,失败 --> {}", e);
+        }
+        Map<String, Object> map = new HashMap<>();
+        if (null == doc) {
+            return map;
+        }
+        // 获取根元素
+        Element rootElement = doc.getRootElement();
+        recursionXmlToMap(rootElement,map);
+        return map;
+    }
+
+    /**
+     * multilayerXmlToMap核心方法,递归调用
+     *
+     * @param element 节点元素
+     * @param outmap 用于存储xml数据的map
+     */
+    @SuppressWarnings("unchecked")
+    private static void recursionXmlToMap(Element element, Map<String, Object> outmap) {
+        // 得到根元素下的子元素列表
+        List<Element> list = element.elements();
+        int size = list.size();
+        if (size == 0) {
+            // 如果没有子元素,则将其存储进map中
+            outmap.put(element.getName(), element.getTextTrim());
+        } else {
+            // innerMap
+            Map<String, Object> innerMap = new HashMap<>();
+            // 遍历子元素
+            list.forEach(childElement -> recursionXmlToMap(childElement, innerMap));
+            outmap.put(element.getName(), innerMap);
+        }
+    }
+}

+ 9 - 0
module-common/src/main/resources/config.properties

@@ -5,3 +5,12 @@ aliyun.accessKeySecret=1rkPz7JNoXk8sJevPaeYHWqfkQXBGh
 aliyun.oss.endpoint=http://oss-cn-beijing.aliyuncs.com
 aliyun.oss.bucketName=ctop-media
 aliyun.oss.folder=model/video/
+
+#Tencent config
+qcloud.accessKeyId=AKIDE6IpMi8fJQRCg1iuWzFajjRs43kbbets
+qcloud.accessKeySecret=1rkPz7JNoXk8sJevPaeYHWqfkQXBGh
+
+#Tencent COS config
+qcloud.cos.endpoint=https://cos.ap-chongqing.myqcloud.com
+qcloud.cos.bucketName=media-1301855440
+qcloud.cos.folder=model/video/

+ 1 - 4
module-ctop/src/main/java/cn/com/ctop/manage/modules/material/service/impl/MaterialUploadImageServiceImpl.java

@@ -35,10 +35,7 @@ import java.util.concurrent.Executors;
 @Service
 public class MaterialUploadImageServiceImpl implements IMaterialUploadImageService {
     static ExecutorService executorService = Executors.newFixedThreadPool(8);
-    @Value("${oss.replace.replace-value}")
-    private String replaceValue;
-    @Value("${oss.replace.replace-old-value}")
-    private String replaceOldValue;
+
     @Value("${oss.replace.download}")
     private String downloadUrl;
 

+ 17 - 18
module-ctop/src/main/java/cn/com/ctop/manage/modules/material/service/impl/MaterialUploadServiceImpl.java

@@ -7,13 +7,12 @@ import cn.com.ctop.common.module.entity.UserAllocation;
 import cn.com.ctop.common.module.enums.MaterialEnum;
 import cn.com.ctop.common.module.mapper.CtopOauthTokenMapper;
 import cn.com.ctop.common.module.mapper.MaterialInfoMapper;
-import cn.com.ctop.common.module.mapper.MaterialParameterMapper;
 import cn.com.ctop.common.module.service.*;
 import cn.com.ctop.common.module.utils.Check;
 import cn.com.ctop.common.module.utils.KuaishouInterfaceConstant;
 import cn.com.ctop.common.module.utils.LoadFileUtil;
 import cn.com.ctop.common.module.utils.PropertiesUtils;
-import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouVideoGetService;
+import cn.com.ctop.kuaishou.modules.batch.service.IKuaishouInterfaceService;
 import cn.com.ctop.manage.modules.material.service.IMaterialUploadImageService;
 import cn.com.ctop.manage.modules.material.service.IMaterialUploadService;
 import com.alibaba.fastjson.JSONArray;
@@ -43,14 +42,9 @@ import java.util.concurrent.Executors;
 public class MaterialUploadServiceImpl implements IMaterialUploadService {
     static ExecutorService kuaiShouExecutorService = Executors.newFixedThreadPool(5);
     static ExecutorService touTiaoExecutorService = Executors.newFixedThreadPool(5);
-    @Value("${oss.replace.replace-value}")
-    private String replaceValue;
-    @Value("${oss.replace.replace-old-value}")
-    private String replaceOldValue;
     @Value("${oss.replace.download}")
     private String downloadUrl;
 
-
     @Autowired
     private CtopOauthTokenMapper oauthTokenMapper;
     @Autowired
@@ -61,10 +55,6 @@ public class MaterialUploadServiceImpl implements IMaterialUploadService {
     @Autowired
     private IMaterialParameterService materialParameterService;
     @Autowired
-    private MaterialParameterMapper parameterMapper;
-    @Autowired
-    private IKuaiShouVideoGetService kuaiShouVideoGetService;
-    @Autowired
     private IMaterialUploadImageService materialUploadImageService;
     @Autowired
     private ISendMessageService sendMessageService;
@@ -72,6 +62,8 @@ public class MaterialUploadServiceImpl implements IMaterialUploadService {
     private IMessageTemplate messageTemplate;
     @Autowired
     private IUserAllocationService userAllocationService;
+    @Autowired
+    private IKuaishouInterfaceService kuaishouInterfaceService;
 
 
     /**
@@ -97,7 +89,6 @@ public class MaterialUploadServiceImpl implements IMaterialUploadService {
 
     }
 
-
     private void touTiaoUpload(String mediaId, JSONArray materialArray, JSONArray accountArray, String userId) {
         for (int j = 0; j < materialArray.size(); j++) {
             String materialId = materialArray.getString(j);
@@ -106,7 +97,7 @@ public class MaterialUploadServiceImpl implements IMaterialUploadService {
                 continue;
             }
             try {
-                String url = materialInfo.getUrl().replace(replaceOldValue, replaceValue);
+                String url = materialInfo.getUrl();
                 String localUrl = LoadFileUtil.downLoadFromUrl(url, downloadUrl);
 
                 for (int i = 0; i < accountArray.size(); i++) {
@@ -139,7 +130,6 @@ public class MaterialUploadServiceImpl implements IMaterialUploadService {
 
         }
 
-
     }
 
 
@@ -151,7 +141,7 @@ public class MaterialUploadServiceImpl implements IMaterialUploadService {
                 continue;
             }
             try {
-                String url = materialInfo.getUrl().replace(replaceOldValue, replaceValue);
+                String url = materialInfo.getUrl();
                 log.info("replaceUrl:{}", url);
                 String localUrl = LoadFileUtil.downLoadFromUrl(url, downloadUrl);
                 FileSystemResource resource = new FileSystemResource(new File(localUrl));
@@ -175,7 +165,6 @@ public class MaterialUploadServiceImpl implements IMaterialUploadService {
                     Long accountId = accountArray.getLong(i);
                     QueryWrapper<CtopOauthToken> tokenQueryWrapper = new QueryWrapper<>();
                     tokenQueryWrapper.eq("account_id", accountId);
-                    tokenQueryWrapper.eq("media_id", mediaId);
                     tokenQueryWrapper.orderByDesc("create_time");
                     tokenQueryWrapper.last("limit 1");
                     CtopOauthToken ctopOauthToken = oauthTokenMapper.selectOne(tokenQueryWrapper);
@@ -228,6 +217,18 @@ public class MaterialUploadServiceImpl implements IMaterialUploadService {
                                             kuaiShouVideoGetService.saveOrUpdate(videoGet);*/
                                             materialUploadImageService.uploadImage(signature, accountId, ctopOauthToken.getAccessToken());
 
+                                            Thread thread = new Thread() {
+                                                @Override
+                                                public void run() {
+                                                    try {
+                                                        Thread.sleep(2 * 1000L);
+                                                        kuaishouInterfaceService.getVideoInfo(ctopOauthToken.getAccessToken(), ctopOauthToken.getAccountId(), dataJson.getString("photo_id"));
+                                                    } catch (InterruptedException e) {
+                                                        e.printStackTrace();
+                                                    }
+                                                }
+                                            };
+                                            thread.start();
                                         }
                                         log.info("快手素材同步完成,accountId:{},code:{},返回信息:{}", accountId, materialInfo.getCode(), resultJson);
                                     } else {
@@ -236,8 +237,6 @@ public class MaterialUploadServiceImpl implements IMaterialUploadService {
                                         UserAllocation allocation = userAllocationService.getByAccountId(accountId);
                                         String message = messageTemplate.getMaterialSyncTemplate(allocation.getProjectName(), accountId, allocation.getAuthName(), materialInfo.getMaterialName(), resultJson.getString("message"));
                                         sendMessageService.sendMessage(userId, message);
-                                        String feishuMessage = messageTemplate.getFeishuMaterialSyncTemplate(allocation.getProjectName(), accountId, allocation.getAuthName(), materialInfo.getMaterialName(), resultJson.getString("message"));
-                                        sendMessageService.sendFeishuMessage(userId, feishuMessage);
                                     }
                                 }
 

+ 1 - 2
module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/ByteDanceCleanMaterialJob.java

@@ -21,7 +21,7 @@ import java.util.concurrent.Executors;
 public class ByteDanceCleanMaterialJob {
     @Autowired
     private IByteDanceCleanMaterialReportService cleanMaterialService;
-    static ExecutorService executorService = null;
+    static ExecutorService executorService = Executors.newFixedThreadPool(3);
 
     @XxlJob("byteDanceCleanMaterial")
     public ReturnT<String> execute(String param) throws Exception {
@@ -30,7 +30,6 @@ public class ByteDanceCleanMaterialJob {
             XxlJobLogger.log("头条素材数据获取为空");
             return ReturnT.FAIL;
         }
-        executorService = Executors.newFixedThreadPool(3);
         signatureList.forEach(signature -> executorService.submit(() -> cleanMaterialService.calculationMaterialReport(signature)));
         return ReturnT.SUCCESS;
     }

+ 4 - 6
module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/ByteDanceHourlyAccountWarningLoadJob.java

@@ -2,7 +2,6 @@ package cn.com.ctop.job.bytedance.handler;
 
 import cn.com.ctop.common.module.entity.CtopOauthToken;
 import cn.com.ctop.common.module.service.ICtopOauthTokenService;
-import cn.com.ctop.common.module.utils.CtopAdConstant;
 import cn.com.ctop.toutiao.modules.report.service.IByteDanceHourlyAccountWarningService;
 import com.xxl.job.core.biz.model.ReturnT;
 import com.xxl.job.core.handler.annotation.XxlJob;
@@ -26,19 +25,18 @@ public class ByteDanceHourlyAccountWarningLoadJob {
     private ICtopOauthTokenService tokenService;
     @Autowired
     private IByteDanceHourlyAccountWarningService byteDanceHourlyAccountWarningService;
-    static ExecutorService executorService = null;
+    static ExecutorService executorService = Executors.newFixedThreadPool(3);
 
     @XxlJob("byteDanceHourlyAccountWarning")
     public ReturnT<String> execute(String param) throws Exception {
         XxlJobLogger.log("开始时段消耗预警定时任务");
         long startTime = System.currentTimeMillis();
-        List<CtopOauthToken> tokens = tokenService.getTokenListByType(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE);
-        if (null == tokens || tokens.size() <= 0) {
+        List<CtopOauthToken> tokens = tokenService.selectToutiaoToken();
+        if (null == tokens || tokens.isEmpty()) {
             XxlJobLogger.log("定时获取头条数据异常:未获取到可用的token");
             return ReturnT.FAIL;
         }
-        executorService = Executors.newFixedThreadPool(3);
-        String statDate = DateUtils.getDate("yyyy-MM-dd");
+        String statDate = DateUtils.formatDate();
         String anotherDay = DateUtils.getAnotherDay("yyyy-MM-dd", statDate, 1);
         tokens.forEach(token -> executorService.submit(() -> byteDanceHourlyAccountWarningService.byteDanceAccountWarning(token.getAccountId(), statDate, anotherDay)));
         XxlJobLogger.log("时段消耗预警定时任务执行完毕,耗时:{} ms", System.currentTimeMillis() - startTime);

+ 2 - 2
module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/ByteDanceRefreshTokenJob.java

@@ -16,8 +16,8 @@ public class ByteDanceRefreshTokenJob {
      * @throws Exception
      */
     @XxlJob("byteDanceRefreshTokenJob")
-    public ReturnT<String> execute(String param) throws Exception {
-        refreshTokenService.byteDanceRefresh();
+    public ReturnT<String> execute(String accountId) throws Exception {
+        refreshTokenService.byteDanceRefresh(accountId);
         return ReturnT.SUCCESS;
     }
 }

+ 11 - 15
module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedanceAdvertiserDailyReportLoadJob.java

@@ -28,32 +28,28 @@ public class BytedanceAdvertiserDailyReportLoadJob {
     private ICtopOauthTokenService tokenService;
     @Autowired
     private IReportService reportService;
-    static ExecutorService executorService = null;
-
+    static ExecutorService executorService = Executors.newFixedThreadPool(5);;
 
     @XxlJob("bytedanceAdvertiserDailyReport")
     public ReturnT<String> execute(String params) throws Exception {
         XxlJobLogger.log("头条广告主日报获取任务执行开始");
         Date getDate = DateUtils.addDay(new Date(), -1);
         //1:查询当日数据
-        List<CtopOauthToken> tokens = tokenService.getTokenListByType(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE);
+        List<CtopOauthToken> tokens = tokenService.selectToutiaoToken();
         if (null == tokens || tokens.isEmpty()) {
             XxlJobLogger.log("定时获取头条数据异常:为获取到可用的token");
             return ReturnT.FAIL;
         }
-        executorService = Executors.newFixedThreadPool(5);
         CountDownLatch countDownLatch = new CountDownLatch(tokens.size());
-        tokens.forEach(token -> {
-            executorService.submit(() -> {
-                try {
-                    reportService.getAdvertiserReport(token, getDate, getDate, CtopAdConstant.BYTEDANCE_REPORT_TYPE_DAILY);
-                } catch (Exception e) {
-                    XxlJobLogger.log(e);
-                } finally {
-                    countDownLatch.countDown();
-                }
-            });
-        });
+        tokens.forEach(token -> executorService.submit(() -> {
+            try {
+                reportService.getAdvertiserReport(token, getDate, getDate, CtopAdConstant.BYTEDANCE_REPORT_TYPE_DAILY);
+            } catch (Exception e) {
+                XxlJobLogger.log(e);
+            } finally {
+                countDownLatch.countDown();
+            }
+        }));
         countDownLatch.await();
         XxlJobLogger.log("头条广告主日报获取任务执行结束");
         return ReturnT.SUCCESS;

+ 12 - 17
module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedanceAdvertiserHourlyReportLoadJob.java

@@ -11,7 +11,6 @@ import org.jeecg.common.util.DateUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
-import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.List;
 import java.util.concurrent.ExecutorService;
@@ -27,31 +26,27 @@ public class BytedanceAdvertiserHourlyReportLoadJob {
     private ICtopOauthTokenService tokenService;
     @Autowired
     private IReportService reportService;
-    static ExecutorService executorService = null;
+    static ExecutorService executorService = Executors.newFixedThreadPool(4);;
 
     @XxlJob("bytedanceAdvertiserHourlyReport")
     public ReturnT<String> execute(String param) throws Exception {
         XxlJobLogger.log("头条时报数据获取开始");
         Date getDate = new Date();
-        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH");
-        String hour = simpleDateFormat.format(getDate);
+        String hour = DateUtils.getNowHour(getDate);
         //1:查询当日数据
-        List<CtopOauthToken> tokens = tokenService.getTokenListByType(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE);
-        if (null == tokens || tokens.size() <= 0) {
+        List<CtopOauthToken> tokens = tokenService.selectToutiaoToken();
+        if (null == tokens || tokens.isEmpty()) {
             XxlJobLogger.log("定时获取头条小时数据异常:未获取到可用的token");
             return ReturnT.FAIL;
         }
-        executorService = Executors.newFixedThreadPool(4);
-        tokens.forEach(token -> {
-            executorService.submit(() -> {
-                if (null != hour && "00".equals(hour)) {
-                    Date finalGetDate = DateUtils.addDay(getDate, -1);
-                    //获取广告主信息数据
-                    reportService.getAdvertiserReport(token, finalGetDate, finalGetDate, CtopAdConstant.BYTEDANCE_REPORT_TYPE_HOURLY);
-                }
-                reportService.getAdvertiserReport(token, getDate, getDate, CtopAdConstant.BYTEDANCE_REPORT_TYPE_HOURLY);
-            });
-        });
+        tokens.forEach(token -> executorService.submit(() -> {
+            if ("00".equals(hour)) {
+                Date finalGetDate = DateUtils.addDay(getDate, -1);
+                //获取广告主信息数据
+                reportService.getAdvertiserReport(token, finalGetDate, finalGetDate, CtopAdConstant.BYTEDANCE_REPORT_TYPE_HOURLY);
+            }
+            reportService.getAdvertiserReport(token, getDate, getDate, CtopAdConstant.BYTEDANCE_REPORT_TYPE_HOURLY);
+        }));
         XxlJobLogger.log("头条时报数据获取结束");
         return ReturnT.SUCCESS;
     }

+ 17 - 18
module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedanceAdvertisingDataLoadJob.java

@@ -2,8 +2,8 @@ package cn.com.ctop.job.bytedance.handler;
 
 import cn.com.ctop.common.module.entity.CtopOauthToken;
 import cn.com.ctop.common.module.service.ICtopOauthTokenService;
-import cn.com.ctop.common.module.utils.CtopAdConstant;
 import cn.com.ctop.toutiao.modules.material.service.IByteDanceAdvertiserDataService;
+import cn.com.ctop.toutiao.modules.material.service.IByteDanceCampaignService;
 import cn.com.ctop.toutiao.modules.material.service.IByteDanceCreativeService;
 import com.xxl.job.core.biz.model.ReturnT;
 import com.xxl.job.core.handler.annotation.XxlJob;
@@ -25,10 +25,12 @@ import java.util.concurrent.Executors;
 public class BytedanceAdvertisingDataLoadJob {
     @Autowired
     private ICtopOauthTokenService tokenService;
-    static ExecutorService executorService = null;
+    static ExecutorService executorService = Executors.newFixedThreadPool(5);
     @Autowired
     private IByteDanceAdvertiserDataService advertiserDataService;
     @Autowired
+    private IByteDanceCampaignService campaignService;
+    @Autowired
     private IByteDanceCreativeService creativeService;
 
     @XxlJob("bytedanceAdvertisingData")
@@ -37,22 +39,19 @@ public class BytedanceAdvertisingDataLoadJob {
         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
         String dateString = dateFormat.format(getDate);
         //1:查询当日数据
-        List<CtopOauthToken> tokens = tokenService.getTokenListByType(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE);
-        executorService = Executors.newFixedThreadPool(5);
-        tokens.forEach(token -> {
-            executorService.submit(() -> {
-                try {
-                    //1:获取当日广告组数据
-                    advertiserDataService.getAdvertiserCampaign(token.getAccountId() + "", "", dateString);
-                    //2:获取当日广告计划数据
-                    advertiserDataService.getAdvertiserPlan(token, "", dateString, null);
-                    //3:获取当日创意数据
-                    creativeService.getAdvertiserCreative(token.getAccountId() + "", "", dateString);
-                } catch (Exception e) {
-                    e.printStackTrace();
-                }
-            });
-        });
+        List<CtopOauthToken> tokens = tokenService.selectToutiaoToken();
+        tokens.forEach(token -> executorService.submit(() -> {
+            try {
+                //1:获取当日广告组数据
+                campaignService.getAdvertiserCampaign(token, null, dateString);
+                //2:获取当日广告计划数据
+                advertiserDataService.getAdvertiserPlan(token, "", dateString, null);
+                //3:获取当日创意数据
+                creativeService.getAdvertiserCreative(token, "", dateString);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }));
         XxlJobLogger.log("物料数据同步完成");
         return ReturnT.SUCCESS;
     }

+ 10 - 13
module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedanceCampaignDailyReportLoadJob.java

@@ -22,7 +22,7 @@ public class BytedanceCampaignDailyReportLoadJob {
     private ICtopOauthTokenService tokenService;
     @Autowired
     private IReportService reportService;
-    static ExecutorService executorService = null;
+    static ExecutorService executorService = Executors.newFixedThreadPool(5);
 
 
     @XxlJob("bytedanceCampaignDailyReport")
@@ -35,19 +35,16 @@ public class BytedanceCampaignDailyReportLoadJob {
             XxlJobLogger.log("定时获取头条数据异常:为获取到可用的token");
             return ReturnT.FAIL;
         }
-        executorService = Executors.newFixedThreadPool(5);
         CountDownLatch countDownLatch = new CountDownLatch(tokens.size());
-        tokens.forEach(token -> {
-            executorService.submit(() -> {
-                try {
-                    reportService.getAdvertiserCampaignReport(token, getDate, getDate, CtopAdConstant.BYTEDANCE_REPORT_TYPE_DAILY);
-                } catch (Exception e) {
-                    XxlJobLogger.log(e);
-                } finally {
-                    countDownLatch.countDown();
-                }
-            });
-        });
+        tokens.forEach(token -> executorService.submit(() -> {
+            try {
+                reportService.getAdvertiserCampaignReport(token, getDate, getDate, CtopAdConstant.BYTEDANCE_REPORT_TYPE_DAILY);
+            } catch (Exception e) {
+                XxlJobLogger.log(e);
+            } finally {
+                countDownLatch.countDown();
+            }
+        }));
         countDownLatch.await();
         XxlJobLogger.log("头条广告组日报获取任务执行结束");
         return ReturnT.SUCCESS;

+ 10 - 15
module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedanceCampaignHourlyReportLoadJob.java

@@ -11,7 +11,6 @@ import org.jeecg.common.util.DateUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
-import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.List;
 import java.util.concurrent.ExecutorService;
@@ -23,31 +22,27 @@ public class BytedanceCampaignHourlyReportLoadJob {
     private ICtopOauthTokenService tokenService;
     @Autowired
     private IReportService reportService;
-    static ExecutorService executorService = null;
+    static ExecutorService executorService = Executors.newFixedThreadPool(4);
 
     @XxlJob("bytedanceCampaignHourlyReport")
     public ReturnT<String> execute(String param) throws Exception {
         XxlJobLogger.log("头条广告组时报数据获取开始");
         Date getDate = new Date();
-        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH");
-        String hour = simpleDateFormat.format(getDate);
+        String hour = DateUtils.getNowHour(getDate);
         //1:查询当日数据
         List<CtopOauthToken> tokens = tokenService.selectToutiaoToken();
         if (null == tokens || tokens.isEmpty()) {
             XxlJobLogger.log("定时获取头条小时数据异常:未获取到可用的token");
             return ReturnT.FAIL;
         }
-        executorService = Executors.newFixedThreadPool(4);
-        tokens.forEach(token -> {
-            executorService.submit(() -> {
-                if (null != hour && "00".equals(hour)) {
-                    Date finalGetDate = DateUtils.addDay(getDate, -1);
-                    //获取广告主信息数据
-                    reportService.getAdvertiserCampaignReport(token, finalGetDate, finalGetDate, CtopAdConstant.BYTEDANCE_REPORT_TYPE_HOURLY);
-                }
-                reportService.getAdvertiserCampaignReport(token, getDate, getDate, CtopAdConstant.BYTEDANCE_REPORT_TYPE_HOURLY);
-            });
-        });
+        tokens.forEach(token -> executorService.submit(() -> {
+            if ("00".equals(hour)) {
+                Date finalGetDate = DateUtils.addDay(getDate, -1);
+                //获取广告主信息数据
+                reportService.getAdvertiserCampaignReport(token, finalGetDate, finalGetDate, CtopAdConstant.BYTEDANCE_REPORT_TYPE_HOURLY);
+            }
+            reportService.getAdvertiserCampaignReport(token, getDate, getDate, CtopAdConstant.BYTEDANCE_REPORT_TYPE_HOURLY);
+        }));
         XxlJobLogger.log("头条广告组时报数据获取结束");
         return ReturnT.SUCCESS;
     }

+ 3 - 4
module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedanceCreativeDailyReportLoadJob.java

@@ -27,19 +27,18 @@ public class BytedanceCreativeDailyReportLoadJob {
     private ICtopOauthTokenService tokenService;
     @Autowired
     private IReportService reportService;
-    static ExecutorService executorService = null;
+    static ExecutorService executorService = Executors.newFixedThreadPool(5);
 
 
     @XxlJob("bytedanceCreativeDailyReport")
     public ReturnT<String> execute(String param) throws Exception {
         Date getDate = DateUtils.addDay(new Date(), -1);
         //1:查询当日数据
-        List<CtopOauthToken> tokens = tokenService.getTokenListByType(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE);
-        if (null == tokens || tokens.size() <= 0) {
+        List<CtopOauthToken> tokens = tokenService.selectToutiaoToken();
+        if (null == tokens || tokens.isEmpty()) {
             XxlJobLogger.log("定时获取头条数据异常:为获取到可用的token");
             return ReturnT.FAIL;
         }
-        executorService = Executors.newFixedThreadPool(5);
         tokens.forEach(token -> executorService.submit(() -> reportService.getAdvertiserCreativeReport(token, getDate, getDate, CtopAdConstant.BYTEDANCE_REPORT_TYPE_DAILY)));
         return ReturnT.SUCCESS;
     }

+ 13 - 19
module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedanceCreativeHourlyReportLoadJob.java

@@ -11,7 +11,6 @@ import org.jeecg.common.util.DateUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
-import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.List;
 import java.util.concurrent.ExecutorService;
@@ -27,32 +26,27 @@ public class BytedanceCreativeHourlyReportLoadJob {
     private ICtopOauthTokenService tokenService;
     @Autowired
     private IReportService reportService;
-    static ExecutorService executorService = null;
+    static ExecutorService executorService = Executors.newFixedThreadPool(4);
 
     @XxlJob("bytedanceCreativeHourlyReport")
     public ReturnT<String> execute(String param) throws Exception {
         XxlJobLogger.log("头条时报数据获取开始");
-        Date getDate = new Date();
-        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH");
-        String hour = simpleDateFormat.format(getDate);
+        Date now = new Date();
+        String hour = DateUtils.getNowHour(now);
         //1:查询当日数据
-        List<CtopOauthToken> tokens = tokenService.getTokenListByType(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE);
-        if (null == tokens || tokens.size() <= 0) {
+        List<CtopOauthToken> tokens = tokenService.selectToutiaoToken();
+        if (null == tokens || tokens.isEmpty()) {
             XxlJobLogger.log("定时获取头条小时数据异常:未获取到可用的token");
             return ReturnT.FAIL;
         }
-        executorService = Executors.newFixedThreadPool(4);
-        tokens.forEach(token -> {
-            executorService.submit(() -> {
-                if (null != hour && "00".equals(hour)) {
-                    Date finalGetDate = DateUtils.addDay(getDate, -1);
-                    //获取广告创意信息数据
-                    reportService.getAdvertiserCreativeReport(token, finalGetDate, finalGetDate, CtopAdConstant.BYTEDANCE_REPORT_TYPE_HOURLY);
-                }
-                reportService.getAdvertiserCreativeReport(token, getDate, getDate, CtopAdConstant.BYTEDANCE_REPORT_TYPE_HOURLY);
-            });
-
-        });
+        tokens.forEach(token -> executorService.submit(() -> {
+            if ("00".equals(hour)) {
+                Date finalGetDate = DateUtils.addDay(now, -1);
+                //获取广告创意信息数据
+                reportService.getAdvertiserCreativeReport(token, finalGetDate, finalGetDate, CtopAdConstant.BYTEDANCE_REPORT_TYPE_HOURLY);
+            }
+            reportService.getAdvertiserCreativeReport(token, now, now, CtopAdConstant.BYTEDANCE_REPORT_TYPE_HOURLY);
+        }));
         XxlJobLogger.log("头条时报数据获取结束");
         return ReturnT.SUCCESS;
     }

+ 24 - 0
module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedanceEffectVideoJob.java

@@ -0,0 +1,24 @@
+package cn.com.ctop.job.bytedance.handler;
+
+import cn.com.ctop.toutiao.modules.material.service.IBytedanceEffectVideoInfoService;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import org.jeecg.common.util.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+
+@Component
+public class BytedanceEffectVideoJob {
+    @Autowired
+    private IBytedanceEffectVideoInfoService bytedanceEffectVideoInfoService;
+    @XxlJob("bytedanceEffectVideoJob")
+    public ReturnT<String> execute(String date) throws Exception {
+        if(null == date||date.trim().equalsIgnoreCase("")||date.trim().equalsIgnoreCase("null")){
+            date = DateUtils.formatDate(DateUtils.addDay(new Date(),-14));
+        }
+        bytedanceEffectVideoInfoService.loadEffectVideo(date);
+        return ReturnT.SUCCESS;
+    }
+}

+ 4 - 11
module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedanceFlowFundJob.java

@@ -2,7 +2,6 @@ package cn.com.ctop.job.bytedance.handler;
 
 import cn.com.ctop.common.module.entity.CtopOauthToken;
 import cn.com.ctop.common.module.service.ICtopOauthTokenService;
-import cn.com.ctop.common.module.utils.CtopAdConstant;
 import cn.com.ctop.toutiao.modules.report.service.IBytedanceFundDailyService;
 import com.xxl.job.core.biz.model.ReturnT;
 import com.xxl.job.core.handler.annotation.XxlJob;
@@ -22,23 +21,17 @@ public class BytedanceFlowFundJob {
     private ICtopOauthTokenService tokenService;
     @Autowired
     private IBytedanceFundDailyService bytedanceFundDailyService;
-    static ExecutorService executorService = null;
+    static ExecutorService executorService = Executors.newFixedThreadPool(4);
     @XxlJob("bytedanceFlowFund")
     public ReturnT<String> execute(String param) throws Exception {
         XxlJobLogger.log("头条账户流水数据获取开始");
         Date getDate = new Date();
-        //1:查询当日数据
-        List<CtopOauthToken> tokens = tokenService.getTokenListByType(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE);
-        if (null == tokens || tokens.size() <= 0) {
+        List<CtopOauthToken> tokens = tokenService.selectToutiaoToken();
+        if (null == tokens || tokens.isEmpty()) {
             XxlJobLogger.log("头条账户流水数据异常:未获取到可用的token");
             return ReturnT.FAIL;
         }
-        executorService = Executors.newFixedThreadPool(4);
-        tokens.forEach(token -> {
-            executorService.submit(() -> {
-                bytedanceFundDailyService.loadFundDataByPage(token, DateUtils.formatDate(getDate), DateUtils.formatDate(getDate),1);
-            });
-        });
+        tokens.forEach(token -> executorService.submit(() -> bytedanceFundDailyService.loadFundDataByPage(token, DateUtils.formatDate(getDate), DateUtils.formatDate(getDate),1)));
         XxlJobLogger.log("头条账户流水数据获取结束");
         return ReturnT.SUCCESS;
     }

+ 9 - 8
module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedancePlanDailyReportLoadJob.java

@@ -31,14 +31,18 @@ public class BytedancePlanDailyReportLoadJob {
     private IReportService reportService;
     @Autowired
     private IUserAllocationService userAllocationService;
+    @Autowired
+    private IBytedancePlanDailyReportService planDailyReportService;
+
 
     @XxlJob("bytedancePlanDailyReport")
     public ReturnT<String> execute(String param) throws Exception {
         Date getDate = DateUtils.addDay(new Date(), -1);
-        Date getDate2 = DateUtils.addDay(new Date(), -2);//次留用
+        //次留用
+        Date getDate2 = DateUtils.addDay(new Date(), -2);
         //1:查询当日数据
-        List<CtopOauthToken> tokens = tokenService.getTokenListByType(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE);
-        if (null == tokens || tokens.size() <= 0) {
+        List<CtopOauthToken> tokens = tokenService.selectToutiaoToken();
+        if (null == tokens || tokens.isEmpty()) {
             XxlJobLogger.log("定时获取头条数据异常:为获取到可用的token");
             return ReturnT.FAIL;
         }
@@ -62,7 +66,7 @@ public class BytedancePlanDailyReportLoadJob {
         QueryWrapper<UserAllocation> wrapper = new QueryWrapper<>();
         wrapper.eq("project_id", projectId);
         List<UserAllocation> allocations = userAllocationService.list(wrapper);
-        if (null != allocations && allocations.size() > 0) {
+        if (null != allocations && !allocations.isEmpty()) {
             allocations.forEach(allocation -> {
                 //根据accountId和时间,查询相关的日报表信息
                 QueryWrapper<BytedancePlanDailyReport> queryWrapper = new QueryWrapper<>();
@@ -72,7 +76,7 @@ public class BytedancePlanDailyReportLoadJob {
                         .eq("stat_datetime", dateString)
                 ;
                 List<BytedancePlanDailyReport> bytedancePlanDailyReports = planDailyReportService.list(queryWrapper);
-                if (null != bytedancePlanDailyReports && bytedancePlanDailyReports.size() > 0) {
+                if (null != bytedancePlanDailyReports && !bytedancePlanDailyReports.isEmpty()) {
                     bytedancePlanDailyReports.forEach(report -> {
                         String adName = report.getAdName();
                         String[] tags = adName.split("-");
@@ -103,7 +107,4 @@ public class BytedancePlanDailyReportLoadJob {
             });
         }
     }
-
-    @Autowired
-    private IBytedancePlanDailyReportService planDailyReportService;
 }

+ 3 - 5
module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedancePlanHourlyReportLoadJob.java

@@ -31,7 +31,7 @@ public class BytedancePlanHourlyReportLoadJob {
     private IReportService reportService;
     @Autowired
     private IBytedancePlanDailyReportService planDailyReportService;
-    static ExecutorService executorService = null;
+    static ExecutorService executorService = Executors.newFixedThreadPool(5);
     //线程计数器
     static CountDownLatch countDownLatch = null;
 
@@ -43,8 +43,7 @@ public class BytedancePlanHourlyReportLoadJob {
         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH");
         String hour = simpleDateFormat.format(getDate);
         //1:查询当日计划时报数据
-        List<CtopOauthToken> tokens = tokenService.getTokenListByType(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE);
-        executorService = Executors.newFixedThreadPool(5);
+        List<CtopOauthToken> tokens = tokenService.selectToutiaoToken();
         countDownLatch = new CountDownLatch(tokens.size());
         tokens.forEach(token -> executorService.submit(() -> {
                 try {
@@ -66,7 +65,7 @@ public class BytedancePlanHourlyReportLoadJob {
             XxlJobLogger.log(e.getMessage());
         }
         //清洗缘多多数据渠道号
-        if (null != hour && "00".equals(hour)) {
+        if ("00".equals(hour)) {
             Date lastday = DateUtils.addDay(getDate, -1);
             planDailyReportService.cleanYddHourlyChannelCode(113, lastday);
             planDailyReportService.cleanYddHourlyChannelCode(419, lastday);
@@ -75,7 +74,6 @@ public class BytedancePlanHourlyReportLoadJob {
         planDailyReportService.cleanYddHourlyChannelCode(419, getDate);
 
         XxlJobLogger.log("头条时报数据获取结束");
-        executorService.shutdown();
         return ReturnT.SUCCESS;
     }
 }

+ 2 - 4
module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedancePlanLoadJob.java

@@ -2,7 +2,6 @@ package cn.com.ctop.job.bytedance.handler;
 
 import cn.com.ctop.common.module.entity.CtopOauthToken;
 import cn.com.ctop.common.module.service.ICtopOauthTokenService;
-import cn.com.ctop.common.module.utils.CtopAdConstant;
 import cn.com.ctop.toutiao.modules.material.service.IByteDanceAdvertiserDataService;
 import com.xxl.job.core.biz.model.ReturnT;
 import com.xxl.job.core.handler.annotation.XxlJob;
@@ -18,15 +17,14 @@ import java.util.concurrent.Executors;
 public class BytedancePlanLoadJob {
     @Autowired
     private ICtopOauthTokenService tokenService;
-    static ExecutorService executorService = null;
     @Autowired
     private IByteDanceAdvertiserDataService advertiserDataService;
+    static ExecutorService executorService = Executors.newFixedThreadPool(4);
 
     @XxlJob("bytedancePlanLoadJob")
     public ReturnT<String> execute(String param) throws Exception {
         //1:查询当日数据
-        List<CtopOauthToken> tokens = tokenService.getTokenListByType(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE);
-        executorService = Executors.newFixedThreadPool(4);
+        List<CtopOauthToken> tokens = tokenService.selectToutiaoToken();
         tokens.forEach(token -> executorService.submit(() -> advertiserDataService.getAdvertiserPlan(token, "", null, null)));
         XxlJobLogger.log("头条全量计划数据获取完成");
         return ReturnT.SUCCESS;

+ 0 - 0
module-job-bytedance/src/main/java/cn/com/ctop/job/bytedance/handler/BytedancePlanRealTimeLoadJob.java


Some files were not shown because too many files changed in this diff