浏览代码

资源需求新增需求

yurk 2 年之前
父节点
当前提交
cb67184a5b

+ 44 - 9
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectRequirementController.java

@@ -4,11 +4,9 @@ package com.management.platform.controller;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.management.platform.entity.Project;
 import com.management.platform.entity.ProjectRequirement;
+import com.management.platform.entity.Task;
 import com.management.platform.entity.TaskGroup;
-import com.management.platform.mapper.ProjectMapper;
-import com.management.platform.mapper.ProjectRequirementMapper;
-import com.management.platform.mapper.TaskGroupMapper;
-import com.management.platform.mapper.UserMapper;
+import com.management.platform.mapper.*;
 import com.management.platform.service.ProjectRequirementService;
 import com.management.platform.util.ExcelUtil;
 import com.management.platform.util.HttpRespMsg;
@@ -59,6 +57,8 @@ public class ProjectRequirementController {
     private ProjectRequirementService projectRequirementService;
     @Resource
     private TaskGroupMapper taskGroupMapper;
+    @Resource
+    private TaskMapper taskMapper;
 
     @RequestMapping("/addOrMod")
     public HttpRespMsg addOrMod(ProjectRequirement record) {
@@ -89,6 +89,15 @@ public class ProjectRequirementController {
             projectIds = taskGroups.stream().map(TaskGroup::getProjectId).collect(Collectors.toList());
         }
         List<ProjectRequirement> projectRequirements = projectRequirementMapper.customSelect(companyId, startDate, projectId, projectIds.size()==0?null:projectIds, startIndex, pageSize,reStartDate,reEndDate);
+        List<Integer> collect = projectRequirements.stream().map(pr -> pr.getProjectId()).collect(Collectors.toList());
+        List<Task> milepostList=taskMapper.selectMilepost(collect);
+        projectRequirements.forEach(pr->{
+            milepostList.forEach(mp->{
+                if(pr.getProjectId().equals(mp.getProjectId())){
+                    pr.setMilepost(mp);
+                }
+            });
+        });
         long total=projectRequirementMapper.selectCountByDate(companyId, startDate, projectId, projectIds.size()==0?null:projectIds, startIndex, pageSize,reStartDate,reEndDate);
         HashMap map = new HashMap();
         map.put("total", total);
@@ -106,8 +115,17 @@ public class ProjectRequirementController {
         now = now.minusDays(7);
         String startDate = DateTimeFormatter.ofPattern("yyyy-MM-dd").format(now);
         List<ProjectRequirement> projectRequirementList = projectRequirementMapper.customSelect(companyId,startDate, null, null, null, null,null,null);
+        List<Integer> collect = projectRequirementList.stream().map(pr -> pr.getProjectId()).collect(Collectors.toList());
+        List<Task> milepostList=taskMapper.selectMilepost(collect);
+        projectRequirementList.forEach(pr->{
+            milepostList.forEach(mp->{
+                if(pr.getProjectId().equals(mp.getProjectId())){
+                    pr.setMilepost(mp);
+                }
+            });
+        });
         List<List<String>> dataList=new ArrayList<>();
-        String[] titleString={"项目编号","项目名称","近七日活跃人员","人员需求","任务需求","开始时间","结束时间"};
+        String[] titleString={"项目编号","项目名称","近七日活跃人员","人员需求","任务需求","合同要求","参与部门进度","里程碑进度","开始时间","结束时间"};
         List<String> nameList = Arrays.asList(titleString);
         dataList.add(nameList);
         projectRequirementList.forEach(pr->{
@@ -117,13 +135,24 @@ public class ProjectRequirementController {
             resultData.add(pr.getActiveUsers());
             resultData.add(pr.getMembReq());
             resultData.add(pr.getTaskReq());
+            resultData.add(pr.getContractReq());
+            resultData.add(pr.getDepartmentSpeed());
+            if(pr.getMilepost()!=null){
+                resultData.add(pr.getMilepost().getName()+"-完成时间:"+pr.getMilepost().getFinishDate());
+            }else{
+                resultData.add("");
+            }
             if(pr.getStartDate()!=null){
                 String s=df.format(pr.getStartDate());
                 resultData.add(s);
+            }else {
+                resultData.add("");
             }
             if(pr.getEndDate()!=null){
                 String s1=df.format(pr.getEndDate());
                 resultData.add(s1);
+            }else {
+                resultData.add("");
             }
             dataList.add(resultData);
         });
@@ -176,12 +205,16 @@ public class ProjectRequirementController {
                 XSSFCell codeCell = row.getCell(0);
                 XSSFCell taskReqCell = row.getCell(1);
                 XSSFCell membReqCell = row.getCell(2);
-                XSSFCell startDateCell = row.getCell(3);
-                XSSFCell endDateCell = row.getCell(4);
+                XSSFCell contractReqCell = row.getCell(3);
+                XSSFCell departmentSpeedCell = row.getCell(4);
+                XSSFCell startDateCell = row.getCell(5);
+                XSSFCell endDateCell = row.getCell(6);
 
                 if (codeCell != null)codeCell.setCellType(CellType.STRING);
                 if (taskReqCell != null)taskReqCell.setCellType(CellType.STRING);
                 if (membReqCell != null)membReqCell.setCellType(CellType.STRING);
+                if (contractReqCell != null)contractReqCell.setCellType(CellType.STRING);
+                if (departmentSpeedCell != null)departmentSpeedCell.setCellType(CellType.STRING);
                 if (startDateCell != null)startDateCell.setCellType(CellType.NUMERIC);
                 if (endDateCell != null)endDateCell.setCellType(CellType.NUMERIC);
                 ProjectRequirement projectRequirement=new ProjectRequirement();
@@ -198,8 +231,10 @@ public class ProjectRequirementController {
                 }else{
                     list.forEach(li->{
                         projectRequirement.setProjectId(li.getId());
-                        projectRequirement.setTaskReq(StringUtils.isEmpty(taskReqCell.getStringCellValue())?"":taskReqCell.getStringCellValue());
-                        projectRequirement.setMembReq(StringUtils.isEmpty(membReqCell.getStringCellValue())?"":membReqCell.getStringCellValue());
+                        projectRequirement.setTaskReq(StringUtils.isEmpty(taskReqCell)?"":taskReqCell.getStringCellValue());
+                        projectRequirement.setMembReq(StringUtils.isEmpty(membReqCell)?"":membReqCell.getStringCellValue());
+                        projectRequirement.setContractReq(StringUtils.isEmpty(contractReqCell)?"":contractReqCell.getStringCellValue());
+                        projectRequirement.setDepartmentSpeed(StringUtils.isEmpty(departmentSpeedCell)?"":departmentSpeedCell.getStringCellValue());
                         if(startDateCell!=null){
                             projectRequirement.setStartDate(startDateCell.getDateCellValue());
                         }else {

+ 10 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/ProjectRequirement.java

@@ -59,6 +59,16 @@ public class ProjectRequirement extends Model<ProjectRequirement> {
     @TableField(exist = false)
     private String activeUsers;
 
+    @TableField("contract_req")
+    private String contractReq;
+
+    @TableField("department_speed")
+    private String departmentSpeed;
+
+    @TableField(exist = false)
+    private Task milepost;
+
+
 
     @Override
     protected Serializable pkVal() {

+ 20 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/TimeType.java

@@ -110,6 +110,13 @@ public class TimeType extends Model<TimeType> {
     @TableField("custom_degree_name")
     private String customDegreeName;
 
+
+    /**
+     * 工时填报自定义维度是否必填
+     */
+    @TableField("custom_degree_status")
+    private Integer customDegreeStatus;
+
     /**
      * 提醒内容
      */
@@ -146,6 +153,13 @@ public class TimeType extends Model<TimeType> {
     @TableField("custom_data_name")
     private String customDataName;
 
+
+    /**
+     * 工时填报数值收集字段是否必填
+     */
+    @TableField("custom_data_status")
+    private String customDataStatus;
+
     /**
      * 财务成本导入是否需要审核
      */
@@ -200,6 +214,12 @@ public class TimeType extends Model<TimeType> {
     @TableField("custom_text_name")
     private String customTextName;
 
+    /**
+     * 自定义文本信息是否必填 0-否 1-是
+     */
+    @TableField("custom_text_status")
+    private Integer customTextStatus;
+
     /**
      * 是否锁定每日填报时长
      */

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

@@ -85,7 +85,7 @@ public interface ProjectMapper extends BaseMapper<Project> {
 
     List getBaseCostAndRealCost(Integer companyId, Integer pageStart, Integer pageSize, Integer projectId);
 
-    List<Map<String, Object>> getProjectCostGroupByProject(Integer companyId, String startDate, String endDate, Integer projectId);
+    List<Map<String, Object>> getProjectCostGroupByProject(Integer companyId, String startDate, String endDate, Integer projectId,String userId);
 
     List<Map<String, Object>> getTimeCostByCategory(Integer companyId, String startDate, String endDate, Integer projectCategoryId, String userId);
 

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

@@ -1,16 +1,14 @@
 package com.management.platform.mapper;
 
 import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.management.platform.entity.Task;
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.management.platform.entity.TimeTask;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Update;
-import org.apache.poi.ss.formula.functions.T;
 
 import java.util.List;
-import java.util.Map;
 
 /**
  * <p>
@@ -43,4 +41,6 @@ public interface TaskMapper extends BaseMapper<Task> {
 
     @Update("update task set executor_id = null, executor_name = null, executor_color=null where id=#{id}")
     void removeTaskExecutor(Integer id);
+
+    List<Task> selectMilepost(List<Integer> collect);
 }

+ 15 - 6
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -783,6 +783,8 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     List<Map<String, Object>> membList = projectMapper.getProjectCost(companyId,startDate, endDate, curProjectId, userId);
                     map.put("membList", membList);
                     for (Map<String, Object> membMap : membList) {
+                        double pTotalTime = 0;
+                        BigDecimal pTotalMoney = new BigDecimal(0);
                         List<String> membRowData = new ArrayList<String>();
                         if (projectSum == null || projectSum == false) {
                             membRowData.add((String)map.get("projectCode"));
@@ -812,7 +814,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 sumRow.add(totalMoneyCost.toString());
                 allList.add(sumRow);
             }else{
-                List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId).eq("is_active", 1));
+                List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId));
                 List<Object> projectNames = list.stream().map(mp -> mp.get("project")).collect(Collectors.toList());
                 List<Object> projectIds = list.stream().map(mp -> mp.get("id")).collect(Collectors.toList());
                 List<String> headList = new ArrayList<String>();
@@ -826,7 +828,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 allList=new ArrayList<>();
                 allList.add(headList);
                 //统计当前所有项目所有人的时间成本投入
-                List<Map<String, Object>> membList = projectMapper.getProjectCostGroupByProject(companyId,startDate, endDate, projectId);
+                List<Map<String, Object>> membList = projectMapper.getProjectCostGroupByProject(companyId,startDate, endDate, projectId,userId);
                 for (User user : userList) {
                     BigDecimal moneyCost = BigDecimal.valueOf(0);
                     double costTime = 0;
@@ -839,7 +841,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                             membRowData.add(String.valueOf(resultList.get(0).get("cost")));
                             membRowData.add(String.valueOf(resultList.get(0).get("costMoney")));
                             costTime += (Double)resultList.get(0).get("cost");
-                            moneyCost = totalMoneyCost.add((BigDecimal)resultList.get(0).get("costMoney"));
+                            moneyCost = moneyCost.add((BigDecimal)resultList.get(0).get("costMoney"));
                         }else{
                             membRowData.add("");
                             membRowData.add("");
@@ -2971,7 +2973,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 sumRow.add(totalMoneyCost.toString());
                 allList.add(sumRow);
             }else{
-                List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId).eq("is_active", 1));
+                List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId));
                 List<Object> projectCategoryNameS = list.stream().map(mp -> mp.get("categoryName")).collect(Collectors.toList());
                 List<Object> projectCategorys = list.stream().map(mp -> mp.get("category")).collect(Collectors.toList());
                 List<String> headList = new ArrayList<String>();
@@ -2980,12 +2982,15 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     headList.add(String.valueOf(pc)+"/工时");
                     headList.add(String.valueOf(pc)+"/成本");
                 });
+                headList.add("工时/合计");
+                headList.add("成本/合计");
                 allList=new ArrayList<>();
                 allList.add(headList);
                 //统计当前所有项目所有人的时间成本投入
                 List<Map<String, Object>> membList = projectMapper.getProjectCostGroupByCategory(companyId,startDate,endDate, projectCategoryId,userId);
                 for (User user : userList) {
-                    boolean flag=false;
+                    BigDecimal moneyCost = BigDecimal.valueOf(0);
+                    double costTime = 0;
                     List<Map<String, Object>> mapList = membList.stream().filter(mb -> mb.get("creatorId").equals(user.getId())).collect(Collectors.toList());
                     List<String> membRowData=new ArrayList<>();
                     membRowData.add(user.getName());
@@ -2994,18 +2999,22 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                         if(resultList.size()>0){
                             membRowData.add(String.valueOf(resultList.get(0).get("cost")));
                             membRowData.add(String.valueOf(resultList.get(0).get("costMoney")));
+                            costTime += (Double)resultList.get(0).get("cost");
+                            moneyCost = moneyCost.add((BigDecimal)resultList.get(0).get("costMoney"));
                         }else{
                             membRowData.add("");
                             membRowData.add("");
                         }
                     }
+                    membRowData.add(""+new BigDecimal(costTime).setScale(1, BigDecimal.ROUND_HALF_UP));
+                    membRowData.add(moneyCost.toString());
                     if(mapList.size()>0){
                         allList.add(membRowData);
                     }
                 }
             }
             //生成excel文件导出
-            String fileName = "项目成本工时统计_"+System.currentTimeMillis();
+            String fileName = "项目分类工时成本统计_"+System.currentTimeMillis();
             String resp = ExcelUtil.exportGeneralExcelByTitleAndList(fileName , allList, path);
             httpRespMsg.data = resp;
         } catch (NullPointerException e) {

+ 7 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectMapper.xml

@@ -245,7 +245,7 @@
 
     <!--获取个人每个项目分别需要的工时-->
     <select id="getProjectCostGroupByProject" resultType="java.util.Map">
-        SELECT b.id as creatorId,a.creator_id as creatorId,a.project_id as projectId, b.name,a.dept_id as deptId, IFNULL(department.department_name, '未分配') as departmentName, SUM(a.working_time) AS cost, SUM(a.cost) AS costMoney
+        SELECT b.id as creatorId,a.project_id as projectId, b.name,a.dept_id as deptId, IFNULL(department.department_name, '未分配') as departmentName, SUM(a.working_time) AS cost, SUM(a.cost) AS costMoney
         FROM report AS a
         JOIN user AS b ON a.creator_id = b.id
         left join department on department.department_id = a.dept_id
@@ -256,14 +256,17 @@
         <if test="startDate != null and endDate != null">
             AND a.create_date between #{startDate} and #{endDate}
         </if>
-        GROUP BY b.id, a.dept_id,a.project_id
+        <if test="userId != null">
+            AND a.creator_id = #{userId}
+        </if>
+        GROUP BY b.id,a.project_id
         ORDER BY b.id ASC, a.dept_id ASC
     </select>
 
 
     <!--获取个人每个项目分类分别需要的工时-->
     <select id="getProjectCostGroupByCategory" resultType="java.util.Map">
-        SELECT b.id as creatorId,a.creator_id as creatorId,ifnull(c.category_name,'未分类') as categoryName,ifnull(c.category,0) as category, b.name,a.dept_id as deptId, IFNULL(department.department_name, '未分配') as departmentName, SUM(a.working_time) AS cost, SUM(a.cost) AS costMoney
+        SELECT a.creator_id as creatorId,ifnull(c.category_name,'未分类') as categoryName,ifnull(c.category,0) as category, b.name,a.dept_id as deptId, IFNULL(department.department_name, '未分配') as departmentName, SUM(a.working_time) AS cost, SUM(a.cost) AS costMoney
         FROM report AS a
         JOIN user AS b ON a.creator_id = b.id
         left join department on department.department_id = a.dept_id
@@ -278,7 +281,7 @@
         <if test="userId != null">
             AND a.creator_id = #{userId}
         </if>
-        GROUP BY b.id, a.dept_id,c.category
+        GROUP BY b.id,c.category
         ORDER BY b.id ASC, a.dept_id ASC
     </select>
 

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

@@ -30,7 +30,7 @@
     </sql>
 
     <select id="customSelect" resultMap="RichMap">
-        SELECT project_requirement.id, project.id AS project_id, project.`project_name`, project.`project_code`, project_requirement.`memb_req`, project_requirement.`task_req`,project_requirement.start_date,project_requirement.end_date,
+        SELECT project_requirement.id, project.id AS project_id, project.`project_name`, project.`project_code`, project_requirement.`memb_req`, project_requirement.`task_req`,project_requirement.contract_req,project_requirement.department_speed,project_requirement.start_date,project_requirement.end_date,
         (SELECT GROUP_CONCAT(DISTINCT user.`name`) FROM report LEFT JOIN `user` ON user.`id` = report.`creator_id` WHERE report.company_id=#{companyId} AND report.create_time >= #{startDate} AND report.`project_id` = project.id) AS active_users
         FROM project LEFT JOIN project_requirement ON project.id = project_requirement.`project_id`
         WHERE project.`company_id` = #{companyId}

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

@@ -189,4 +189,16 @@
         </if>
         and task_status = 0 order by task.id desc limit 50
     </select>
+    <select id="selectMilepost" resultType="com.management.platform.entity.Task">
+        select * from task where task.project_id in
+        <foreach collection="list" index="index" item="item" open="(" close=")" separator=",">
+            #{item}
+        </foreach>
+        and task.task_type=1 and task.finish_date in
+        (select MAX(task.finish_date)from task where  task.project_id in
+        <foreach collection="list" index="index" item="item" open="(" close=")" separator=",">
+            #{item}
+        </foreach>
+         and task.task_type=1   group by project_id) group by task.project_id
+    </select>
 </mapper>

+ 3 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TimeTypeMapper.xml

@@ -18,12 +18,14 @@
         <result column="fill_months" property="fillMonths" />
         <result column="custom_degree_active" property="customDegreeActive" />
         <result column="custom_degree_name" property="customDegreeName" />
+        <result column="custom_degree_status" property="customDegreeStatus" />
         <result column="alert_msg" property="alertMsg" />
         <result column="sync_corpwx_time" property="syncCorpwxTime" />
         <result column="need_dept_audit" property="needDeptAudit" />
         <result column="report_workflow" property="reportWorkflow" />
         <result column="custom_data_active" property="customDataActive" />
         <result column="custom_data_name" property="customDataName" />
+        <result column="custom_data_status" property="customDataStatus" />
         <result column="finance_audit" property="financeAudit" />
         <result column="overtime_ratio" property="overtimeRatio" />
         <result column="sync_dingding" property="syncDingding" />
@@ -33,6 +35,7 @@
         <result column="show_corpwx_cardtime" property="showCorpwxCardtime" />
         <result column="custom_text_active" property="customTextActive" />
         <result column="custom_text_name" property="customTextName" />
+        <result column="custom_text_status" property="customTextStatus" />
         <result column="lock_worktime" property="lockWorktime" />
         <result column="fill_overtime" property="fillOvertime" />
         <result column="show_fillaudit_time" property="showFillauditTime" />