Prechádzať zdrojové kódy

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

Min 1 rok pred
rodič
commit
e5b6d95df9
21 zmenil súbory, kde vykonal 536 pridanie a 110 odobranie
  1. 56 0
      fhKeeper/formulahousekeeper/management-platform/my_prod.cnf
  2. 40 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectCcuserController.java
  3. 2 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectController.java
  4. 16 3
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java
  5. 13 9
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskGroupController.java
  6. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserCorpwxTimeController.java
  7. 26 8
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserFvTimeController.java
  8. 54 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/ProjectCcuser.java
  9. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ProjectCcuserMapper.java
  10. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectCcuserService.java
  11. 1 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectService.java
  12. 20 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectCcuserServiceImpl.java
  13. 64 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java
  14. 110 37
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  15. 6 21
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/util/TestSample.java
  16. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/application.yml
  17. 18 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectCcuserMapper.xml
  18. 4 4
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportMapper.xml
  19. 52 7
      fhKeeper/formulahousekeeper/timesheet/src/views/project/list.vue
  20. 1 1
      fhKeeper/formulahousekeeper/timesheet/src/views/team/index.vue
  21. 19 16
      fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

+ 56 - 0
fhKeeper/formulahousekeeper/management-platform/my_prod.cnf

@@ -0,0 +1,56 @@
+# For advice on how to change settings please see
+# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
+[mysqld_multi]
+
+mysqld =/usr/sbin/mysqld
+mysqladmin = /usr/bin/mysqladmin
+[mysqld]
+#
+# Remove leading # and set to the amount of RAM for the most important data
+# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
+# innodb_buffer_pool_size = 128M
+#
+# Remove leading # to turn on a very important data integrity option: logging
+# changes to the binary log between backups.
+# log_bin
+#
+# Remove leading # to set options mainly useful for reporting servers.
+# The server defaults are faster for transactions and fast SELECTs.
+# Adjust sizes as needed, experiment to find the optimal values.
+# join_buffer_size = 128M
+# sort_buffer_size = 2M
+# read_rnd_buffer_size = 2M
+port=7644
+datadir=/var/lib/mysql
+socket=/var/lib/mysql/mysql.sock
+server_id=2 
+# Disabling symbolic-links is recommended to prevent assorted security risks
+symbolic-links=0
+
+max_allowed_packet = 10M
+
+log-error=/var/log/mysqld.log
+pid-file=/var/run/mysqld/mysqld.pid
+sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
+[mysqld1] 
+basedir=/usr
+
+datadir = /data/mysql1      
+
+port = 3307
+server_id=3
+socket = /tmp/mysql3307.sock
+
+skip-host-cache
+
+skip-name-resolve
+
+character-set-server=utf8
+
+sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
+
+wait_timeout=2147483 
+
+interactive_timeout=2147483
+
+max_allowed_packet = 10M

+ 40 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectCcuserController.java

@@ -0,0 +1,40 @@
+package com.management.platform.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.management.platform.entity.ProjectAuditor;
+import com.management.platform.entity.ProjectCcuser;
+import com.management.platform.mapper.ProjectAuditorMapper;
+import com.management.platform.mapper.ProjectCcuserMapper;
+import com.management.platform.util.HttpRespMsg;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Seyason
+ * @since 2023-07-13
+ */
+@RestController
+@RequestMapping("/project-ccuser")
+public class ProjectCcuserController {
+
+    @Resource
+    private ProjectCcuserMapper projectCcuserMapper;
+
+    @RequestMapping("/getList")
+    private HttpRespMsg getList(Integer projectId) {
+        List<ProjectCcuser> auditorList = projectCcuserMapper.selectList(new QueryWrapper<ProjectCcuser>().eq("project_id", projectId));
+        HttpRespMsg msg = new HttpRespMsg();
+        msg.data = auditorList;
+        return msg;
+    }
+}
+

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

@@ -148,6 +148,7 @@ public class ProjectController {
                                    String associateDegreeNames,
                                    Integer taskGpIncharge,
                                    String auditUserIds,
+                                   String ccUserIds,
                                    Integer category,
                                    String projectDesc,
                                    Integer projectMainId,
@@ -170,7 +171,7 @@ public class ProjectController {
         return projectService.editProject(id, name, code, userId, inchargerId, isPublic, planStartDate, planEndDate, level, contractAmount,changeContractReason,
                 projectBaseCostData,projectKeyNodesData,
                  budget,customerId,chosenLeaders, associateDegrees, associateDegreeNames,
-                taskGpIncharge,auditUserIds, category, projectDesc,projectMainId, providerIds, providerNames, request,projectSeparate,outputValue,deptId,onlyChangeParticipate,buId,manDay,manDayStartDate,plate1,plate2,plate3,plate4,plate5,plate6,plate7,plate8,plate9,plate10);
+                taskGpIncharge,auditUserIds, ccUserIds, category, projectDesc,projectMainId, providerIds, providerNames, request,projectSeparate,outputValue,deptId,onlyChangeParticipate,buId,manDay,manDayStartDate,plate1,plate2,plate3,plate4,plate5,plate6,plate7,plate8,plate9,plate10);
     }
 
     @RequestMapping("/adjustBase")

+ 16 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java

@@ -415,6 +415,19 @@ public class ReportController {
                     }
                 }
             }
+            //任务分组和阶段必填
+            if (company.getPackageEngineering() == 0 && company.getId() == 3917) {
+                if (stage == null) {
+                    stage = new String[projectId.length];
+                }
+                for (int i=0;i<projectId.length; i++) {
+                    if (stage[i] == null || stage[i].trim().length() == 0 || stage[i].equals("-")) {
+                        HttpRespMsg msg = new HttpRespMsg();
+                        msg.setError("请选择任务分组和阶段");
+                        return msg;
+                    }
+                }
+            }
         }
 
         //检查项目是否可填报; 修改为不校验项目,前端加载的项目已经过滤掉了完成和撤销的
@@ -1077,7 +1090,7 @@ public class ReportController {
 
         }
         //项目所属bu审核
-        if(comTimeType.getReportAuditType()==4){
+        if(comTimeType.getReportAuditType() == 4){
             List<ProjectCategory> categoryList = projectCategoryMapper.selectList(new QueryWrapper<ProjectCategory>().eq("company_id",company.getId()));
             List<Integer> buIds = projectList.stream().map(pl -> {
                 if (!StringUtils.isEmpty(pl.getBuId())) {
@@ -1113,8 +1126,8 @@ public class ReportController {
                 }
             }
         }
-
-        if(comTimeType.getReportAuditType()==5){
+        //5:由直属或者部门负责人审核, 6:先由直属或者部门负责人审核-再由项目日报审核人审核
+        if(comTimeType.getReportAuditType() == 5 || comTimeType.getReportAuditType() == 6){
             List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id",user.getCompanyId()));
             List<User> tempAuditorUserList = new ArrayList<>();
             List<String> creatorIdList = reportList.stream().map(Report::getCreatorId).collect(Collectors.toList());

+ 13 - 9
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskGroupController.java

@@ -232,19 +232,23 @@ public class TaskGroupController {
         QueryWrapper<TaskGroup> queryWrapper = new QueryWrapper<TaskGroup>();
         queryWrapper.eq("project_id", projectId);
         TimeType timeType = timeTypeMapper.selectById(project.getCompanyId());
-        if (timeType.getReportAuditType() == 0 || isSubstitude == 1) {
+        if (isSubstitude == 1) {
             msg.data = taskGroupService.list(queryWrapper);
         } else {
-            List<GroupParticipator> groupParticipatorList = groupParticipatorMapper.selectList(new QueryWrapper<GroupParticipator>().eq("user_id", token));
-            if (groupParticipatorList.size() > 0) {
-                List<Integer> groupIds = groupParticipatorList.stream().map(GroupParticipator::getGroupId).collect(Collectors.toList());
-                QueryWrapper<TaskGroup> queryWrapper1 = new QueryWrapper<TaskGroup>().eq("project_id", item.getProjectId());
-                queryWrapper1.and(wrapper->wrapper.in("id", groupIds).or().eq("incharger_id", token));
+            if (timeType.getReportAuditType() == 1 || timeType.getReportAuditType() == 2) {
+                List<GroupParticipator> groupParticipatorList = groupParticipatorMapper.selectList(new QueryWrapper<GroupParticipator>().eq("user_id", token));
+                if (groupParticipatorList.size() > 0) {
+                    List<Integer> groupIds = groupParticipatorList.stream().map(GroupParticipator::getGroupId).collect(Collectors.toList());
+                    QueryWrapper<TaskGroup> queryWrapper1 = new QueryWrapper<TaskGroup>().eq("project_id", item.getProjectId());
+                    queryWrapper1.and(wrapper->wrapper.in("id", groupIds).or().eq("incharger_id", token));
 
-                List<TaskGroup> list = taskGroupService.list(queryWrapper1);
-                msg.data = list;
+                    List<TaskGroup> list = taskGroupService.list(queryWrapper1);
+                    msg.data = list;
+                } else {
+                    msg.data = new ArrayList<>();
+                }
             } else {
-                msg.data = new ArrayList<>();
+                msg.data = taskGroupService.list(queryWrapper);
             }
         }
 

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserCorpwxTimeController.java

@@ -368,7 +368,7 @@ public class UserCorpwxTimeController {
         allData.add(titles);
 
         //数据填充
-        DecimalFormat decimalFormat = new DecimalFormat("#0.0%");
+        DecimalFormat decimalFormat = new DecimalFormat("#0.00%");
         decimalFormat.setRoundingMode(RoundingMode.HALF_UP);
         for (Map dataItem : list) {
             List<String> dataList = new ArrayList<>();

+ 26 - 8
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserFvTimeController.java

@@ -13,6 +13,7 @@ import com.management.platform.service.LeaveSheetService;
 import com.management.platform.service.UserFvTimeService;
 import com.management.platform.util.DockWithMLD;
 import com.management.platform.util.HttpRespMsg;
+import com.management.platform.util.WorkDayCalculateUtils;
 import org.springframework.http.*;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -29,10 +30,7 @@ import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -62,7 +60,7 @@ public class UserFvTimeController {
     @Resource
     private RestTemplate restTemplate;
 
-    private DecimalFormat df = new DecimalFormat("#.0");
+    private DecimalFormat df = new DecimalFormat("#0.0");
 
     @RequestMapping("/get")
     public HttpRespMsg get(){
@@ -377,21 +375,41 @@ public class UserFvTimeController {
             return httpRespMsg;
         }
         User user = userMapper.selectById(request.getHeader("token"));
+        TimeType timeType = timeTypeMapper.selectById(user.getCompanyId());
         List<UserFvTime> timeList = userFvTimeService.list(new QueryWrapper<UserFvTime>().between("work_date", startDate, endDate).eq("company_id", user.getCompanyId()).eq("user_id", user.getId()));
         double sum = timeList.stream().mapToDouble(UserFvTime::getWorkHours).sum();
-        httpRespMsg.setData(df.format(sum));
+        int workDayCount = WorkDayCalculateUtils.getWorkDaysCountInRange(startDate, endDate, timeType.getIncludeWeekends());
+        HashMap map = new HashMap();
+        map.put("workHours", df.format(sum));
+        map.put("workDayCount", workDayCount);
+        if (workDayCount == 0) {
+            map.put("avgWorkDayHours", 0);
+        } else {
+            map.put("avgWorkDayHours", df.format(sum / workDayCount));
+        }
+        httpRespMsg.setData(map);
         return httpRespMsg;
     }
 
     @RequestMapping("/getMinYiWorkHour")
     public HttpRespMsg getMinYiWorkHour(HttpServletRequest request, String startDate,String endDate){
         HttpRespMsg httpRespMsg=new HttpRespMsg();
-        DecimalFormat df = new DecimalFormat("#.0");
+        DecimalFormat df = new DecimalFormat("#0.0");
         User user = userMapper.selectById(request.getHeader("token"));
+        TimeType timeType = timeTypeMapper.selectById(user.getCompanyId());
         List<UserFvTime> userFvTimeList = userFvTimeService.list(new QueryWrapper<UserFvTime>().between("work_date", startDate, endDate).eq("company_id", user.getCompanyId()).eq("user_id", user.getId()));
         double sum=0;
         sum = userFvTimeList.stream().mapToDouble(UserFvTime::getWorkHours).sum();
-        httpRespMsg.setData(df.format(sum));
+        int workDayCount = WorkDayCalculateUtils.getWorkDaysCountInRange(startDate, endDate, timeType.getIncludeWeekends());
+        HashMap map = new HashMap();
+        map.put("workHours", df.format(sum));
+        map.put("workDayCount", workDayCount);
+        if (workDayCount == 0) {
+            map.put("avgWorkDayHours", 0);
+        } else {
+            map.put("avgWorkDayHours", df.format(sum / workDayCount));
+        }
+        httpRespMsg.setData(map);
         return httpRespMsg;
     }
 

+ 54 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/ProjectCcuser.java

@@ -0,0 +1,54 @@
+package com.management.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author Seyason
+ * @since 2023-07-13
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class ProjectCcuser extends Model<ProjectCcuser> {
+
+    private static final long serialVersionUID=1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 项目id
+     */
+    @TableField("project_id")
+    private Integer projectId;
+
+    /**
+     * 抄送人id
+     */
+    @TableField("user_id")
+    private String userId;
+
+    /**
+     * 抄送人姓名
+     */
+    @TableField("user_name")
+    private String userName;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

+ 16 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ProjectCcuserMapper.java

@@ -0,0 +1,16 @@
+package com.management.platform.mapper;
+
+import com.management.platform.entity.ProjectCcuser;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author Seyason
+ * @since 2023-07-13
+ */
+public interface ProjectCcuserMapper extends BaseMapper<ProjectCcuser> {
+
+}

+ 16 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectCcuserService.java

@@ -0,0 +1,16 @@
+package com.management.platform.service;
+
+import com.management.platform.entity.ProjectCcuser;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2023-07-13
+ */
+public interface ProjectCcuserService extends IService<ProjectCcuser> {
+
+}

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

@@ -41,6 +41,7 @@ public interface ProjectService extends IService<Project> {
                             String associateDegreeNames,
                             Integer taskGpIncharge,
                             String auditUserIds,
+                            String ccUserIds,
                             Integer category,
                             String projectDesc,
                             Integer projectMainId,

+ 20 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectCcuserServiceImpl.java

@@ -0,0 +1,20 @@
+package com.management.platform.service.impl;
+
+import com.management.platform.entity.ProjectCcuser;
+import com.management.platform.mapper.ProjectCcuserMapper;
+import com.management.platform.service.ProjectCcuserService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2023-07-13
+ */
+@Service
+public class ProjectCcuserServiceImpl extends ServiceImpl<ProjectCcuserMapper, ProjectCcuser> implements ProjectCcuserService {
+
+}

+ 64 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -149,6 +149,9 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
     @Resource
     ProjectAuditorService projectAuditorService;
     @Resource
+
+    ProjectCcuserService projectCcuserService;
+    @Resource
     DepartmentMapper departmentMapper;
     @Resource
     ProjectCategoryMapper projectCategoryMapper;
@@ -567,6 +570,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                                    String associateDegreeNames,
                                    Integer taskGpIncharge,
                                    String auditUserIds,
+                                   String ccUserIds,
                                    Integer category,
                                    String projectDesc,
                                    Integer projectMainId,
@@ -946,7 +950,17 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     auditorIds.add(inchargerId);
                 }
             } else {
-                auditorIds = JSONArray.parseArray(auditUserIds, String.class);
+                if (auditUserIds.startsWith("["))
+                    auditorIds = JSONArray.parseArray(auditUserIds, String.class);
+                else
+                    auditorIds.add(auditUserIds);
+            }
+
+            List<String> ccIds = new ArrayList<>();
+            if (StringUtils.isEmpty(ccUserIds) || "[]".equals(ccUserIds) || "undefined".equals(ccUserIds)) {
+
+            } else {
+                ccIds = JSONArray.parseArray(ccUserIds, String.class);
             }
 
             if (isNew) {
@@ -965,6 +979,21 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                         projectAuditorService.saveBatch(batchList);
                     }
                 }
+                if (ccIds.size() > 0) {
+                    List<User> userList = userMapper.selectList(new QueryWrapper<User>().in("id", ccIds));
+                    List<ProjectCcuser> batchList = new ArrayList<>();
+                    for (User user1 : userList) {
+                        ProjectCcuser projectcc = new ProjectCcuser();
+                        projectcc.setProjectId(id);
+                        projectcc.setUserId(user1.getId());
+                        projectcc.setUserName(user1.getName());
+                        batchList.add(projectcc);
+                    }
+                    if (batchList.size() > 0) {
+                        //批量保存审核人
+                        projectCcuserService.saveBatch(batchList);
+                    }
+                }
             } else {
                 //针对reportAuditType=2(先任务分组负责人审核再项目经理审核的情况),如果项目经理变更,需要把老项目经理负责的日报变成新项目经理负责
                 if (timeType.getReportAuditType() == 2) {
@@ -1033,6 +1062,40 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                         //清空
                         projectAuditorMapper.delete(new QueryWrapper<ProjectAuditor>().eq("project_id", id));
                     }
+                    //抄送人处理
+                    List<ProjectCcuser> oldCcUserList = projectCcuserService.list(new QueryWrapper<ProjectCcuser>().eq("project_id", id));
+                    List<ProjectCcuser> newCcList = new ArrayList<>();
+                    if (timeType.getReportCc() == 1) {
+                        if (ccIds.size() > 0) {
+                            List<User> userList = userMapper.selectList(new QueryWrapper<User>().in("id", ccIds));
+                            System.out.println("有cc===");
+                            List<User> newUserList = userList.stream()
+                                    .filter(u->!oldCcUserList.stream().anyMatch(old->old.getUserId().equals(u.getId())))
+                                    .collect(Collectors.toList());
+                            if (newUserList.size() > 0) {
+                                for (User u : newUserList) {
+                                    ProjectCcuser a = new ProjectCcuser();
+                                    a.setProjectId(id);
+                                    a.setUserId(u.getId());
+                                    a.setUserName(u.getName());
+                                    newCcList.add(a);
+                                }
+                                projectCcuserService.saveBatch(newCcList);
+                            }
+                            //检查有没有需要删除的
+                            List<ProjectCcuser> deleteList = oldCcUserList.stream()
+                                    .filter(old->!userList.stream().anyMatch(u->u.getId().equals(old.getUserId())))
+                                    .collect(Collectors.toList());
+
+                            if (deleteList.size() > 0) {
+                                projectCcuserService.removeByIds(deleteList.stream().map(ProjectCcuser::getId).collect(Collectors.toList()));
+                            }
+                        } else {
+                            //清空
+                            projectCcuserService.remove(new QueryWrapper<ProjectCcuser>().eq("project_id", id));
+                        }
+                    }
+
                 }
             }
         }

+ 110 - 37
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -332,7 +332,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     List<Map<String, Object>> puserNames = reportMapper.getReportNameByDate(date, user.getCompanyId(), leaderId);
                     List<Map<String, Object>> inchargeReportList= reportMapper.getInchargeReportByDate(date, leaderId, null);
                     TimeType timeType = timeTypeMapper.selectById(user.getCompanyId());
-                    if (timeType.getReportAuditType() == 5 && timeType.getReportCc() == 1) {
+                    if ((timeType.getReportAuditType() == 5 || timeType.getReportAuditType() == 6)&& timeType.getReportCc() == 1) {
                         //存在抄送人的设置,需要把抄送人的项目相关日报也加上
                         List<Map<String, Object>> viewUserNames = reportMapper.getCcReportNameByDate(date, user.getCompanyId(),leaderId);
                         for (Map<String, Object> viewItem : viewUserNames) {
@@ -639,15 +639,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 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){
+                    //如果是按照任务分组负责人审核,取参与的分组
+                    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());
@@ -660,6 +653,15 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                                 }
                             }
                         }
+                    } else {
+                        //取该项目下的全部分组数据
+                        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());
+                            }
+                        }
                     }
                 }
                 //项目的审核人
@@ -1740,7 +1742,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 if (updateReportList.size() > 0) {
                     updateBatchById(updateReportList);
                 }
-            }else if(timeType.getReportAuditType() == 5){
+            }else if(timeType.getReportAuditType() == 5 || timeType.getReportAuditType() == 6){
                 List<Report> updateReportList = new ArrayList<>();
                 //人员所属部门负责人审核或者直属领导审核
                 boolean hasAuditAllPri = sysFunctionService.hasPriviledge(user.getRoleId(), "审核全员日报");
@@ -1749,16 +1751,52 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     //直属领导审核或者部门负责人审核
                     Report newReport = new Report();
                     newReport.setId(r.getId());
-                    if(hasAuditAllPri || ((r.getIsDeptAudit() == 0 &&  user.getId().equals(r.getProjectAuditorId()))
-                        || (r.getIsDeptAudit() == 1 && user.getId().equals(r.getAuditDeptManagerid())))){
-                        newReport.setState(1);
-                        newReport.setDepartmentAuditState(1);
-                        newReport.setProjectAuditState(1);
-                        newReport.setProjectAuditTime(LocalDateTime.now());
-                    }else {
-                        httpRespMsg.setError("您无权审核该日报");
-                        return httpRespMsg;
+                    if (timeType.getReportAuditType() == 5) {
+                        if(hasAuditAllPri || ((r.getIsDeptAudit() == 0 &&  user.getId().equals(r.getProjectAuditorId()))
+                                || (r.getIsDeptAudit() == 1 && user.getId().equals(r.getAuditDeptManagerid())))){
+                            newReport.setState(1);
+                            newReport.setDepartmentAuditState(1);
+                            newReport.setProjectAuditState(1);
+                            newReport.setProjectAuditTime(LocalDateTime.now());
+                        }else {
+                            httpRespMsg.setError("您无权审核该日报");
+                            return httpRespMsg;
+                        }
+                    } else if (timeType.getReportAuditType() == 6) {
+                        //先部门或直属审核人审核,然后项目日报审核人审核
+                        if (r.getDepartmentAuditState() == 0) {
+                            if(hasAuditAllPri || ((r.getIsDeptAudit() == 0 &&  user.getId().equals(r.getProjectAuditorId()))
+                                    || (r.getIsDeptAudit() == 1 && user.getId().equals(r.getAuditDeptManagerid())))){
+                                //进入下一个节点,日报审核人审核
+                                newReport.setDepartmentAuditState(1);
+                                newReport.setProjectAuditState(0);
+                                newReport.setIsDeptAudit(0);
+                                ProjectAuditor auditor = projectAuditorMapper.selectOne(new QueryWrapper<ProjectAuditor>().eq("project_id", r.getProjectId()).last("limit 1"));
+                                if (auditor == null) {
+                                    httpRespMsg.setError("项目尚未设置日报审核人");
+                                    return httpRespMsg;
+                                } else {
+                                    newReport.setProjectAuditorId(auditor.getAuditorId());
+                                }
+                            }else {
+                                httpRespMsg.setError("您无权审核该日报");
+                                return httpRespMsg;
+                            }
+                        } else {
+                            //第二步,日报审核人审核
+                            if (r.getProjectAuditState() == null || r.getProjectAuditState() == 0) {
+                                if (user.getId().equals(r.getProjectAuditorId())) {
+                                    newReport.setState(1);
+                                    newReport.setProjectAuditState(1);
+                                    newReport.setProjectAuditTime(LocalDateTime.now());
+                                } else {
+                                    httpRespMsg.setError("您无权审核该日报");
+                                    return httpRespMsg;
+                                }
+                            }
+                        }
                     }
+
                     updateReportList.add(newReport);
                 }
                 if (updateReportList.size() > 0) {
@@ -2221,20 +2259,20 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             }
 
         }
-        //直接进行项目经理审核驳回
+        //直接进行审核驳回
         Report upReport = new Report().setState(2)
                 .setRejectReason(reason).setRejectUserid(user.getId()).setRejectUsername(user.getName());
+
         reportMapper.update(upReport,
                 new QueryWrapper<Report>().in("id", ListUtil.convertIdsArrayToList(reportIds)));
         List<Report> rList = reportMapper.selectList(new QueryWrapper<Report>().select("id, group_id, project_id, creator_id, create_date, company_id").in("id", ListUtil.convertIdsArrayToList(reportIds)));
-        if (timeTypeMapper.selectById(company.getId()).getReportAuditType() == 2) {
+        if (timeType.getReportAuditType() == 2) {
             //退回任务分组审核状态
             List<Report> newList = new ArrayList<>();
             for (Report r : rList) {
                 Report upR = new Report();
                 upR.setId(r.getId());
                 upR.setGroupAuditState(0);
-                System.out.println("groupId=="+r.getGroupId());
                 if (r.getGroupId() != 0) {
                     TaskGroup oldGroup = taskGroupMapper.selectById(r.getGroupId());
                     if (oldGroup != null) {
@@ -2807,7 +2845,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 if (updateReportList.size() > 0) {
                     updateBatchById(updateReportList);
                 }
-            } else if(timeType.getReportAuditType() == 5){
+            } else if(timeType.getReportAuditType() == 5 || timeType.getReportAuditType() == 6){
                 allUsers = userMapper.selectList(new QueryWrapper<User>().select("id, name, department_id").eq("company_id", company.getId()));
                 List<Report> updateReportList = new ArrayList<>();
                 //人员所属部门负责人审核或者直属领导审核
@@ -2818,20 +2856,55 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     //直属领导审核或者部门负责人审核
                     Report newReport = new Report();
                     newReport.setId(r.getId());
-                    if(hasAuditAllPri || ((r.getIsDeptAudit() == 0 &&  user.getId().equals(r.getProjectAuditorId()))
-                            || (r.getIsDeptAudit() == 1 && user.getId().equals(r.getAuditDeptManagerid())))){
-                        r.setState(1);
-                        r.setDepartmentAuditState(1);
-                        r.setProjectAuditState(1);
-                        r.setProjectAuditTime(LocalDateTime.now());
-                        newReport.setState(1);
-                        newReport.setDepartmentAuditState(1);
-                        newReport.setProjectAuditState(1);
-                        newReport.setProjectAuditTime(LocalDateTime.now());
-                    } else {
-                        httpRespMsg.setError("您无权审核该日报");
-                        return httpRespMsg;
+                    if (timeType.getReportAuditType() == 5) {
+                        if(hasAuditAllPri || ((r.getIsDeptAudit() == 0 &&  user.getId().equals(r.getProjectAuditorId()))
+                                || (r.getIsDeptAudit() == 1 && user.getId().equals(r.getAuditDeptManagerid())))){
+                            r.setState(1);
+                            r.setDepartmentAuditState(1);
+                            r.setProjectAuditState(1);
+                            r.setProjectAuditTime(LocalDateTime.now());
+                            newReport.setState(1);
+                            newReport.setDepartmentAuditState(1);
+                            newReport.setProjectAuditState(1);
+                            newReport.setProjectAuditTime(LocalDateTime.now());
+                        } else {
+                            httpRespMsg.setError("您无权审核该日报");
+                            return httpRespMsg;
+                        }
+                    } else if (timeType.getReportAuditType() == 6) {
+                        //先部门或直属审核人审核,然后项目日报审核人审核
+                        if (r.getDepartmentAuditState() == 0) {
+                            if(hasAuditAllPri || ((r.getIsDeptAudit() == 0 &&  user.getId().equals(r.getProjectAuditorId()))
+                                    || (r.getIsDeptAudit() == 1 && user.getId().equals(r.getAuditDeptManagerid())))){
+                                //进入下一个节点,日报审核人审核
+                                newReport.setDepartmentAuditState(1);
+                                newReport.setProjectAuditState(0);
+                                ProjectAuditor auditor = projectAuditorMapper.selectOne(new QueryWrapper<ProjectAuditor>().eq("project_id", r.getProjectId()).last("limit 1"));
+                                if (auditor == null) {
+                                    httpRespMsg.setError("项目尚未设置日报审核人");
+                                    return httpRespMsg;
+                                } else {
+                                    newReport.setProjectAuditorId(auditor.getAuditorId());
+                                }
+                            }else {
+                                httpRespMsg.setError("您无权审核该日报");
+                                return httpRespMsg;
+                            }
+                        } else {
+                            //第二步,日报审核人审核
+                            if (r.getProjectAuditState() == null || r.getProjectAuditState() == 0) {
+                                if (user.getId().equals(r.getProjectAuditorId())) {
+                                    newReport.setState(1);
+                                    newReport.setProjectAuditState(1);
+                                    newReport.setProjectAuditTime(LocalDateTime.now());
+                                } else {
+                                    httpRespMsg.setError("您无权审核该日报");
+                                    return httpRespMsg;
+                                }
+                            }
+                        }
                     }
+
                     updateReportList.add(newReport);
                 }
                 if (updateReportList.size() > 0) {

+ 6 - 21
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/util/TestSample.java

@@ -2,6 +2,8 @@ package com.management.platform.util;
 
 import org.springframework.util.StringUtils;
 
+import java.math.RoundingMode;
+import java.text.DecimalFormat;
 import java.util.*;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ForkJoinPool;
@@ -10,27 +12,10 @@ import java.util.regex.Pattern;
 
 public class TestSample {
     public static void main(String[] args) {
-        String address = "张三18680419527湖南省岳阳市君山区许加派村";
-        String p = decodePhone(address);
-        System.out.println("电话号码是:"+p);
-        address = address.replaceAll(p, " ");
-        //按空格或者逗号分割地址
-        String[] addArray = address.split(" |,|,");
-        String add = "";
-        for (String s : addArray) {
-            //判断是否最小区单位
-            if (s.contains("省") || s.contains("市") || s.contains("区") || s.contains("自治区") || s.contains("自治州") || s.contains("县")) {
-                System.out.println("省市区地址是:" + s);
-                add = s;
-            } else {
-                System.out.println("姓名是:" + s);
-            }
-        }
-        System.out.println("==============");
-        //从数据库的区获取数据,去匹配add, 找到后进行拆分
-        String[] detailAdd = add.split("区|自治区|自治州|县");
-        System.out.println("省市区地址是:" + detailAdd[0]);
-        System.out.println("详细地址是:" + detailAdd[1]);
+        DecimalFormat decimalFormat = new DecimalFormat("#0.00%");
+        decimalFormat.setRoundingMode(RoundingMode.HALF_UP);
+        double d = 0.123456;
+        System.out.println(decimalFormat.format(d));
     }
 
     public static String decodePhone(String address) {

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/application.yml

@@ -15,7 +15,7 @@ spring:
       location: C:/upload/
   datasource:
     driver-class-name: com.mysql.cj.jdbc.Driver
-    url: jdbc:mysql://47.101.180.183:3306/man_hour_manager?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&useSSL=false
+    url: jdbc:mysql://47.101.180.183:3306/man_dev?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&useSSL=false
     username: root
     password: HuoshiDB@2022
 #    url: jdbc:mysql://127.0.0.1:3306/man_hour_manager?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&useSSL=false

+ 18 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectCcuserMapper.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.management.platform.mapper.ProjectCcuserMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.ProjectCcuser">
+        <id column="id" property="id" />
+        <result column="project_id" property="projectId" />
+        <result column="user_id" property="userId" />
+        <result column="user_name" property="userName" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, project_id, user_id, user_name
+    </sql>
+
+</mapper>

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

@@ -488,7 +488,7 @@
         ,u.name as projectAuditorName, a.project_auditor_id as projectAuditorId, a.overtime_hours as overtimeHours, a.custom_text as customText, dept_manager.name as deptAuditorName,a.evaluate as evaluate
         FROM report AS a
         JOIN project AS b ON a.project_id=b.id
-        left join project_auditor on project_auditor.project_id = a.project_id
+        left join project_ccuser on project_ccuser.project_id = a.project_id
         left join sub_project as d on d.id = a.sub_project_id
         left join task on task.id = a.task_id
         left join report_extra_degree on report_extra_degree.id = a.degree_id
@@ -503,7 +503,7 @@
         <if test="state != null">
             AND a.state=#{state}
         </if>
-        AND (project_auditor.auditor_id = #{id})
+        AND (project_ccuser.user_id = #{id})
         ORDER BY a.creator_id ASC
     </select>
 
@@ -641,7 +641,7 @@
         SELECT DISTINCT b.id, b.name, IF (MAX(state) = 1, MIN(state), MAX(state)) AS state, a.department_audit_state as departmentAuditState, IFNULL(sum(a.working_time),0) as workingTime,a.evaluate as evaluate
         FROM report AS a
         JOIN user AS b ON a.creator_id=b.id
-        LEFT JOIN project_auditor ON a.project_id = project_auditor.project_id
+        LEFT JOIN project_ccuser ON a.project_id = project_ccuser.project_id
         WHERE 1=1
         <if test="date != null and date != ''">
             AND a.create_date=#{date}
@@ -650,7 +650,7 @@
             AND b.company_id=#{companyId}
         </if>
         <if test="leaderId != null and leaderId != ''">
-            AND project_auditor.`auditor_id` = #{leaderId}
+            AND project_ccuser.`user_id` = #{leaderId}
         </if>
         group by a.creator_id
     </select>

+ 52 - 7
fhKeeper/formulahousekeeper/timesheet/src/views/project/list.vue

@@ -551,13 +551,13 @@
                         <selectCat v-if="user.userNameNeedTranslate == 1" :size="'medium'" :subject="participator" :subjectId="addForm.inchargerId" :distinction="'3'" @selectCal="selectCal" :disabled="canOnlyModParticipator || projectManagerEdit"></selectCat>
                     </el-form-item>
                     <el-form-item :label="$t('newspaperauditor')" v-show="user.timeType.reportAuditType == 0 || user.timeType.reportAuditType == 4 || user.timeType.reportAuditType == 6">
-                        <el-select v-if="user.userNameNeedTranslate != '1'" v-model="addForm.auditUserIds" multiple="true" :disabled="!(permissions.projectManagement|| user.id == addForm.inchargerId || user.id == addForm.creatorId)" filterable :placeholder="$t('defaultistheprojectleader')" style="width:100%;" >
+                        <el-select v-if="user.userNameNeedTranslate != '1'" @change="$forceUpdate()" v-model="addForm.auditUserIds"  :disabled="!(permissions.projectManagement|| user.id == addForm.inchargerId || user.id == addForm.creatorId)" filterable :placeholder="$t('defaultistheprojectleader')" style="width:100%;" >
                             <el-option v-for="item in participator" :key="item.id" :label="item.name" :value="item.id"></el-option>
                         </el-select>
-                        <selectCat v-if="user.userNameNeedTranslate == '1'" :size="'medium'" :tile="true" :widthStr="'800'" :disabled="!(permissions.projectManagement|| user.id == addForm.inchargerId || user.id == addForm.creatorId)" :subjectId="addForm.auditUserIds" :subject="participator" :clearable="false" :distinction="'10'"  :multiSelect="true" @selectCal="selectCal"></selectCat>
+                        <selectCat v-if="user.userNameNeedTranslate == '1'" :size="'medium'" :tile="true" :widthStr="'800'" :disabled="!(permissions.projectManagement|| user.id == addForm.inchargerId || user.id == addForm.creatorId)" :subjectId="addForm.auditUserIds" :subject="participator" :clearable="false" :distinction="'10'"  :multiSelect="user.timeType.reportAuditType != 6" @selectCal="selectCal"></selectCat>
                     </el-form-item>
                     <el-form-item v-if="user.timeType.reportCc == 1" label="日报抄送人" >
-                        <el-select v-if="user.userNameNeedTranslate != '1'" v-model="addForm.ccUserIds" multiple="true" :disabled="!(permissions.projectManagement|| user.id == addForm.inchargerId || user.id == addForm.creatorId)" filterable :placeholder="$t('defaultistheprojectleader')" style="width:100%;" >
+                        <el-select v-if="user.userNameNeedTranslate != '1'" v-model="addForm.ccUserIds" multiple="true" :disabled="!(permissions.projectManagement|| user.id == addForm.inchargerId || user.id == addForm.creatorId)" filterable placeholder="请选择抄送人" style="width:100%;" >
                             <el-option v-for="item in participator" :key="item.id" :label="item.name" :value="item.id"></el-option>
                         </el-select>
                         <selectCat v-if="user.userNameNeedTranslate == '1'" :size="'medium'" :tile="true" :widthStr="'800'" :disabled="!(permissions.projectManagement|| user.id == addForm.inchargerId || user.id == addForm.creatorId)" :subjectId="addForm.ccUserIds" :subject="participator" :clearable="false" :distinction="'10'"  :multiSelect="true" @selectCal="selectCal"></selectCat>
@@ -4270,6 +4270,9 @@ a {
                     //获取项目的相关领导
                     // this.getProjectNotifyUserList(item.id);
                     this.getProjectAutorList(item.id);
+                    if (this.user.timeType.reportCc == 1) {
+                        this.getProjectCcUserList(item.id);
+                    }
 
                     // this.findUserInTree()
                 }
@@ -4281,14 +4284,52 @@ a {
                 }
 
             },
+            //获取项目日报抄送人
+            getProjectCcUserList(projectId) {
+                this.http.post('/project-ccuser/getList',{projectId: projectId},
+                        res => {
+                            if (res.code == "ok") {
+                               this.addForm.ccUserIds = res.data.map(function(item) {
+                                   return item.userId;
+                               });
+                               this.$forceUpdate()
+                            } else {
+                                this.$message({
+                                    message: res.msg,
+                                    type: "error"
+                                });
+                            }
+                        },
+                        error => {
+                            this.listLoading = false;
+                            this.$message({
+                                message: error,
+                                type: "error"
+                            });
+                            }
+                        );
+            },
             //获取项目审核人
             getProjectAutorList(projectId) {
                 this.http.post('/project-auditor/getList',{projectId: projectId},
                         res => {
                             if (res.code == "ok") {
-                               this.addForm.auditUserIds = res.data.map(function(item) {
-                                   return item.auditorId;
-                               });
+                                if (this.user.timeType.reportAuditType == 6) {
+                                    //单个日报审核人,单选
+                                    var arr = res.data.map(function(item) {
+                                        return item.auditorId;
+                                    });
+                                    if (arr.length > 0) {
+                                        this.addForm.auditUserIds = arr[0];
+                                    } else {
+                                        this.addForm.auditUserIds = null;
+                                    }
+                                } else {
+                                    this.addForm.auditUserIds = res.data.map(function(item) {
+                                        return item.auditorId;
+                                    });
+                                }
+                               
                                this.$forceUpdate()
                             } else {
                                 this.$message({
@@ -4493,7 +4534,11 @@ a {
                         formData.append("associateDegreeNames", listName)
                         //日报审核人
                         if (this.addForm.auditUserIds) {
-                            formData.append("auditUserIds", JSON.stringify(this.addForm.auditUserIds));
+                            if (this.user.timeType.reportAuditType == 6) {
+                                formData.append("auditUserIds", this.addForm.auditUserIds);
+                            } else {
+                                formData.append("auditUserIds", JSON.stringify(this.addForm.auditUserIds));
+                            }
                         }
                         //日报抄送人
                         if (this.addForm.ccUserIds) {

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

@@ -415,7 +415,7 @@
                       <vueCascader :size="'medium'" :widthStr="'430'" :clearable="true && user.userNameNeedTranslate != 1" :subject="option" :subjectId="insertForm.departmentId" :radios="true" :distinction="'2'" @vueCasader="vueCasader" v-if="user.userNameNeedTranslate == 1" ></vueCascader>
 
                   </el-form-item>
-                  <el-form-item v-if="user.timeType.reportAuditType == 5">
+                  <el-form-item v-if="user.timeType.reportAuditType == 5 || user.timeType.reportAuditType == 6">
                       <span slot="label">
                         <span>直属审核人</span>
                         <el-tooltip effect="dark" content="未设置时由所属部门负责人审核" placement="top-start">

+ 19 - 16
fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

@@ -251,7 +251,7 @@
                                                         size="small" @click="approve(item1.id, item2)">{{$t('btn.through')}}</el-button>
                                                         <el-button v-if="(permissions.projectReportReview ||user.id == item2.projectAuditorId) && item2.state == 0 && item2.isDeptAudit==0 && item2.projectAuditState==0" type="danger" :loading="logining" 
                                                         size="small" @click="showDenyDialog(item1.id,0, item2)">{{$t('btn.rejected')}}</el-button>
-                                                        <el-button v-if="(permissions.projectReportReview ||user.id == item2.projectAuditorId || (user.timeType.reportAuditType== 5 && (user.id == item2.projectAuditorId || (item2.isDeptAudit == 1 && user.id == item2.auditDeptManagerid)))) && item2.state == 1" type="normal" :loading="logining" size="small" 
+                                                        <el-button v-if="(permissions.projectReportReview ||user.id == item2.projectAuditorId || ((user.timeType.reportAuditType== 5 || user.timeType.reportAuditType== 6)&& (user.id == item2.projectAuditorId || (item2.isDeptAudit == 1 && user.id == item2.auditDeptManagerid)))) && item2.state == 1" type="normal" :loading="logining" size="small" 
                                                         @click="showDenyDialog(item1.id,1, item2)">{{$t('btn.undo')}}</el-button>
                                                         <!--自己可以撤回待审核状态的报告 -->
                                                         <el-button v-if="user.id == item1.id && (item2.state == 0 || item2.state == -1)" type="normal" :loading="logining" size="small" @click="cancel(item1)">{{$t('btn.withdraw')}}</el-button>
@@ -350,21 +350,21 @@
                         @change="changeMonth()" @blur="iptBlur(reportTimeType.type)" :clearable="false" :placeholder="$t('defaultText.selectWorkDate')" :disabled="isDisable"></el-date-picker>
                         <div v-if="falsss" style="display: inline-block;margin-left:10px">{{jsDay}} {{$t('time.day')}}, {{jsTime}} {{$t('time.hour')}}</div>
                         <div v-if="isBatch!=0" style="display: inline-block;margin-left:10px">{{jsDay}} {{$t('time.day')}}</div>
-                        <span v-if="reportTimeType.type == 3" style="margin-left:10px;">{{isBatch==0? $t('other.total'):$t('weekDay.daily')}}{{$t('time.duration')}}:</span>
-                        <el-input-number :disabled="(!canEdit || user.timeType.lockWorktime) && !isWeekend" v-if="reportTimeType.type == 3" style="margin-left:5px;" @change="changeAllTime"
+                        <span v-if="reportTimeType.type == 3 && user.company.companyName != mingyiName" style="margin-left:10px;">{{isBatch==0? $t('other.total'):$t('weekDay.daily')}}{{$t('time.duration')}}:</span>
+                        <el-input-number :disabled="(!canEdit || user.timeType.lockWorktime) && !isWeekend" v-if="reportTimeType.type == 3&& user.company.companyName != mingyiName" style="margin-left:5px;" @change="changeAllTime"
                             v-model="reportTimeType.allday" :precision="1" :step="0.5" :max="12" :min="0.5"></el-input-number>
-                        <span v-if="reportTimeType.type == 3">{{$t('time.hour')}}</span>
-                        <span v-if="isBatch">, {{$t('other.fillInTheTotal')}} {{jsTime.toFixed(1)}} {{$t('time.hour')}}</span>
+                        <span v-if="reportTimeType.type == 3 && user.company.companyName != mingyiName">{{$t('time.hour')}}</span>
+                        <span v-if="isBatch && user.company.companyName != mingyiName">, {{$t('other.fillInTheTotal')}} {{jsTime.toFixed(1)}} {{$t('time.hour')}}</span>
 
                         <span v-if="workForm.time">{{$t('other.attendancePunch')}}: {{workForm.time.startTime}}-{{workForm.time.endTime}}, {{workForm.time.workHours}}{{$t('time.hour')}}</span>
                         <!--批量填报和批量代填不显示考勤记录-->
                         <span v-if="!isBatch && (user.timeType.syncDingding==1 || user.timeType.syncCorpwxTime==1)&&!workForm.time" >{{$t('other.noAttendanceRecord')}}</span>
-                        <span v-if="isBatch && user.company.companyName==='明夷'">{{',考勤时长'}}:{{this.workTimeForMinYi}}{{$t('time.hour')}}</span>
+                        <span v-if="isBatch && user.company.companyName === mingyiName">{{',考勤时长'}}:{{this.workTimeForMinYi}}{{$t('time.hour')}}</span>
                         <el-button type="default" style="margin-left:5px;" size="small" :loading="syncTimeLoading" 
                         v-if="!isBatch && user.timeType.syncCorpwxTime==1" icon="el-icon-refresh" 
                                 @click="refreshWXCardTime(workForm.createDate)"></el-button>
                         <el-button type="default" style="margin-left:5px;" size="small" :loading="syncTimeLoading" 
-                        v-if="isBatch && user.company.companyName==='明夷'" icon="el-icon-refresh" 
+                        v-if="isBatch && user.company.companyName === mingyiName" icon="el-icon-refresh" 
                                 @click="refreshAttendance(workForm.createDate)"></el-button>
                         <!-- AI智能填报 -->
                         <el-button type="primary" @click="getAIReport()" v-if="!hasWrittenReport" style="margin-left:5px;" >智能填报</el-button>
@@ -472,15 +472,15 @@
                                 <el-option v-for="item in timeBasecostList" :label="item.name" :value="item.id" :key="item.id"></el-option>
                             </el-select>
                         </el-form-item>
-                        <el-form-item :label="$t('lable.taskGrouping')" v-if="user.company.packageProject == 1" :prop="'domains.' + index + '.stage'"
-                                         :rules="{ required: true, message: '请选择任务分组和阶段', trigger: ['change','blur'] }" >
+                        <el-form-item :label="$t('lable.taskGrouping')" v-if="user.company.packageProject == 1"
+                                          >
                             <!-- 任务分组 -->
-                            <el-select v-model="domain.groupId" :placeholder="$t('defaultText.pleaseSelectaTaskGroup')" style="width:200px;" clearable="true" 
+                            <span style="color:red;">*</span><el-select v-model="domain.groupId" :placeholder="$t('defaultText.pleaseSelectaTaskGroup')" style="width:200px;" clearable="true" 
                             :disabled="workForm.domains.length==0?true:(workForm.domains[index].state>=2?false:true)" @change="getGroupStages(domain, index)">
                                 <el-option v-for="item in domain.taskGroups" :key="item.id" :label="item.name" :value="item.id"></el-option>
                             </el-select>
                             <!-- 项目的阶段 -->
-                            <span style="color:red; padding:3px;margin-left:30px;">*</span><span v-if="domain.stages != null && domain.stages.length> 0" >{{$t('other.inputStage')}}</span>
+                            <span v-if="domain.stages != null && domain.stages.length> 0" ><span style="color:red; padding:3px;margin-left:30px;">*</span>{{$t('other.inputStage')}}</span>
                             <el-select v-model="domain.stage" :placeholder="$t('defaultText.pleaseChoose')" style="width:200px;margin-left:10px;" 
                             clearable="true" v-if="domain.stages != null && domain.stages.length> 0"
                             @change="changeStages(domain, index)"
@@ -1830,6 +1830,8 @@
         },
         data() {
             return {
+                mingyiName : '南京火石演示科技公司',
+                // mingyiName : '明夷',
                 modItemDataId: null,
                 modImportTime: null,
                 modImportUserId: null,
@@ -2454,7 +2456,6 @@
             },
              refreshAttendance(workdate) {
                  if (!workdate) return;
-                 if(this.workTimeForMinYi>0) return;
                 this.syncTimeLoading = true;
                 this.http.post('/user-fv-time/syncAttendanceForMingYi',{
                     startDate: workdate[0],
@@ -2462,7 +2463,9 @@
                 },res => {
                     this.syncTimeLoading = false;
                     if(res.code == 'ok'){
-                        this.workTimeForMinYi= res.data;
+                        this.workTimeForMinYi = parseFloat(res.data.workHours);
+                        this.reportTimeType.allday = parseFloat(res.data.avgWorkDayHours);
+                        this.totalReportHours = this.workTimeForMinYi;
                     }else {
                         this.$message({
                             message: res.msg,
@@ -2992,7 +2995,9 @@
                 },
                 res => {
                     if (res.code == "ok") {
-                        this.workTimeForMinYi = res.data
+                        this.workTimeForMinYi = parseFloat(res.data.workHours);
+                        this.reportTimeType.allday = parseFloat(res.data.avgWorkDayHours);
+                        this.totalReportHours = this.workTimeForMinYi;
                     } else {
                         this.$message({
                             message: res.msg,
@@ -3008,8 +3013,6 @@
                     });
                     }
                 );
-                var sl = this.workForm.domains
-                this.chuji(i)
             },
             chuji(i) {
                 if(i == 0) {