浏览代码

优化师绩效考核代码逻辑

syh 5 年之前
父节点
当前提交
52d01be920
共有 19 个文件被更改,包括 803 次插入115 次删除
  1. 7 0
      jeecg-boot-module-system/src/main/java/org/jeecg/config/ShiroConfig.java
  2. 4 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/performanceappraisal/aa.java
  3. 181 0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/performanceappraisal/controller/OptimizerRoleInfoController.java
  4. 2 0
      module-common/src/main/java/cn/com/ctop/common/module/utils/StatusCode.java
  5. 9 80
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/controller/PerformanceController.java
  6. 30 0
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/controller/PerformanceOptimizerController.java
  7. 81 0
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/entity/OptimizerRoleInfo.java
  8. 15 0
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/mapper/OptimizerRoleInfoMapper.java
  9. 9 1
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/mapper/PerformanceMapper.java
  10. 5 0
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/mapper/xml/OptimizerRoleInfoMapper.xml
  11. 134 8
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/mapper/xml/PerformanceMapper.xml
  12. 18 0
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/service/IOptimizerRoleInfoService.java
  13. 7 0
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/service/IPerformanceOptimizerService.java
  14. 10 1
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/service/IPerformanceService.java
  15. 50 0
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/service/impl/OptimizerRoleInfoServiceImpl.java
  16. 138 0
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/service/impl/PerformanceOptimizerServiceImpl.java
  17. 87 25
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/service/impl/PerformanceServiceImpl.java
  18. 4 0
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/vo/OptimizerCostDetailVO.java
  19. 12 0
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/vo/OptimizerVO.java

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

@@ -75,6 +75,13 @@ public class ShiroConfig {
 		filterChainDefinitionMap.put("/template/creative/words/get", "anon");
         filterChainDefinitionMap.put("/appium/crawler/startJob", "anon");
 
+		//优化师相关
+		filterChainDefinitionMap.put("/ctop/performanceOptimizer/detail", "anon");
+		filterChainDefinitionMap.put("/ctop/performanceOptimizer/ranking/list", "anon");
+		filterChainDefinitionMap.put("/ctop/performance/project/list", "anon");
+		filterChainDefinitionMap.put("/ctop/performance/account/list", "anon");
+
+
         filterChainDefinitionMap.put("/generic/**", "anon");
 		filterChainDefinitionMap.put("/", "anon");
 		filterChainDefinitionMap.put("/doc.html", "anon");

+ 4 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/performanceappraisal/aa.java

@@ -0,0 +1,4 @@
+package org.jeecg.modules.performanceappraisal;
+
+public class aa {
+}

+ 181 - 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/performanceappraisal/controller/OptimizerRoleInfoController.java

@@ -0,0 +1,181 @@
+package org.jeecg.modules.performanceappraisal.controller;
+
+import cn.com.ctop.performanceappraisal.entity.OptimizerRoleInfo;
+import cn.com.ctop.performanceappraisal.service.IOptimizerRoleInfoService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.aspect.annotation.AutoLog;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.modules.system.entity.SysUser;
+import org.jeecg.modules.system.service.ISysUserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Arrays;
+import java.util.Map;
+
+/**
+ * 优化师角色关系表
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2019-12-17
+ */
+@Slf4j
+@Api(tags = "优化师角色关系表")
+@RestController
+@RequestMapping("/ctop/optimizerRoleInfo")
+public class OptimizerRoleInfoController {
+    @Autowired
+    private IOptimizerRoleInfoService optimizerRoleInfoService;
+    @Autowired
+    private ISysUserService sysUserService;
+
+    /**
+     * 分页列表查询
+     *
+     * @param optimizerRoleInfo
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    @AutoLog(value = "优化师角色关系表-分页列表查询")
+    @ApiOperation(value = "优化师角色关系表-分页列表查询", notes = "优化师角色关系表-分页列表查询")
+    @GetMapping(value = "/list")
+    public Result<IPage<OptimizerRoleInfo>> queryPageList(OptimizerRoleInfo optimizerRoleInfo,
+                                                          @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                          @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                          HttpServletRequest req) {
+        Result<IPage<OptimizerRoleInfo>> result = new Result<>();
+        optimizerRoleInfo.setType(1);
+        QueryWrapper<OptimizerRoleInfo> queryWrapper = QueryGenerator.initQueryWrapper(optimizerRoleInfo, req.getParameterMap());
+        Page<OptimizerRoleInfo> page = new Page<>(pageNo, pageSize);
+        IPage<OptimizerRoleInfo> pageList = optimizerRoleInfoService.page(page, queryWrapper);
+        result.setSuccess(true);
+        result.setResult(pageList);
+        return result;
+    }
+
+
+    @AutoLog(value = "优化师角色关系表-添加")
+    @ApiOperation(value = "优化师角色关系表-添加", notes = "优化师角色关系表-添加")
+    @PostMapping(value = "/add")
+    public Result<OptimizerRoleInfo> add(String belongerId, String userId, String orgCode) {
+        Result<OptimizerRoleInfo> result = new Result<OptimizerRoleInfo>();
+        try {
+            SysUser user = sysUserService.getById(userId);
+            OptimizerRoleInfo roleInfo = new OptimizerRoleInfo();
+            roleInfo.setType(2);
+            roleInfo.setBelongerId(belongerId);
+            roleInfo.setUserId(userId);
+            roleInfo.setRealname(user.getRealname());
+            roleInfo.setOrgCode(orgCode);
+            roleInfo.setEnabled(1);
+            optimizerRoleInfoService.save(roleInfo);
+            result.success("添加成功!");
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            result.error500("操作失败");
+        }
+        return result;
+    }
+
+    /**
+     * 编辑
+     *
+     * @param optimizerRoleInfo
+     * @return
+     */
+    @AutoLog(value = "优化师角色关系表-编辑")
+    @ApiOperation(value = "优化师角色关系表-编辑", notes = "优化师角色关系表-编辑")
+    @PutMapping(value = "/edit")
+    public Result<OptimizerRoleInfo> edit(@RequestBody OptimizerRoleInfo optimizerRoleInfo) {
+        Result<OptimizerRoleInfo> result = new Result<OptimizerRoleInfo>();
+        OptimizerRoleInfo optimizerRoleInfoEntity = optimizerRoleInfoService.getById(optimizerRoleInfo.getId());
+        if (optimizerRoleInfoEntity == null) {
+            result.error500("未找到对应实体");
+        } else {
+            boolean ok = optimizerRoleInfoService.updateById(optimizerRoleInfo);
+            if (ok) {
+                result.success("修改成功!");
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * 通过id删除
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "优化师角色关系表-通过id删除")
+    @ApiOperation(value = "优化师角色关系表-通过id删除", notes = "优化师角色关系表-通过id删除")
+    @DeleteMapping(value = "/delete")
+    public Result<?> delete(@RequestParam(name = "id", required = true) String id) {
+        try {
+            optimizerRoleInfoService.removeById(id);
+        } catch (Exception e) {
+            log.error("删除失败", e.getMessage());
+            return Result.error("删除失败!");
+        }
+        return Result.ok("删除成功!");
+    }
+
+    /**
+     * 批量删除
+     *
+     * @param ids
+     * @return
+     */
+    @AutoLog(value = "优化师角色关系表-批量删除")
+    @ApiOperation(value = "优化师角色关系表-批量删除", notes = "优化师角色关系表-批量删除")
+    @DeleteMapping(value = "/deleteBatch")
+    public Result<OptimizerRoleInfo> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        Result<OptimizerRoleInfo> result = new Result<OptimizerRoleInfo>();
+        if (ids == null || "".equals(ids.trim())) {
+            result.error500("参数不识别!");
+        } else {
+            this.optimizerRoleInfoService.removeByIds(Arrays.asList(ids.split(",")));
+            result.success("删除成功!");
+        }
+        return result;
+    }
+
+    /**
+     * 通过id查询
+     *
+     * @param id
+     * @return
+     */
+    @AutoLog(value = "优化师角色关系表-通过id查询")
+    @ApiOperation(value = "优化师角色关系表-通过id查询", notes = "优化师角色关系表-通过id查询")
+    @GetMapping(value = "/queryById")
+    public Result<OptimizerRoleInfo> queryById(@RequestParam(name = "id", required = true) String id) {
+        Result<OptimizerRoleInfo> result = new Result<OptimizerRoleInfo>();
+        OptimizerRoleInfo optimizerRoleInfo = optimizerRoleInfoService.getById(id);
+        if (optimizerRoleInfo == null) {
+            result.error500("未找到对应实体");
+        } else {
+            result.setResult(optimizerRoleInfo);
+            result.setSuccess(true);
+        }
+        return result;
+    }
+
+    /**
+     * 获取优化师经理的统计数据
+     */
+    @GetMapping("manager/detail")
+    public Map<String, Object> managerDetail(Integer appType) {
+        return optimizerRoleInfoService.getmanagerDetail(appType);
+    }
+}

+ 2 - 0
module-common/src/main/java/cn/com/ctop/common/module/utils/StatusCode.java

@@ -38,6 +38,8 @@ public enum StatusCode {
     KUAISHOU_CRAWLER_APP_MOBILE_CODE_IS_NULL("短信验证码未获取到", -1004, false),
     KUAISHOU_CRAWLER_APP_ELEMENT_DETAIL_ERROR("快手元素内容异常", -1005, false),
     KUAISHOU_CRAWLER_APP_NO_ENABLED_DEVICE("暂无可用设备", -2001, false),
+    KUAISHOU_OPTINIZER_CONFIG_IS_NULL("快手媒体优化师配置信息不全", -3001, false),
+    KUAISHOU_OPTINIZER_PERSONNAL_DATA_IS_NULL("快手媒体优化师个人消耗数据不存在", -3002, false),
     KUAISHOU_CRAWLER_APP_SUCCESS("爬虫运行正常", 0, true),
     KUAISHOU_CRAWLER_APP_TASK_END("爬虫任务运行结束", 1, true),
     KUAISHOU_CRAWLER_APP_JOB_StART("任务开始执行开始", 0, true),

+ 9 - 80
performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/controller/PerformanceController.java

@@ -1,8 +1,7 @@
 package cn.com.ctop.performanceappraisal.controller;
 
-import cn.com.ctop.performanceappraisal.service.IPerformanceService;
 import cn.com.ctop.performanceappraisal.entity.Performance;
-import com.alibaba.fastjson.JSON;
+import cn.com.ctop.performanceappraisal.service.IPerformanceService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -12,25 +11,11 @@ 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.oConvertUtils;
-import org.jeecgframework.poi.excel.ExcelImportUtil;
-import org.jeecgframework.poi.excel.def.NormalExcelConstants;
-import org.jeecgframework.poi.excel.entity.ExportParams;
-import org.jeecgframework.poi.excel.entity.ImportParams;
-import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-import org.springframework.web.multipart.MultipartHttpServletRequest;
-import org.springframework.web.servlet.ModelAndView;
 
 import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.net.URLDecoder;
 import java.util.Arrays;
-import java.util.List;
 import java.util.Map;
 
 /**
@@ -178,71 +163,15 @@ public class PerformanceController {
         return result;
     }
 
-    /**
-     * 导出excel
-     *
-     * @param request
-     * @param response
-     */
-    @RequestMapping(value = "/exportXls")
-    public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
-        // Step.1 组装查询条件
-        QueryWrapper<Performance> queryWrapper = null;
-        try {
-            String paramsStr = request.getParameter("paramsStr");
-            if (oConvertUtils.isNotEmpty(paramsStr)) {
-                String deString = URLDecoder.decode(paramsStr, "UTF-8");
-                Performance performance = JSON.parseObject(deString, Performance.class);
-                queryWrapper = QueryGenerator.initQueryWrapper(performance, request.getParameterMap());
-            }
-        } catch (UnsupportedEncodingException e) {
-            e.printStackTrace();
-        }
-
-        //Step.2 AutoPoi 导出Excel
-        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
-        List<Performance> pageList = performanceService.list(queryWrapper);
-        //导出文件名称
-        mv.addObject(NormalExcelConstants.FILE_NAME, "设计师季度绩效表列表");
-        mv.addObject(NormalExcelConstants.CLASS, Performance.class);
-        mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("设计师季度绩效表列表数据", "导出人:Jeecg", "导出信息"));
-        mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
-        return mv;
+    @GetMapping("/project/list")
+    public Map<String, Object> projectList(@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                           @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
+        return performanceService.getUserOptimizerProjectList(pageNo, pageSize);
     }
 
-    /**
-     * 通过excel导入数据
-     *
-     * @param request
-     * @param response
-     * @return
-     */
-    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
-    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
-        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
-        Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
-        for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
-            MultipartFile file = entity.getValue();
-            ImportParams params = new ImportParams();
-            params.setTitleRows(2);
-            params.setHeadRows(1);
-            params.setNeedSave(true);
-            try {
-                List<Performance> listPerformances = ExcelImportUtil.importExcel(file.getInputStream(), Performance.class, params);
-                performanceService.saveBatch(listPerformances);
-                return Result.ok("文件导入成功!数据行数:" + listPerformances.size());
-            } catch (Exception e) {
-                log.error(e.getMessage(), e);
-                return Result.error("文件导入失败:" + e.getMessage());
-            } finally {
-                try {
-                    file.getInputStream().close();
-                } catch (IOException e) {
-                    e.printStackTrace();
-                }
-            }
-        }
-        return Result.ok("文件导入失败!");
+    @GetMapping("/account/list")
+    public Map<String, Object> accountList(@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                           @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize, Long projectId) {
+        return performanceService.getUserOptimizerAccountList(projectId, pageNo, pageSize);
     }
-
 }

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

@@ -73,6 +73,36 @@ public class PerformanceOptimizerController {
         return result;
     }
 
+    @GetMapping(value = "/detail")
+    @ResponseBody
+    public Map<String, Object> getPerformanceDetail(@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                    @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                    HttpServletRequest req, @RequestParam(name = "mediaType", defaultValue = "2") String mediaType) {
+        return performanceOptimizerService.getPerformanceDetail(mediaType, pageNo, pageSize);
+    }
+
+    @GetMapping(value = "/ranking/list")
+    @ResponseBody
+    public Map<String, Object> getRankingList(@RequestParam(name = "mediaType", defaultValue = "2") String mediaType,
+                                              @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                              @RequestParam(name = "pageSize", defaultValue = "3") Integer pageSize,
+                                              HttpServletRequest req) {
+        return performanceOptimizerService.getRankingList(mediaType, pageNo, pageSize);
+    }
+
+    /**
+     * 获取项目经理相关数据
+     *
+     * @param req
+     * @param mediaType
+     * @return
+     */
+    @GetMapping(value = "/manager/detail")
+    @ResponseBody
+    public Map<String, Object> getManagerPerformanceDetail(HttpServletRequest req, @RequestParam(name = "mediaType", defaultValue = "2") String mediaType) {
+        return performanceOptimizerService.getManagerPerformanceDetail(mediaType);
+    }
+
     /**
      * 添加
      *

+ 81 - 0
performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/entity/OptimizerRoleInfo.java

@@ -0,0 +1,81 @@
+package cn.com.ctop.performanceappraisal.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecg.common.aspect.annotation.Dict;
+import org.jeecgframework.poi.excel.annotation.Excel;
+
+import java.util.Date;
+
+/**
+ * 优化师角色关系表
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2019-12-17
+ */
+@Data
+@TableName("ctop_optimizer_role_info")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_optimizer_role_info对象", description = "优化师角色关系表")
+public class OptimizerRoleInfo {
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.UUID)
+    @ApiModelProperty(value = "id")
+    private Integer id;
+    /**
+     * 部门代码
+     */
+    @Excel(name = "部门代码", width = 15)
+    @ApiModelProperty(value = "部门代码")
+    private String orgCode;
+    /**
+     * 角色类型 1:运营经理 2:运营专员
+     */
+    @Excel(name = "角色类型 1:运营经理 2:运营专员", width = 15)
+    @ApiModelProperty(value = "角色类型 1:运营经理 2:运营专员")
+    @Dict(dicCode = "optimizer_type")
+    private Integer type;
+    /**
+     * 用户id
+     */
+    @Excel(name = "用户id", width = 15)
+    @ApiModelProperty(value = "用户id")
+    @Dict(dicCode = "id", dictTable = "sys_user", dicText = "realname")
+    private String userId;
+    private String realname;
+    /**
+     * 归属人id
+     */
+    @Excel(name = "归属人id", width = 15)
+    @ApiModelProperty(value = "归属人id")
+    @Dict(dicCode = "id", dictTable = "sys_user", dicText = "realname")
+    private String belongerId;
+    /**
+     * enabled
+     */
+    @Excel(name = "enabled", width = 15)
+    @ApiModelProperty(value = "enabled")
+    @Dict(dicCode = "valid_status")
+    private Integer enabled;
+    /**
+     * createTime
+     */
+    @ApiModelProperty(value = "createTime")
+    private Date createTime;
+    /**
+     * updateTime
+     */
+    @ApiModelProperty(value = "updateTime")
+    private Date updateTime;
+}

+ 15 - 0
performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/mapper/OptimizerRoleInfoMapper.java

@@ -0,0 +1,15 @@
+package cn.com.ctop.performanceappraisal.mapper;
+
+import cn.com.ctop.performanceappraisal.entity.OptimizerRoleInfo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 优化师角色关系表
+ *
+ * @author: jeecg-boot
+ * @date: 2019-12-17
+ * @cersion: V1.0
+ */
+public interface OptimizerRoleInfoMapper extends BaseMapper<OptimizerRoleInfo> {
+
+}

+ 9 - 1
performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/mapper/PerformanceMapper.java

@@ -16,7 +16,15 @@ import java.util.List;
  */
 public interface PerformanceMapper extends BaseMapper<Performance> {
 
-    List<OptimizerCostDetailVO> getOptimizerTotalCostDetail(@Param(value = "startDate") String startDate, @Param(value = "endDate") String endDate, @Param(value = "year") String year, @Param(value = "quarter") String quarter);
+    List<OptimizerCostDetailVO> getOptimizerTotalCostDetailGroupByUserId(@Param(value = "startDate") String startDate, @Param(value = "endDate") String endDate, @Param(value = "year") String year, @Param(value = "quarter") String quarter, @Param(value = "userId") String userId, @Param(value = "startIndex") Integer startIndex, @Param(value = "pageSize") Integer pageSize);
+
+    List<OptimizerCostDetailVO> getOptimizerTotalCostDetailGroupByAccountId(@Param(value = "startDate") String startDate, @Param(value = "endDate") String endDate, @Param(value = "year") String year, @Param(value = "quarter") String quarter, @Param(value = "userId") String userId, @Param(value = "startIndex") Integer startIndex, @Param(value = "pageSize") Integer pageSize);
+
+    List<OptimizerCostDetailVO> getUserOptimizerTotalCostGroupByProjectId(@Param(value = "startDate") String startDate, @Param(value = "endDate") String endDate, @Param(value = "year") String year, @Param(value = "quarter") String quarter, @Param(value = "userId") String userId, @Param(value = "startIndex") Integer startIndex, @Param(value = "pageSize") Integer pageSize, @Param(value = "projectId") Long projectId);
+
+    List<OptimizerCostDetailVO> getUserOptimizerTotalCostGroupByAccountId(@Param(value = "startDate") String startDate, @Param(value = "endDate") String endDate, @Param(value = "year") String year, @Param(value = "quarter") String quarter, @Param(value = "userId") String userId, @Param(value = "startIndex") Integer startIndex, @Param(value = "pageSize") Integer pageSize, @Param(value = "projectId") Long projectId, @Param(value = "accountId") Long accountId);
+
+    List<OptimizerCostDetailVO> getMemberPerformanceByUserId(@Param(value = "startDate") String startDate, @Param(value = "endDate") String endDate, @Param(value = "year") String year, @Param(value = "quarter") String quarter, @Param(value = "userId") String userId);
 
     OptimizerCostDetailVO getOptimizerTotalCost(@Param(value = "startDate") String startDate, @Param(value = "endDate") String endDate, @Param(value = "year") String year, @Param(value = "quarter") String quarter);
 }

+ 5 - 0
performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/mapper/xml/OptimizerRoleInfoMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="cn.com.ctop.performanceappraisal.mapper.OptimizerRoleInfoMapper">
+
+</mapper>

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

@@ -2,16 +2,134 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="cn.com.ctop.performanceappraisal.mapper.PerformanceMapper">
     <resultMap id="OptimizerTotalCostDetail" type="cn.com.ctop.performanceappraisal.vo.OptimizerCostDetailVO">
-        <result column="realname" property="realname"/>
+        <result column="realName" property="realName"/>
         <result column="totalCost" property="totalCost"/>
         <result column="year" property="year"/>
         <result column="quarter" property="quarter"/>
         <result column="userId" property="userId"/>
         <result column="appType" property="appType"/>
+        <result column="projectId" property="projectId"/>
+        <result column="projectName" property="projectName"/>
     </resultMap>
-    <select id="getOptimizerTotalCostDetail" resultMap="OptimizerTotalCostDetail">
+    <select id="getOptimizerTotalCostDetailGroupByUserId" resultMap="OptimizerTotalCostDetail">
         SELECT
-            sys_user.id as userId,sysUser.realname as realname,SUM(charge) as totalCost,#{year} AS year,#{quarter} as quarter,2 as appType
+        sysUser.id as userId,sysUser.realname as realName,SUM(charge) as totalCost,#{year} AS year,#{quarter} as
+        quarter,2 as appType
+        FROM
+        ctop_kuaishou_report_daily_account dailiAccount
+        LEFT JOIN
+        ctop_user_allocation allocation ON dailiAccount.account_id = allocation.account_id
+        LEFT JOIN
+        sys_user_role userRole ON userRole.user_id = allocation.user_id
+        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
+        dailiAccount.stat_date &gt;= #{startDate}
+        AND
+        dailiAccount.stat_date &lt; #{endDate}
+        GROUP BY
+        sysUser.id
+        ORDER BY
+        SUM(charge) DESC
+        limit #{startIndex},#{pageSize}
+    </select>
+
+    <select id="getOptimizerTotalCostDetailGroupByAccountId" resultMap="OptimizerTotalCostDetail">
+        SELECT
+        dailiAccount.account_id,sysUser.id as userId,sysUser.realname as realName,SUM(charge) as totalCost,#{year} AS
+        year,#{quarter} as quarter,2 as appType
+        FROM
+        ctop_kuaishou_report_daily_account dailiAccount
+        LEFT JOIN
+        ctop_user_allocation allocation ON dailiAccount.account_id = allocation.account_id
+        LEFT JOIN
+        sys_user_role userRole ON userRole.user_id = allocation.user_id
+        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
+        dailiAccount.stat_date &gt;= #{startDate}
+        AND
+        dailiAccount.stat_date &lt; #{endDate}
+        GROUP BY
+        dailiAccount.account_id
+        ORDER BY
+        SUM(charge) DESC
+        limit #{startIndex},#{pageSize}
+    </select>
+
+    <select id="getUserOptimizerTotalCostGroupByProjectId" resultMap="OptimizerTotalCostDetail">
+        SELECT
+        allocation.project_id as projectId,allocation.project_name as projectName,dailiAccount.account_id,sysUser.id as
+        userId,sysUser.realname as realName,SUM(charge) as totalCost,#{year} AS year,#{quarter} as quarter,2 as appType
+        FROM
+        ctop_kuaishou_report_daily_account dailiAccount
+        LEFT JOIN
+        ctop_user_allocation allocation ON dailiAccount.account_id = allocation.account_id
+        LEFT JOIN
+        sys_user_role userRole ON userRole.user_id = allocation.user_id
+        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
+        dailiAccount.stat_date &gt;= #{startDate}
+        AND
+        dailiAccount.stat_date &lt; #{endDate}
+        GROUP BY
+        allocation.project_id
+        ORDER BY
+        SUM(charge) DESC
+        limit #{startIndex},#{pageSize}
+    </select>
+    <select id="getUserOptimizerTotalCostGroupByAccountId" resultMap="OptimizerTotalCostDetail">
+        SELECT
+        allocation.project_id as projectId,allocation.project_name as projectName,dailiAccount.account_id,sysUser.id as
+        userId,sysUser.realname as realName,SUM(charge) as totalCost,#{year} AS year,#{quarter} as quarter,2 as appType
+        FROM
+        ctop_kuaishou_report_daily_account dailiAccount
+        LEFT JOIN
+        ctop_user_allocation allocation ON dailiAccount.account_id = allocation.account_id
+        LEFT JOIN
+        sys_user_role userRole ON userRole.user_id = allocation.user_id
+        LEFT JOIN
+        sys_user sysUser ON sysUser.id = userRole.user_id
+        WHERE
+        1=1
+        and
+        userRole.role_id = '79fba4f45f1b8e284af9c68311c6c771'
+        <if test="projectId != null">
+            and allocation.project_id = #{projectId}
+        </if>
+        <if test="userId != null">
+            and sysUser.id = #{userId}
+        </if>
+        AND
+        dailiAccount.stat_date &gt;= #{startDate}
+        AND
+        dailiAccount.stat_date &lt; #{endDate}
+        GROUP BY
+        allocation.account_id
+        ORDER BY
+        SUM(charge) DESC
+        limit #{startIndex},#{pageSize}
+    </select>
+
+    <select id="getOptimizerTotalCost" resultMap="OptimizerTotalCostDetail">
+        SELECT
+            '账户总计' as realname,SUM(charge) as totalCost,#{year} AS year,#{quarter} as quarter,2 as appType
         FROM
             ctop_kuaishou_report_daily_account dailiAccount
         LEFT JOIN
@@ -26,12 +144,12 @@
             dailiAccount.stat_date &gt;= #{startDate}
         AND
             dailiAccount.stat_date &lt; #{endDate}
-        GROUP BY sysUser.id ORDER BY SUM(charge) DESC
+        GROUP BY userRole.role_id
     </select>
 
-    <select id="getOptimizerTotalCost" resultMap="OptimizerTotalCostDetail">
+    <select id="getMemberPerformanceByUserId" resultMap="OptimizerTotalCostDetail">
         SELECT
-            '账户总计' as realname,SUM(charge) as totalCost,#{year} AS year,#{quarter} as quarter,2 as appType
+            sysUser.id as userId,sysUser.realname as realName,SUM(charge) as totalCost,#{year} AS year,#{quarter} as quarter,2 as appType
         FROM
             ctop_kuaishou_report_daily_account dailiAccount
         LEFT JOIN
@@ -40,12 +158,20 @@
             sys_user_role userRole ON userRole.user_id = allocation.user_id
         LEFT JOIN
             sys_user sysUser ON sysUser.id = userRole.user_id
+		LEFT JOIN
+			ctop_optimizer_role_info roleInfo ON roleInfo.user_id = sysUser.id
         WHERE
             userRole.role_id = '79fba4f45f1b8e284af9c68311c6c771'
-        AND
+		AND
+			roleInfo.belonger_id = #{userId}
+		AND
             dailiAccount.stat_date &gt;= #{startDate}
         AND
             dailiAccount.stat_date &lt; #{endDate}
-        GROUP BY userRole.role_id
+        GROUP BY
+            sysUser.id
+        ORDER BY
+            SUM(charge) DESC
+
     </select>
 </mapper>

+ 18 - 0
performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/service/IOptimizerRoleInfoService.java

@@ -0,0 +1,18 @@
+package cn.com.ctop.performanceappraisal.service;
+
+import cn.com.ctop.performanceappraisal.entity.OptimizerRoleInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.Map;
+
+/**
+ * 优化师角色关系表
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2019-12-17
+ */
+public interface IOptimizerRoleInfoService extends IService<OptimizerRoleInfo> {
+
+    Map<String, Object> getmanagerDetail(Integer appType);
+}

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

@@ -3,6 +3,8 @@ package cn.com.ctop.performanceappraisal.service;
 import cn.com.ctop.performanceappraisal.entity.PerformanceOptimizer;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.Map;
+
 /**
  * 优化师绩效信息
  *
@@ -12,4 +14,9 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IPerformanceOptimizerService extends IService<PerformanceOptimizer> {
 
+    Map<String, Object> getPerformanceDetail(String mediaType, Integer pageNo, Integer pageSize);
+
+    Map<String, Object> getRankingList(String mediaType, Integer pageNo, Integer pageSize);
+
+    Map<String, Object> getManagerPerformanceDetail(String mediaType);
 }

+ 10 - 1
performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/service/IPerformanceService.java

@@ -6,6 +6,7 @@ import cn.com.ctop.performanceappraisal.vo.OptimizerCostDetailVO;
 import com.baomidou.mybatisplus.extension.service.IService;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 设计师季度绩效表
@@ -23,5 +24,13 @@ public interface IPerformanceService extends IService<Performance> {
     /**
      * 获取优化师总消耗数据信息
      */
-    List<OptimizerCostDetailVO> getOptimizerTotalCostDetail(String startDate, String endDate, String year, String quarter);
+    List<OptimizerCostDetailVO> getOptimizerTotalCostDetailGroupByUserId(String userId, Integer startIndex, Integer pageSize);
+
+    OptimizerCostDetailVO getOptimizerTotalCost();
+
+    Map<String, Object> getUserOptimizerProjectList(Integer pageNo, Integer pageSize);
+
+    Map<String, Object> getUserOptimizerAccountList(Long projectId, Integer pageNo, Integer pageSize);
+
+    List<OptimizerCostDetailVO> getMemberPerformanceByUserId();
 }

+ 50 - 0
performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/service/impl/OptimizerRoleInfoServiceImpl.java

@@ -0,0 +1,50 @@
+package cn.com.ctop.performanceappraisal.service.impl;
+
+import cn.com.ctop.common.module.utils.ResultMapUtils;
+import cn.com.ctop.common.module.utils.StatusCode;
+import cn.com.ctop.performanceappraisal.entity.OptimizerRoleInfo;
+import cn.com.ctop.performanceappraisal.mapper.OptimizerRoleInfoMapper;
+import cn.com.ctop.performanceappraisal.mapper.PerformanceMapper;
+import cn.com.ctop.performanceappraisal.service.IOptimizerRoleInfoService;
+import cn.com.ctop.performanceappraisal.service.IPerformanceService;
+import cn.com.ctop.performanceappraisal.vo.OptimizerCostDetailVO;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+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.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 优化师角色关系表
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2019-12-17
+ */
+@Service
+public class OptimizerRoleInfoServiceImpl extends ServiceImpl<OptimizerRoleInfoMapper, OptimizerRoleInfo> implements IOptimizerRoleInfoService {
+    @Autowired
+    private IPerformanceService performanceService;
+    @Autowired
+    private PerformanceMapper performanceMapper;
+
+    @Override
+    public Map<String, Object> getmanagerDetail(Integer appType) {
+        Map<String, Object> result = new HashMap<>();
+        //        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        LoginUser sysUser = new LoginUser();
+        sysUser.setId("fcb3fbf6192640adaadb2a7df9c02dae");
+        //1:查询媒体任务
+        OptimizerCostDetailVO totalCostVo = performanceService.getOptimizerTotalCost();
+        //查询经理所属人员任务完成信息列表
+        List<OptimizerCostDetailVO> detailVOS = performanceService.getMemberPerformanceByUserId();
+        result.put("data", detailVOS);
+        ResultMapUtils.setResultMap(result, StatusCode.COMMON_SUCCESS.getCode());
+        return result;
+    }
+}

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

@@ -1,11 +1,27 @@
 package cn.com.ctop.performanceappraisal.service.impl;
 
+import cn.com.ctop.common.module.utils.ResultMapUtils;
+import cn.com.ctop.common.module.utils.StatusCode;
+import cn.com.ctop.performanceappraisal.entity.OptimizerConfig;
 import cn.com.ctop.performanceappraisal.entity.PerformanceOptimizer;
 import cn.com.ctop.performanceappraisal.mapper.PerformanceOptimizerMapper;
+import cn.com.ctop.performanceappraisal.service.IOptimizerConfigService;
 import cn.com.ctop.performanceappraisal.service.IPerformanceOptimizerService;
+import cn.com.ctop.performanceappraisal.service.IPerformanceService;
+import cn.com.ctop.performanceappraisal.vo.OptimizerCostDetailVO;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.jeecg.common.system.vo.LoginUser;
+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;
+
 /**
  * 优化师绩效信息
  *
@@ -15,5 +31,127 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class PerformanceOptimizerServiceImpl extends ServiceImpl<PerformanceOptimizerMapper, PerformanceOptimizer> implements IPerformanceOptimizerService {
+    @Autowired
+    IPerformanceService performanceService;
+    @Autowired
+    private IOptimizerConfigService optimizerConfigService;
+
+    @Override
+    public Map<String, Object> getPerformanceDetail(String mediaType, Integer pageNo, Integer pageSize) {
+        Map<String, Object> result = new HashMap<>();
+        Integer startIndex = (pageNo - 1) * pageSize;
+        //查询当前登录人信息
+//        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        LoginUser sysUser = new LoginUser();
+        sysUser.setId("fcb3fbf6192640adaadb2a7df9c02dae");
+        //查询当前媒体配置信息
+        OptimizerConfig config = optimizerConfigService.getEnabledConfigByMediaType(mediaType);
+        if (null == config) {
+            ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_OPTINIZER_CONFIG_IS_NULL.getCode());
+            return result;
+        }
+        //:查询当前用户截止到目前当前季度的消耗统计数据
+        List<OptimizerCostDetailVO> vos = performanceService.getOptimizerTotalCostDetailGroupByUserId(sysUser.getId(), startIndex, pageSize);
+        if (null == vos || vos.size() <= 0) {
+            ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_OPTINIZER_PERSONNAL_DATA_IS_NULL.getCode());
+            return result;
+        }
+        //2: 查询媒体季度任务完成情况
+        OptimizerCostDetailVO totalCostVo = performanceService.getOptimizerTotalCost();
+        OptimizerCostDetailVO detailVO = vos.get(0);
+        detailVO.setTotalRoyalty(getTotalRoyalty(config, detailVO, totalCostVo));
+        JSONObject detail = new JSONObject();
+        detail.put("realName", detailVO.getRealName());
+        detail.put("totalCost", detailVO.getTotalCost());
+        detail.put("totalRoyalty", detailVO.getTotalRoyalty());
+        detail.put("mediaTask", config.getMediaTask());
+        detail.put("personalTask", config.getPersonalTask());
+
+        detail.put("year", detailVO.getYear());
+        detail.put("quarter", detailVO.getQuarter());
+        detail.put("royaltyRatio", getRate(config, detailVO, totalCostVo).toString() + "‰");
+        result.put("userDetail", detail);
+        ResultMapUtils.setResultMap(result, StatusCode.COMMON_SUCCESS.getCode());
+        return result;
+    }
+
+    @Override
+    public Map<String, Object> getRankingList(String mediaType, Integer pageNo, Integer pageSize) {
+        Map<String, Object> result = new HashMap<>();
+        Integer startIndex = (pageNo - 1) * pageSize;
+        List<OptimizerCostDetailVO> vos = performanceService.getOptimizerTotalCostDetailGroupByUserId(null, startIndex, pageSize);
+        if (null == vos || vos.size() <= 0) {
+            ResultMapUtils.setResultMap(result, StatusCode.KUAISHOU_CRAWLER_APP_ELEMENT_IS_NULL.getCode());
+            return result;
+        }
+        //查询优化师系统设置数据
+        OptimizerConfig config = optimizerConfigService.getEnabledConfigByMediaType("2");
+        //2: 查询媒体季度任务完成情况
+        OptimizerCostDetailVO totalCostVo = performanceService.getOptimizerTotalCost();
+        //3:计算单个优化师提成总额
+        List<OptimizerCostDetailVO> getDetailVos = new ArrayList<>();
+        if (null != vos && vos.size() > 0) {
+            for (OptimizerCostDetailVO vo : vos) {
+                vo.setTotalRoyalty(getTotalRoyalty(config, vo, totalCostVo));
+                getDetailVos.add(vo);
+            }
+        }
+        result.put("data", getDetailVos);
+        ResultMapUtils.setResultMap(result, StatusCode.COMMON_SUCCESS.getCode());
+        return result;
+    }
+
+    @Override
+    public Map<String, Object> getManagerPerformanceDetail(String mediaType) {
+        //获取经理相关信息
+        //查询当前登录人信息
+//        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        LoginUser sysUser = new LoginUser();
+        sysUser.setId("fcb3fbf6192640adaadb2a7df9c02dae");
+        //查询优化师系统设置数据
+        OptimizerConfig config = optimizerConfigService.getEnabledConfigByMediaType("2");
+        //2: 查询媒体季度任务完成情况
+        OptimizerCostDetailVO totalCostVo = performanceService.getOptimizerTotalCost();
+        return null;
+    }
+
+    private BigDecimal getTotalRoyalty(OptimizerConfig config, OptimizerCostDetailVO vo, OptimizerCostDetailVO quarterCost) {
+        BigDecimal royalty = BigDecimal.ZERO;
+        //个人总消耗
+        BigDecimal totalCost = vo.getTotalCost();
+        //个人季度任务
+        BigDecimal personalTask = config.getPersonalTask();
+        //媒体季度任务
+        BigDecimal mediaTask = config.getMediaTask();
+        //个人任务未完成
+        if (totalCost.compareTo(personalTask) < 0) {
+            return royalty;
+        }
+        //季度任务未完成
+        if (totalCost.compareTo(mediaTask) < 0) {
+            return totalCost.multiply(config.getMediaTaskNoFinishRate()).divide(new BigDecimal("1000")).setScale(2, RoundingMode.HALF_UP);
+        }
+
+        return totalCost.multiply(config.getMediaTaskFinishRate()).divide(new BigDecimal("1000")).setScale(2, RoundingMode.HALF_UP);
+    }
+
+    private BigDecimal getRate(OptimizerConfig config, OptimizerCostDetailVO vo, OptimizerCostDetailVO quarterCost) {
+        BigDecimal royalty = BigDecimal.ZERO;
+        //个人总消耗
+        BigDecimal totalCost = vo.getTotalCost();
+        //个人季度任务
+        BigDecimal personalTask = config.getPersonalTask();
+        //媒体季度任务
+        BigDecimal mediaTask = config.getMediaTask();
+        //个人任务未完成
+        if (totalCost.compareTo(personalTask) < 0) {
+            return BigDecimal.ZERO;
+        }
+        //季度任务未完成
+        if (totalCost.compareTo(mediaTask) < 0) {
+            return config.getMediaTaskNoFinishRate().setScale(2, RoundingMode.HALF_UP);
+        }
 
+        return config.getMediaTaskFinishRate().setScale(2, RoundingMode.HALF_UP);
+    }
 }

+ 87 - 25
performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/service/impl/PerformanceServiceImpl.java

@@ -1,5 +1,7 @@
 package cn.com.ctop.performanceappraisal.service.impl;
 
+import cn.com.ctop.common.module.utils.ResultMapUtils;
+import cn.com.ctop.common.module.utils.StatusCode;
 import cn.com.ctop.performanceappraisal.entity.OptimizerConfig;
 import cn.com.ctop.performanceappraisal.entity.Performance;
 import cn.com.ctop.performanceappraisal.entity.PerformanceOptimizer;
@@ -10,15 +12,14 @@ import cn.com.ctop.performanceappraisal.service.IPerformanceService;
 import cn.com.ctop.performanceappraisal.vo.DesignerCostDetailVO;
 import cn.com.ctop.performanceappraisal.vo.OptimizerCostDetailVO;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+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.Date;
-import java.util.List;
+import java.util.*;
 
 /**
  * 设计师季度绩效表
@@ -32,18 +33,9 @@ public class PerformanceServiceImpl extends ServiceImpl<PerformanceMapper, Perfo
     @Autowired
     private PerformanceMapper performanceMapper;
     @Autowired
+    private PerformanceOptimizerMapper optimizerMapper;
+    @Autowired
     private IOptimizerConfigService optimizerConfigService;
-
-    @Override
-    public List<DesignerCostDetailVO> getTotalCostDetailByRoleId(String roleId) {
-        return null;
-    }
-
-    @Override
-    public List<OptimizerCostDetailVO> getOptimizerTotalCostDetail(String startDate, String endDate, String year, String quarter) {
-        return performanceMapper.getOptimizerTotalCostDetail(startDate, endDate, year, quarter);
-    }
-
     /**
      * 计算设计岗位绩效逻辑
      * 1:查询用户总消耗以及总视频数
@@ -51,6 +43,21 @@ public class PerformanceServiceImpl extends ServiceImpl<PerformanceMapper, Perfo
      * 3:根据视频有效率分配提点比例
      * 4:计算个人总绩效
      */
+    @Override
+    public List<DesignerCostDetailVO> getTotalCostDetailByRoleId(String roleId) {
+        return null;
+    }
+
+    @Override
+    public List<OptimizerCostDetailVO> getOptimizerTotalCostDetailGroupByUserId(String userId, Integer startIndex, Integer pageSize) {
+        Date date = new Date();
+        Date getDate = DateUtils.addDay(date, -1);
+        String startDate = DateUtils.getQuarterStartDate(getDate);
+        String endDate = DateUtils.getQuarterEndDate(getDate);
+        String year = DateUtils.getYear(getDate) + "";
+        String quarter = DateUtils.getQuarter(getDate) + "";
+        return performanceMapper.getOptimizerTotalCostDetailGroupByUserId(startDate, endDate, year, quarter, userId, startIndex, pageSize);
+    }
 
     /**
      * 计算优化师岗位绩效逻辑
@@ -59,18 +66,12 @@ public class PerformanceServiceImpl extends ServiceImpl<PerformanceMapper, Perfo
      * 3:计算单个优化师提成总额
      */
     public List<OptimizerCostDetailVO> getOptimizerPerformance() {
-        Date date = new Date();
-        Date getDate = DateUtils.addDay(date, -1);
-        String startDate = DateUtils.getQuarterStartDate(getDate);
-        String endDate = DateUtils.getQuarterEndDate(getDate);
-        String year = DateUtils.getYear(getDate) + "";
-        String quarter = DateUtils.getQuarter(getDate) + "";
         //1:查询所有优化师总消耗数据
-        List<OptimizerCostDetailVO> detailVOS = getOptimizerTotalCostDetail(startDate, endDate, year, quarter);
+        List<OptimizerCostDetailVO> detailVOS = getOptimizerTotalCostDetailGroupByUserId(null, 1, 10);
         //查询优化师系统设置数据
         OptimizerConfig config = optimizerConfigService.getEnabledConfigByMediaType("2");
         //2: 查询媒体季度任务完成情况
-        OptimizerCostDetailVO totalCostVo = performanceMapper.getOptimizerTotalCost(startDate, endDate, year, quarter);
+        OptimizerCostDetailVO totalCostVo = getOptimizerTotalCost();
         //3:计算单个优化师提成总额
         List<OptimizerCostDetailVO> getDetailVos = new ArrayList<>();
         if (null != detailVOS && detailVOS.size() > 0) {
@@ -80,12 +81,73 @@ public class PerformanceServiceImpl extends ServiceImpl<PerformanceMapper, Perfo
                 optimizerMapper.insert(optimizer);
             }
         }
-        //TODO 需要入库
         return getDetailVos;
     }
 
-    @Autowired
-    private PerformanceOptimizerMapper optimizerMapper;
+    @Override
+    public OptimizerCostDetailVO getOptimizerTotalCost() {
+        Date date = new Date();
+        Date getDate = DateUtils.addDay(date, -1);
+        String startDate = DateUtils.getQuarterStartDate(getDate);
+        String endDate = DateUtils.getQuarterEndDate(getDate);
+        String year = DateUtils.getYear(getDate) + "";
+        String quarter = DateUtils.getQuarter(getDate) + "";
+        return performanceMapper.getOptimizerTotalCost(startDate, endDate, year, quarter);
+    }
+
+    @Override
+    public Map<String, Object> getUserOptimizerProjectList(Integer pageNo, Integer pageSize) {
+        Map<String, Object> result = new HashMap<>();
+        //        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        LoginUser sysUser = new LoginUser();
+        sysUser.setId("fcb3fbf6192640adaadb2a7df9c02dae");
+        Integer startIndex = (pageNo - 1) * pageSize;
+        Date date = new Date();
+        Date getDate = DateUtils.addDay(date, -1);
+        String startDate = DateUtils.getQuarterStartDate(getDate);
+        String endDate = DateUtils.getQuarterEndDate(getDate);
+        String year = DateUtils.getYear(getDate) + "";
+        String quarter = DateUtils.getQuarter(getDate) + "";
+        List<OptimizerCostDetailVO> detailVOS = performanceMapper.getUserOptimizerTotalCostGroupByProjectId(startDate, endDate, year, quarter, sysUser.getId(), startIndex, pageSize, null);
+        result.put("data", detailVOS);
+        ResultMapUtils.setResultMap(result, StatusCode.COMMON_SUCCESS.getCode());
+        return result;
+    }
+
+    @Override
+    public Map<String, Object> getUserOptimizerAccountList(Long projectId, Integer pageNo, Integer pageSize) {
+        Map<String, Object> result = new HashMap<>();
+        //        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        LoginUser sysUser = new LoginUser();
+        sysUser.setId("fcb3fbf6192640adaadb2a7df9c02dae");
+        Integer startIndex = (pageNo - 1) * pageSize;
+        Date date = new Date();
+        Date getDate = DateUtils.addDay(date, -1);
+        String startDate = DateUtils.getQuarterStartDate(getDate);
+        String endDate = DateUtils.getQuarterEndDate(getDate);
+        String year = DateUtils.getYear(getDate) + "";
+        String quarter = DateUtils.getQuarter(getDate) + "";
+        List<OptimizerCostDetailVO> detailVOS = performanceMapper.getUserOptimizerTotalCostGroupByAccountId(startDate, endDate, year, quarter, sysUser.getId(), startIndex, pageSize, projectId, null);
+        result.put("data", detailVOS);
+        ResultMapUtils.setResultMap(result, StatusCode.COMMON_SUCCESS.getCode());
+        return result;
+    }
+
+    @Override
+    public List<OptimizerCostDetailVO> getMemberPerformanceByUserId() {
+        Map<String, Object> result = new HashMap<>();
+        //        LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal();
+        LoginUser sysUser = new LoginUser();
+        sysUser.setId("fcb3fbf6192640adaadb2a7df9c02dae");
+        Date date = new Date();
+        Date getDate = DateUtils.addDay(date, -1);
+        String startDate = DateUtils.getQuarterStartDate(getDate);
+        String endDate = DateUtils.getQuarterEndDate(getDate);
+        String year = DateUtils.getYear(getDate) + "";
+        String quarter = DateUtils.getQuarter(getDate) + "";
+        List<OptimizerCostDetailVO> detailVOS = performanceMapper.getMemberPerformanceByUserId(startDate, endDate, year, quarter, sysUser.getId());
+        return detailVOS;
+    }
 
     private BigDecimal getTotalRoyalty(OptimizerConfig config, OptimizerCostDetailVO vo, OptimizerCostDetailVO quarterCost) {
         BigDecimal royalty = BigDecimal.ZERO;

+ 4 - 0
performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/vo/OptimizerCostDetailVO.java

@@ -40,4 +40,8 @@ public class OptimizerCostDetailVO implements Serializable {
      */
     private Integer appType;
 
+    private Long projectId;
+
+    private String projectName;
+
 }

+ 12 - 0
performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/vo/OptimizerVO.java

@@ -0,0 +1,12 @@
+package cn.com.ctop.performanceappraisal.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class OptimizerVO implements Serializable {
+    private Long id;
+    private String realName;
+    private String userId;
+}