Min 1 vuosi sitten
vanhempi
commit
20d8f3dd3c

+ 4 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/GroupBudgetReviewController.java

@@ -41,7 +41,7 @@ public class GroupBudgetReviewController {
     private ProjectMapper projectMapper;
 
     @RequestMapping("/add")
-    public HttpRespMsg add(Integer groupId,Integer oldManDay,Integer changeManDay,Integer nowManDay){
+    public HttpRespMsg add(Integer groupId,Integer oldManDay,Integer changeManDay,Integer nowManDay,String remark){
         HttpRespMsg httpRespMsg=new HttpRespMsg();
         if(changeManDay==null||changeManDay==0){
             httpRespMsg.setError("预估工时未发生变更");
@@ -58,7 +58,8 @@ public class GroupBudgetReviewController {
                 .setCompanyId(user.getCompanyId())
                 .setProjectId(project.getId()).setProjectName(project.getProjectName())
                 .setCreatorId(user.getId())
-                .setCreator(user.getName());
+                .setCreator(user.getName())
+                .setRemark(remark);
         if(!groupBudgetReviewService.save(groupBudgetReview)){
             httpRespMsg.setError("验证失败");
         }
@@ -90,7 +91,7 @@ public class GroupBudgetReviewController {
     public HttpRespMsg list(){
         HttpRespMsg httpRespMsg=new HttpRespMsg();
         Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
-        List<GroupBudgetReview> list = groupBudgetReviewService.list(new LambdaQueryWrapper<GroupBudgetReview>().eq(GroupBudgetReview::getCompanyId, companyId));
+        List<GroupBudgetReview> list = groupBudgetReviewService.list(new LambdaQueryWrapper<GroupBudgetReview>().eq(GroupBudgetReview::getCompanyId, companyId).orderByDesc(GroupBudgetReview::getCreateTime));
         httpRespMsg.setData(list);
         return httpRespMsg;
     }

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

@@ -435,8 +435,8 @@ public class ProjectController {
 
     //分页查询项目任务报表
     @RequestMapping("/getProjectTask")
-    public HttpRespMsg getProjectTask(@RequestParam Integer pageIndex, @RequestParam Integer pageSize, Integer projectId,Integer taskType) {
-        return projectService.getProjectTask(pageIndex, pageSize, projectId, request,taskType);
+    public HttpRespMsg getProjectTask(@RequestParam Integer pageIndex, @RequestParam Integer pageSize, Integer projectId,Integer groupId,Integer taskType) {
+        return projectService.getProjectTask(pageIndex, pageSize, projectId,groupId, request,taskType);
     }
 
     //分页查询项目各个阶段的汇总工时成本

+ 7 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/GroupBudgetReview.java

@@ -19,7 +19,7 @@ import org.springframework.format.annotation.DateTimeFormat;
  * </p>
  *
  * @author Seyason
- * @since 2023-12-28
+ * @since 2024-01-04
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -96,6 +96,12 @@ public class GroupBudgetReview extends Model<GroupBudgetReview> {
     @TableField("project_name")
     private String projectName;
 
+    /**
+     * 变更原因
+     */
+    @TableField("remark")
+    private String remark;
+
 
     @Override
     protected Serializable pkVal() {

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

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

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

@@ -92,7 +92,7 @@ public interface ProjectService extends IService<Project> {
 
     HttpRespMsg exportProject(HttpServletRequest request);
 
-    HttpRespMsg getProjectTask(Integer pageIndex, Integer pageSize, Integer projectId, HttpServletRequest request,Integer taskType);
+    HttpRespMsg getProjectTask(Integer pageIndex, Integer pageSize, Integer projectId,Integer groupId, HttpServletRequest request,Integer taskType);
 
     HttpRespMsg exportProjectTask(HttpServletRequest request,Integer taskType);
 

+ 46 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -2697,7 +2697,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
     }
 
     @Override
-    public HttpRespMsg getProjectTask(Integer pageIndex, Integer pageSize, Integer projectId, HttpServletRequest request,Integer taskType) {
+    public HttpRespMsg getProjectTask(Integer pageIndex, Integer pageSize, Integer projectId,Integer groupId, HttpServletRequest request,Integer taskType) {
         User user = userMapper.selectById(request.getHeader("Token"));
         Integer companyId = user.getCompanyId();
         int pageStart = (pageIndex -1) * pageSize;
@@ -2718,8 +2718,25 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 inchagerIds.add(-1);
             }
         }
-        int total = taskMapper.getProjectTaskCount(companyId, projectId,taskType,inchagerIds);
-        List projectTask = taskMapper.getProjectTask(companyId, pageStart, pageSize, projectId,taskType,inchagerIds);
+        int total = taskMapper.getProjectTaskCount(companyId, projectId,groupId,taskType,inchagerIds);
+        List<Map<String,Object>> projectTask = taskMapper.getProjectTask(companyId, pageStart, pageSize, projectId,groupId,taskType,inchagerIds);
+        if(companyId==3092){
+            List<Integer> groupIds = projectTask.stream().map(p -> Integer.valueOf(String.valueOf(p.get("groupId")))).distinct().collect(Collectors.toList());
+            groupIds.add(-1);
+            List<Report> reportList = reportMapper.selectList(new LambdaQueryWrapper<Report>().select(Report::getGroupId, Report::getWorkingTime).in(Report::getGroupId, groupIds));
+            List<TaskGroup> taskGroupList = taskGroupMapper.selectList(new LambdaQueryWrapper<TaskGroup>().in(TaskGroup::getId, groupIds));
+            for (Map<String, Object> p : projectTask) {
+                Optional<TaskGroup> group = taskGroupList.stream().filter(t -> t.getId().equals(Integer.valueOf(String.valueOf(p.get("groupId"))))).findFirst();
+                p.put("group_plan_hours",0);
+                if(group.isPresent()){
+                    p.put("group_plan_hours",0);
+                }
+                List<Report> reports = reportList.stream().filter(r -> r.getGroupId().equals(Integer.valueOf(String.valueOf(p.get("groupId"))))).collect(Collectors.toList());
+                BigDecimal reduce = reports.stream().map(r -> new BigDecimal(r.getWorkingTime())).reduce(BigDecimal.ZERO, BigDecimal::add);
+                reduce = reduce.setScale(2, BigDecimal.ROUND_HALF_UP);
+                p.put("group_real_hours",reduce.doubleValue());
+            }
+        }
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         Map<String, Object> map = new HashMap<>();
         map.put("records", projectTask);
@@ -2755,7 +2772,24 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 inchagerIds.add(-1);
             }
         }
-        List<Map> projectList = taskMapper.getProjectTask(companyId, null, null, null,taskType,inchagerIds);
+        List<Map<String,Object>> projectList = taskMapper.getProjectTask(companyId, null, null, null,null,taskType,inchagerIds);
+        if(companyId==3092){
+            List<Integer> groupIds = projectList.stream().map(p -> Integer.valueOf(String.valueOf(p.get("groupId")))).distinct().collect(Collectors.toList());
+            groupIds.add(-1);
+            List<Report> reportList = reportMapper.selectList(new LambdaQueryWrapper<Report>().select(Report::getGroupId, Report::getWorkingTime).in(Report::getGroupId, groupIds));
+            List<TaskGroup> taskGroupList = taskGroupMapper.selectList(new LambdaQueryWrapper<TaskGroup>().in(TaskGroup::getId, groupIds));
+            for (Map<String, Object> p : projectList) {
+                Optional<TaskGroup> group = taskGroupList.stream().filter(t -> t.getId().equals(Integer.valueOf(String.valueOf(p.get("groupId"))))).findFirst();
+                p.put("group_plan_hours",0);
+                if(group.isPresent()){
+                    p.put("group_plan_hours",0);
+                }
+                List<Report> reports = reportList.stream().filter(r -> r.getGroupId().equals(Integer.valueOf(String.valueOf(p.get("groupId"))))).collect(Collectors.toList());
+                BigDecimal reduce = reports.stream().map(r -> new BigDecimal(r.getWorkingTime())).reduce(BigDecimal.ZERO, BigDecimal::add);
+                reduce = reduce.setScale(2, BigDecimal.ROUND_HALF_UP);
+                p.put("group_real_hours",reduce.doubleValue());
+            }
+        }
         List<ProjectVO> list = new ArrayList<>();
         //String[] statusNames = {"进行中","已完成","已撤销"};
         String[] statusNames = {MessageUtils.message("excel.onGoing"),MessageUtils.message("excel.complete"),MessageUtils.message("excel.revoke")};
@@ -2764,11 +2798,19 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         List<List<String>> exportList = new ArrayList<>();
         //String[] titles = {"项目编号", "项目名称", "任务名称", "执行人","计划工时(h)", "实际工时(h)","状态", "类型", "截止日期"};
         String[] titles = {MessageUtils.message("entry.projectId"), MessageUtils.message("entry.projectName"), MessageUtils.message("entry.taskName"), MessageUtils.message("excel.executor"),MessageUtils.message("excel.plannedWork"), MessageUtils.message("excel.actualWork"),MessageUtils.message("leave.status"), MessageUtils.message("excel.type"), MessageUtils.message("entry.endDate")};
+        if(companyId==3092){
+            titles = new String[]{"项目编号", "项目名称","任务分组","分组预估工时","分组实际工时", "任务名称", "执行人","计划工时(h)", "实际工时(h)","状态", "类型", "截止日期"};
+        }
         exportList.add(Lists.list(titles));
         for (Map task : projectList) {
             List<String> data = new ArrayList<>();
             data.add(task.get("project_code") == null?"":task.get("project_code").toString());
             data.add(task.get("project_name") == null?"":task.get("project_name").toString());
+            if(companyId==3092){
+                data.add(task.get("groupName") == null?"":task.get("groupName").toString());
+                data.add(task.get("group_plan_hours") == null?"":task.get("group_plan_hours").toString());
+                data.add(task.get("group_real_hours") == null?"":task.get("group_real_hours").toString());
+            }
             data.add(task.get("name") != null?task.get("name").toString():"");
             if(wxCorpInfo!=null&&wxCorpInfo.getSaasSyncContact()==1){
                 String userName = "";

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

@@ -17,11 +17,12 @@
         <result column="creator" property="creator" />
         <result column="project_id" property="projectId" />
         <result column="project_name" property="projectName" />
+        <result column="remark" property="remark" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, group_id, old_man_day, change_man_day, now_man_day, status, create_time, company_id, creator_id, group_name, creator, project_id, project_name
+        id, group_id, old_man_day, change_man_day, now_man_day, status, create_time, company_id, creator_id, group_name, creator, project_id, project_name, remark
     </sql>
 
 </mapper>

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

@@ -168,7 +168,7 @@
     </select>
 
     <select id="getProjectTask" resultType="java.util.Map">
-        SELECT task.id, task.`name`,task.executor_name,task.executor_id,DATE_FORMAT(task.`end_date`, '%Y-%m-%d') as end_date, task.`plan_hours`,
+        SELECT task.id,tg.id as groupId, task.`name`,task.executor_name,task.executor_id,DATE_FORMAT(task.`end_date`, '%Y-%m-%d') as end_date, task.`plan_hours`,
         (SELECT IFNULL(SUM(working_time),0) FROM report WHERE report.`task_id` = task.id AND report.`state` = 1) AS real_hours,
         task.`task_status`, task.`task_type`,
         project.`project_code`, project.`project_name`,tg.name as groupName
@@ -179,6 +179,9 @@
         <if test="projectId != null">
             and task.project_id = #{projectId}
         </if>
+        <if test="groupId != null">
+            and task.group_id = #{groupId}
+        </if>
         <if test="taskType!=null">
             and task.task_type=#{taskType}
         </if>
@@ -199,6 +202,9 @@
         <if test="projectId != null">
             and task.project_id = #{projectId}
         </if>
+        <if test="groupId != null">
+            and task.group_id = #{groupId}
+        </if>
         <if test="taskType!=null">
             and task.task_type=#{taskType}
         </if>

+ 21 - 2
fhKeeper/formulahousekeeper/timesheet/src/views/project/budgetReview.vue

@@ -83,6 +83,21 @@
                     </div>
                 </template>
             </el-table-column>
+
+            <el-table-column prop="remark" :label="'变更理由'" sortable width="200px">
+                <template slot-scope="scope">
+                    <div>
+                        <div v-if="scope.row.remark && scope.row.remark.length > 11">
+                            <el-tooltip class="remarkClassItem" effect="dark" :content="scope.row.remark" placement="top">
+                                <div class="remarkClass">{{scope.row.remark}}</div>
+                            </el-tooltip>
+                        </div>
+                        <div v-else>
+                            {{scope.row.remark}}
+                        </div>
+                    </div>
+                </template>
+            </el-table-column>
             
             <el-table-column prop="status" :label="$t('state.states')" sortable>
                 <template slot-scope="scope">
@@ -711,10 +726,14 @@
     };
 </script>
 
-<style lang="scss">
+<style lang="scss" scoped>
 .propsbtn {
     display: inline-block;
     padding-left: 20px;
 }
-
+.remarkClass {
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+}
 </style>

+ 9 - 0
fhKeeper/formulahousekeeper/timesheet/src/views/project/projectInside.vue

@@ -1170,6 +1170,14 @@
                    <el-input v-model="groupBudgetData.changeManDay" type="number" @change="changeNowManDay(groupBudgetData)" :placeholder="$t('peaseenterthe')" maxlength="10" :max="99999" style="width:120px;"></el-input>&nbsp;人天
                 </el-form-item>
                 <el-form-item :label="'变更后预估工时'"><span>{{nowManDay}}{{'人天'}}</span></el-form-item>
+                <el-form-item :label="'变更理由'">
+                    <el-input
+                        type="textarea"
+                        :rows="2"
+                        placeholder="请输入内容"
+                        v-model="groupBudgetData.remark">
+                    </el-input>
+                </el-form-item>
             </el-form>
             <div slot="footer" class="dialog-footer">
                 <el-button @click.native="changeBudgetDig = false">{{ $t('btn.cancel') }}</el-button>
@@ -2940,6 +2948,7 @@
                         oldManDay:groupBudgetData.manDay,
                         changeManDay:groupBudgetData.changeManDay,
                         nowManDay:this.nowManDay,
+                        remark:groupBudgetData.remark,
                     }
                 }
                 this.http.post('/group-budget-review/add',param,