Browse Source

Merge remote-tracking branch 'origin/test_performance' into test_performance

syh 5 years ago
parent
commit
890f7af1c9

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

@@ -1114,22 +1114,22 @@ public class DateUtils extends PropertyEditorSupport {
         Map<String,Integer> resultMap = new HashMap<>();
        //获取当天所在
        Map<String,Integer> yearQuarter = getYearQuarter(date);
-       Integer lastyear = yearQuarter.get("year");
-       Integer lastquarter = yearQuarter.get("quarter");
+       Integer year = yearQuarter.get("year");
+       Integer quarter = yearQuarter.get("quarter");
 
-        Integer year = 0;
-        Integer quarter = 0;
+       Integer lastyear = 0;
+       Integer lastQuarter = 0;
 
-       if(lastquarter == 4 || lastquarter == 3 || lastquarter == 2){
-           year = lastyear;
-           quarter = lastyear - 1;
+       if(quarter == 4 || quarter == 3 || quarter == 2){
+           lastyear = year;
+           lastQuarter = quarter - 1;
        }else{
-           year = lastyear -1;
-           quarter = 1;
+           lastyear = year -1;
+           lastQuarter = 4;
        }
 
-       resultMap.put("year",year);
-       resultMap.put("quarter",quarter);
+       resultMap.put("year",lastyear);
+       resultMap.put("quarter",lastQuarter);
 
        return resultMap;
     }
@@ -1147,15 +1147,15 @@ public class DateUtils extends PropertyEditorSupport {
         //Date effiStart = DateUtils.addDay(friDay,  -15);
         //System.out.println(sdf.format(effiStart));
 
-        Map<String,Integer> map1 = DateUtils.getYearQuarter(DateUtils.parseDate("2020-04-01","yyyy-MM-dd"));
-
-        Map<String,String> map2 = DateUtils.quarterStartEndDate(2019,1);
-
-        for(String key:map2.keySet()){
-            System.out.println(key + ":" + map2.get(key));
-        }
+        //Map<String,Integer> map1 = DateUtils.getYearQuarter(DateUtils.parseDate("2020-04-01","yyyy-MM-dd"));
 
+        //Map<String,String> map2 = DateUtils.quarterStartEndDate(2019,1);
+        //
+        //for(String key:map2.keySet()){
+        //    System.out.println(key + ":" + map2.get(key));
+        //}
 
+        //DateUtils.lastQuarter(new Date());
 
     }
 

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

@@ -114,7 +114,7 @@ public class PerformanceController2 {
                                                               @RequestParam(name = "quarter", required = true) int quarter) {
         Result<Map<String,Object>> result = new Result<Map<String,Object>>();
         try {
-            performanceService.designerPerformanceTask(1,2);
+            performanceService.designerPerformanceTask(year,quarter);
             result.setSuccess(true);
         } catch (Exception e) {
             log.error(e.getMessage(), e);
@@ -144,4 +144,108 @@ public class PerformanceController2 {
         return result;
     }
 
+    @AutoLog(value = "根据year、quarter计算kuaishou季度设计师绩效")
+    @ApiOperation(value = "根据year、quarter计算kuaishou季度设计师绩效", notes = "根据year、quarter计算kuaishou季度设计师绩效")
+    @PostMapping(value = "/toutiaoDesignerPerformance")
+    public Result<Map<String,Object>> toutiaoDesignerPerformance(@RequestParam(name = "year", required = true) int year,
+                                                              @RequestParam(name = "quarter", required = true) int quarter) {
+        Result<Map<String,Object>> result = new Result<Map<String,Object>>();
+        try {
+            performanceService.toutiaoDesigner(year,quarter);
+            result.setSuccess(true);
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            log.error("/ctop/performance2/toutiaoDesignerPerformance出错啦" + "year:" + year + " quarter:" + quarter);
+            result.error500("/ctop/performance2/toutiaoDesignerPerformance出错啦");
+        }
+        return result;
+    }
+
+    @AutoLog(value = "根据year、quarter计算toutiao季度设计师绩效")
+    @ApiOperation(value = "根据year、quarter计算toutiao季度设计师绩效", notes = "根据year、quarter计算toutiao季度设计师绩效")
+    @PostMapping(value = "/kuaishouDesignerPerformance")
+    public Result<Map<String,Object>> kuaishouDesignerPerformance(@RequestParam(name = "year", required = true) int year,
+                                                              @RequestParam(name = "quarter", required = true) int quarter) {
+        Result<Map<String,Object>> result = new Result<Map<String,Object>>();
+        try {
+            performanceService.kuaishouDesigner(year,quarter);
+            result.setSuccess(true);
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            log.error("/ctop/performance2/kuaishouDesignerPerformance出错啦" + "year:" + year + " quarter:" + quarter);
+            result.error500("/ctop/performance2/kuaishouDesignerPerformance出错啦");
+        }
+        return result;
+    }
+
+    @AutoLog(value = "获取设计师组下所有人的绩效")
+    @ApiOperation(value = "获取设计师组下所有人的绩效", notes = "获取设计师组下所有人的绩效")
+    @PostMapping(value = "/designerLastQuarterPerformanceInfo")
+    public Result<Map<String,Object>> designerLastQuarterPerformanceInfo() {
+        Result<Map<String,Object>> result = new Result<Map<String,Object>>();
+        try {
+            Map<String,Object> resultMap = performanceService.designerLastQuarterPerformanceInfo();
+            result.setResult(resultMap);
+            result.setSuccess(true);
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            log.error("/ctop/performance2/designerLastQuarterPerformanceInfo出错啦");
+            result.error500("/ctop/performance2/designerLastQuarterPerformanceInfo出错啦");
+        }
+        return result;
+    }
+
+    @AutoLog(value = "获取同一媒体类型下上个季度所有人的绩效")
+    @ApiOperation(value = "获取同一媒体类型下上个季度所有人的绩效", notes = "获取同一媒体类型下上个季度所有人的绩效")
+    @PostMapping(value = "/quarterUserPerformanceList")
+    public Result<Map<String,Object>> quarterUserPerformanceList(@RequestParam(name = "appType", required = true) int appType) {
+        Result<Map<String,Object>> result = new Result<Map<String,Object>>();
+        try {
+            Map<String,Object> resultMap = performanceService.quarterUserPerformanceList(appType);
+            result.setResult(resultMap);
+            result.setSuccess(true);
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            log.error("/ctop/performance2/quarterUserPerformanceList出错啦");
+            result.error500("/ctop/performance2/quarterUserPerformanceList出错啦");
+        }
+        return result;
+    }
+
+    @AutoLog(value = "获取快手上个季度的季度有效数、素材总数、上个季度的绩效")
+    @ApiOperation(value = "获取快手上个季度的季度有效数、素材总数、上个季度的绩效", notes = "获取快手上个季度的季度有效数、素材总数、上个季度的绩效")
+    @PostMapping(value = "/kuaishouDesignerLastQuarterPerformanceInfo")
+    public Result<Map<String,Object>> kuaishouDesignerLastQuarterPerformanceInfo() {
+        Result<Map<String,Object>> result = new Result<Map<String,Object>>();
+        Map<String,Object> resultMap = new HashMap<>();
+        try {
+            resultMap = performanceService.kuaishouDesignerLastQuarterPerformanceInfo();
+            result.setResult(resultMap);
+            result.setSuccess(true);
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            log.error("/ctop/performance2/kuaishouDesignerLastQuarterPerformanceInfo出错啦");
+            result.error500("/ctop/performance2/kuaishouDesignerLastQuarterPerformanceInfo出错啦");
+        }
+        return result;
+    }
+
+    @AutoLog(value = "获取平面设计师上个季度的绩效")
+    @ApiOperation(value = "获取平面设计师上个季度的绩效", notes = "获取平面设计师上个季度的绩效")
+    @PostMapping(value = "/planeLastQuarterPerformanceInfo")
+    public Result<Map<String,Object>> planeLastQuarterPerformanceInfo(@RequestParam(name = "appType", required = true) int appType) {
+        Result<Map<String,Object>> result = new Result<Map<String,Object>>();
+        try {
+            Map<String, Object> resultMap = performanceService.planeLastQuarterPerformanceInfo(appType);
+            result.setResult(resultMap);
+            result.setSuccess(true);
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            log.error("/ctop/performance2/planeLastQuarterPerformanceInfo出错啦");
+            result.error500("/ctop/performance2/planeLastQuarterPerformanceInfo出错啦");
+        }
+        return result;
+    }
+
+
 }

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

@@ -53,4 +53,17 @@ public interface IPerformanceService2 extends IService<Performance> {
     List<DesignMaterialInfo> materialAccountInfo(String materialInfoId);
 
     void designerPerformanceTask(int year, int quarter);
+
+    void kuaishouDesigner(int thisYear, int thisQuarter);
+
+    void toutiaoDesigner(int thisYear, int thisQuarter);
+
+    Map<String,Object> designerLastQuarterPerformanceInfo();
+
+    Map<String, Object> quarterUserPerformanceList(Integer appType);
+
+    Map<String,Object> kuaishouDesignerLastQuarterPerformanceInfo();
+
+    Map<String,Object> planeLastQuarterPerformanceInfo(int appType);
+
 }

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

@@ -73,7 +73,7 @@ public class PerformanceServiceImpl2 extends ServiceImpl<PerformanceMapper, Perf
         String effiCalcStart = DateUtils.formatDate(DateUtils.addDay(friday, -14)); //计算有效视频开始的时间
         log.info("有效视频统计的开始时间为" + effiCalcStart);
         String effiCalcEnd = DateUtils.formatDate(DateUtils.addDay(friday, -1)); //计算有效视频结束的时间
-        log.info("有效视频统计的结束时间为" + effiCalcStart);
+        log.info("有效视频统计的结束时间为" + effiCalcEnd);
         String effiStart = DateUtils.formatDate(DateUtils.addDay(friday, -21)); //有效视频发布开始时间
         log.info("有效视频发布的开始时间为" + effiStart);
         String effiEnd = DateUtils.formatDate(DateUtils.addDay(friday, -15)); //有效视频发布结束时间
@@ -263,7 +263,8 @@ public class PerformanceServiceImpl2 extends ServiceImpl<PerformanceMapper, Perf
     }
 
     //快手设计师、设计师leader和平面设计师逻辑
-    private void kuaishouDesigner(int thisYear, int thisQuarter) {
+    @Override
+    public void kuaishouDesigner(int thisYear, int thisQuarter) {
         log.info(thisYear + "年第" + thisQuarter + "季度快手设计师季度绩效计算开始");
         Map<String, String> quarterStartEndDateMap = DateUtils.quarterStartEndDate(thisYear, thisQuarter);
         String startTime = quarterStartEndDateMap.get("startDate");
@@ -274,7 +275,7 @@ public class PerformanceServiceImpl2 extends ServiceImpl<PerformanceMapper, Perf
         //拍摄
         kuaishouShotPerformance(thisYear, thisQuarter, startTime, endTime);
         //剪辑
-        kuaishouClipPerformance(thisYear, thisQuarter, startTime, endTime);
+        //kuaishouClipPerformance(thisYear, thisQuarter, startTime, endTime);
         //平面设计
         kuaishouPlanePerformance(thisYear, thisQuarter, startTime, endTime);
         //设计师leader
@@ -284,7 +285,8 @@ public class PerformanceServiceImpl2 extends ServiceImpl<PerformanceMapper, Perf
     }
 
     //头条设计师逻辑
-    private void toutiaoDesigner(int thisYear, int thisQuarter) {
+    @Override
+    public void toutiaoDesigner(int thisYear, int thisQuarter) {
         log.info(thisYear + "年第" + thisQuarter + "季度头条设计师季度绩效计算开始");
         Map<String, String> quarterStartEndDateMap = DateUtils.quarterStartEndDate(thisYear, thisQuarter);
         String startTime = quarterStartEndDateMap.get("startDate");
@@ -309,7 +311,7 @@ public class PerformanceServiceImpl2 extends ServiceImpl<PerformanceMapper, Perf
     ////////////////////////////////////////////////////////////////////////////////////////////
     ////////////////////////////////////////////////////////////////////////////////////////////////编导季度绩效计算start
     private void kuaishouPlanPerformance(int thisYear, int thisQuarter, String startTime, String endTime) {
-        log.info(thisYear + "年第" + thisQuarter + "季度快手编导季度绩效计算开始");
+                             log.info(thisYear + "年第" + thisQuarter + "季度快手编导季度绩效计算开始");
         //1.根据角色(编导)查询出相对应角色所有的人
         //List<UserDto> planList = sysRoleMapper.getUserByRoleCode("plan"); //编导
         List<UserDto2> planList = userEfficientVideoMapMapper.getKuaishouPlanList(); //编导
@@ -327,9 +329,15 @@ public class PerformanceServiceImpl2 extends ServiceImpl<PerformanceMapper, Perf
 
         //获取编导人数并按照提点比例计算每个梯度的人数
         int planLength = planList.size();
+        log.info("快手参与有效率排名的编导总人数为:" + planLength);
         //获取前30%和中间50%的人数(视频有效率四舍五入)
         int top30 = new BigDecimal(String.valueOf(planLength)).multiply(new BigDecimal("0.3")).setScale(0, BigDecimal.ROUND_HALF_UP).intValue();
+        log.info("快手参与有效率排名的编导前30%人数为:" + top30);
         int middle50 = new BigDecimal(String.valueOf(planLength)).multiply(new BigDecimal("0.5")).setScale(0, BigDecimal.ROUND_HALF_UP).intValue();
+        log.info("快手参与有效率排名的编导中间50%人数为:" + middle50);
+        //测试数据
+        // top30 = 1;
+        // middle50 =1;
 
         //循环前30%有绩效的人数并计算其绩效,并入库
         for (int i = 0; i <= top30 - 1; i++) {
@@ -400,9 +408,15 @@ public class PerformanceServiceImpl2 extends ServiceImpl<PerformanceMapper, Perf
 
         //获取编导人数并按照提点比例计算每个梯度的人数
         int shotLength = shotList.size();
+        log.info("快手参与有效率排名的拍摄总人数为:" + shotLength);
         //获取前30%和中间50%的人数(视频有效率四舍五入)
         int shotTop30 = new BigDecimal(String.valueOf(shotLength)).multiply(new BigDecimal("0.3")).setScale(0, BigDecimal.ROUND_HALF_UP).intValue();
+        log.info("快手参与有效率排名的拍摄前30%人数为:" + shotTop30);
         int shotMiddle50 = new BigDecimal(String.valueOf(shotLength)).multiply(new BigDecimal("0.5")).setScale(0, BigDecimal.ROUND_HALF_UP).intValue();
+        log.info("快手参与有效率排名的拍摄中间50%人数为:" + shotTop30);
+        //测试完删除
+        // shotTop30 = 1;
+        // shotMiddle50 = 1;
 
         //循环前30%有绩效的人数并计算其绩效,并入库
         for (int i = 0; i <= shotTop30 - 1; i++) {
@@ -473,9 +487,15 @@ public class PerformanceServiceImpl2 extends ServiceImpl<PerformanceMapper, Perf
 
         //获取剪辑人数并按照提点比例计算每个梯度的人数
         int clipLength = clipList.size();
+        log.info("快手参与有效率排名的剪辑总人数为:" + clipLength);
         //获取前30%和中间50%的人数(视频有效率四舍五入)
         int clipTop30 = new BigDecimal(String.valueOf(clipLength)).multiply(new BigDecimal("0.3")).setScale(0, BigDecimal.ROUND_HALF_UP).intValue();
+        log.info("快手参与有效率排名的剪辑前30%人数为:" + clipTop30);
         int clipMiddle50 = new BigDecimal(String.valueOf(clipLength)).multiply(new BigDecimal("0.5")).setScale(0, BigDecimal.ROUND_HALF_UP).intValue();
+        log.info("快手参与有效率排名的剪辑中间50%人数为:" + clipMiddle50);
+        //测试完删除
+        //clipTop30 = 1;
+        //clipMiddle50 = 1;
 
         //循环前30%有绩效的人数并计算其绩效,并入库
         for (int i = 0; i <= clipTop30 - 1; i++) {
@@ -535,15 +555,33 @@ public class PerformanceServiceImpl2 extends ServiceImpl<PerformanceMapper, Perf
         //如果有并且不止一个就平分;创建一个list,将设计师的userDto加入进来,然后可以在不同的项目中累加(需要增加一张表格,然后记录其中的每一个项目消耗)
         Map<String, UserDto2> planeMap = new HashMap<>();
 
+        //TODO ctop_project表有修改,需要进行相对应的变化
         //获取所有project根据媒体类型获取快手下的项目类型 1头条 2快手
         List<ProjectDTO> projectDTOS = userEfficientVideoMapMapper.getProjects("2");
 
+        System.out.println("快手项目数量为:" + projectDTOS.size());
         //循环project
         for (ProjectDTO projectDTO : projectDTOS) {
-            BigDecimal quarterCost = userEfficientVideoMapMapper.getProjectQuarterCostById(startTime, endTime, projectDTO.getProjectId());
+            //测试使用
+            //if(projectDTO.getProjectId() != 42L){
+            //    continue;
+            //}
+            System.out.println("快手平面所在项目为:" + projectDTO.getProjectName());
+            //判断是否是北京的部门负责的项目,如果不是的话跳出
+            String orgCode = userEfficientVideoMapMapper.getOrgCodeByProjectId(projectDTO.getProjectId());
+            if (!orgCode.startsWith("A01")) {
+                log.info("此项目不属于北京公司,跳出进入下一个项目计算");
+                continue;
+            }
+
             List<UserDto2> planeList = userEfficientVideoMapMapper.getPlaneByProjectId(projectDTO.getProjectId());
-            //此项目当中平面数量
+            //此项目当中平面数量,平面数量为0的时候说明此project当中没有平面设计师,故跳过
             int size = planeList.size();
+            log.info(projectDTO.getProjectName() + "中有" + size + "个平面设计");
+            if(size == 0){
+                continue;
+            }
+            BigDecimal quarterCost = userEfficientVideoMapMapper.getProjectQuarterCostById(startTime, endTime, projectDTO.getProjectId());
             BigDecimal averageQuarterCost = quarterCost.divide(new BigDecimal(String.valueOf(size)));
 
             //循环项目下所有平面设计
@@ -559,10 +597,12 @@ public class PerformanceServiceImpl2 extends ServiceImpl<PerformanceMapper, Perf
                 planeProjectCost.setProjectTotalCost(quarterCost);
                 planeProjectCost.setProjectCost(averageQuarterCost);
                 planeProjectCost.setUserId(plane.getUserId());
-
+                //增加平面人数、和项目单独的绩效
+                planeProjectCost.setProjectPlaneCount(planeList.size());
+                planeProjectCost.setProjectPerformance(averageQuarterCost.multiply(new BigDecimal("0.05")));
                 if (null == planeMap.get(plane.getUserId())) {
                     plane.setEffiRate(averageQuarterCost);
-                    planeMap.put("plane.getUserId()", plane);
+                    planeMap.put(plane.getUserId(), plane);
                 } else {
                     //将增加的金额增加到
                     planeMap.get(plane.getUserId()).setEffiRate(planeMap.get(plane.getUserId()).getEffiRate().add(plane.getEffiRate()));
@@ -602,7 +642,7 @@ public class PerformanceServiceImpl2 extends ServiceImpl<PerformanceMapper, Perf
             BigDecimal totalCost = BigDecimal.ZERO; //剪辑总消耗
 
             for (String clipUserId : clipList) {
-                BigDecimal clipCost = userEfficientVideoMapMapper.getClipQuarterCost(2, thisYear, thisQuarter, clipUserId);  //媒体类型 //1头条 2快手
+                BigDecimal clipCost = userEfficientVideoMapMapper.getClipQuarterCost(2, thisQuarter, thisYear, clipUserId);  //媒体类型 //1头条 2快手
                 totalCost = totalCost.add(clipCost);
             }
 
@@ -649,9 +689,12 @@ public class PerformanceServiceImpl2 extends ServiceImpl<PerformanceMapper, Perf
 
         //获取编导人数并按照提点比例计算每个梯度的人数
         int planLength = planList.size();
+        log.info("头条参与有效率排名的编导总人数为:" + planLength);
         //获取前30%和中间50%的人数(视频有效率四舍五入)
         int top30 = new BigDecimal(String.valueOf(planLength)).multiply(new BigDecimal("0.3")).setScale(0, BigDecimal.ROUND_HALF_UP).intValue();
+        log.info("头条参与有效率排名的编导前30%人数为:" + top30);
         int middle50 = new BigDecimal(String.valueOf(planLength)).multiply(new BigDecimal("0.5")).setScale(0, BigDecimal.ROUND_HALF_UP).intValue();
+        log.info("头条参与有效率排名的编导中间50%人数为:" + middle50);
 
         //循环前30%有绩效的人数并计算其绩效,并入库
         for (int i = 0; i <= top30 - 1; i++) {
@@ -722,9 +765,12 @@ public class PerformanceServiceImpl2 extends ServiceImpl<PerformanceMapper, Perf
 
         //获取编导人数并按照提点比例计算每个梯度的人数
         int shotLength = shotList.size();
+        log.info("头条参与有效率排名的拍摄总人数为:" + shotLength);
         //获取前30%和中间50%的人数(视频有效率四舍五入)
         int shotTop30 = new BigDecimal(String.valueOf(shotLength)).multiply(new BigDecimal("0.3")).setScale(0, BigDecimal.ROUND_HALF_UP).intValue();
+        log.info("头条参与有效率排名的拍摄前30%人数为:" + shotTop30);
         int shotMiddle50 = new BigDecimal(String.valueOf(shotLength)).multiply(new BigDecimal("0.5")).setScale(0, BigDecimal.ROUND_HALF_UP).intValue();
+        log.info("头条参与有效率排名的拍摄中间50%人数为:" + shotMiddle50);
 
         //循环前30%有绩效的人数并计算其绩效,并入库
         for (int i = 0; i <= shotTop30 - 1; i++) {
@@ -795,9 +841,12 @@ public class PerformanceServiceImpl2 extends ServiceImpl<PerformanceMapper, Perf
 
         //获取剪辑人数并按照提点比例计算每个梯度的人数
         int clipLength = clipList.size();
+        log.info("头条参与有效率排名的剪辑总人数为:" + clipLength);
         //获取前30%和中间50%的人数(视频有效率四舍五入)
         int clipTop30 = new BigDecimal(String.valueOf(clipLength)).multiply(new BigDecimal("0.3")).setScale(0, BigDecimal.ROUND_HALF_UP).intValue();
+        log.info("头条参与有效率排名的前30%的人数为:" + clipTop30);
         int clipMiddle50 = new BigDecimal(String.valueOf(clipLength)).multiply(new BigDecimal("0.5")).setScale(0, BigDecimal.ROUND_HALF_UP).intValue();
+        log.info("头条参与有效率排名的中间50%的人数为:" + clipMiddle50);
 
         //循环前30%有绩效的人数并计算其绩效,并入库
         for (int i = 0; i <= clipTop30 - 1; i++) {
@@ -857,15 +906,27 @@ public class PerformanceServiceImpl2 extends ServiceImpl<PerformanceMapper, Perf
         //如果有并且不止一个就平分;创建一个list,将设计师的userDto加入进来,然后可以在不同的项目中累加(需要增加一张表格,然后记录其中的每一个项目消耗)
         Map<String, UserDto2> planeMap = new HashMap<>();
 
+        //TODO ctop_project表有修改,需要进行相对应的变化
         //获取所有project根据媒体类型获取快手下的项目类型 1-头条 2-快手
         List<ProjectDTO> projectDTOS = userEfficientVideoMapMapper.getProjects("1");
+        System.out.println("头条项目数量为:" + projectDTOS.size());
 
         //循环project
         for (ProjectDTO projectDTO : projectDTOS) {
-            BigDecimal quarterCost = userEfficientVideoMapMapper.getProjectQuarterCostById(startTime, endTime, projectDTO.getProjectId());
+            //判断是否是北京的部门负责的项目,如果不是的话跳出
+            String orgCode = userEfficientVideoMapMapper.getOrgCodeByProjectId(projectDTO.getProjectId());
+            if (!orgCode.startsWith("A01")) {
+                log.info(projectDTO.getProjectName() + "不是北京的部门的项目,跳出");
+                continue;
+            }
+
             List<UserDto2> planeList = userEfficientVideoMapMapper.getPlaneByProjectId(projectDTO.getProjectId());
-            //此项目当中平面数量
+            //此项目当中平面数量,平面数量为0的时候说明此project当中没有平面设计师,故跳过
             int size = planeList.size();
+            if(size == 0){
+                continue;
+            }
+            BigDecimal quarterCost = userEfficientVideoMapMapper.getProjectQuarterCostById(startTime, endTime, projectDTO.getProjectId());
             BigDecimal averageQuarterCost = quarterCost.divide(new BigDecimal(String.valueOf(size)));
 
             //循环项目下所有平面设计
@@ -881,6 +942,9 @@ public class PerformanceServiceImpl2 extends ServiceImpl<PerformanceMapper, Perf
                 planeProjectCost.setProjectTotalCost(quarterCost);
                 planeProjectCost.setProjectCost(averageQuarterCost);
                 planeProjectCost.setUserId(plane.getUserId());
+                //增加平面人数、和项目单独的绩效
+                planeProjectCost.setProjectPlaneCount(planeList.size());
+                planeProjectCost.setProjectPerformance(averageQuarterCost.multiply(new BigDecimal("0.05")));
 
                 if (null == planeMap.get(plane.getUserId())) {
                     plane.setEffiRate(averageQuarterCost);
@@ -924,7 +988,7 @@ public class PerformanceServiceImpl2 extends ServiceImpl<PerformanceMapper, Perf
             BigDecimal totalCost = BigDecimal.ZERO; //剪辑总消耗
 
             for (String clipUserId : clipList) {
-                BigDecimal clipCost = userEfficientVideoMapMapper.getClipQuarterCost(1, thisYear, thisQuarter, clipUserId);  //媒体类型 //1头条 2快手
+                BigDecimal clipCost = userEfficientVideoMapMapper.getClipQuarterCost(1, thisQuarter, thisYear, clipUserId);  //媒体类型 //1头条 2快手
                 totalCost = totalCost.add(clipCost);
             }
 
@@ -1370,13 +1434,15 @@ public class PerformanceServiceImpl2 extends ServiceImpl<PerformanceMapper, Perf
     //{"videoAccount":"aabbcc","servingAccount":"ttyyhh","cost":34234.43}
     public List<DesignMaterialInfo> materialAccountInfo(String materialInfoId) {
         log.info("materialAccountInfo接口开始");
-        Date date = new Date();
-        Date getDate = DateUtils.addDay(date, -1);
-        String startDate = DateUtils.getQuarterStartDate(getDate);
-        String endDate = DateUtils.getQuarterEndDate(getDate);
-        String endNowDate = DateUtils.formatDate(getDate);
+        Map<String,Integer> quarterMap = DateUtils.lastQuarter(new Date());
+        int year = quarterMap.get("year");
+        int quarter = quarterMap.get("quarter");
 
-        List<DesignMaterialInfo> materialInfoList = userEfficientVideoMapMapper.getMaterialAccountInfoByMaterialId(materialInfoId, startDate, endNowDate);
+        Map<String,String> quarterDate = DateUtils.quarterStartEndDate(year,quarter);
+        String startDate = quarterDate.get("startDate");
+        String endDate = quarterDate.get("endDate");
+
+        List<DesignMaterialInfo> materialInfoList = userEfficientVideoMapMapper.getMaterialAccountInfoByMaterialId(materialInfoId, startDate, endDate);
         log.info("materialAccountInfo接口结束");
         return materialInfoList;
     }
@@ -1397,5 +1463,149 @@ public class PerformanceServiceImpl2 extends ServiceImpl<PerformanceMapper, Perf
         timeMap.put("quarter", quarter);
         return timeMap;
     }
+
+    //获取快手上个季度的季度有效数、素材总数、上个季度的绩效
+    public Map<String,Object> kuaishouDesignerLastQuarterPerformanceInfo(){
+        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+
+        //TODO 测试使用
+        //LoginUser sysUser = new LoginUser();
+        //sysUser.setId("f1f4c325a1234827af28fb4d957ffd70");
+        //
+
+        Map<String,Integer> quarterMap = DateUtils.lastQuarter(new Date());
+        int year = quarterMap.get("year");
+        int quarter = quarterMap.get("quarter");
+
+        Map<String,String> quarterDate = DateUtils.quarterStartEndDate(year,quarter);
+        String startDate = quarterDate.get("startDate");
+        String endDate = quarterDate.get("endDate");
+        SysRole role = userEfficientVideoMapMapper.getRoleIdByUserId(sysUser.getId());
+
+        //有效视频数量 1toutiao 2kuaishou
+        int effiVideoCount = userEfficientVideoMapMapper.getEffiVideoCountByUserId(2, year, quarter, sysUser.getId(), role.getId());
+        //总视频数量
+        int videoCount = userEfficientVideoMapMapper.getQuarterMaterialCountByUserId("plan", startDate, endDate, sysUser.getId());
+        //获取季度总绩效
+        BigDecimal performance = userEfficientVideoMapMapper.getQuarterPerformance(sysUser.getId(), year, quarter, 2);
+
+        //素材列表
+        List<DesignMaterialInfo> materialInfoList = userEfficientVideoMapMapper.designMaterialInfoList(role.getRoleCode(), sysUser.getId(), startDate, endDate);
+
+        Map<String,Object> resultMap = new HashMap();
+        resultMap.put("effiVideoCount",effiVideoCount);
+        resultMap.put("videoCount",videoCount);
+        resultMap.put("performance",performance);
+        resultMap.put("materialInfoList",materialInfoList);
+
+        return resultMap;
+    }
+
+    //TODO 获取头条上个季度的季度有效数、素材总数、上个季度的绩效
+    public void toutiaoDesignerLastQuarterPerformanceInfo(){
+        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        Map<String,Integer> quarterMap = DateUtils.lastQuarter(new Date());
+        int year = quarterMap.get("year");
+        int quarter = quarterMap.get("quarter");
+        Map<String,String> quarterDate = DateUtils.quarterStartEndDate(year,quarter);
+        String startDate = quarterDate.get("startDate");
+        String endDate = quarterDate.get("endDate");
+        SysRole role = userEfficientVideoMapMapper.getRoleIdByUserId(sysUser.getId());
+
+        //有效视频数量 1toutiao 2kuaishou
+        int effiVideoCount = userEfficientVideoMapMapper.getEffiVideoCountByUserId(2, year, quarter, sysUser.getId(), role.getId());
+        //总视频数量
+        int videoCount = userEfficientVideoMapMapper.getQuarterMaterialCountByUserId("plan", startDate, endDate, sysUser.getId());
+        //获取季度总绩效
+        BigDecimal performance = userEfficientVideoMapMapper.getQuarterPerformance(sysUser.getId(), year, quarter, 1);
+    }
+
+    //获取设计师组下所有人的绩效
+    public Map<String,Object>  designerLastQuarterPerformanceInfo(){
+        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+
+        //TODO 测试删除
+        //LoginUser sysUser = new LoginUser();
+        //sysUser.setId("825dd716d4c041f9ac1c600bf6183979");
+        //
+
+        Map<String,Integer> quarterMap = DateUtils.lastQuarter(new Date());
+        int year = quarterMap.get("year");
+        int quarter = quarterMap.get("quarter");
+        //Map<String,String> quarterDate = DateUtils.quarterStartEndDate(year,quarter);
+        //String startDate = quarterDate.get("startDate");
+        //String endDate = quarterDate.get("endDate");
+        //SysRole role = userEfficientVideoMapMapper.getRoleIdByUserId(sysUser.getId());
+
+        String DepartId = userEfficientVideoMapMapper.getDepartIdByUserId(sysUser.getId());
+        List<UserDto2> userDto2List = userEfficientVideoMapMapper.getUserListByDepartId(DepartId);
+
+        //需要判断属于哪个部门
+        //判断如果在parent_id是不是快手或者头条的
+        int appType = 0; //头条1;快手2
+        String parentId = userEfficientVideoMapMapper.getParentIdByDepartId(DepartId);
+        if(parentId.equals("26c10ecb5e0d416bb01f8ff983f4588c")){
+            appType = 1;
+        }else{
+            appType = 2;
+        }
+
+        //循环获取userDto然后获取赋值季度、年度以及部门、绩效
+        for (UserDto2 userDto:userDto2List){
+            userDto.setYear(year);
+            userDto.setQuarter(quarter);
+            String departName = userEfficientVideoMapMapper.getDepartNameByUserId(userDto.getUserId());
+            //获取绩效
+            BigDecimal performance = userEfficientVideoMapMapper.getClipQuarterCost(appType,quarter,year, userDto.getUserId());
+            userDto.setDepartName(departName);
+            userDto.setEffiRate(performance);
+        }
+
+        Map<String,Object> resultMap = new HashMap<>();
+        resultMap.put("userList", userDto2List);
+
+        return resultMap;
+    }
+
+    //平面设计师(快手、头条可能不一样,头条内广是单独的媒体不知道是怎么回事)
+    public Map<String,Object> planeLastQuarterPerformanceInfo(int appType){
+        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+
+        //测试删除
+        //LoginUser sysUser = new LoginUser();
+        //sysUser.setId("b0e4798234df4096936e6bc6d00db3ba");
+        //
+
+        Map<String,Integer> quarterMap = DateUtils.lastQuarter(new Date());
+        int year = quarterMap.get("year");
+        int quarter = quarterMap.get("quarter");
+        //Map<String,String> quarterDate = DateUtils.quarterStartEndDate(year,quarter);
+        List<PlaneProjectCostDTO> planeProjectCostList = userEfficientVideoMapMapper.getPlanePerformanceInfo(appType,year,quarter,sysUser.getId());
+        BigDecimal performance = userEfficientVideoMapMapper.getQuarterPerformance(sysUser.getId(), year, quarter, appType);
+
+        Map<String,Object> resultMap = new HashMap<>();
+        resultMap.put("planeProjectCostList",planeProjectCostList);
+        resultMap.put("performance",performance);
+
+        return resultMap;
+    }
+
+    //获取同一媒体类型下上个季度所有人的绩效
+    public Map<String, Object> quarterUserPerformanceList(Integer appType){
+        Map<String, Object> resultMap = new HashMap<>();
+
+        //LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        Map<String,Integer> quarterMap = DateUtils.lastQuarter(new Date());
+        int year = quarterMap.get("year");
+        int quarter = quarterMap.get("quarter");
+
+        List<UserDto2> userDtoList = userEfficientVideoMapMapper.getUserPerformanceList(appType, year, quarter);
+        resultMap.put("userDtoList",userDtoList);
+
+        return resultMap;
+    }
+
+
+
 }
 

+ 10 - 6
performance-appraisal/src/main/java/cn/com/ctop/planeprojectcost/entity/PlaneProjectCost.java

@@ -1,20 +1,18 @@
 package cn.com.ctop.planeprojectcost.entity;
 
-import java.io.Serializable;
-import java.util.Date;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.baomidou.mybatisplus.annotation.TableField;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import org.springframework.format.annotation.DateTimeFormat;
 import org.jeecgframework.poi.excel.annotation.Excel;
 
+import java.math.BigDecimal;
+import java.util.Date;
+
 /**
  * 平面设计项目消耗表
  * @author jeecg-boot
@@ -29,7 +27,7 @@ import org.jeecgframework.poi.excel.annotation.Excel;
 public class PlaneProjectCost {
 
 	/**id*/
-	@TableId(type = IdType.UUID)
+	@TableId(type = IdType.AUTO)
     @ApiModelProperty(value = "id")
 	private Integer id;
 	/**ctop_project的id*/
@@ -66,4 +64,10 @@ public class PlaneProjectCost {
 	/**updateTime*/
     @ApiModelProperty(value = "updateTime")
 	private Date updateTime;
+	/**projectPerformance*/
+	@ApiModelProperty(value = "projectPerformance")
+	private BigDecimal projectPerformance;
+	/**projectPlaneCount*/
+	@ApiModelProperty(value = "projectPlaneCount")
+	private Integer projectPlaneCount;
 }

+ 21 - 0
performance-appraisal/src/main/java/cn/com/ctop/userefficientvideomap/entity/PlaneProjectCostDTO.java

@@ -0,0 +1,21 @@
+package cn.com.ctop.userefficientvideomap.entity;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class PlaneProjectCostDTO {
+
+	private Integer id;
+	private Long projectId;
+	private String userId;
+	private BigDecimal projectCost;
+	private Integer appType;
+	private BigDecimal projectTotalCost;
+	private Integer year;
+	private Integer quarter;
+	private BigDecimal projectPerformance;
+	private Integer projectPlaneCount;
+	private String projectName;
+}

+ 1 - 1
performance-appraisal/src/main/java/cn/com/ctop/userefficientvideomap/entity/ProjectDTO.java

@@ -9,5 +9,5 @@ import java.math.BigDecimal;
 @Data
 public class ProjectDTO implements Serializable {
     private Long projectId;
-    private BigDecimal projectName;
+    private String projectName;
 }

+ 8 - 0
performance-appraisal/src/main/java/cn/com/ctop/userefficientvideomap/entity/UserDto2.java

@@ -22,4 +22,12 @@ public class UserDto2 implements Serializable {
 
     private String depId;
 
+    private Integer year;
+
+    private Integer quarter;
+
+    private String departName;
+
+    private String parentId;
+
 }

+ 17 - 1
performance-appraisal/src/main/java/cn/com/ctop/userefficientvideomap/mapper/UserEfficientVideoMapMapper.java

@@ -69,7 +69,7 @@ public interface UserEfficientVideoMapMapper extends BaseMapper<UserEfficientVid
 
     List<String> getClip(@Param("depId")String depId);
 
-    BigDecimal getClipQuarterCost(@Param("appType")Integer appType, @Param("quarter")int quarter, @Param("year")int year, @Param("userId")String userId);
+    BigDecimal getClipQuarterCost(@Param("appType")int appType, @Param("quarter")int quarter, @Param("year")int year, @Param("userId")String userId);
 
     //头条有效视频计算sql
     List<EffiVideoDTO> getToutiaoUserVideoMap(@Param("startDate")String startDate, @Param("endDate")String endDate, @Param("startCalcDate")String startCalcDate, @Param("endCalcDate")String endCalcDate);
@@ -84,5 +84,21 @@ public interface UserEfficientVideoMapMapper extends BaseMapper<UserEfficientVid
 
     BigDecimal getQuarterCost(@Param("userId")String userId, @Param("year")int year, @Param("quarter")int quarter, @Param("appType")int appType);
 
+    String getOrgCodeByProjectId(@Param("projectId")Long projectId);
+
+    SysRole getRoleIdByUserId(@Param("userId")String userId);
+
+    String getDepartIdByUserId(@Param("userId")String userId);
+
+    List<UserDto2> getUserListByDepartId(@Param("departId")String departId);
+
+    String getDepartNameByUserId(@Param("userId")String userId);
+
+    String getParentIdByDepartId(@Param("departId")String departId);
+
+    List<PlaneProjectCostDTO> getPlanePerformanceInfo(@Param("appType")int appType, @Param("year")int year, @Param("quarter")int quarter, @Param("userId")String userId);
+
+    List<UserDto2> getUserPerformanceList(@Param("appType")Integer appType, @Param("year")Integer year, @Param("quarter")Integer quarter);
+
 }
 

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

@@ -241,7 +241,7 @@
     <!-- 获取这个人所在的所有项目 -->
     <select id="getProjects" resultType="cn.com.ctop.userefficientvideomap.entity.ProjectDTO">
         select
-        project_id as projectId,
+        id as projectId,
         project_name as projectName
         from
         ctop_project
@@ -258,7 +258,7 @@
             left join
             ctop_user_allocation allocation on dailiAccount.account_id = allocation.account_id
         where
-        dailiAccount.project_id = #{projectId}
+        allocation.project_id = #{projectId}
         AND
         dailiAccount.stat_date &gt;= #{startDate}
         AND
@@ -275,7 +275,7 @@
         ctop_project_member a
         left join sys_role b on a.role_code = b.role_code
         where
-        a.project_id = #{projectId}
+        a.project_id = #{projectId} and
         a.role_code in ('planeLeader','plane')
     </select>
 
@@ -362,12 +362,13 @@
     <!-- 根据部门id -->
     <select id="getClip" resultType="string">
         select
-        user_id
+        a.user_id
         from
         sys_user_depart a
         left join sys_user_role b on a.user_id = b.user_id
+        left join sys_role c on b.role_id = c.id
         where a.dep_id = #{depId}
-        and b.role_code = 'clip'
+        and c.role_code = 'clip'
     </select>
 
     <select id="getClipQuarterCost" resultType="java.math.BigDecimal">
@@ -380,6 +381,7 @@
         and quarter = #{quarter}
         and year = #{year}
         and user_id = #{userId}
+        limit 1
     </select>
 
     <!-- 获取toutiao设计师leader的信息 -->
@@ -399,7 +401,7 @@
         from sys_user_role
         WHERE role_id = '8d3e2ed58bdedf17716f698ea674da27'   <!-- 设计师 -->
         )
-        and b.parent_id = '26c10ecb5e0d416bb01f8ff983f4588c'  <!-- 快手设计部 -->
+        and b.parent_id = '26c10ecb5e0d416bb01f8ff983f4588c'  <!-- 头条设计部 -->
     </select>
 
     <!-- 获取toutiao编导列表 -->
@@ -419,7 +421,7 @@
         from sys_user_role
         WHERE role_id = '0214283aa16f943efbb149ea4bb18f18'    <!-- 编导 -->
         )
-        and b.parent_id = '26c10ecb5e0d416bb01f8ff983f4588c'  <!-- 快手设计部 -->
+        and b.parent_id = '26c10ecb5e0d416bb01f8ff983f4588c'  <!-- 头条设计部 -->
     </select>
 
     <!-- 获取toutiao拍摄列表 -->
@@ -439,7 +441,7 @@
         from sys_user_role
         WHERE role_id = '7bff9afed625aeeabca6bffe3c189183'   <!-- 拍摄 -->
         )
-        and b.parent_id = '26c10ecb5e0d416bb01f8ff983f4588c'   <!-- 快手设计部 -->
+        and b.parent_id = '26c10ecb5e0d416bb01f8ff983f4588c'   <!-- 头条设计部 -->
     </select>
 
     <!-- 获取toutiao剪辑列表 -->
@@ -459,7 +461,7 @@
         from sys_user_role
         WHERE role_id = 'f38d8d70cf7ec50d5357a749e4dbf8ee'   <!-- 拍摄 -->
         )
-        and b.parent_id = '26c10ecb5e0d416bb01f8ff983f4588c'   <!-- 快手设计部 -->
+        and b.parent_id = '26c10ecb5e0d416bb01f8ff983f4588c'   <!-- 头条设计部 -->
     </select>
 
     <!-- 头条有效视频用户关系绑定 -->
@@ -545,7 +547,7 @@
         select
         total_performance
         from
-        ctop_user_efficient_video_map
+        ctop_performance
         where
         user_id = #{userId}
         and
@@ -554,6 +556,7 @@
         quarter = #{quarter}
         and
         app_type = #{appType}
+        limit 1
     </select>
 
     <!-- 根据year、quarter、user_id获取季度总消耗 -->
@@ -572,4 +575,117 @@
         app_type = #{appType}
     </select>
 
+    <select id="getOrgCodeByProjectId" resultType="string">
+            select
+            c.org_code
+        from
+        ctop_project a
+        left join sys_user_depart b on a.design_responsible_id = b.user_id
+        left join sys_depart c on b.dep_id = c.id
+        where
+        a.id = #{projectId}
+    </select>
+
+    <select id="getRoleIdByUserId" resultType="cn.com.ctop.userefficientvideomap.entity.SysRole">
+            select
+            c.id as id,
+            c.role_code as roleCode,
+            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
+        where a.id = #{userId}
+    </select>
+
+    <!-- 根据userId获取depart_id -->
+    <select id="getDepartIdByUserId" resultType="string">
+        select
+        dep_id
+        from
+        sys_user_depart
+        where
+        user_id = #{userId}
+    </select>
+
+    <!-- 根据departId获取部门下所有的人 -->
+    <select id="getUserListByDepartId" resultType="cn.com.ctop.userefficientvideomap.entity.UserDto2">
+            select
+            b.id as userId,
+            b.realname as realname,
+            d.id as roleId ,
+            d.role_name as roleName,
+			d.role_code as roleCode,
+			e.parent_id as parentId,
+			e.depart_name as departName
+        from
+        sys_user_depart a
+        left join sys_user b on a.user_id = b.id
+        left join sys_user_role c on b.id = c.user_id
+        left join sys_role d on c.role_id = d.id
+        left join sys_depart e on a.dep_id = e.id
+        where a.dep_id = #{departId}
+    </select>
+
+    <!-- 根据userId获取departName -->
+    <select id="getDepartNameByUserId" resultType="string">
+        select
+        b.depart_name
+        from
+        sys_user_depart a
+        left join sys_depart b on a.dep_id = b.id
+        where a.user_id = #{userId}
+    </select>
+
+    <!-- 获取部门的上一级部门 -->
+    <select id="getParentIdByDepartId" resultType="string">
+            select
+            parent_id
+        from
+        sys_depart
+        where
+        id = #{departId}
+    </select>
+
+    <select id="getPlanePerformanceInfo" resultType="cn.com.ctop.userefficientvideomap.entity.PlaneProjectCostDTO">
+        select
+        b.project_name as projectName,
+        a.year as year,
+        a.quarter as quarter,
+        a.app_type as apptType,
+        a.project_performance as projectPerformance,
+        a.project_total_cost as projectTotalCost
+        from
+        ctop_plane_project_cost a
+        left join ctop_project b on a.project_id = b.id
+        where
+        a.app_type = #{appType} and
+        a.year = #{year} and
+        a.quarter = #{quarter} and
+        a.user_id = #{userId}
+    </select>
+
+    <select id="getUserPerformanceList" resultType="cn.com.ctop.userefficientvideomap.entity.UserDto2">
+            select
+            b.id as userId,
+            b.realname as realname,
+            c.id as roleId,
+            c.role_name as roleName,
+            a.year as year,
+            a.quarter as quarter,
+            sum(a.total_performance) as effiRate,
+            e.depart_name as departName
+        from
+        ctop_performance a
+        left join sys_user b on a.user_id = b.id
+        left join sys_role c on a.role_id = c.id
+        left join sys_user_depart d on a.user_id = d.user_id
+        left join sys_depart e on d.dep_id = e.id
+        where
+        a.year = #{year} and
+        a.quarter = #{quarter} and
+        a.app_type = #{appType}
+        group by a.user_id
+    </select>
+
 </mapper>