Bladeren bron

人员工时统计
任务列表修改

yurk 2 jaren geleden
bovenliggende
commit
c1544e6b10

+ 13 - 6
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectController.java

@@ -325,8 +325,8 @@ public class ProjectController {
 
     //分页查询项目任务报表
     @RequestMapping("/getProjectTask")
-    public HttpRespMsg getProjectTask(@RequestParam Integer pageIndex, @RequestParam Integer pageSize, Integer projectId) {
-        return projectService.getProjectTask(pageIndex, pageSize, projectId, request);
+    public HttpRespMsg getProjectTask(@RequestParam Integer pageIndex, @RequestParam Integer pageSize, Integer projectId,Integer taskType) {
+        return projectService.getProjectTask(pageIndex, pageSize, projectId, request,taskType);
     }
 
     //分页查询项目各个阶段的汇总工时成本
@@ -565,13 +565,16 @@ public class ProjectController {
         List<ProviderCategory> providerCategoryList = providerCategoryMapper.selectList(new QueryWrapper<ProviderCategory>().eq("company_id", companyId));
         List<String> collect = providerCategoryList.stream().distinct().map(pc -> pc.getProviderCategoryName()).collect(Collectors.toList());
         TimeType timeType = timeTypeMapper.selectById(companyId);
+        if(timeType.getMainProjectState()==1){
+            heads.add("主项目");
+        }
         heads.add("项目编号");
-        heads.add("项目分类");
+        if(timeType.getMainProjectState()!=1){
+            heads.add("项目分类");
+        }
         heads.add("是否为公共项目");
         heads.add("项目名称");
-        if(timeType.getMainProjectState()==1){
-            heads.add("主项目");
-        }else {
+        if(timeType.getMainProjectState()!=1){
             heads.add("子项目(多个用,隔开)");
         }
         heads.add("参与人");
@@ -811,5 +814,9 @@ public class ProjectController {
     public HttpRespMsg getUserWorkingTimeStatic(String startDate,String endDate,Integer pageIndex,Integer pageSize,String userId,Integer departmentId){
         return projectService.getUserWorkingTimeStatic(startDate,endDate,pageIndex,pageSize,request,userId,departmentId);
     }
+    @RequestMapping("/exportUserWorkingTimeStatic")
+    public HttpRespMsg exportUserWorkingTimeStatic(String startDate,String endDate,String userId,Integer departmentId){
+        return projectService.exportUserWorkingTimeStatic(startDate,endDate,request,userId,departmentId);
+    }
 }
 

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

@@ -104,7 +104,7 @@ public interface ProjectMapper extends BaseMapper<Project> {
     @Update("update project set status=4 where id=#{id}")
     void suspendProject(Integer id);
 
-    List<Map<String, Object>> getUserWorkingTimeStatic(String startDate, String endDate, Integer pageIndex, Integer pageSize, String userId, Integer departmentId, List<Integer> deptIds);
+    List<Map<String, Object>> getUserWorkingTimeStatic(Integer companyId,String startDate, String endDate, Integer start, Integer size, String userId, Integer departmentId, List<Integer> deptIds);
 
-    long findCountWithUserWorkingTime(String startDate, String endDate, Integer pageIndex, Integer pageSize, String userId, Integer departmentId, List<Integer> deptIds);
+    long findCountWithUserWorkingTime(Integer companyId,String startDate, String endDate, Integer start, Integer size, String userId, Integer departmentId, List<Integer> deptIds);
 }

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

@@ -31,9 +31,9 @@ public interface TaskMapper extends BaseMapper<Task> {
 
     List<TimeTask> getTaskWithWorktime(Integer projectId, Integer taskType);
 
-    List getProjectTask(Integer companyId, Integer pageStart, Integer pageSize, Integer projectId);
+    List getProjectTask(Integer companyId, Integer pageStart, Integer pageSize, Integer projectId,Integer taskType);
 
-    Integer getProjectTaskCount(Integer companyId, Integer projectId);
+    Integer getProjectTaskCount(Integer companyId, Integer projectId,Integer taskType);
 
     List getTaskWithProjectName(@Param(Constants.WRAPPER) Wrapper wrapper, Integer pageStart, Integer pageSize);
 

+ 3 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectService.java

@@ -73,7 +73,7 @@ public interface ProjectService extends IService<Project> {
 
     HttpRespMsg exportProject(HttpServletRequest request);
 
-    HttpRespMsg getProjectTask(Integer pageIndex, Integer pageSize, Integer projectId, HttpServletRequest request);
+    HttpRespMsg getProjectTask(Integer pageIndex, Integer pageSize, Integer projectId, HttpServletRequest request,Integer taskType);
 
     HttpRespMsg exportProjectTask(HttpServletRequest request);
 
@@ -150,6 +150,6 @@ public interface ProjectService extends IService<Project> {
     HttpRespMsg batchSetParticipation(HttpServletRequest request,String projectIdArray , String userIds);
 
     HttpRespMsg suspendProject(Integer id);
-	HttpRespMsg getUserWorkingTimeStatic(String startDate, String endDate, Integer pageIndex, Integer pageSize, HttpServletRequest request,String userId,Integer departmentId);
 
-	HttpRespMsg batchDeleteProject(String projectIdArray, HttpServletRequest request);}
+    HttpRespMsg getUserWorkingTimeStatic(String startDate, String endDate, Integer pageIndex, Integer pageSize, HttpServletRequest request,String userId,Integer departmentId);
+}

+ 57 - 13
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -1384,12 +1384,12 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
     }
 
     @Override
-    public HttpRespMsg getProjectTask(Integer pageIndex, Integer pageSize, Integer projectId, HttpServletRequest request) {
+    public HttpRespMsg getProjectTask(Integer pageIndex, Integer pageSize, Integer projectId, HttpServletRequest request,Integer taskType) {
         User user = userMapper.selectById(request.getHeader("Token"));
         Integer companyId = user.getCompanyId();
-        int total = taskMapper.getProjectTaskCount(companyId, projectId);
+        int total = taskMapper.getProjectTaskCount(companyId, projectId,taskType);
         int pageStart = (pageIndex -1) * pageSize;
-        List projectTask = taskMapper.getProjectTask(companyId, pageStart, pageSize, projectId);
+        List projectTask = taskMapper.getProjectTask(companyId, pageStart, pageSize, projectId,taskType);
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         Map<String, Object> map = new HashMap<>();
         map.put("records", projectTask);
@@ -1407,7 +1407,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
 
         QueryWrapper<Project> queryWrapper = new QueryWrapper<Project>().eq("company_id", companyId);
         DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd");
-        List<Map> projectList = taskMapper.getProjectTask(companyId, null, null, null);
+        List<Map> projectList = taskMapper.getProjectTask(companyId, null, null, null,null);
         List<ProjectVO> list = new ArrayList<>();
         String[] statusNames = {"进行中","已完成","已撤销"};
         String[] typeList = {"任务","里程碑","风险"};
@@ -3931,9 +3931,6 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                         }
                     }
                 }
-                System.out.println(user.getName());
-                System.out.println(days);
-                System.out.println(num);
                 BigDecimal bigDecimal=new BigDecimal(num);
                 BigDecimal divide;
                 if(days!=0){
@@ -4058,9 +4055,11 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
 
 	@Override
     public HttpRespMsg getUserWorkingTimeStatic(String startDate, String endDate, Integer pageIndex, Integer pageSize, HttpServletRequest request,String userId,Integer departmentId) {
+        HttpRespMsg httpRespMsg =new HttpRespMsg();
+        DecimalFormat dft =  new DecimalFormat("0%");
         User targetUser = userMapper.selectById(request.getHeader("token"));
-        List<SysRichFunction> functionAllList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看全部人员工时统计");
-        List<SysRichFunction> functionDeptList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看负责部门人员工时统计");
+        List<SysRichFunction> functionAllList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "全公司工时统计");
+        List<SysRichFunction> functionDeptList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "负责部门工时统计");
         List<Integer> deptIds=null;
         List<Department> userDepartmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("manager_id", targetUser.getId()).eq("company_id",targetUser.getCompanyId()));
         //判断查看权限
@@ -4073,16 +4072,61 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             }
         }
         long total;
-        List<Map<String,Object>> resultList=projectMapper.getUserWorkingTimeStatic(startDate,endDate,pageIndex,pageSize,userId,departmentId,deptIds);
+        List<Map<String,Object>> resultList;
         if(pageIndex!=null&&pageSize!=null){
-            total=projectMapper.findCountWithUserWorkingTime(startDate,endDate,pageIndex,pageSize,userId,departmentId,deptIds);
+            Integer size=pageSize;
+            Integer start=(pageIndex-1)*size;
+            resultList=projectMapper.getUserWorkingTimeStatic(targetUser.getCompanyId(),startDate,endDate,start,size,userId,departmentId,deptIds);
+            total=projectMapper.findCountWithUserWorkingTime(targetUser.getCompanyId(),startDate,endDate,start,size,userId,departmentId,deptIds);
         }else{
-            total=projectMapper.findCountWithUserWorkingTime(startDate,endDate,null,null,userId,departmentId,deptIds);
+            resultList=projectMapper.getUserWorkingTimeStatic(targetUser.getCompanyId(),startDate,endDate,null,null,userId,departmentId,deptIds);
+            total=projectMapper.findCountWithUserWorkingTime(targetUser.getCompanyId(),startDate,endDate,null,null,userId,departmentId,deptIds);
+        }
+        for (Map<String, Object> map : resultList) {
+            BigDecimal phBigDecimal =new BigDecimal(String.valueOf(map.get("planHours")==null?0:map.get("planHours")));
+            BigDecimal wtBigDecimal =new BigDecimal(String.valueOf(map.get("workingTime")==null?0:map.get("workingTime")));
+            if(phBigDecimal.compareTo(BigDecimal.ZERO)==0||wtBigDecimal.compareTo(BigDecimal.ZERO)==0){
+                map.put("proportion",dft.format(0));
+            }else{
+                BigDecimal divide = wtBigDecimal.divide(phBigDecimal, 2, BigDecimal.ROUND_HALF_UP);
+                map.put("proportion",dft.format(divide));
+            }
         }
         Map<String,Object> map=new HashMap<>();
         map.put("result",resultList);
         map.put("total",total);
-        return null;
+        httpRespMsg.data=map;
+        return httpRespMsg;
+    }
+
+    @Override
+    public HttpRespMsg exportUserWorkingTimeStatic(String startDate, String endDate, HttpServletRequest request, String userId, Integer departmentId) {
+        HttpRespMsg msg=new HttpRespMsg();
+        HttpRespMsg httpRespMsg = getUserWorkingTimeStatic(startDate, endDate, null, null, request, userId, departmentId);
+        Map<String,Object> data = (Map<String, Object>) httpRespMsg.data;
+        List<Map<String,Object>> resultList= (List<Map<String, Object>>) data.get("result");
+        List<List<String>> dataList=new ArrayList<>();
+        List<String> titleList=new ArrayList<>();
+        titleList.add("姓名");
+        titleList.add("部门");
+        titleList.add("计划工时");
+        titleList.add("实际工时");
+        titleList.add("实际占比");
+        dataList.add(titleList);
+        for (Map<String, Object> map : resultList) {
+            List<String> item=new ArrayList<>();
+            item.add((String) map.get("name"));
+            item.add((String) map.get("departmentName")==null?"":(String) map.get("departmentName"));
+            item.add(String.valueOf(map.get("planHours")).equals("null")?"":String.valueOf(map.get("planHours")));
+            item.add(String.valueOf(map.get("workingTime")).equals("null")?"":String.valueOf(map.get("workingTime")));
+            item.add(String.valueOf(map.get("proportion")).equals("null")?"":String.valueOf(map.get("proportion")));
+            dataList.add(item);
+        }
+        //生成excel文件导出
+        String fileName = "人员工时统计_"+System.currentTimeMillis();
+        String resp = ExcelUtil.exportGeneralExcelByTitleAndList(fileName , dataList, path);
+        msg.data = resp;
+        return msg;
     }
 
 

+ 66 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectMapper.xml

@@ -743,6 +743,71 @@
     </select>
 
     <select id="getUserWorkingTimeStatic" resultType="java.util.Map">
-
+        select us.name,dp.department_name as departmentName,
+        (select SUM(te.plan_hours) from task_executor te
+        left join task on task.id=te.task_id
+        where te.executor_id=us.id
+        <if test="startDate!=null and endDate!=null">
+            and task.create_date &gt;=#{startDate} and task.create_date &lt;=#{endDate}
+        </if>) as planHours,
+        (select SUM(report.working_time) from report
+        left join task on task.id=report.task_id
+        where report.creator_id=us.id and task_id is not null
+        <if test="startDate!=null and endDate!=null">
+            and task.create_date &gt;=#{startDate} and task.create_date &lt;=#{endDate}
+        </if>) as workingTime
+        from user us
+        left join  department dp on dp.department_id=us.department_id
+        where us.company_id=#{companyId}
+        <if test="userId!=null and userId!=''">
+            and us.id=#{userId}
+        </if>
+        <if test="departmentId!=null">
+            and us.department_id=#{departmentId}
+        </if>
+        <if test="deptIds!=null and deptIds.size()>0">
+            and us.department_id in
+            <foreach collection="deptIds" open="(" item="item" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        group by us.id
+        order  by us.department_id
+        <if test="start!=null and size!=null">
+            limit #{start},#{size}
+        </if>
+    </select>
+    <select id="findCountWithUserWorkingTime" resultType="java.lang.Long">
+        select count(1)
+        from(select us.name,dp.department_name  as departmentName,
+        (select SUM(te.plan_hours) from task_executor te
+        left join task on task.id=te.task_id
+        where te.executor_id=us.id
+        <if test="startDate!=null and endDate!=null">
+            and task.create_date &gt;=#{startDate} and task.create_date &lt;=#{endDate}
+        </if>) as planHours,
+        (select SUM(report.working_time) from report
+        left join task on task.id=report.task_id
+        where report.creator_id=us.id and task_id is not null
+        <if test="startDate!=null and endDate!=null">
+            and task.create_date &gt;=#{startDate} and task.create_date &lt;=#{endDate}
+        </if>) as workingTime
+        from user us
+        left join  department dp on dp.department_id=us.department_id
+        where us.company_id=#{companyId}
+        <if test="userId!=null and userId!=''">
+            and us.id=#{userId}
+        </if>
+        <if test="departmentId!=null">
+            and us.department_id=#{departmentId}
+        </if>
+        <if test="deptIds!=null and deptIds.size()>0">
+            and us.department_id in
+            <foreach collection="deptIds" open="(" item="item" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
+        group by us.id
+        order  by us.department_id)as total
     </select>
 </mapper>

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

@@ -165,6 +165,9 @@
         <if test="projectId != null">
             and task.project_id = #{projectId}
         </if>
+        <if test="taskType!=null">
+            and task.task_type=#{taskType}
+        </if>
         ORDER BY project.is_public desc, project.id ASC, task.stages_id asc, task.seq asc
         <if test="pageStart != null and pageSize != null">
             limit #{pageStart}, #{pageSize}
@@ -176,6 +179,9 @@
         <if test="projectId != null">
             and task.project_id = #{projectId}
         </if>
+        <if test="taskType!=null">
+            and task.task_type=#{taskType}
+        </if>
     </select>
 
     <select id="getTaskWithProjectName" resultMap="RichResultMap">