浏览代码

美莱德FTE计划报表修改

QuYueTing 4 天之前
父节点
当前提交
a631896962

+ 7 - 24
fhKeeper/formulahousekeeper/management-platform-mld/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -13759,9 +13759,9 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         TimeType allDay = timeTypeMapper.selectOne(new QueryWrapper<TimeType>().eq("company_id", user.getCompanyId()));
         Float monthTime = days * allDay.getAllday();
         List<Map<String, Object>> list = projectMapper.getFTETaskPlanData(user.getCompanyId(), startDate, endDate, null, null, area, userId, null, null, null, deptIds, departmentId);
-        List<TaskDailyAllocate> dailyAllocateArrayList = new ArrayList<>();
-        List<Integer> taskIdList = list.stream().map(t -> (Integer)t.get("id")).distinct().collect(Collectors.toList());
-        dailyAllocateArrayList=taskDailyAllocateMapper.selectList(new QueryWrapper<TaskDailyAllocate>().in("task_id",taskIdList));
+//        List<TaskDailyAllocate> dailyAllocateArrayList = new ArrayList<>();
+//        List<Integer> taskIdList = list.stream().map(t -> (Integer)t.get("id")).distinct().collect(Collectors.toList());
+//        dailyAllocateArrayList=taskDailyAllocateMapper.selectList(new QueryWrapper<TaskDailyAllocate>().in("task_id",taskIdList));
         List<List<String>> dataList=new ArrayList<>();
         List<String> titleList=new ArrayList<>();
 
@@ -13787,8 +13787,6 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         titleList.add("审核状态");
         dataList.add(titleList);
 
-        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd");
-
         for (int i = 0; i < list.size(); i++) {
             List<String> item=new ArrayList<>();
             item.add((i+1)+"");
@@ -13797,26 +13795,11 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             String userIdStr= (String) map.get("userId");
             Integer departmentIdStr= Math.toIntExact((Long) map.get("departmentId"));
             Optional<Department> deptFirst = allDepartmentList.stream().filter(f -> f.getDepartmentId().equals(departmentIdStr)).findFirst();
-
-            List<TaskDailyAllocate> sortedList = dailyAllocateArrayList.stream()
-                    .filter(t -> t.getTaskId().equals(taskId)&&t.getUserId().equals(userIdStr))
-                    .sorted(Comparator.comparing(TaskDailyAllocate::getAllocateDate)) // 按 AllocateDate 递增排序
-                    .collect(Collectors.toList());
-            String dateStr="";
-            if (!sortedList.isEmpty()){
-                if (sortedList.size()==1) {
-                    TaskDailyAllocate t1 = sortedList.get(0);
-                    dateStr=t1.getAllocateDate().format(formatter)+"-"+t1.getAllocateDate().format(formatter);
-                }else {
-                    LocalDate d1 = sortedList.get(0).getAllocateDate();
-                    LocalDate d2 = sortedList.get(sortedList.size()-1).getAllocateDate();
-                    dateStr=d1.format(formatter)+"-"+d2.format(formatter);
-                }
-
-            }
-
+            String dateStr=map.get("startDate")+"-"+map.get("endDate");
             item.add(dateStr);//起止时间
-            item.add(sortedList.size()+"天");//天数
+            double planHours = (double)map.get("planHours");
+            int dayCount = (int)(planHours/7.5) + (planHours%7.5>0?1:0);
+            item.add(dayCount+"天");//天数
 
             //所属部门
             if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){

+ 19 - 68
fhKeeper/formulahousekeeper/management-platform-mld/src/main/resources/mapper/ProjectMapper.xml

@@ -2901,17 +2901,18 @@
         ORDER BY project.id, task.start_date
     </select>
     <select id="getFTETaskPlanData" resultType="java.util.Map">
-        select t.id,  u.plate1 area, p.project_code projectCode,p.project_name projectName,u.name userName, te.plan_hours planHours
+        select t.id,  u.plate1 area, p.project_code projectCode,p.project_name projectName,u.name userName, sum(daily.work_hour) planHours, date_format(MIN(daily.`allocate_date`) , '%Y-%m-%d') startDate, date_format(MAX(daily.allocate_date),'%Y-%m-%d') endDate
         ,p.category_name categoryName,p.incharger_id inchargerId,p.associate_degree_names associateDegreeNames,tg.name groupName,
         stages.stages_name stagesName,t.name taskName,te.first_auditor_id firstAuditorId, te.second_auditor_id secondAuditorId,t.task_status auditStatus
         ,u.department_id departmentId,u.role_name roleName,t.task_plan_type taskPlanType,u.id userId,u.corpwx_userid as corpwxUserId,department.corpwx_deptid as corpwxDeptId,department.dd_deptid as corpDdDeptId
         from task t
-          left join stages on stages.id = t.stages_id
-          left join task_group tg on tg.id=t.group_id
-          left join project p on t.project_id=p.id
-          LEFT JOIN task_executor te on t.id=te.task_id
-          INNER JOIN user u on u.id=te.executor_id
-          left join department on department.department_id = u.department_id
+        LEFT JOIN stages ON stages.id = t.stages_id
+        LEFT JOIN task_group tg ON tg.id=t.group_id
+        LEFT JOIN project p ON t.project_id=p.id
+        LEFT JOIN task_daily_allocate daily ON daily.`task_id` = t.id
+        LEFT JOIN USER u ON u.id= daily.`user_id`
+        LEFT JOIN department ON department.department_id = u.department_id
+        LEFT JOIN task_executor te ON te.task_id = daily.`task_id` AND te.`executor_id` = daily.`user_id`
         WHERE u.company_id=#{companyId}
         <if test="area!=null and area != '' ">
             and u.plate1 = #{area}
@@ -2925,45 +2926,21 @@
                 #{item}
             </foreach>
         </if>
-        <if test=" startDate!= null and endDate!= null">
-            AND
-            (
-            (
-            (t.start_date IS NULL OR t.start_date &lt;= #{startDate}) AND (t.end_date &gt;= #{startDate} AND t.end_date &lt;= #{endDate})
-            )
-            OR
-            (
-            (t.end_date IS NULL OR t.end_date &gt;= #{endDate}) AND (t.start_date &gt;= #{startDate} AND t.start_date &lt;= #{endDate})
-            )
-            OR
-            (
-            t.start_date IS NOT NULL AND t.end_date IS NOT NULL AND t.start_date &gt;= #{startDate}
-            AND t.start_date &lt;= #{endDate} AND t.end_date &gt;= #{startDate} AND t.end_date &lt;= #{endDate}
-            )
-            OR
-            (
-            t.start_date IS NOT NULL AND t.end_date IS NOT NULL AND t.start_date &lt;= #{startDate} AND t.end_date &gt; #{endDate}
-            )
-            )
-        </if>
-        <if test=" startDate != null and endDate == null">
-            AND (t.end_date IS NOT NULL and t.end_date &gt;= #{startDate})
-        </if>
-        <if test=" startDate == null and endDate != null">
-            AND (t.start_date IS NOT NULL and t.start_date &lt;= #{endDate})
-        </if>
+        and daily.`allocate_date` BETWEEN #{startDate} AND #{endDate}
+        GROUP BY t.id, daily.`user_id`
         <if test="start!=null and size !=null">
             limit #{start},#{size}
         </if>
     </select>
     <select id="getFTETaskPlanDataCount" resultType="java.lang.Integer">
-        select count(1) from task t
-        left join stages on stages.id = t.stages_id
-        left join task_group tg on tg.id=t.group_id
-        left join project p on t.project_id=p.id
-        LEFT JOIN task_executor te on t.id=te.task_id
-        INNER JOIN user u on u.id=te.executor_id
-        left join department on department.department_id = u.department_id
+        select count(distinct t.id, daily.`user_id`) from task t
+        LEFT JOIN stages ON stages.id = t.stages_id
+        LEFT JOIN task_group tg ON tg.id=t.group_id
+        LEFT JOIN project p ON t.project_id=p.id
+        LEFT JOIN task_daily_allocate daily ON daily.`task_id` = t.id
+        LEFT JOIN USER u ON u.id= daily.`user_id`
+        LEFT JOIN department ON department.department_id = u.department_id
+        LEFT JOIN task_executor te ON te.task_id = daily.`task_id` AND te.`executor_id` = daily.`user_id`
         WHERE u.company_id=#{companyId}
         <if test="area!=null and area != '' ">
             and u.plate1 = #{area}
@@ -2977,33 +2954,7 @@
                 #{item}
             </foreach>
         </if>
-        <if test=" startDate!= null and endDate!= null">
-            AND
-            (
-            (
-            (t.start_date IS NULL OR t.start_date &lt;= #{startDate}) AND (t.end_date &gt;= #{startDate} AND t.end_date &lt;= #{endDate})
-            )
-            OR
-            (
-            (t.end_date IS NULL OR t.end_date &gt;= #{endDate}) AND (t.start_date &gt;= #{startDate} AND t.start_date &lt;= #{endDate})
-            )
-            OR
-            (
-            t.start_date IS NOT NULL AND t.end_date IS NOT NULL AND t.start_date &gt;= #{startDate}
-            AND t.start_date &lt;= #{endDate} AND t.end_date &gt;= #{startDate} AND t.end_date &lt;= #{endDate}
-            )
-            OR
-            (
-            t.start_date IS NOT NULL AND t.end_date IS NOT NULL AND t.start_date &lt;= #{startDate} AND t.end_date &gt; #{endDate}
-            )
-            )
-        </if>
-        <if test=" startDate != null and endDate == null">
-            AND (t.end_date IS NOT NULL and t.end_date &gt;= #{startDate})
-        </if>
-        <if test=" startDate == null and endDate != null">
-            AND (t.start_date IS NOT NULL and t.start_date &lt;= #{endDate})
-        </if>
+        and daily.`allocate_date` BETWEEN #{startDate} AND #{endDate}
     </select>
     <select id="getRelatedProjectIds" resultType="java.lang.Integer">
         SELECT DISTINCT pl.project_id

+ 1 - 0
fhKeeper/formulahousekeeper/timesheet_mld/src/views/corpreport/list.vue

@@ -1570,6 +1570,7 @@
                   </div>
                 </template>
               </el-table-column>
+              <el-table-column align="center" prop="taskName" label="计划名称" min-width="300"></el-table-column>
               <el-table-column align="center" prop="planHours" label="计划工时" min-width="150"></el-table-column>
               <el-table-column align="center" prop="FTE" :label="'计划FTE(计划工时/当月计划工时基数)'" min-width="250"></el-table-column>
           </el-table>