浏览代码

Merge branch 'master' of http://47.100.37.243:10080/wutt/manHourHousekeeper into master

seyason 2 年之前
父节点
当前提交
b64a1ce305
共有 18 个文件被更改,包括 236 次插入19 次删除
  1. 32 0
      fhKeeper/formulahousekeeper/inva_4_tivo/css/index.css
  2. 1 0
      fhKeeper/formulahousekeeper/inva_4_tivo/index.html
  3. 14 1
      fhKeeper/formulahousekeeper/inva_4_tivo/js/index.js
  4. 5 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/DepartmentController.java
  5. 2 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectPercentageController.java
  6. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportExtraDegreeController.java
  7. 5 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskController.java
  8. 2 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/DepartmentMapper.java
  9. 2 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/TaskMapper.java
  10. 2 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/DepartmentService.java
  11. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectPercentageService.java
  12. 2 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/TaskService.java
  13. 74 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DepartmentServiceImpl.java
  14. 11 14
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectPercentageServiceImpl.java
  15. 7 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/TaskServiceImpl.java
  16. 52 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/task/TimingTask.java
  17. 15 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/DepartmentMapper.xml
  18. 8 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TaskMapper.xml

+ 32 - 0
fhKeeper/formulahousekeeper/inva_4_tivo/css/index.css

@@ -568,6 +568,38 @@
     width: 1248px;
     margin: auto;
 }
+.tooltipTis {
+    width: 1200px;
+    margin: auto;
+    text-align: center;
+    font-size: 28px;
+    position: relative;
+    top: -50px;
+    transform: translate(100rem,0);
+}
+.tooltipTisFillCons {
+    animation: moves 2s;
+    animation-fill-mode: both; 
+}
+/* .fillCon {
+    width: 100%;
+    height: 38.4375rem;
+    position: relative;
+    transform: translate(0,16.25rem);
+}
+.fillCons {
+    animation: move 2s;
+    animation-fill-mode: both;
+}*/
+
+@keyframes moves {
+    0%{
+        transform: translate(100rem,0);
+    }
+    100%{
+        transform: translate(0,0);
+    }
+} 
 .li {
     text-align: center;
     background: #fff;

+ 1 - 0
fhKeeper/formulahousekeeper/inva_4_tivo/index.html

@@ -478,6 +478,7 @@
         <div class="connonst">
             <h2>产品定价</h2>
         </div>
+        <div class="tooltipTis" id="tooltipTis">人数越多优惠越大</div>
         <div class="pri">
             <div class="li">
                 <div class="li_con">

+ 14 - 1
fhKeeper/formulahousekeeper/inva_4_tivo/js/index.js

@@ -42,13 +42,17 @@ let jiesaoTop = $('.jiesao').offset().top
 let znyqTop = $('.znyq').offset().top
 
 let fill = $('.fill').offset().top
+let tooltipsOffTop = $('#pricing').offset().top
 let filss = ''
+let tooltips = ''
 var devicewidth = document.documentElement.clientWidth
 if(document.documentElement.clientWidth < 1900) {
     var scale = devicewidth / 1920
     filss = fill * scale
+    tooltips = tooltipsOffTop * scale
 } else {
     filss = fill
+    tooltips = tooltipsOffTop
 }
 
 $(window).scroll(function () {
@@ -116,13 +120,22 @@ $(window).scroll(function () {
         $('#selMour7').css({'opacity': znyqTopopacityVal, 'transform':'translate('+znyqToppaddingfive+','+ znyqToppaddingfive +')'})
         $('#selMour8').css({'opacity': znyqTopopacityVal, 'transform':'translate('+znyqToppaddingfives+','+ znyqToppaddingfives +')'})
     }
-    // 加样式
+    // 加样式 (填报、审批、统计分分钟搞定)
     if(currentTop > filss - 300) {
         $('#fillCon').addClass('fillCons')
     }
     if(currentTop < filss - 400){
         $("#fillCon").removeClass("fillCons");
     }
+
+    // 加样式 (产品定价)
+    if(currentTop > tooltips - 500) {
+        $('#tooltipTis').addClass('tooltipTisFillCons')
+    }
+    if(currentTop < tooltips - 800){
+        $("#tooltipTis").removeClass("tooltipTisFillCons");
+    }
+
 })
 
 // tab点击

+ 5 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/DepartmentController.java

@@ -104,6 +104,11 @@ public class DepartmentController {
         return departmentService.getUserCustomDataStatistic(startDate, endDate, departmentId, request);
     }
 
+    @RequestMapping("/getDeptCustomDataStatistic")
+    public HttpRespMsg getDeptCustomDataStatistic(String startDate, String endDate, Integer departmentId, HttpServletRequest request){
+        return departmentService.getDeptCustomDataStatistic(startDate,endDate,departmentId,request);
+    }
+
     /**
      * 按人员导出工时统计,可选人员
      * departmentId 要查询的项目

+ 2 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectPercentageController.java

@@ -38,8 +38,8 @@ public class ProjectPercentageController {
 
     @RequestMapping("/importData")
     public HttpRespMsg importData(Integer companyId, Integer withCheckIn,
-                                  MultipartFile file, HttpServletRequest request){
-        return projectPercentageService.importData(companyId,withCheckIn, file, request);
+                                  MultipartFile file, HttpServletRequest request,String ymonth){
+        return projectPercentageService.importData(companyId,withCheckIn, file, request,ymonth);
     }
 }
 

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportExtraDegreeController.java

@@ -186,7 +186,7 @@ public class ReportExtraDegreeController {
         String token = request.getHeader("TOKEN");
         User user = userMapper.selectById(token);
 
-        List<ReportExtraDegree> all = reportExtraDegreeMapper.getAll(user.getCompanyId());
+        List<ReportExtraDegree> all = reportExtraDegreeMapper.getAll(user.getCompanyId()); 
         if (withProjects == 1) {
             List<Project> allProjects = projectMapper.selectList(new QueryWrapper<Project>().eq("company_id", user.getCompanyId()));
             for (ReportExtraDegree degree : all) {

+ 5 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskController.java

@@ -599,6 +599,11 @@ public class TaskController {
         return taskService.getExecutorPanel(projectId);
     }
 
+    @RequestMapping("/getExecutorPlanHour")
+    public HttpRespMsg getExecutorPlanHour(Integer projectId){
+        return taskService.getExecutorPlanHour(projectId);
+    }
+
     @RequestMapping("/getStagesPanel")
     public HttpRespMsg getStagesPanel(Integer projectId) {
         return taskService.getStagesPanel(projectId);

+ 2 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/DepartmentMapper.java

@@ -26,4 +26,6 @@ public interface DepartmentMapper extends BaseMapper<Department> {
     void updateNullManager(Integer departmentId);
     @Update("update department set report_audit_userid = null where department_id = #{departmentId}")
     void updateNullLeader(Integer departmentId);
+
+    List<Map<String, Object>> getDeptCustomDataStatistic(String startDate, String endDate, Integer departmentId, Integer companyId);
 }

+ 2 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/TaskMapper.java

@@ -43,4 +43,6 @@ public interface TaskMapper extends BaseMapper<Task> {
     void removeTaskExecutor(Integer id);
 
     List<Task> selectMilepost(@Param("ids") List<Integer> ids);
+
+    List getExecutorPlanHour(Integer projectId);
 }

+ 2 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/DepartmentService.java

@@ -38,4 +38,6 @@ public interface DepartmentService extends IService<Department> {
     HttpRespMsg getUserCustomDataStatistic(String startDate, String endDate, Integer departmentId, HttpServletRequest request);
 
     HttpRespMsg exportDeptStatistic(String startDate, String endDate, HttpServletRequest request);
+
+    HttpRespMsg getDeptCustomDataStatistic(String startDate, String endDate, Integer departmentId, HttpServletRequest request);
 }

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectPercentageService.java

@@ -21,5 +21,5 @@ public interface ProjectPercentageService extends IService<ProjectPercentage> {
 
     HttpRespMsg getMonthSetting(String ymonth);
 
-    HttpRespMsg importData(Integer companyId, Integer withCheckIn, MultipartFile file, HttpServletRequest request);
+    HttpRespMsg importData(Integer companyId, Integer withCheckIn, MultipartFile file, HttpServletRequest request,String ymonth);
 }

+ 2 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/TaskService.java

@@ -47,4 +47,6 @@ public interface TaskService extends IService<Task> {
     HttpRespMsg getMilestoneTaskList(Integer milestoneId);
 
     public void notifyMileStoneFinish(Integer companyId, List<Task> taskList);
+
+    HttpRespMsg getExecutorPlanHour(Integer projectId);
 }

+ 74 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DepartmentServiceImpl.java

@@ -833,6 +833,80 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
         return httpRespMsg;
     }
 
+    @Override
+    public HttpRespMsg getDeptCustomDataStatistic(String startDate, String endDate, Integer departmentId, HttpServletRequest request) {
+        HttpRespMsg httpRespMsg=new HttpRespMsg();
+        Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
+        List<Map<String,Object>> mapList=departmentMapper.getDeptCustomDataStatistic(startDate,endDate,departmentId,companyId);
+        Map<String, List<Map<String, Object>>> tempMap = new HashMap<>();
+        List<Department> departmentList = new ArrayList<>();
+        Double totalCost = 0.0;
+        for (Map<String, Object> map : mapList) {
+            if (tempMap.containsKey(map.get("department"))) {
+                //这个名字已经装进数组中了
+                List<Map<String, Object>> tempList = tempMap.get(map.get("department"));
+                Map<String, Object> dataMap = new HashMap<>();
+                dataMap.put("project", map.get("project"));
+                Double cost = (Double) map.getOrDefault("cost", 0);
+                totalCost = totalCost + cost;
+                dataMap.put("cost", cost);
+                tempList.add(dataMap);
+            } else {
+                Department department = new Department();
+                department.setDepartmentId(Integer.parseInt(String.valueOf(map.get("id"))));
+                department.setDepartmentName((String)map.get("department"));
+                departmentList.add(department);
+                //这个名字尚未装进数组中
+                List<Map<String, Object>> tempList = new ArrayList<>();
+                if (map.containsKey("project")) {
+                    Map<String, Object> dataMap = new HashMap<>();
+                    dataMap.put("project", map.get("project"));
+                    Double cost = (Double) map.getOrDefault("cost", 0);
+                    totalCost = totalCost + cost;
+                    dataMap.put("cost", cost);
+                    tempList.add(dataMap);
+                }
+                tempMap.put((String) map.get("department"), tempList);
+            }
+        }
+        Map<String, Object> finalMap = new HashMap<>();
+        List<Map<String, Object>> finalList = new ArrayList<>();
+        for (String key : tempMap.keySet()) {
+            Map<String, Object> map = new HashMap<>();
+            map.put("name", key);
+            List<Map<String, Object>> userProjectTime = tempMap.get(key);
+            map.put("project", userProjectTime);
+            //计算总时间
+            double userTotalTime = 0;
+            for (Map<String, Object> timeItem: userProjectTime) {
+                double t = (double)timeItem.get("cost");
+                userTotalTime += t;
+            }
+            map.put("cost", userTotalTime);
+            finalList.add(map);
+        }
+        //排序
+        finalList = finalList.stream().sorted(new Comparator<Map<String, Object>>() {
+            @Override
+            public int compare(Map<String, Object> o1, Map<String, Object> o2) {
+                double d1 = (double)o1.get("cost");
+                double d2 = (double)o2.get("cost");
+                if (d1 > d2) {
+                    return -1;
+                } else if (d1 == d2) {
+                    return 0;
+                } else {
+                    return 1;
+                }
+            }
+        }).collect(Collectors.toList());
+        finalMap.put("totalCost", totalCost);
+        finalMap.put("list", finalList);
+        finalMap.put("department",departmentList);
+        httpRespMsg.data = finalMap;
+        return httpRespMsg;
+    }
+
 
     private void fillDeptUser(List<DepartmentVO> list, List<HashMap> userList) {
         list.forEach(l->{

+ 11 - 14
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectPercentageServiceImpl.java

@@ -1,6 +1,7 @@
 package com.management.platform.service.impl;
 
 import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.management.platform.entity.FinanceProjects;
@@ -24,8 +25,6 @@ import org.springframework.web.multipart.MultipartFile;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.io.*;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
 import java.util.*;
 
 /**
@@ -121,7 +120,7 @@ public class ProjectPercentageServiceImpl extends ServiceImpl<ProjectPercentageM
     }
 
     @Override
-    public HttpRespMsg importData(Integer companyId, Integer withCheckIn, MultipartFile multipartFile, HttpServletRequest request) {
+    public HttpRespMsg importData(Integer companyId, Integer withCheckIn, MultipartFile multipartFile, HttpServletRequest request,String ymonth) {
         HttpRespMsg msg = new HttpRespMsg();
         String fileName=multipartFile.getOriginalFilename();
         File file = new File(fileName == null ? "file" : fileName);
@@ -140,7 +139,6 @@ public class ProjectPercentageServiceImpl extends ServiceImpl<ProjectPercentageM
 
             //然后解析表格
             Workbook workbook = WorkbookFactory.create(new FileInputStream(file));
-            DateFormat df = new SimpleDateFormat("yyyy-MM");
             //获取公司全部成员
             List<User> allUserList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId));
             Sheet sheet = workbook.getSheetAt(0);
@@ -210,19 +208,18 @@ public class ProjectPercentageServiceImpl extends ServiceImpl<ProjectPercentageM
                     //人员存在
                     User user = userMapper.selectList(new QueryWrapper<User>().eq("name", username)).get(0);
                     Integer s = 0;
-                    dataStringOne="{"+"\""+"name"+"\""+":"+"\""+username+"\""+","+"\""+"id"+"\""+":"+"\""+user.getId()+"\""+",";
+                    JSONObject jsonObject=new JSONObject();
+                    jsonObject.put("name",username);
+                    jsonObject.put("id",user.getId());
                     for (int i=projectNameStartIndex; i < projectNameStartIndex + projectList.size(); i++) {
                         if (row.getCell(i) == null) {
                             continue;
                         }
                         String stringCellValue = row.getCell(i).getStringCellValue();
                         s+=Integer.parseInt(stringCellValue);
-                        if(i!=projectNameStartIndex + projectList.size()-1){
-                            dataStringOne+="\""+projectList.get(i-1)+"\""+":"+"\""+stringCellValue+"\""+",";
-                        }else{
-                            dataStringOne+="\""+projectList.get(i-1)+"\""+":"+"\""+stringCellValue+"\""+"}";
-                        }
+                        jsonObject.put(projectList.get(i-1),stringCellValue);
                     }
+                    dataStringOne=jsonObject.toJSONString();
                     if(rowIndex!=rowNum){
                         dataString+=dataStringOne+",";
                     }else{
@@ -234,8 +231,8 @@ public class ProjectPercentageServiceImpl extends ServiceImpl<ProjectPercentageM
                     }
                 }
             }
-            ProjectPercentage percentageServiceOne = projectPercentageService.getOne(new QueryWrapper<ProjectPercentage>().eq("company_id", companyId));
-            if(percentageServiceOne.getData().equals(dataString)){
+            ProjectPercentage percentageServiceOne = projectPercentageService.getOne(new QueryWrapper<ProjectPercentage>().eq("company_id", companyId).eq("ymonth",ymonth));
+            if(percentageServiceOne!=null&&percentageServiceOne.getData().equals(dataString)){
                 msg.setError("请勿导入重复数据");
                 return msg;
             }
@@ -243,13 +240,13 @@ public class ProjectPercentageServiceImpl extends ServiceImpl<ProjectPercentageM
             //检查是否已经存在分摊数据
             if(percentageServiceOne!=null){
                 projectPercentage.setId(percentageServiceOne.getId());
-                projectPercentage.setYmonth(df.format(new Date()));
+                projectPercentage.setYmonth(ymonth);
                 projectPercentage.setData(dataString);
                 projectPercentage.setCompanyId(companyId);
                 projectPercentageService.updateById(projectPercentage);
             }else{
                 projectPercentage.setId(null);
-                projectPercentage.setYmonth(df.format(new Date()));
+                projectPercentage.setYmonth(ymonth);
                 projectPercentage.setData(dataString);
                 projectPercentage.setCompanyId(companyId);
                 projectPercentageService.save(projectPercentage);

+ 7 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/TaskServiceImpl.java

@@ -559,4 +559,11 @@ public class TaskServiceImpl extends ServiceImpl<TaskMapper, Task> implements Ta
         }.start();
     }
 
+    @Override
+    public HttpRespMsg getExecutorPlanHour(Integer projectId) {
+        HttpRespMsg httpRespMsg=new HttpRespMsg();
+        httpRespMsg.data=taskMapper.getExecutorPlanHour(projectId);
+        return httpRespMsg;
+    }
+
 }

+ 52 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/task/TimingTask.java

@@ -7,6 +7,7 @@ import com.management.platform.entity.*;
 import com.management.platform.mapper.*;
 import com.management.platform.service.CompanyDingdingService;
 import com.management.platform.service.DingDingService;
+import com.management.platform.service.ThirdPartyInterfaceService;
 import com.management.platform.service.WxCorpInfoService;
 import com.management.platform.util.RedisUtil;
 import com.management.platform.util.WorkDayCalculateUtils;
@@ -23,6 +24,7 @@ import org.springframework.stereotype.Component;
 import org.springframework.util.StringUtils;
 
 import javax.annotation.Resource;
+import java.security.SecureRandom;
 import java.text.DecimalFormat;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
@@ -33,6 +35,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 
 /**
  * Author: 吴涛涛
@@ -91,6 +94,18 @@ public class TimingTask {
     private BusinessTripMapper businessTripMapper;
     @Resource
     private SysConfigMapper sysConfigMapper;
+    @Resource
+    private ThirdPartyInterfaceMapper thirdPartyInterfaceMapper;
+    @Resource
+    private ThirdPartyInterfaceService thirdPartyInterfaceService;
+
+    private static final List<Integer> VALID_TOKEN_CHARS = new ArrayList<>();
+    static {
+        IntStream.rangeClosed('0', '9').forEach(VALID_TOKEN_CHARS::add);    // 0-9
+        IntStream.rangeClosed('A', 'Z').forEach(VALID_TOKEN_CHARS::add);    // A-Z
+        IntStream.rangeClosed('a', 'z').forEach(VALID_TOKEN_CHARS::add);    // a-z
+        IntStream.rangeClosed('!', '*').forEach(VALID_TOKEN_CHARS::add);    // !-*
+    }
 
     //检查项目到期,距离到期时间3天内的,每天提醒
     @Scheduled(cron = "0 0 10 ? * *")
@@ -226,6 +241,43 @@ public class TimingTask {
             wxCorpInfoService.getUserCheckInDayData(companyId, null, start, end, false);
         }
     }
+    //每个月第一天推送token到每个公司
+    @Scheduled(cron = "0 30 7 1 * ?")
+    public void  pushToken(){
+        int passwordLength = 30;
+        LocalDateTime localDateTime=LocalDateTime.now();
+        List<ThirdPartyInterface> thirdPartyInterfaceList = thirdPartyInterfaceMapper.selectList(null);
+        List<String> collect = thirdPartyInterfaceList.stream().map(tf -> tf.getToken()).collect(Collectors.toList());
+        for (ThirdPartyInterface thirdPartyInterface : thirdPartyInterfaceList) {
+            List<String> stringList=new ArrayList<>();
+            new SecureRandom().ints(passwordLength, 0, VALID_TOKEN_CHARS.size())
+                    .map(VALID_TOKEN_CHARS::get).forEach(v->stringList.add(String.valueOf((char) v)));
+            if(localDateTime.isAfter(thirdPartyInterface.getExpireTime())){
+                String token="";
+                for (String s : stringList) {
+                    token+=s;
+                }
+                if(collect.contains(token)){
+                    continue;
+                }
+                thirdPartyInterface.setToken(token);
+                thirdPartyInterface.setExpireTime(localDateTime.plusMonths(1));
+            }
+        }
+        thirdPartyInterfaceService.updateBatchById(thirdPartyInterfaceList);
+    }
+
+    public static void main(String[] args) {
+        int passwordLength = 30;
+        List<String> stringList=new ArrayList<>();
+        new SecureRandom().ints(passwordLength, 0, VALID_TOKEN_CHARS.size())
+                .map(VALID_TOKEN_CHARS::get).forEach(v->stringList.add(String.valueOf((char) v)));
+        String token="";
+        for (String s : stringList) {
+            token+=s;
+        }
+        System.out.println(token);
+    }
 
     //发送上周填写的工时统计
     @Scheduled(cron = "0 0 8 ? * *")

+ 15 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/DepartmentMapper.xml

@@ -88,4 +88,19 @@
         </if>
         GROUP BY b.project_id, a.id
     </select>
+    <!-- 根据部门获取自定义的日报数值 -->
+    <select id="getDeptCustomDataStatistic" resultType="java.util.Map">
+        SELECT a.department_id as id, a.department_name AS department, c.project_name AS project, IFNULL(SUM(b.custom_data),0) AS cost
+        FROM department AS a
+        LEFT JOIN report AS b ON a.department_id = b.dept_id
+        LEFT JOIN project AS c ON b.project_id = c.id
+        WHERE b.state = 1
+        <if test="companyId!=null">
+            AND a.company_id =#{companyId}
+        </if>
+        <if test="startDate!=null and endDate!=null">
+            AND b.create_date between #{startDate} and #{endDate}
+        </if>
+        GROUP BY b.project_id, a.department_id
+    </select>
 </mapper>

+ 8 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TaskMapper.xml

@@ -111,6 +111,14 @@
         WHERE a.project_id = #{projectId}
         GROUP BY b.executor_id
     </select>
+
+    <!--计算执行人任务计划工时-->
+    <select id="getExecutorPlanHour" resultType="java.util.Map">
+        SELECT IFNULL(b.executor_id,0) as executorId,IFNULL( b.executor_name,'待认领') as executorName,  sum(a.plan_hours) AS taskHours
+        FROM task a left join task_executor b on b.task_id = a.id
+        WHERE a.project_id = #{projectId}
+        GROUP BY b.executor_id
+    </select>
     <!--计算任务列表的任务分布-->
     <select id="getStagesPanel" resultType="java.util.Map">
         SELECT a.stages_id AS stagesId, stages.`stages_name` AS name,  COUNT(1) AS value