Преглед изворни кода

Merge branch 'master' of http://39.106.184.70:3000/ctop/adsp-boot

xuzuoyun пре 5 година
родитељ
комит
9028c5c1d8
100 измењених фајлова са 1367 додато и 383 уклоњено
  1. 13 0
      jeecg-boot-base-common/src/main/java/org/jeecg/common/constant/SystemDateConstant.java
  2. 52 26
      jeecg-boot-base-common/src/main/java/org/jeecg/common/util/DateUtils.java
  3. 5 0
      jeecg-boot-module-system/pom.xml
  4. 6 0
      jeecg-boot-module-system/src/main/java/org/jeecg/JeecgApplication.java
  5. 4 4
      jeecg-boot-module-system/src/main/java/org/jeecg/config/MybatisPlusConfig.java
  6. 4 7
      jeecg-boot-module-system/src/main/java/org/jeecg/config/ShiroConfig.java
  7. 10 12
      jeecg-boot-module-system/src/main/java/org/jeecg/config/Swagger2Config.java
  8. 4 4
      jeecg-boot-module-system/src/main/java/org/jeecg/config/WebMvcConfiguration.java
  9. 1 5
      jeecg-boot-module-system/src/main/java/org/jeecg/config/interceptors/BrowseLogHandelInterceptor.java
  10. 24 22
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/AdvertiserController.java
  11. 7 5
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/BindAccountLoginController.java
  12. 80 12
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/MaterialInfoController.java
  13. 50 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/MaterialTopCtrl.java
  14. 98 8
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/PangolinController.java
  15. 23 2
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ProjectController.java
  16. 31 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ProjectMemberController.java
  17. 40 3
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/TestController.java
  18. 8 6
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/UserAllocationController.java
  19. 4 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/entity/Advertiser.java
  20. 5 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/entity/Project.java
  21. 25 6
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/AccountCpaBidJob.java
  22. 2 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/BytedancePlanHourlyReportLoadJob.java
  23. 0 11
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/KuaishouCrawlerJob.java
  24. 37 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/MaterialReportAccountUpdateJob.java
  25. 3 2
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/pangolin/job/PangolinDataJob.java
  26. 7 4
      module-crawler/src/main/java/cn/com/ctop/crawler/modules/pangolin/job/PangolinLoginJob.java
  27. 20 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/MaterialTopMapper.java
  28. 13 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/ProjectMemberMapper.java
  29. 207 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/xml/MaterialTopMapper.xml
  30. 97 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/mapper/xml/ProjectMemberMapper.xml
  31. 1 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/ICreateInternalService.java
  32. 9 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/IMaterialTopService.java
  33. 2 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/IProjectMemberService.java
  34. 0 2
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/BidWarningServiceImpl.java
  35. 4 15
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/CreateInternalServiceImpl.java
  36. 56 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/MaterialTopServiceImpl.java
  37. 30 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/ProjectMemberServiceImpl.java
  38. 24 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/vo/MaterialTopVO.java
  39. 9 40
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/opencv/utils/CornerCheck.java
  40. 0 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/opencv/utils/Perspective.java
  41. 1 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysDictController.java
  42. 42 9
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysUserController.java
  43. 5 5
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysCategoryService.java
  44. 7 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/SysCategoryServiceImpl.java
  45. 16 10
      jeecg-boot-module-system/src/main/resources/application-test.yml
  46. 6 4
      jeecg-boot-module-system/src/main/resources/application.yml
  47. 71 111
      jeecg-boot-module-system/src/test/java/org/jeecg/SampleTest.java
  48. 15 0
      module-common/pom.xml
  49. 2 0
      module-common/src/main/java/cn/com/ctop/common/module/entity/BindAccountLogin.java
  50. 1 1
      module-common/src/main/java/cn/com/ctop/common/module/mapper/SysRoleMapper.java
  51. 0 16
      module-common/src/main/java/cn/com/ctop/common/module/mapper/xml/SysRoleMapper.xml
  52. 2 0
      module-common/src/main/java/cn/com/ctop/common/module/service/IBindAccountLoginService.java
  53. 6 0
      module-common/src/main/java/cn/com/ctop/common/module/service/IUserAllocationService.java
  54. 2 0
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/BindAccountAuthServiceImpl.java
  55. 18 0
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/BindAccountLoginServiceImpl.java
  56. 2 0
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/CorpWeixinServiceImpl.java
  57. 2 0
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/CtopCorpWexinUserServiceImpl.java
  58. 8 5
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/FileInfoServiceImpl.java
  59. 2 0
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/IpPoolServiceImpl.java
  60. 2 0
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/MailLogServiceImpl.java
  61. 2 0
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/MaterialAscriptionServiceImpl.java
  62. 6 5
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/MaterialInfoServiceImpl.java
  63. 2 0
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/MaterialParameterServiceImpl.java
  64. 2 0
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/MaterialTagServiceImpl.java
  65. 2 0
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/SysRoleServiceImpl.java
  66. 41 0
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/UserAllocationServiceImpl.java
  67. 2 0
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/VideoMergeTaskServiceImpl.java
  68. 2 0
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/VideoPartServiceImpl.java
  69. 2 0
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/VideoWatermarkTemplateServiceImpl.java
  70. 5 0
      module-common/src/main/java/cn/com/ctop/common/module/utils/CtopAdConstant.java
  71. 0 5
      module-common/src/main/java/cn/com/ctop/common/module/utils/LoadFileUtil.java
  72. 0 11
      module-common/src/main/java/cn/com/ctop/common/module/utils/OSSUtils.java
  73. 56 0
      module-common/src/main/java/cn/com/ctop/common/module/utils/StringUtils.java
  74. 0 0
      module-common/src/main/java/com/xxl/job/core/biz/AdminBiz.java
  75. 0 0
      module-common/src/main/java/com/xxl/job/core/biz/ExecutorBiz.java
  76. 0 0
      module-common/src/main/java/com/xxl/job/core/biz/client/AdminBizClient.java
  77. 0 0
      module-common/src/main/java/com/xxl/job/core/biz/impl/ExecutorBizImpl.java
  78. 0 0
      module-common/src/main/java/com/xxl/job/core/biz/model/HandleCallbackParam.java
  79. 0 0
      module-common/src/main/java/com/xxl/job/core/biz/model/LogResult.java
  80. 0 0
      module-common/src/main/java/com/xxl/job/core/biz/model/RegistryParam.java
  81. 0 0
      module-common/src/main/java/com/xxl/job/core/biz/model/ReturnT.java
  82. 0 0
      module-common/src/main/java/com/xxl/job/core/biz/model/TriggerParam.java
  83. 0 0
      module-common/src/main/java/com/xxl/job/core/enums/ExecutorBlockStrategyEnum.java
  84. 0 0
      module-common/src/main/java/com/xxl/job/core/enums/RegistryConfig.java
  85. 0 0
      module-common/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java
  86. 0 0
      module-common/src/main/java/com/xxl/job/core/executor/impl/XxlJobSpringExecutor.java
  87. 0 0
      module-common/src/main/java/com/xxl/job/core/glue/GlueFactory.java
  88. 0 0
      module-common/src/main/java/com/xxl/job/core/glue/GlueTypeEnum.java
  89. 0 0
      module-common/src/main/java/com/xxl/job/core/glue/impl/SpringGlueFactory.java
  90. 0 0
      module-common/src/main/java/com/xxl/job/core/handler/IJobHandler.java
  91. 20 0
      module-common/src/main/java/com/xxl/job/core/handler/annotation/JobHandler.java
  92. 0 0
      module-common/src/main/java/com/xxl/job/core/handler/annotation/XxlJob.java
  93. 0 0
      module-common/src/main/java/com/xxl/job/core/handler/impl/GlueJobHandler.java
  94. 0 0
      module-common/src/main/java/com/xxl/job/core/handler/impl/MethodJobHandler.java
  95. 0 0
      module-common/src/main/java/com/xxl/job/core/handler/impl/ScriptJobHandler.java
  96. 0 0
      module-common/src/main/java/com/xxl/job/core/log/XxlJobFileAppender.java
  97. 0 0
      module-common/src/main/java/com/xxl/job/core/log/XxlJobLogger.java
  98. 0 0
      module-common/src/main/java/com/xxl/job/core/thread/ExecutorRegistryThread.java
  99. 0 0
      module-common/src/main/java/com/xxl/job/core/thread/JobLogFileCleanThread.java
  100. 0 0
      xxl-job-core/src/main/java/com/xxl/job/core/thread/JobThread.java

+ 13 - 0
jeecg-boot-base-common/src/main/java/org/jeecg/common/constant/SystemDateConstant.java

@@ -0,0 +1,13 @@
+package org.jeecg.common.constant;
+
+public class SystemDateConstant {
+
+    //系統年月日时间格式
+    public static String yyyy_MM_dd="yyyy-MM-dd";
+
+    public static String yyyy_MM="yyyy-MM";
+
+    //系统数据起始时间
+    public static String BEGIN_TIME="2019-09-01";
+
+}

+ 52 - 26
jeecg-boot-base-common/src/main/java/org/jeecg/common/util/DateUtils.java

@@ -1,5 +1,7 @@
 package org.jeecg.common.util;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.util.StringUtils;
 
 import java.beans.PropertyEditorSupport;
@@ -17,6 +19,9 @@ import java.util.*;
  * @Version 1.0
  */
 public class DateUtils extends PropertyEditorSupport {
+
+    private static Logger logger= LoggerFactory.getLogger(DateUtils.class);
+
     /**
      * 以毫秒表示的时间
      */
@@ -236,7 +241,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);
-        java.sql.Timestamp buydate = java.sql.Timestamp.valueOf(nowTime);
+        Timestamp buydate = Timestamp.valueOf(nowTime);
         return buydate;
     }
 
@@ -779,10 +784,6 @@ public class DateUtils extends PropertyEditorSupport {
         return sdf.format(calendar.getTime());
     }
 
-    //public static void main(String[] args) throws ParseException {
-    //    System.out.println(DateUtils.addDay( "2020-01-03",  7));
-    //}
-
     public static Date addDay(Date date, int day) {
         Calendar calendar = Calendar.getInstance();
         calendar.setTime(date);
@@ -880,10 +881,15 @@ public class DateUtils extends PropertyEditorSupport {
     }
 
 
-    public static String getMonthBefore(String format, String nowTime, int amount) throws ParseException {
+    public static String getMonthBefore(String format, String nowTime, int amount) {
         // 获取当前时间
         SimpleDateFormat dateFormat = new SimpleDateFormat(format);
-        Date date = dateFormat.parse(nowTime);
+        Date date = null;
+        try {
+            date = dateFormat.parse(nowTime);
+        } catch (ParseException e) {
+            logger.error(e.getMessage(), e);
+        }
 
         //得到日历
         Calendar calendar = Calendar.getInstance();
@@ -1207,10 +1213,9 @@ public class DateUtils extends PropertyEditorSupport {
      * @param dateEnd
      * @return
      */
-    public static long getDiscrepantDays(String dateStart, String dateEnd){
+    public static long getDiscrepantDays(String dateStart, String dateEnd) {
         //设置转换的日期格式
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
-
         //结束时间
         Date startDate = null;
         Date endDate = null;
@@ -1221,32 +1226,27 @@ public class DateUtils extends PropertyEditorSupport {
         } catch (ParseException e) {
             e.printStackTrace();
         }
-
         //得到相差的天数 betweenDate
-        long betweenDate = (endDate.getTime() - startDate.getTime())/(60*60*24*1000);
-
-        //打印控制台相差的天数
-        System.out.println(betweenDate);
-        return betweenDate;
+        return  (endDate.getTime() - startDate.getTime())/(60*60*24*1000);
     }
 
     /***
      * 两个日期之间间隔的月数(不考虑日期的情况)
      */
-    public static int calDiffMonth(Date start, Date end){
+    public static int calDiffMonth(Date start, Date end) {
         GregorianCalendar startCalendar = new GregorianCalendar();
         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);
+        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);
+        return (endYear - startYear) * 12 + (endMonth - startMonth);
     }
 
     public static int getDaysOfMonth(int year, int month) {
@@ -1263,11 +1263,12 @@ public class DateUtils extends PropertyEditorSupport {
 
     /**
      * 获取指定日期下个月的第一天
+     *
      * @param dateStr
      * @param format
      * @return
      */
-    public static Map<String, String> getMaxMinDaysOfAddMonth(String dateStr,String format, int addMonth){
+    public static Map<String, String> getMaxMinDaysOfAddMonth(String dateStr, String format, int addMonth) {
         SimpleDateFormat sdf = new SimpleDateFormat(format);
         Map<String, String> dateMap = new HashMap<>();
         try {
@@ -1275,7 +1276,7 @@ public class DateUtils extends PropertyEditorSupport {
             Calendar calendar = Calendar.getInstance();
             calendar.setTime(date);
             calendar.add(Calendar.MONTH, addMonth);
-            calendar.set(Calendar.DAY_OF_MONTH,1);
+            calendar.set(Calendar.DAY_OF_MONTH, 1);
             dateMap.put("startDate", sdf.format(calendar.getTime()));
 
             calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DATE));
@@ -1287,8 +1288,33 @@ public class DateUtils extends PropertyEditorSupport {
         return null;
     }
 
+
+    public static int dateDiff(String start, String end) {
+        //设置转换的日期格式
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        //开始时间
+        Date startDate = null;
+        Date endDate = null;
+        try {
+            startDate = sdf.parse(start);
+            endDate = sdf.parse(end);
+        } catch (ParseException e) {
+            e.printStackTrace();
+        }
+
+        //得到相差的天数 betweenDate
+        long betweenDate = (endDate.getTime() - startDate.getTime()) / (60 * 60 * 24 * 1000);
+        return (int) betweenDate;
+    }
+
+    public static Date addMonth(Date date) {
+        Calendar calendar = Calendar.getInstance();//日历对象
+        calendar.add(Calendar.MONTH, -1);//月份减一
+        return calendar.getTime();
+    }
+
     public static void main(String[] args) throws ParseException {
-        System.out.println(calDiffMonth(DateUtils.parseDate("2019-04-01","yyyy-MM-dd"),new Date()));
+        System.out.println(calDiffMonth(DateUtils.parseDate("2019-04-01", "yyyy-MM-dd"), new Date()));
     }
 
 }

+ 5 - 0
jeecg-boot-module-system/pom.xml

@@ -151,6 +151,11 @@
             <artifactId>opencv</artifactId>
             <version>4.2.0</version>
         </dependency>
+        <dependency>
+            <groupId>com.github.pagehelper</groupId>
+            <artifactId>pagehelper</artifactId>
+            <version>5.1.11</version>
+        </dependency>
     </dependencies>
 
     <dependencyManagement>

+ 6 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/JeecgApplication.java

@@ -1,6 +1,7 @@
 package org.jeecg;
 
 import cn.com.ctop.common.module.utils.SpringUtils;
+import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -43,4 +44,9 @@ public class JeecgApplication {
         return new RestTemplate();
     }
 
+    @Bean
+    public PaginationInterceptor paginationInterceptor() {
+        return new PaginationInterceptor();
+    }
+
 }

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

@@ -1,6 +1,7 @@
 package org.jeecg.config;
 
 import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor;
 import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -11,17 +12,17 @@ import org.springframework.context.annotation.Configuration;
  *
  */
 @Configuration
-@MapperScan(value = {"org.jeecg.modules.**.mapper*", "cn.com.ctop.**.mapper*", "cn.com.ctop.bytedance.mapper*"})
+@MapperScan(value = {"org.jeecg.modules.**.mapper*", "cn.com.ctop.**.mapper*"})
 
 public class MybatisPlusConfig {
 
     /**
          *  分页插件
      */
-    @Bean
+    /*@Bean
     public PaginationInterceptor paginationInterceptor() {
         return new PaginationInterceptor();
-    }
+    }*/
 
 //    /**
 //     * mybatis-plus SQL执行效率插件【生产环境可以关闭】
@@ -31,5 +32,4 @@ public class MybatisPlusConfig {
 //        return new PerformanceInterceptor();
 //    }
 
-
 }

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

@@ -78,13 +78,10 @@ public class ShiroConfig {
         filterChainDefinitionMap.put("/ctop/kuaishouChannelRegInfo/*", "anon");
 
 
-		//优化师相关
-		//filterChainDefinitionMap.put("/ctop/performanceOptimizer/detail", "anon");
-		//filterChainDefinitionMap.put("/ctop/performanceOptimizer/ranking/list", "anon");
-		//filterChainDefinitionMap.put("/ctop/performance/project/list", "anon");
-		//filterChainDefinitionMap.put("/ctop/performance/account/list", "anon");
-		//filterChainDefinitionMap.put("/ctop/optimizerRoleInfo/manager/detail", "anon");
+		filterChainDefinitionMap.put("/ctop/byteDance/homePage/report/*", "anon");
+		filterChainDefinitionMap.put("/ctop/material/top/cost", "anon");
 
+		filterChainDefinitionMap.put("/pangolin/**", "anon");
 
         filterChainDefinitionMap.put("/generic/**", "anon");
 		filterChainDefinitionMap.put("/", "anon");
@@ -150,7 +147,7 @@ public class ShiroConfig {
         filterChainDefinitionMap.put("/ctop/advertiser/**", "anon");
 
 		// 添加自己的过滤器并且取名为jwt
-		Map<String, Filter> filterMap = new HashMap<String, Filter>(1);
+		Map<String, Filter> filterMap = new HashMap<>(1);
 		filterMap.put("jwt", new JwtFilter());
 		shiroFilterFactoryBean.setFilters(filterMap);
 		// <!-- 过滤链定义,从上向下顺序执行,一般将/**放在最为下边

+ 10 - 12
jeecg-boot-module-system/src/main/java/org/jeecg/config/Swagger2Config.java

@@ -1,29 +1,27 @@
 package org.jeecg.config;
 
-import java.util.ArrayList;
-import java.util.List;
-
+import com.github.xiaoymin.swaggerbootstrapui.annotations.EnableSwaggerBootstrapUI;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
 import org.jeecg.modules.shiro.vo.DefContants;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
-
-import com.github.xiaoymin.swaggerbootstrapui.annotations.EnableSwaggerBootstrapUI;
-
-import io.swagger.annotations.ApiOperation;
-import springfox.documentation.service.Parameter;
-import lombok.extern.slf4j.Slf4j;
 import springfox.documentation.builders.ApiInfoBuilder;
 import springfox.documentation.builders.ParameterBuilder;
 import springfox.documentation.builders.PathSelectors;
 import springfox.documentation.builders.RequestHandlerSelectors;
 import springfox.documentation.schema.ModelRef;
 import springfox.documentation.service.ApiInfo;
+import springfox.documentation.service.Parameter;
 import springfox.documentation.spi.DocumentationType;
 import springfox.documentation.spring.web.plugins.Docket;
 import springfox.documentation.swagger2.annotations.EnableSwagger2;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * @Author scott
  */
@@ -36,7 +34,7 @@ public class Swagger2Config implements WebMvcConfigurer {
 	/**
 	 *
 	 * 显示swagger-ui.html文档展示页,还必须注入swagger资源:
-	 * 
+	 *
 	 * @param registry
 	 */
 	@Override
@@ -85,9 +83,9 @@ public class Swagger2Config implements WebMvcConfigurer {
 	private ApiInfo apiInfo() {
 		return new ApiInfoBuilder()
 				// //大标题
-				.title("Jeecg-Boot 后台服务API接口文档")
+				.title("汇创助手后台服务API接口文档")
 				// 版本号
-				.version("1.0")
+				.version("2.0.2")
 //				.termsOfServiceUrl("NO terms of service")
 				// 描述
 				.description("restful 风格接口")

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

@@ -33,10 +33,10 @@ public class WebMvcConfiguration implements WebMvcConfigurer {
 	@Value("${spring.resource.static-locations}")
 	private String staticLocations;
 
-	@Override
-	public void addInterceptors(InterceptorRegistry registry) {
-		registry.addInterceptor(browseLogHandelInterceptor);
-	}
+//	@Override
+//	public void addInterceptors(InterceptorRegistry registry) {
+//		registry.addInterceptor(browseLogHandelInterceptor);
+//	}
 
 	@Bean
 	public CorsFilter corsFilter() {

+ 1 - 5
jeecg-boot-module-system/src/main/java/org/jeecg/config/interceptors/BrowseLogHandelInterceptor.java

@@ -43,9 +43,8 @@ public class BrowseLogHandelInterceptor extends HandlerInterceptorAdapter {
 
     @Override
     public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
-
         if (REQUEST_METHOD.contains(request.getMethod())) {
-            if (request.getRequestURI().endsWith("/getEncryptedString")||request.getRequestURI().endsWith("/login")) {
+            if (request.getRequestURI().endsWith("/sys/permission/getUserPermissionByToken")||request.getRequestURI().endsWith("/getEncryptedString")||request.getRequestURI().endsWith("/login")||request.getRequestURI().endsWith("/sys/annountCement/listByUser")) {
                 return;
             }
             boolean isSuccess = true;
@@ -66,14 +65,11 @@ public class BrowseLogHandelInterceptor extends HandlerInterceptorAdapter {
 
 
     private static class BrowseLogRunnable implements Runnable {
-
         String userName;
         Boolean isSuccess;
         String token;
         String uri;
         String currentDate;
-
-
         BrowseLogRunnable(String userName, boolean isSuccess, String token, String uri, String currentDate) {
             this.userName = userName;
             this.isSuccess = isSuccess;

+ 24 - 22
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/AdvertiserController.java

@@ -27,11 +27,9 @@ import org.jeecg.modules.ctop.service.IProjectService;
 import org.jeecg.modules.ctop.vo.SheetInfoVo;
 import org.jeecg.modules.excelutil.entity.KuaishouXxlEntity;
 import org.jeecg.modules.system.entity.SysCategory;
-import org.jeecg.modules.system.entity.SysUser;
 import org.jeecg.modules.system.entity.UserCompany;
 import org.jeecg.modules.system.mapper.UserCompanyMapper;
 import org.jeecg.modules.system.service.ISysCategoryService;
-import org.jeecg.modules.system.service.ISysUserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -114,13 +112,14 @@ public class AdvertiserController {
                                                    @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
                                                    @RequestParam(name = "pageSize", defaultValue = "1000") Integer pageSize,
                                                    HttpServletRequest req) {
-
         Result<IPage<Advertiser>> result = new Result<>();
         String roleCode = sysRoleService.getRoleCodeByUserId(advertiser.getUserId());
         String userId = advertiser.getUserId();
         if ("admin".equals(roleCode) || "kuaishouOperationManager".equals(roleCode) || "touTiaoOperationManager".equals(roleCode) || "sale".equals(roleCode) || "saleDirector".equals(roleCode)) {
             advertiser.setUserId(null);
         }
+        String industryId = advertiser.getIndustryId();
+        advertiser.setIndustryId(null);
         QueryWrapper<Advertiser> queryWrapper = QueryGenerator.initQueryWrapper(advertiser, req.getParameterMap());
         if ("kuaishouOperationManager".equals(roleCode)) {
             QueryWrapper<UserCompany> userCompanyQueryWrapper = new QueryWrapper<>();
@@ -132,32 +131,19 @@ public class AdvertiserController {
                 queryWrapper.eq("company_id", userCompany.getCompanyId());
             }
         }
-        Page<Advertiser> page = new Page<>(pageNo, pageSize);
-        IPage<Advertiser> pageList = advertiserService.page(page, queryWrapper);
-        if (pageList != null && pageList.getRecords() != null && !pageList.getRecords().isEmpty()) {
-            List<Advertiser> list = new ArrayList<>();
-            for (int i = 0; i < pageList.getRecords().size(); i++) {
-                Advertiser advertiserRecord = pageList.getRecords().get(i);
-                SysCategory sysCategory = sysCategoryService.getById(advertiserRecord.getIndustryId());
-                if (sysCategory != null) {
-                    advertiserRecord.setIndustryId(sysCategory.getName());
-                }
-                SysUser user = sysUserService.getById(advertiserRecord.getSaleId());
-                if (null != user) {
-                    advertiserRecord.setSaleName(user.getRealname());
-                }
-                list.add(advertiserRecord);
+        if(null!=industryId&&!"".equals(industryId.trim())){
+            SysCategory category = sysCategoryService.getById(industryId);
+            if(null!=category){
+                queryWrapper.likeRight("industry_code",category.getCode());
             }
-            pageList.setRecords(list);
         }
+        Page<Advertiser> page = new Page<>(pageNo, pageSize);
+        IPage<Advertiser> pageList = advertiserService.page(page, queryWrapper);
         result.setSuccess(true);
         result.setResult(pageList);
         return result;
     }
 
-    @Autowired
-    private ISysUserService sysUserService;
-
     /**
      * 添加
      *
@@ -191,6 +177,14 @@ public class AdvertiserController {
             if (!Check.isNull(userCompany)) {
                 advertiser.setCompanyId(userCompany.getCompanyId());
             }
+            String industryId = advertiser.getIndustryId();
+            if(null!=industryId&&!"".equals(industryId.trim())){
+                SysCategory category = sysCategoryService.getById(industryId);
+                if(null!=category){
+                    advertiser.setIndustryId(category.getId());
+                    advertiser.setIndustryCode(category.getCode());
+                }
+            }
             advertiserService.save(advertiser);
             result.success("添加成功!");
         } catch (Exception e) {
@@ -218,6 +212,14 @@ public class AdvertiserController {
         if (advertiserEntity == null) {
             result.error500("未找到对应实体");
         } else {
+            String industryId = advertiser.getIndustryId();
+            if(null!=industryId&&!"".equals(industryId.trim())){
+                SysCategory category = sysCategoryService.getById(industryId);
+                if(null!=category){
+                    advertiser.setIndustryId(category.getId());
+                    advertiser.setIndustryCode(category.getCode());
+                }
+            }
             boolean ok = advertiserService.updateById(advertiser);
             QueryWrapper<Project> projectQueryWrapper = new QueryWrapper<>();
             projectQueryWrapper.eq("advertiser_id", advertiser.getId());

+ 7 - 5
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/BindAccountLoginController.java

@@ -5,6 +5,7 @@ import cn.com.ctop.common.module.entity.UserAllocation;
 import cn.com.ctop.common.module.mapper.UserAllocationMapper;
 import cn.com.ctop.common.module.service.IBindAccountLoginService;
 import cn.com.ctop.common.module.utils.Check;
+import cn.com.ctop.common.module.utils.CtopAdConstant;
 import cn.com.ctop.common.module.utils.StringUtils;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -61,25 +62,26 @@ public class BindAccountLoginController {
         }
         //创建人
         String userId = json.getString("userId");
-        String password = json.getString("password");
         String loginType = json.getString("loginType");
         // 广告主名称
         String advertiserName = json.getString("advertiser_name");
+        //项目id
+        Long projectId = json.getLong("projectId");
         //账号
         String accountName = json.getString("accountName");
-        Map<String, Object> stringObjectMap = createInternalService.bindLogin(advertiserId, accountName, password, loginType, userId, advertiserName);
+        String password = json.getString("password");
+        Map<String, Object> stringObjectMap = createInternalService.bindLogin(projectId,advertiserId, accountName, password, loginType, userId, advertiserName);
         Boolean trueOrFalse = (Boolean) stringObjectMap.get("success");
-        if (Boolean.TRUE.equals(trueOrFalse)) {
+        if (Boolean.TRUE.equals(trueOrFalse)&&!loginType.equals(CtopAdConstant.PLATFORM_TYPE_PANGOLIN_PY)) {
             Map<String, Object> deleteMap = new HashMap<>();
             deleteMap.put("account_name", accountName);
             deleteMap.put("user_id", userId);
             deleteMap.put("advertiser_id", advertiserId);
             userAllocationMapper.deleteByMap(deleteMap);
             Long accountId = (Long) stringObjectMap.get("accountId");
+            String mediaId = json.getString("mediaId");
             String userName = json.getString("userName");
             // 媒体类型: 1 头条 2 快手
-            String mediaId = json.getString("mediaId");
-            Long projectId = json.getLong("projectId");
             String projectName = json.getString("projectName");
             String systemType = json.getString("systemType");
             UserAllocation userAllocation = new UserAllocation();

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

@@ -1,8 +1,7 @@
 package org.jeecg.modules.ctop.controller;
 
 
-import cn.com.ctop.common.module.entity.MaterialImageInfo;
-import cn.com.ctop.common.module.entity.MaterialInfo;
+import cn.com.ctop.common.module.entity.*;
 import cn.com.ctop.common.module.service.*;
 import cn.com.ctop.common.module.utils.Check;
 import cn.com.ctop.common.module.utils.JsonUtil;
@@ -336,7 +335,29 @@ public class MaterialInfoController {
                 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);
+                }
+            }
 
+            //  审核通过自动同步到到媒体后台
            /* Long projectId = materialInfoEntity.getProjectId();
             Project project = projectService.getById(projectId);
             if (!Check.isNull(projectId)) {
@@ -358,7 +379,6 @@ public class MaterialInfoController {
 
             }*/
 
-
             boolean ok = materialInfoService.updateById(materialInfo);
             if (ok) {
                 result.success("修改成功!");
@@ -381,16 +401,18 @@ public class MaterialInfoController {
     @DeleteMapping(value = "/delete")
     public Result<Object> delete(@RequestParam(name = "id", required = true) String id) {
         try {
+            MaterialInfo materialInfo = materialInfoService.getById(id);
+            if (!Check.isNull(materialInfo)) {
+                Map<String, Object> deleteMap = new HashMap<>();
+                deleteMap.put("material_id", materialInfo.getCode());
+                materialAscriptionService.removeByMap(deleteMap);
+                materialParameterService.removeByMap(deleteMap);
+                materialTagService.removeByMap(deleteMap);
+                Map<String, Object> deleteWatermarkMap = new HashMap<>();
+                deleteWatermarkMap.put("video_id", id);
+                watermarkTaskService.removeByMap(deleteWatermarkMap);
+            }
             materialInfoService.removeById(id);
-            Map<String, Object> deleteMap = new HashMap<>();
-            deleteMap.put("material_id", id);
-            materialAscriptionService.removeByMap(deleteMap);
-            materialParameterService.removeByMap(deleteMap);
-            materialTagService.removeByMap(deleteMap);
-            Map<String, Object> deleteWatermarkMap = new HashMap<>();
-            deleteWatermarkMap.put("video_id", id);
-            watermarkTaskService.removeByMap(deleteWatermarkMap);
-
         } catch (Exception e) {
             log.error("删除失败", e.getMessage());
             return Result.error("删除失败!");
@@ -438,4 +460,50 @@ public class MaterialInfoController {
         }
         return result;
     }
+
+    @AutoLog(value = "获取有效素材")
+    @ApiOperation(value = "获取有效素材", notes = "获取有效素材")
+    @GetMapping(value = "/effiMaterialInfo")
+    public Result<IPage<MaterialInfo>> effiMaterialInfo(MaterialInfo materialInfo,
+                                                        @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                        @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                        HttpServletRequest req) {
+        Result<IPage<MaterialInfo>> result = new Result<>();
+        QueryWrapper<MaterialInfo> queryWrapper = new QueryWrapper<>();
+
+        List<String> effiList = materialInfoService.getEffiCode();
+        Object createTime = materialInfo.getCreateTime();
+        materialInfo.setCreateTime(null);
+        queryWrapper.in("code", effiList);
+        queryWrapper.groupBy("code");
+        //queryWrapper = QueryGenerator.initQueryWrapper(materialInfo, req.getParameterMap());
+
+        Page<MaterialInfo> page = new Page<>(pageNo, pageSize);
+        IPage<MaterialInfo> pageList = materialInfoService.page(page, queryWrapper);
+
+        List<MaterialInfo> materialInfoList = pageList.getRecords();
+        if (materialInfoList.size() != 0) {
+            for (MaterialInfo material : materialInfoList) {
+                //判断是否已经同步到快手平台
+                Integer kuaishouMaterialUpCount = materialInfoService.getKuaishouUpVideoCount(material.getCode());
+                if (kuaishouMaterialUpCount > 0) {
+                    material.setKuaishouVideoIsUp(1);
+                } else {
+                    material.setKuaishouVideoIsUp(0);
+                }
+                //判断是否已经同步到抖音平台
+                Integer toutiaoMaterialUpCount = materialInfoService.getToutiaoUpVideoCount(material.getCode());
+                if (toutiaoMaterialUpCount > 0) {
+                    material.setToutiaoVideoIsUp(1);
+                } else {
+                    material.setToutiaoVideoIsUp(0);
+                }
+            }
+        }
+        result.setSuccess(true);
+        result.setResult(pageList);
+        return result;
+    }
+
+
 }

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

@@ -0,0 +1,50 @@
+package org.jeecg.modules.ctop.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.modules.ctop.service.IMaterialTopService;
+import org.jeecg.modules.ctop.vo.MaterialTopVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ *  Created by JQ.bi on 2020.5.21
+ */
+@Slf4j
+@RestController
+@RequestMapping("/ctop/material")
+public class MaterialTopCtrl {
+
+    @Autowired
+    IMaterialTopService materialTopService;
+
+    @PostMapping("/top/cost")
+    public Result<IPage<MaterialTopVO>> getCostTop(@RequestBody JSONObject requestBody,
+                                                   @RequestParam(defaultValue = "cost") String target,
+                                                   @RequestParam(defaultValue = "desc") String order,
+                                                   @RequestParam(defaultValue = "1") int pageNo,
+                                                   @RequestParam(defaultValue = "10") int pageSize) {
+        Result<IPage<MaterialTopVO>> result = new Result<>();
+        if(requestBody.isEmpty()){
+            log.error("request body is empty");
+            result.setSuccess(false);
+        }
+        try {
+            String startDate= requestBody.getString("startDate");
+            String endDate= requestBody.getString("endDate");
+            if(startDate.isEmpty()||endDate.isEmpty()){
+                log.error("startDate or endDate is empty");
+                result.setSuccess(false);
+            }
+            IPage<MaterialTopVO> voiPage = materialTopService.selectByPage(endDate, startDate, target, order, pageNo, pageSize);
+            result.setResult(voiPage);
+            result.setSuccess(true);
+        } catch (Exception e) {
+            log.error(e.getMessage(),e);
+            result.setSuccess(false);
+        }
+        return result;
+    }
+}

+ 98 - 8
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/PangolinController.java

@@ -1,18 +1,26 @@
 package org.jeecg.modules.ctop.controller;
 
-import cn.com.ctop.crawler.modules.pangolin.service.PangolinReportAppHourService;
-import cn.com.ctop.crawler.modules.pangolin.service.PangolinReportBillMonthService;
-import cn.com.ctop.crawler.modules.pangolin.service.PangolinReportChannelDailyService;
+import cn.com.ctop.common.module.service.IBindAccountLoginService;
+import cn.com.ctop.common.module.service.ISysRoleService;
+import cn.com.ctop.common.module.service.IUserAllocationService;
+import cn.com.ctop.common.module.utils.ResultMapUtils;
+import cn.com.ctop.common.module.utils.StatusCode;
+import cn.com.ctop.crawler.modules.pangolin.service.*;
+import cn.com.ctop.crawler.modules.pangolin.vo.PangolinReportAppMonthVO;
 import com.alibaba.fastjson.JSONObject;
+import com.github.pagehelper.PageInfo;
 import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.system.vo.LoginUser;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
+import java.util.HashMap;
 import java.util.Map;
 
+@RestController
 @RequestMapping("pangolin")
 public class PangolinController {
     @Autowired
@@ -21,14 +29,80 @@ public class PangolinController {
     private PangolinReportChannelDailyService pangolinReportChannelDailyService;
     @Autowired
     private PangolinReportBillMonthService pangolinReportBillMonthService;
+    @Autowired
+    private PangolinAppService pangolinAppService;
+    @Autowired
+    private PangolinChannelService pangolinChannelService;
+    @Autowired
+    private ISysRoleService sysRoleService;
+    @Autowired
+    private IBindAccountLoginService bindAccountLoginService;
+    @Autowired
+    private IUserAllocationService userAllocationService;
+    @PostMapping("api/user/list")
+    public Map<String, Object> userList(@RequestBody JSONObject data) {
+//        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+//        String userId = user.getId();
+        String userId = "6b4c821adc414dc8b7718ab63ccbfcaf";
+        String roleCode = sysRoleService.getRoleCodeByUserId(userId);
+        if(null!=roleCode&&(roleCode.equals("admin"))){
+            userId = null;
+        }
+
+        return userAllocationService.getPangolinAccountListByParams(userId,data);
+    }
+
+    @PostMapping("api/project/list")
+    public Map<String, Object> projectList(@RequestBody JSONObject data) {
+//        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+//        String userId = user.getId();
+        String userId = "6b4c821adc414dc8b7718ab63ccbfcaf";
+        String roleCode = sysRoleService.getRoleCodeByUserId(userId);
+        if(null!=roleCode&&(roleCode.equals("admin"))){
+            userId = null;
+        }
+        return userAllocationService.getPangolinProjectListByParams(userId);
+    }
+
+    @PostMapping("api/channel/list")
+    public Map<String, Object> channelList(@RequestBody JSONObject data) {
+//        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+//        String userId = user.getId();
+        String userId = "6b4c821adc414dc8b7718ab63ccbfcaf";
+        String roleCode = sysRoleService.getRoleCodeByUserId(userId);
+        if(null!=roleCode&&(roleCode.equals("admin"))){
+            userId = null;
+        }
+        return pangolinChannelService.getListByUserId(userId);
+    }
+
+
+    @PostMapping("api/app/list")
+    public Map<String, Object> appList(@RequestBody JSONObject data) {
+//        LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+//        String userId = user.getId();
+        String userId = "6b4c821adc414dc8b7718ab63ccbfcaf";
+        String roleCode = sysRoleService.getRoleCodeByUserId(userId);
+        if(null!=roleCode&&(roleCode.equals("admin"))){
+            userId = null;
+        }
+        return pangolinAppService.getListByUserId(userId,data);
+    }
+
 
     /**
      * 实时数据
      */
     @PostMapping("api/realtime")
-    public Map<String, Object> realTime() {
+    public Map<String, Object> realTime(@RequestBody JSONObject data) {
         LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
-        return pangolinReportAppHourService.getRealTimeData(user.getId());
+        String userId = user.getId();
+//        String userId = "6b4c821adc414dc8b7718ab63ccbfcaf";
+        String roleCode = sysRoleService.getRoleCodeByUserId(userId);
+        if(null!=roleCode&&(roleCode.equals("admin"))){
+            userId = null;
+        }
+        return pangolinReportAppHourService.getRealTimeData(userId,data);
     }
 
     /**
@@ -37,16 +111,32 @@ public class PangolinController {
     @PostMapping("api/activation/list")
     public Map<String, Object> activationList(@RequestBody JSONObject data) {
         LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
-        return pangolinReportChannelDailyService.getActivationList(user.getId(), data);
+        String userId = user.getId();
+//        String userId = "6b4c821adc414dc8b7718ab63ccbfcaf";
+        String roleCode = sysRoleService.getRoleCodeByUserId(userId);
+        if(null!=roleCode&&(roleCode.equals("admin"))){
+            userId = null;
+        }
+        return pangolinReportChannelDailyService.getActivationList(userId, data);
     }
 
     /**
      * 对账单
      */
     @PostMapping("/api/checkApps/list")
-    public Map<String, Object> checkAppList(@RequestBody JSONObject data) {
+    public Map<String,Object> checkAppList(@RequestBody JSONObject data) {
+        Map<String,Object> result = new HashMap<>();
         LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal();
-        return pangolinReportBillMonthService.checkAppList(user.getId(), data);
+        String userId = user.getId();
+//        String userId = "6b4c821adc414dc8b7718ab63ccbfcaf";
+        String roleCode = sysRoleService.getRoleCodeByUserId(userId);
+        if(null!=roleCode&&(roleCode.equals("admin"))){
+            userId = null;
+        }
+        PageInfo<PangolinReportAppMonthVO> pageInfo = pangolinReportBillMonthService.checkAppList(userId, data);
+        result.put("data",pageInfo);
+        ResultMapUtils.setResultMap(result, StatusCode.COMMON_SUCCESS);
+        return result;
     }
 
 }

+ 23 - 2
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/ProjectController.java

@@ -25,7 +25,9 @@ import org.jeecg.modules.ctop.service.IAdvertiserService;
 import org.jeecg.modules.ctop.service.IProjectMemberService;
 import org.jeecg.modules.ctop.service.IProjectService;
 import org.jeecg.modules.ctop.service.ITransferAccountService;
+import org.jeecg.modules.system.entity.SysCategory;
 import org.jeecg.modules.system.entity.SysUser;
+import org.jeecg.modules.system.service.ISysCategoryService;
 import org.jeecg.modules.system.service.ISysUserService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -61,7 +63,6 @@ public class ProjectController {
     private IUserAllocationService userAllocationService;
 
     /**
-     *
      * @param advertiserId
      * @param mediaId
      * @return
@@ -151,6 +152,8 @@ public class ProjectController {
         return map;
     }
 
+    @Autowired
+    private ISysCategoryService sysCategoryService;
 
     /**
      * 分页列表查询
@@ -169,6 +172,8 @@ public class ProjectController {
                                                 @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
                                                 HttpServletRequest req) {
         Result<IPage<Project>> result = new Result<>();
+        String industryId = project.getIndustryId();
+        project.setIndustryId(null);
         QueryWrapper<Project> queryWrapper = QueryGenerator.initQueryWrapper(project, req.getParameterMap());
         Page<Project> page = new Page<>(pageNo, pageSize);
         LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
@@ -177,6 +182,12 @@ public class ProjectController {
             queryWrapper.eq("user_id", sysUser.getId());
             queryWrapper.orderByDesc("create_time");
         }
+        if(null!=industryId&&!"".equals(industryId.trim())){
+            SysCategory category = sysCategoryService.getById(industryId);
+            if(null!=category){
+                queryWrapper.likeRight("industry_code",category.getCode());
+            }
+        }
         IPage<Project> pageList = projectService.page(page, queryWrapper);
         result.setSuccess(true);
         result.setResult(pageList);
@@ -203,7 +214,11 @@ public class ProjectController {
             Map<String, String> memberMap = new HashMap<>();
             if (!Check.isNull(advertiser)) {
                 project.setCompanyId(advertiser.getCompanyId());
-
+            }
+            SysCategory category = sysCategoryService.getById(project.getIndustryId());
+            if(null!=category){
+                project.setIndustryCode(category.getCode());
+                project.setIndustryId(category.getId());
             }
             SysUser sysUser = sysUserService.getById(project.getResponsibleId());
             if (!Check.isNull(sysUser)) {
@@ -266,6 +281,11 @@ public class ProjectController {
             projectMemberService.addMember(sysUser, project);
         }
 
+        SysCategory category = sysCategoryService.getById(project.getIndustryId());
+        if(null!=category){
+            project.setIndustryCode(category.getCode());
+            project.setIndustryId(category.getId());
+        }
         SysUser designSysUser = sysUserService.getById(project.getDesignResponsibleId());
         if (!Check.isNull(designSysUser)) {
             project.setDesignResponsibleName(designSysUser.getRealname());
@@ -287,6 +307,7 @@ public class ProjectController {
             userAllocationQueryWrapper.eq("project_id", project.getId());
             UserAllocation updateUserAllocation = new UserAllocation();
             updateUserAllocation.setProjectName(project.getProjectName());
+           // updateUserAllocation.setMediaId(project.getMediaId());
             userAllocationService.update(updateUserAllocation, userAllocationQueryWrapper);
 
             if (ok) {

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

@@ -10,9 +10,11 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.api.vo.Result;
 import org.jeecg.common.aspect.annotation.AutoLog;
 import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.modules.ctop.entity.Project;
 import org.jeecg.modules.ctop.entity.ProjectMember;
 import org.jeecg.modules.ctop.mapper.ProjectMemberMapper;
@@ -185,7 +187,7 @@ public class ProjectMemberController {
                     QueryWrapper<ProjectMember> queryWrapper = new QueryWrapper<>();
                     queryWrapper.eq("user_id", userId);
                     queryWrapper.eq("project_id", projectId);
-                    ProjectMember selectMember = (ProjectMember) projectMemberService.getObj(queryWrapper);
+                    ProjectMember selectMember = (ProjectMember) projectMemberService.getOne(queryWrapper);
                     if (!Check.isNull(selectMember)) {
                         continue;
                     }
@@ -318,4 +320,32 @@ public class ProjectMemberController {
         }
         return result;
     }
+
+    /**
+     * 我参与项目
+     *
+     * @return
+     */
+    @AutoLog(value = "头条视频报表-参与项目列表")
+    @ApiOperation(value = "头条视频报表-参与项目列表", notes = "头条视频报表-参与项目列表")
+    @GetMapping(value = "/bytedanceProjectParticipateInList")
+    public  Result<List<ProjectMember>> bytedanceProjectParticipateInList() {
+        Result<List<ProjectMember>> result = new Result<>();
+        List<Integer> mediaIds = new ArrayList<>();
+        mediaIds.add(1);
+        mediaIds.add(3);
+        List<ProjectMember> projectMemberList = projectMemberService.getProjects(mediaIds);
+        if (projectMemberList == null) {
+            result.error500("未找到对应实体");
+        } else {
+            result.setResult(projectMemberList);
+            result.setSuccess(true);
+        }
+        return result;
+
+    }
+
+
+
+
 }

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

@@ -95,6 +95,46 @@ public class TestController {
     }
 
 
+    @GetMapping(value = "/getAccountReport")
+    public String getAccountReport(Long accountId, String startDate, String endDate) throws ParseException {
+        QueryWrapper<CtopOauthToken> oauthTokenQueryWrapper = new QueryWrapper<>();
+        oauthTokenQueryWrapper.eq("media_id", 2);
+        oauthTokenQueryWrapper.eq("account_id", accountId);
+        oauthTokenQueryWrapper.last("limit 1");
+        CtopOauthToken token = oauthTokenMapper.selectOne(oauthTokenQueryWrapper);
+        SimpleDateFormat sim = new SimpleDateFormat("yyyy-MM-dd");
+        Date date1 = sim.parse(startDate);
+        Date date2 = sim.parse(endDate);
+        kuaishouInterfaceService.getAdvertiserReportDaily(token, date1, date2);
+        return "Success";
+    }
+
+
+    @GetMapping(value = "/getAccountReportList")
+    public String getAccountReportList(String startDate, String endDate) {
+        Result<String> result = new Result<>();
+        try {
+            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);
+            if (!Check.isNull(ctopOauthTokens)) {
+                for (CtopOauthToken token : ctopOauthTokens) {
+                    kuaishouInterfaceService.getAdvertiserReportDaily(token, date1, date2);
+                }
+
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            result.setSuccess(false);
+        }
+        return "success";
+    }
+
+
     @GetMapping(value = "/updateCode")
     public String updateCode() {
         List<MaterialInfo> list = materialInfoService.list();
@@ -386,9 +426,6 @@ public class TestController {
     private IReportService reportService;
 
 
-
-
-
     @Autowired
     private IBytedancePlanHourlyReportService planHourlyReportService;
 

+ 8 - 6
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/UserAllocationController.java

@@ -148,10 +148,11 @@ public class UserAllocationController {
         try {
             QueryWrapper<UserAllocation> queryWrapper = new QueryWrapper<>();
             queryWrapper.eq("project_id", projectId);
+
+           /* if (!Check.isNull(project)) {
             Project project = projectService.getById(projectId);
-            if (!Check.isNull(project)) {
                 queryWrapper.eq("media_id", project.getMediaId());
-            }
+            }*/
 
             String roleCode = sysRoleService.getRoleCodeByUserId(userId);
             if (!"admin".equals(roleCode) && !"kuaishouOperationManager".equals(roleCode) && !"designTeamLeader".equals(roleCode) && !"touTiaoOperationManager".equals(roleCode)) {
@@ -184,10 +185,11 @@ public class UserAllocationController {
 
             QueryWrapper<UserAllocation> queryWrapper = new QueryWrapper<>();
             queryWrapper.eq("project_id", projectId);
-            Project project = projectService.getById(projectId);
-            if (!Check.isNull(project)) {
-                queryWrapper.eq("media_id", project.getMediaId());
-            }
+
+           /* if (!Check.isNull(project)) {
+                 Project project = projectService.getById(projectId);
+                 queryWrapper.eq("media_id", project.getMediaId());
+            }*/
             queryWrapper.isNotNull("account_id");
             List<UserAllocation> userAllocations = userAllocationMapper.selectList(queryWrapper);
             result.setSuccess(true);

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

@@ -10,6 +10,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
+import org.jeecg.common.aspect.annotation.Dict;
 import org.jeecgframework.poi.excel.annotation.Excel;
 import org.springframework.format.annotation.DateTimeFormat;
 
@@ -46,12 +47,15 @@ public class Advertiser {
      */
     @Excel(name = "行业ID", width = 15)
     @ApiModelProperty(value = "行业ID")
+    @Dict(dicCode = "id",dictTable="sys_category",dicText="name")
     private String industryId;
+    private String industryCode;
     /**
      * 销售ID
      */
     @Excel(name = "销售ID", width = 15)
     @ApiModelProperty(value = "销售ID")
+    @Dict(dicCode = "id",dictTable="sys_user",dicText="realname")
     private String saleId;
     /**
      * 销售ID

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

@@ -10,6 +10,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
+import org.jeecg.common.aspect.annotation.Dict;
 import org.jeecgframework.poi.excel.annotation.Excel;
 import org.springframework.format.annotation.DateTimeFormat;
 
@@ -52,6 +53,10 @@ public class Project {
     @Excel(name = "广告主名称", width = 15)
     @ApiModelProperty(value = "广告主名称")
     private String advertiserName;
+
+    @Dict(dicCode = "id",dictTable="sys_category",dicText="name")
+    private String industryId;
+    private String industryCode;
     /**
      * 创建人
      */

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

@@ -34,11 +34,30 @@ public class AccountCpaBidJob implements Job {
      */
     @Override
     public void execute(JobExecutionContext jobExecutionContext) {
-        executorService = Executors.newFixedThreadPool(4);
-        QueryWrapper<Project> queryWrapper = new QueryWrapper<>();
-        List<Project> projects = projectService.list(queryWrapper);
-        if (!Check.isNull(projects)) {
-            projects.stream().filter(project -> BigDecimalUtil.compareToDecimal(project.getMaxDeepCpaBid(), new BigDecimal(0)) <= 0).forEach(project -> executorService.submit(() -> cpaBidWarningService.CpaBidWarning(project)));
-        }
+        Thread thread = new Thread() {
+            @Override
+            public void run() {
+                executorService = Executors.newFixedThreadPool(4);
+                QueryWrapper<Project> queryWrapper = new QueryWrapper<>();
+                List<Project> projects = projectService.list(queryWrapper);
+                if (!Check.isNull(projects)) {
+                    for (Project project : projects) {
+                        if (BigDecimalUtil.compareToDecimal(project.getMaxDeepCpaBid(), new BigDecimal(0)) <= 0) {
+                            continue;
+                        }
+                        executorService.submit(new Runnable() {
+                            @Override
+                            public void run() {
+                                cpaBidWarningService.CpaBidWarning(project);
+                            }
+
+                        });
+                    }
+                    executorService.shutdown();
+                }
+            }
+        };
+        thread.start();
+
     }
 }

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

@@ -72,8 +72,10 @@ public class BytedancePlanHourlyReportLoadJob implements Job {
         if (null != hour && "00".equals(hour)) {
             Date lastday = DateUtils.addDay(getDate, -1);
             planDailyReportService.cleanYddHourlyChannelCode(113, lastday);
+            planDailyReportService.cleanYddHourlyChannelCode(419, lastday);
         }
         planDailyReportService.cleanYddHourlyChannelCode(113, getDate);
+        planDailyReportService.cleanYddHourlyChannelCode(419, getDate);
 
         log.info("头条计划时报数据获取完成");
         executorService.shutdown();

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

@@ -53,15 +53,4 @@ public class KuaishouCrawlerJob implements Job {
             e.printStackTrace();
         }
     }
-
-    public static void main(String[] args) {
-        for (int i = 0; i < 100; i++) {
-            System.out.println(i);
-            try {
-                System.out.println(1 / 0);
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-    }
 }

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

@@ -0,0 +1,37 @@
+package org.jeecg.modules.ctop.job;
+
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.constant.SystemDateConstant;
+import org.jeecg.common.util.DateUtils;
+import org.jeecg.modules.ctop.service.IMaterialTopService;
+import org.quartz.Job;
+import org.quartz.JobExecutionContext;
+import org.quartz.JobExecutionException;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ *  Created by JQ.bi on 2020.5.25
+ *  定时更新素材报表的 快手头条整合数据
+ */
+@Slf4j
+public class MaterialReportAccountUpdateJob implements Job {
+
+    @Autowired
+    IMaterialTopService materialTopService;
+
+    @Override
+    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
+
+        log.info("MaterialReportAccountUpdateJob is start");
+
+        boolean result=materialTopService.insertMaterialReportAccount(DateUtils.getAnotherDay(SystemDateConstant.yyyy_MM_dd,
+                DateUtils.getNowDate(SystemDateConstant.yyyy_MM_dd), -1));
+
+        if(!result){
+            log.error("MaterialReportAccountUpdateJob is error");
+        } else {
+            log.info("MaterialReportAccountUpdateJob is done");
+        }
+    }
+
+}

+ 3 - 2
module-crawler/src/main/java/cn/com/ctop/crawler/modules/pangolin/job/PangolinDataJob.java

@@ -1,9 +1,10 @@
-package cn.com.ctop.crawler.modules.pangolin.job;
+package org.jeecg.modules.ctop.job;
 
 import cn.com.ctop.common.module.entity.BindAccountLogin;
 import cn.com.ctop.common.module.service.IBindAccountLoginService;
 import cn.com.ctop.crawler.modules.pangolin.entity.PangolinApp;
-import cn.com.ctop.crawler.modules.pangolin.service.*;
+import cn.com.ctop.crawler.modules.pangolin.service.PangolinAppService;
+import cn.com.ctop.crawler.modules.pangolin.service.PangolinCrawlerService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import org.jeecg.common.util.DateUtils;
 import org.quartz.Job;

+ 7 - 4
module-crawler/src/main/java/cn/com/ctop/crawler/modules/pangolin/job/PangolinLoginJob.java

@@ -1,4 +1,4 @@
-package cn.com.ctop.crawler.modules.pangolin.job;
+package org.jeecg.modules.ctop.job;
 
 import cn.com.ctop.common.module.entity.BindAccountLogin;
 import cn.com.ctop.common.module.service.IBindAccountLoginService;
@@ -21,10 +21,13 @@ public class PangolinLoginJob implements Job {
         QueryWrapper<BindAccountLogin> queryWrapper = new QueryWrapper<>();
         queryWrapper.eq("login_type","pangolin");
         queryWrapper.eq("status",1);
-        queryWrapper.isNull("cookie");
         List<BindAccountLogin> list = bindAccountLoginService.list(queryWrapper);
-        if (list != null && !list.isEmpty()) {
-            list.forEach(bindAccountLogin -> pangolinLoginService.pangolinLogin(bindAccountLogin.getAccountName(), bindAccountLogin.getPassword()));
+        if(list!=null&&!list.isEmpty()){
+            for (BindAccountLogin login:list) {
+                if(null==login.getCookie()||"".equals(login.getCookie().trim())){
+                    pangolinLoginService.pangolinLogin(login.getAccountName(), login.getPassword());
+                }
+            }
         }
     }
 }

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

@@ -0,0 +1,20 @@
+package org.jeecg.modules.ctop.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.ctop.vo.MaterialTopVO;
+
+public interface MaterialTopMapper {
+
+    IPage<MaterialTopVO> selectMapsPage(Page<MaterialTopVO> page, @Param(Constants.WRAPPER)QueryWrapper<MaterialTopVO> wrapper);
+
+    int insertByteDanceMaterialReportAccountByDate(@Param("statDate") String statDate);
+
+    int insertKuaiShouMaterialReportAccountByDate(@Param("statDate") String statDate);
+
+    int deletedMaterialReportAccountByDate(@Param("statDate") String statDate);
+
+}

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

@@ -16,4 +16,17 @@ import java.util.List;
 public interface ProjectMemberMapper extends BaseMapper<ProjectMember> {
 
     List<Long> selectProjectsByUserId(@Param("userId") String userId);
+
+    List<ProjectMember> adminProjects(@Param("mediaIds")List<Integer> mediaIds);
+
+    List<ProjectMember> designLeaderProjects(@Param("companyId")String companyId ,@Param("mediaIds")List<Integer> mediaIds);
+
+    List<ProjectMember> designProjects(@Param("userId")String userId, @Param("mediaIds")List<Integer> mediaIds);
+
+    List<ProjectMember> operationProjects(@Param("userId")String userId, @Param("mediaIds")List<Integer> mediaIds);
+
+    String getRoleCodeByUserId(@Param("userId")String userId);
+
+    String getCompanyIdByUserId(@Param("userId")String userId);
+
 }

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

@@ -0,0 +1,207 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.jeecg.modules.ctop.mapper.MaterialTopMapper">
+    <select id="selectMapsPage" resultType="org.jeecg.modules.ctop.vo.MaterialTopVO">
+       SELECT
+          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">
+        INSERT INTO ctop_material_report_total_result (
+            CODE,
+            url,
+            NAME,
+            stat_date,
+            cost,
+            click,
+            show_num,
+            active,
+            register,
+            pay,
+            phone_convert,
+            form_convert,
+            residue,
+            play3s,
+            play10s,
+            media_type
+        ) SELECT
+              t2.signature,
+              CASE
+                  WHEN (
+                      SELECT
+                          info.url
+                      FROM
+                          ctop_material_info info
+                      WHERE
+                          info. CODE = t2.signature
+                      ORDER BY
+                          create_time DESC
+                      LIMIT 1
+                  ) IS NULL THEN
+                      ""
+                  ELSE
+                      (
+                          SELECT
+                              info.url
+                          FROM
+                              ctop_material_info info
+                          WHERE
+                              info. CODE = t2.signature
+                          ORDER BY
+                              create_time DESC
+                          LIMIT 1
+                      )
+                  END AS url,
+              CASE
+                  WHEN (
+                      SELECT
+                          info.material_name
+                      FROM
+                          ctop_material_info info
+                      WHERE
+                          info. CODE = t2.signature
+                      ORDER BY
+                          create_time DESC
+                      LIMIT 1
+                  ) IS NULL THEN
+                      ""
+                  ELSE
+                      (
+                          SELECT
+                              info.material_name
+                          FROM
+                              ctop_material_info info
+                          WHERE
+                              info. CODE = t2.signature
+                          ORDER BY
+                              create_time DESC
+                          LIMIT 1
+                      )
+                  END AS NAME,
+              t1.stat_datetime AS statDate,
+              sum(t1.cost) AS cost,
+              sum(t1.click) click,
+              0 AS showNum,
+              sum(t1.active) AS active,
+              sum(t1.register) AS register,
+              sum(t1.pay_count) AS pay,
+              sum(t1.phone_confirm) AS phoneConvert,
+              sum(t1.form) AS formConvert,
+              sum(t1.next_day_open) AS residue,
+              sum(t1.play_duration_3s) AS play3s,
+              sum(t1.play_duration_10s) AS play3s,
+              0 AS mediaType
+        FROM
+            ctop_bytedance_report_material_daily t1
+                LEFT JOIN ctop_bytedance_video_info t2 ON t1.material_id = t2.material_id
+        WHERE
+            1 = 1
+          AND t1.stat_datetime = #{statDate}
+          AND t1.image_mode != 'MATERIAL_IMAGE_MODE_TITLE'
+          AND t2.signature IS NOT NULL
+          AND t2.signature != ""
+        GROUP BY
+            t2.signature,
+            t1.stat_datetime;
+    </insert>
+
+    <insert id ="insertKuaiShouMaterialReportAccountByDate">
+        INSERT INTO ctop_material_report_total_result (
+            CODE,
+            url,
+            NAME,
+            stat_date,
+            cost,
+            click,
+            show_num,
+            active,
+            register,
+            form_convert,
+            media_type
+        ) SELECT
+              t1.signature AS 'code',
+              CASE
+                  WHEN (
+                      SELECT
+                          url
+                      FROM
+                          ctop_material_info
+                      WHERE
+                          `code` = t1.signature
+                      LIMIT 1
+                  ) IS NULL THEN
+                      ""
+                  ELSE
+                      (
+                          SELECT
+                              url
+                          FROM
+                              ctop_material_info
+                          WHERE
+                              `code` = t1.signature
+                          LIMIT 1
+                      )
+                  END AS 'url',
+              CASE
+                  WHEN (
+                      SELECT
+                          material_name
+                      FROM
+                          ctop_material_info
+                      WHERE
+                          `code` = t1.signature
+                      LIMIT 1
+                  ) IS NULL THEN
+                      ""
+                  ELSE
+                      (
+                          SELECT
+                              material_name
+                          FROM
+                              ctop_material_info
+                          WHERE
+                              `code` = t1.signature
+                          LIMIT 1
+                      )
+                  END AS 'name',
+              t1.stat_date AS 'stat_date',
+              sum(t1.charge) AS 'cost',
+              sum(t1.photo_click) AS 'click',
+              sum(t1.photo_show) AS 'show_num',
+              sum(t1.activation) AS 'active',
+              sum(t1.event_register) AS 'register',
+              sum(t1.form_count) AS 'form_convert',
+              '2' AS 'media_type'
+        FROM
+            ctop_kuaishou_report_daily_creative t1
+        WHERE
+            t1.signature IS NOT NULL
+          AND t1.stat_date = #{statDate}
+        GROUP BY
+            t1.stat_date,
+            t1.signature;
+    </insert>
+
+    <delete id="deletedMaterialReportAccountByDate">
+        DELETE FROM ctop_material_report_total_result where stat_date= #{statDate}
+    </delete>
+
+</mapper>

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

@@ -9,4 +9,100 @@
         where user_id = #{userId}
     </select>
 
-</mapper>
+    <!-- 设计师展示所有自己的角色下制作的视频 -->
+    <select id="adminProjects" resultType="org.jeecg.modules.ctop.entity.ProjectMember">
+        select
+        id as projectId,
+        project_name as projectName,
+        advertiser_id as advertiserId,
+        advertiser_name as advertiserName,
+        media_id as mediaId,
+        max_bid as maxBid,
+        advertiser_name as advertiserName ,
+        responsible_name as responsibleName
+        from
+        ctop_project
+        where
+        media_id in
+        <foreach collection="mediaIds" item="item" separator=","
+                 open="(" close=")">
+            #{item}
+        </foreach>
+    </select>
+
+    <!-- 视频报表设计师leader展示自己所在公司的所有项目 -->
+    <select id="designLeaderProjects" resultType="org.jeecg.modules.ctop.entity.ProjectMember">
+        select
+            distinct b.id as projectId,
+            b.project_name as projectName,
+            b.advertiser_id as advertiserId,
+            b.advertiser_name as advertiserName,
+            b.media_id as mediaId
+        from
+        ctop_project_member a
+        left join ctop_project b on a.project_id = b.id
+        where
+        b.company_id = #{companyId}
+        and b.media_id in
+        <foreach collection="mediaIds" item="item" separator=","
+                 open="(" close=")">
+            #{item}
+        </foreach>
+    </select>
+
+    <!-- 设计师展示所有自己的角色下制作的视频 -->
+    <select id="designProjects" resultType="org.jeecg.modules.ctop.entity.ProjectMember">
+        select
+            distinct a.project_id as projectId,
+            b.project_name as projectName,
+            b.advertiser_id as advertiserId,
+            b.advertiser_name as advertiserName,
+            b.media_id as mediaId
+        from
+        ctop_project_member a
+        left join ctop_project b on a.project_id = b.id
+        where a.user_id = #{userId}
+        and b.media_id in
+        <foreach collection="mediaIds" item="item" separator=","
+                 open="(" close=")">
+            #{item}
+        </foreach>
+    </select>
+
+    <!-- 运营和运营负责人展示所在项目视频 -->
+    <select id="operationProjects" resultType="org.jeecg.modules.ctop.entity.ProjectMember">
+        select
+           distinct b.id as projectId,
+           b.project_name as projectName,
+           b.advertiser_id as advertiserId,
+           b.advertiser_name as advertiserName,
+           b.media_id as mediaId
+        from
+        ctop_user_allocation a
+        left join ctop_project b on a.project_id = b.id
+        where a.user_id = #{userId}
+        and b.media_id in
+        <foreach collection="mediaIds" item="item" separator=","
+                 open="(" close=")">
+            #{item}
+        </foreach>
+    </select>
+
+    <select id="getRoleCodeByUserId" resultType="string">
+        select
+        role_code
+        from
+        sys_user_role a
+        left join sys_role b on a.role_id = b.id
+        where a.user_id = #{userId}
+    </select>
+
+    <select id="getCompanyIdByUserId" resultType="string">
+            select
+            company_id
+        from
+        user_company
+        where user_id = #{userId}
+    </select>
+
+</mapper>

+ 1 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/ICreateInternalService.java

@@ -6,5 +6,5 @@ public interface ICreateInternalService {
 
     Map<String, Object> checkAccountPassword(String account, String password);
 
-    Map<String, Object> bindLogin(String advertiserId, String accountName, String password, String loginType, String userId, String advertiserName);
+    Map<String, Object> bindLogin(Long projectId,String advertiserId, String accountName, String password, String loginType, String userId, String advertiserName);
 }

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

@@ -0,0 +1,9 @@
+package org.jeecg.modules.ctop.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import org.jeecg.modules.ctop.vo.MaterialTopVO;
+
+public interface IMaterialTopService {
+    IPage<MaterialTopVO> selectByPage(String endDate, String startDate, String target, String order, int pageNo, int pageSize);
+    boolean insertMaterialReportAccount(String statDate);
+}

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

@@ -19,4 +19,6 @@ public interface IProjectMemberService extends IService<ProjectMember> {
 
 
     List<Long> selectProjectsByUserId(String userId);
+
+    List<ProjectMember> getProjects(List<Integer> mediaIds);
 }

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

@@ -62,8 +62,6 @@ public class BidWarningServiceImpl implements IBidWarningService {
                     }
                     Long maxBid = project.getMaxBid();
                     Long projectId = project.getId();
-
-
                     List<UserAllocation> userAllocations = getUserAllocationsByProjectId(projectId);
                     if (!Check.isNull(userAllocations)) {
                         for (UserAllocation userAllocation : userAllocations) {

+ 4 - 15
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/service/impl/CreateInternalServiceImpl.java

@@ -35,26 +35,15 @@ public class CreateInternalServiceImpl implements ICreateInternalService {
     private BindAccountLoginMapper bindAccountLoginMapper;
 
     @Override
-    public Map<String, Object> bindLogin(String advertiserId, String accountName, String password, String loginType, String userId, String advertiserName) {
-
+    public Map<String, Object> bindLogin(Long projectId,String advertiserId, String accountName, String password, String loginType, String userId, String advertiserName) {
         Map<String, Object> returnMap = new HashMap<>();
         Map<String, Object> requestMap = new HashMap<>();
         requestMap.put("advertiser_id", advertiserId);
         requestMap.put("account_name", accountName);
         requestMap.put("login_type", loginType);
         requestMap.put("user_id", userId);
-        Map<String, Object> deleteMap = new HashMap<>();
-        deleteMap.put("advertiser_id", advertiserId);
-        deleteMap.put("account_name", accountName);
-        deleteMap.put("login_type", loginType);
-        deleteMap.put("user_id", userId);
-        bindAccountLoginMapper.deleteByMap(deleteMap);
-        List<BindAccountLogin> bindAccounts = bindAccountLoginMapper.selectByMap(requestMap);
-        if (!Check.isNull(bindAccounts)) {
-            returnMap.put("success", false);
-            returnMap.put("message", "账号已存在");
-            return returnMap;
-        }
+        requestMap.put("project_id", projectId);
+        bindAccountLoginMapper.deleteByMap(requestMap);
         String accountId = "";
         //头条登录
         if (null != loginType && loginType.equals(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE_PY)) {
@@ -73,13 +62,13 @@ public class CreateInternalServiceImpl implements ICreateInternalService {
         bindAccountLogin.setPassword(password);
         bindAccountLogin.setAccountId(accountId);
         bindAccountLogin.setLoginType(loginType);
+        bindAccountLogin.setProjectId(projectId);
         bindAccountLogin.setUserId(userId);
         int i = bindAccountLoginMapper.insert(bindAccountLogin);
         if (i > 0) {
             log.info("登录账号绑定成功,广告主id:{}", bindAccountLogin.getAdvertiserId());
             returnMap.put("success", true);
             returnMap.put("accountUd", password);
-            return returnMap;
         }
         return returnMap;
     }

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

@@ -0,0 +1,56 @@
+package org.jeecg.modules.ctop.service.impl;
+
+import cn.com.ctop.common.module.utils.CtopAdConstant;
+import cn.com.ctop.common.module.utils.StringUtils;
+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.modules.ctop.mapper.MaterialTopMapper;
+import org.jeecg.modules.ctop.service.IMaterialTopService;
+import org.jeecg.modules.ctop.vo.MaterialTopVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ *  Created by JQ.bi on 2020.05.22
+ */
+@Slf4j
+@Service
+public class MaterialTopServiceImpl  implements IMaterialTopService {
+
+    @Autowired
+    MaterialTopMapper materialTopMapper;
+
+    @Override
+    public IPage<MaterialTopVO> selectByPage(String endDate, String startDate, String target, String order, int pageNo, int pageSize) {
+        QueryWrapper<MaterialTopVO> wrapper = new QueryWrapper<>();
+        wrapper.ge("stat_date", startDate).le("stat_date", endDate).ne("url","").isNotNull("url");
+        target = StringUtils.humpToLine2(target);
+        if(order.equals(CtopAdConstant.COMMON_ORDER_TYPE_ASC)){
+            wrapper.orderByAsc(target);
+        }else{
+            wrapper.orderByDesc(target);
+        }
+        wrapper.groupBy("code");
+        Page<MaterialTopVO> page = new Page<>((pageNo-1)*pageSize,pageSize);
+        return materialTopMapper.selectMapsPage(page, wrapper);
+    }
+
+    @Override
+    public boolean insertMaterialReportAccount(String statDate) {
+
+        int resultByteDance=materialTopMapper.insertByteDanceMaterialReportAccountByDate(statDate);
+        int resultKuaishou=materialTopMapper.insertKuaiShouMaterialReportAccountByDate(statDate);
+
+        if(resultByteDance == 0 || resultKuaishou == 0){
+            log.error("整合素材报表信息失败");
+            log.info("delete dirty data is start");
+            materialTopMapper.deletedMaterialReportAccountByDate(statDate);
+            log.info("delete dirty data is success");
+        }
+
+        return resultByteDance != 0 && resultKuaishou != 0;
+    }
+
+}

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

@@ -3,6 +3,8 @@ package org.jeecg.modules.ctop.service.impl;
 import cn.com.ctop.common.module.service.ISysRoleService;
 import cn.com.ctop.common.module.utils.Check;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.shiro.SecurityUtils;
+import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.modules.ctop.entity.Project;
 import org.jeecg.modules.ctop.entity.ProjectMember;
 import org.jeecg.modules.ctop.mapper.ProjectMemberMapper;
@@ -11,6 +13,7 @@ import org.jeecg.modules.system.entity.SysUser;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -59,4 +62,31 @@ public class ProjectMemberServiceImpl extends ServiceImpl<ProjectMemberMapper, P
         return memberMapper.selectProjectsByUserId(userId);
     }
 
+    //视频报表
+    public List<ProjectMember> getProjects(List<Integer> mediaIds){
+        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        String userId = sysUser.getId();
+        String roleCode = memberMapper.getRoleCodeByUserId(userId);
+        String companyId = memberMapper.getCompanyIdByUserId(userId);
+
+        //List<Integer> mediaIds = new ArrayList<>();
+        //mediaIds.add(1);
+        //mediaIds.add(3);
+        //角色权限判断
+        List<ProjectMember> projectMemberList = null;
+        if(roleCode.equals("plan") || roleCode.equals("clip") || roleCode.equals("shot") || roleCode.equals("plane")|| roleCode.equals("planeLeader")){
+            projectMemberList = memberMapper.designProjects(userId, mediaIds);
+        }else if( roleCode.equals("designTeamLeader")){
+            projectMemberList = memberMapper.designLeaderProjects(companyId, mediaIds);
+        }else if(roleCode.equals("admin")){
+            projectMemberList = memberMapper.adminProjects(mediaIds);
+        }else if(roleCode.equals("operator") || roleCode.equals("operationAssistant") || roleCode.equals("touTiaoOperationManager")){
+            projectMemberList = memberMapper.operationProjects(userId, mediaIds);
+        }
+
+        return projectMemberList;
+    }
+
+
+
 }

+ 24 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/vo/MaterialTopVO.java

@@ -0,0 +1,24 @@
+package org.jeecg.modules.ctop.vo;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class MaterialTopVO {
+    private String url;
+    private String name ;
+    private String statDate;
+    private BigDecimal cost;
+    private Long click;
+    private Long showNum;
+    private Long active;
+    private Long register;
+    private BigDecimal pay;
+    private Long phoneConvert;
+    private Long formConvert;
+    private BigDecimal convertRate;
+    private Long residue;
+    private Long play3s;
+    private Long play10s;
+}

+ 9 - 40
jeecg-boot-module-system/src/main/java/org/jeecg/modules/opencv/utils/CornerCheck.java

@@ -27,15 +27,15 @@ public class CornerCheck {
         try {
             System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
 
-            final int maxCorners = 10000;
-            int blockSize = 3;
+            final int maxCorners = 8;
+            int blockSize = 5;
             final double qualityLevel = 0.01;
-            double minDistance = 5.0;
-            double k = 0.01;
+            double minDistance = 10;
+            double k = 0.06;
             final boolean useHarrisDetector = false;
             MatOfPoint corners = new MatOfPoint();
 
-            Mat src = Imgcodecs.imread("D:\\data\\model\\src\\0.jpg");
+            Mat src = Imgcodecs.imread("D:\\data\\model\\src\\1.jpg");
             if (src.empty()) {
                 throw new Exception("no file");
             }
@@ -44,25 +44,8 @@ public class CornerCheck {
             //灰度
             Imgproc.cvtColor(src, gray, Imgproc.COLOR_RGB2GRAY);
             Mat binary = new Mat();
-            Mat getSrc = gray;
-            Rect area = new Rect(324, 402, 218, 376);
+            Rect area = new Rect(324, 402, 218, 370);
             Mat mask = new Mat(gray, area);
-//            mask.setTo(new Scalar(0));
-            for (int i = 0; i < 8; i++) {
-                for (int j = 0; j < 8; j++) {
-                    System.out.print(mask.get(i, j)[0]);
-                }
-                System.out.println();
-            }
-//            System.out.println("+++++++++++++++++++");
-//            mask = mask.setTo(new Scalar(0),getSrc);
-//            for(int i=0;i<8;i++){
-//                for(int j=0;j<8;j++){
-////                    System.out.print(getSrc.get(i,j)[0]);
-//                    System.out.print(mask.get(i,j)[0]);
-//                }
-//                System.out.println();
-//            }
             //二值化mask
             Imgproc.threshold(mask, binary, 1, 255, Imgproc.THRESH_TOZERO);
             Imgcodecs.imwrite("D:\\data\\binary.jpg", binary);
@@ -70,26 +53,12 @@ public class CornerCheck {
                     , blockSize, useHarrisDetector, k);
             Point[] pCorners = corners.toArray();
             List<Point> pointList = new ArrayList<>();
-            double maxX = 0d;
-            double maxY = 0d;
-            double minX = 10000d;
-            double minY = 100000d;
             for (int i = 0; i < pCorners.length; i++) {
                 Point p = new Point(pCorners[i].x + 324, pCorners[i].y + 402);
                 Imgproc.circle(dst, p, 2, new Scalar(0, 0, 0), Imgproc.FILLED);
             }
             Imgcodecs.imwrite("D:\\data\\allConers.jpg", dst);
             List<Point> cornerPoints = new ArrayList<>();
-            for (Point point : pointList) {
-                double getX = point.x;
-                double getY = point.y;
-                if ((getY >= (minY + 20) && getY <= (maxY - 20))) {
-                    Imgproc.circle(dst, point, 4, new Scalar(255, 255, 255), Imgproc.FILLED);
-                } else {
-                    cornerPoints.add(point);
-                    Imgproc.circle(dst, point, 4, new Scalar(0, 0, 0), Imgproc.FILLED);
-                }
-            }
 //            {139.0, 240.0} 左上 {144.0, 837.0} 左下
 //            {482.0, 238.0} 右上 {532.0, 825.0} 右下
             Collections.sort(cornerPoints, new Comparator<Point>() {
@@ -99,8 +68,9 @@ public class CornerCheck {
                 }
             });
             Imgcodecs.imwrite("D:\\data\\coners.jpg", dst);
-//            for (Point p : cornerPoints) {
-//            }
+            for (Point p : cornerPoints) {
+
+            }
 //            result.put("leftTop", cornerPoints.get(0));
 //            result.put("rightBottom", cornerPoints.get(3));
 //            if (cornerPoints.get(2).y > cornerPoints.get(1).y) {
@@ -254,7 +224,6 @@ public class CornerCheck {
                 System.out.println(imageGR.get((int) point.y, (int) point.x)[1]);
                 if (imageGR.get((int) point.y, (int) point.x)[1] >= 120) {
                     if (point.x <= rightDown.x) {
-                        System.out.println("greenPoint:" + point.toString());
                         checkPoints.add(point);
                     }
                 }

+ 0 - 1
jeecg-boot-module-system/src/main/java/org/jeecg/modules/opencv/utils/Perspective.java

@@ -48,7 +48,6 @@ public class Perspective {
             Imgcodecs.imwrite(targetFileName, dst);
         } catch (Exception e) {
             e.printStackTrace();
-            System.out.println("例外:" + e);
         }
     }
 

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

@@ -405,7 +405,7 @@ public class SysDictController {
 			@RequestParam(name="text") String text,
 			@RequestParam(name="code") String code,
 			@RequestParam(name="hasChildField") String hasChildField) {
-		Result<List<TreeSelectModel>> result = new Result<List<TreeSelectModel>>();
+		Result<List<TreeSelectModel>> result = new Result<>();
 		List<TreeSelectModel> ls = sysDictService.queryTreeList(tbname, text, code, pidField, pid,hasChildField);
 		result.setSuccess(true);
 		result.setResult(ls);

+ 42 - 9
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/SysUserController.java

@@ -1,5 +1,8 @@
 package org.jeecg.modules.system.controller;
 
+import cn.com.ctop.common.module.entity.SysRole;
+import cn.com.ctop.common.module.service.ISysRoleService;
+import cn.com.ctop.common.module.utils.Check;
 import cn.com.ctop.common.module.vo.SysDepartUsersVO;
 import cn.com.ctop.common.module.vo.SysUserRoleVO;
 import cn.com.ctop.common.module.vo.SysUserVo;
@@ -20,6 +23,8 @@ import org.jeecg.common.system.vo.LoginUser;
 import org.jeecg.common.util.PasswordUtil;
 import org.jeecg.common.util.RedisUtil;
 import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.ctop.entity.ProjectMember;
+import org.jeecg.modules.ctop.service.IProjectMemberService;
 import org.jeecg.modules.system.entity.SysDepart;
 import org.jeecg.modules.system.entity.SysUser;
 import org.jeecg.modules.system.entity.SysUserDepart;
@@ -58,24 +63,24 @@ public class SysUserController {
 
     @Autowired
     private ISysUserService sysUserService;
-
     @Autowired
     private ISysDepartService sysDepartService;
-
     @Autowired
     private ISysUserRoleService sysUserRoleService;
-
     @Autowired
     private ISysUserDepartService sysUserDepartService;
-
     @Autowired
     private ISysUserRoleService userRoleService;
-
     @Autowired
     private RedisUtil redisUtil;
-
     @Autowired
     private IUserCompanyService userCompanyService;
+    @Autowired
+    private ISysRoleService roleService;
+    @Autowired
+    private IProjectMemberService memberService;
+    @Autowired
+    private ISysDepartService departService;
 
 
     @RequestMapping(value = "/getRoleInfo", method = RequestMethod.GET)
@@ -169,7 +174,14 @@ public class SysUserController {
         String selectedRoles = jsonObject.getString("selectedroles");
         String selectedDeparts = jsonObject.getString("selecteddeparts");
         try {
+
             SysUser user = JSON.parseObject(jsonObject.toJSONString(), SysUser.class);
+            if (!Check.isNull(selectedDeparts)) {
+                SysDepart depart = departService.getById(selectedDeparts);
+                if (!Check.isNull(depart)) {
+                    user.setOrgCode(depart.getOrgCode());
+                }
+            }
             //设置创建时间
             user.setCreateTime(new Date());
             String salt = oConvertUtils.randomGen(8);
@@ -191,9 +203,8 @@ public class SysUserController {
         return result;
     }
 
-    @RequestMapping(value = "/edit", method = RequestMethod.PUT)
-    //	@RequiresPermissions("user:edit")
 
+    @RequestMapping(value = "/edit", method = RequestMethod.PUT)
     public Result<SysUser> edit(@RequestBody JSONObject jsonObject) {
         Result<SysUser> result = new Result<SysUser>();
         try {
@@ -206,11 +217,33 @@ public class SysUserController {
                 //String passwordEncode = PasswordUtil.encrypt(user.getUsername(), user.getPassword(), sysUser.getSalt());
                 user.setPassword(sysUser.getPassword());
                 String roles = jsonObject.getString("selectedroles");
-
                 String departs = jsonObject.getString("selecteddeparts");
+                if (!Check.isNull(departs)) {
+                    SysDepart depart = departService.getById(departs);
+                    if (!Check.isNull(depart)) {
+                        user.setOrgCode(depart.getOrgCode());
+                    }
+                }
                 sysUserService.editUserWithRole(user, roles);
                 sysUserService.editUserWithDepart(user, departs);
                 userCompanyService.addOrUpdateUserWithCompany(user);
+                if (!Check.isNull(roles)) {
+                    Thread thread = new Thread() {
+                        @Override
+                        public void run() {
+                            SysRole sysRole = roleService.getById(roles);
+                            if (!Check.isNull(sysRole)) {
+                                QueryWrapper<ProjectMember> memberQueryWrapper = new QueryWrapper<>();
+                                memberQueryWrapper.eq("user_id", user.getId());
+                                ProjectMember updateMember = new ProjectMember();
+                                updateMember.setRoleCode(sysRole.getRoleCode());
+                                memberService.update(updateMember, memberQueryWrapper);
+                            }
+                        }
+                    };
+                    thread.start();
+                }
+
                 result.success("修改成功!");
             }
         } catch (Exception e) {

+ 5 - 5
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/ISysCategoryService.java

@@ -1,13 +1,12 @@
 package org.jeecg.modules.system.service;
 
-import java.util.List;
-
 import com.alibaba.fastjson.JSONArray;
+import com.baomidou.mybatisplus.extension.service.IService;
 import org.jeecg.common.exception.JeecgBootException;
 import org.jeecg.modules.system.entity.SysCategory;
 import org.jeecg.modules.system.model.TreeSelectModel;
 
-import com.baomidou.mybatisplus.extension.service.IService;
+import java.util.List;
 
 /**
  * @Description: 分类字典
@@ -33,13 +32,14 @@ public interface ISysCategoryService extends IService<SysCategory> {
 	 * @param pcode
 	 * @return
 	 */
-	public List<TreeSelectModel> queryListByCode(String pcode) throws JeecgBootException;
+    List<TreeSelectModel> queryListByCode(String pcode) throws JeecgBootException;
 
     /**
 	  * 根据pid查询子节点集合
 	 * @param pid
 	 * @return
 	 */
-	public List<TreeSelectModel> queryListByPid(String pid);
+    List<TreeSelectModel> queryListByPid(String pid);
 
+    SysCategory getByCode(String getCode);
 }

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

@@ -121,4 +121,11 @@ public class SysCategoryServiceImpl extends ServiceImpl<SysCategoryMapper, SysCa
 		return baseMapper.queryListByPid(pid);
 	}
 
+	@Override
+	public SysCategory getByCode(String getCode) {
+		QueryWrapper<SysCategory>queryWrapper = new QueryWrapper<>();
+		queryWrapper.eq("code",getCode).orderByDesc("create_time").last("limit 1");
+		return this.getOne(queryWrapper);
+	}
+
 }

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

@@ -1,5 +1,5 @@
 server:
-  port: 8080
+  port: 8088
   ip: 39.106.184.70
   servlet:
     context-path: /jeecg-boot
@@ -95,18 +95,17 @@ spring:
         filters: stat,slf4j
         # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
         connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000
+#      datasource:
+#        master:
+#          url: jdbc:mysql://39.106.184.70:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false
+#          username: hcst
+#          password: test@20190531
       datasource:
         master:
           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
@@ -131,9 +130,16 @@ mybatis-plus:
       id-type: 4
       # 默认数据库表下划线命名
       table-underline: true
-    configuration:
-      # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用
-      log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+  configuration:
+    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+
+    # 这个配置会将执行的sql打印出来,在开发或测试的时候可以用
+      #log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
+  #分页pageHelper
+pagehelper:
+  helper-dialect: mysql
+  reasonable: true
+  support-methods-arguments: true
 #jeecg专用配置
 jeecg:
   ffmpeg:

+ 6 - 4
jeecg-boot-module-system/src/main/resources/application.yml

@@ -3,13 +3,15 @@ spring:
     active: @activatedProperties@
   application:
     name: system-web
-eureka:
-  client:
-    serviceUrl:
-      defaultZone: http://localhost:8761/eureka/
+#分页pageHelper
+pagehelper:
+  helper-dialect: mysql
+  reasonable: true
+  support-methods-arguments: true
 swagger:
   production: false
   basic:
     enable: true
     username: jeecg
     password: jeecg1314
+

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

@@ -1,18 +1,18 @@
 package org.jeecg;
 
+import cn.com.ctop.common.module.entity.BindAccountLogin;
 import cn.com.ctop.common.module.entity.CtopOauthToken;
-import cn.com.ctop.common.module.mapper.CtopOauthTokenMapper;
+import cn.com.ctop.common.module.service.IBindAccountLoginService;
 import cn.com.ctop.common.module.service.ICtopOauthTokenService;
 import cn.com.ctop.common.module.utils.CtopAdConstant;
-import cn.com.ctop.common.module.utils.HttpUtils;
-import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouHistoryReportTaskService;
-import cn.com.ctop.kuaishou.modules.batch.service.IKuaishouInterfaceService;
-import cn.com.ctop.toutiao.modules.material.service.IByteDanceAdvertiserDataService;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
+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.toutiao.modules.report.service.IBytedanceFundDailyService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.util.DateUtils;
-import org.jeecg.modules.ctop.service.IPerformanceSaleService;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -20,132 +20,92 @@ import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
 import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 
 @RunWith(SpringRunner.class)
 @SpringBootTest
 @Slf4j
 public class SampleTest {
     @Autowired
-    private IKuaishouInterfaceService kuaishouInterfaceService;
-
-
+    private IBindAccountLoginService bindAccountLoginService;
     @Autowired
-    private IKuaiShouHistoryReportTaskService reportTaskService;
+    private PangolinLoginService pangolinLoginService;
     @Autowired
-    private CtopOauthTokenMapper tokenMapper;
+    private PangolinCrawlerService pangolinCrawlerService;
     @Autowired
-    private ICtopOauthTokenService oauthTokenService;
-
+    private PangolinAppService pangolinAppService;
     @Test
-    public void kuaisShouReport() {
-        try {
-            oauthTokenService.getKuaiShouRefreshToken(4801802L, "3874f4adb984a371cf92e5fc9a585e6b", 1);
-        } catch (Exception e) {
-            e.printStackTrace();
+    public void testPangolinLogin(){
+        QueryWrapper<BindAccountLogin> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("login_type","pangolin");
+        queryWrapper.eq("status",1);
+        List<BindAccountLogin> list = bindAccountLoginService.list(queryWrapper);
+        if(list!=null&&!list.isEmpty()){
+            for (BindAccountLogin login:list) {
+                if(null==login.getCookie()||"".equals(login.getCookie().trim())){
+                    pangolinLoginService.pangolinLogin(login.getAccountName(), login.getPassword());
+                }
+            }
         }
     }
 
-    @Autowired
-    private ICtopOauthTokenService tokenService;
     @Test
-    public void wanHuaTong() {
-        String url = "https://ad.oceanengine.com/open_api/2/kaleidoscope/job/smart_cut/submit/";
-
-        JSONObject conditions = new JSONObject();
-        conditions.put("advertiser_id", "1659671533108238");
-        JSONObject job = new JSONObject();
-        job.put("job_conf_id", 10);
-        JSONArray input = new JSONArray();
-        JSONObject inputJson = new JSONObject();
-        inputJson.put("task_id", 1);
-        JSONArray videoIds = new JSONArray();
-        videoIds.add("v02033aa0000bpspgippskdk4jcuso80");
-        inputJson.put("video_ids", videoIds);
-        JSONArray music_id = new JSONArray();
-        JSONArray image_urls = new JSONArray();
-        JSONArray texts = new JSONArray();
-
-        texts.add("哈哈哈哈,这是一个测试文案");
-        inputJson.put("texts", texts);
-
-        JSONArray tts = new JSONArray();
-        tts.add("true");
-        inputJson.put("tts", tts);
-
-        JSONArray video_ratio = new JSONArray();
-        video_ratio.add("1");
-        inputJson.put("video_ratio", video_ratio);
-
-
-        JSONArray music_style = new JSONArray();
-        music_style.add("1");
-        inputJson.put("music_style", music_style);
-
-        JSONArray video_duration = new JSONArray();
-        video_duration.add("8");
-        inputJson.put("video_duration", video_duration);
-
-
-        JSONArray speed = new JSONArray();
-        speed.add("1.2");
-        inputJson.put("speed", speed);
-
-        job.put("input", inputJson);
-        job.put("mesg", "测试万花筒");
-        conditions.put("job", job);
-
-
-        JSONObject jsonObject = HttpUtils.bytedancePostRequest("f925c180e05d585f7a9fce048ba62eecc5dab7c2", url, conditions);
-        System.err.println(jsonObject);
-
-
+    public void testPangolinData(){
+        QueryWrapper<BindAccountLogin> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("login_type", "pangolin");
+        queryWrapper.eq("status", 1);
+        queryWrapper.isNotNull("cookie");
+        List<BindAccountLogin> list = bindAccountLoginService.list(queryWrapper);
+        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.getId()));
+                }
+            }
+        }
     }
 
+    @Autowired
+    private ICtopOauthTokenService tokenService;
+    @Autowired
+    private IBytedanceFundDailyService bytedanceFundDailyService;
+    static ExecutorService executorService = null;
 
-    @Test
-    public void testSalePerformance() {
-        performanceSaleService.loadSalsePerformance();
-    }
 
     @Test
-    public void loadBtPlanData() {
+    public void testflowFund(){
         List<CtopOauthToken> tokens = tokenService.getTokenListByType(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE);
+        if (null == tokens || tokens.size() <= 0) {
+            log.error("头条账户流水数据异常:未获取到可用的token");
+            return ;
+        }
+        CountDownLatch countDownLatch   = new CountDownLatch(tokens.size());
+        executorService = Executors.newFixedThreadPool(5);
         tokens.forEach(token -> {
-            advertiserDataService.getAdvertiserPlan(token, "", null, null);
+            executorService.submit(() -> {
+                try {
+                    for(int i=0;i<60;i++){
+                        String findDate = DateUtils.addDay(DateUtils.formatDate(),-i);
+                        bytedanceFundDailyService.loadFundDataByPage(token, findDate, findDate,1);
+                    }
+                }catch (Exception e){
+                }finally {
+                    countDownLatch.countDown();
+                }
+            });
         });
-    }
-
-    @Autowired
-    private IByteDanceAdvertiserDataService advertiserDataService;
-
-    @Autowired
-    private IPerformanceSaleService performanceSaleService;
-
-    @Autowired
-    private IKuaiShouHistoryReportTaskService historyReportTaskService;
-
-    @Test
-    public void testLoadData() throws Exception {
-        CtopOauthToken token = tokenService.getTokenByAccountId(5473041L);
-        String endDateStr = DateUtils.getDate("yyyy-MM-dd");
-        String startDate = DateUtils.addMonth(endDateStr, -6);
-
-        historyReportTaskService.createTask(token.getAccountId(), token.getAccessToken(), startDate, endDateStr, CtopAdConstant.KUAISHOU_LOAD_JOB_TYPE_HISTORY);
-    }
-
-    @Test
-    public void suZhao() {
-        Long accountId = 3917130L;
-        String token = "0a42e23921e486108105263e75561404";
-//        kuaishouInterfaceService.getVideoList("e91c778d7de1bd0e9d8f3213d1e0e57c",3820093L, null,null,1);
-    }
-
-    @Test
-    public void testLog() {
         try {
-            System.out.println(1 / 0);
-        } catch (Exception e) {
-            log.error(e.getMessage(), e);
+            countDownLatch.await();
+        } catch (InterruptedException e) {
+            e.printStackTrace();
         }
     }
 

+ 15 - 0
module-common/pom.xml

@@ -11,6 +11,7 @@
 
     <groupId>cn.com.ctop</groupId>
     <artifactId>module-common</artifactId>
+    <version>2.0.2</version>
 
     <name>module-common</name>
     <!-- FIXME change it to the project's website -->
@@ -64,6 +65,20 @@
             <version>3.3.2</version>
         </dependency>
 
+        <!-- xxl-rpc-core -->
+        <dependency>
+            <groupId>com.xuxueli</groupId>
+            <artifactId>xxl-rpc-core</artifactId>
+            <version>1.5.0</version>
+        </dependency>
+
+        <!-- groovy-all -->
+        <dependency>
+            <groupId>org.codehaus.groovy</groupId>
+            <artifactId>groovy</artifactId>
+            <version>${groovy.version}</version>
+        </dependency>
+
     </dependencies>
 
 

+ 2 - 0
module-common/src/main/java/cn/com/ctop/common/module/entity/BindAccountLogin.java

@@ -101,4 +101,6 @@ public class BindAccountLogin {
     private Date updateTime;
 
     private String cookie;
+
+    private Long projectId;
 }

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

@@ -20,7 +20,7 @@ public interface SysRoleMapper extends BaseMapper<SysRole> {
     /**
      * 根据roleCode获取相对应的用户信息
      */
-    List<UserDto> getUserByRoleCode(@Param("roleCode") String roleCode);
+
 
     String getRoleIdByRoleCode(@Param("roleCode") String roleCode);
 

+ 0 - 16
module-common/src/main/java/cn/com/ctop/common/module/mapper/xml/SysRoleMapper.xml

@@ -2,22 +2,6 @@
 <!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.SysRoleMapper">
 
-	<!-- 根据rolecode获取相对应角色所有的人 -->
-    <select id="getUserByRoleCode" resultType="cn.com.ctop.common.module.vo.UserDto">
-			select
-			a.id as userId,
-			a.realname,
-			c.id as roleId,
-			c.role_name as roleName
-		from
-		sys_user a
-		left join sys_user_role b on a.id = b.user_id
-		left join sys_role c on b.role_id = c.id
-		left join sys_
-        where
-        c.role_code = #{roleCode}
-	</select>
-
 	<!-- 根据roleCode获取roleId -->
 	<select id="getRoleIdByRoleCode" resultType="java.lang.String">
 		select

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

@@ -17,4 +17,6 @@ public interface IBindAccountLoginService extends IService<BindAccountLogin> {
      * @return
      */
     BindAccountLogin selectByAccountId(String accountId);
+
+    BindAccountLogin getByParams(String accountName, String password, String advertiserId);
 }

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

@@ -1,9 +1,11 @@
 package cn.com.ctop.common.module.service;
 
 import cn.com.ctop.common.module.entity.UserAllocation;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.service.IService;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Description: 用户分配
@@ -16,4 +18,8 @@ public interface IUserAllocationService extends IService<UserAllocation> {
     UserAllocation getByAccountId(Long accountId);
 
     List<UserAllocation> getByProjectId(Long projectId, String systemType);
+
+    Map<String, Object> getPangolinAccountListByParams(String userId, JSONObject data);
+
+    Map<String, Object> getPangolinProjectListByParams(String userId);
 }

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

@@ -9,6 +9,7 @@ import cn.com.ctop.common.module.utils.PropertiesUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Primary;
 import org.springframework.stereotype.Service;
 
 import java.io.UnsupportedEncodingException;
@@ -25,6 +26,7 @@ import java.util.Map;
  */
 @Slf4j
 @Service
+@Primary
 public class BindAccountAuthServiceImpl extends ServiceImpl<BindAccountAuthMapper, BindAccountAuth> implements IBindAccountAuthService {
 
     @Autowired

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

@@ -6,6 +6,7 @@ import cn.com.ctop.common.module.service.IBindAccountLoginService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Primary;
 import org.springframework.stereotype.Service;
 
 /**
@@ -16,6 +17,7 @@ import org.springframework.stereotype.Service;
  */
 @Slf4j
 @Service
+@Primary
 public class BindAccountLoginServiceImpl extends ServiceImpl<BindAccountLoginMapper, BindAccountLogin> implements IBindAccountLoginService {
     @Override
     public BindAccountLogin selectByAccountId(String accountId) {
@@ -23,4 +25,20 @@ public class BindAccountLoginServiceImpl extends ServiceImpl<BindAccountLoginMap
         queryWrapper.eq("account_id", accountId).orderByDesc("id").last("limit 1");
         return this.getOne(queryWrapper);
     }
+
+    @Override
+    public BindAccountLogin getByParams(String accountName, String password, String advertiserId) {
+        QueryWrapper<BindAccountLogin> queryWrapper = new QueryWrapper<>();
+        if(null!=accountName&&!"".equals(accountName)){
+            queryWrapper.eq("account_name",accountName);
+        }
+        if(null!=password&&!"".equals(password)){
+            queryWrapper.eq("password",password);
+        }
+        if(null!=advertiserId&&!"".equals(advertiserId)){
+            queryWrapper.eq("advertiser_id",advertiserId);
+        }
+        queryWrapper.orderByDesc("create_time").last("limit 1");
+        return this.getOne(queryWrapper);
+    }
 }

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

@@ -8,10 +8,12 @@ import me.chanjar.weixin.cp.api.impl.WxCpOAuth2ServiceImpl;
 import me.chanjar.weixin.cp.api.impl.WxCpServiceImpl;
 import me.chanjar.weixin.cp.bean.WxCpMessage;
 import me.chanjar.weixin.cp.config.impl.WxCpDefaultConfigImpl;
+import org.springframework.context.annotation.Primary;
 import org.springframework.stereotype.Service;
 
 @Slf4j
 @Service
+@Primary
 public class CorpWeixinServiceImpl implements ICorpWeixinService {
     public static void main(String[] args) {
         val configStorage = new WxCpDefaultConfigImpl();

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

@@ -3,6 +3,7 @@ package cn.com.ctop.common.module.service.impl;
 import cn.com.ctop.common.module.entity.CtopCorpWexinUser;
 import cn.com.ctop.common.module.mapper.CtopCorpWexinUserMapper;
 import cn.com.ctop.common.module.service.ICtopCorpWexinUserService;
+import org.springframework.context.annotation.Primary;
 import org.springframework.stereotype.Service;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -15,6 +16,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  * @date 2019-12-08
  */
 @Service
+@Primary
 public class CtopCorpWexinUserServiceImpl extends ServiceImpl<CtopCorpWexinUserMapper, CtopCorpWexinUser> implements ICtopCorpWexinUserService {
 
 }

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

@@ -23,8 +23,10 @@ import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClientBuilder;
 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;
 import java.io.*;
 import java.net.HttpURLConnection;
 import java.net.URI;
@@ -41,6 +43,7 @@ import java.util.Map;
  */
 @Slf4j
 @Service
+@Primary
 public class FileInfoServiceImpl extends ServiceImpl<FileInfoMapper, FileInfo> implements IFileInfoService {
     @Value("${jeecg.path.image-upload}")
     private String imageUploadPath;
@@ -48,13 +51,13 @@ public class FileInfoServiceImpl extends ServiceImpl<FileInfoMapper, FileInfo> i
     private String videoUploadPath;
     @Autowired
     FileInfoMapper fileInfoMapper;
-    @Autowired
-    private ICtopOauthTokenService tokenService;
+    @Resource
+    private ICtopOauthTokenService ctopOauthTokenService;
 
     @Override
     public void uploadVideoToBytedance(String accountId, String videoUrl) {
         try {
-            CtopOauthToken token = tokenService.getOauthTokenByAccountId(accountId);
+            CtopOauthToken token = ctopOauthTokenService.getOauthTokenByAccountId(accountId);
             uploadAdvideo(token, videoUrl, token.getAccountId() + "");
             JSONObject jsonObject = videoUpload(token, videoUrl);
             log.info("头条上传素材返回信息:{},accountId:{}", jsonObject, accountId);
@@ -68,7 +71,7 @@ public class FileInfoServiceImpl extends ServiceImpl<FileInfoMapper, FileInfo> i
     public Map<String, Object> uploadImageToBytedance(String accountId, String imageUrl) {
         Map<String, Object> resultMap = new HashMap<>();
         try {
-            CtopOauthToken token = tokenService.getOauthTokenByAccountId(accountId);
+            CtopOauthToken token = ctopOauthTokenService.getOauthTokenByAccountId(accountId);
             JSONObject jsonObject = imageUpload(token, String.valueOf(token.getAccountId()), imageUrl);
             log.info("头条上传图片素材返回信息:{},accountId:{}", jsonObject, accountId);
         } catch (Exception e) {
@@ -88,7 +91,7 @@ public class FileInfoServiceImpl extends ServiceImpl<FileInfoMapper, FileInfo> i
 
     @Override
     public Map<String, Object> getCreativeWords(Long accountId) {
-        CtopOauthToken token = tokenService.getOauthTokenByAccountId(accountId + "");
+        CtopOauthToken token = ctopOauthTokenService.getOauthTokenByAccountId(accountId + "");
         return getCreativeWord(token, accountId);
     }
 

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

@@ -11,6 +11,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.context.annotation.Primary;
 import org.springframework.stereotype.Service;
 
 import java.util.Date;
@@ -22,6 +23,7 @@ import java.util.List;
  */
 @Slf4j
 @Service
+@Primary
 public class IpPoolServiceImpl extends ServiceImpl<IpPoolMapper, IpPool> implements IIpPoolService {
 
     @Override

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

@@ -7,6 +7,7 @@ import cn.com.ctop.common.module.utils.Check;
 import cn.com.ctop.common.module.utils.CorpWexinUtils;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Primary;
 import org.springframework.stereotype.Service;
 
 /**
@@ -17,6 +18,7 @@ import org.springframework.stereotype.Service;
  * @date 2019-12-08
  */
 @Service
+@Primary
 public class MailLogServiceImpl extends ServiceImpl<MailLogMapper, MailLog> implements IMailLogService {
     @Autowired
     private MailLogMapper mailLogMapper;

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

@@ -4,6 +4,7 @@ import cn.com.ctop.common.module.entity.MaterialAscription;
 import cn.com.ctop.common.module.mapper.MaterialAscriptionMapper;
 import cn.com.ctop.common.module.service.IMaterialAscriptionService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.context.annotation.Primary;
 import org.springframework.stereotype.Service;
 
 /**
@@ -14,6 +15,7 @@ import org.springframework.stereotype.Service;
  * @date 2019-11-23
  */
 @Service
+@Primary
 public class MaterialAscriptionServiceImpl extends ServiceImpl<MaterialAscriptionMapper, MaterialAscription> implements IMaterialAscriptionService {
 
 }

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

@@ -17,8 +17,10 @@ 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;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
@@ -40,13 +42,12 @@ import java.util.regex.Pattern;
  */
 @Slf4j
 @Service
+@Primary
 public class MaterialInfoServiceImpl extends ServiceImpl<MaterialInfoMapper, MaterialInfo> implements IMaterialInfoService {
     private static ExecutorService uploadExecutorService = Executors.newFixedThreadPool(5);
-    static ExecutorService executorService = Executors.newFixedThreadPool(4);
-
-    @Autowired
+    @Resource
     private IVideoWatermarkTemplateService videoWatermarkTemplateService;
-    @Autowired
+    @Resource
     private IVideoWatermarkTaskService videoWatermarkTaskService;
     @Autowired
     private MaterialInfoMapper materialInfoMapper;
@@ -175,7 +176,7 @@ public class MaterialInfoServiceImpl extends ServiceImpl<MaterialInfoMapper, Mat
         return resultMap;
     }
 
-    @Autowired
+    @Resource
     private IMaterialCutFrameService materialCutFrameService;
 
     private void insertMaterialInfo(String url, String type, JSONObject jsonObject) {

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

@@ -5,6 +5,7 @@ import cn.com.ctop.common.module.mapper.MaterialParameterMapper;
 import cn.com.ctop.common.module.service.IMaterialParameterService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.context.annotation.Primary;
 import org.springframework.stereotype.Service;
 
 /**
@@ -15,6 +16,7 @@ import org.springframework.stereotype.Service;
  * @date 2019-11-23
  */
 @Service
+@Primary
 public class MaterialParameterServiceImpl extends ServiceImpl<MaterialParameterMapper, MaterialParameter> implements IMaterialParameterService {
 
     @Override

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

@@ -4,6 +4,7 @@ import cn.com.ctop.common.module.entity.MaterialTag;
 import cn.com.ctop.common.module.mapper.MaterialTagMapper;
 import cn.com.ctop.common.module.service.IMaterialTagService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.context.annotation.Primary;
 import org.springframework.stereotype.Service;
 
 /**
@@ -14,6 +15,7 @@ import org.springframework.stereotype.Service;
  * @date 2019-11-23
  */
 @Service
+@Primary
 public class MaterialTagServiceImpl extends ServiceImpl<MaterialTagMapper, MaterialTag> implements IMaterialTagService {
 
 }

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

@@ -5,6 +5,7 @@ import cn.com.ctop.common.module.mapper.SysRoleMapper;
 import cn.com.ctop.common.module.service.ISysRoleService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Primary;
 import org.springframework.stereotype.Service;
 
 /**
@@ -16,6 +17,7 @@ import org.springframework.stereotype.Service;
  * @since 2018-12-19
  */
 @Service
+@Primary
 public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRole> implements ISysRoleService {
     @Autowired
     private SysRoleMapper sysRoleMapper;

+ 41 - 0
module-common/src/main/java/cn/com/ctop/common/module/service/impl/UserAllocationServiceImpl.java

@@ -3,11 +3,18 @@ package cn.com.ctop.common.module.service.impl;
 import cn.com.ctop.common.module.entity.UserAllocation;
 import cn.com.ctop.common.module.mapper.UserAllocationMapper;
 import cn.com.ctop.common.module.service.IUserAllocationService;
+import cn.com.ctop.common.module.utils.CtopAdConstant;
+import cn.com.ctop.common.module.utils.ResultMapUtils;
+import cn.com.ctop.common.module.utils.StatusCode;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.context.annotation.Primary;
 import org.springframework.stereotype.Service;
 
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Description: 用户分配
@@ -16,6 +23,7 @@ import java.util.List;
  * @Version: V1.0
  */
 @Service
+@Primary
 public class UserAllocationServiceImpl extends ServiceImpl<UserAllocationMapper, UserAllocation> implements IUserAllocationService {
 
     @Override
@@ -37,4 +45,37 @@ public class UserAllocationServiceImpl extends ServiceImpl<UserAllocationMapper,
         queryWrapper.orderByDesc("id");
         return this.list(queryWrapper);
     }
+
+    @Override
+    public Map<String, Object> getPangolinAccountListByParams(String userId, JSONObject data) {
+        Map<String,Object>result = new HashMap<>();
+        Long projectId = data.getLong("project_id");
+        QueryWrapper<UserAllocation>queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("media_id", CtopAdConstant.PLATFORM_TYPE_PANGOLIN);
+        if(null != userId&&!"".equals(userId.trim())){
+            queryWrapper.eq("user_id",userId);
+        }
+        if(null != projectId&&projectId != 0){
+            queryWrapper.eq("project_id",projectId);
+        }
+        List<UserAllocation> allocations = this.list(queryWrapper);
+        ResultMapUtils.setResultMap(result, StatusCode.COMMON_SUCCESS);
+        result.put("data",allocations);
+        return result;
+    }
+
+    @Override
+    public Map<String, Object> getPangolinProjectListByParams(String userId) {
+        Map<String,Object>result = new HashMap<>();
+        QueryWrapper<UserAllocation>queryWrapper = new QueryWrapper<>();
+        queryWrapper.select("distinct project_id,project_name");
+        queryWrapper.eq("media_id",CtopAdConstant.PLATFORM_TYPE_PANGOLIN);
+        if(null != userId&&!"".equals(userId.trim())){
+            queryWrapper.eq("user_id",userId);
+        }
+        List<UserAllocation> allocations = this.list(queryWrapper);
+        ResultMapUtils.setResultMap(result, StatusCode.COMMON_SUCCESS);
+        result.put("data",allocations);
+        return result;
+    }
 }

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

@@ -3,6 +3,7 @@ package cn.com.ctop.common.module.service.impl;
 import cn.com.ctop.common.module.entity.VideoMergeTask;
 import cn.com.ctop.common.module.mapper.VideoMergeTaskMapper;
 import cn.com.ctop.common.module.service.IVideoMergeTaskService;
+import org.springframework.context.annotation.Primary;
 import org.springframework.stereotype.Service;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -14,6 +15,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  * @version V1.0
  */
 @Service
+@Primary
 public class VideoMergeTaskServiceImpl extends ServiceImpl<VideoMergeTaskMapper, VideoMergeTask> implements IVideoMergeTaskService {
 
 }

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

@@ -3,6 +3,7 @@ package cn.com.ctop.common.module.service.impl;
 import cn.com.ctop.common.module.entity.VideoPart;
 import cn.com.ctop.common.module.mapper.VideoPartMapper;
 import cn.com.ctop.common.module.service.IVideoPartService;
+import org.springframework.context.annotation.Primary;
 import org.springframework.stereotype.Service;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -14,6 +15,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  * @version V1.0
  */
 @Service
+@Primary
 public class VideoPartServiceImpl extends ServiceImpl<VideoPartMapper, VideoPart> implements IVideoPartService {
 
 }

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

@@ -3,6 +3,7 @@ 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;
@@ -14,6 +15,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  * @version V1.0
  */
 @Service
+@Primary
 public class VideoWatermarkTemplateServiceImpl extends ServiceImpl<VideoWatermarkTemplateMapper, VideoWatermarkTemplate> implements IVideoWatermarkTemplateService {
 
 }

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

@@ -8,9 +8,11 @@ import java.math.BigDecimal;
 public class CtopAdConstant {
     public static final String PLATFORM_TYPE_BYTEDANCE = "1";
     public static final String PLATFORM_TYPE_KUAISHOU = "2";
+    public static final String PLATFORM_TYPE_PANGOLIN = "3";
 
     public static final String PLATFORM_TYPE_BYTEDANCE_PY = "bytedance";
     public static final String PLATFORM_TYPE_KUAISHOU_PY = "kuaishou";
+    public static final String PLATFORM_TYPE_PANGOLIN_PY = "pangolin";
 
     public static final String BYTEDANCE_REPORT_TYPE_DAILY = "STAT_TIME_GRANULARITY_DAILY";
     public static final String BYTEDANCE_REPORT_TYPE_HOURLY = "STAT_TIME_GRANULARITY_HOURLY";
@@ -71,4 +73,7 @@ public class CtopAdConstant {
     public static final Integer COMMON_STATUS_ENABLED = 1;
 
     public static final Integer COMMON_STATUS_NOT_ENABLED = 0;
+
+    public static final String COMMON_ORDER_TYPE_ASC = "asc";
+    public static final String COMMON_ORDER_TYPE_DESC = "desc";
 }

+ 0 - 5
module-common/src/main/java/cn/com/ctop/common/module/utils/LoadFileUtil.java

@@ -108,11 +108,6 @@ public class LoadFileUtil {
         return DigestUtils.md5Hex(inputStream);
     }
 
-
-    public static void main(String[] args) throws IOException {
-        System.out.println(LoadFileUtil.getMD5("D://video/BMjAyMDAzMDQxODMyMTlfMTU3ODQ0ODY5MV8yNDQ1ODc0Mzk1OF8wXzM=_b_Bd696ca7f28234aac3713b18edd139469.mp4"));
-    }
-
     public static void checkFile(String filePackageName) {
         File file = new File(filePackageName);
         if (!file.exists()) {

+ 0 - 11
module-common/src/main/java/cn/com/ctop/common/module/utils/OSSUtils.java

@@ -71,20 +71,9 @@ public class OSSUtils {
             UploadFileResult uploadResult = ossClient.uploadFile(uploadFileRequest);
 
             CompleteMultipartUploadResult multipartUploadResult = uploadResult.getMultipartUploadResult();
-            System.out.println(multipartUploadResult.getETag());
 
         } catch (OSSException oe) {
-            System.out.println("Caught an OSSException, which means your request made it to OSS, "
-                    + "but was rejected with an error response for some reason.");
-            System.out.println("Error Message: " + oe.getErrorMessage());
-            System.out.println("Error Code:       " + oe.getErrorCode());
-            System.out.println("Request ID:      " + oe.getRequestId());
-            System.out.println("Host ID:           " + oe.getHostId());
         } catch (ClientException ce) {
-            System.out.println("Caught an ClientException, which means the client encountered "
-                    + "a serious internal problem while trying to communicate with OSS, "
-                    + "such as not being able to access the network.");
-            System.out.println("Error Message: " + ce.getMessage());
         } catch (Throwable e) {
             e.printStackTrace();
         } finally {

+ 56 - 0
module-common/src/main/java/cn/com/ctop/common/module/utils/StringUtils.java

@@ -21,6 +21,62 @@ public class StringUtils {
         return list;
     }
 
+    /**
+     * 将下划线风格转换为驼峰风格
+     * @param inputString
+     * @return
+     */
+    public static String underlineToCamehunp(String inputString){
+        StringBuilder sb = new StringBuilder();
+        boolean nextUppercase = false;
+        for (int i = 0; i < inputString.length(); i++) {
+            char c = inputString.charAt(i);
+            if (c == '_') {
+                if (sb.length()>0) {
+                    nextUppercase = true;
+                }
+            }else {
+                if (nextUppercase) {
+                    sb.append(Character.toUpperCase(c));
+                    nextUppercase = false;
+                }else {
+                    sb.append(Character.toLowerCase(c));
+                }
+            }
+        }
+        return sb.toString();
+    }
+    private static Pattern linePattern = Pattern.compile("_(\\w)");
+    /** 下划线转驼峰 */
+    public static String lineToHump(String str) {
+        str = str.toLowerCase();
+        Matcher matcher = linePattern.matcher(str);
+        StringBuffer sb = new StringBuffer();
+        while (matcher.find()) {
+            matcher.appendReplacement(sb, matcher.group(1).toUpperCase());
+        }
+        matcher.appendTail(sb);
+        return sb.toString();
+    }
+
+    /** 驼峰转下划线(简单写法,效率低于{@link #humpToLine2(String)}) */
+    public static String humpToLine(String str) {
+        return str.replaceAll("[A-Z]", "_$0").toLowerCase();
+    }
+
+    private static Pattern humpPattern = Pattern.compile("[A-Z]");
+
+    /** 驼峰转下划线,效率比上面高 */
+    public static String humpToLine2(String str) {
+        Matcher matcher = humpPattern.matcher(str);
+        StringBuffer sb = new StringBuffer();
+        while (matcher.find()) {
+            matcher.appendReplacement(sb, "_" + matcher.group(0).toLowerCase());
+        }
+        matcher.appendTail(sb);
+        return sb.toString();
+    }
+
     public static String replaceBlank(String str) {
         String dest = "";
         if (str!=null) {

xxl-job-core/src/main/java/com/xxl/job/core/biz/AdminBiz.java → module-common/src/main/java/com/xxl/job/core/biz/AdminBiz.java


xxl-job-core/src/main/java/com/xxl/job/core/biz/ExecutorBiz.java → module-common/src/main/java/com/xxl/job/core/biz/ExecutorBiz.java


xxl-job-core/src/main/java/com/xxl/job/core/biz/client/AdminBizClient.java → module-common/src/main/java/com/xxl/job/core/biz/client/AdminBizClient.java


xxl-job-core/src/main/java/com/xxl/job/core/biz/impl/ExecutorBizImpl.java → module-common/src/main/java/com/xxl/job/core/biz/impl/ExecutorBizImpl.java


xxl-job-core/src/main/java/com/xxl/job/core/biz/model/HandleCallbackParam.java → module-common/src/main/java/com/xxl/job/core/biz/model/HandleCallbackParam.java


xxl-job-core/src/main/java/com/xxl/job/core/biz/model/LogResult.java → module-common/src/main/java/com/xxl/job/core/biz/model/LogResult.java


xxl-job-core/src/main/java/com/xxl/job/core/biz/model/RegistryParam.java → module-common/src/main/java/com/xxl/job/core/biz/model/RegistryParam.java


xxl-job-core/src/main/java/com/xxl/job/core/biz/model/ReturnT.java → module-common/src/main/java/com/xxl/job/core/biz/model/ReturnT.java


xxl-job-core/src/main/java/com/xxl/job/core/biz/model/TriggerParam.java → module-common/src/main/java/com/xxl/job/core/biz/model/TriggerParam.java


xxl-job-core/src/main/java/com/xxl/job/core/enums/ExecutorBlockStrategyEnum.java → module-common/src/main/java/com/xxl/job/core/enums/ExecutorBlockStrategyEnum.java


xxl-job-core/src/main/java/com/xxl/job/core/enums/RegistryConfig.java → module-common/src/main/java/com/xxl/job/core/enums/RegistryConfig.java


xxl-job-core/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java → module-common/src/main/java/com/xxl/job/core/executor/XxlJobExecutor.java


xxl-job-core/src/main/java/com/xxl/job/core/executor/impl/XxlJobSpringExecutor.java → module-common/src/main/java/com/xxl/job/core/executor/impl/XxlJobSpringExecutor.java


xxl-job-core/src/main/java/com/xxl/job/core/glue/GlueFactory.java → module-common/src/main/java/com/xxl/job/core/glue/GlueFactory.java


xxl-job-core/src/main/java/com/xxl/job/core/glue/GlueTypeEnum.java → module-common/src/main/java/com/xxl/job/core/glue/GlueTypeEnum.java


xxl-job-core/src/main/java/com/xxl/job/core/glue/impl/SpringGlueFactory.java → module-common/src/main/java/com/xxl/job/core/glue/impl/SpringGlueFactory.java


xxl-job-core/src/main/java/com/xxl/job/core/handler/IJobHandler.java → module-common/src/main/java/com/xxl/job/core/handler/IJobHandler.java


+ 20 - 0
module-common/src/main/java/com/xxl/job/core/handler/annotation/JobHandler.java

@@ -0,0 +1,20 @@
+package com.xxl.job.core.handler.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * annotation for job handler
+ *
+ * will be replaced by {@link XxlJob}
+ *
+ * @author 2016-5-17 21:06:49
+ */
+@Target({ElementType.TYPE})
+@Retention(RetentionPolicy.RUNTIME)
+@Inherited
+@Deprecated
+public @interface JobHandler {
+
+    String value();
+
+}

xxl-job-core/src/main/java/com/xxl/job/core/handler/annotation/XxlJob.java → module-common/src/main/java/com/xxl/job/core/handler/annotation/XxlJob.java


xxl-job-core/src/main/java/com/xxl/job/core/handler/impl/GlueJobHandler.java → module-common/src/main/java/com/xxl/job/core/handler/impl/GlueJobHandler.java


xxl-job-core/src/main/java/com/xxl/job/core/handler/impl/MethodJobHandler.java → module-common/src/main/java/com/xxl/job/core/handler/impl/MethodJobHandler.java


xxl-job-core/src/main/java/com/xxl/job/core/handler/impl/ScriptJobHandler.java → module-common/src/main/java/com/xxl/job/core/handler/impl/ScriptJobHandler.java


xxl-job-core/src/main/java/com/xxl/job/core/log/XxlJobFileAppender.java → module-common/src/main/java/com/xxl/job/core/log/XxlJobFileAppender.java


xxl-job-core/src/main/java/com/xxl/job/core/log/XxlJobLogger.java → module-common/src/main/java/com/xxl/job/core/log/XxlJobLogger.java


xxl-job-core/src/main/java/com/xxl/job/core/thread/ExecutorRegistryThread.java → module-common/src/main/java/com/xxl/job/core/thread/ExecutorRegistryThread.java


xxl-job-core/src/main/java/com/xxl/job/core/thread/JobLogFileCleanThread.java → module-common/src/main/java/com/xxl/job/core/thread/JobLogFileCleanThread.java


+ 0 - 0
xxl-job-core/src/main/java/com/xxl/job/core/thread/JobThread.java


Неке датотеке нису приказане због велике количине промена