Selaa lähdekoodia

Merge branch 'master' of http://47.100.37.243:10191/wutt/manHourHousekeeper

Min 1 vuosi sitten
vanhempi
commit
5dcb0d398c
51 muutettua tiedostoa jossa 1590 lisäystä ja 560 poistoa
  1. 19 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectController.java
  2. 52 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java
  3. 38 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskGroupController.java
  4. 5 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserController.java
  5. 13 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Project.java
  6. 8 3
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/TaskGroup.java
  7. 14 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/vo/GroupEstimatedWorkVO.java
  8. 17 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/vo/ProjectEstimatedWorkVO.java
  9. 4 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ReportMapper.java
  10. 4 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/UserMapper.java
  11. 6 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectService.java
  12. 2 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/UserService.java
  13. 246 11
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java
  14. 17 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  15. 26 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java
  16. 12 3
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportMapper.xml
  17. 2 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TaskGroupMapper.xml
  18. 23 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/UserMapper.xml
  19. 42 2
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/DepartmentController.java
  20. 2 2
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/PlanProcedureTotalController.java
  21. 10 8
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/ReportController.java
  22. 2 3
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/entity/PlanProcedureTotal.java
  23. 1 2
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/entity/ProdProcedureTeam.java
  24. 17 1
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/entity/Report.java
  25. 1 1
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/PlanProcedureTotalService.java
  26. 2 1
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/ReportService.java
  27. 32 6
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/PlanProcedureTotalServiceImpl.java
  28. 77 247
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  29. 1 1
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/util/CodeGenerator.java
  30. 109 0
      fhKeeper/formulahousekeeper/management-workshop/src/main/resources/application-devlew.yml
  31. 4 5
      fhKeeper/formulahousekeeper/management-workshop/src/main/resources/mapper/ProdProcedureTeamMapper.xml
  32. 4 4
      fhKeeper/formulahousekeeper/management-workshop/src/main/resources/mapper/ReportMapper.xml
  33. 7 3
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/components/chooseSomeone.vue
  34. 17 1
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/index/index.vue
  35. 4 3
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/login/index.vue
  36. 12 29
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/my/children/center.vue
  37. 32 11
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/workView/fillReport.vue
  38. 243 18
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/workView/workView.vue
  39. 173 131
      fhKeeper/formulahousekeeper/timesheet-workshop/src/views/plan/planComponent.vue
  40. 6 4
      fhKeeper/formulahousekeeper/timesheet-workshop/src/views/statistic/index.vue
  41. 32 22
      fhKeeper/formulahousekeeper/timesheet-workshop/src/views/workReport/daily.vue
  42. 27 0
      fhKeeper/formulahousekeeper/timesheet/src/views/project/info.vue
  43. 52 4
      fhKeeper/formulahousekeeper/timesheet/src/views/project/projectInside.vue
  44. 2 2
      fhKeeper/formulahousekeeper/timesheet/src/views/task/list.vue
  45. 44 2
      fhKeeper/formulahousekeeper/timesheet/src/views/team/index.vue
  46. 7 4
      fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue
  47. 24 4
      fhKeeper/formulahousekeeper/timesheet/src/views/workReport/weeklyCustomization.vue
  48. 9 2
      fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/index.vue
  49. 68 7
      fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/weekEdit.vue
  50. 2 2
      fhKeeper/formulahousekeeper/timesheet_h5/src/views/index/index.vue
  51. 17 6
      fhKeeper/formulahousekeeper/timesheet_h5/src/views/view/index.vue

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

@@ -115,6 +115,16 @@ public class ProjectController {
         return projectService.getProjectPage(pageIndex, pageSize, keyword,searchField, status, category, projectId,projectMainId,deptId, sortProp, sortOrder,inchagerId,participation,startDate,endDate, request);
     }
 
+    /**
+     * 预估工时表
+     * 筛选项:项目(状态为进行中/已完成,20231108之前完成的不统计)
+     */
+    @RequestMapping("/getProjectEstimatedWork")
+    public HttpRespMsg getProjectEstimatedWork(@RequestParam Integer pageIndex, @RequestParam Integer pageSize, Integer projectId ) {
+        return projectService.getProjectEstimatedWork(pageIndex, pageSize, projectId, request);
+    }
+
+
     @RequestMapping("/saveBatchAccoDegrees")
     public HttpRespMsg saveBatchAccoDegrees(String ids,
                                    String associateDegrees,
@@ -454,6 +464,10 @@ public class ProjectController {
     public HttpRespMsg exportAllProjectCost() {
         return projectService.exportAllProjectCost(request);
     }
+    @RequestMapping("/exportProjectEstimatedWorkTime")
+    public HttpRespMsg exportProjectEstimatedWorkTime(Integer projectId) {
+        return projectService.exportProjectEstimatedWorkTime(request ,projectId );
+    }
 
     //分页查询员工月度工时表
     @RequestMapping("/getEmpMonthHours")
@@ -1229,6 +1243,11 @@ public class ProjectController {
         return projectService.timeCostAndExpenseByProject(request,startDate,endDate,projectId);
     }
 
+    @RequestMapping("/getProjectFillTime")
+    public HttpRespMsg getProjectFillTime(HttpServletRequest request,Integer projectId){
+        return projectService.getProjectFillTime(request,projectId);
+    }
+
     /**
      * 获取最近填写的三个项目
      * @param request

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

@@ -83,6 +83,8 @@ public class ReportController {
     @Resource
     private TimeTypeMapper timeTypeMapper;
     @Resource
+    private TaskGroupService taskGroupService;
+    @Resource
     private ReportMapper reportMapper;
     @Resource
     private ProjectMapper projectMapper;
@@ -1151,6 +1153,8 @@ public class ReportController {
         //如果开启了项目人天
         String warningPercentProjects = "";
         String warningLackProjects = "";
+        String warningGroupPercent = "";
+        String warningGroupLack = "";
         EstimateTimeSetting estimateTimeSetting = null;
         if(comTimeType.getProjectManDay()==1){
             Collection<Integer> projectIds = reportList.stream().map(Report::getProjectId).distinct().collect(Collectors.toList());
@@ -1192,12 +1196,44 @@ public class ReportController {
                             if (hasReport.divide(multiply, 2, RoundingMode.HALF_UP).multiply(new BigDecimal(100)).compareTo(new BigDecimal(100-estimateTimeSetting.getProjectWarningPercent()))>0) {
                                 warningPercentProjects += first.get().getProjectName() + ",";
                             }
+                            //检查分组工时
+                            Integer targetGpId = report.getGroupId();
+                            if (targetGpId != null) {
+                                double groupSum = 0;
+                                if(first.get().getManDayStartDate()!=null){
+                                    groupSum = needCheckReportList.stream().filter(npl -> npl.getGroupId().equals(targetGpId) &&(npl.getCreateDate().isAfter(first.get().getManDayStartDate())||npl.getCreateDate().isEqual(first.get().getManDayStartDate()))&& (npl.getState() == 0 || npl.getState() == 1)).mapToDouble(Report::getWorkingTime).sum();
+                                }else {
+                                    groupSum = needCheckReportList.stream().filter(npl -> npl.getGroupId().equals(targetGpId) && (npl.getState() == 0 || npl.getState() == 1)).mapToDouble(Report::getWorkingTime).sum();
+                                }
+                                System.out.println("groupSum:"+groupSum);
+                                nowReport = reportList.stream().filter(rl -> rl.getCreateDate().equals(report.getCreateDate()) && rl.getCreatorId().equals(report.getCreatorId()) && targetGpId.equals(rl.getGroupId())).mapToDouble(Report::getWorkingTime).sum();
+                                hasReport = new BigDecimal(groupSum).add(new BigDecimal(nowReport));
+                                TaskGroup tgp = taskGroupService.getById(targetGpId);
+                                //设置的数值大于0时检查是否超额
+                                if (tgp.getManDay() != null && tgp.getManDay() > 0) {
+                                    multiply = new BigDecimal(tgp.getManDay()).multiply(new BigDecimal(comTimeType.getAllday()));
+                                    System.out.println("hasReport:"+hasReport+" multiply:"+multiply);
+                                    if (hasReport.doubleValue() > multiply.doubleValue()) {
+                                        if (estimateTimeSetting.getGroupFronzeOnLack() == 1) {
+                                            httpRespMsg.setError("超过当前项目["+first.get().getProjectName()+"]分组["+tgp.getName()+"]预算工时,无法继续提交工时");
+                                            return httpRespMsg;
+                                        } else {
+                                            //仅提醒
+                                            warningGroupLack += (tgp.getTaskGroupCode() != null?tgp.getTaskGroupCode():"")+"-"+tgp.getName() + ",";
+                                        }
+                                    } else {
+                                        //检查是否超过预设的提醒百分比;设置的数值是剩余的百分比
+                                        if (hasReport.divide(multiply, 2, RoundingMode.HALF_UP).multiply(new BigDecimal(100)).compareTo(new BigDecimal(100 - estimateTimeSetting.getGroupWarningPercent())) > 0) {
+                                            warningGroupPercent += (tgp.getTaskGroupCode() != null?tgp.getTaskGroupCode():"")+"-"+tgp.getName() + ",";
+                                        }
+                                    }
+                                }
+                            }
+
                         }
                     }
                 }
             }
-
-
         }
 
         //如果锁定工作时长上限的话,需要校验每日的合计工作时长
@@ -1562,6 +1598,20 @@ public class ReportController {
                 warningPercentProjects = warningPercentProjects.substring(0, warningPercentProjects.length() -1);
                 estimateWarningMsg += "提交成功,项目["+warningPercentProjects+"]预估工时剩余小于"+estimateTimeSetting.getProjectWarningPercent()+"%,请联系项目经理。";
             }
+            if (!StringUtils.isEmpty(warningGroupLack)) {
+                warningGroupLack = warningGroupLack.substring(0, warningGroupLack.length() -1);
+                if (estimateWarningMsg.length() > 0) {
+                    estimateWarningMsg += "<br/>";
+                }
+                estimateWarningMsg += "提交成功,项目分组["+warningGroupLack+"]预估工时不足,请联系项目经理。";
+            }
+            if (!StringUtils.isEmpty(warningGroupPercent)) {
+                warningGroupPercent = warningGroupPercent.substring(0, warningGroupPercent.length() -1);
+                if (estimateWarningMsg.length() > 0) {
+                    estimateWarningMsg += "<br/>";
+                }
+                estimateWarningMsg += "提交成功,项目分组["+warningGroupPercent+"]预估工时剩余小于"+estimateTimeSetting.getGroupWarningPercent()+"%,请联系项目经理。";
+            }
             if (!StringUtils.isEmpty(estimateWarningMsg)) {
                 httpRespMsg.setMsg(estimateWarningMsg);
             }

+ 38 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskGroupController.java

@@ -124,6 +124,43 @@ public class TaskGroupController {
         return msg;
     }
 
+    @RequestMapping("saveManDay")
+    public HttpRespMsg saveManDay(String data) {
+        HttpRespMsg msg = new HttpRespMsg();
+        List<TaskGroup> groupList = JSON.parseArray(data, TaskGroup.class);
+        List<TaskGroup> addList = new ArrayList<>();
+        int totalManDay = 0;
+        for (TaskGroup taskGroup : groupList) {
+            TaskGroup item = new TaskGroup();
+            item.setId(taskGroup.getId());
+            if (taskGroup.getManDay() == null) {
+                item.setManDay(0);
+            } else {
+                item.setManDay(taskGroup.getManDay());
+                totalManDay += taskGroup.getManDay();
+            }
+            addList.add(item);
+        }
+        //校验,任务分组总预估工时不得超过项目预估工时
+        TaskGroup taskGroup = groupList.get(0);
+        Project project = projectMapper.selectById(taskGroup.getProjectId());
+        if (project.getManDay() == null || project.getManDay() == 0) {
+            msg.setError("请返回编辑项目,并设置项目预估工时");
+            return msg;
+        }
+        if (totalManDay > project.getManDay()) {
+            msg.setError("任务分组总预估工时不得超过项目预估工时");
+            return msg;
+        }
+        if (addList.size() > 0) {
+            taskGroupService.updateBatchById(addList);
+        }
+
+        msg.data = taskGroupService.list(new QueryWrapper<TaskGroup>().eq("project_id", groupList.get(0).getProjectId()));
+        return msg;
+    }
+
+
     @RequestMapping("/batchSaveTaskGroup")
     public HttpRespMsg batchSaveTaskGroup(String projectIds,String taskGroupName){
         HttpRespMsg msg=new HttpRespMsg();
@@ -481,6 +518,7 @@ public class TaskGroupController {
         }
         map.put("participators",participatorList);
         map.put("wbsCode",taskGroup.getWbsCode());
+        map.put("manDay",taskGroup.getManDay());
         httpRespMsg.data=map;
         return httpRespMsg;
     }

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

@@ -237,6 +237,11 @@ public class UserController {
         return userService.setActive(id, isActive);
     }
 
+    @RequestMapping("/setActiveByIds")
+    public HttpRespMsg setActiveByIds(String ids, int isActive) {
+        return userService.setActiveByIds(ids, isActive);
+    }
+
     @RequestMapping("/exportUsers")
     public HttpRespMsg exportUsers(Integer containInvalid) {
         return userService.exportUsers(containInvalid,request);

+ 13 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Project.java

@@ -14,6 +14,7 @@ import java.util.Map;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.management.platform.config.PropertyMsg;
+import com.management.platform.entity.vo.GroupEstimatedWorkVO;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
@@ -458,6 +459,18 @@ public class Project extends Model<Project> {
     @TableField("from_outside")
     private Integer fromOutside;
 
+    /**
+     * 预估工时表:任务分组
+     */
+    @TableField(exist = false)
+    private List<GroupEstimatedWorkVO> groupEstimatedWorkVOList;
+
+    //实际工时
+    @TableField(exist = false)
+    private String reallyWorkTime;
+
+    @TableField(exist = false)
+    private String groupName;
 
     @Override
     protected Serializable pkVal() {

+ 8 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/TaskGroup.java

@@ -9,15 +9,13 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 
-import java.io.Serializable;
-
 /**
  * <p>
  * 
  * </p>
  *
  * @author Seyason
- * @since 2022-10-13
+ * @since 2023-11-21
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -60,6 +58,13 @@ public class TaskGroup extends Model<TaskGroup> {
     @TableField(exist = false)
     private String inchargerName;
 
+    /**
+     * 预估工时:人天
+     */
+    @TableField("man_day")
+    private Integer manDay;
+
+
     @Override
     protected Serializable pkVal() {
         return this.id;

+ 14 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/vo/GroupEstimatedWorkVO.java

@@ -0,0 +1,14 @@
+package com.management.platform.entity.vo;
+
+import lombok.Data;
+
+@Data
+public class GroupEstimatedWorkVO {
+    private Integer id;
+    private String groupName;
+    private Integer projectId;
+    private String projectName;
+    private String projectCode;
+    private String estimatedWorkTime;
+    private String workTime;
+}

+ 17 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/vo/ProjectEstimatedWorkVO.java

@@ -0,0 +1,17 @@
+package com.management.platform.entity.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+//预计工时
+@Data
+public class ProjectEstimatedWorkVO {
+    private Integer id;
+    private String projectName;
+    private String estimatedWorkTime;
+    private String workTime;
+    private String groupName;
+    private Integer groupId;
+    private List<GroupEstimatedWorkVO> groupEstimatedWorkVOList;
+}

+ 4 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ReportMapper.java

@@ -183,4 +183,8 @@ public interface ReportMapper extends BaseMapper<Report> {
     List<Map<String, Object>> getPushProjectReportToSap(Integer companyId, String startDate, String endDate,String userId);
 
     List<Report> getSumWorkingTime(ArrayList<Integer> deptIds, String startDate, String endDate);
+
+    Double getReallWorkingTimeByProjectId(Integer id);
+
+    Double getReallWorkingTimeByProjectAndGroup(Integer projectId, Integer taskGroupId);
 }

+ 4 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/UserMapper.java

@@ -48,4 +48,8 @@ public interface UserMapper extends BaseMapper<User> {
     int getIsActiveCount(ArrayList<Integer> deptIds, String startDate, String endDate);
 
     List<User> getInActiveList(ArrayList<Integer> deptIds, String startDate, String endDate);
+
+    List<User> getInActiveBewttenStartAndEndList(ArrayList<Integer> deptIds, String startDate, String endDate);
+
+    void updateActiveByIds(List<String> array, int isActive);
 }

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

@@ -100,6 +100,8 @@ public interface ProjectService extends IService<Project> {
 
     HttpRespMsg exportAllProjectCost(HttpServletRequest request);
 
+    HttpRespMsg exportProjectEstimatedWorkTime(HttpServletRequest request,Integer projectId);
+
     HttpRespMsg getProjectInAndOut(Integer pageIndex, Integer pageSize, Integer projectId, HttpServletRequest request);
 
     HttpRespMsg exportProjectInAndOut(HttpServletRequest request);
@@ -264,4 +266,8 @@ public interface ProjectService extends IService<Project> {
     HttpRespMsg syncProjectWithSap(String startDate,String endDate);
 
     HttpRespMsg getEffectiveLaborHourRate(String startDate, String endDate);
+
+    HttpRespMsg getProjectEstimatedWork(Integer pageIndex, Integer pageSize, Integer projectId, HttpServletRequest request);
+
+    HttpRespMsg getProjectFillTime(HttpServletRequest request, Integer projectId);
 }

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

@@ -103,4 +103,6 @@ public interface UserService extends IService<User> {
     HttpRespMsg initSystemForAd(String companyName) throws Exception;
 
     HttpRespMsg syncDeptWithAD(HttpServletRequest request) throws Exception;
+
+    HttpRespMsg setActiveByIds(String ids, int isActive);
 }

+ 246 - 11
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -269,6 +269,73 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         return httpRespMsg;
     }
 
+    public HttpRespMsg getProjectEstimatedWork(Integer pageIndex, Integer pageSize, Integer projectId, HttpServletRequest request) {
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        //通过公司id获取该公司所有的项目列表
+        User user = userMapper.selectById(request.getHeader("Token"));
+        Integer companyId = user.getCompanyId();
+        //该公司下的allday
+        float allday=timeTypeMapper.selectOne(new QueryWrapper<TimeType>()
+                .eq("company_id",companyId)).getAllday();
+        //根据公司的id搜索该公司有哪些项目  20231108之前完成的不统计,状态为进行中/已完成
+        List<Project> selectList = projectMapper.selectList(new QueryWrapper<Project>().eq("company_id", companyId).in("status", 1, 2));
+        List<Integer> collectProjectIds = selectList.stream().map(Project::getId).collect(Collectors.toList());
+
+        IPage<Project> projectIPage = projectMapper.selectPage(new Page<>(pageIndex, pageSize), new QueryWrapper<Project>().in("id", collectProjectIds)
+                .isNull("finish_date").or().ge("finish_date", "2023-11-08").eq(projectId!=null,"project_id",projectId));
+
+        //查询到的project列表
+        List<Project> records = projectIPage.getRecords();
+        List<Integer> collectIds = records.stream().map(Project::getId).collect(Collectors.toList());
+
+        //根据查询道德project列表查询总的reporeList
+        List<Report> reportList = reportMapper.selectList(new QueryWrapper<Report>()
+                .in("project_id", collectIds));
+        //根据查询道德project列表查询总的task_groupList
+        List<TaskGroup> taskGroups = taskGroupMapper.selectList(new QueryWrapper<TaskGroup>()
+                .in("project_id", collectIds));
+
+        for (Project project : records) {
+            Double reallWorkTime = reportList.stream().filter(r -> r.getProjectId() .equals( project.getId()))
+                    .mapToDouble(r->r.getWorkingTime()).sum();
+            String rWorkTime=reallWorkTime==null ? "0":reallWorkTime+"";
+            project.setReallyWorkTime(rWorkTime);
+            String pEstimatedWork=project.getManDay()==null ? 0*allday+"": project.getManDay()*allday+"";
+            project.setEstimatedWorkTime(pEstimatedWork);
+            List<TaskGroup> taskGroupCollect = taskGroups.stream().filter(t -> t.getProjectId() == project.getId())
+                    .collect(Collectors.toList());
+
+            ArrayList<GroupEstimatedWorkVO> groupEstimatedWorkVOS = new ArrayList<>();
+
+            if (taskGroupCollect.size()>0){
+                List<Integer> groupIds = taskGroupCollect.stream().map(TaskGroup::getId).collect(Collectors.toList());
+                List<Report> getByProjectAndGroup = reportMapper.selectList(new QueryWrapper<Report>()
+                        .eq("project_id", project.getId())
+                        .in("group_id", groupIds));
+                for (TaskGroup taskGroup : taskGroupCollect) {
+                    Double gReallWorkTime = getByProjectAndGroup.stream().filter(r -> r.getGroupId().equals( taskGroup.getId()))
+                            .mapToDouble(r->r.getWorkingTime()).sum();
+                    GroupEstimatedWorkVO groupEstimatedWorkVO = new GroupEstimatedWorkVO();
+                    String grWorkTime=gReallWorkTime==null ? "0":gReallWorkTime+"";
+                    String gEstimatedWork=taskGroup.getManDay()==null ? 0*allday+"": taskGroup.getManDay()*allday+"";
+
+                    groupEstimatedWorkVO.setWorkTime(grWorkTime);
+                    groupEstimatedWorkVO.setEstimatedWorkTime(gEstimatedWork);
+                    groupEstimatedWorkVO.setId(taskGroup.getId());
+                    groupEstimatedWorkVO.setGroupName(taskGroup.getName());
+
+                    groupEstimatedWorkVOS.add(groupEstimatedWorkVO);
+                }
+            }
+            project.setGroupEstimatedWorkVOList(groupEstimatedWorkVOS);
+        }
+        projectIPage.setRecords(records);
+
+        httpRespMsg.data=projectIPage;
+        return httpRespMsg;
+    }
+
+
     //分页获取项目列表
     @Override
     @Transactional(readOnly = true)
@@ -2462,6 +2529,111 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         return httpRespMsg;
     }
 
+    public HttpRespMsg exportProjectEstimatedWorkTime(HttpServletRequest request,Integer projectId) {
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+
+        User user = userMapper.selectById(request.getHeader("Token"));
+        Integer companyId = user.getCompanyId();
+        WxCorpInfo wxCorpInfo = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", companyId));
+
+
+        //该公司下的allday
+        float allday=timeTypeMapper.selectOne(new QueryWrapper<TimeType>()
+                .eq("company_id",companyId)).getAllday();
+        //根据公司的id搜索该公司有哪些项目  20231108之前完成的不统计,状态为进行中/已完成
+        List<Project> selectList = projectMapper.selectList(new QueryWrapper<Project>().eq("company_id", companyId).in("status", 1, 2));
+        List<Integer> collectProjectIds = selectList.stream().map(Project::getId).collect(Collectors.toList());
+
+        List<Project> selectProjects = projectMapper.selectList(new QueryWrapper<Project>().in("id", collectProjectIds)
+                .isNull("finish_date").or().ge("finish_date", "2023-11-08").eq(projectId != null, "project_id", projectId));
+
+        //查询到的project列表
+        List<Integer> collectIds = selectProjects.stream().map(Project::getId).collect(Collectors.toList());
+
+        //根据查询道德project列表查询总的reporeList
+        List<Report> reportList = reportMapper.selectList(new QueryWrapper<Report>()
+                .in("project_id", collectIds));
+        //根据查询道德project列表查询总的task_groupList
+        List<TaskGroup> taskGroups = taskGroupMapper.selectList(new QueryWrapper<TaskGroup>()
+                .in("project_id", collectIds));
+
+        for (Project project : selectProjects) {
+            Double reallWorkTime = reportList.stream().filter(r -> r.getProjectId() .equals( project.getId()))
+                    .mapToDouble(r->r.getWorkingTime()).sum();
+            String rWorkTime=reallWorkTime==null ? "0":reallWorkTime+"";
+            project.setReallyWorkTime(rWorkTime);
+            String pEstimatedWork=project.getManDay()==null ? 0*allday+"": project.getManDay()*allday+"";
+            project.setEstimatedWorkTime(pEstimatedWork);
+            List<TaskGroup> taskGroupCollect = taskGroups.stream().filter(t -> t.getProjectId() == project.getId())
+                    .collect(Collectors.toList());
+
+            ArrayList<GroupEstimatedWorkVO> groupEstimatedWorkVOS = new ArrayList<>();
+
+            if (taskGroupCollect.size()>0){
+                List<Integer> groupIds = taskGroupCollect.stream().map(TaskGroup::getId).collect(Collectors.toList());
+                List<Report> getByProjectAndGroup = reportMapper.selectList(new QueryWrapper<Report>()
+                        .eq("project_id", project.getId())
+                        .in("group_id", groupIds));
+                for (TaskGroup taskGroup : taskGroupCollect) {
+                    Double gReallWorkTime = getByProjectAndGroup.stream().filter(r -> r.getGroupId().equals( taskGroup.getId()))
+                            .mapToDouble(r->r.getWorkingTime()).sum();
+                    GroupEstimatedWorkVO groupEstimatedWorkVO = new GroupEstimatedWorkVO();
+                    String grWorkTime=gReallWorkTime==null ? "0":gReallWorkTime+"";
+                    String gEstimatedWork=taskGroup.getManDay()==null ? 0*allday+"": taskGroup.getManDay()*allday+"";
+
+                    groupEstimatedWorkVO.setWorkTime(grWorkTime);
+                    groupEstimatedWorkVO.setEstimatedWorkTime(gEstimatedWork);
+                    groupEstimatedWorkVO.setId(taskGroup.getId());
+                    groupEstimatedWorkVO.setGroupName(taskGroup.getName());
+
+                    groupEstimatedWorkVOS.add(groupEstimatedWorkVO);
+                }
+            }
+            project.setGroupEstimatedWorkVOList(groupEstimatedWorkVOS);
+        }
+
+
+
+        List<ProjectEstimatedWorkVO> list = new ArrayList<>();
+
+        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.plannedWork"), MessageUtils.message("excel.actualWork")};
+        exportList.add(Lists.list(titles));
+        for (Project project : selectProjects) {
+            List<String> data = new ArrayList<>();
+
+            data.add(project.getProjectCode() == null?"":project.getProjectCode().toString());
+            data.add(project.getProjectName() == null?"":project.getProjectName());
+            data.add(project.getGroupName() == null?"":project.getGroupName());
+            data.add(project.getEstimatedWorkTime() != null?project.getEstimatedWorkTime().toString():"");
+            data.add(project.getReallyWorkTime() != null?project.getReallyWorkTime().toString():"");
+            exportList.add(data);
+
+            if (project.getGroupEstimatedWorkVOList().size()>0){
+                List<GroupEstimatedWorkVO> groupEstimatedWorkVOList = project.getGroupEstimatedWorkVOList();
+                for (GroupEstimatedWorkVO groupEstimatedWorkVO : groupEstimatedWorkVOList) {
+                    List<String> data1 = new ArrayList<>();
+                    data1.add(groupEstimatedWorkVO.getProjectCode() == null?"":groupEstimatedWorkVO.getProjectCode().toString());
+                    data1.add(groupEstimatedWorkVO.getProjectName() == null?"":groupEstimatedWorkVO.getProjectName());
+                    data1.add(groupEstimatedWorkVO.getGroupName() == null?"":groupEstimatedWorkVO.getGroupName());
+                    data1.add(groupEstimatedWorkVO.getEstimatedWorkTime() != null?groupEstimatedWorkVO.getEstimatedWorkTime().toString():"");
+                    data1.add(groupEstimatedWorkVO.getWorkTime() != null?groupEstimatedWorkVO.getWorkTime().toString():"");
+                    exportList.add(data1);
+                }
+            }
+        }
+        //String fileName = "项目任务报表_"+System.currentTimeMillis();
+        String fileName = "预估工时表"+System.currentTimeMillis();
+        try {
+            return excelExportService.exportGeneralExcelByTitleAndList(wxCorpInfo,fileName, exportList, path);
+        } catch (Exception e) {
+            e.printStackTrace();
+            httpRespMsg.setError(e.getMessage());
+        }
+        return httpRespMsg;
+    }
+
     @Override
     public HttpRespMsg getAllProjectCost(Integer pageIndex, Integer pageSize, Integer projectId, HttpServletRequest request) {
         User user = userMapper.selectById(request.getHeader("Token"));
@@ -11321,16 +11493,22 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
 
         int dayCount = WorkDayCalculateUtils.getWorkDaysCountInRange(startDate, endDate, 0);//应报工时天数
 
+        List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", 936));
+
         for (Department department : departments) {
             LaborHourRateVo laborHourRateVo = new LaborHourRateVo();
             laborHourRateVo.setRoot_id(department.getDepartmentId());
             laborHourRateVo.setDepartment_name(department.getDepartmentName());
+
             ArrayList<Integer> deptIds = new ArrayList<>();
-            setDeptIdList(department.getDepartmentId(),deptIds);
+
+//            setDeptIdList(department.getDepartmentId(),deptIds);
+            setSubDepts(department,departmentList,deptIds);
             deptIds.add(department.getDepartmentId());
             laborHourRateVo.setChild_ids(deptIds);
             //查询该公司下某头部部门及子部门在四种项目下的工时之和,某个时间段内
             List<Report> reportList= reportMapper.getSumWorkingTime(deptIds,startDate,endDate);
+
             ArrayList<Report> reports = new ArrayList<>();//按时填报的report
             for (Report report : reportList) {
                 LocalDate createDate = report.getCreateDate();
@@ -11354,34 +11532,91 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 String inactiveDate = user.getInactiveDate().format(formatter);
                 inActiveDays+=WorkDayCalculateUtils.getWorkDaysCountInRange(startDate,inactiveDate,0);
             }
+
             //-- 查询 有多少个  入职时间早于起始时间 并且是在职的员工
             int isActiveCount=userMapper.getIsActiveCount(deptIds,startDate,endDate);
 
+            //-- 查询 有多少个  入职时间晚于起始时间 并且在这段时间离职的员工
+            List<User> inActiveBewttenStartAndEndList=userMapper.getInActiveBewttenStartAndEndList(deptIds,startDate,endDate);
+            //获取入职时间晚于起始时间 并且在这段时间离职的员工在此期间工作多少天
+            for (User user : inActiveBewttenStartAndEndList) {
+                DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+                String inactiveDate = user.getInactiveDate().format(formatter);
+                String inductionDate = user.getInductionDate().format(formatter);
+                inActiveDays+=WorkDayCalculateUtils.getWorkDaysCountInRange(inductionDate,inactiveDate,0);
+            }
+
             laborHourRateVo.setWorking_time(timeSum);
             laborHourRateVo.setDate_count(dayCount);
             laborHourRateVo.setCount(isActiveCount);
-            laborHourRateVo.setTotal_time((long) (inActiveList.size()*8*inActiveDays+isActiveCount*8*dayCount));//应报工时还少了在职的加上可能辞职的
-            System.out.println("============="+inActiveDays);
-            System.out.println("============="+isActiveCount);
+            laborHourRateVo.setTotal_time((long) (8*inActiveDays+isActiveCount*8*dayCount));//应报工时还少了在职的加上可能辞职的
+//            System.out.println("============="+inActiveDays);
+//            System.out.println("============="+isActiveCount);
             laborHourRateVo.setDay_time(8);
+
+            BigDecimal bd = new BigDecimal(timeSum/(8*inActiveDays+isActiveCount*8*dayCount)*100);
+            bd = bd.setScale(2, RoundingMode.HALF_UP);
+            laborHourRateVo.setRate(bd.doubleValue());
             laborHourRateVos.add(laborHourRateVo);
         }
+
+        double totalWorkTime = laborHourRateVos.stream().mapToDouble(LaborHourRateVo::getWorking_time).sum();
+        int totalPeopleCount = laborHourRateVos.stream().mapToInt(LaborHourRateVo::getCount).sum();
+        long sumTotalTime = laborHourRateVos.stream().mapToLong(LaborHourRateVo::getTotal_time).sum();
+        LaborHourRateVo laborHourRateVo = new LaborHourRateVo();
+        laborHourRateVo.setDepartment_name("合计");
+        laborHourRateVo.setWorking_time(totalWorkTime);
+        laborHourRateVo.setCount(totalPeopleCount);
+        laborHourRateVo.setTotal_time(sumTotalTime);
+        laborHourRateVo.setDay_time(8);
+        laborHourRateVo.setDate_count(dayCount);
+
+        BigDecimal bd = new BigDecimal(totalWorkTime/sumTotalTime*100);
+        bd = bd.setScale(2, RoundingMode.HALF_UP);
+        laborHourRateVo.setRate(bd.doubleValue());
+
+        laborHourRateVos.add(laborHourRateVo);
+
         HttpRespMsg msg = new HttpRespMsg();
         msg.setData(laborHourRateVos);
         return msg;
     }
 
+    @Override
+    public HttpRespMsg getProjectFillTime(HttpServletRequest request, Integer projectId) {
+        //待审核和已通过的总工时
+        Report report = reportMapper.selectOne(new QueryWrapper<Report>().select("sum(working_time) as working_time").eq("project_id", projectId).and(i->i.eq("state", 0).or().eq("state", 1)));
+        Report waiting = reportMapper.selectOne(new QueryWrapper<Report>().select("sum(working_time) as working_time").eq("project_id", projectId).eq("state", 0));
+        HashMap map = new HashMap();
+        map.put("total",report == null?0:report.getWorkingTime());
+        map.put("waiting",waiting==null?0:waiting.getWorkingTime());
+        HttpRespMsg msg = new HttpRespMsg();
+        msg.setData(map);
+        return msg;
+    }
 
-    public void setDeptIdList(Integer departmentId,List<Integer> deptIds){
-        LambdaQueryWrapper<Department> lqw = new LambdaQueryWrapper<>();
-        lqw.eq(Department::getSuperiorId,departmentId);
-        List<Department> departmentList = departmentMapper.selectList(lqw);
 
-        if (departmentList!=null&&departmentList.size()>0){
+//    public void setDeptIdList(Integer departmentId,List<Integer> deptIds){
+//        LambdaQueryWrapper<Department> lqw = new LambdaQueryWrapper<>();
+//        lqw.eq(Department::getSuperiorId,departmentId);
+//        List<Department> departmentList = departmentMapper.selectList(lqw);
+//
+//        if (departmentList!=null&&departmentList.size()>0){
+//            List<Integer> collect = departmentList.stream().map(Department::getDepartmentId).collect(Collectors.toList());
+//            deptIds.addAll(collect);
+//            for (Integer id : collect) {
+//                setDeptIdList(id,deptIds);
+//            }
+//        }
+//    }
+
+    public void setSubDepts(Department dp, List<Department> list,List<Integer> deptIds) {
+        List<Department> departmentList = list.stream().filter(l -> dp.getDepartmentId().equals(l.getSuperiorId())).collect(Collectors.toList());;
+        if (departmentList.size() > 0) {
             List<Integer> collect = departmentList.stream().map(Department::getDepartmentId).collect(Collectors.toList());
             deptIds.addAll(collect);
-            for (Integer id : collect) {
-                setDeptIdList(id,deptIds);
+            for (Department department : departmentList) {
+                setSubDepts(department,list,deptIds);
             }
         }
     }

+ 17 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -6952,6 +6952,23 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             TimeType timeType = timeTypeMapper.selectById(user.getCompanyId());
             //获取日报详情
             List<Report> reportList = reportMapper.selectList(new QueryWrapper<Report>().eq("creator_id", userId).between("create_date", startDate, endDate).orderByAsc("create_date"));
+            //已填日报设置审核人姓名
+            if (reportList.size() > 0) {
+                List<String> collect = reportList.stream().map(Report::getProjectAuditorId).distinct().collect(Collectors.toList());
+                if (collect.size() > 0) {
+                    List<User> auditorUserList = userMapper.selectList(new QueryWrapper<User>().in("id", collect));
+                    reportList.forEach(r->{
+                        if (r.getProjectAuditorId() != null) {
+                            Optional<User> first = auditorUserList.stream().filter(au -> au.getId().equals(r.getProjectAuditorId())).findFirst();
+                            if (first.isPresent()) {
+                                r.setProjectAuditorName(first.get().getName());
+                            }
+                        }
+                    });
+                }
+            }
+
+
             List<Integer> collect = reportList.stream().map(Report::getProjectId).collect(Collectors.toList());
             //加载这段时间内已填报过的项目
             List<Project> projectList = new ArrayList<>();

+ 26 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java

@@ -1819,6 +1819,32 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
 
         return msg;
     }
+
+    @Override
+    public HttpRespMsg setActiveByIds(String ids, int isActive) {
+        HttpRespMsg msg = new HttpRespMsg();
+        if (!StringUtils.isEmpty(ids)){
+            List<String> array = JSONArray.parseArray(ids, String.class);
+            if (array.size()>0){
+                //判断人数
+                String token = request.getHeader("Token");
+                User user = userMapper.selectById(token);
+                if (isActive == 1 && userMapper.selectCount(new QueryWrapper<User>()
+                        .eq("company_id", user.getCompanyId()).eq("is_active", 1)) >=
+                        (companyMapper.selectById(user.getCompanyId()).getStaffCountMax())) {
+                    //msg.setError("公司人员已达上限,无法启用");
+                    msg.setError(MessageUtils.message("register.fullError"));
+                } else {
+                    userMapper.updateActiveByIds(array,isActive);
+                }
+            }else {
+                msg.setError(MessageUtils.message("other.peopleNull"));
+            }
+        }else {
+            msg.setError(MessageUtils.message("other.peopleNull"));
+        }
+        return msg;
+    }
 //
 //    private String getAccessToken(String code) {
 //        String accessToken = "";
@@ -3369,7 +3395,6 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
         }
         return new HttpRespMsg();
     }
-
     public LdapContext adLogin() {
 
         LdapContext ldapContext = null;

+ 12 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportMapper.xml

@@ -969,14 +969,23 @@
     </select>
 
     <select id="getSumWorkingTime" resultType="com.management.platform.entity.Report">
-        SELECT * FROM report r
+        SELECT r.create_time,r.create_date,r.working_time FROM report r
         LEFT JOIN project p
         ON r.project_id=p.id
-        WHERE p.company_id=936 AND p.category IN(168,169,171,172)
-        AND r.dept_id IN
+        WHERE
+        r.dept_id IN
         <foreach collection="deptIds" item="id" open="(" close=")" separator=",">
             #{id}
         </foreach>
+        AND p.company_id=936 AND p.category IN(168,169,171,172)
         AND r.create_date BETWEEN #{startDate} AND #{endDate}
     </select>
+
+    <select id="getReallWorkingTimeByProjectId" resultType="java.lang.Double">
+        SELECT SUM(working_time) as reallyWorkingTime FROM report WHERE project_id = #{id}
+    </select>
+
+    <select id="getReallWorkingTimeByProjectAndGroup" resultType="java.lang.Double">
+        SELECT SUM(working_time) as reallyWorkingTime FROM report WHERE project_id = #{projectId} AND group_id = #{taskGroupId}
+    </select>
 </mapper>

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

@@ -10,11 +10,12 @@
         <result column="name" property="name" />
         <result column="incharger_id" property="inchargerId" />
         <result column="wbs_code" property="wbsCode" />
+        <result column="man_day" property="manDay" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, project_id, task_group_code, name, incharger_id, wbs_code
+        id, project_id, task_group_code, name, incharger_id, wbs_code, man_day
     </sql>
 
 </mapper>

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

@@ -193,7 +193,7 @@
             #{id}
         </foreach>
         AND r.create_date BETWEEN #{startDate} AND #{endDate})
-        AND is_active=1 AND (inactive_date >= #{endDate} OR inactive_date is null) AND induction_date &lt;= #{startDate}
+        AND is_active=1 AND induction_date &lt;= #{startDate}
     </select>
 
     <select id="getInActiveList" resultType="com.management.platform.entity.User">
@@ -210,4 +210,26 @@
         AND r.create_date BETWEEN #{startDate} AND #{endDate})
         AND inactive_date BETWEEN #{startDate} AND #{endDate} and induction_date &lt;= #{startDate}
     </select>
+
+    <select id="getInActiveBewttenStartAndEndList" resultType="com.management.platform.entity.User">
+        SELECT user.* FROM user
+        WHERE id in
+              (SELECT DISTINCT r.creator_id  FROM report r
+               LEFT JOIN project p
+               ON r.project_id=p.id
+               WHERE p.company_id=936 AND p.category IN(168,169,171,172)
+               AND r.dept_id IN
+                <foreach collection="deptIds" item="id" open="(" close=")" separator=",">
+                    #{id}
+                </foreach>
+               AND r.create_date BETWEEN #{startDate} AND #{endDate})
+          AND induction_date BETWEEN #{startDate} AND #{endDate} AND inactive_date BETWEEN #{startDate} AND #{endDate}
+    </select>
+
+    <update id="updateActiveByIds">
+        update user set is_active=1 WHERE id IN
+        <foreach collection="array" item="id" open="(" close=")" separator=",">
+            #{id}
+        </foreach>
+    </update>
 </mapper>

+ 42 - 2
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/DepartmentController.java

@@ -4,9 +4,12 @@ package com.management.platform.controller;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.management.platform.entity.Department;
-import com.management.platform.entity.User;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.management.platform.entity.*;
 import com.management.platform.entity.vo.DepartmentVO;
+import com.management.platform.mapper.PlanMapper;
+import com.management.platform.mapper.PlanProcedureTotalMapper;
+import com.management.platform.mapper.ReportMapper;
 import com.management.platform.mapper.UserMapper;
 import com.management.platform.service.DepartmentService;
 import com.management.platform.util.HttpRespMsg;
@@ -18,6 +21,7 @@ import org.springframework.web.bind.annotation.RestController;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -37,6 +41,12 @@ public class DepartmentController {
     private HttpServletRequest request;
     @Resource
     private UserMapper userMapper;
+    @Resource
+    private ReportMapper reportMapper;
+    @Resource
+    private PlanMapper planMapper;
+    @Resource
+    private PlanProcedureTotalMapper planProcedureTotalMapper;
     /**
      * 获取带有层级的部门列表
      */
@@ -175,5 +185,35 @@ public class DepartmentController {
     public  HttpRespMsg getMyGroups(HttpServletRequest request){
         return  departmentService.getMyGroups(request);
     }
+
+    @RequestMapping("getMyManageUserList")
+    public HttpRespMsg getMyManageUserList(HttpServletRequest request, String date){
+        HttpRespMsg httpRespMsg=new HttpRespMsg();
+        User user = userMapper.selectById(request.getHeader("token"));
+        //检查是否单位部门负责人
+        List<Integer> manageDeptList = departmentService.getAllManagedDeptIdList(user, departmentService.list());
+        //查找相关计划
+        if (manageDeptList.size() > 0) {
+            List<Plan> planList = planMapper.selectList(new QueryWrapper<Plan>().in("station_id", manageDeptList));
+            List<Integer> collect = planList.stream().map(Plan::getId).collect(Collectors.toList());
+            if (collect.size() > 0) {
+                List<Report> reportList = reportMapper.selectList(new QueryWrapper<Report>().select("distinct creator_id").in("plan_id", collect).eq("create_date", date));
+                if (reportList.size() > 0) {
+                    List<String> userIds = reportList.stream().map(Report::getCreatorId).collect(Collectors.toList());
+                    List<User> userList = userMapper.selectList(new QueryWrapper<User>().select("id,name,work_type_id,work_type").in("id", userIds));
+                    httpRespMsg.data = userList;
+                }
+            }
+        }
+        if (httpRespMsg.data == null) {
+            //取他自己
+            httpRespMsg.data = userMapper.selectList(new QueryWrapper<User>().select("id,name,work_type_id,work_type").eq("id", user.getId()));
+        }
+
+        List<User> userList = userMapper.selectList(null);
+        List<User> collect = userList.stream().filter(item -> item.getDepartmentId().equals(user.getDepartmentId())).collect(Collectors.toList());
+        httpRespMsg.setData(collect);
+        return httpRespMsg;
+    }
 }
 

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

@@ -31,8 +31,8 @@ public class PlanProcedureTotalController {
     }
 
     @RequestMapping("/getFillProcedureDetail")
-    public HttpRespMsg getFillProcedureDetail(Integer id){
-        return planProcedureTotalService.getFillProcedureDetail(id);
+    public HttpRespMsg getFillProcedureDetail(Integer id, String createDate){
+        return planProcedureTotalService.getFillProcedureDetail(id, createDate);
     }
 }
 

+ 10 - 8
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/ReportController.java

@@ -133,14 +133,16 @@ public class ReportController {
 //    }
 //
 //
-//    /**
-//     * 根据时间 获取本人报告信息 以及工时
-//     * date 日期 格式yyyy-mm-dd
-//     */
-//    @RequestMapping("/getReport")
-//    public HttpRespMsg getReport(@RequestParam String date) {
-//        return reportService.getReport(date, request);
-//    }
+    /**
+     * 根据时间 获取本人报告信息 以及工时
+     * date 日期 格式yyyy-mm-dd
+     */
+    @RequestMapping("/getReportById")
+    public HttpRespMsg getReportById(@RequestParam Integer id) {
+        HttpRespMsg msg = new HttpRespMsg();
+        msg.data = reportService.getById(id);
+        return msg;
+    }
 //
 //    @RequestMapping("/getCardTime")
 //    public HttpRespMsg getCardTime(@RequestParam String date) {

+ 2 - 3
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/entity/PlanProcedureTotal.java

@@ -6,7 +6,6 @@ import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableField;
 import java.io.Serializable;
 import java.util.List;
-import java.util.Map;
 
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -18,7 +17,7 @@ import lombok.experimental.Accessors;
  * </p>
  *
  * @author Seyason
- * @since 2023-07-29
+ * @since 2023-11-20
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -54,6 +53,7 @@ public class PlanProcedureTotal extends Model<PlanProcedureTotal> {
     @TableField("total_working_hours")
     private Double totalWorkingHours;
 
+
     @TableField(exist = false)
     private ProdProcedure prodProcedure;
 
@@ -77,7 +77,6 @@ public class PlanProcedureTotal extends Model<PlanProcedureTotal> {
 
     @TableField(exist = false)
     private boolean cancellationReceive;
-
     @Override
     protected Serializable pkVal() {
         return this.id;

+ 1 - 2
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/entity/ProdProcedureTeam.java

@@ -20,7 +20,7 @@ import org.springframework.format.annotation.DateTimeFormat;
  * </p>
  *
  * @author Seyason
- * @since 2023-08-31
+ * @since 2023-11-20
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -102,7 +102,6 @@ public class ProdProcedureTeam extends Model<ProdProcedureTeam> {
     @TableField("steel_num_array")
     private String steelNumArray;
 
-
     @Override
     protected Serializable pkVal() {
         return this.id;

+ 17 - 1
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/entity/Report.java

@@ -21,7 +21,7 @@ import org.springframework.format.annotation.DateTimeFormat;
  * </p>
  *
  * @author Seyason
- * @since 2023-08-31
+ * @since 2023-11-21
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -134,6 +134,22 @@ public class Report extends Model<Report> {
     @TableField("steel_num_array")
     private String steelNumArray;
 
+    /**
+     * 完成件数;支持小数
+     */
+    @TableField("finish_num")
+    private Double finishNum;
+
+    //是否完工
+    @TableField(exist = false)
+    private Boolean isFinish;
+
+    /**
+     * 1-进行中,2-已完工,3-已中止(员工自己中止或者管理端中止)
+     */
+    @TableField("status")
+    private Integer status;
+
 
     @Override
     protected Serializable pkVal() {

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

@@ -16,5 +16,5 @@ public interface PlanProcedureTotalService extends IService<PlanProcedureTotal>
 
     HttpRespMsg getReportForWorkList(String vehicleNum);
 
-    HttpRespMsg getFillProcedureDetail(Integer id);
+    HttpRespMsg getFillProcedureDetail(Integer id, String createDate);
 }

+ 2 - 1
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/ReportService.java

@@ -27,7 +27,7 @@ public interface ReportService extends IService<Report> {
 //
 //    HttpRespMsg exportReport(@RequestParam String startDate, @RequestParam String endDate, Integer projectId,Integer stateKey,Integer departmentId, HttpServletRequest request);
 //
-//    HttpRespMsg getReport(String date, HttpServletRequest request);
+    HttpRespMsg getReport(String date, HttpServletRequest request);
 //
 //    HttpRespMsg getCardTime(String date, HttpServletRequest request);
 //
@@ -140,4 +140,5 @@ public interface ReportService extends IService<Report> {
     HttpRespMsg exportDpetStatisticsProgressList(String deptId, String userId, String startDate, String endDate);
 
     HttpRespMsg exportReport(String startDate, String endDate, Integer planId, Integer stateKey, Integer departmentId, HttpServletRequest request);
+
 }

+ 32 - 6
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/PlanProcedureTotalServiceImpl.java

@@ -6,14 +6,16 @@ import com.management.platform.mapper.*;
 import com.management.platform.service.PlanProcedureTotalService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.management.platform.util.HttpRespMsg;
-import org.apache.logging.log4j.util.Chars;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * <p>
@@ -42,6 +44,8 @@ public class PlanProcedureTotalServiceImpl extends ServiceImpl<PlanProcedureTota
     private ProdProcedureTeamMapper prodProcedureTeamMapper;
     @Resource
     private PlanSteelStampNumberMapper planSteelStampNumberMapper;
+    @Resource
+    private ReportMapper reportMapper;
 
     @Override
     public HttpRespMsg getReportForWorkList(String vehicleNum) {
@@ -73,6 +77,7 @@ public class PlanProcedureTotalServiceImpl extends ServiceImpl<PlanProcedureTota
                 planMap.put("task_name", map.get("task_name"));
                 planMap.put("task_change_notice_num", map.get("task_change_notice_num"));
                 planMap.put("plan_type", map.get("plan_type"));
+                planMap.put("num", map.get("num"));
                 planMap.put("procedureList", procedureList);
                 resultList.add(planMap);
             } else {
@@ -82,10 +87,10 @@ public class PlanProcedureTotalServiceImpl extends ServiceImpl<PlanProcedureTota
             HashMap procedureMap = new HashMap();
             procedureMap.put("id", map.get("id"));
             procedureMap.put("procedure_name", map.get("procedure_name"));
-            procedureMap.put("work_time", map.get("work_time"));
-            procedureMap.put("job_of_money", map.get("job_of_money"));
-            procedureMap.put("progress", map.get("progress"));
+            procedureMap.put("work_time", map.get("total_working_hours"));
+            procedureMap.put("job_of_money", map.get("total_wages"));
             procedureMap.put("checker_name", map.get("checker_name"));
+            procedureMap.put("num", map.get("num"));
             procedureMap.put("checker_id", map.get("checker_id"));
             procedureMap.put("check_type", map.get("check_type"));
             procedureMap.put("plan_check_type", map.get("plan_check_type"));
@@ -97,8 +102,11 @@ public class PlanProcedureTotalServiceImpl extends ServiceImpl<PlanProcedureTota
     }
 
     @Override
-    public HttpRespMsg getFillProcedureDetail(Integer id) {
+    public HttpRespMsg getFillProcedureDetail(Integer id, String createDate) {
+        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        if (createDate == null) createDate = LocalDate.now().format(dtf);
         HttpRespMsg msg = new HttpRespMsg();
+        String token = request.getHeader("TOKEN");
         HashMap prodProcedureTeam = prodProcedureTeamMapper.getFillProcedureDetail(id);
         Integer planId = Integer.valueOf(String.valueOf(prodProcedureTeam.get("plan_id")));
         List<PlanSteelStampNumber> planSteelStampNumberList = planSteelStampNumberMapper.selectList(new QueryWrapper<PlanSteelStampNumber>().eq("plan_id", planId));
@@ -151,10 +159,28 @@ public class PlanProcedureTotalServiceImpl extends ServiceImpl<PlanProcedureTota
                 }
             }
         }
-        prodProcedureTeam.put("planSteelStampNumberList",list.stream().distinct().sorted());
+
         if (prodProcedureTeam == null) {
             msg.setError("找不到该数据");
         } else {
+            Stream<String> sorted = list.stream().distinct().sorted();
+            List<String> collect = sorted.collect(Collectors.toList());
+            //如果钢印号有其他人已经填过了,就不显示
+            List<Report> reportList = reportMapper.selectList(new QueryWrapper<Report>().select("id", "steel_num_array").eq("plan_id", planId));
+            List<String> filledSteelNumList=new ArrayList<>();
+
+            for (Report report : reportList) {
+                //自己当天填的不算
+                if(dtf.format(report.getCreateDate()).equals(createDate)&&report.getCreatorId().equals(token)){
+                    continue;
+                }
+                if(!StringUtils.isEmpty(report.getSteelNumArray())){
+                    String[] split = report.getSteelNumArray().split(",");
+                    filledSteelNumList.addAll(Arrays.asList(split));
+                }
+            }
+            List<String> collect1 = collect.stream().filter(item -> !filledSteelNumList.contains(item)).collect(Collectors.toList());
+            prodProcedureTeam.put("planSteelStampNumberList",collect1);
             msg.setData(prodProcedureTeam);
         }
         return msg;

+ 77 - 247
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -28,6 +28,7 @@ import java.text.NumberFormat;
 import java.text.SimpleDateFormat;
 import java.time.*;
 import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeParseException;
 import java.time.temporal.ChronoUnit;
 import java.util.*;
 import java.util.concurrent.Executor;
@@ -125,10 +126,22 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         Integer companyId = user.getCompanyId();
         report.setCreatorId(token);
         LocalDate today = LocalDate.now();
-        report.setCreateDate(today);
+        LocalDate targetDate = null;
+        if (report.getId() == null) {
+            report.setCreateDate(today);
+            targetDate = today;
+        } else {
+            Report report1 = reportMapper.selectById(report.getId());
+            targetDate = report1.getCreateDate();
+            report.setCreateDate(report1.getCreateDate());
+        }
         report.setCompanyId(companyId);
 
         Plan plan = planMapper.selectById(report.getPlanId());
+        if (plan.getNum() == 0) {
+            httpRespMsg.setError("该计划件数为0,无法报工");
+            return httpRespMsg;
+        }
         if (plan.getPlanType() == 0) {
             //普通计划检查产品是否存在
             Product product = productMapper.selectById(plan.getProductId());
@@ -139,65 +152,59 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         }
 
         //检查今日该员工的该工序是否已经有报工
-        Report todayReport = reportMapper.selectOne(new QueryWrapper<Report>().eq("creator_id", token).eq("user_procedure_team_id", report.getUserProcedureTeamId()).eq("create_date", today));
+        Report todayReport = reportMapper.selectOne(new QueryWrapper<Report>().eq("creator_id", token).eq("user_procedure_team_id", report.getUserProcedureTeamId()).eq("create_date", targetDate));
         //计算工作时长
         ProdProcedureTeam prodProcedureTeam = prodProcedureTeamMapper.selectById(report.getUserProcedureTeamId());
+        //总计划任务的工序中有总工时和总工价
+        PlanProcedureTotal planProcedureTotal = planProcedureTotalMapper.selectOne(new QueryWrapper<PlanProcedureTotal>().eq("plan_id", report.getPlanId()).eq("prod_procedure_id", report.getProdProcedureId()));
         double curReportTime = 0.0;
-        //查找上一次该工序的报工
-        Integer lastProgress = 0;
-        Report beforeTodayReport = reportMapper.selectOne(new QueryWrapper<Report>().eq("creator_id", token).eq("user_procedure_team_id", report.getUserProcedureTeamId()).lt("create_date", today).orderByDesc("create_date").last("limit 1"));
-        //查找今天之前是否有报工,有的话取上次报工进度,没有的话取分配下来时的报工进度
-        if (beforeTodayReport != null) {
-            if (report.getProgress() <= beforeTodayReport.getProgress()) {
-                httpRespMsg.setError("进度必须大于上次报工进度("+beforeTodayReport.getProgress()+"%)");
-                return httpRespMsg;
-            }
-            //去上次报工的进度
-            lastProgress = beforeTodayReport.getProgress();
-        } else {
-            //今天之前没有报过工
-            if (todayReport == null) {
-                lastProgress = prodProcedureTeam.getProgress();
-                if (report.getProgress() <= lastProgress) {
-                    httpRespMsg.setError("进度必须大于上次报工进度("+lastProgress+"%)");
-                    return httpRespMsg;
-                }
-            } else {
-                //今天报过工了,prodProcedureTeam中的是报过的工时,应该从0开始算才对
-                lastProgress = 0;
-            }
-            if (report.getProgress() <= lastProgress) {
-                httpRespMsg.setError("进度必须大于上次报工进度("+lastProgress+"%)");
-                return httpRespMsg;
-            }
+
+        //核算本次填报的件数是否合法
+        List<Report> allFileProcReportList = reportMapper.selectList(new QueryWrapper<Report>().eq("plan_id", report.getPlanId()).eq("prod_procedure_id", report.getProdProcedureId()));
+        allFileProcReportList.forEach(all->{
+            System.out.println(all.getCreatorId()+" "+all.getCreateDate()+" "+all.getFinishNum());
+        });
+        final LocalDate fDate = targetDate;
+        double allFileProcNum = allFileProcReportList.stream().filter(item->!(item.getCreatorId().equals(token) && item.getCreateDate().isEqual(fDate))).mapToDouble(Report::getFinishNum).sum();
+        if (allFileProcNum + report.getFinishNum() > plan.getNum()) {
+            httpRespMsg.setError("填报的件数超过了剩余可填报件数:"+(plan.getNum() - allFileProcNum)+", 请联系班组长协调解决");
+            return httpRespMsg;
         }
-        int addProgress = report.getProgress() - lastProgress;
-        curReportTime = (prodProcedureTeam.getWorkTime() * (addProgress)/100);
+//        double addNum = report.getFinishNum() - lastFinishNum;
+        Integer num = plan.getNum();//总件数
+        double addPercent = report.getFinishNum() / num;
+//        curReportTime = (prodProcedureTeam.getWorkTime() * (addProgress)/100);
         //按比例获取本次进度的工钱
-        BigDecimal earnMoney = prodProcedureTeam.getJobOfMoney().multiply(new BigDecimal(addProgress)).divide(new BigDecimal(100));
+//        BigDecimal earnMoney = prodProcedureTeam.getJobOfMoney().multiply(new BigDecimal(addProgress)).divide(new BigDecimal(100));
+        //新版计算报工的工时和价钱;根据填报件数的占比计算工时和价钱
+        double earnMoney = planProcedureTotal.getTotalWages() * addPercent;
+        curReportTime = planProcedureTotal.getTotalWorkingHours() * addPercent;
         report.setWorkingTime(curReportTime);//本次报工的工时数
-        report.setCost(earnMoney);//本次报工的成本
+        report.setCost(new BigDecimal(earnMoney));//本次报工的成本
         report.setDeptId(plan.getStationId());
         if (plan.getPlanType() == 0) {
             report.setProductId(plan.getProductId());
         }
 
-        if (report.getProgress() == 100) {
+        if (report.getIsFinish() != null && report.getIsFinish().booleanValue()) {
             //设置质检人
             if (report.getCheckType() == 0) {
                 report.setCheckerId(user.getId());
             }
             prodProcedureTeam.setCheckerId(report.getCheckerId());
+
         }
         prodProcedureTeam.setUpdateTime(LocalDateTime.now());
-        prodProcedureTeam.setProgress(report.getProgress());
+//        prodProcedureTeam.setProgress(report.getProgress());
         //更新填写的钢印号
         prodProcedureTeam.setSteelNumArray(report.getSteelNumArray());
-        if (report.getProgress() == 100) {
+        if (report.getIsFinish() != null && report.getIsFinish().booleanValue()) {
             //完工了
             prodProcedureTeam.setStatus(2);//顺利完工
+            report.setStatus(2);//顺利完工
         } else if (report.getIsTerminated() != null && report.getIsTerminated().booleanValue()) {
             prodProcedureTeam.setStatus(3);//中止
+            report.setStatus(3);//中止
         }
 
         if (todayReport == null) {
@@ -434,27 +441,26 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         }
         return allList;
     }
-//
-//    //获取本人某天工作时间和已提交的报告
-//    @Override
-//    public HttpRespMsg getReport(String date, HttpServletRequest request) {
-//        HttpRespMsg httpRespMsg = new HttpRespMsg();
-//        try {
-//            String userId = request.getHeader("Token");
-//            Integer companyId = userMapper.selectById(userId).getCompanyId();
-//            Company company = companyMapper.selectById(companyId);
-//            Map<String, Object> resultMap = new HashMap<>();
-//            //获取某日本人的所有日志
-//            List<Report> reports = reportMapper.selectList(new QueryWrapper<Report>()
-//                    .eq("creator_id", userId)
-//                    .eq("create_date", LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd"))));
+
+    //获取本人某天工作时间和已提交的报告
+    @Override
+    public HttpRespMsg getReport(String date, HttpServletRequest request) {
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        try {
+            String userId = request.getHeader("Token");
+            Integer companyId = userMapper.selectById(userId).getCompanyId();
+            Company company = companyMapper.selectById(companyId);
+            Map<String, Object> resultMap = new HashMap<>();
+            //获取某日本人的所有日志
+            List<Report> reports = reportMapper.selectList(new QueryWrapper<Report>()
+                    .eq("creator_id", userId)
+                    .eq("create_date", LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd"))));
 //            List<Integer> integerList = reports.stream().map(Report::getProjectId).collect(Collectors.toList());
 //            List<Project> allProjectList = projectMapper.selectList(new QueryWrapper<Project>()
 //                    .eq("company_id", userMapper.selectById(userId).getCompanyId()));
 //            List<SubProject> subProjectList = integerList.size() > 0?subProjectMapper.selectList(new QueryWrapper<SubProject>().in("project_id",integerList)):new ArrayList<>();
 //            List<ProjectAuditor> auditorList = integerList.size() > 0?projectAuditorMapper.selectList(new QueryWrapper<ProjectAuditor>().in("project_id", integerList)): new ArrayList<>();
 //
-//            ;
 //
 ////            List<UserRecentTask> taskList = integerList.size() > 0?userRecentTaskMapper.selectList(new QueryWrapper<UserRecentTask>().in("project_id", integerList).orderByDesc("id")):new ArrayList<>();
 //            List<Profession> professions = professionMapper.selectList(new QueryWrapper<Profession>().eq("company_id", companyId));
@@ -462,204 +468,28 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
 //            List<ReportExtraDegree> degreeList = reportExtraDegreeMapper.selectList(new QueryWrapper<ReportExtraDegree>().eq("company_id", companyId));
 //            List<TaskGroup> taskGroups = integerList.size() > 0?taskGroupMapper.selectList(new QueryWrapper<TaskGroup>().in("project_id", integerList)):new ArrayList<>();
 //            List<Stages> stagesList = integerList.size() > 0?stagesMapper.selectList(new QueryWrapper<Stages>().in("project_id", integerList)) : new ArrayList<>();
-//            //获取当前项目的子项目列表,任务分组,任务列表,项目相关维度列表
-//            reports.forEach(r->{
-//                r.setSubProjectList(subProjectList.stream().filter(s->s.getProjectId().equals(r.getProjectId())).collect(Collectors.toList()));
-//                r.setTaskList(taskMapper.recentSimpleList(r.getProjectId(), userId));
-//                //获取当前项目的工程专业进度
-//                List<ReportProfessionProgress> progressList = reportProfessionProgressService.list(new QueryWrapper<ReportProfessionProgress>().eq("report_id", r.getId()));
-//                //去掉当前项目上已经不存在的专业
-//                List<ProjectProfession> projectProfessions = projectProfessionMapper.selectList(new QueryWrapper<ProjectProfession>().eq("project_id", r.getProjectId()));
-//                progressList = progressList.stream().filter(p->projectProfessions.stream().anyMatch(pp->pp.getProfessionId().equals(p.getProfessionId()))).collect(Collectors.toList());
-//                progressList.stream().forEach(p->{
-//                    p.setProfessionName(professions.stream().filter(m->m.getId().equals(p.getProfessionId())).findFirst().get().getName());
-//                });
-//                r.setProfessionProgressList(progressList);
-//                //获取任务阶段列表
-//                if (company.getPackageProject() == 1 && r.getGroupId() != null && r.getGroupId() != 0) {
-//                    r.setStages(stagesList.stream().filter(s->s.getGroupId() !=null && s.getGroupId().equals(r.getGroupId())).collect(Collectors.toList()));
-//                }
-//                //处理图片
-//                if (!StringUtils.isEmpty(r.getPicStr()) && !r.getPicStr().equals("@")) {
-//                    JSONArray array = JSONArray.parseArray(r.getPicStr().replaceAll("@", ","));
-//                    List<String> list = new ArrayList<>();
-//                    for (int i=0;i<array.size(); i++) {
-//                        String picName = array.getString(i);
-//                        if (!picName.contains(".")) {
-//                            picName += ".jpg";
-//                        }
-//                        list.add("/upload/"+picName);
-//                    }
-//                    r.setPics(list);
-//                }
-//                if (r.getMultiWorktime() == 1) {
-//                    //设置多个工时情况下的报告列表
-//                    String timeStr = r.getContent();
-//                    if (timeStr != null) {
-//                        JSONArray parse = JSONArray.parseArray(timeStr);
-//                        List<WorktimeItem> list = new ArrayList<>();
-//                        for (int i=0;i<parse.size(); i++) {
-//                            JSONObject obj = parse.getJSONObject(i);
-//                            list.add(JSONObject.toJavaObject(obj, WorktimeItem.class));
-//                        }
-//                        r.setWorktimeList(list);
-//                    }
-//                }
 //
-//                //处理维度列表数据
-//                if (timeTypeMapper.selectById(companyId).getCustomDegreeActive() == 1) {
-//                    Project project = allProjectList.stream().filter(p -> p.getId().equals(r.getProjectId())).findFirst().get();
-//                    String associateDegrees = project.getAssociateDegrees();
-//                    List<HashMap> degreeMapList = new ArrayList<>();
-//                    if (associateDegrees != null) {
-//                        String[] split = associateDegrees.split("\\,");
-//                        for (int i=0;i<split.length; i++) {
-//                            HashMap map = new HashMap();
-//                            if (!StringUtils.isEmpty(split[i])) {
-//                                Integer id = Integer.parseInt(split[i]);
-//                                map.put("id", id);
-//                                map.put("name", degreeList.stream().filter(d->d.getId().equals(id)).findFirst().get().getName());
-//                                degreeMapList.add(map);
-//                            }
-//                        }
-//                    }
-//                    r.setDegreeList(degreeMapList);
-//                }
-//                //检查是否是按照任务分组负责人审核
-////                Project curProject = allProjectList.stream().filter(ap->ap.getId().equals(r.getProjectId())).findFirst().get();
-//                int reportAuditType = timeTypeMapper.selectById(companyId).getReportAuditType();
-//                //分组
-//                if (company.getPackageProject() == 1) {
-//                    if (reportAuditType == 0) {
-//                        r.setTaskGroups(taskGroups.stream().filter(tg->tg.getProjectId().equals(r.getProjectId())).collect(Collectors.toList()));
-//                        if (r.getGroupId() != null && r.getGroupId() != 0) {
-//                            Optional<TaskGroup> optinal = taskGroups.stream().filter(tg->tg.getId().equals(r.getGroupId())).findFirst();
-//                            if (optinal.isPresent()) {
-//                                r.setGroupName(optinal.get().getName());
-//                            }
-//                        }
-//                    } else if (reportAuditType == 1 || reportAuditType == 2){
-//                        List<GroupParticipator> groupParticipatorList = groupParticipatorMapper.selectList(new QueryWrapper<GroupParticipator>());
-//                        if (groupParticipatorList.size() > 0) {
-//                            List<Integer> groupIds = groupParticipatorList.stream().map(GroupParticipator::getGroupId).collect(Collectors.toList());
-//                            List<TaskGroup> findGroups = taskGroups.stream().filter(tg->groupIds.contains(tg.getId()) || userId.equals(tg.getInchargerId())).collect(Collectors.toList());
-//                            r.setTaskGroups(findGroups);
-//                            if (r.getGroupId() != null && r.getGroupId() != 0) {
-//                                Optional<TaskGroup> optinal = taskGroups.stream().filter(tg->tg.getId().equals(r.getGroupId())).findFirst();
-//                                if (optinal.isPresent()) {
-//                                    r.setGroupName(optinal.get().getName());
-//                                }
-//                            }
-//                        }
-//                    }
-//                }
-//                //项目的审核人
-//                if (reportAuditType == 0) {
-//                    r.setAuditUserList(auditorList.stream().filter(au->au.getProjectId().equals(r.getProjectId())).collect(Collectors.toList()));
-//                    if (r.getProjectAuditorId() != null) {
-//                        Optional<ProjectAuditor> auItem = auditorList.stream().filter(au->au.getAuditorId().equals(r.getProjectAuditorId())).findFirst();
-//                        if (auItem.isPresent()) {
-//                            r.setProjectAuditorName(auItem.get().getAuditorName());
-//                        }
-//                    }
-//                } else if (reportAuditType == 1 || reportAuditType == 2) {
-//                    if (r.getGroupId() != null && r.getGroupId() != 0) {
-//                        //直接获取分组的负责人作为审核人
-//                        Optional<TaskGroup> tgoup = taskGroups.stream().filter(tg->tg.getId().equals(r.getGroupId())).findFirst();
-//                        if (tgoup.isPresent()) {
-//                            TaskGroup curGroup = tgoup.get();
-//                            if (curGroup.getInchargerId() != null) {
-//                                User user = userMapper.selectById(curGroup.getInchargerId());
-//                                HashMap map = new HashMap();
-//                                map.put("auditorId", user.getId());
-//                                map.put("auditorName", user.getName());
-//                                List list = new ArrayList();
-//                                list.add(map);
-//                                r.setAuditUserList(list);
-//                                if (r.getProjectAuditorId() != null) {
-//                                    r.setProjectAuditorName(user.selectById(r.getProjectAuditorId()).getName());
-//                                }
-//                            }
-//                        }
-//                    }
-//                } else if (reportAuditType == 3) {
-//                    //获取日报对应已经设置好的审核人和抄送人
-//                    ReportAuditorSetting reportAuditorSetting = reportAuditorSettingMapper.selectById(r.getId());
-//                    r.setAuditorSetting(reportAuditorSetting);
-//                    //手机端数据
-//                    if (reportAuditorSetting.getAuditorFirst() != null) {
-//                        User auditorItem = userMapper.selectOne(new QueryWrapper<User>().select("id, name").eq("id", reportAuditorSetting.getAuditorFirst()));
-//                        r.setAuditorFirst(auditorItem);
-//                    }
-//                    if (reportAuditorSetting.getAuditorSec() != null) {
-//                        User auditorItem = userMapper.selectOne(new QueryWrapper<User>().select("id, name").eq("id", reportAuditorSetting.getAuditorSec()));
-//                        r.setAuditorSec(auditorItem);
-//                    }
-//                    if (reportAuditorSetting.getAuditorThird() != null) {
-//                        User auditorItem = userMapper.selectOne(new QueryWrapper<User>().select("id, name").eq("id", reportAuditorSetting.getAuditorThird()));
-//                        r.setAuditorThird(auditorItem);
-//                    }
-//                    if (reportAuditorSetting.getCcUserid() != null) {
-//                        User auditorItem = userMapper.selectOne(new QueryWrapper<User>().select("id, name").eq("id", reportAuditorSetting.getCcUserid()));
-//                        r.setCcUserid(auditorItem);
-//                    }
-//                }
-//
-//            });
 //            resultMap.put("report", reports);
-//            TimeType timeType = timeTypeMapper.selectById(companyId);
-//            if (timeType.getShowDdCardtime() == 1) {
-//                List<UserDingdingTime> dingdingTimes = userDingdingTimeMapper.selectList(new QueryWrapper<UserDingdingTime>()
-//                        .eq("user_id", userId).eq("work_date", date));
-//                if (dingdingTimes.size() > 0) {
-//                    UserDingdingTime time = dingdingTimes.get(0);
-//                    resultMap.put("time", time);
-//                }
-//            }else if(timeType.getSyncFanwei()==1){
-//                List<UserFvTime> userFvTimeList = userFvTimeMapper.selectList(new QueryWrapper<UserFvTime>()
-//                        .eq("user_id", userId).eq("work_date", date));
-//                if (userFvTimeList.size() > 0) {
-//                    UserFvTime time = userFvTimeList.get(0);
-//                    resultMap.put("time", time);
-//                }
-//            } else if (timeType.getShowCorpwxCardtime() == 1) {
-//                User user = userMapper.selectById(userId);
-//                List<UserCorpwxTime> corpwxTimes = userCorpwxTimeMapper.selectList(new QueryWrapper<UserCorpwxTime>()
-//                        .eq("corpwx_userid", user.getCorpwxUserid()).eq("create_date", date));
-//                if (corpwxTimes.size() > 0) {
-//                    UserCorpwxTime time = corpwxTimes.get(0);
-//                    resultMap.put("time", time);
-//                }
-//            }
-//
-//            //顺便返回公司的工作时间设置
-//            resultMap.put("timeType",timeType);
-//            //返回公司的项目工时预警的成本项列表
-//            List<ProjectBasecostSetting> timeBasecostList = new ArrayList<>();
-//            if (company.getPackageProject() == 1) {
-//                timeBasecostList = projectBasecostSettingMapper.selectList(new QueryWrapper<ProjectBasecostSetting>().eq("company_id", companyId).eq("alarm_type", 1));
-//            }
-//            //当天是否是工作日
-//            DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
-//            LocalDate lDate = LocalDate.parse(date, dtf);
-//            boolean isWorkDay = companyId == 817 ? WorkDayCalculateUtils.isWorkDayExceptSaturday(lDate) : WorkDayCalculateUtils.isWorkDay(lDate);
-//            resultMap.put("isWorkDay", isWorkDay);
-//
-//            resultMap.put("timeBasecostList",timeBasecostList);
-//
-//            httpRespMsg.data = resultMap;
-//        } catch (NullPointerException e) {
-//            e.printStackTrace();
-//            //httpRespMsg.setError("验证失败");
-//            httpRespMsg.setError(MessageUtils.message("Company.validationError"));
-//            return httpRespMsg;
-//        } catch (DateTimeParseException e) {
-//            //httpRespMsg.setError("日期格式有误");
-//            httpRespMsg.setError(MessageUtils.message("date.formatError"));
-//            return httpRespMsg;
-//        }
-//        return httpRespMsg;
-//    }
+
+            //当天是否是工作日
+            DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+            LocalDate lDate = LocalDate.parse(date, dtf);
+            boolean isWorkDay = WorkDayCalculateUtils.isWorkDay(lDate);
+            resultMap.put("isWorkDay", isWorkDay);
+
+            httpRespMsg.data = resultMap;
+        } catch (NullPointerException e) {
+            e.printStackTrace();
+            //httpRespMsg.setError("验证失败");
+            httpRespMsg.setError(MessageUtils.message("Company.validationError"));
+            return httpRespMsg;
+        } catch (DateTimeParseException e) {
+            //httpRespMsg.setError("日期格式有误");
+            httpRespMsg.setError(MessageUtils.message("date.formatError"));
+            return httpRespMsg;
+        }
+        return httpRespMsg;
+    }
 //
 //    @Override
 //    public HttpRespMsg getCardTime(String date, HttpServletRequest request) {

+ 1 - 1
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/util/CodeGenerator.java

@@ -92,7 +92,7 @@ public class CodeGenerator {
 
         // 数据源配置
         DataSourceConfig dsc = new DataSourceConfig();
-        dsc.setUrl("jdbc:mysql://47.101.180.183:17089/man_workshop?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8");
+        dsc.setUrl("jdbc:mysql://47.101.180.183:17089/man_workshop_lew?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8");
 //        dsc.setSchemaName("public");
         dsc.setDriverName("com.mysql.cj.jdbc.Driver");
         dsc.setUsername("root");

+ 109 - 0
fhKeeper/formulahousekeeper/management-workshop/src/main/resources/application-devlew.yml

@@ -0,0 +1,109 @@
+server:
+  port: 10090
+  tomcat:
+    uri-encoding: utf-8
+    max-http-form-post-size: -1
+    connection-timeout: 18000000s
+spring:
+  servlet:
+    multipart:
+      # 配置上传文件的大小设置
+      # Single file max size  即单个文件大小
+      max-file-size: 100MB
+      max-request-size: 100MB
+  datasource:
+    driver-class-name: com.mysql.cj.jdbc.Driver
+    url: jdbc:mysql://47.101.180.183:17089/man_workshop_lew?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&useSSL=false
+    username: root
+    password: P011430@Huoshi*
+    hikari:
+      maximum-pool-size: 10
+      minimum-idle: 3
+      max-lifetime: 30000
+      connection-test-query: SELECT 1
+    #######redis配置######
+    # redis
+    redis:
+      host: 127.0.0.1
+      port: 6479
+      timeout: 3
+      # password:
+      pool:
+        minIdle: 1
+        maxIdle: 10
+        maxWait: 3
+        maxActive: 8
+    ####全局配置时间返回格式#####
+  jackson:
+    #参数意义:
+    #JsonInclude.Include.ALWAYS       默认
+    #JsonInclude.Include.NON_DEFAULT   属性为默认值不序列化
+    #JsonInclude.Include.NON_EMPTY     属性为 空(””) 或者为 NULL 都不序列化
+    #JsonInclude.Include.NON_NULL      属性为NULL  不序列化
+    default-property-inclusion: ALWAYS
+    time-zone: GMT+8
+    date-format: yyyy-MM-dd HH:mm:ss
+
+##########日志配置
+logging:
+  level:
+    root: info
+    org.mybatis: error
+    java.sql: error
+    org.springframework.web: error
+    #打印sql语句
+    com.management.platform.mapper: error
+  path: /log/
+  file: workshop.log
+##########
+mybatis-plus:
+  #  mapper-locations: classpath:mapper/*/*.xml
+  #  #实体扫描,多个package用逗号或者分号分隔
+  #  typeAliasesPackage: com.hssx.cloudmodel
+  global-config:
+    #主键类型  0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
+    id-type: 0
+    #字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
+    field-strategy: 2
+    db-column-underline: true
+    refresh-mapper:
+    #################插入和更新非null判断
+    db-config:
+      insert-strategy: not_null
+      update-strategy: not_null
+  configuration:
+    map-underscore-to-camel-case: true
+    cache-enabled: false
+######mybstis配置#######
+mybatis:
+  type-aliases-package: com.management.platform.entity
+  mapper-locations: mappers/*Mapper.xml
+#####配置图片上传路径####
+upload:
+  path: /www/staticproject/leworkshop/upload/
+
+
+##actuator健康检查配置
+management:
+  security:
+    enabled:false:
+  server:
+    port: 10091
+  #  endpoints:
+  #    web:
+  #      exposure:
+  #        include: "*"
+
+  health:
+    redis:
+      enabled: false
+
+configEnv:
+  isDev: false
+  # 是否是私有化部署,企业内部应用
+  isPrivateDeploy: true
+
+privateDeployURL:
+  pcUrl: http://devworkshop.ttkuaiban.com
+  mobUrl: http://mobdevworkshop.ttkuaiban.com
+  authUrl: http://devworkshop.ttkuaiban.com/api/corpInsideWXAuth

+ 4 - 5
fhKeeper/formulahousekeeper/management-workshop/src/main/resources/mapper/ProdProcedureTeamMapper.xml

@@ -25,9 +25,9 @@
     </sql>
 
     <select id="getReportForWorkList" resultType="java.util.HashMap" >
-        SELECT a.*, plan_procedure_total.plan_id, plan_procedure_total.prod_procedure_id, date_format(plan.`start_date`,'%Y-%m-%d') as start_date, date_format(plan.`end_date`,'%Y-%m-%d') as end_date, plan.`plan_type`,
-         plan.`product_scheduling_num`,plan.task_type_name,plan.task_name,plan.task_change_notice_num,
-        product.`name` AS product_name,prod_procedure.name AS procedure_name, prod_procedure.check_type, plan.check_type as plan_check_type,plan.vehicle_num_start,plan.vehicle_num_end
+        SELECT a.*, plan_procedure_total.plan_id, plan_procedure_total.prod_procedure_id,plan_procedure_total.total_working_hours,plan_procedure_total.total_wages, date_format(plan.`start_date`,'%Y-%m-%d') as start_date, date_format(plan.`end_date`,'%Y-%m-%d') as end_date, plan.`plan_type`,
+        plan.`product_scheduling_num`,plan.task_type_name,plan.task_name,plan.task_change_notice_num,
+        product.`name` AS product_name,prod_procedure.name AS procedure_name, prod_procedure.check_type, plan.check_type as plan_check_type,plan.vehicle_num_start,plan.vehicle_num_end,plan.num
         FROM prod_procedure_team a
         left join plan_procedure_total on plan_procedure_total.id = a.plan_procedure_id
         LEFT JOIN plan ON plan.id = plan_procedure_total.plan_id
@@ -42,7 +42,7 @@
 
     <select id="getFillProcedureDetail" resultType="java.util.HashMap" >
         SELECT a.*, plan_procedure_total.plan_id, plan_procedure_total.prod_procedure_id, date_format(plan.`start_date`,'%Y-%m-%d') as start_date, date_format(plan.`end_date`,'%Y-%m-%d') as end_date, plan.`plan_type`,
-        plan.`product_scheduling_num`,plan.task_type_name,plan.task_name,plan.task_change_notice_num,
+               plan.`product_scheduling_num`,plan.task_type_name,plan.task_name,plan.task_change_notice_num,
                product.`name` AS product_name,prod_procedure.name AS procedure_name, if(plan.plan_type=0,prod_procedure.check_type, plan.check_type) as check_type, plan.station_id
         FROM prod_procedure_team a
                  left join plan_procedure_total on plan_procedure_total.id = a.plan_procedure_id
@@ -51,5 +51,4 @@
                  LEFT JOIN prod_procedure ON prod_procedure.id = plan_procedure_total.prod_procedure_id
         where a.id = #{id}
     </select>
-
 </mapper>

+ 4 - 4
fhKeeper/formulahousekeeper/management-workshop/src/main/resources/mapper/ReportMapper.xml

@@ -20,6 +20,8 @@
         <result column="checker_id" property="checkerId" />
         <result column="user_procedure_team_id" property="userProcedureTeamId" />
         <result column="steel_num_array" property="steelNumArray" />
+        <result column="finish_num" property="finishNum" />
+        <result column="status" property="status" />
     </resultMap>
     <resultMap id="FullMap" type="com.management.platform.entity.vo.ReportVO" extends="BaseResultMap">
         <result column="creatorName" property="creatorName" />
@@ -29,7 +31,7 @@
     </resultMap>
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, creator_id, create_date, working_time, create_time, cost, dept_id, company_id, plan_id, progress, product_id, prod_procedure_id, check_type, checker_id, user_procedure_team_id, steel_num_array
+        id, creator_id, create_date, working_time, create_time, cost, dept_id, company_id, plan_id, progress, product_id, prod_procedure_id, check_type, checker_id, user_procedure_team_id, steel_num_array, finish_num, status
     </sql>
     <select id="getReportFillStatus" resultType="java.util.Map">
         SELECT DATE_FORMAT(create_date,'%Y-%m-%d') as createDate FROM report
@@ -261,8 +263,7 @@
                 and r.create_date between #{startDate} and #{endDate}
             </if>
             <if test="steelNum!=null and steelNum!=''">
-            and r.steel_num_array is not null and
-            JSON_CONTAINS(r.steel_num_array,CONCAT('"',#{steelNum},'"'))
+                JSON_CONTAINS(r.steel_num_array,CONCAT('"',#{steelNum},'"'))
             </if>
         </where>
         order by r.create_date desc
@@ -435,7 +436,6 @@
         group by b.station_id
         ) as total
     </select>
-
     <select id="getReportList" resultType="java.util.Map">
         select p.plan_type as planType,u.name as userName,u.job_number as jobNumber,d.department_id as departmentId,p.product_scheduling_num as productSchedulingNum,
         p.task_change_notice_num as taskChangeNoticeNum,r.steel_num_array as steelNumArray,r.working_time as workingTime,p.product_name as productName,

+ 7 - 3
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/components/chooseSomeone.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="chooseSomeone">
-    <p style="line-height: 30px;text-align: center;">请选择要{{type?'替换':'新增'}}的人员</p>
+    <p style="line-height: 30px;text-align: center;" v-if="typeSHow">请选择要{{type?'替换':'新增'}}的人员</p>
     <div class="chooseSomeone_selsect">
       <van-search v-model.trim="selectValue" shape="round" background="#F4F4F4" placeholder="请输入姓名" @search="onSearch"
         @input="onSearch"></van-search>
@@ -87,8 +87,12 @@ export default {
     },
     type:{
       type:Number,
-      default:()=> 0//0新增 1换人
-    }
+      default:()=> 0//0新增 1换人,
+    },
+    typeSHow:{
+      type: Boolean,
+      default:()=> true, 
+    },
   },
   components: {},
   data() {

+ 17 - 1
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/index/index.vue

@@ -7,7 +7,8 @@
         </van-swipe>
         <van-grid :column-num="3">
             <van-grid-item v-for="(item, index) in routers" :key="index" :icon="item.icon" :text="item.name"
-                :info="(item.name == '消息记录' && unreadNum > 0) ? unreadNum : ''" :to="item.url" @click="pfdClick(item)">
+                :info="(item.name == '消息记录' && unreadNum > 0) ? unreadNum : ''" @click="pfdClick(item)">
+                <!-- :info="(item.name == '消息记录' && unreadNum > 0) ? unreadNum : ''" :to="item.url" @click="pfdClick(item)"> -->
             </van-grid-item>
         </van-grid>
         <div v-if="isCorpWX" class="kefu" @click="tokefu"><img src="../../assets/icon/kefu.png" alt=""></div>
@@ -109,6 +110,15 @@ export default {
                 // 将要传过去的值
                 this.previewPDF(url, name)
             }
+
+            if(item.name != '使用说明') {
+                this.$router.push({
+                    path: item.url,
+                    query: {
+                        name: item.name
+                    }
+                })
+            }
         },
         // 预览pdf
         previewPDF(url, name) {
@@ -181,6 +191,12 @@ export default {
               }
             });
             const routersList = [
+                {
+                    name: '查看报工',
+                    moudelName: '查看报工',
+                    url: '/report',
+                    icon: 'balance-list-o'
+                },
                 {
                     name: '今日计划',
                     moudelName: '今日计划',

+ 4 - 3
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/login/index.vue

@@ -26,7 +26,7 @@
                 defaultHeight: '0',  //默认屏幕高度
                 nowHeight:  '0',  //实时屏幕高度
                 form: {
-                    username: "屈跃庭",
+                    username: "",
                     password: "",
                 },
                 rules: {
@@ -50,9 +50,9 @@
                         this.$store.commit("updateLogin", true);
                         localStorage.userInfo = JSON.stringify(user);
                         
-                        this.$router.push("/index").catch(err => { console.log(err, '错误1')});
+                        this.$router.push({path:"/index", query: {date: new Date().getTime()}}).catch(err => { console.log(err, '错误1')});
                         //强制刷新,避免index页面中的mounted不执行
-                        window.location.reload();
+                        // window.location.reload();
                     } else {
                         this.$toast.clear();
                         // this.$router.push('/expire')
@@ -189,6 +189,7 @@
             }
         },
         mounted() {
+            // alert('这是login页面==='+new Date().getTime());
             var ua = navigator.userAgent.toLowerCase();
             if (ua.indexOf("wxwork") > 0) {
                 this.isCorpWX = true;

+ 12 - 29
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/my/children/center.vue

@@ -21,7 +21,7 @@
                 <div style="height: 20px;background: #f4f4f4"></div>
                 
                 <van-cell title="公司" :title-style="'flex: 0.5;'" :value="userInfo.companyName"></van-cell>
-                <van-cell title="有效日期" :title-style="'flex: 0.5;'" :value="expirationDate"></van-cell> 
+                <van-cell title="有效日期" :title-style="'flex: 0.5;'" :value="userInfo.company.expirationDate"></van-cell> 
 
                 <div style="height: 20px;background: #f4f4f4"></div>
             </div>
@@ -31,10 +31,12 @@
                     <span v-if="(isCorpWX && userInfo.corpwxUserid != null) || (isWX && userInfo.wxOpenid != null)" style="color:#7CCD7C;">已绑定</span>
                 </template>
             </van-cell> -->
-            <van-button class="logout" @click="logout" block round type="danger" v-if="userInfo.roleName=='超级管理员' || userInfo.roleName=='系统管理员'">退出登录</van-button>
+            <van-button class="logout" @click="logout" block round type="danger" v-if="isFromManager || userInfo.roleName=='超级管理员' || userInfo.roleName=='系统管理员'">退出登录</van-button>
+
+            <p v-if="isFromManager" style="padding:10px;color:#666666;text-align:center;font-size:14px;">*当前为管理员代填模式*</p>
         </main>
 
-        <Footer page="my" />
+        <!-- <Footer page="my" /> -->
     </div>
 </template>
 
@@ -52,19 +54,24 @@
 
         data() {
             return {
+                isFromManager: localStorage.isFromManager?true:false,
                 userInfo: JSON.parse(localStorage.userInfo),
                 isCorpWX:false,
                 isWX:false,
-                expirationDate: '', // 有效日期
                 version: '', // 版本
                 show: false,
-                
                 wxManager: false,
             }
         },
 
         methods: {
             logout() {
+                if(localStorage.userInfo) {
+                    if (this.userInfo.roleName=='超级管理员' || this.userInfo.roleName=='系统管理员') {
+                        localStorage.isFromManager = 1;
+                    }
+                }
+
                 this.$store.commit("updateLogin", false);
                 localStorage.removeItem("userInfo");
                 this.$router.push({path:"/login", query: {loginAny: true}});
@@ -88,19 +95,6 @@
                 var weixinUrl="https://open.weixin.qq.com/connect/oauth2/authorize?appid="+appId+"&redirect_uri="+encodeURI(url)+"&response_type=code&scope=snsapi_base&state=0#wechat_redirect";
                 window.location.href = weixinUrl;
             },
-            // 判断是否有添加员工的权限
-            getWxManager() {
-                this.$axios.post("/user/isManager", {})
-                .then(res => {
-                    if(res.code == "ok") {
-                        let bur = res.data + ''
-                        this.wxManager = bur == 'true'
-                    } else {
-                        this.$toast.clear();
-                        this.$toast.fail(res.msg);
-                    }
-                }).catch(err=> {this.$toast.clear();});
-            }
         },
         create() {
         },
@@ -112,17 +106,6 @@
                 this.isWX = true;
             }
             
-            // 拼接有效日期 和 版本
-            if(localStorage.userInfo) {
-                // 日期
-                let userss = JSON.parse(localStorage.userInfo)
-                userss.company.expirationDate[2] >= 10 ? userss.company.expirationDate[2] : userss.company.expirationDate[1] = '0' + userss.company.expirationDate[2]
-                userss.company.expirationDate[1] >= 10 ? userss.company.expirationDate[1] : userss.company.expirationDate[1] = '0' + userss.company.expirationDate[1]
-                this.expirationDate = userss.company.expirationDate[0] + '-' + userss.company.expirationDate[1] + '-' + userss.company.expirationDate[2]
-                console.log(this.version)
-            }
-
-            this.getWxManager()
         }
     };
 </script>

+ 32 - 11
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/workView/fillReport.vue

@@ -23,26 +23,33 @@
               <div v-else>无</div>
             </template>
           </van-cell>
-          <van-cell title="进度(%)">
+          <van-cell title="当日完成件数">
             <template>
-              <van-stepper v-model="reportForm.progress" step="10" :min="0" :max="100" />
+              <van-stepper v-model="reportForm.finishNum" step="0.1" :min="0" :max="1000" />
             </template>
           </van-cell>
-          <van-cell title="中止工作" v-if="reportForm.progress < 100">
+          <van-cell title="完成全部工作" >
+            <template>
+              <div style="float:right;">
+                <van-checkbox v-model="reportForm.isFinish" />
+              </div>
+            </template>
+          </van-cell>
+          <van-cell title="中止工作" v-if="!reportForm.isFinish">
             <template>
               <div style="float:right;">
                 <van-checkbox v-model="reportForm.isTerminated" />
               </div>
             </template>
           </van-cell>
-          <van-cell title="质检类型" :value="checkTypeTxt[reportForm.check_type]" v-if="reportForm.progress == 100" />
-          <van-cell title="质检人" :value="reportForm.checker_name" is-link v-if="reportForm.progress == 100"
+          <van-cell title="质检类型" :value="checkTypeTxt[reportForm.check_type]" v-if="reportForm.isFinish" />
+          <van-cell title="质检人" :value="reportForm.checker_name" is-link v-if="reportForm.isFinish"
             @click="showCheckerOptionList">
           </van-cell>
         </van-cell-group>
         <div style="margin: 16px;">
           <van-button round block type="primary" native-type="submit" :loading="saving"
-            :disabled="reportForm.progress == 0">
+            :disabled="reportForm.finishNum == 0">
             提交
           </van-button>
         </div>
@@ -111,8 +118,8 @@ export default {
         }).catch(err => { this.$toast.clear(); });
     },
     onSubmit() {
-      if (this.reportForm.progress == 0) {
-        this.$toast.fail('进度不可为0')
+      if (this.reportForm.finishNum == 0) {
+        this.$toast.fail('件数不可为0')
         return;
       }
       let postData = {
@@ -122,9 +129,15 @@ export default {
         planId: this.reportForm.plan_id,
         checkType: this.reportForm.check_type,
         isTerminated: this.reportForm.isTerminated,
-        steelNumArray: JSON.stringify(this.reportForm.checkedSteelNum)
+        steelNumArray: JSON.stringify(this.reportForm.checkedSteelNum),
+        finishNum: this.reportForm.finishNum,
+        isFinish: this.reportForm.isFinish
       };
-      if (this.reportForm.progress == 100) {
+      const { id, reportBoolean, ohterId } = this.$route.query;
+      if(reportBoolean == 'true') {
+        postData.id = ohterId;
+      }
+      if (this.reportForm.isFinish) {
         if (this.reportForm.check_type != 0) {
           if (this.reportForm.checker_id == null) {
             this.$toast.fail('请选择检验人')
@@ -150,7 +163,15 @@ export default {
       console.log(this.reportForm.checkedSteelNum);
     },
     getMyPlanProcedureList() {
-      this.$axios.post("/plan-procedure-total/getFillProcedureDetail", { id: this.$route.query.id,inputSteelNum:this.inputSteelNum})
+      const { id, reportBoolean, date } = this.$route.query;
+      let params = {
+        id: id,
+        inputSteelNum:this.inputSteelNum
+      }
+      if(reportBoolean == 'true') {
+        params.createDate = date
+      }
+      this.$axios.post("/plan-procedure-total/getFillProcedureDetail", params)
         .then(res => {
           if (res.code == "ok") {
             this.reportForm = res.data;

+ 243 - 18
fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/workView/workView.vue

@@ -1,19 +1,40 @@
 <template>
   <div class="distribution">
-    <van-nav-bar title="报工" left-text="返回" @click-left="back" fixed left-arrow />
+    <van-nav-bar :title="reportBoolean ? '查看报工' : '报工'" left-text="返回" @click-left="back" fixed left-arrow />
     <div class="distribution_con contentRoll">
-      <div>
-        <van-field v-model="vehicleNum" type="digit" label="车辆序号" @blur="getMyPlanProcedureList()"/>
+      <!-- 报工 -->
+      <div v-if="!reportBoolean">
+        <van-field v-model="vehicleNum" type="digit" label="车辆序号" @blur="getMyPlanProcedureList()" />
       </div>
+      <!-- 查看报工 -->
+      <div v-if="reportBoolean">
+        <van-cell title="日期" :value="reportDate" @click="reportDateShow = true" is-link />
+        <van-cell title="人员" :value="personnelName" @click="perCli()" is-link>
+          <template #right-icon>
+            <div class="vanCellIcon">
+              <van-icon name="cross" class="search-icon" v-if="personnelName && crewMember.length > 1" color="#969799" @click.stop="clearName" />
+              <van-icon name="arrow" class="search-icon" v-else color="#969799" />
+            </div>
+          </template>
+        </van-cell>
+      </div>
+      <!-- 内容 -->
       <van-empty v-if="myPlanProcedureList.length == 0">暂无待报工任务</van-empty>
       <div v-for="(prod, prodIndex) in myPlanProcedureList" :key="prodIndex">
         <div class="distribution_header">
-          <div class="textDis">{{ prod.plan_type == 0 ? prod.product_name : prod.task_name }}</div>
+          <div class="textDis">
+            <span>{{ prod.plan_type == 0 ? prod.product_name : prod.task_name }}</span>
+            <span v-if="reportBoolean">{{ prod.userName }}</span>
+          </div>
           <div v-if="prod.plan_type == 0">{{ prod.product_scheduling_num }}</div>
-          <div>{{ prod.start_date.replace(/-/g, '') }}-{{!prod.end_date?"":prod.end_date.replace(/-/g, '') }}</div>
-          <div v-if="prod.vehicle_num_start &&  prod.vehicle_num_end">{{ prod.vehicle_num_start }}-{{ prod.vehicle_num_end }}</div>
+          <!-- <div>{{ prod.start_date.replace(/-/g, '') }}-{{ (!prod.end_date || prod.end_date == 'null') ? "" : prod.end_date.replace(/-/g, '') }}</div> -->
+          <div>{{ dateBack(prod.start_date) }}-{{ dateBack(prod.end_date) }}</div>
+          <div v-if="prod.vehicle_num_start && prod.vehicle_num_end">{{ prod.vehicle_num_start }}-{{ prod.vehicle_num_end
+          }}</div>
         </div>
-        <div class="distribution_box" v-for="item, index in prod.procedureList" :key="index" @click="reportItem(item)">
+        <div class="distribution_box" v-for="item, index in prod.procedureList" :key="index" @click="reportItem(item, prod)">
+          <!-- 状态 -->
+          <div class="statusLeft" :style="`background: ${statusColor[item.status]}`" v-if="item.status"></div>
           <div>
             <van-row>
               <van-col span="19">{{ prod.plan_type == 0 ? item.procedure_name : prod.task_change_notice_num }}</van-col>
@@ -22,13 +43,24 @@
             </van-row>
             <div style="margin-top:10px;text-align: center;">
               <van-row gutter="20">
-                <van-col span="8">
+                <!-- <van-col span="8">
                   <div class="valueCls">
                     {{ item.progress }}%
                   </div>
                   <div class="labelCls">
                     进度
                   </div>
+                </van-col> -->
+                <van-col span="8">
+                  <div class="valueCls" v-if="reportBoolean">
+                    {{ (item.finishNum && item.finishNum) ? item.finishNum : 0 }}
+                  </div>
+                  <div class="valueCls" v-if="!reportBoolean">
+                    {{ item.num ? item.num : 0 }}
+                  </div>
+                  <div class="labelCls">
+                    件数
+                  </div>
                 </van-col>
                 <van-col span="8">
                   <div class="valueCls">
@@ -54,14 +86,20 @@
     </div>
     <!-- 弹出层选人 -->
     <van-popup v-model="popupShow" round position="bottom" :style="{ height: '80%', background: '#F4F4F4' }">
+      <ChooseSomeone ref="ChooseSomeone" :groupView="1" :typeSHow="false" @ChooseSomeoneChanhe="chooseSomeoneChanhe"
+        :peopleListId="[personnelId]" :peopleList="crewMember" v-if="popupShow"></ChooseSomeone>
     </van-popup>
+    <!-- 日期 -->
+    <van-calendar v-model="reportDateShow" :min-date="minDate" @confirm="reportDateOnConfirm" />
   </div>
 </template>
 
 <script>
+import ChooseSomeone from '../../components/chooseSomeone.vue'
 export default {
   props: {},
   components: {
+    ChooseSomeone
   },
   data() {
     return {
@@ -71,13 +109,30 @@ export default {
       popupShow: false,
       titleText: '今日计划', // 默认文字
       todayAndTomorrow: true, // true 今日计划,false 明日计划
-      vehicleNum:null
+      vehicleNum: null,
+      reportBoolean: false, // false 报工, true 查看报工
+      reportDateShow: false, // 报工日期弹出层
+      minDate: new Date(2010, 0, 1),
+      reportDate: this.formatDate(new Date()), // 报工日期
+      personnelName: '', // 人员姓名
+      personnelId: '', // 人员id
+      crewMember: [], // 班组人员列表
+      userInfo: JSON.parse(localStorage.userInfo),
+      statusColor: ['', '#409EFF', '#67C23A', '#F56C6C'], // 状态颜色
     };
   },
   computed: {},
   watch: {},
   created() { },
   mounted() {
+    const { name } = this.$route.query;
+    this.reportBoolean = name == '查看报工' ? true : false;
+    if (this.reportBoolean) {
+      const { id, name } = this.userInfo
+      this.personnelName = name
+      this.personnelId = id
+      this.getCrewMemberList()
+    }
     this.getMyPlanProcedureList();
   },
   methods: {
@@ -92,35 +147,177 @@ export default {
       this.distributionIndex = index
       this.popupShow = true
     },
-
+    getCrewMemberList() {
+      this.$axios.post('/department/getMyManageUserList', {
+        date: this.reportDate,
+      })
+        .then(res => {
+          if (res.code == "ok") {
+            this.crewMember = res.data.map(item => {
+              return {
+                name: item.name,
+                id: item.id,
+                jobNumber: item.jobNumber,
+                phone: item.phone
+              }
+            })
+          } else {
+            this.$toast.fail(res.msg);
+          }
+        }).catch(err => { this.$toast.clear(); });
+    },
     getMyPlanProcedureList() {
       const toast = this.$toast.loading({
         forbidClick: true,
         duration: 0
       });
-      this.$axios.post("/plan-procedure-total/getReportForWorkList", {
-        vehicleNum:this.vehicleNum
-      })
+
+      let urls = ''
+      let params = {}
+      console.log('查看 ==>', this.reportBoolean, typeof this.reportBoolean)
+      if (this.reportBoolean) {
+        urls = '/report/getReportList'
+        params = {
+          // date: '2023-11-20',
+          // userId: '8377462629387460613'
+          date: this.reportDate
+        }
+        if (this.personnelId) {
+          params.userId = this.personnelId
+        }
+      } else {
+        urls = '/plan-procedure-total/getReportForWorkList'
+        params = {
+          vehicleNum: this.vehicleNum
+        }
+      }
+
+      this.$axios.post(urls, params)
         .then(res => {
           if (res.code == "ok") {
             this.$toast.clear();
-            this.myPlanProcedureList = res.data;
+            if (this.reportBoolean) {
+              this.myPlanProcedureList = this.handleData(res.data);
+              console.log(this.handleData(res.data))
+            } else {
+              this.myPlanProcedureList = res.data;
+            }
           } else {
             this.$toast.clear();
             this.$toast.fail(res.msg);
           }
         }).catch(err => { this.$toast.clear(); });
+
+      // this.$axios.post("/report/getReportList", {
+      //   date: '2023-11-20',
+      //   userId: '8377462629387460613'
+      // })
+      // this.$axios.post("/plan-procedure-total/getReportForWorkList", {
+      //   vehicleNum:this.vehicleNum
+      // })
+    },
+
+    handleData(data) {
+      let newList = []
+      for (var j in data) {
+        const it = data[j].data
+        let obj = {}
+        let arr = []
+        for (var i in it) {
+          const item = it[i]
+          obj = {
+            end_date: item.endDate,
+            plan_id: item.planId,
+            plan_type: item.planType,
+            plan_name: item.planName,
+            product_name: item.productName,
+            product_scheduling_num: item.productSchedulingNum,
+            start_date: item.startDate,
+            task_change_notice_num: item.taskChangeNoticeNum,
+            task_name: item.taskName,
+            task_type_name: item.taskTypeName,
+            vehicle_num_end: item.vehicleNumEnd,
+            vehicle_num_start: item.vehicleNumStart,
+          }
+          arr.push({
+            check_type: item.checkType,
+            checker_id: item.checkerId,
+            checker_name: item.checkerName,
+            job_of_money: item.jobOfMoney,
+            plan_check_type: item.planCheckType,
+            procedure_name: item.procedureName,
+            progress: item.progress,
+            work_time: item.workingTime,
+            finishNum: item.finishNum,
+            id: item.id,
+            userProcedureTeamId: item.userProcedureTeamId,
+            status: item.status,
+            createDate: item.createDate
+          })
+        }
+        obj.procedureList = arr
+        obj.userName = data[j].name
+        newList.push(obj)
+      }
+      return newList
     },
 
     //打开报工页面
-    reportItem(item) {
+    reportItem(item, prod) {
+      console.log(item, this.reportBoolean)
+      console.log(this.reportBoolean ? item.userProcedureTeamId : item.id)
+      // return
       this.$router.push({
         path: '/fillReport',
         query: {
-          id: item.id
+          id: this.reportBoolean ? item.userProcedureTeamId : item.id,
+          reportBoolean: this.reportBoolean,
+          ohterId: item.id,
+          date: item.createDate,
         }
       })
     },
+
+    formatDate(date) {
+      // 中国标准时间转成 YYYY-MM-DD
+      const year = date.getFullYear();
+      const month = date.getMonth() + 1;
+      const day = date.getDate();
+      return `${year}-${month < 10 ? '0' + month : month}-${day < 10 ? '0' + day : day}`;
+    },
+    reportDateOnConfirm(date) {
+      this.reportDateShow = false;
+      this.reportDate = this.formatDate(date);
+      this.getMyPlanProcedureList()
+      this.getCrewMemberList()
+    },
+
+    // 选中人员
+    chooseSomeoneChanhe(item) {
+      const { name, id } = item[0]
+      this.$set(this, 'personnelName', name)
+      this.$set(this, 'personnelId', id)
+      this.getMyPlanProcedureList()
+      this.$refs.ChooseSomeone['loadingBtn'] = false
+      this.popupShow = false
+    },
+    clearName() {
+      this.$set(this, 'personnelName', '')
+      this.$set(this, 'personnelId', '')
+      this.getMyPlanProcedureList()
+    },
+    perCli() {
+      if(this.crewMember.length > 1) {
+        this.popupShow = true
+      }
+    },
+    // 数组日期回显
+    dateBack(date) {
+      if (date && date.length > 0) {
+        return date.join('-')
+      }
+      return ''
+    }
   },
 };
 </script>
@@ -129,12 +326,39 @@ export default {
 * {
   box-sizing: border-box;
 }
+.statusLeft {
+  position: absolute;
+  width: 10px;
+  height: 100%;
+  left: 0;
+  top: 0;
+}
+
+.vanCellIcon {
+  width: 16px;
+  height: 24px;
+  display: flex;
+  justify-content: center;
+  align-items: center;
+  margin-left: 4px;
+}
 
 .textDis {
   width: 320px;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
   overflow: hidden;
   text-overflow: ellipsis;
   white-space: nowrap;
+
+  span:first-child {
+    display: inline-block;
+    width: 260px;
+    overflow: hidden;
+    text-overflow: ellipsis;
+    white-space: nowrap;
+  }
 }
 
 .valueCls {
@@ -176,7 +400,7 @@ export default {
       width: 100%;
       background-color: #fff;
       border-radius: 4px;
-      padding: 10px;
+      padding: 10px 10px 10px 14px;
       margin-bottom: 15px;
       position: relative;
       overflow: hidden;
@@ -225,4 +449,5 @@ export default {
       }
     }
   }
-}</style>
+}
+</style>

+ 173 - 131
fhKeeper/formulahousekeeper/timesheet-workshop/src/views/plan/planComponent.vue

@@ -9,8 +9,9 @@
         <div class="OutSide_center">
           <div class="block">
             <span class="demonstration">查询{{ titleLeftText }}{{ titleText }}</span>
-            <el-date-picker v-model="planDate" type="date" value-format="yyyy-MM-dd" :clearable="false" @change="getTableData(hasChooseDept)"
-              placeholder="选择日期" size="small" :picker-options="planType == 1 ? toMPickerOptions : todayPickerOptions">
+            <el-date-picker v-model="planDate" type="date" value-format="yyyy-MM-dd" :clearable="false"
+              @change="getTableData(hasChooseDept)" placeholder="选择日期" size="small"
+              :picker-options="planType == 1 ? toMPickerOptions : todayPickerOptions">
             </el-date-picker>
           </div>
           <div class="OutSide" style="padding-bottom: 0;">
@@ -24,7 +25,7 @@
           <el-link type="primary" :underline="false" @click="addPlan()">{{
             `新增${titleText}`
           }}</el-link>
-          <el-link type="primary" :underline="false" @click="importDataDialog=true">{{ "导入" }}</el-link>
+          <el-link type="primary" :underline="false" @click="importDataDialog = true">{{ "导入" }}</el-link>
           <el-link type="primary" :underline="false" @click="exportData()"
             :download="this.planType == 0 ? '今日计划' : this.planType == 1 ? '明日计划' : this.planType == 2 ? '插单计划' : '' + '.xlsx'">{{
               "导出"
@@ -45,7 +46,7 @@
           <el-button type="primary" size="mini" @click="(deptSetDialog = true), getPlanDeptSet()">部门设置</el-button>
         </div>
       </div>
-      
+
 
       <!-- 各部分数据列表 -->
       <el-table :data="tableData" style="width: 100%;" height="0" v-loading="tableDataLoading"
@@ -70,7 +71,7 @@
         <el-table-column prop="foremanName" label="工长" width="180">
           <template slot-scope="scope">
             <div @click="getFormenDetail(scope.row)" class="colorText">
-              {{ scope.row.foremanName}}
+              {{ scope.row.foremanName }}
             </div>
           </template>
         </el-table-column>
@@ -78,10 +79,11 @@
         </el-table-column>
         <el-table-column prop="endDate" label="完工时间" width="180">
         </el-table-column>
-        <el-table-column label="操作" :fixed="'right'" >
+        <el-table-column label="操作" :fixed="'right'">
           <template slot-scope="scope">
             <div @click="editPlan(scope.row)" class="colorText">编辑</div>
-            <div v-if="jisuanDate(scope.row.startDate)>30" @click="hidePlan(scope.row.id,scope.row.hideState)" class="colorText">{{scope.row.hideState==0?'隐藏':'取消隐藏'}}</div>
+            <div v-if="jisuanDate(scope.row.startDate) > 30" @click="hidePlan(scope.row.id, scope.row.hideState)"
+              class="colorText">{{ scope.row.hideState == 0 ? '隐藏' : '取消隐藏' }}</div>
           </template>
         </el-table-column>
       </el-table>
@@ -110,23 +112,35 @@
           <el-form-item label="项目代码" style="width: 100%" prop="projectCode">
             <el-input v-model="todayPlanForm.projectCode" maxlength="50" readonly></el-input>
           </el-form-item>
-          <el-form-item label="钢印号" v-for="(item,index) in todayPlanForm.steelStampNumberList" :key="index" style="width: 100%" prop="steelStampNumberStart">
-            <el-input class="w45" v-model="item.steelStampNumberStart" maxlength="20"></el-input>
-            {{ "-" }}
-            <el-input class="w45" v-model="item.steelStampNumberEnd" maxlength="20"></el-input>
-            <i class="el-icon-delete" style="color:red" @click="deleteInput(index)"></i>
-          </el-form-item>
+
+          <div v-for="(item, index) in todayPlanForm.steelStampNumberList" style="width: 100%;margin-bottom: 10px;">
+            <el-form-item label="钢印号" :key="index" style="width: 100%" prop="steelStampNumberStart">
+              <el-input class="w45" v-model="item.steelStampNumberStart" maxlength="20"></el-input>
+              {{ "-" }}
+              <el-input class="w45" v-model="item.steelStampNumberEnd" maxlength="20"></el-input>
+            </el-form-item>
+
+            <el-form-item label="编码起始位置" :key="index" style="width: 100%" prop="steelStampNumberStart">
+              <el-input-number v-model="item.ruleIndexStart" :min="1" :controls="false" step-strictly
+                :step="1"></el-input-number>
+              {{ "-" }}
+              <el-input-number v-model="item.ruleIndexEnd" :min="item.ruleIndexStart" :controls="false" step-strictly
+                :step="1"></el-input-number>
+            </el-form-item>
+
+            <i class="el-icon-delete" style="color:red; float: right;" @click="deleteInput(index)" v-if="index != 0"></i>
+          </div>
           <i class="el-icon-circle-plus" style="color:#409EFF" @click="addInput"></i>
-          <el-form-item label="计划总工价" v-if="this.titleName==='编辑今日计划'"  prop="planTotalWages">
+          <el-form-item label="计划总工价" v-if="this.titleName === '编辑今日计划'" prop="planTotalWages">
             <el-input v-model="todayPlanForm.planTotalWages" type="number"></el-input>
           </el-form-item>
           <!-- <el-form-item label="进度"  :style="this.titleName==='编辑今日计划'?'':'width: 100%'" prop="progress">
             <el-input v-model="todayPlanForm.progress" maxlength="20"></el-input>
           </el-form-item> -->
           <el-form-item label="车辆序号" style="width: 100%" prop="steelStampNumberStart">
-          <el-input-number class="w45" v-model="todayPlanForm.vehicleNumStart" maxlength="20"></el-input-number>
-          {{ "-" }}
-          <el-input-number class="w45" v-model="todayPlanForm.vehicleNumEnd" maxlength="20"></el-input-number>
+            <el-input-number class="w45" v-model="todayPlanForm.vehicleNumStart" maxlength="20"></el-input-number>
+            {{ "-" }}
+            <el-input-number class="w45" v-model="todayPlanForm.vehicleNumEnd" maxlength="20"></el-input-number>
           </el-form-item>
           <el-form-item label="数量" prop="num">
             <el-input v-model="todayPlanForm.num" maxlength="10" type="number"></el-input>
@@ -169,7 +183,7 @@
       </div>
       <span slot="footer" class="dialog-footer">
         <el-button @click="
-//          (editPlanDiaLog = false), $refs['todayPlanForm'].resetFields()
+          //          (editPlanDiaLog = false), $refs['todayPlanForm'].resetFields()
           (editPlanDiaLog = false)
           ">取 消</el-button>
         <el-button type="primary" @click="addPlanData('todayPlanForm')">确 定</el-button>
@@ -201,13 +215,13 @@
     <!-- 工长弹框 -->
     <el-dialog title="工长信息" :visible.sync="foremanDetailDialog" width="30%" :before-close="handleClose">
       <div>
-        <span>姓名:{{this.foremanDetail.name}}</span>
+        <span>姓名:{{ this.foremanDetail.name }}</span>
       </div>
       <div>
-        <span>工种:{{this.foremanDetail.workType}}</span>
+        <span>工种:{{ this.foremanDetail.workType }}</span>
       </div>
       <div>
-        <span>工号:{{this.foremanDetail.jobNumber}}</span>
+        <span>工号:{{ this.foremanDetail.jobNumber }}</span>
       </div>
       <span slot="footer" class="dialog-footer">
         <el-button @click="foremanDetailDialog = false">关闭</el-button>
@@ -215,15 +229,18 @@
     </el-dialog>
 
     <!--导入计划 -->
-    <el-dialog :title="this.titleText+'导入'" :visible.sync="importDataDialog"  width="500px">
-        <p>1. 下载
-        <el-link type="primary" style="margin-left:5px;" :underline="false" :href="'./upload/'+this.titleText+'导入模板.xlsx'" :download="this.titleText+'导入模板.xlsx'">{{this.titleText+'导入模板.xlsx'}}</el-link>
-        </p>
-        <p style="display: flex;justify-content: center;">
-            <el-upload ref="upload"  action="#" :limit="1" :http-request="importData" :show-file-list="false">
-              <el-button type="primary" :underline="false" :loading="importingData">{{$t("other.startImporting")}}</el-button>
-            </el-upload>
-        </p>
+    <el-dialog :title="this.titleText + '导入'" :visible.sync="importDataDialog" width="500px">
+      <p>1. 下载
+        <el-link type="primary" style="margin-left:5px;" :underline="false"
+          :href="'./upload/' + this.titleText + '导入模板.xlsx'" :download="this.titleText + '导入模板.xlsx'">{{ this.titleText +
+            '导入模板.xlsx' }}</el-link>
+      </p>
+      <p style="display: flex;justify-content: center;">
+        <el-upload ref="upload" action="#" :limit="1" :http-request="importData" :show-file-list="false">
+          <el-button type="primary" :underline="false" :loading="importingData">{{ $t("other.startImporting")
+          }}</el-button>
+        </el-upload>
+      </p>
     </el-dialog>
   </div>
 </template>
@@ -258,8 +275,8 @@ export default {
           return v.getTime() < Date.now();
         }
       },
-      importDataDialog:false,
-      importingData:false,
+      importDataDialog: false,
+      importingData: false,
       steelStampNumber: "",
       planDate: this.todayDate,
       deptSetDialog: false,
@@ -276,8 +293,8 @@ export default {
         projectCode: "",
         // steelStampNumberStart: "",
         // steelStampNumberEnd: "",
-        vehicleNumStart:"",
-        vehicleNumEnd:"",
+        vehicleNumStart: "",
+        vehicleNumEnd: "",
         num: "",
         mainProcess: "",
         progress: "",
@@ -288,18 +305,20 @@ export default {
         endDate: "",
         describtion: "",
         versionNumber: "",
-        planTotalWages:0,
-        steelStampNumberList:[
-        {
-          id:null,
-          steelStampNumberStart:'',
-          steelStampNumberEnd:''
-        }
+        planTotalWages: 0,
+        steelStampNumberList: [
+          {
+            id: null,
+            steelStampNumberStart: '',
+            steelStampNumberEnd: '',
+            ruleIndexStart: '',
+            ruleIndexEnd: '',
+          }
         ],
       },
       user: JSON.parse(sessionStorage.getItem("user")),
-      foremanDetailDialog:false,
-      foremanDetail:{},
+      foremanDetailDialog: false,
+      foremanDetail: {},
       todayTabIndex: 0,
       tableDataLoading: false,
       tableData: [],
@@ -343,33 +362,35 @@ export default {
       this.getProductList();
   },
   methods: {
-    addInput(){
-      console.log('===========',this.todayPlanForm.steelStampNumberList)
-      console.log('===========',this.todayPlanForm)
-      if(this.todayPlanForm.steelStampNumberList.length>=9){
+    addInput() {
+      console.log('===========', this.todayPlanForm.steelStampNumberList)
+      console.log('===========', this.todayPlanForm)
+      if (this.todayPlanForm.steelStampNumberList.length >= 9) {
         this.$message({
-              message: '超过最大条数(9)',
-              type: "error",
-            });
+          message: '超过最大条数(9)',
+          type: "error",
+        });
         return
       }
       this.todayPlanForm.steelStampNumberList.push({
-        id:null,
-        steelStampNumberStart:'',
-        steelStampNumberEnd:'',
+        id: null,
+        steelStampNumberStart: '',
+        steelStampNumberEnd: '',
+        ruleIndexStart: '',
+        ruleIndexEnd: '',
       });   // 在数组中添加一个空对象
     },
-    deleteInput(index){
-      this.todayPlanForm.steelStampNumberList.splice(index,1)
+    deleteInput(index) {
+      this.todayPlanForm.steelStampNumberList.splice(index, 1)
     },
-    getFormenDetail(item){
-      this.foremanDetailDialog=true;
+    getFormenDetail(item) {
+      this.foremanDetailDialog = true;
       this.http.post(
         "/user/getUserInfo",
-        {userId:item.foremanId},
+        { userId: item.foremanId },
         (res) => {
           if (res.code == "ok") {
-            this.foremanDetail=res.data
+            this.foremanDetail = res.data
           } else {
             this.$message({
               message: res.msg,
@@ -386,7 +407,7 @@ export default {
       );
     },
     setProductCode() {
-      let arrList = this.productList.filter(item => item.id == this.todayPlanForm.productId) 
+      let arrList = this.productList.filter(item => item.id == this.todayPlanForm.productId)
       console.log('====>', arrList)
       this.todayPlanForm.projectCode = arrList[0].code
     },
@@ -617,7 +638,7 @@ export default {
       this.getTableData(this.hasChooseDept);
     },
     addPlan() {
-      console.log('===========',this.todayPlanForm)
+      console.log('===========', this.todayPlanForm)
       this.titleName = `新增${this.titleText}`;
       this.initTodayPlanForm()
       this.editPlanDiaLog = true;
@@ -644,56 +665,56 @@ export default {
         endDate: "",
         describtion: "",
         versionNumber: "",
-        steelStampNumberList:[
-        {
-          id:null,
-          steelStampNumberStart:'',
-          steelStampNumberEnd:''
-        }
+        steelStampNumberList: [
+          {
+            id: null,
+            steelStampNumberStart: '',
+            steelStampNumberEnd: ''
+          }
         ],
       }
     },
     addPlanData(formName) {
       console.log(this.todayPlanForm);
-      if(!this.todayPlanForm.steelStampNumberList){
-        for(item in this.todayPlanForm.steelStampNumberList){
-          if(!item.steelStampNumberStart){
-            if(item.steelStampNumberEnd){
-                this.$message({
-                    message:"钢印号区间填写不完整",
-                    type: "error",
-                });
-                return  
-          }
-      }
-      if(!item.steelStampNumberEnd){
-          if(item.steelStampNumberStart){
+      if (!this.todayPlanForm.steelStampNumberList) {
+        for (item in this.todayPlanForm.steelStampNumberList) {
+          if (!item.steelStampNumberStart) {
+            if (item.steelStampNumberEnd) {
               this.$message({
-                  message:"钢印号区间填写不完整",
-                  type: "error",
+                message: "钢印号区间填写不完整",
+                type: "error",
               });
               return
+            }
           }
-      }
-        }
-      }
-      if(!this.todayPlanForm.vehicleNumStart){
-          if(this.todayPlanForm.vehicleNumStart){
-              this.$message({
-                  message:"车辆序号区间填写不完整",
-                  type: "error",
-              });
-              return  
-          }
-      }
-      if(!this.todayPlanForm.vehicleNumEnd){
-          if(this.todayPlanForm.vehicleNumEnd){
+          if (!item.steelStampNumberEnd) {
+            if (item.steelStampNumberStart) {
               this.$message({
-                  message:"车辆序号区间填写不完整",
-                  type: "error",
+                message: "钢印号区间填写不完整",
+                type: "error",
               });
               return
+            }
           }
+        }
+      }
+      if (!this.todayPlanForm.vehicleNumStart) {
+        if (this.todayPlanForm.vehicleNumStart) {
+          this.$message({
+            message: "车辆序号区间填写不完整",
+            type: "error",
+          });
+          return
+        }
+      }
+      if (!this.todayPlanForm.vehicleNumEnd) {
+        if (this.todayPlanForm.vehicleNumEnd) {
+          this.$message({
+            message: "车辆序号区间填写不完整",
+            type: "error",
+          });
+          return
+        }
       }
       // if(this.todayPlanForm.endDate<this.todayPlanForm.startDate){
       //   this.$message({
@@ -702,6 +723,21 @@ export default {
       //         });
       //         return
       // }
+
+      // 判断校验规则
+
+      const { steelStampNumberList } = this.todayPlanForm;
+
+      for (const [i, { steelStampNumberStart, steelStampNumberEnd, ruleIndexEnd, ruleIndexStart }] of steelStampNumberList.entries()) {
+        if (steelStampNumberStart && steelStampNumberEnd && (!ruleIndexEnd || !ruleIndexStart)) {
+          this.$message({
+            message: `第${i}条钢印号校验规则填写不完整`,
+            type: "error",
+          });
+          return;
+        }
+      }
+
       this.$refs[formName].validate((valid) => {
         if (valid) {
           console.log(this.todayPlanForm, "传给后端的值");
@@ -709,7 +745,7 @@ export default {
             this.todayPlanForm.stationId[
             this.todayPlanForm.stationId.length - 1
             ];
-          let steelStampNumberListArr= this.todayPlanForm.steelStampNumberList  
+          let steelStampNumberListArr = this.todayPlanForm.steelStampNumberList
           this.$delete(this.todayPlanForm, 'product')
           this.$delete(this.todayPlanForm, 'planProcedureTotals')
           this.$delete(this.todayPlanForm, 'steelStampNumberList')
@@ -719,7 +755,7 @@ export default {
               ...this.todayPlanForm,
               stationId,
               planType: this.planType,
-              steelStampNumber:JSON.stringify(steelStampNumberListArr)
+              steelStampNumber: JSON.stringify(steelStampNumberListArr)
             },
             (res) => {
               if (res.code == "ok") {
@@ -750,6 +786,12 @@ export default {
         }
       });
     },
+    // 输入长度
+    inputLength(str) {
+      const strNum = str.length;
+      const lng = '9'.repeat(strNum);
+      return +lng;
+    },
     editPlan(item) {
       (this.titleName = `编辑${this.titleText}`), (this.editPlanDiaLog = true);
       this.todayPlanForm = item;
@@ -929,7 +971,7 @@ export default {
         }
       );
     },
-    jisuanDate(startDate){
+    jisuanDate(startDate) {
       let date1 = new Date(startDate);
       let date2 = new Date();
       date1 = new Date(date1.getFullYear(), date1.getMonth(), date1.getDate());
@@ -939,51 +981,51 @@ export default {
       return diffDate;
     },
     //隐藏计划
-    hidePlan(id,state){
-      this.$alert(state==0?'隐藏计划在移动端将无法展示':'取消隐藏计划将在移动端将展示',state==0?'是否隐藏计划':'是否取消隐藏计划', {
-          confirmButtonText: '确定',
-          callback: action => {
-            this.http.post(
-              "/plan/hidePlan",
-              {
-                id:id,
-                state:state==0?1:0
-              },
-              (res) => {
-                if (res.code == "ok") {
-                  this.$message({
-                    message: '隐藏成功',
-                    type: "success",
-                  });
-                } else {
-                  this.$message({
-                    message: res.msg,
-                    type: "error",
-                  });
-                }
-                this.getTableData()
-              },
-              (error) => {
+    hidePlan(id, state) {
+      this.$alert(state == 0 ? '隐藏计划在移动端将无法展示' : '取消隐藏计划将在移动端将展示', state == 0 ? '是否隐藏计划' : '是否取消隐藏计划', {
+        confirmButtonText: '确定',
+        callback: action => {
+          this.http.post(
+            "/plan/hidePlan",
+            {
+              id: id,
+              state: state == 0 ? 1 : 0
+            },
+            (res) => {
+              if (res.code == "ok") {
+                this.$message({
+                  message: '隐藏成功',
+                  type: "success",
+                });
+              } else {
                 this.$message({
-                  message: error,
+                  message: res.msg,
                   type: "error",
                 });
               }
-            );
-          }
+              this.getTableData()
+            },
+            (error) => {
+              this.$message({
+                message: error,
+                type: "error",
+              });
+            }
+          );
+        }
       });
     }
   },
 };
 </script>
 <style scoped lang='scss'>
-
 .today-tab-btn {
   width: 100%;
   display: flex;
   align-items: center;
   margin-bottom: 10px;
 }
+
 .colorText {
   color: #02a7f0;
   cursor: pointer;
@@ -1084,7 +1126,7 @@ export default {
     div {
       font-size: 16px;
       margin-left: 15px;
-      min-width: fit-content;      
+      min-width: fit-content;
       cursor: pointer;
     }
 

+ 6 - 4
fhKeeper/formulahousekeeper/timesheet-workshop/src/views/statistic/index.vue

@@ -76,13 +76,13 @@
     <div ref="staff" style="margin: 5px;">
         <div class="staff" ref="tabless" :style="'width:'+(windowWidth - 430)+'px'">
             <!-- 人员工时工价表 -->
-            <el-table v-if="ins == 0"  key="1" border :data="personWorkHoursWagesList" highlight-current-row v-loading="listLoading" :height="+tableHeight - 1" style="width: 100%;">
-                <el-table-column align="center" prop="departmentCascade" label="部门名称" min-width="150">
+            <el-table v-if="ins == 0"  :key="plondelas" border :data="personWorkHoursWagesList" highlight-current-row v-loading="listLoading" :height="+tableHeight - 1" style="width: 100%;">
+                <el-table-column align="center" prop="departmentCascade" label="部门名称" min-width="150" fixed="left">
                   <template slot-scope="scope">
                     {{scope.row.departmentCascade}}
                   </template>
                 </el-table-column>
-                <el-table-column align="center" prop="name" label="人员" min-width="250"></el-table-column>
+                <el-table-column align="center" prop="name" label="人员" min-width="250" fixed="left"></el-table-column>
                 <el-table-column v-for="(item, index) in personWorkHoursWagesHead" :key="index" :label="item" align="center" min-width="250">
                     <template slot-scope="scope">
                         <div v-for="(items, indexs) in scope.row.personWorkHoursWages" :key="indexs" @click="showReportDetail(scope.row,item)" class="colorText">
@@ -546,8 +546,9 @@ export default {
       productId:"",
       productList:[],
       vehicleNum:"",
-      steelNum:""
+      steelNum:"",
 
+      plondelas: 100, 
     };
   },
   computed: {},
@@ -753,6 +754,7 @@ export default {
             this.personWorkHoursWagesHead=res.data.header
             this.simpleDateChoose=this.personWorkHoursWagesHead[0]
             this.total=res.data.total
+            this.plondelas++
           } else {
             this.$message({
               message: res.msg,

+ 32 - 22
fhKeeper/formulahousekeeper/timesheet-workshop/src/views/workReport/daily.vue

@@ -63,11 +63,11 @@
                                         </span>
                                         <span v-if="data.isUser == 1 && !data.workingTime && (data.leaveDays || data.leaveTimes)" :style="(data.leaveDays < 1 || data.leaveTimes < user.timeType.allday) ? 'color:red;font-size:13px' : 'color:#32cd32;font-size:13px'">
                                         <!-- {{data.leaveDays ? (data.leaveDays >= 1 ? '当日请假' : '未填报(请假' + data.leaveDays + '天)') : (data.leaveTimes >= user.timeType.allday ? '当日请假' : '未填报(请假' + data.leaveTimes + 'h)')}} -->
-                                        {{data.leaveDays ? (data.leaveDays >= 1 ? $t('other.AskForLeaveOnTheSameDay') : $t('state.DidNotFillIn') + '('+$t('other.AskForLeave') + data.leaveDays + $t('time.day')+')') : (data.leaveTimes >= user.timeType.allday ? $t('other.AskForLeaveOnTheSameDay') : $t('state.DidNotFillIn') + '('+$t('other.AskForLeave') + data.leaveTimes + 'h)')}}
+                                        {{data.leaveDays ? (data.leaveDays >= 1 ? $t('other.AskForLeaveOnTheSameDay') : $t('state.DidNotFillIn') + '('+$t('other.AskForLeave') + data.leaveDays + $t('time.day')+')') : (data.leaveTimes >= user.timeType.allday ? $t('other.AskForLeaveOnTheSameDay') : $t('state.DidNotFillIn') + '('+$t('other.AskForLeave') + data.leaveTimes + '分钟)')}}
                                         </span>
                                         <span v-if="data.isUser == 1 && data.workingTime" style="color:#32cd32;font-size:13px">
                                         <!-- 待审核 -->
-                                        ({{data.workingTime.toFixed(1) + 'h'}})
+                                        ({{data.workingTime.toFixed(1) + '分钟'}})
                                         </span>
                                     </div>
                                 </span>
@@ -116,7 +116,7 @@
                                     <!-- <el-link type="primary" style="margin-right:10px;" :underline="false" @click="isSubstitude=false;fillInReport(-1,0)">{{$t('textLink.fillInTheWork')}}</el-link> -->
                                     <el-link type="primary" v-if="permissions.reportsFillOut" style="margin-right:10px;" :underline="false" @click="isSubstitude=true; fillInReport(-1,2)">{{$t('textLink.helpToFillIn')}}</el-link>
                                     <!-- <el-link type="primary" v-if="permissions.reportSettings" style="margin-right:10px;" :underline="false" @click="fillInReport(-1,2)">补报设置</el-link> -->
-                                    <!-- <el-link type="primary" style="margin-right:10px;" :underline="false" @click="showExportDialog" v-if="permissions.reportExport">{{$t('textLink.exportWork')}}</el-link> -->
+                                    <el-link type="primary" style="margin-right:10px;" :underline="false" @click="showExportDialog" v-if="permissions.reportExport">{{$t('textLink.exportWork')}}</el-link>
                                     <el-link type="primary" style="margin-right:10px;" :underline="false" @click="showWorkTime" >查看报工记录</el-link>
                                     <!--部门负责人给个导出工时的功能 -->
                                     <!-- <el-link type="primary" v-if="user.manageDeptId != 0" style="margin-right:10px;" :underline="false" @click="showExportTimeDialog">{{$t('textLink.exportingTimeStatistics')}}</el-link> -->
@@ -164,7 +164,10 @@
                                                     <p v-if="item2.planType == 0">工序名称:<b>{{item2.procedureName}}</b></p>
                                                     <p v-if="item2.planType == 1">任务名称:<b>{{item2.taskName}}</b></p>
                                                     <p v-if="item2.planType == 1">任务类型:<b>{{item2.taskTypeName}}</b></p>                                                    
-                                                    <p>进度:<el-progress :percentage="item2.progress"  style="margin-left:30px;width:200px;display:inline-block;"></el-progress></p>
+                                                    <p>当日报工件数:<b>{{ item2.finishNum }}</b>
+                                                        <b v-if="item2.status==1" style="margin-left:20px;color:#20a0ff;">进行中</b>
+                                                        <b v-if="item2.status==2" style="margin-left:20px;color:#00ff00;">已完成</b>
+                                                        <b v-if="item2.status==3" style="margin-left:20px;color:#ff0000;">已中止</b></p>
                                                     <p>质检类型:<b>{{checkTypeTxt[item2.checkType]}}</b></p>
                                                     <p>质检人:<b>{{item2.checkerName}}</b></p>
                                                 </el-card>
@@ -658,12 +661,12 @@
         <!--导出报表条件选择 -->
         <el-dialog :title="$t('textLink.exportWork')" v-if="exportDialog" :visible.sync="exportDialog" customClass="customWidth" width="500px">
             <el-form ref="form3" :model="exportParam" >
-                <el-form-item prop="projectId" :label="$t('defaultText.selectProject')">
-                    <el-select v-model="exportParam.projectId" :placeholder="$t('other.allProject')"  clearable filterable style="width:350px;">
-                        <el-option v-for="item in projectList"  :key="item.id" :label="item.projectName" :value="item.id"></el-option>
+                <!-- <el-form-item prop="projectId" :label="'导出计划'">
+                    <el-select v-model="exportParam.projectId" :placeholder="'全部计划'"  clearable filterable style="width:350px;">
+                        <el-option v-for="item in allPlanList"  :key="item.id" :label="item.productName" :value="item.id"></el-option>
                     </el-select>
-                </el-form-item>
-                <el-form-item prop="departmentId" :label="$t('other.selectdepartment')" v-if="permissions.reportsCompany">
+                </el-form-item> -->
+                <el-form-item prop="departmentId" :label="'选择工位'" v-if="permissions.reportsCompany">
 
                     <el-cascader v-if="user.userNameNeedTranslate != 1" v-model="exportParam.departmentId" :placeholder="$t('other.allDepartments')" :options="departmentList" :props="{ checkStrictly: true, value: 'id' }" clearable style="width: 350px;"></el-cascader>
 
@@ -681,13 +684,13 @@
                         :end-placeholder="$t('time.endDate')"
                     ></el-date-picker>
                 </el-form-item>
-                <el-form-item prop="stateKey" :label="$t('other.doesItContain')">
+                <!-- <el-form-item prop="stateKey" :label="$t('other.doesItContain')">
                     <el-select v-model="stateKey" :placeholder="$t('defaultText.pleaseChoose')" filterable style="width:350px;">
                         <el-option :label="$t('state.alreadyPassed')" value="0"></el-option>
                         <el-option :label="$t('state.WaitingAudit')" value="2"></el-option>
                         <el-option :label="$t('state.alreadyPassedAndWaitingAudit')" value="1"></el-option>
                     </el-select>
-                </el-form-item>
+                </el-form-item> -->
             </el-form>
             <div slot="footer" class="dialog-footer">
                 <el-button type="primary" @click="exportReport" style="width:100%;" :loading="listLoading">{{$t('export.export')}}</el-button>
@@ -1645,6 +1648,8 @@
                 integrationProjectList: [],
 
                 totalReportHours: 0, // 合计的工时
+
+                allPlanList: [], // 所有计划
             };
         },
         watch: {
@@ -1694,6 +1699,7 @@
             // this.getTimeType();
             this.getDepartment();
             this.scrollFunction()
+            this.getAllPlanList()
             // this.userssHu();
             if(this.user.timeType.reportAuditType == 3){
                 this.getAllUsersList()
@@ -1714,6 +1720,14 @@
         },
         methods: {
             ...mapMutations(['upDataLoading']),
+            // 获取所有计划
+            getAllPlanList() {
+                this.http.post('/plan/allPlanList', {}, res => {
+                    if(res.code == 'ok') {
+                        this.allPlanList = res.data
+                    }
+                })
+            },
             openModImportTime(row) {
                 this.showModImportTimeDialog = true;
                 this.modItemDataId = row.id;
@@ -4259,18 +4273,14 @@
             exportReport() {
                 this.listLoading = true;
                 var param = {};
-                if (this.exportParam.dateRange != null) {
-                    param = {startDate:this.exportParam.dateRange[0], endDate: this.exportParam.dateRange[1]};
-                }
-                if (this.exportParam.projectId != null) {
-                    param.projectId = this.exportParam.projectId;
-                }
-                if (this.exportParam.departmentId != null) {
-                    param.departmentId = this.exportParam.departmentId[this.exportParam.departmentId.length - 1]
+                const { dateRange, departmentId } = this.exportParam
+                param.startDate = dateRange[0]
+                param.endDate = dateRange[1]
+                console.log(departmentId)
+                if(departmentId && departmentId.length > 0) {
+                    param.departmentId = departmentId[departmentId.length - 1]
                 }
-                param.stateKey = this.stateKey
-                // param.departmentId = this.user.departmentId
-                this.http.post( this.port.report.export, param,
+                this.http.post('/report/exportReport', param,
                 res => {
                     this.listLoading = false;
                     if (res.code == "ok") {

+ 27 - 0
fhKeeper/formulahousekeeper/timesheet/src/views/project/info.vue

@@ -100,6 +100,12 @@
                             <el-col :span="18" ><span>{{project.projectSeparate.bu}}</span></el-col>
                         </el-row>
                     </div>
+                    <div v-if="user.timeType.projectManDay">
+                        <el-row :gutter="10" >
+                            <el-col :span="5" ><span class="gray_label">实际/预估工时:</span></el-col><el-col :span="7" ></el-col>
+                            <el-col :span="18" ><b :style="fillTimeData.total>project.manDay*user.timeType.allday?'color:red;':''">{{fillTimeData.total}}</b>/<b>{{project.manDay*user.timeType.allday}}</b>&nbsp;小时</el-col>
+                        </el-row>
+                    </div>
                     <!-- <div v-if="user.companyId == '428'">
                         <el-row :gutter="10" >
                             <el-col :span="5" ><span class="gray_label">{{ $t('projectgroup') }}:</span></el-col><el-col :span="7" ></el-col>
@@ -778,6 +784,7 @@
                 addFormVisible:false,
                 userDetail:{},
                 userDetailVisible: false,
+                fillTimeData:{total:0, waiting: 0},
                 importanceList:[{id:1,label:this.$t('zheng-chang')},{id:2,label:this.$t('jin-ji')},{id:3,label:this.$t('zhong-yao')},{id:4,label:this.$t('zhong-yao-qie-jin-ji')}],
                 //1-一般,2-紧急,3-重要,4-重要且紧急
                 levelTxt:[this.$t('all'),this.$t('zheng-chang'),this.$t('jin-ji'),this.$t('zhong-yao'),this.$t('zhong-yao-qie-jin-ji')],
@@ -2043,6 +2050,25 @@
                     });
                 })
             },
+            
+            getProjectFillTime() {
+                this.http.post('/project/getProjectFillTime', {projectId: this.curProjectId},
+                res => {
+                    if (res.code == "ok") {
+                        this.fillTimeData = res.data
+                    } else {
+                        this.$message({
+                            message: res.msg,
+                            type: "error"
+                        });
+                    }
+                },error => {
+                    this.$message({
+                        message: error,
+                        type: "error"
+                    });
+                })
+            },
             // 处理数据
             chulishuju(data) {
                 let arrLists = JSON.parse(JSON.stringify(this.projectCustomList))
@@ -2220,6 +2246,7 @@
             if(this.user.companyId == '936') {
                 this.getKeyNodes()
             }
+            this.getProjectFillTime();
 
             const usersJson = JSON.parse(sessionStorage.getItem("user"))
             if(usersJson.companyId == '936') {

+ 52 - 4
fhKeeper/formulahousekeeper/timesheet/src/views/project/projectInside.vue

@@ -57,6 +57,9 @@
                                         <el-dropdown-item divided @click.native="renameGroup(item)" :disabled="!(projectCreatorId == user.id || projectInchargerId == user.id || permissions.projectManagement || isManageDept)">
                                             <i class="el-icon-edit"></i>
                                             {{ $t('changegroups') }}</el-dropdown-item>
+                                        <el-dropdown-item divided @click.native="setManDay(item)" v-if="user.timeType.projectManDay==1" :disabled="!(projectCreatorId == user.id || projectInchargerId == user.id || permissions.projectManagement || isManageDept)">
+                                            <i class="el-icon-time"></i>
+                                            预估工时</el-dropdown-item>
                                         <el-dropdown-item divided @click.native="addToTemplate(item)" :disabled="!(projectCreatorId == user.id || projectInchargerId == user.id || permissions.projectManagement || isManageDept)">
                                             <i class="el-icon-plus"></i>
                                             {{ $t('settemplate') }}</el-dropdown-item>
@@ -71,7 +74,6 @@
                                         <el-dropdown-item divided @click.native="deleteGroup(item)" :disabled="!(projectCreatorId == user.id || projectInchargerId == user.id || permissions.projectManagement || isManageDept)">
                                             <i class="el-icon-delete"></i>
                                             {{ $t('deletethegroup') }} </el-dropdown-item>
-                                            <!-- 设置参与人 0000 -->
                                         <el-dropdown-item divided @click.native="getGroupDetails(item)">
                                             <i class="el-icon-tickets"></i>
                                             {{ $t('groupdetails') }} </el-dropdown-item>
@@ -93,7 +95,7 @@
                     <!-- 分组详情 -->
                     <el-dialog :title="groupDetailTil" :visible.sync="groupDetailsShow" width="500px" :before-close="handleClose">
                         <div>
-                            <el-form label-width="80px">
+                            <el-form label-width="90px">
                                 <el-form-item :label="$t('head') + ':'">
                                     <span v-if="user.userNameNeedTranslate != '1'">{{groupDetailData.incharger}}</span>
                                     <span v-if="user.userNameNeedTranslate == '1'">
@@ -111,9 +113,12 @@
                                         <span v-if="index < groupDetailData.participators.length - 1">、</span>
                                     </span>
                                 </el-form-item>
-                                <el-form-item label="wbsCode" v-if="user.companyId == 936">
+                                <el-form-item label="wbsCode" v-if="user.companyId == 936">
                                     <span>{{groupDetailData.wbsCode}}</span>
                                 </el-form-item>
+                                <el-form-item label="预估工时:" v-if="user.timeType.projectManDay">
+                                    <span>{{groupDetailData.manDay}}人天 ({{ (groupDetailData.manDay==null?0:groupDetailData.manDay)*user.timeType.allday }}小时)</span>
+                                </el-form-item>
                             </el-form>
                         </div>
                         <span slot="footer" class="dialog-footer">
@@ -1133,6 +1138,22 @@
                 <el-button type="primary" @click="addGroup('form2')" style="width:100%;" >{{ $t('save') }}</el-button>
             </div>
         </el-dialog>
+        
+        <el-dialog title="设置分组预估工时" v-if="modGroupManDayDialog" :visible.sync="modGroupManDayDialog" :close-on-click-modal="false" customClass="customWidth" width="450px">
+            <el-table :data="groupList" size="small" :key="Math.random()" :height="'400px'" show-summary="true">
+                <el-table-column prop="name" label="分组名称">
+                </el-table-column>
+                <el-table-column prop="manDay" width="200" label="预估工时" >
+                    <template slot-scope="scope">
+                        <el-input v-model="scope.row.manDay" type="number"  :placeholder="$t('peaseenterthe')" maxlength="10" :max="99999" style="width:120px;"></el-input>&nbsp;人天
+                    </template>
+                </el-table-column>
+            </el-table>
+            <p style="text-align:center;">当前项目预估工时为:{{ currentProject.manDay == null? 0:currentProject.manDay }}人天</p>
+            <div slot="footer" class="dialog-footer">
+                <el-button type="primary" @click="setManDayData()" style="width:100%;" >{{ $t('save') }}</el-button>
+            </div>
+        </el-dialog>
         <el-dialog :title="$t('addtemplate')" v-if="addToTmpDialog" :visible.sync="addToTmpDialog" :close-on-click-modal="false" customClass="customWidth" width="500px">
             <el-form ref="formTmp" :model="templateForm" :rules="rules" style="margin-top:10px;">
                     <el-form-item prop="name">
@@ -1257,6 +1278,7 @@
         
         data() {
             return {
+                modGroupManDayDialog: false,
                 isManageDept: false,
                 componentFlg: false,
                 mileageCup: false,
@@ -1336,6 +1358,9 @@
                 rules: {
                     name: [{ required: true, message: this.$t('pleaseenteragroupname'), trigger: "blur" }],
                 },
+                rulesManDay: {
+                    manDay: [{ required: true, message: '请输入预估工时', trigger: "blur" }],
+                },
                 rules2: {
                     stagesName: [{ required: true, message: this.$t('pleaseenteratasklistname'), trigger: "blur" }],
                 },
@@ -3038,6 +3063,10 @@
                 this.groupForm = JSON.parse(JSON.stringify(item));
                 this.setInchargerDialog = true;
             },
+            setManDay(item) {
+                this.groupForm = JSON.parse(JSON.stringify(item));
+                this.modGroupManDayDialog = true;
+            },
             renameGroup(item) {
                 this.groupForm = JSON.parse(JSON.stringify(item));
                 this.modGroupDialog = true;
@@ -3181,7 +3210,26 @@
                     });
                 });
             },
-
+            setManDayData() {
+                this.http.post('/task-group/saveManDay',{data:JSON.stringify(this.groupList)},
+                        res => {
+                            if (res.code == "ok") {
+                                this.modGroupManDayDialog = false;
+                                this.groupList = res.data;
+                            } else {
+                                this.$message({
+                                message: res.msg,
+                                type: "error"
+                                });
+                            }
+                        },
+                        error => {
+                            this.$message({
+                                message: error,
+                                type: "error"
+                            });
+                        });
+            },
             // 重新定义了 addGroup 方法
              addGroup(formName) {
                 // return

+ 2 - 2
fhKeeper/formulahousekeeper/timesheet/src/views/task/list.vue

@@ -57,7 +57,7 @@
                     </div>
                 </el-form-item>
                 <el-form-item >
-                    <div style="margin-left: 80px">
+                    <div style="margin-left: 20px">
                         <el-select v-model="dateType" style="width:120px;" size="small" slot="prepend" :placeholder="$t('defaultText.pleaseChoose')">
                             <el-option :label="$t('starttimes')" :value="0" @click.native="hiddens(1)"></el-option>
                             <el-option :label="$t('deadline')" :value="1" @click.native="hiddens(1)"></el-option>
@@ -352,7 +352,7 @@
 }
 .autodatespan{
     padding: 1.5px 2.5px;
-    width: 73px;
+    width: 90px;
     height: 16px;
     line-height: 16px;
     text-align: center;

+ 44 - 2
fhKeeper/formulahousekeeper/timesheet/src/views/team/index.vue

@@ -271,6 +271,7 @@
                 <el-button size="small" type="primary" @click="handleSelectionZzjgbtn3" v-if="user.userNameNeedTranslate != 1">{{ $t('modifyingDepartments') }}</el-button>
                 <el-button size="small" type="primary" @click="handJue">{{ $t('modifyingRoles') }}</el-button>
                 <el-button size="small" type="primary" @click="workingHoursDialogClick()">修正工时所属部门</el-button>
+                <el-button size="small" type="primary" @click="handleSelectionUser()">批量启用员工</el-button>
                
                 
                 
@@ -356,7 +357,7 @@
                           <span style="float: right; color: #8492a6; font-size: 13px">{{ item.jobNumber }}</span>
                         </el-option>
                     </el-select>
-                    <selectCat :size="'medium'" :widthStr="'360'" v-if="user.userNameNeedTranslate == '1'" :subject="users" :subjectId="depForm.managerId" :distinction="'3'" @selectCal="selectCal"></selectCat>
+                    <selectCat :size="'medium'" :clearable="true" :widthStr="'360'" v-if="user.userNameNeedTranslate == '1'" :subject="users" :subjectId="depForm.managerId" :distinction="'3'" @selectCal="selectCal"></selectCat>
                 </el-form-item>
 
                 <!-- 其他负责人 --> 
@@ -367,7 +368,7 @@
                           <span style="float: right; color: #8492a6; font-size: 13px">{{ item.jobNumber }}</span>
                         </el-option>
                     </el-select>
-                    <selectCat :size="'medium'" :widthStr="'360'" v-if="user.userNameNeedTranslate == '1' && departmentVisible" :subject="users" :subjectId="depForm.otherManagerIds" :distinction="'4'" @selectCal="selectCal"></selectCat>
+                    <selectCat :size="'medium'" :widthStr="'360'" v-if="user.userNameNeedTranslate == '1' && departmentVisible" :subject="users" :subjectId="depForm.otherManagerIds" :distinction="'4'" :clearable="true" @selectCal="selectCal"></selectCat>
                 </el-form-item>
                 <!-- 直属领导 -->
                 <el-form-item :label="$t('leadership')" prop="reportAuditUserid" v-if="user.timeType.needDeptAudit">
@@ -1888,6 +1889,47 @@ export default {
       this.handljues = true;
       // console.log('触发了')
     },
+    handleSelectionUser() {
+      // console.log(this.handleSelectionZzjgDate)
+      //接口调用样例代码如下
+      var ids = [];
+      for (
+        let index = 0;
+        index < this.handleSelectionZzjgDate.length;
+        index++
+      ) {
+        ids.push(this.handleSelectionZzjgDate[index].id);
+      }
+      // console.log(ids);
+
+      this.http.post(
+        "/user/setActiveByIds",
+        {
+          ids: JSON.stringify(ids),
+          isActive:1
+        },
+        (res) => {
+          if (res.code == "ok") {
+            this.$message({
+              message: this.$t('message.modifyTheSuccess'),
+              type: "success",
+            });
+            this.getUser();
+          } else {
+            this.$message({
+              message: res.msg,
+              type: "error",
+            });
+          }
+        },
+        (error) => {
+          this.$message({
+            message: error,
+            type: "error",
+          });
+        }
+      );
+    },
     handTrue() {
       var arr = [];
       for (var i in this.handleSelectionZzjgDate) {

+ 7 - 4
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

@@ -7213,13 +7213,16 @@
                             if (res.code == "ok") {
                                 if(res.msg!=null){
                                     this.$message({
-                                    message: res.msg,
-                                    type: "success"
+                                        dangerouslyUseHTMLString: true,
+                                        message: res.msg,
+                                        type: "warning",
+                                        showClose: true,
+                                        duration: 0
                                     });
                                 }else{
                                     this.$message({
-                                    message: this.isDraft==0?this.$t('message.submittedSuccessfully'):this.$t('message.Temporarysuccess'),
-                                    type: "success"
+                                        message: this.isDraft==0?this.$t('message.submittedSuccessfully'):this.$t('message.Temporarysuccess'),
+                                        type: "success"
                                     });
                                 }
                                 this.dialogVisible = false;

+ 24 - 4
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/weeklyCustomization.vue

@@ -17,7 +17,8 @@
                     <el-table-column label="项目" width="220">
                         <template slot-scope="scope">
                             <el-select v-model="scope.row.projectId" size="small" placeholder="请选择项目" clearable
-                                @change="changeProject(scope.row.projectId, scope.$index)" :disabled="scope.row.state == 1 || scope.row.state == 0 || !scope.row.canFill">
+                                @change="changeProject(scope.row.projectId, scope.$index)"
+                                :disabled="scope.row.state == 1 || scope.row.state == 0 || !scope.row.canFill">
                                 <el-option v-for="item in projectList" :key="item.id" :label="item.projectName"
                                     :value="item.id">
                                 </el-option>
@@ -38,7 +39,8 @@
                     <el-table-column prop="content" label="工作内容" width="300">
                         <template slot-scope="scope">
                             <el-input size="small" type="textarea" :rows="2" v-model="scope.row.content"
-                                :disabled="scope.row.state == 1 || scope.row.state == 0 || !scope.row.canFill" resize="none"></el-input>
+                                :disabled="scope.row.state == 1 || scope.row.state == 0 || !scope.row.canFill"
+                                resize="none"></el-input>
                         </template>
                     </el-table-column>
                     <el-table-column prop="workingTime" label="时间(小时)" width="160">
@@ -253,11 +255,29 @@ export default {
                 this.nowTime = this.dayjs(this.nowTime).add(time, 'day').format('YYYY-MM-DD')
             }
             let { data } = await this.getData('/report/getWeeklyFillReportData', { targetDate: this.nowTime })
+            console.log(JSON.parse(JSON.stringify(data)), '<===== 处理之前的')
+            data.dateList.forEach(dateItem => {
+                const reportList = dateItem.reportList;
+                reportList.forEach(report => {
+                    const { state, taskGroups } = report;
+                    console.log(state, taskGroups);
+                    if(state != 1 && state != 0 && taskGroups && taskGroups.length > 0) {
+                        console.log('执行');
+                        report.projectAuditorId = taskGroups[0].inchargerId;
+                        report.projectAuditorName = taskGroups[0].inchargerName;
+                    }
+                    if(state == 1 && state == 0 && taskGroups && taskGroups.length > 0) {
+                        taskGroups[0].inchargerId = report.projectAuditorId;
+                        taskGroups[0].inchargerName = report.projectAuditorName;
+                    }
+                });
+            });
+            console.log(data, '<===== 处理之后的')
             const { dateList, projectList, sumTimeList, cardTimeList } = data;
             const weekTableData = dateList.flatMap(date => {
                 const { weekDayTxt, date: dateTime, reportList, canFill } = date;
-                const reports = reportList.map(report => ({ ...report, weekDayTxt, dateTime, canFill}));
-                return reports.length > 0 ? reports : [{ weekDayTxt, dateTime, canFill}];
+                const reports = reportList.map(report => ({ ...report, weekDayTxt, dateTime, canFill }));
+                return reports.length > 0 ? reports : [{ weekDayTxt, dateTime, canFill }];
             });
             let sumSet = new Set();
             weekTableData.forEach(obj => {

+ 9 - 2
fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/index.vue

@@ -2271,11 +2271,18 @@ import timetoolVue from '../timetool/timetool.vue';
                         if(res.code == "ok") {
                             this.$toast.clear();
                             if(res.msg!=null){
-                                this.$toast.success(res.msg);                                    
+                                this.$dialog.alert({
+                                    message: res.msg,
+                                }).then(() => {
+                                    // on close
+                                    this.$router.push("/index");
+                                });
                             }else{
                                 this.$toast.success(this.isDraft==0?'提交成功':'暂存成功');
+                                setTimeout(()=> {
+                                    that.$router.push("/index");
+                                }, 1000);
                             }
-                            this.$router.push("/index");
                         } else {
                             this.$toast.clear();
                             this.$toast.fail((this.isDraft==0?'提交失败':'暂存失败')+':'+res.msg);

+ 68 - 7
fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/weekEdit.vue

@@ -19,7 +19,13 @@
                     type="default"
                     size="mini"
                     @click="switchWeek(item,index)"
-                    :disabled="canSelect(item)">{{weekArr[index]}}</van-button>
+                    :disabled="canSelect(item)" v-if="user.timeType.enableNewWeeklyfill != 1">{{weekArr[index]}}</van-button>
+                    <van-button
+                    class="selectgxbtn"
+                    type="default"
+                    size="mini"
+                    @click="switchWeek(item,index)"
+                    :disabled="canSelect(item)" v-if="user.timeType.enableNewWeeklyfill == 1">{{ weekText(dateRange[index]) }}</van-button>
                 </van-grid-item>
                 <van-grid-item v-if="weekIndex != 7">
                     <van-button type="default" size="mini" class="selectgxbtn" @click="addWeekIndex()" icon="plus" v-if="user.timeType.enableNewWeeklyfill != 1"></van-button>
@@ -484,6 +490,16 @@
             };
         },
         methods: {
+            // 获取地址上的参数
+            getUrlKey(name) {
+                return (
+                    decodeURIComponent(
+                        (new RegExp("[?|&]" + name + "=" + "([^&;]+?)(&|#|;|$)").exec(
+                            location.href
+                        ) || [, ""])[1].replace(/\+/g, "%20")
+                    ) || null
+                );
+            },
             getRecentlyProject() {
                 this.$axios.post('/project/nearProject',{})
                 .then(res => {
@@ -666,6 +682,7 @@
                 // }else{
                 //     this.weekIndex = 5
                 // }
+                const { enableNewWeeklyfill } = this.user.timeType // 针对物奇
                 if(this.user.timeType.alertNonWorkday) {
                     if(this.user.timeType.alertNonWorkday == '110' || this.user.timeType.alertNonWorkday == '10') {
                         this.weekIndex = 7
@@ -678,6 +695,17 @@
                 }
 
                 let nowDate = new Date()
+
+                console.log(nowDate, '<=== nowDate')
+                // 针对物奇
+                if(enableNewWeeklyfill == 1) {
+                    const urldate = this.getUrlKey('date')
+                    if(urldate) {
+                        nowDate = new Date(urldate)
+                    }
+                }
+                
+
                 let nowWeekday = nowDate.getDay()
 
                 let shuldDate
@@ -691,15 +719,16 @@
 
                 // 时间段数组
                 let date = new Date(shuldDate.getFullYear(),shuldDate.getMonth(),shuldDate.getDate()-shuldDate.getDay()+1)
-
-                const { enableNewWeeklyfill } = this.user.timeType // 针对物奇
+                console.log(this.formatDate(date), '<=== date', this.formatDate(shuldDate), this.formatDate(nowWeekday))
                 this.dateRange = []
-                if(enableNewWeeklyfill) {
+
+                if(enableNewWeeklyfill) { // 针对物奇
                     let { data } = await this.$axios.post('/report/getWeeklyFillReportData', {
                         targetDate: this.formatDate(date)
                     })
                     let { dateList } = data
                     this.dateRange = dateList.map(item => new Date(item.date))
+                    this.dateText = [dateList[0].date, dateList[dateList.length - 1].date]
                 } else {
                     for(let i=0;i<this.weekIndex;i++){
                         this.dateRange.push(new Date(date.getFullYear(),date.getMonth(),date.getDate()+i))
@@ -717,7 +746,10 @@
 
                 let startDateStr = startDate.getFullYear() + '-' + (startDateM < 10 ? '0' + startDateM : startDateM) + '-' + (startDateD < 10 ? '0' + startDateD : startDateD)
                 let endDateStr = endDate.getFullYear() + '-' + (endDateM < 10 ? '0' + endDateM : endDateM) + '-' + (endDateD < 10 ? '0' + endDateD : endDateD)
-                this.dateText = [startDateStr,endDateStr]
+
+                if(enableNewWeeklyfill != 1) {
+                    this.dateText = [startDateStr,endDateStr]
+                }
 
                 this.form = []
                 for(let i=0;i<this.weekIndex;i++){
@@ -2008,8 +2040,19 @@
                     // this.flgLg = true
                     if(res.code == "ok") {
                         this.$toast.clear();
-                        this.$toast.success(this.isDraft==0?'提交成功':'暂存成功');
-                        this.$router.push("/index");
+                        if(res.msg!=null){
+                            this.$dialog.alert({
+                                message: res.msg,
+                            }).then(() => {
+                                // on close
+                                this.$router.push("/index");
+                            });
+                        }else{
+                            this.$toast.success(this.isDraft==0?'提交成功':'暂存成功');
+                            setTimeout(()=> {
+                                that.$router.push("/index");
+                            }, 1000);
+                        }
                     } else {
                         this.$toast.clear();
                         this.$toast.fail((this.isDraft==0?'提交失败':'暂存失败')+':'+res.msg);
@@ -2229,6 +2272,15 @@
                     )
                 });
             },
+            weekText(item) {
+                return this.getWeekDay(item)
+            },
+            // 中国标准时间转成周几
+            getWeekDay(date) {
+                var week = new Date(date).getDay();
+                var weekArr = ['日', '一', '二', '三', '四', '五', '六'];
+                return '周' + weekArr[week];
+            },
             // 中国标准时间转成YYYY-MM-DD
             formatDate(date) {
                 if (!date) {
@@ -2254,6 +2306,15 @@
         },
         
         mounted() {
+            this.getUrlKey('date')
+            const { enableNewWeeklyfill } = this.user.timeType // 针对物奇
+            // if(enableNewWeeklyfill == 1) {
+            //     const urldate = this.getUrlKey('date')
+            //     if(urldate) {
+            //         this.nowTime = this.formatTime(urldate)
+            //         console.log(this.nowTime, '时间')
+            //     }
+            // }
             this.timeRange = []
             for(let i=0.5; i<=20; i+=0.5){
                 this.timeRange.push(i)

+ 2 - 2
fhKeeper/formulahousekeeper/timesheet_h5/src/views/index/index.vue

@@ -188,9 +188,9 @@
                         if(this.user.companyId != '1071') { // 针对物奇公司去掉填写日报
                             this.routers.push({name: '填写日报',url: '/edit',icon: 'edit'})
                             //物奇临时去掉按周填报
-                            this.routers.push({name: '按周填报',url: '/weekEdit',icon: 'records'})
+                            // this.routers.push({name: '按周填报',url: '/weekEdit',icon: 'records'})
                         }
-                        // this.routers.push({name: '按周填报',url: '/weekEdit',icon: 'records'})                        }
+                        this.routers.push({name: '按周填报',url: '/weekEdit',icon: 'records'})
                     }
                     if(list[i].name == '待办任务') {
                         this.routers.push({

+ 17 - 6
fhKeeper/formulahousekeeper/timesheet_h5/src/views/view/index.vue

@@ -252,12 +252,23 @@ export default {
         },
         // 去填写日报
         toWriteReport() {
-            this.$router.push({
-                path: '/edit',
-                query: {
-                    date: this.nowTime
-                }
-            });
+            if(this.user.companyId == '1071') {
+                //物奇要填到按周填报
+                this.$router.push({
+                    path: '/weekEdit',
+                    query: {
+                        date: this.nowTime
+                    }
+                });
+            } else {
+                this.$router.push({
+                    path: '/edit',
+                    query: {
+                        date: this.nowTime
+                    }
+                });
+            }
+            
         }
     },
     mounted() {