Browse Source

Merge remote-tracking branch 'origin/master'

yusm 1 year ago
parent
commit
7ac6d0da4b
19 changed files with 466 additions and 325 deletions
  1. 42 2
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/DepartmentController.java
  2. 10 8
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/controller/ReportController.java
  3. 0 6
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/entity/PlanProcedureTotal.java
  4. 0 7
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/entity/ProdProcedureTeam.java
  5. 11 1
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/entity/Report.java
  6. 2 1
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/ReportService.java
  7. 4 3
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/PlanProcedureTotalServiceImpl.java
  8. 77 247
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  9. 1 1
      fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/util/CodeGenerator.java
  10. 1 2
      fhKeeper/formulahousekeeper/management-workshop/src/main/resources/mapper/PlanProcedureTotalMapper.xml
  11. 3 4
      fhKeeper/formulahousekeeper/management-workshop/src/main/resources/mapper/ProdProcedureTeamMapper.xml
  12. 3 3
      fhKeeper/formulahousekeeper/management-workshop/src/main/resources/mapper/ReportMapper.xml
  13. 7 3
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/components/chooseSomeone.vue
  14. 17 1
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/index/index.vue
  15. 28 11
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/workView/fillReport.vue
  16. 233 18
      fhKeeper/formulahousekeeper/timesheet-workshop-h5/src/views/workView/workView.vue
  17. 1 1
      fhKeeper/formulahousekeeper/timesheet-workshop/src/views/workReport/daily.vue
  18. 2 2
      fhKeeper/formulahousekeeper/timesheet/src/views/team/index.vue
  19. 24 4
      fhKeeper/formulahousekeeper/timesheet/src/views/workReport/weeklyCustomization.vue

+ 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;
+    }
 }
 

+ 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) {

+ 0 - 6
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/entity/PlanProcedureTotal.java

@@ -53,11 +53,6 @@ public class PlanProcedureTotal extends Model<PlanProcedureTotal> {
     @TableField("total_working_hours")
     private Double totalWorkingHours;
 
-    /**
-     * 总件数
-     */
-    @TableField("total_num")
-    private Integer totalNum;
 
     @TableField(exist = false)
     private ProdProcedure prodProcedure;
@@ -82,7 +77,6 @@ public class PlanProcedureTotal extends Model<PlanProcedureTotal> {
 
     @TableField(exist = false)
     private boolean cancellationReceive;
-
     @Override
     protected Serializable pkVal() {
         return this.id;

+ 0 - 7
fhKeeper/formulahousekeeper/management-workshop/src/main/java/com/management/platform/entity/ProdProcedureTeam.java

@@ -102,13 +102,6 @@ public class ProdProcedureTeam extends Model<ProdProcedureTeam> {
     @TableField("steel_num_array")
     private String steelNumArray;
 
-    /**
-     * 完成件数;支持小数
-     */
-    @TableField("finish_num")
-    private Double finishNum;
-
-
     @Override
     protected Serializable pkVal() {
         return this.id;

+ 11 - 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-11-20
+ * @since 2023-11-21
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -140,6 +140,16 @@ public class Report extends Model<Report> {
     @TableField("finish_num")
     private Double finishNum;
 
+    //是否完工
+    @TableField(exist = false)
+    private Boolean isFinish;
+
+    /**
+     * 1-进行中,2-已完工,3-已中止(员工自己中止或者管理端中止)
+     */
+    @TableField("status")
+    private Integer status;
+
 
     @Override
     protected Serializable pkVal() {

+ 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);
+
 }

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

@@ -73,6 +73,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 +83,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"));

+ 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");

+ 1 - 2
fhKeeper/formulahousekeeper/management-workshop/src/main/resources/mapper/PlanProcedureTotalMapper.xml

@@ -9,12 +9,11 @@
         <result column="prod_procedure_id" property="prodProcedureId" />
         <result column="total_wages" property="totalWages" />
         <result column="total_working_hours" property="totalWorkingHours" />
-        <result column="total_num" property="totalNum" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, plan_id, prod_procedure_id, total_wages, total_working_hours, total_num
+        id, plan_id, prod_procedure_id, total_wages, total_working_hours
     </sql>
 
 </mapper>

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

@@ -17,18 +17,17 @@
         <result column="status" property="status" />
         <result column="is_change" property="isChange" />
         <result column="steel_num_array" property="steelNumArray" />
-        <result column="finish_num" property="finishNum" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, company_id, user_id, work_time, job_of_money, progress, checker_id, checker_name, update_time, plan_procedure_id, status, is_change, steel_num_array, finish_num
+        id, company_id, user_id, work_time, job_of_money, progress, checker_id, checker_name, update_time, plan_procedure_id, status, is_change, steel_num_array
     </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`,
+        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
+        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

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

@@ -20,8 +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="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" />
@@ -31,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, finish_num
+        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
@@ -263,7 +263,7 @@
                 and r.create_date between #{startDate} and #{endDate}
             </if>
             <if test="steelNum!=null and steelNum!=''">
-            JSON_CONTAINS(r.steel_num_array,CONCAT('"',#{steelNum},'"'))
+                JSON_CONTAINS(r.steel_num_array,CONCAT('"',#{steelNum},'"'))
             </if>
         </where>
         order by r.create_date desc

+ 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: '今日计划',

+ 28 - 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,11 @@ 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 } = this.$route.query;
+      this.$axios.post("/plan-procedure-total/getFillProcedureDetail", { 
+        id: id,
+        inputSteelNum:this.inputSteelNum
+      })
         .then(res => {
           if (res.code == "ok") {
             this.reportForm = res.data;

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

@@ -1,19 +1,39 @@
 <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.replace(/-/g, '') }}</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 +42,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 +85,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 +108,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 +146,168 @@ 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.join('-'),
+            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
+          })
+        }
+        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
         }
       })
     },
+
+    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
+      }
+    }
   },
 };
 </script>
@@ -129,12 +316,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 +390,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 +439,5 @@ export default {
       }
     }
   }
-}</style>
+}
+</style>

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

@@ -164,7 +164,7 @@
                                                     <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></p>
                                                     <p>质检类型:<b>{{checkTypeTxt[item2.checkType]}}</b></p>
                                                     <p>质检人:<b>{{item2.checkerName}}</b></p>
                                                 </el-card>

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

@@ -356,7 +356,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 +367,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">

+ 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 => {