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

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

 Conflicts:
	jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/TestController.java
sunzhen пре 5 година
родитељ
комит
9abdcdc6c7
14 измењених фајлова са 913 додато и 173 уклоњено
  1. 79 135
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/TestController.java
  2. 2 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/controller/PerformanceController2.java
  3. 1 1
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/IPerformanceService2.java
  4. 147 9
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/PerformanceServiceImpl2.java
  5. 4 0
      module-common/src/main/java/cn/com/ctop/common/module/utils/LoadFileUtil.java
  6. 26 0
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/controller/PerformanceOptimizerController.java
  7. 10 10
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/mapper/xml/PerformanceMapper.xml
  8. 6 0
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/service/IPerformanceOptimizerService.java
  9. 346 12
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/service/impl/PerformanceOptimizerServiceImpl.java
  10. 34 0
      performance-appraisal/src/main/java/cn/com/ctop/userefficientvideomap/entity/TransferorAccountDTO.java
  11. 3 0
      performance-appraisal/src/main/java/cn/com/ctop/userefficientvideomap/entity/UserEfficientVideoMap.java
  12. 33 2
      performance-appraisal/src/main/java/cn/com/ctop/userefficientvideomap/mapper/UserEfficientVideoMapMapper.java
  13. 218 3
      performance-appraisal/src/main/java/cn/com/ctop/userefficientvideomap/mapper/xml/UserEfficientVideoMapMapper.xml
  14. 4 0
      performance-appraisal/src/main/java/cn/com/ctop/uservideomap/entity/UserVideoMap.java

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

@@ -90,6 +90,7 @@ public class TestController {
     private IKuaishouInterfaceService kuaishouInterfaceService;
 
 
+
     @GetMapping(value = "/getHistoryData")
     public String getHistoryData() {
         Result<String> result = new Result<String>();
@@ -98,13 +99,19 @@ public class TestController {
             String startDate = DateUtils.addMonth(endDateStr, -6);
             QueryWrapper<CtopOauthToken> tokenQueryWrapper = new QueryWrapper<>();
             tokenQueryWrapper.eq("media_id", 2);
-            List<CtopOauthToken> ctopOauthTokens = oauthTokenMapper.selectList(tokenQueryWrapper);
-            if (!Check.isNull(ctopOauthTokens)) {
-                for (CtopOauthToken token : ctopOauthTokens) {
-                    historyReportTaskService.createTask(token.getAccountId(), token.getAccessToken(), startDate, endDateStr, CtopAdConstant.KUAISHOU_LOAD_JOB_TYPE_HISTORY);
-                }
+            System.err.println(startDate);
+            System.err.println(endDateStr);
 
-            }
+
+            //List<CtopOauthToken> ctopOauthTokens = oauthTokenMapper.selectList(tokenQueryWrapper);
+            //if (!Check.isNull(ctopOauthTokens)) {
+                //for (CtopOauthToken token : ctopOauthTokens) {
+                    //if ("3768019".equals(token.getAccountId())) {
+                        historyReportTaskService.createTask(3768019L, "0fb5f7dadd26b265979b1a8956950008", startDate, endDateStr, CtopAdConstant.KUAISHOU_LOAD_JOB_TYPE_HISTORY);
+
+                    //}
+                //}
+            //}
         } catch (Exception e) {
             e.printStackTrace();
             result.setSuccess(false);
@@ -121,8 +128,13 @@ public class TestController {
             String startDate = DateUtils.addMonth(endDateStr, -6);
             QueryWrapper<CtopOauthToken> tokenQueryWrapper = new QueryWrapper<>();
             tokenQueryWrapper.eq("media_id", 2);
+            System.err.println(startDate);
+            System.err.println(endDateStr);
+
+
             historyReportTaskService.getTaskList();
 
+
         } catch (Exception e) {
             e.printStackTrace();
             result.setSuccess(false);
@@ -163,7 +175,7 @@ public class TestController {
         return "Success";
     }
 
-    static ExecutorService executorService = Executors.newFixedThreadPool(10);
+    static ExecutorService executorService = Executors.newFixedThreadPool(5);
 
     @GetMapping(value = "/getVideoAndImage")
     public String getVideoAndImage() {
@@ -175,7 +187,7 @@ public class TestController {
                 @Override
                 public void run() {
                     kuaishouInterfaceService.getVideoList2(token, null, null, 1);
-                    kuaishouInterfaceService.getImageList2(token, null, null, 1);
+                    //kuaishouInterfaceService.getImageList2(token, null, null, 1);
                     //   kuaishouInterfaceService.getCreativeList2(token, null, null, 1);
                 }
             });
@@ -195,6 +207,7 @@ public class TestController {
                 @Override
                 public void run() {
                     try {
+                        System.err.println("获取创意,accountId:" + token.getAccountId());
                         kuaishouInterfaceService.getCreativeList(token, null, null);
                         //  kuaishouInterfaceService.getVideoList2(token, null, null,1);
                         //3: 获取图片信息数据
@@ -250,6 +263,7 @@ public class TestController {
                 oauthTokenQueryWrapper.eq("account_id", accountId);
                 CtopOauthToken ctopOauthToken = oauthTokenMapper.selectOne(oauthTokenQueryWrapper);
 
+                System.err.println("创意报表accountId:" + ctopOauthToken.getAccountId());
                 QueryWrapper<KuaiShouCampaign> campaignQueryWrapper = new QueryWrapper<>();
                 campaignQueryWrapper.eq("account_id", accountId);
                 List<KuaiShouCampaign> list = campaignService.list(campaignQueryWrapper);
@@ -267,26 +281,6 @@ public class TestController {
         thread.start();
     }
 
-    @GetMapping("loadBytedanceHistoryData")
-    public Map<String, Object> loadBytedanceHistoryData() {
-        Map<String, Object> result = new HashMap<>();
-        //1:查询所有头条的token数据
-        List<CtopOauthToken> tokens = tokenService.getTokenListByType(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE);
-        if (null != tokens && tokens.size() > 0) {
-            tokens.forEach(token -> {
-                //拉取往期数据
-                executorService.submit(new Runnable() {
-                    @Override
-                    public void run() {
-                        reportService.loadBytedanceHistoryData(token);
-                    }
-                });
-            });
-        }
-        ResultMapUtils.setResultMap(result, StatusCode.COMMON_SUCCESS);
-        return result;
-    }
-
 
     @Autowired
     private IUserAllocationService userAllocationService;
@@ -364,6 +358,7 @@ public class TestController {
     public static void main(String[] args) throws ParseException {
         String date = DateUtils.getDate("yyyy-MM-dd");
         String anotherDay = DateUtils.getAnotherDay("yyyy-MM-dd", date, -1);
+        System.err.println(anotherDay);
     }
 
 
@@ -375,9 +370,11 @@ public class TestController {
         oauthTokenQueryWrapper.last("limit 1");
         CtopOauthToken token = oauthTokenMapper.selectOne(oauthTokenQueryWrapper);
         try {
+            System.err.println("获取计划,广告组:" + accountId);
             kuaishouInterfaceService.getCampaignList(token, null, null);
             //1:获取全量广告组数据
             kuaishouInterfaceService.getGroupList(token, null, null);
+            System.err.println("获取计划,广告组:" + accountId);
         } catch (Exception e) {
             e.printStackTrace();
         }
@@ -395,7 +392,9 @@ public class TestController {
         CtopOauthToken token = oauthTokenMapper.selectOne(oauthTokenQueryWrapper);
 
         try {
+            System.err.println("获取创意,accountId:" + token.getAccountId());
             kuaishouInterfaceService.getCreativeList(token, null, null);
+            System.err.println("获取创意结束,accountId:" + token.getAccountId());
         } catch (Exception e) {
             e.printStackTrace();
         }
@@ -419,6 +418,9 @@ public class TestController {
                 oauthTokenQueryWrapper.eq("media_id", 2);
                 oauthTokenQueryWrapper.eq("account_id", accountId);
                 CtopOauthToken ctopOauthToken = oauthTokenMapper.selectOne(oauthTokenQueryWrapper);
+                System.err.println("创意报表accountId:" + ctopOauthToken.getAccountId());
+
+
                 QueryWrapper<KuaiShouCampaign> campaignQueryWrapper = new QueryWrapper<>();
                 campaignQueryWrapper.eq("account_id", ctopOauthToken.getAccountId());
 
@@ -451,60 +453,61 @@ public class TestController {
             e.printStackTrace();
         }
         //1:查询当日数据
-        QueryWrapper<UserAllocation> queryWrapper = new QueryWrapper<>();
-        queryWrapper.eq("project_id", 215);
-        List<UserAllocation> allocations = userAllocationService.list(queryWrapper);
-        if (null == allocations || allocations.size() <= 0) {
-            log.info("定时获取头条数据异常:获取用户信息失败");
+        List<CtopOauthToken> tokens = tokenService.getTokenListByType(CtopAdConstant.PLATFORM_TYPE_BYTEDANCE);
+        if (null == tokens || tokens.size() <= 0) {
+            log.info("定时获取头条数据异常:为获取到可用的token");
         }
         Date finalGetDate = getDate;
-
-        allocations.forEach(allocation -> {
+        tokens.forEach(token -> {
             //3:获取广告计划信息数据
-            CtopOauthToken token = oauthTokenMapper.selectByAccountId(allocation.getAccountId());
             reportService.getAdvertiserPlanReport(token, finalGetDate, finalGetDate, CtopAdConstant.BYTEDANCE_REPORT_TYPE_DAILY);
         });
 
         //清洗关于作业帮数据
         //1:查询作业帮相关的用户数据
-        allocations.forEach(allocation -> {
-            //根据accountId和时间,查询相关的日报表信息
-            QueryWrapper<BytedancePlanDailyReport> reportQueryWrapper = new QueryWrapper<>();
-            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
-            String dateString = dateFormat.format(finalGetDate) + " 00:00:00";
-            queryWrapper.eq("advertiser_id", allocation.getAccountId())
-                    .eq("stat_datetime", dateString)
-            ;
-            List<BytedancePlanDailyReport> bytedancePlanDailyReports = planDailyReportService.list(reportQueryWrapper);
-            if (null != bytedancePlanDailyReports && bytedancePlanDailyReports.size() > 0) {
-                bytedancePlanDailyReports.forEach(report -> {
-                    String adName = report.getAdName();
-                    String[] tags = adName.split("-");
-                    report.setAdsense(tags[1]);
-                    report.setPlanCode(tags[2]);
-                    String materialName = tags[3];
-                    report.setMaterialName(materialName);
-                    if (materialName.contains("其他")) {
-                        report.setMaterialType("其他");
-                    } else if (materialName.contains("图片轮播")) {
-                        report.setMaterialType("图片轮播");
-                    } else if (materialName.contains("大字报")) {
-                        report.setMaterialType("大字报");
-                    } else if (materialName.contains("文字动画")) {
-                        report.setMaterialType("文字动画");
-                    } else if (materialName.contains("采访形式")) {
-                        report.setMaterialType("采访形式");
-                    } else if (materialName.contains("剧情")) {
-                        report.setMaterialType("剧情");
-                    } else if (materialName.contains("口播")) {
-                        report.setMaterialType("口播");
-                    } else {
-                        report.setMaterialType("其他");
-                    }
-                    planDailyReportService.updateById(report);
-                });
-            }
-        });
+        QueryWrapper<UserAllocation> wrapper = new QueryWrapper<>();
+        wrapper.eq("project_id", 215);
+        List<UserAllocation> allocations = userAllocationService.list(wrapper);
+        if (null != allocations && allocations.size() > 0) {
+            allocations.forEach(allocation -> {
+                //根据accountId和时间,查询相关的日报表信息
+                QueryWrapper<BytedancePlanDailyReport> queryWrapper = new QueryWrapper<>();
+                SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+                String dateString = dateFormat.format(finalGetDate) + " 00:00:00";
+                queryWrapper.eq("advertiser_id", allocation.getAccountId())
+                        .eq("stat_datetime", dateString)
+                ;
+                List<BytedancePlanDailyReport> bytedancePlanDailyReports = planDailyReportService.list(queryWrapper);
+                if (null != bytedancePlanDailyReports && bytedancePlanDailyReports.size() > 0) {
+                    bytedancePlanDailyReports.forEach(report -> {
+                        String adName = report.getAdName();
+                        String[] tags = adName.split("-");
+                        report.setAdsense(tags[1]);
+                        report.setPlanCode(tags[2]);
+                        String materialName = tags[3];
+                        report.setMaterialName(materialName);
+                        if (materialName.contains("其他")) {
+                            report.setMaterialType("其他");
+                        } else if (materialName.contains("图片轮播")) {
+                            report.setMaterialType("图片轮播");
+                        } else if (materialName.contains("大字报")) {
+                            report.setMaterialType("大字报");
+                        } else if (materialName.contains("文字动画")) {
+                            report.setMaterialType("文字动画");
+                        } else if (materialName.contains("采访形式")) {
+                            report.setMaterialType("采访形式");
+                        } else if (materialName.contains("剧情")) {
+                            report.setMaterialType("剧情");
+                        } else if (materialName.contains("口播")) {
+                            report.setMaterialType("口播");
+                        } else {
+                            report.setMaterialType("其他");
+                        }
+                        planDailyReportService.updateById(report);
+                    });
+                }
+            });
+        }
         ResultMapUtils.setResultMap(result, StatusCode.COMMON_SUCCESS);
         return result;
     }
@@ -796,6 +799,7 @@ public class TestController {
             executorService.submit(new Runnable() {
                 @Override
                 public void run() {
+                    System.err.println(signature);
                     cleanMaterialService.calculationReport(signature);
                 }
             });
@@ -824,6 +828,7 @@ public class TestController {
                     } catch (ParseException e) {
                         e.printStackTrace();
                     }
+                    System.err.println("获取广告主报表,accountId:" + token.getAccountId());
                     kuaishouInterfaceService.getAdvertiserReportDaily(token, startDate, endDate);
 
                     Thread.sleep(1 * 200);
@@ -834,65 +839,4 @@ public class TestController {
             }
         });
     }
-
-
-    @GetMapping(value = "/getAllCreativeList")
-    public void getAllCreativeList() {
-
-        try {
-
-
-            QueryWrapper<CtopOauthToken> oauthTokenQueryWrapper = new QueryWrapper<>();
-            oauthTokenQueryWrapper.eq("media_id", 2);
-            List<CtopOauthToken> ctopOauthTokens = oauthTokenMapper.selectList(oauthTokenQueryWrapper);
-
-            if (!Check.isNull(ctopOauthTokens)) {
-                for (CtopOauthToken token : ctopOauthTokens) {
-                    executorService.submit(new Runnable() {
-                        @Override
-                        public void run() {
-                            if (!Check.isNull(token)) {
-                                log.info("获取创意,账号id:{}", token.getAccountId());
-                                kuaishouInterfaceService.getCreativeList(token, null, null);
-                            }
-                        }
-                    });
-
-                }
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-
-    }
-
-
-    @GetMapping(value = "/getAllGroupList")
-    public void getAllGroupList() {
-
-        try {
-
-            QueryWrapper<CtopOauthToken> oauthTokenQueryWrapper = new QueryWrapper<>();
-            oauthTokenQueryWrapper.eq("media_id", 2);
-            List<CtopOauthToken> ctopOauthTokens = oauthTokenMapper.selectList(oauthTokenQueryWrapper);
-            if (!Check.isNull(ctopOauthTokens)) {
-                for (CtopOauthToken token : ctopOauthTokens) {
-                    executorService.submit(new Runnable() {
-                        @Override
-                        public void run() {
-                            if (!Check.isNull(token)) {
-                                log.info("获取组,账号id:{}", token.getAccountId());
-                                kuaishouInterfaceService.getGroupList(token, null, null);
-                            }
-                        }
-                    });
-                }
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-
-    }
-
-
 }

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

@@ -544,11 +544,12 @@ public class PerformanceController2 {
         String userId = dto.getUserId();
         String startDate = dto.getStartDate();
         String endDate = dto.getEndDate();
+        Integer appType = dto.getAppType();
         if(userId==null || startDate == null || endDate == null){
             result.setSuccess(false);
             result.setMessage("userId和时间不能为空");
         }
-        List<MaterialInfo> materialInfoList = performanceService.getVideoList(userId, startDate, endDate);
+        List<MaterialInfo> materialInfoList = performanceService.getVideoList(appType, userId, startDate, endDate);
         result.setSuccess(true);
         result.setResult(materialInfoList);
         return result;

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

@@ -91,7 +91,7 @@ public interface IPerformanceService2 extends IService<Performance> {
     List<MaterialInfo> effiVideoList(Integer appType, Integer year, Integer quarter, String userId);
 
     //获取有效视频列表
-    List<MaterialInfo> getVideoList(String userId, String startDate, String endDate);
+    List<MaterialInfo> getVideoList(Integer appType, String userId, String startDate, String endDate);
 
     List<MaterialInfo> getEffiWeekVideoList(Integer appType, String startDate, String endDate, String userId);
 

+ 147 - 9
jeecg-boot-module-system/src/main/java/org/jeecg/modules/system/service/impl/PerformanceServiceImpl2.java

@@ -98,12 +98,14 @@ public class PerformanceServiceImpl2 extends ServiceImpl<PerformanceMapper, Perf
         log.info("统计时间所在年" + thisYear + "月" + thisMonth + "季" + thisQuarter);
 
         //快手有效视频(新)
-        kuaishouNewEffiVideo(calcDate, effiCalcStart, effiFirstWeekCalcEnd, thisYear, thisMonth, thisQuarter, DateUtils.formatDate(friday), DateUtils.formatDate(thursday));
+        //kuaishouNewEffiVideo(calcDate, effiCalcStart, effiFirstWeekCalcEnd, thisYear, thisMonth, thisQuarter, DateUtils.formatDate(friday), DateUtils.formatDate(thursday));
         //头条有效视频(新)
-        toutiaoNewEffiVideo(calcDate, effiCalcStart, effiFirstWeekCalcEnd, thisYear, thisMonth, thisQuarter, DateUtils.formatDate(friday), DateUtils.formatDate(thursday));
+        //toutiaoNewEffiVideo(calcDate, effiCalcStart, effiFirstWeekCalcEnd, thisYear, thisMonth, thisQuarter, DateUtils.formatDate(friday), DateUtils.formatDate(thursday));
 
-        //总视频
-        kuaishouNewVideo( calcDate,  thisYear,  thisQuarter,  thisMonth, DateUtils.formatDate(friday),  DateUtils.formatDate(thursday));
+        //快手总视频
+        //newKuaishouVideo( calcDate,  thisYear,  thisQuarter,  thisMonth, DateUtils.formatDate(friday),  DateUtils.formatDate(thursday));
+        //头条总视频
+        newToutiaoVideo( calcDate,  thisYear,  thisQuarter,  thisMonth, DateUtils.formatDate(friday),  DateUtils.formatDate(thursday));
     }
 
     //快手有效视频统计
@@ -327,6 +329,7 @@ public class PerformanceServiceImpl2 extends ServiceImpl<PerformanceMapper, Perf
             shot.setWeekStart(friday);
             shot.setWeekEnd(thursday);
             shot.setCompanyId(companyId);
+            shot.setCost(effiVideoDTO.getCharge());
             userEfficientVideoMapMapper.insert(shot);
 
             //平面
@@ -341,6 +344,7 @@ public class PerformanceServiceImpl2 extends ServiceImpl<PerformanceMapper, Perf
             plane.setWeekStart(friday);
             plane.setWeekEnd(thursday);
             plane.setCompanyId(companyId);
+            plane.setCost(effiVideoDTO.getCharge());
             userEfficientVideoMapMapper.insert(plane);
 
             //编导
@@ -355,6 +359,7 @@ public class PerformanceServiceImpl2 extends ServiceImpl<PerformanceMapper, Perf
             plan.setWeekStart(friday);
             plan.setWeekEnd(thursday);
             plan.setCompanyId(companyId);
+            plan.setCost(effiVideoDTO.getCharge());
             userEfficientVideoMapMapper.insert(plan);
 
             //剪辑
@@ -369,6 +374,7 @@ public class PerformanceServiceImpl2 extends ServiceImpl<PerformanceMapper, Perf
             clip.setWeekStart(friday);
             clip.setWeekEnd(thursday);
             clip.setCompanyId(companyId);
+            clip.setCost(effiVideoDTO.getCharge());
             userEfficientVideoMapMapper.insert(clip);
 
             //有效视频同步到有效视频素材库--测试的时候不打开,生产打开
@@ -449,6 +455,7 @@ public class PerformanceServiceImpl2 extends ServiceImpl<PerformanceMapper, Perf
             shot.setWeekStart(friday);
             shot.setWeekEnd(thursday);
             shot.setCompanyId(companyId);
+            shot.setCost(effiVideoDTO.getCharge());
             userEfficientVideoMapMapper.insert(shot);
 
             //平面
@@ -463,6 +470,7 @@ public class PerformanceServiceImpl2 extends ServiceImpl<PerformanceMapper, Perf
             plane.setWeekStart(friday);
             plane.setWeekEnd(thursday);
             plane.setCompanyId(companyId);
+            plane.setCost(effiVideoDTO.getCharge());
             userEfficientVideoMapMapper.insert(plane);
 
             //编导
@@ -477,6 +485,7 @@ public class PerformanceServiceImpl2 extends ServiceImpl<PerformanceMapper, Perf
             plan.setWeekStart(friday);
             plan.setWeekEnd(thursday);
             plan.setCompanyId(companyId);
+            plan.setCost(effiVideoDTO.getCharge());
             userEfficientVideoMapMapper.insert(plan);
 
             //剪辑
@@ -491,6 +500,7 @@ public class PerformanceServiceImpl2 extends ServiceImpl<PerformanceMapper, Perf
             clip.setWeekStart(friday);
             clip.setWeekEnd(thursday);
             clip.setCompanyId(companyId);
+            clip.setCost(effiVideoDTO.getCharge());
             userEfficientVideoMapMapper.insert(clip);
 
             //有效视频同步到有效视频素材库--测试的时候不打开,生产打开
@@ -505,16 +515,24 @@ public class PerformanceServiceImpl2 extends ServiceImpl<PerformanceMapper, Perf
     ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     //新总视频计算开始
     ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-    public void kuaishouNewVideo(Date calcDate, int thisYear, int thisQuarter, int thisMonth, String friday, String thursday){
+    public void newKuaishouVideo(Date calcDate, int thisYear, int thisQuarter, int thisMonth, String friday, String thursday){
         log.info("设计师周总视频计算开始");
+        Integer appType = 2;
+        //获取创建时间在计算周时间范围内的创意
         List<String> videoMd5s = userEfficientVideoMapMapper.getVideoByDates(friday,thursday);
         for(String md5:videoMd5s){
             //去重
-            Integer signatureCount = userEfficientVideoMapMapper.getVideoCountByCode(md5);
+            Integer signatureCount = userEfficientVideoMapMapper.getVideoCountByCode(md5, appType);
             if(signatureCount > 0){
                 continue;
             }
             //
+            //去除其中的视频的最早创建时间早于创建周的创意
+            Integer count = userEfficientVideoMapMapper.kuaishouCreativeLtCount(md5,friday);
+            if (count >0){
+                continue;
+            }
+            //
 
             //获取该视频的编导、剪辑、拍摄、平面等信息
             EffiVideoDTO effiVideoDTO = userEfficientVideoMapMapper.getDesignerInfoByCode(md5);
@@ -535,6 +553,8 @@ public class PerformanceServiceImpl2 extends ServiceImpl<PerformanceMapper, Perf
                 companyId = userEfficientVideoMapMapper.getCompanyInfoByUserId( effiVideoDTO.getPlaneId() );
             }
 
+            String creativeDate = userEfficientVideoMapMapper.kuaishouCreativeEarlistDate(md5);
+
             UserVideoMap shot = new UserVideoMap();
             UserVideoMap plane = new UserVideoMap();
             UserVideoMap plan = new UserVideoMap();
@@ -551,6 +571,8 @@ public class PerformanceServiceImpl2 extends ServiceImpl<PerformanceMapper, Perf
             shot.setWeekStart(friday);
             shot.setWeekEnd(thursday);
             shot.setCompanyId(companyId);
+            shot.setAppType(appType);
+            shot.setCreativeDate(creativeDate);
             userVideoMapMapper.insert(shot);
 
             //平面
@@ -564,6 +586,8 @@ public class PerformanceServiceImpl2 extends ServiceImpl<PerformanceMapper, Perf
             plane.setWeekStart(friday);
             plane.setWeekEnd(thursday);
             plane.setCompanyId(companyId);
+            plane.setAppType(appType);
+            plane.setCreativeDate(creativeDate);
             userVideoMapMapper.insert(plane);
 
             //编导
@@ -577,6 +601,8 @@ public class PerformanceServiceImpl2 extends ServiceImpl<PerformanceMapper, Perf
             plan.setWeekStart(friday);
             plan.setWeekEnd(thursday);
             plan.setCompanyId(companyId);
+            plan.setAppType(appType);
+            plan.setCreativeDate(creativeDate);
             userVideoMapMapper.insert(plan);
 
             //剪辑
@@ -590,10 +616,121 @@ public class PerformanceServiceImpl2 extends ServiceImpl<PerformanceMapper, Perf
             clip.setWeekStart(friday);
             clip.setWeekEnd(thursday);
             clip.setCompanyId(companyId);
+            clip.setAppType(appType);
+            clip.setCreativeDate(creativeDate);
             userVideoMapMapper.insert(clip);
         }
-        log.info("设计师周总视频计算结束");
+        log.info("快手设计师周总视频计算结束");
      }
+
+
+    public void newToutiaoVideo(Date calcDate, int thisYear, int thisQuarter, int thisMonth, String friday, String thursday){
+        log.info("设计师周总视频计算开始");
+        Integer appType = 1;
+        //获取创建时间在计算周时间范围内的创意
+        List<String> videoMd5s = userEfficientVideoMapMapper.getToutiaoVideoByDates(friday,thursday);
+        for(String md5:videoMd5s){
+            //去重
+            Integer signatureCount = userEfficientVideoMapMapper.getVideoCountByCode(md5, appType);
+            if(signatureCount > 0){
+                continue;
+            }
+            //
+            //去除其中的视频的最早创建时间早于创建周的创意
+            Integer count = userEfficientVideoMapMapper.toutiaoCreativeLtCount(md5,friday);
+            if (count >0){
+                continue;
+            }
+            //
+
+            //获取该视频的编导、剪辑、拍摄、平面等信息
+            EffiVideoDTO effiVideoDTO = userEfficientVideoMapMapper.getDesignerInfoByCode(md5);
+            if(effiVideoDTO == null){
+                effiVideoDTO = new EffiVideoDTO();
+            }
+            effiVideoDTO.setSignature(md5);
+
+            String companyId = null;
+            //根据编导id获取视频所属分公司
+            if( StringUtils.isNotBlank(effiVideoDTO.getPlanId()) ) {
+                companyId = userEfficientVideoMapMapper.getCompanyInfoByUserId(effiVideoDTO.getPlanId());
+            }else if( StringUtils.isNotBlank(effiVideoDTO.getClipId()) ){
+                companyId = userEfficientVideoMapMapper.getCompanyInfoByUserId( effiVideoDTO.getClipId() );
+            }else if( StringUtils.isNotBlank(effiVideoDTO.getShotId()) ){
+                companyId = userEfficientVideoMapMapper.getCompanyInfoByUserId( effiVideoDTO.getShotId() );
+            }else if ( StringUtils.isNotBlank(effiVideoDTO.getPlaneId()) ){
+                companyId = userEfficientVideoMapMapper.getCompanyInfoByUserId( effiVideoDTO.getPlaneId() );
+            }
+
+            String creativeDate = userEfficientVideoMapMapper.toutiaoCreativeEarlistDate(md5);
+
+            UserVideoMap shot = new UserVideoMap();
+            UserVideoMap plane = new UserVideoMap();
+            UserVideoMap plan = new UserVideoMap();
+            UserVideoMap clip = new UserVideoMap();
+
+            //拍摄
+            shot.setUserId(effiVideoDTO.getShotId());
+            shot.setVideoSignature(effiVideoDTO.getSignature());
+            shot.setQuarter(thisQuarter);
+            shot.setYear(thisYear);
+            shot.setMonth(thisMonth);
+            shot.setCalcDate(calcDate);
+            shot.setRoleId("shot");
+            shot.setWeekStart(friday);
+            shot.setWeekEnd(thursday);
+            shot.setCompanyId(companyId);
+            shot.setAppType(appType);
+            shot.setCreativeDate(creativeDate);
+            userVideoMapMapper.insert(shot);
+
+            //平面
+            plane.setUserId(effiVideoDTO.getPlaneId());
+            plane.setVideoSignature(effiVideoDTO.getSignature());
+            plane.setQuarter(thisQuarter);
+            plane.setYear(thisYear);
+            plane.setMonth(thisMonth);
+            plane.setCalcDate(calcDate);
+            plane.setRoleId("plane");
+            plane.setWeekStart(friday);
+            plane.setWeekEnd(thursday);
+            plane.setCompanyId(companyId);
+            plane.setAppType(appType);
+            plane.setCreativeDate(creativeDate);
+            userVideoMapMapper.insert(plane);
+
+            //编导
+            plan.setUserId(effiVideoDTO.getPlanId());
+            plan.setVideoSignature(effiVideoDTO.getSignature());
+            plan.setQuarter(thisQuarter);
+            plan.setYear(thisYear);
+            plan.setMonth(thisMonth);
+            plan.setCalcDate(calcDate);
+            plan.setRoleId("plan");
+            plan.setWeekStart(friday);
+            plan.setWeekEnd(thursday);
+            plan.setCompanyId(companyId);
+            plan.setAppType(appType);
+            plan.setCreativeDate(creativeDate);
+            userVideoMapMapper.insert(plan);
+
+            //剪辑
+            clip.setUserId(effiVideoDTO.getClipId());
+            clip.setVideoSignature(effiVideoDTO.getSignature());
+            clip.setQuarter(thisQuarter);
+            clip.setYear(thisYear);
+            clip.setMonth(thisMonth);
+            clip.setCalcDate(calcDate);
+            clip.setRoleId("clip");
+            clip.setWeekStart(friday);
+            clip.setWeekEnd(thursday);
+            clip.setCompanyId(companyId);
+            clip.setAppType(appType);
+            clip.setCreativeDate(creativeDate);
+            userVideoMapMapper.insert(clip);
+        }
+        log.info("快手设计师周总视频计算结束");
+    }
     ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
     //新总视频计算结束
     ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -2226,6 +2363,7 @@ public class PerformanceServiceImpl2 extends ServiceImpl<PerformanceMapper, Perf
             for(String md5:md5s){
                 BigDecimal cost = userEfficientVideoMapMapper.getToutiaoSumChargeBySignature(md5, startDate, endDate);
                 if(cost== null){
+
                     cost = BigDecimal.ZERO;
                 }
                 totalCost = totalCost.add(cost);
@@ -2319,8 +2457,8 @@ public class PerformanceServiceImpl2 extends ServiceImpl<PerformanceMapper, Perf
     }
 
     //根据userid,appType,年度,季度查询有效视频列表
-    public List<MaterialInfo> getVideoList(String userId, String startDate, String endDate){
-        List<MaterialInfo> materialInfoList = userEfficientVideoMapMapper.getVideoList(userId, startDate, endDate);
+    public List<MaterialInfo> getVideoList(Integer appType, String userId, String startDate, String endDate){
+        List<MaterialInfo> materialInfoList = userEfficientVideoMapMapper.getVideoList(appType, userId, startDate, endDate);
         return materialInfoList;
     }
 

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

@@ -102,4 +102,8 @@ public class LoadFileUtil {
     }
 
 
+    public static void main(String[] args) throws IOException {
+        System.out.println(LoadFileUtil.getMD5("D://video/BMjAyMDAzMDQxODMyMTlfMTU3ODQ0ODY5MV8yNDQ1ODc0Mzk1OF8wXzM=_b_Bd696ca7f28234aac3713b18edd139469.mp4"));
+    }
+
 }

+ 26 - 0
performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/controller/PerformanceOptimizerController.java

@@ -12,6 +12,7 @@ import lombok.extern.slf4j.Slf4j;
 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.util.DateUtils;
 import org.jeecg.common.util.oConvertUtils;
 import org.jeecgframework.poi.excel.ExcelImportUtil;
 import org.jeecgframework.poi.excel.def.NormalExcelConstants;
@@ -292,4 +293,29 @@ public class PerformanceOptimizerController {
         return performanceOptimizerService.getManagerPerformanceDetail(mediaType, orgCode);
     }
 
+
+    /**
+     * 计算运营绩效
+     */
+    @GetMapping(value = "/yunyingPerformance")
+    @ResponseBody
+    public void yunyingPerformance(@RequestParam(name = "year") Integer year,
+                                                           @RequestParam(name = "quarter") Integer quarter) {
+
+        Map<String,String> map = DateUtils.quarterStartEndDate(year, quarter);
+        performanceOptimizerService.toutiaoYunyingQuarterPerformance(year, quarter, map.get("startDate"), map.get("endDate"));
+    }
+
+    /**
+     * 计算运营绩效
+     */
+    @GetMapping(value = "/kuaishouYunyingLeaderQuarterPerformance")
+    @ResponseBody
+    public void kuaishouYunyingLeaderQuarterPerformance(@RequestParam(name = "year") Integer year,
+                                                  @RequestParam(name = "quarter") Integer quarter) {
+
+        Map<String,String> map = DateUtils.quarterStartEndDate(year, quarter);
+        performanceOptimizerService.kuaishouYunyingLeaderQuarterPerformance(year, quarter);
+    }
+
 }

+ 10 - 10
performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/mapper/xml/PerformanceMapper.xml

@@ -25,19 +25,20 @@
         LEFT JOIN
         sys_user sysUser ON sysUser.id = userRole.user_id
         WHERE
-        userRole.role_id = '79fba4f45f1b8e284af9c68311c6c771'
+        <!-- userRole.role_id = '79fba4f45f1b8e284af9c68311c6c771' -->
+        dailiAccount.stat_date &gt;= #{startDate}
+        AND
+        dailiAccount.stat_date &lt;= #{endDate}
         <if test="userId != null">
             and sysUser.id = #{userId}
         </if>
-        AND
-        dailiAccount.stat_date &gt;= #{startDate}
-        AND
-        dailiAccount.stat_date &lt; #{endDate}
         GROUP BY
         sysUser.id
         ORDER BY
         SUM(charge) DESC
+        <if test="startIndex != null and startIndex != '' and pageSize !=null and pageSize!=''">
         limit #{startIndex},#{pageSize}
+        </if>
     </select>
 
     <select id="getBytedanceOptimizerTotalCostDetailGroupByUserId" resultMap="OptimizerTotalCostDetail">
@@ -53,14 +54,13 @@
         LEFT JOIN
         sys_user sysUser ON sysUser.id = userRole.user_id
         WHERE
-        userRole.role_id = '79fba4f45f1b8e284af9c68311c6c771'
-        <if test="userId != null">
-            and sysUser.id = #{userId}
-        </if>
-        AND
+        <!-- userRole.role_id = '79fba4f45f1b8e284af9c68311c6c771' -->
         dailyAccount.stat_datetime &gt;= #{startDate}
         AND
         dailyAccount.stat_datetime &lt; #{endDate}
+        <if test="userId != null">
+            and sysUser.id = #{userId}
+        </if>
         GROUP BY
         sysUser.id
         ORDER BY

+ 6 - 0
performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/service/IPerformanceOptimizerService.java

@@ -19,4 +19,10 @@ public interface IPerformanceOptimizerService extends IService<PerformanceOptimi
     Map<String, Object> getRankingList(String mediaType, Integer pageNo, Integer pageSize, String orgCode);
 
     Map<String, Object> getManagerPerformanceDetail(String mediaType, String orgCode);
+
+    Map<String, Object> kuaishouYunyingQuarterPerformance(Integer year, Integer quarter, String startDate, String endDate);
+
+    void kuaishouYunyingLeaderQuarterPerformance(Integer year, Integer quarter);
+
+    void toutiaoYunyingQuarterPerformance(Integer year, Integer quarter, String startDate, String endDate);
 }

+ 346 - 12
performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/service/impl/PerformanceOptimizerServiceImpl.java

@@ -6,6 +6,7 @@ import cn.com.ctop.common.module.utils.StatusCode;
 import cn.com.ctop.performanceappraisal.entity.OptimizerConfig;
 import cn.com.ctop.performanceappraisal.entity.PerformanceConfig;
 import cn.com.ctop.performanceappraisal.entity.PerformanceOptimizer;
+import cn.com.ctop.performanceappraisal.mapper.PerformanceMapper;
 import cn.com.ctop.performanceappraisal.mapper.PerformanceOptimizerMapper;
 import cn.com.ctop.performanceappraisal.service.IOptimizerConfigService;
 import cn.com.ctop.performanceappraisal.service.IPerformanceConfigService;
@@ -13,18 +14,20 @@ import cn.com.ctop.performanceappraisal.service.IPerformanceOptimizerService;
 import cn.com.ctop.performanceappraisal.service.IPerformanceService;
 import cn.com.ctop.performanceappraisal.vo.OptimizerCostDetailVO;
 import cn.com.ctop.performanceappraisal.vo.UserPerformanceDetailVO;
+import cn.com.ctop.userefficientvideomap.entity.TransferorAccountDTO;
+import cn.com.ctop.userefficientvideomap.entity.UserDto2;
+import cn.com.ctop.userefficientvideomap.mapper.UserEfficientVideoMapMapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.shiro.SecurityUtils;
 import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.common.util.DateUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * 优化师绩效信息
@@ -34,11 +37,340 @@ import java.util.Map;
  * @date 2019-12-13
  */
 @Service
+@Slf4j
 public class PerformanceOptimizerServiceImpl extends ServiceImpl<PerformanceOptimizerMapper, PerformanceOptimizer> implements IPerformanceOptimizerService {
     @Autowired
     IPerformanceService performanceService;
     @Autowired
     private IOptimizerConfigService optimizerConfigService;
+    @Autowired
+    private UserEfficientVideoMapMapper userEfficientVideoMapMapper;
+    @Autowired
+    PerformanceMapper performanceMapper;
+    @Autowired
+    PerformanceOptimizerMapper performanceOptimizerMapper;
+
+
+    public void YunyingPerformance(Integer year, Integer quarter, String startDate, String endDate){
+        //Map<String,String> map = DateUtils.quarterStartEndDate(year, quarter);
+
+
+
+
+    }
+
+
+    //快手运营季度绩效计算
+    public Map<String, Object> kuaishouYunyingQuarterPerformance(Integer year, Integer quarter, String startDate, String endDate){
+        Map<String, Object> result = new HashMap<>();
+        //获取快手所有运营的数据
+        List<UserDto2> userList = userEfficientVideoMapMapper.getAllKuaishouYunyingDepartUserInfo();
+        Integer mediaType = 2;
+        //循环所有快手运营
+        for(UserDto2 userDto:userList){
+            //userDto.setUserId("ce2cb485afd44d0e8563b4daa5ea6fcb");
+            //String orgCode = userEfficientVideoMapMapper.getDepartIdByUserId(userDto.getUserId());
+            //华北
+            //查询当前媒体配置信息
+            OptimizerConfig config = optimizerConfigService.getEnabledConfigByMediaType(mediaType + "", CtopAdConstant.CTOP_ORGCODE_NORTH_CHINA_PREFIX);
+
+            if (null == config) {
+                ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_OPTINIZER_CONFIG_IS_NULL.getCode());
+                return result;
+            }
+            //:查询当前用户截止到目前当前季度的消耗统计数据
+            List<OptimizerCostDetailVO> vos = getOptimizerTotalCostDetailGroupByUserId(mediaType + "", userDto.getUserId(), year, quarter, startDate, endDate);
+            //if (null == vos || vos.size() <= 0) {
+            //    ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_OPTINIZER_PERSONNAL_DATA_IS_NULL.getCode());
+            //    return result;
+            //}
+            //2: 查询媒体季度任务完成情况
+            //UserPerformanceDetailVO performanceDetailVO = getPerformanceDetailVO(mediaType, vos.get(0), config);
+            //result.put("userDetail", performanceDetailVO);
+            //ResultMapUtils.setResultMap(result, StatusCode.COMMON_SUCCESS.getCode());
+
+            //获取消耗统计数据信息--该统计是按照user_allocation来统计的数据,不包含转户的情况
+            log.info(userDto.getUserId());
+            //增加转户的情况
+            //原则a:1. 该季度内最终转给此运营的户,将该户在本季度中不在的时间计算出来,然后计算这段时间内的总消耗,并在总数中减去
+            //2. 季度期间在过此运营负责过的户,将在本季度中在的时间计算出来,然后计算总消耗并在总数中增加上
+
+            //原则b:1.找出改运营手下所有账户,循环每一个账户,然后进行转户判断
+            //2.将该账户下所有转户信息拉取出来,去除受让时间小于季度开始时间 以及 转让时间大于季度结束时间的条目(sql去掉),得到该账户所有信息
+            //3. 创建userMap,根据userId获取自己季度内的各时间段
+            BigDecimal totalRoyal = BigDecimal.ZERO;
+            BigDecimal totalRoyalty = BigDecimal.ZERO;
+            BigDecimal totalCost = BigDecimal.ZERO;
+            if(vos.size() != 0){
+                OptimizerCostDetailVO vo = vos.get(0);
+                //循环accountId
+                List<String> accountList = userEfficientVideoMapMapper.getAccountIdByUserId(userDto.getUserId());
+                Map<String, List<Map<String, String>>> accountRangeMap = new HashMap<>();
+
+                for(int i=0; i<accountList.size();i++){
+                    List<TransferorAccountDTO> transferorAccountDTOList = userEfficientVideoMapMapper.accountTransforerListByUserId(accountList.get(i), startDate, endDate);
+
+                    if(transferorAccountDTOList.size() == 0){
+                        accountRangeMap.put(accountList.get(i),null);
+                        continue;
+                    }
+                    Map<String, String> DateMap = new HashMap<>();
+
+                    for(int j=0; j<transferorAccountDTOList.size(); j++){
+                        String transferor = transferorAccountDTOList.get(j).getTransferor();
+                        //String assignee = transferorAccountDTOList.get(j).getAssignee();
+                        //如果转让人不是本人,则跳过;按照转让人的逻辑走,因为受让人在下一次转户的时候也会变成转让人
+                        if( transferor.equals(userDto.getUserId()) ){
+                            if (j==0){
+                                DateMap.put("startDate", startDate);
+                            }else {
+                                DateMap.put("startDate", transferorAccountDTOList.get(j-1).getAssigneeDate());
+                            }
+                            DateMap.put("endDate",transferorAccountDTOList.get(j).getTransferorDate());
+                        }
+
+                        //判断:如果转让人不是本人,受让人也不是,则跳过
+                        if(DateMap.size() == 0 &&  j != (transferorAccountDTOList.size()-1)     ){   //!assignee.equals(userDto.getUserId())
+                            continue;
+                        }
+
+                        if (accountRangeMap.get(accountList.get(i)) != null){
+                            accountRangeMap.get(accountList.get(i)).add(DateMap);
+
+                            if(j == (transferorAccountDTOList.size()-1)){
+                                DateMap.put("startDate", transferorAccountDTOList.get(j).getAssigneeDate());
+                                DateMap.put("endDate", endDate);
+                            }
+                        }else{
+                            List<Map<String, String>> userAccountList = new ArrayList<>();
+                            if(DateMap.size()!= 0 ){
+                                userAccountList.add(DateMap);
+                            }
+
+                            Map<String, String> DateMap2 = new HashMap<>();
+                            if(j == (transferorAccountDTOList.size()-1)){
+                                DateMap2.put("startDate", transferorAccountDTOList.get(j).getAssigneeDate());
+                                DateMap2.put("endDate", endDate);
+                                userAccountList.add(DateMap2);
+                            }
+                            accountRangeMap.put(accountList.get(i), userAccountList);
+                        }
+                    }
+                }
+
+                for(Map.Entry<String, List<Map<String, String>>> entry : accountRangeMap.entrySet()){
+                    String mapKey = entry.getKey();
+                    List<Map<String, String>> mapValue = entry.getValue();
+                    if (mapValue == null){
+                        totalRoyal = totalRoyal.add( userEfficientVideoMapMapper.getAccountSumCharge(mapKey,startDate,endDate)==null?BigDecimal.ZERO: userEfficientVideoMapMapper.getAccountSumCharge(mapKey,startDate,endDate));
+                    }else{
+                        for (Map<String, String> map:mapValue){
+                            totalRoyal = totalRoyal.add( userEfficientVideoMapMapper.getAccountSumCharge(mapKey,map.get("startDate"),map.get("endDate"))==null?BigDecimal.ZERO: userEfficientVideoMapMapper.getAccountSumCharge(mapKey,startDate,endDate));
+                        }
+                    }
+                }
+
+                //BigDecimal totalCost = vo.getTotalCost();
+                totalCost = totalRoyal;//新增
+                //个人季度任务
+                BigDecimal personalTask = config.getPersonalTask();
+                //判断个人任务是否完成 ,如果完成则给到千分之5,如果未完成,则给到千分之3的绩效
+
+                if(!userDto.getRoleCode().equals("operationAssistant")){
+                    if (totalCost.compareTo(personalTask) > 0 ) {
+                        totalRoyalty = totalCost.multiply(config.getMediaTaskFinishRate()).divide(new BigDecimal("1000")).setScale(2, RoundingMode.HALF_UP);
+                    } else {
+                        totalRoyalty = totalCost.multiply(config.getMediaTaskNoFinishRate()).divide(new BigDecimal("1000")).setScale(2, RoundingMode.HALF_UP);
+                    }
+                }
+            }
+
+            //运营绩效数据入库
+            PerformanceOptimizer performanceOptimizer = new PerformanceOptimizer();
+            performanceOptimizer.setAppType(mediaType);
+            performanceOptimizer.setQuarter(quarter + "");
+            performanceOptimizer.setYear(year + "");
+            performanceOptimizer.setRealname(userDto.getRealname());
+            performanceOptimizer.setTotalCost(totalCost);
+            performanceOptimizer.setTotalRoyalty(totalRoyalty);
+            performanceOptimizer.setUserId(userDto.getUserId());
+            performanceOptimizerMapper.insert(performanceOptimizer);
+        }
+        return result;
+    }
+
+    //头条运营季度绩效计算
+    public void toutiaoYunyingQuarterPerformance(Integer year, Integer quarter, String startDate, String endDate){
+        Map<String, Object> result = new HashMap<>();
+        //获取快手所有运营的数据
+        List<UserDto2> userList = userEfficientVideoMapMapper.getAllToutiaoYunyingDepartUserInfo();
+        Integer mediaType = 1;
+        //循环所有toutiao运营
+        for(UserDto2 userDto:userList){
+            //查询当前媒体配置信息
+            OptimizerConfig config = optimizerConfigService.getEnabledConfigByMediaType(mediaType + "", CtopAdConstant.CTOP_ORGCODE_NORTH_CHINA_PREFIX);
+
+            if (null == config) {
+                ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_OPTINIZER_CONFIG_IS_NULL.getCode());
+                return ;
+            }
+
+            log.info(userDto.getUserId());
+            //增加转户的情况
+            //原则a:1. 该季度内最终转给此运营的户,将该户在本季度中不在的时间计算出来,然后计算这段时间内的总消耗,并在总数中减去
+            //2. 季度期间在过此运营负责过的户,将在本季度中在的时间计算出来,然后计算总消耗并在总数中增加上
+
+            //原则b:1.找出改运营手下所有账户,循环每一个账户,然后进行转户判断
+            //2.将该账户下所有转户信息拉取出来,去除受让时间小于季度开始时间 以及 转让时间大于季度结束时间的条目(sql去掉),得到该账户所有信息
+            //3. 创建userMap,根据userId获取自己季度内的各时间段
+            BigDecimal totalRoyal = BigDecimal.ZERO;
+            BigDecimal totalRoyalty = BigDecimal.ZERO;
+            BigDecimal totalCost = BigDecimal.ZERO;
+
+            //循环accountId
+            List<String> accountList = userEfficientVideoMapMapper.getAccountIdByUserId(userDto.getUserId());
+            Map<String, List<Map<String, String>>> accountRangeMap = new HashMap<>();
+            if(accountList.size()!=0){
+                for(int i=0; i<accountList.size();i++){
+                    List<TransferorAccountDTO> transferorAccountDTOList = userEfficientVideoMapMapper.accountTransforerListByUserId(accountList.get(i), startDate, endDate);
+
+                    if(transferorAccountDTOList.size() == 0){
+                        accountRangeMap.put(accountList.get(i),null);
+                        continue;
+                    }
+                    Map<String, String> DateMap = new HashMap<>();
+
+                    for(int j=0; j<transferorAccountDTOList.size(); j++){
+                        String transferor = transferorAccountDTOList.get(j).getTransferor();
+                        //如果转让人不是本人,则跳过;按照转让人的逻辑走,因为受让人在下一次转户的时候也会变成转让人
+                        if( transferor.equals(userDto.getUserId()) ){
+                            if (j==0){
+                                DateMap.put("startDate", startDate);
+                            }else {
+                                DateMap.put("startDate", transferorAccountDTOList.get(j-1).getAssigneeDate());
+                            }
+                            DateMap.put("endDate",transferorAccountDTOList.get(j).getTransferorDate());
+                        }
+
+                        //判断:如果转让人不是本人,受让人也不是,则跳过
+                        if(DateMap.size() == 0 &&  j != (transferorAccountDTOList.size()-1)     ){
+                            continue;
+                        }
+
+                        if (accountRangeMap.get(accountList.get(i)) != null){
+                            accountRangeMap.get(accountList.get(i)).add(DateMap);
+
+                            if(j == (transferorAccountDTOList.size()-1)){
+                                DateMap.put("startDate", transferorAccountDTOList.get(j).getAssigneeDate());
+                                DateMap.put("endDate", endDate);
+                            }
+                        }else{
+                            List<Map<String, String>> userAccountList = new ArrayList<>();
+                            if(DateMap.size()!= 0 ){
+                                userAccountList.add(DateMap);
+                            }
+
+                            Map<String, String> DateMap2 = new HashMap<>();
+                            if(j == (transferorAccountDTOList.size()-1)){
+                                DateMap2.put("startDate", transferorAccountDTOList.get(j).getAssigneeDate());
+                                DateMap2.put("endDate", endDate);
+                                userAccountList.add(DateMap2);
+                            }
+                            accountRangeMap.put(accountList.get(i), userAccountList);
+                        }
+                    }
+                }
+            }else{
+                continue;
+            }
+
+                for(Map.Entry<String, List<Map<String, String>>> entry : accountRangeMap.entrySet()){
+                    String mapKey = entry.getKey();
+                    List<Map<String, String>> mapValue = entry.getValue();
+                    if (mapValue == null){
+                        totalRoyal = totalRoyal.add( userEfficientVideoMapMapper.getToutiaoAccountSumCharge(mapKey,startDate,endDate)==null?BigDecimal.ZERO : userEfficientVideoMapMapper.getToutiaoAccountSumCharge(mapKey,startDate,endDate) );
+                    }else{
+                        for (Map<String, String> map:mapValue){
+                            totalRoyal = totalRoyal.add( userEfficientVideoMapMapper.getToutiaoAccountSumCharge(mapKey,map.get("startDate"),map.get("endDate"))==null?BigDecimal.ZERO: userEfficientVideoMapMapper.getToutiaoAccountSumCharge(mapKey,startDate,endDate));
+                        }
+                    }
+                }
+
+                totalCost = totalRoyal;//新增
+                //个人季度任务
+                BigDecimal personalTask = config.getPersonalTask();
+                //判断个人任务是否完成 ,如果完成则给到千分之5,如果未完成,则给到千分之3的绩效
+
+                if(!userDto.getRoleCode().equals("operationAssistant")){
+                    if (totalCost.compareTo(personalTask) > 0 ) {
+                        totalRoyalty = totalCost.multiply(config.getMediaTaskFinishRate()).divide(new BigDecimal("1000")).setScale(2, RoundingMode.HALF_UP);
+                    } else {
+                        totalRoyalty = totalCost.multiply(config.getMediaTaskNoFinishRate()).divide(new BigDecimal("1000")).setScale(2, RoundingMode.HALF_UP);
+                    }
+                }
+
+
+            //运营绩效数据入库
+            PerformanceOptimizer performanceOptimizer = new PerformanceOptimizer();
+            performanceOptimizer.setAppType(mediaType);
+            performanceOptimizer.setQuarter(quarter + "");
+            performanceOptimizer.setYear(year + "");
+            performanceOptimizer.setRealname(userDto.getRealname());
+            performanceOptimizer.setTotalCost(totalCost);
+            performanceOptimizer.setTotalRoyalty(totalRoyalty);
+            performanceOptimizer.setUserId(userDto.getUserId());
+            performanceOptimizerMapper.insert(performanceOptimizer);
+        }
+        return;
+    }
+
+    //快手运营leader绩效计算
+    public void kuaishouYunyingLeaderQuarterPerformance(Integer year, Integer quarter){
+        Integer mediaType = 2;
+        //获取快手组下所有运营组长信息列表
+        List<UserDto2> yunyingLeaderList = userEfficientVideoMapMapper.getKuaishouYunyingLeaderUserInfo();
+        for(UserDto2 userDto2:yunyingLeaderList){
+            BigDecimal royalty = BigDecimal.ZERO;
+            List<UserDto2> userList = userEfficientVideoMapMapper.getYunyingLeaderMember(userDto2.getDepId());
+
+            for (UserDto2 user:userList){
+                BigDecimal userRoality = userEfficientVideoMapMapper.getYunyingRoyalty(user.getUserId(), year, quarter);
+                if (userRoality == null){
+                    userRoality= BigDecimal.ZERO;
+                }
+                royalty =  royalty.add(userRoality);
+            }
+            //运营leader绩效数据入库
+            PerformanceOptimizer performanceOptimizer = new PerformanceOptimizer();
+            performanceOptimizer.setAppType(mediaType);
+            performanceOptimizer.setQuarter(quarter + "");
+            performanceOptimizer.setYear(year + "");
+            performanceOptimizer.setRealname(userDto2.getRealname());
+            performanceOptimizer.setTotalCost(royalty);
+            performanceOptimizer.setTotalRoyalty( royalty.multiply(new BigDecimal("0.2")) );
+            performanceOptimizer.setUserId(userDto2.getUserId());
+            performanceOptimizerMapper.insert(performanceOptimizer);
+        }
+    }
+
+    //TODO 头条运营leader绩效计算
+    public void toutiaoYunyingLeaderQuarterPerformance(){
+
+
+    }
+
+
+    private List<OptimizerCostDetailVO> getOptimizerTotalCostDetailGroupByUserId(String mediaType, String userId, Integer year, Integer quarter, String startDate, String endDate) {
+        if (null != mediaType && mediaType.equals(CtopAdConstant.PLATFORM_TYPE_KUAISHOU)) {
+            //快手
+            return performanceMapper.getKuaishouOptimizerTotalCostDetailGroupByUserId(startDate, endDate, year+"", quarter+"", userId, null, null);
+        } else {
+            //头条
+            return performanceMapper.getBytedanceOptimizerTotalCostDetailGroupByUserId(startDate, endDate, year+"", quarter+"", userId, null, null);
+        }
+    }
+
+
 
     @Override
     public Map<String, Object> getPerformanceDetail(String mediaType, Integer pageNo, Integer pageSize) {
@@ -205,6 +537,7 @@ public class PerformanceOptimizerServiceImpl extends ServiceImpl<PerformanceOpti
     private UserPerformanceDetailVO getPerformanceDetailVO(String appType, OptimizerCostDetailVO kuaishouCostVo, OptimizerConfig kuaishouConfig) {
         OptimizerCostDetailVO totalCostVo = performanceService.getOptimizerTotalCost(appType);
         UserPerformanceDetailVO performanceDetailVO = new UserPerformanceDetailVO();
+        //计算绩效
         kuaishouCostVo.setTotalRoyalty(getTotalRoyalty(kuaishouConfig, kuaishouCostVo, totalCostVo));
         performanceDetailVO.setRealName(kuaishouCostVo.getRealName());
         performanceDetailVO.setTotalPersonalCost(kuaishouCostVo.getTotalCost());
@@ -275,16 +608,17 @@ public class PerformanceOptimizerServiceImpl extends ServiceImpl<PerformanceOpti
         //个人季度任务
         BigDecimal personalTask = config.getPersonalTask();
         //媒体季度任务
-        BigDecimal mediaTask = config.getMediaTask();
+        //BigDecimal mediaTask = config.getMediaTask();
         //个人任务未完成
-        if (totalCost.compareTo(personalTask) < 0) {
-            return royalty;
-        }
-        //季度任务未完成
-        if (quarterCost.getTotalCost().compareTo(mediaTask) < 0) {
-            return totalCost.multiply(config.getMediaTaskNoFinishRate()).divide(new BigDecimal("1000")).setScale(2, RoundingMode.HALF_UP);
-        }
+        //if (totalCost.compareTo(personalTask) < 0) {
+        //    return royalty;
+        //}
+        //季度任务不在普通运营的业务范围内
+        //if (quarterCost.getTotalCost().compareTo(mediaTask) < 0) {
+        //    return totalCost.multiply(config.getMediaTaskNoFinishRate()).divide(new BigDecimal("1000")).setScale(2, RoundingMode.HALF_UP);
+        //}
         PerformanceConfig performanceConfig = performanceConfigService.getNowConfig();
+        //判断个人任务是否完成 ,如果完成则给到千分之5,如果未完成,则给到千分之3的绩效
         if (null != performanceConfig && performanceConfig.getMediaTaskRaise() == 1) {
             return totalCost.multiply(config.getMediaTaskFinishRate()).divide(new BigDecimal("1000")).setScale(2, RoundingMode.HALF_UP);
         } else {

+ 34 - 0
performance-appraisal/src/main/java/cn/com/ctop/userefficientvideomap/entity/TransferorAccountDTO.java

@@ -0,0 +1,34 @@
+package cn.com.ctop.userefficientvideomap.entity;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+
+@Data
+public class TransferorAccountDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private Long id;
+
+    private Long accountId;
+
+    private Long projectId;
+
+    private String transferor;
+
+    private String assignee;
+
+    private String transferorDate;
+
+    private String assigneeDate;
+
+    private String auditor;
+
+    private Integer status;
+
+    private String remarks;
+
+
+}

+ 3 - 0
performance-appraisal/src/main/java/cn/com/ctop/userefficientvideomap/entity/UserEfficientVideoMap.java

@@ -1,6 +1,7 @@
 package cn.com.ctop.userefficientvideomap.entity;
 
 import java.io.Serializable;
+import java.math.BigDecimal;
 import java.util.Date;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
@@ -83,5 +84,7 @@ public class UserEfficientVideoMap {
 
     private String companyId;
 
+    private BigDecimal cost;
+
 
 }

+ 33 - 2
performance-appraisal/src/main/java/cn/com/ctop/userefficientvideomap/mapper/UserEfficientVideoMapMapper.java

@@ -126,8 +126,12 @@ public interface UserEfficientVideoMapMapper extends BaseMapper<UserEfficientVid
 
     List<UserDto2> getKuaishouYunyingDepartUserInfo();
 
+    List<UserDto2> getAllKuaishouYunyingDepartUserInfo();
+
     List<UserDto2> getToutiaoYunyingDepartUserInfo();
 
+    List<UserDto2> getAllToutiaoYunyingDepartUserInfo();
+
     //获取快手单个优化师当前账户下的总消耗
     BigDecimal getKuaishouYunyingTotalCost(@Param("userId") String userId, @Param("appType") Integer appType, @Param("startDate") String startDate, @Param("endDate") String endDate);
 
@@ -164,7 +168,7 @@ public interface UserEfficientVideoMapMapper extends BaseMapper<UserEfficientVid
 
     List<String> getVideoByDates(@Param("startDate")String startDate, @Param("endDate")String endDate);
 
-    Integer getVideoCountByCode(@Param("signature")String signature);
+    Integer getVideoCountByCode(@Param("signature")String signature, @Param("appType")Integer appType);
 
     List<String> getTotalSignatureByUserId(@Param("userId")String userId, @Param("startDate")String startDate, @Param("endDate")String endDate);
 
@@ -172,6 +176,33 @@ public interface UserEfficientVideoMapMapper extends BaseMapper<UserEfficientVid
 
     BigDecimal getToutiaoSumChargeBySignature(@Param("signature")String signature, @Param("startDate")String startDate, @Param("endDate")String endDate);
 
-    List<MaterialInfo> getVideoList(@Param("userId")String userId, @Param("startDate")String startDate, @Param("endDate")String endDate);
+    List<MaterialInfo> getVideoList(@Param("appType")Integer appType, @Param("userId")String userId, @Param("startDate")String startDate, @Param("endDate")String endDate);
+
+    Integer kuaishouCreativeLtCount(@Param("signature")String signature, @Param("date")String date);
+
+    String kuaishouCreativeEarlistDate(@Param("signature")String singature);
+
+    List<String> getToutiaoVideoByDates(@Param("startDate")String startDate, @Param("endDate")String endDate);
+
+    Integer toutiaoCreativeLtCount(@Param("signature")String signature, @Param("date")String date);
+
+    String toutiaoCreativeEarlistDate(@Param("signature")String singature);
+
+    List<String> getAccountIdByUserId(@Param("userId")String userId);
+
+    List<TransferorAccountDTO> accountTransforerListByUserId(@Param("accountId")String accountId, @Param("startDate")String startDate, @Param("endDate")String endDate);
+
+    BigDecimal getAccountSumCharge(@Param("accountId")String accountId, @Param("startDate")String startDate, @Param("endDate")String endDate);
+
+    BigDecimal getToutiaoAccountSumCharge(@Param("accountId")String accountId, @Param("startDate")String startDate, @Param("endDate")String endDate);
+
+    List<UserDto2> getKuaishouYunyingLeaderUserInfo();
+
+    List<UserDto2> getToutiaoYunyingLeaderUserInfo();
+
+    List<UserDto2> getYunyingLeaderMember(@Param("depId")String depId);
+
+    BigDecimal getYunyingRoyalty(@Param("userId")String userId, @Param("year")Integer year, @Param("quarter")Integer quarter);
+
 }
 

+ 218 - 3
performance-appraisal/src/main/java/cn/com/ctop/userefficientvideomap/mapper/xml/UserEfficientVideoMapMapper.xml

@@ -856,6 +856,22 @@
         left join sys_user_role ur on u.id = ur.user_id
         left join sys_role r on ur.role_id = r.id
         WHERE b.parent_id = '024b0dc0840045afb048022a8c61253f'  <!-- 快手运营部 -->
+        and r.role_code = 'operator'
+    </select>
+
+    <!-- 获取北京快手运营部所有人的信息 -->
+    <select id="getAllKuaishouYunyingDepartUserInfo" resultType="cn.com.ctop.userefficientvideomap.entity.UserDto2">
+        select u.id as userId,
+        u.realname as realname,
+        r.role_name as roleName,
+        r.role_code as roleCode,
+        r.id as roleId
+        FROM sys_user_depart ud
+        left join sys_depart b on ud.dep_id = b.id
+        left join sys_user u on ud.user_id = u.id
+        left join sys_user_role ur on u.id = ur.user_id
+        left join sys_role r on ur.role_id = r.id
+        WHERE b.parent_id = '024b0dc0840045afb048022a8c61253f'  <!-- 快手运营部 -->
     </select>
 
     <!-- 获取北京头条运营部所有优化师得信息 -->
@@ -871,6 +887,22 @@
         left join sys_user_role ur on u.id = ur.user_id
         left join sys_role r on ur.role_id = r.id
         WHERE b.parent_id = 'c869de6bedc44a50803e45a4611df05e'  <!-- 头条运营部 -->
+        and r.role_code = 'operator'
+    </select>
+
+    <!-- 获取北京头条运营部所有优化师得信息 -->
+    <select id="getAllToutiaoYunyingDepartUserInfo" resultType="cn.com.ctop.userefficientvideomap.entity.UserDto2">
+        select u.id as userId,
+        u.realname as realname,
+        r.role_name as roleName,
+        r.role_code as roleCode,
+        r.id as roleId
+        FROM sys_user_depart ud
+        left join sys_depart b on ud.dep_id = b.id
+        left join sys_user u on ud.user_id = u.id
+        left join sys_user_role ur on u.id = ur.user_id
+        left join sys_role r on ur.role_id = r.id
+        WHERE b.parent_id = 'c869de6bedc44a50803e45a4611df05e'  <!-- 头条运营部 -->
     </select>
 
     <!-- 获取快手单个优化师当前账户下的总消耗 -->
@@ -1135,7 +1167,7 @@
 
     <!-- 按时间段获取视频总量 -->
     <select id="getVideoByDates" resultType="string">
-        select
+       <!-- select
         code
         from (
             select
@@ -1148,7 +1180,40 @@
             date_format(create_time, '%Y-%m-%d') &lt;= #{endDate}
             order by create_time
             ) a
-        group by code
+        group by code -->
+
+            select
+            b.signature
+        from ctop_kuaishou_creative a
+        left join ctop_kuaishou_video_get b on  a.photo_id = b.photo_id
+        where
+        date_format(a.creative_create_time, '%Y-%m-%d') &gt;= #{startDate}
+        and
+        date_format(a.creative_create_time, '%Y-%m-%d') &lt;= #{endDate}
+        and b.signature is not null
+        group by b.signature
+    </select>
+
+    <select id="kuaishouCreativeLtCount" resultType="integer">
+            select
+            count(1)
+        from ctop_kuaishou_creative a
+        left join ctop_kuaishou_video_get b on a.photo_id = b.photo_id
+        where
+        b.signature = #{signature}
+        and
+        date_format(a.creative_create_time, '%Y-%m-%d') &lt; #{date}
+    </select>
+
+    <select id="kuaishouCreativeEarlistDate" resultType="string">
+            select
+            date_format(creative_create_time, '%Y-%m-%d') as date
+        from ctop_kuaishou_creative a
+        left join ctop_kuaishou_video_get b on a.photo_id = b.photo_id
+        where
+        b.signature = #{signature}
+        order by a.creative_create_time
+        limit 1
     </select>
 
     <select id="getVideoCountByCode" resultType="integer">
@@ -1157,6 +1222,42 @@
         from
         ctop_user_video_map
         where video_signature = #{signature}
+        and app_type = #{appType}
+    </select>
+
+    <select id="toutiaoCreativeEarlistDate" resultType="string">
+            select
+            date_format(creative_create_time, '%Y-%m-%d') as date
+        from ctop_bytedance_creative a
+        left join ctop_bytedance_video_info b on a.video_id = b.id
+        where
+        b.signature = #{signature}
+        order by a.creative_create_time
+        limit 1
+    </select>
+
+    <select id="toutiaoCreativeLtCount" resultType="integer">
+            select
+            count(1)
+        from ctop_bytedance_creative a
+        left join ctop_bytedance_video_info b on a.video_id = b.id
+        where
+        b.signature = #{signature}
+        and
+        date_format(a.creative_create_time, '%Y-%m-%d') &lt; #{date}
+    </select>
+
+    <select id="getToutiaoVideoByDates" resultType="string">
+        select
+        b.signature
+        from ctop_bytedance_creative a
+        left join ctop_bytedance_video_info b on a.video_id = b.id
+        where
+        date_format(a.creative_create_time, '%Y-%m-%d') &gt;= #{startDate}
+        and
+        date_format(a.creative_create_time, '%Y-%m-%d') &lt;= #{endDate}
+        and b.signature is not null
+        group by b.signature
     </select>
 
     <!-- 视频素材 -->
@@ -1182,7 +1283,121 @@
         where
         m.user_id = #{userId} and
         m.calc_date &gt;= #{startDate} and
-        m.calc_date &lt;= #{endDate}
+        m.calc_date &lt;= #{endDate} and
+        m.app_type = #{appType}
+    </select>
+
+    <select id="getAccountIdByUserId" resultType="string">
+        select
+        account_id
+        from
+        ctop_user_allocation
+        where
+        user_id = #{userId}
+    </select>
+
+    <select id="accountTransforerListByUserId" resultType="cn.com.ctop.userefficientvideomap.entity.TransferorAccountDTO">
+            select
+            account_id as accountId,
+            project_id as projectId,
+            transferor,
+            assignee,
+            transferor_date as transferorDate,
+            assignee_date as assigneeDate
+        from ctop_transfer_account
+        where
+        account_id = #{accountId}
+        and assignee_date &gt;= #{startDate}
+        and transferor_date &lt;= #{endDate}
+        order by transferor_date asc
+    </select>
+
+    <select id="getAccountSumCharge" resultType="java.math.BigDecimal">
+        select
+        sum(charge)
+        from
+        ctop_kuaishou_report_daily_account
+        where
+        account_id = #{accountId}
+        and
+        stat_date &lt;= #{endDate}
+        and
+        stat_date &gt;= #{startDate}
+    </select>
+
+    <select id="getToutiaoAccountSumCharge" resultType="java.math.BigDecimal">
+        select
+        sum(cost)
+        from
+        ctop_bytedance_report_advertiser_daily
+        where
+        advertiser_id = #{accountId}
+        and
+        date_format(stat_datetime, '%Y-%m-%d') &lt;= #{endDate}
+        and
+        date_format(stat_datetime, '%Y-%m-%d') &gt;= #{startDate}
+    </select>
+
+    <!-- 获取北京快手运营部所有运营经理的信息 -->
+    <select id="getKuaishouYunyingLeaderUserInfo" resultType="cn.com.ctop.userefficientvideomap.entity.UserDto2">
+        select u.id as userId,
+        u.realname as realname,
+        r.role_name as roleName,
+        r.role_code as roleCode,
+        r.id as roleId,
+        ud.dep_id as depId
+        FROM sys_user_depart ud
+        left join sys_depart b on ud.dep_id = b.id
+        left join sys_user u on ud.user_id = u.id
+        left join sys_user_role ur on u.id = ur.user_id
+        left join sys_role r on ur.role_id = r.id
+        WHERE b.parent_id = '024b0dc0840045afb048022a8c61253f'  <!-- 快手运营部 -->
+        and r.role_code = 'kuaishouOperationManager'
+    </select>
+
+    <!-- 获取北京头条运营部所有优化师得信息 -->
+    <select id="getToutiaoYunyingLeaderUserInfo" resultType="cn.com.ctop.userefficientvideomap.entity.UserDto2">
+        select u.id as userId,
+        u.realname as realname,
+        r.role_name as roleName,
+        r.role_code as roleCode,
+        r.id as roleId,
+        ud.dep_id as depId
+        FROM sys_user_depart ud
+        left join sys_depart b on ud.dep_id = b.id
+        left join sys_user u on ud.user_id = u.id
+        left join sys_user_role ur on u.id = ur.user_id
+        left join sys_role r on ur.role_id = r.id
+        WHERE b.parent_id = 'c869de6bedc44a50803e45a4611df05e'  <!-- 头条运营部 -->
+        and r.role_code = 'toutiaoOperationManager'
+    </select>
+
+    <!-- 获取运营组下所有运营 -->
+    <select id="getYunyingLeaderMember" resultType="cn.com.ctop.userefficientvideomap.entity.UserDto2">
+        select u.id as userId,
+        u.realname as realname,
+        r.role_name as roleName,
+        r.role_code as roleCode,
+        r.id as roleId,
+        ud.dep_id as depId
+        FROM sys_user_depart ud
+        left join sys_depart b on ud.dep_id = b.id
+        left join sys_user u on ud.user_id = u.id
+        left join sys_user_role ur on u.id = ur.user_id
+        left join sys_role r on ur.role_id = r.id
+        WHERE b.id = #{depId}
+        and r.role_code = 'operator'
+    </select>
+
+    <!-- 获取运营绩效 -->
+    <select id="getYunyingRoyalty" resultType="java.math.BigDecimal">
+        select
+        total_royalty
+        from
+        ctop_performance_optimizer
+        where user_id = #{userId}
+        and year = #{year}
+        and quarter = #{quarter}
     </select>
 
 </mapper>

+ 4 - 0
performance-appraisal/src/main/java/cn/com/ctop/uservideomap/entity/UserVideoMap.java

@@ -84,4 +84,8 @@ public class UserVideoMap {
 	/**updateTime*/
     @ApiModelProperty(value = "updateTime")
 	private Date updateTime;
+
+    private String creativeDate;
+
+    private Integer appType;
 }