Forráskód Böngészése

优化师绩效考核代码逻辑

syh 5 éve
szülő
commit
d9de855b55
23 módosított fájl, 1074 hozzáadás és 29 törlés
  1. 34 6
      jeecg-boot-base-common/src/main/java/org/jeecg/common/util/DateUtils.java
  2. 3 3
      jeecg-boot-module-system/src/main/resources/jeecg/jeecg_database.properties
  3. 0 6
      module-common/pom.xml
  4. 12 13
      module-common/src/main/java/cn/com/ctop/common/module/service/impl/MaterialInfoServiceImpl.java
  5. 248 0
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/controller/OptimizerConfigController.java
  6. 248 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/OptimizerConfig.java
  8. 102 0
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/entity/PerformanceOptimizer.java
  9. 2 0
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/entity/RolePerformancRraise.java
  10. 15 0
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/mapper/OptimizerConfigMapper.java
  11. 7 0
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/mapper/PerformanceMapper.java
  12. 15 0
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/mapper/PerformanceOptimizerMapper.java
  13. 5 0
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/mapper/xml/OptimizerConfigMapper.xml
  14. 46 0
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/mapper/xml/PerformanceMapper.xml
  15. 5 0
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/mapper/xml/PerformanceOptimizerMapper.xml
  16. 15 0
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/service/IOptimizerConfigService.java
  17. 15 0
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/service/IPerformanceOptimizerService.java
  18. 12 0
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/service/IPerformanceService.java
  19. 26 0
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/service/impl/OptimizerConfigServiceImpl.java
  20. 19 0
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/service/impl/PerformanceOptimizerServiceImpl.java
  21. 96 1
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/service/impl/PerformanceServiceImpl.java
  22. 25 0
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/vo/DesignerCostDetailVO.java
  23. 43 0
      performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/vo/OptimizerCostDetailVO.java

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

@@ -534,9 +534,18 @@ public class DateUtils extends PropertyEditorSupport {
         return 0;
     }
 
+    public static int getQuarter(Date date) {
+        Calendar calendar = new GregorianCalendar();
+        calendar.setTime(date);
+        return calendar.get(Calendar.MONTH) / 3 + 1;
+    }
 
     public static void main(String[] args) throws ParseException {
-        getStartEndTime("2019-11-25 00:00:00");
+        Date now = new Date();
+        System.out.println(getQuarterStartDate(now));
+        System.out.println(getQuarterEndDate(now));
+        System.out.println(getYear(now));
+        System.out.println(getQuarter(now));
     }
 
     public static Map<String, Object> getStartEndTime(String createTime) throws ParseException {
@@ -558,7 +567,29 @@ public class DateUtils extends PropertyEditorSupport {
         return map;
     }
 
+    public static String getQuarterStartDate(Date date) {
+        Calendar calendar = new GregorianCalendar();
+        calendar.setTime(date);
+        Integer month = calendar.get(Calendar.MONTH);
+        Integer compare = month % 3;
+        calendar.add(Calendar.MONTH, -compare);
+        calendar.set(Calendar.DAY_OF_MONTH, 1);
+        Date getDate = calendar.getTime();
+        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+        return dateFormat.format(getDate);
+    }
 
+    public static String getQuarterEndDate(Date date) {
+        Calendar calendar = new GregorianCalendar();
+        calendar.setTime(date);
+        Integer month = calendar.get(Calendar.MONTH);
+        Integer compare = month % 3;
+        calendar.add(Calendar.MONTH, (3 - compare));
+        calendar.set(Calendar.DAY_OF_MONTH, 1);
+        Date getDate = calendar.getTime();
+        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
+        return dateFormat.format(getDate);
+    }
     /**
      * String类型 转换为Date, 如果参数长度为10 转换格式”yyyy-MM-dd“ 如果参数长度为19 转换格式”yyyy-MM-dd
      * HH:mm:ss“ * @param text String类型的时间值
@@ -586,9 +617,9 @@ public class DateUtils extends PropertyEditorSupport {
         }
     }
 
-    public static int getYear() {
+    public static int getYear(Date date) {
         GregorianCalendar calendar = new GregorianCalendar();
-        calendar.setTime(getDate());
+        calendar.setTime(date);
         return calendar.get(Calendar.YEAR);
     }
 
@@ -864,11 +895,9 @@ public class DateUtils extends PropertyEditorSupport {
      * @throws ParseException
      */
     public static String getMonth(String format, String date) throws ParseException {
-
         SimpleDateFormat df = new SimpleDateFormat(format);
         Date parse = df.parse(date);
         return String.format("%tm", parse);
-
     }
 
     /**
@@ -884,7 +913,6 @@ public class DateUtils extends PropertyEditorSupport {
         SimpleDateFormat df = new SimpleDateFormat(format);
         Date parse = df.parse(date);
         return String.format("%td", parse);
-
     }
 
 

+ 3 - 3
jeecg-boot-module-system/src/main/resources/jeecg/jeecg_database.properties

@@ -1,7 +1,7 @@
-#mysql 
+#mysql
 diver_name=com.mysql.jdbc.Driver
 url=jdbc:mysql://39.106.184.70:3306/jeecg-boot?useUnicode=true&characterEncoding=UTF-8
-username=hcst
+username=root
 password=hcst2019
 database_name=jeecg-boot
 #oracle
@@ -21,4 +21,4 @@ database_name=jeecg-boot
 #url=jdbc:sqlserver://192.168.1.200:1433;DatabaseName=jeecg
 #username=sa
 #password=SA
-#database_name=jeecg
+#database_name=jeecg

+ 0 - 6
module-common/pom.xml

@@ -24,12 +24,6 @@
 
     <dependencies>
         <dependency>
-            <groupId>thirtpart</groupId>
-            <artifactId>jave</artifactId>
-            <version>1.0</version>
-        </dependency>
-
-        <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
             <version>4.11</version>

+ 12 - 13
module-common/src/main/java/cn/com/ctop/common/module/service/impl/MaterialInfoServiceImpl.java

@@ -9,7 +9,9 @@ import cn.com.ctop.common.module.mapper.MaterialInfoMapper;
 import cn.com.ctop.common.module.mapper.MaterialParameterMapper;
 import cn.com.ctop.common.module.mapper.MaterialTagMapper;
 import cn.com.ctop.common.module.service.IMaterialInfoService;
-import cn.com.ctop.common.module.utils.*;
+import cn.com.ctop.common.module.utils.Check;
+import cn.com.ctop.common.module.utils.ResultMapUtils;
+import cn.com.ctop.common.module.utils.StatusCode;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -18,12 +20,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.io.File;
-import java.io.FileInputStream;
 import java.io.IOException;
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.nio.channels.FileChannel;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
@@ -32,6 +29,8 @@ import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.regex.Pattern;
 
+// import it.sauronsoftware.jave.Encoder;
+
 /**
  * 素材信息
  *
@@ -145,7 +144,7 @@ public class MaterialInfoServiceImpl extends ServiceImpl<MaterialInfoMapper, Mat
                     }
                 }
             }
-            getFile(info);
+            //  getFile(info);
             ResultMapUtils.setResultMap(resultMap, StatusCode.COMMON_SUCCESS.getCode());
         } catch (Exception e) {
             ResultMapUtils.setResultMap(resultMap, StatusCode.MATERIAL_UPLOAD_FAIL.getCode());
@@ -251,7 +250,7 @@ public class MaterialInfoServiceImpl extends ServiceImpl<MaterialInfoMapper, Mat
     @Autowired
     private MaterialParameterMapper materialParameterMapper;
 
-    public void getFile(MaterialInfo materialInfo) {
+   /* public void getFile(MaterialInfo materialInfo) {
         uploadExecutorService.submit(new Runnable() {
             @Override
             public void run() {
@@ -265,7 +264,7 @@ public class MaterialInfoServiceImpl extends ServiceImpl<MaterialInfoMapper, Mat
                         String localUrl = LoadFileUtil.downLoadFromUrl(url, PropertiesUtils.getValue("kuaishou_config", "video_sava_path"));
                         File file = new File(localUrl);
                         it.sauronsoftware.jave.Encoder encoder = new Encoder();
-                        /*try {*/
+                        *//*try {*//*
                         it.sauronsoftware.jave.MultimediaInfo m = encoder.getInfo(file);
                         long duration = m.getDuration();
                         long secondDuration = duration / 1000;
@@ -295,18 +294,18 @@ public class MaterialInfoServiceImpl extends ServiceImpl<MaterialInfoMapper, Mat
                             log.info("素材基本信息入库完成,用时:{} s", (System.currentTimeMillis() - l) / 1000);
 
                         }
-               /* } catch (Exception e) {
+               *//* } catch (Exception e) {
                     e.printStackTrace();
-                } *//*finally {
+                } *//**//*finally {
                     file.delete();
-                }*/
+                }*//*
                     }
                 } catch (Exception e) {
                     e.printStackTrace();
                 }
             }
         });
-    }
+    }*/
 
 
 }

+ 248 - 0
performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/controller/OptimizerConfigController.java

@@ -0,0 +1,248 @@
+package cn.com.ctop.performanceappraisal.controller;
+
+import cn.com.ctop.performanceappraisal.entity.OptimizerConfig;
+import cn.com.ctop.performanceappraisal.service.IOptimizerConfigService;
+import com.alibaba.fastjson.JSON;
+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.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;
+
+/**
+ * 优化师配置信息表
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2019-12-13
+ */
+@Slf4j
+@Api(tags = "优化师配置信息表")
+@RestController
+@RequestMapping("/ctop/optimizerConfig")
+public class OptimizerConfigController {
+    @Autowired
+    private IOptimizerConfigService optimizerConfigService;
+
+    /**
+     * 分页列表查询
+     *
+     * @param optimizerConfig
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    @AutoLog(value = "优化师配置信息表-分页列表查询")
+    @ApiOperation(value = "优化师配置信息表-分页列表查询", notes = "优化师配置信息表-分页列表查询")
+    @GetMapping(value = "/list")
+    public Result<IPage<OptimizerConfig>> queryPageList(OptimizerConfig optimizerConfig,
+                                                        @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                        @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                        HttpServletRequest req) {
+        Result<IPage<OptimizerConfig>> result = new Result<IPage<OptimizerConfig>>();
+        QueryWrapper<OptimizerConfig> queryWrapper = QueryGenerator.initQueryWrapper(optimizerConfig, req.getParameterMap());
+        Page<OptimizerConfig> page = new Page<OptimizerConfig>(pageNo, pageSize);
+        IPage<OptimizerConfig> pageList = optimizerConfigService.page(page, queryWrapper);
+        result.setSuccess(true);
+        result.setResult(pageList);
+        return result;
+    }
+
+    /**
+     * 添加
+     *
+     * @param optimizerConfig
+     * @return
+     */
+    @AutoLog(value = "优化师配置信息表-添加")
+    @ApiOperation(value = "优化师配置信息表-添加", notes = "优化师配置信息表-添加")
+    @PostMapping(value = "/add")
+    public Result<OptimizerConfig> add(@RequestBody OptimizerConfig optimizerConfig) {
+        Result<OptimizerConfig> result = new Result<OptimizerConfig>();
+        try {
+            optimizerConfigService.save(optimizerConfig);
+            result.success("添加成功!");
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            result.error500("操作失败");
+        }
+        return result;
+    }
+
+    /**
+     * 编辑
+     *
+     * @param optimizerConfig
+     * @return
+     */
+    @AutoLog(value = "优化师配置信息表-编辑")
+    @ApiOperation(value = "优化师配置信息表-编辑", notes = "优化师配置信息表-编辑")
+    @PutMapping(value = "/edit")
+    public Result<OptimizerConfig> edit(@RequestBody OptimizerConfig optimizerConfig) {
+        Result<OptimizerConfig> result = new Result<OptimizerConfig>();
+        OptimizerConfig optimizerConfigEntity = optimizerConfigService.getById(optimizerConfig.getId());
+        if (optimizerConfigEntity == null) {
+            result.error500("未找到对应实体");
+        } else {
+            boolean ok = optimizerConfigService.updateById(optimizerConfig);
+            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 {
+            optimizerConfigService.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<OptimizerConfig> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        Result<OptimizerConfig> result = new Result<OptimizerConfig>();
+        if (ids == null || "".equals(ids.trim())) {
+            result.error500("参数不识别!");
+        } else {
+            this.optimizerConfigService.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<OptimizerConfig> queryById(@RequestParam(name = "id", required = true) String id) {
+        Result<OptimizerConfig> result = new Result<OptimizerConfig>();
+        OptimizerConfig optimizerConfig = optimizerConfigService.getById(id);
+        if (optimizerConfig == null) {
+            result.error500("未找到对应实体");
+        } else {
+            result.setResult(optimizerConfig);
+            result.setSuccess(true);
+        }
+        return result;
+    }
+
+    /**
+     * 导出excel
+     *
+     * @param request
+     * @param response
+     */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
+        // Step.1 组装查询条件
+        QueryWrapper<OptimizerConfig> queryWrapper = null;
+        try {
+            String paramsStr = request.getParameter("paramsStr");
+            if (oConvertUtils.isNotEmpty(paramsStr)) {
+                String deString = URLDecoder.decode(paramsStr, "UTF-8");
+                OptimizerConfig optimizerConfig = JSON.parseObject(deString, OptimizerConfig.class);
+                queryWrapper = QueryGenerator.initQueryWrapper(optimizerConfig, request.getParameterMap());
+            }
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+
+        //Step.2 AutoPoi 导出Excel
+        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+        List<OptimizerConfig> pageList = optimizerConfigService.list(queryWrapper);
+        //导出文件名称
+        mv.addObject(NormalExcelConstants.FILE_NAME, "优化师配置信息表列表");
+        mv.addObject(NormalExcelConstants.CLASS, OptimizerConfig.class);
+        mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("优化师配置信息表列表数据", "导出人:Jeecg", "导出信息"));
+        mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
+        return mv;
+    }
+
+    /**
+     * 通过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<OptimizerConfig> listOptimizerConfigs = ExcelImportUtil.importExcel(file.getInputStream(), OptimizerConfig.class, params);
+                optimizerConfigService.saveBatch(listOptimizerConfigs);
+                return Result.ok("文件导入成功!数据行数:" + listOptimizerConfigs.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("文件导入失败!");
+    }
+
+}

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

@@ -0,0 +1,248 @@
+package cn.com.ctop.performanceappraisal.controller;
+
+import cn.com.ctop.performanceappraisal.entity.PerformanceOptimizer;
+import cn.com.ctop.performanceappraisal.service.IPerformanceOptimizerService;
+import com.alibaba.fastjson.JSON;
+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.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;
+
+/**
+ * 优化师绩效信息
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2019-12-13
+ */
+@Slf4j
+@Api(tags = "优化师绩效信息")
+@RestController
+@RequestMapping("/ctop/performanceOptimizer")
+public class PerformanceOptimizerController {
+    @Autowired
+    private IPerformanceOptimizerService performanceOptimizerService;
+
+    /**
+     * 分页列表查询
+     *
+     * @param performanceOptimizer
+     * @param pageNo
+     * @param pageSize
+     * @param req
+     * @return
+     */
+    @AutoLog(value = "优化师绩效信息-分页列表查询")
+    @ApiOperation(value = "优化师绩效信息-分页列表查询", notes = "优化师绩效信息-分页列表查询")
+    @GetMapping(value = "/list")
+    public Result<IPage<PerformanceOptimizer>> queryPageList(PerformanceOptimizer performanceOptimizer,
+                                                             @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
+                                                             @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
+                                                             HttpServletRequest req) {
+        Result<IPage<PerformanceOptimizer>> result = new Result<IPage<PerformanceOptimizer>>();
+        QueryWrapper<PerformanceOptimizer> queryWrapper = QueryGenerator.initQueryWrapper(performanceOptimizer, req.getParameterMap());
+        Page<PerformanceOptimizer> page = new Page<PerformanceOptimizer>(pageNo, pageSize);
+        IPage<PerformanceOptimizer> pageList = performanceOptimizerService.page(page, queryWrapper);
+        result.setSuccess(true);
+        result.setResult(pageList);
+        return result;
+    }
+
+    /**
+     * 添加
+     *
+     * @param performanceOptimizer
+     * @return
+     */
+    @AutoLog(value = "优化师绩效信息-添加")
+    @ApiOperation(value = "优化师绩效信息-添加", notes = "优化师绩效信息-添加")
+    @PostMapping(value = "/add")
+    public Result<PerformanceOptimizer> add(@RequestBody PerformanceOptimizer performanceOptimizer) {
+        Result<PerformanceOptimizer> result = new Result<PerformanceOptimizer>();
+        try {
+            performanceOptimizerService.save(performanceOptimizer);
+            result.success("添加成功!");
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            result.error500("操作失败");
+        }
+        return result;
+    }
+
+    /**
+     * 编辑
+     *
+     * @param performanceOptimizer
+     * @return
+     */
+    @AutoLog(value = "优化师绩效信息-编辑")
+    @ApiOperation(value = "优化师绩效信息-编辑", notes = "优化师绩效信息-编辑")
+    @PutMapping(value = "/edit")
+    public Result<PerformanceOptimizer> edit(@RequestBody PerformanceOptimizer performanceOptimizer) {
+        Result<PerformanceOptimizer> result = new Result<PerformanceOptimizer>();
+        PerformanceOptimizer performanceOptimizerEntity = performanceOptimizerService.getById(performanceOptimizer.getId());
+        if (performanceOptimizerEntity == null) {
+            result.error500("未找到对应实体");
+        } else {
+            boolean ok = performanceOptimizerService.updateById(performanceOptimizer);
+            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 {
+            performanceOptimizerService.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<PerformanceOptimizer> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+        Result<PerformanceOptimizer> result = new Result<PerformanceOptimizer>();
+        if (ids == null || "".equals(ids.trim())) {
+            result.error500("参数不识别!");
+        } else {
+            this.performanceOptimizerService.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<PerformanceOptimizer> queryById(@RequestParam(name = "id", required = true) String id) {
+        Result<PerformanceOptimizer> result = new Result<PerformanceOptimizer>();
+        PerformanceOptimizer performanceOptimizer = performanceOptimizerService.getById(id);
+        if (performanceOptimizer == null) {
+            result.error500("未找到对应实体");
+        } else {
+            result.setResult(performanceOptimizer);
+            result.setSuccess(true);
+        }
+        return result;
+    }
+
+    /**
+     * 导出excel
+     *
+     * @param request
+     * @param response
+     */
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, HttpServletResponse response) {
+        // Step.1 组装查询条件
+        QueryWrapper<PerformanceOptimizer> queryWrapper = null;
+        try {
+            String paramsStr = request.getParameter("paramsStr");
+            if (oConvertUtils.isNotEmpty(paramsStr)) {
+                String deString = URLDecoder.decode(paramsStr, "UTF-8");
+                PerformanceOptimizer performanceOptimizer = JSON.parseObject(deString, PerformanceOptimizer.class);
+                queryWrapper = QueryGenerator.initQueryWrapper(performanceOptimizer, request.getParameterMap());
+            }
+        } catch (UnsupportedEncodingException e) {
+            e.printStackTrace();
+        }
+
+        //Step.2 AutoPoi 导出Excel
+        ModelAndView mv = new ModelAndView(new JeecgEntityExcelView());
+        List<PerformanceOptimizer> pageList = performanceOptimizerService.list(queryWrapper);
+        //导出文件名称
+        mv.addObject(NormalExcelConstants.FILE_NAME, "优化师绩效信息列表");
+        mv.addObject(NormalExcelConstants.CLASS, PerformanceOptimizer.class);
+        mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("优化师绩效信息列表数据", "导出人:Jeecg", "导出信息"));
+        mv.addObject(NormalExcelConstants.DATA_LIST, pageList);
+        return mv;
+    }
+
+    /**
+     * 通过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<PerformanceOptimizer> listPerformanceOptimizers = ExcelImportUtil.importExcel(file.getInputStream(), PerformanceOptimizer.class, params);
+                performanceOptimizerService.saveBatch(listPerformanceOptimizers);
+                return Result.ok("文件导入成功!数据行数:" + listPerformanceOptimizers.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("文件导入失败!");
+    }
+
+}

+ 81 - 0
performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/entity/OptimizerConfig.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.jeecgframework.poi.excel.annotation.Excel;
+
+import java.util.Date;
+
+/**
+ * 优化师配置信息表
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2019-12-13
+ */
+@Data
+@TableName("ctop_optimizer_config")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_optimizer_config对象", description = "优化师配置信息表")
+public class OptimizerConfig {
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.UUID)
+    @ApiModelProperty(value = "id")
+    private Integer id;
+    /**
+     * 媒体类型
+     */
+    @Excel(name = "媒体类型", width = 15)
+    @ApiModelProperty(value = "媒体类型")
+    private Integer appType;
+    /**
+     * 媒体任务
+     */
+    @Excel(name = "媒体任务", width = 15)
+    @ApiModelProperty(value = "媒体任务")
+    private java.math.BigDecimal mediaTask;
+    /**
+     * personalTask
+     */
+    @Excel(name = "personalTask", width = 15)
+    @ApiModelProperty(value = "personalTask")
+    private java.math.BigDecimal personalTask;
+    /**
+     * 媒体任务完成下的提成比例 (千分之n)
+     */
+    @Excel(name = "媒体任务完成下的提成比例 (千分之n)", width = 15)
+    @ApiModelProperty(value = "媒体任务完成下的提成比例 (千分之n)")
+    private java.math.BigDecimal mediaTaskFinishRate;
+    /**
+     * 媒体任务未完成下的提成比例 (千分之n)
+     */
+    @Excel(name = "媒体任务未完成下的提成比例 (千分之n)", width = 15)
+    @ApiModelProperty(value = "媒体任务未完成下的提成比例 (千分之n)")
+    private java.math.BigDecimal mediaTaskNoFinishRate;
+    /**
+     * 是否有效
+     */
+    @Excel(name = "是否有效", width = 15)
+    @ApiModelProperty(value = "是否有效")
+    private Integer enabled;
+    /**
+     * createTime
+     */
+    @ApiModelProperty(value = "createTime")
+    private Date createTime;
+    /**
+     * updateTime
+     */
+    @ApiModelProperty(value = "updateTime")
+    private Date updateTime;
+}

+ 102 - 0
performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/entity/PerformanceOptimizer.java

@@ -0,0 +1,102 @@
+package cn.com.ctop.performanceappraisal.entity;
+
+import cn.com.ctop.performanceappraisal.vo.OptimizerCostDetailVO;
+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.jeecgframework.poi.excel.annotation.Excel;
+
+import java.util.Date;
+
+/**
+ * 优化师绩效信息
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2019-12-13
+ */
+@Data
+@TableName("ctop_performance_optimizer")
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "ctop_performance_optimizer对象", description = "优化师绩效信息")
+public class PerformanceOptimizer {
+
+    /**
+     * id
+     */
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "id")
+    private Long id;
+    /**
+     * 总消耗
+     */
+    @Excel(name = "总消耗", width = 15)
+    @ApiModelProperty(value = "总消耗")
+    private java.math.BigDecimal totalCost;
+    /**
+     * 总提成
+     */
+    @Excel(name = "总提成", width = 15)
+    @ApiModelProperty(value = "总提成")
+    private java.math.BigDecimal totalRoyalty;
+    /**
+     * 年
+     */
+    @Excel(name = "年", width = 15)
+    @ApiModelProperty(value = "年")
+    private String year;
+    /**
+     * 季度
+     */
+    @Excel(name = "季度", width = 15)
+    @ApiModelProperty(value = "季度")
+    private String quarter;
+    /**
+     * 用户id
+     */
+    @Excel(name = "用户id", width = 15)
+    @ApiModelProperty(value = "用户id")
+    private String userId;
+    /**
+     * 用户名称
+     */
+    @Excel(name = "用户名称", width = 15)
+    @ApiModelProperty(value = "用户名称")
+    private String realname;
+    /**
+     * 媒体类型
+     */
+    @Excel(name = "媒体类型", width = 15)
+    @ApiModelProperty(value = "媒体类型")
+    private Integer appType;
+    /**
+     * createTime
+     */
+    @ApiModelProperty(value = "createTime")
+    private Date createTime;
+    /**
+     * updateTime
+     */
+    @ApiModelProperty(value = "updateTime")
+    private Date updateTime;
+
+    public PerformanceOptimizer() {
+    }
+
+    public PerformanceOptimizer(OptimizerCostDetailVO vo) {
+        this.appType = vo.getAppType();
+        this.totalCost = vo.getTotalCost();
+        this.totalRoyalty = vo.getTotalRoyalty();
+        this.year = vo.getYear();
+        this.quarter = vo.getQuarter();
+        this.userId = vo.getUserId();
+        this.realname = vo.getRealName();
+        this.appType = vo.getAppType();
+    }
+}

+ 2 - 0
performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/entity/RolePerformancRraise.java

@@ -38,6 +38,7 @@ public class RolePerformancRraise {
      */
     @Excel(name = "角色id", width = 15)
     @ApiModelProperty(value = "角色id")
+    @Dict(dicCode = "id", dictTable = "sys_role", dicText = "role_name")
     private String roleId;
     /**
      * 提点梯度级别
@@ -62,6 +63,7 @@ public class RolePerformancRraise {
      */
     @Excel(name = "媒体类型", width = 15)
     @ApiModelProperty(value = "媒体类型")
+    @Dict(dicCode = "media_type")
     private Integer appType;
     /**
      * 是否可用

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

@@ -0,0 +1,15 @@
+package cn.com.ctop.performanceappraisal.mapper;
+
+import cn.com.ctop.performanceappraisal.entity.OptimizerConfig;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 优化师配置信息表
+ *
+ * @author: jeecg-boot
+ * @date: 2019-12-13
+ * @cersion: V1.0
+ */
+public interface OptimizerConfigMapper extends BaseMapper<OptimizerConfig> {
+
+}

+ 7 - 0
performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/mapper/PerformanceMapper.java

@@ -1,7 +1,11 @@
 package cn.com.ctop.performanceappraisal.mapper;
 
 import cn.com.ctop.performanceappraisal.entity.Performance;
+import cn.com.ctop.performanceappraisal.vo.OptimizerCostDetailVO;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * 设计师季度绩效表
@@ -12,4 +16,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 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);
+
+    OptimizerCostDetailVO getOptimizerTotalCost(@Param(value = "startDate") String startDate, @Param(value = "endDate") String endDate, @Param(value = "year") String year, @Param(value = "quarter") String quarter);
 }

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

@@ -0,0 +1,15 @@
+package cn.com.ctop.performanceappraisal.mapper;
+
+import cn.com.ctop.performanceappraisal.entity.PerformanceOptimizer;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * 优化师绩效信息
+ *
+ * @author: jeecg-boot
+ * @date: 2019-12-13
+ * @cersion: V1.0
+ */
+public interface PerformanceOptimizerMapper extends BaseMapper<PerformanceOptimizer> {
+
+}

+ 5 - 0
performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/mapper/xml/OptimizerConfigMapper.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.OptimizerConfigMapper">
+
+</mapper>

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

@@ -1,5 +1,51 @@
 <?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.PerformanceMapper">
+    <resultMap id="OptimizerTotalCostDetail" type="cn.com.ctop.performanceappraisal.vo.OptimizerCostDetailVO">
+        <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"/>
+    </resultMap>
+    <select id="getOptimizerTotalCostDetail" 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
+        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'
+        AND
+            dailiAccount.stat_date &gt;= #{startDate}
+        AND
+            dailiAccount.stat_date &lt; #{endDate}
+        GROUP BY sysUser.id ORDER BY SUM(charge) DESC
+    </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
+            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'
+        AND
+            dailiAccount.stat_date &gt;= #{startDate}
+        AND
+            dailiAccount.stat_date &lt; #{endDate}
+        GROUP BY userRole.role_id
+    </select>
 </mapper>

+ 5 - 0
performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/mapper/xml/PerformanceOptimizerMapper.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.PerformanceOptimizerMapper">
+
+</mapper>

+ 15 - 0
performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/service/IOptimizerConfigService.java

@@ -0,0 +1,15 @@
+package cn.com.ctop.performanceappraisal.service;
+
+import cn.com.ctop.performanceappraisal.entity.OptimizerConfig;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 优化师配置信息表
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2019-12-13
+ */
+public interface IOptimizerConfigService extends IService<OptimizerConfig> {
+    OptimizerConfig getEnabledConfigByMediaType(String mediaType);
+}

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

@@ -0,0 +1,15 @@
+package cn.com.ctop.performanceappraisal.service;
+
+import cn.com.ctop.performanceappraisal.entity.PerformanceOptimizer;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 优化师绩效信息
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2019-12-13
+ */
+public interface IPerformanceOptimizerService extends IService<PerformanceOptimizer> {
+
+}

+ 12 - 0
performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/service/IPerformanceService.java

@@ -1,8 +1,12 @@
 package cn.com.ctop.performanceappraisal.service;
 
 import cn.com.ctop.performanceappraisal.entity.Performance;
+import cn.com.ctop.performanceappraisal.vo.DesignerCostDetailVO;
+import cn.com.ctop.performanceappraisal.vo.OptimizerCostDetailVO;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.List;
+
 /**
  * 设计师季度绩效表
  *
@@ -11,5 +15,13 @@ import com.baomidou.mybatisplus.extension.service.IService;
  * @date 2019-12-10
  */
 public interface IPerformanceService extends IService<Performance> {
+    /**
+     * 1:根据角色获取用户当前季度的所有视频消耗相关数据
+     */
+    List<DesignerCostDetailVO> getTotalCostDetailByRoleId(String roleId);
 
+    /**
+     * 获取优化师总消耗数据信息
+     */
+    List<OptimizerCostDetailVO> getOptimizerTotalCostDetail(String startDate, String endDate, String year, String quarter);
 }

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

@@ -0,0 +1,26 @@
+package cn.com.ctop.performanceappraisal.service.impl;
+
+import cn.com.ctop.performanceappraisal.entity.OptimizerConfig;
+import cn.com.ctop.performanceappraisal.mapper.OptimizerConfigMapper;
+import cn.com.ctop.performanceappraisal.service.IOptimizerConfigService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * 优化师配置信息表
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2019-12-13
+ */
+@Service
+public class OptimizerConfigServiceImpl extends ServiceImpl<OptimizerConfigMapper, OptimizerConfig> implements IOptimizerConfigService {
+
+    @Override
+    public OptimizerConfig getEnabledConfigByMediaType(String mediaType) {
+        QueryWrapper<OptimizerConfig> queryWrapper = new QueryWrapper();
+        queryWrapper.eq("enabled", "1").eq("app_type", mediaType).orderByDesc("id").last(" limit 1");
+        return this.getOne(queryWrapper);
+    }
+}

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

@@ -0,0 +1,19 @@
+package cn.com.ctop.performanceappraisal.service.impl;
+
+import cn.com.ctop.performanceappraisal.entity.PerformanceOptimizer;
+import cn.com.ctop.performanceappraisal.mapper.PerformanceOptimizerMapper;
+import cn.com.ctop.performanceappraisal.service.IPerformanceOptimizerService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * 优化师绩效信息
+ *
+ * @author jeecg-boot
+ * @version V1.0
+ * @date 2019-12-13
+ */
+@Service
+public class PerformanceOptimizerServiceImpl extends ServiceImpl<PerformanceOptimizerMapper, PerformanceOptimizer> implements IPerformanceOptimizerService {
+
+}

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

@@ -1,11 +1,25 @@
 package cn.com.ctop.performanceappraisal.service.impl;
 
-import cn.com.ctop.performanceappraisal.service.IPerformanceService;
+import cn.com.ctop.performanceappraisal.entity.OptimizerConfig;
 import cn.com.ctop.performanceappraisal.entity.Performance;
+import cn.com.ctop.performanceappraisal.entity.PerformanceOptimizer;
 import cn.com.ctop.performanceappraisal.mapper.PerformanceMapper;
+import cn.com.ctop.performanceappraisal.mapper.PerformanceOptimizerMapper;
+import cn.com.ctop.performanceappraisal.service.IOptimizerConfigService;
+import cn.com.ctop.performanceappraisal.service.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.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;
+
 /**
  * 设计师季度绩效表
  *
@@ -15,5 +29,86 @@ import org.springframework.stereotype.Service;
  */
 @Service
 public class PerformanceServiceImpl extends ServiceImpl<PerformanceMapper, Performance> implements IPerformanceService {
+    @Autowired
+    private PerformanceMapper performanceMapper;
+    @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:查询用户总消耗以及总视频数
+     * 2:查询视频有效率排行榜
+     * 3:根据视频有效率分配提点比例
+     * 4:计算个人总绩效
+     */
+
+    /**
+     * 计算优化师岗位绩效逻辑
+     * 1:查询所有优化师总消耗数据
+     * 2:查询媒体季度任务完成情况
+     * 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);
+        //查询优化师系统设置数据
+        OptimizerConfig config = optimizerConfigService.getEnabledConfigByMediaType("2");
+        //2: 查询媒体季度任务完成情况
+        OptimizerCostDetailVO totalCostVo = performanceMapper.getOptimizerTotalCost(startDate, endDate, year, quarter);
+        //3:计算单个优化师提成总额
+        List<OptimizerCostDetailVO> getDetailVos = new ArrayList<>();
+        if (null != detailVOS && detailVOS.size() > 0) {
+            for (OptimizerCostDetailVO vo : detailVOS) {
+                vo.setTotalRoyalty(getTotalRoyalty(config, vo, totalCostVo));
+                PerformanceOptimizer optimizer = new PerformanceOptimizer(vo);
+                optimizerMapper.insert(optimizer);
+            }
+        }
+        //TODO 需要入库
+        return getDetailVos;
+    }
+
+    @Autowired
+    private PerformanceOptimizerMapper optimizerMapper;
+
+    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();
+        //媒体任务未完成提点
+        BigDecimal mediaTaskNoFinishRate = config.getMediaTaskNoFinishRate();
+        //媒体任务未完成提点
+        BigDecimal mediaTaskFinishRate = config.getMediaTaskFinishRate();
+        //个人任务未完成
+        if (totalCost.compareTo(personalTask) < 0) {
+            return royalty;
+        }
+        //季度任务未完成
+        if (totalCost.compareTo(mediaTask) < 0) {
+            return totalCost.multiply(mediaTaskNoFinishRate).divide(new BigDecimal("1000")).setScale(2, RoundingMode.HALF_UP);
+        }
+
+        return totalCost.multiply(mediaTaskFinishRate).divide(new BigDecimal("1000")).setScale(2, RoundingMode.HALF_UP);
+    }
 
 }

+ 25 - 0
performance-appraisal/src/main/java/cn/com/ctop/performanceappraisal/vo/DesignerCostDetailVO.java

@@ -0,0 +1,25 @@
+package cn.com.ctop.performanceappraisal.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author jeecg-boot
+ */
+@Data
+public class DesignerCostDetailVO implements Serializable {
+    /**
+     * 设计师姓名
+     */
+    private String realName;
+    /**
+     * 视频总消耗
+     */
+    private BigDecimal totalCost;
+    /**
+     * 总视频数
+     */
+    private Long totalVideoNum;
+}

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

@@ -0,0 +1,43 @@
+package cn.com.ctop.performanceappraisal.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author jeecg-boot
+ */
+
+@Data
+public class OptimizerCostDetailVO implements Serializable {
+    /**
+     * 优化师姓名
+     */
+    private String realName;
+    /**
+     * 账户总消耗
+     */
+    private BigDecimal totalCost;
+    /**
+     * 年
+     */
+    private String year;
+    /**
+     * 季度
+     */
+    private String quarter;
+    /**
+     * 总提成
+     */
+    private BigDecimal totalRoyalty;
+    /**
+     * 用户id
+     */
+    private String userId;
+    /**
+     * 平台类型
+     */
+    private Integer appType;
+
+}