Просмотр исходного кода

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

cs 2 лет назад
Родитель
Сommit
ab615687f9
18 измененных файлов с 504 добавлено и 334 удалено
  1. 21 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportLogDetailController.java
  2. 115 97
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/WeiXinCorpController.java
  3. 71 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/ReportLogDetail.java
  4. 6 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/User.java
  5. 7 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/WxCorpInfo.java
  6. 1 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/vo/UserDailyWorkItem.java
  7. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ReportLogDetailMapper.java
  8. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ReportLogDetailService.java
  9. 3 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DepartmentServiceImpl.java
  10. 58 178
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java
  11. 20 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportLogDetailServiceImpl.java
  12. 127 52
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  13. 10 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java
  14. 1 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/application.yml
  15. 2 2
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/DepartmentMapper.xml
  16. 21 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportLogDetailMapper.xml
  17. 2 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/WxCorpInfoMapper.xml
  18. 7 1
      fhKeeper/formulahousekeeper/timesheet/src/views/workReport/daily.vue

+ 21 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportLogDetailController.java

@@ -0,0 +1,21 @@
+package com.management.platform.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-09-19
+ */
+@RestController
+@RequestMapping("/report-log-detail")
+public class ReportLogDetailController {
+
+}
+

+ 115 - 97
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/WeiXinCorpController.java

@@ -680,6 +680,7 @@ public class WeiXinCorpController {
         HttpEntity<String> requestEntity = new HttpEntity<String>(reqParam.toJSONString(), headers);
         ResponseEntity<String> responseEntity = this.restTemplate.exchange(url,
                 HttpMethod.POST, requestEntity, String.class);
+        boolean enableNewVersion = false;
         if (responseEntity.getStatusCode() == HttpStatus.OK) {
             String resp = responseEntity.getBody();
             log.info(resp);
@@ -788,13 +789,17 @@ public class WeiXinCorpController {
                         //生成工作时长
                         TimeType timeType = new TimeType();
                         timeType.setCompanyId(company.getId());
+                        if (enableNewVersion) {
+                            timeType.setFinanceJobnumEnabled(1);//启用工号来导入财务匹配
+                        }
                         timeTypeMapper.insert(timeType);
 
                         managerRole = sysRoleService.generateDefaultRoles(company.getId());
                     }
                     data.setCompanyId(company.getId());
                     wxCorpInfoMapper.insert(data);
-
+                    //默认普通员工的角色
+                    SysRole defaultUserRole = sysRoleService.getOne(new QueryWrapper<SysRole>().eq("company_id", company.getId()).eq("is_default", 1));
                     JSONObject userDetail = getUserInfo(curCorpAccessToken, userId);
                     //检查授权人是否存在
                     int cnt = userMapper.selectCount(new QueryWrapper<User>().eq("corpwx_userid", userId));
@@ -806,9 +811,13 @@ public class WeiXinCorpController {
                         if (name == null) {
                             name = userId;
                         }
-                        if (name.length() > 10) {
-                            name = "未知";
+                        if (!enableNewVersion) {
+                            //老版本的要兼容转化姓名
+                            if (name.length() > 10) {
+                                name = "未知";
+                            }
                         }
+
                         User user = new User()
                                 .setId(id.toString())
                                 .setRoleId(managerRole.getId())
@@ -817,101 +826,108 @@ public class WeiXinCorpController {
                                 .setPassword(MD5Util.getPassword("000000"))
                                 .setCorpwxUserid(userId)
                                 .setColor(ColorUtil.randomColor())
-                                .setCompanyId(company.getId());
+                                .setCompanyId(company.getId())
+                                .setJobNumber(userId);
                         userMapper.insert(user);
                     }
 
-//                    int companyId = company.getId();
-//                    //获取公司根部门人员,也就是没有分配部门的人员
-//                    int companyRootDeptId = 1;
-//                    JSONArray unAssignedUserList = getDeptUserSimple(curCorpAccessToken, companyRootDeptId);
-//                    for (int m=0;m<unAssignedUserList.size(); m++) {
-//                        JSONObject userJson = unAssignedUserList.getJSONObject(m);
-//                        String curUserid = userJson.getString("userid");
-//                        log.info("userid="+curUserid+", name=" + userJson.getString("name")+", mobile="+userJson.getString("mobile"));
-//                        //不存在的人员, 进行插入
-//                        User user = new User();
-//
-//                        user.setId(SnowFlake.nextId()+"")
-//                                .setRole(0)//默认普通员工
-//                                .setCompanyId(companyId)
-//                                .setName(userJson.getString("name"))
-//                                .setCorpwxUserid(curUserid)
-//                                .setColor(ColorUtil.randomColor());
-//
-//                        //检查用户是否已经存在
-//                        if (userMapper.selectCount(new QueryWrapper<User>().eq("corpwx_userid", curUserid)) == 0) {
-//                            userMapper.insert(user);
-//                        }
-//                    }
-
-                    //获取部门
-//                    JSONObject deptObj = getDepartments(curCorpAccessToken);
-//                    JSONArray deptObjJSONArray = deptObj.getJSONArray("department");
-//
-//                    List<Department> sysDeptList = new ArrayList<>();
-//                    for (int i=0;i<deptObjJSONArray.size(); i++) {
-//                        int deptId = deptObjJSONArray.getJSONObject(i).getIntValue("id");
-//                        Department department = new Department();
-//                        department.setDepartmentName(deptObjJSONArray.getJSONObject(i).getString("name"));
-//                        department.setCompanyId(companyId);
-//                        departmentMapper.insert(department);
-//                        sysDeptList.add(department);
-//                        deptObjJSONArray.getJSONObject(i).put("sys_dept_id", department.getDepartmentId());
-//                        Integer departmentId = department.getDepartmentId();
-//                        JSONArray userList = getDeptUserSimple(curCorpAccessToken, deptId);
-//                        for (int m=0;m<userList.size(); m++) {
-//                            JSONObject userJson = userList.getJSONObject(m);
-//                            String curUserid = userJson.getString("userid");
-//                            log.info("userid="+curUserid+", name=" + userJson.getString("name")+", mobile="+userJson.getString("mobile"));
-//                            //不存在的人员, 进行插入
-//                            User user = new User();
-//
-//                            user.setId(SnowFlake.nextId()+"")
-//                                    .setRole(0)//默认普通员工
-//                                    .setCompanyId(companyId)
-//                                    .setDepartmentId(departmentId)
-//                                    .setName(userJson.getString("name"))
-//                                    .setCorpwxUserid(curUserid)
-//                                    .setColor(ColorUtil.randomColor());
-//
-//                            //检查用户是否已经存在
-//                            if (userMapper.selectCount(new QueryWrapper<User>().eq("corpwx_userid", curUserid)) == 0) {
-//                                userMapper.insert(user);
-//                            } else {
-//                                //更新信息
-//                                User oldUser = userMapper.selectList(new QueryWrapper<User>().eq("corpwx_userid", curUserid).eq("company_id", companyId).orderByDesc("create_time")).get(0);
-//                                oldUser.setName(userJson.getString("name"));
-//                                oldUser.setDepartmentId(departmentId);
-//
-//                                userMapper.updateById(oldUser);
-//                            }
-//                        }
-//                    }
-
-                    //再来更新部门的层级关系
-//                    List<Department> needUpdateDepts = new ArrayList<>();
-//                    for (int i=0;i<deptObjJSONArray.size(); i++) {
-//                        JSONObject deptJson = deptObjJSONArray.getJSONObject(i);
-//                        int pid = deptJson.getInteger("parentid");
-//                        if (pid != 1) {
-//                            //根部门Id = 1
-//                            int sysDeptId = deptJson.getInteger("sys_dept_id");
-//                            Department department = sysDeptList.stream().filter(d -> d.getDepartmentId().equals(sysDeptId)).findFirst().get();
-//                            //从deptjson数组中寻找parent item
-//                            for (int m=0;m<deptObjJSONArray.size(); m++) {
-//                                JSONObject item = deptObjJSONArray.getJSONObject(m);
-//                                if (item.getInteger("id").equals(pid)) {
-//                                    department.setSuperiorId(item.getInteger("sys_dept_id"));
-//                                    break;
-//                                }
-//                            }
-//                            needUpdateDepts.add(department);
-//                        }
-//                    }
-//                    if (needUpdateDepts.size() > 0) {
-//                        departmentService.updateBatchById(needUpdateDepts);
-//                    }
+                    int companyId = company.getId();
+                    //获取公司根部门人员,也就是没有分配部门的人员
+                    int companyRootDeptId = 1;
+                    if (enableNewVersion) {
+                        JSONArray unAssignedUserList = getDeptUserSimple(curCorpAccessToken, companyRootDeptId);
+                        for (int m=0;m<unAssignedUserList.size(); m++) {
+                            JSONObject userJson = unAssignedUserList.getJSONObject(m);
+                            String curUserid = userJson.getString("userid");
+                            log.info("userid="+curUserid+", name=" + userJson.getString("name")+", mobile="+userJson.getString("mobile"));
+                            //不存在的人员, 进行插入
+                            User user = new User();
+
+                            user.setId(SnowFlake.nextId()+"")
+                                    .setRoleId(defaultUserRole.getId())//默认普通员工
+                                    .setRoleName(defaultUserRole.getRolename())
+                                    .setCompanyId(companyId)
+                                    .setName(userJson.getString("name"))
+                                    .setCorpwxUserid(curUserid)
+                                    .setColor(ColorUtil.randomColor())
+                                    .setJobNumber(curUserid);//工号就是企业微信的用户ID
+
+                            //检查用户是否已经存在
+                            if (userMapper.selectCount(new QueryWrapper<User>().eq("corpwx_userid", curUserid)) == 0) {
+                                userMapper.insert(user);
+                            }
+                        }
+
+//                    获取部门
+                        JSONObject deptObj = getDepartments(curCorpAccessToken);
+                        JSONArray deptObjJSONArray = deptObj.getJSONArray("department");
+
+                        List<Department> sysDeptList = new ArrayList<>();
+                        for (int i=0;i<deptObjJSONArray.size(); i++) {
+                            int deptId = deptObjJSONArray.getJSONObject(i).getIntValue("id");
+                            Department department = new Department();
+                            department.setDepartmentName(deptObjJSONArray.getJSONObject(i).getString("name"));
+                            department.setCompanyId(companyId);
+                            departmentMapper.insert(department);
+                            sysDeptList.add(department);
+                            deptObjJSONArray.getJSONObject(i).put("sys_dept_id", department.getDepartmentId());
+                            Integer departmentId = department.getDepartmentId();
+                            JSONArray userList = getDeptUserSimple(curCorpAccessToken, deptId);
+                            for (int m=0;m<userList.size(); m++) {
+                                JSONObject userJson = userList.getJSONObject(m);
+                                String curUserid = userJson.getString("userid");
+                                log.info("userid="+curUserid+", name=" + userJson.getString("name")+", mobile="+userJson.getString("mobile"));
+                                //不存在的人员, 进行插入
+                                User user = new User();
+
+                                user.setId(SnowFlake.nextId()+"")
+                                        .setRoleId(defaultUserRole.getId())//默认普通员工
+                                        .setRoleName(defaultUserRole.getRolename())
+                                        .setCompanyId(companyId)
+                                        .setDepartmentId(departmentId)
+                                        .setName(userJson.getString("name"))
+                                        .setCorpwxUserid(curUserid)
+                                        .setColor(ColorUtil.randomColor())
+                                        .setJobNumber(userId);//工号就是企业微信的用户ID
+
+                                //检查用户是否已经存在
+                                if (userMapper.selectCount(new QueryWrapper<User>().eq("corpwx_userid", curUserid)) == 0) {
+                                    userMapper.insert(user);
+                                } else {
+                                    //更新信息
+                                    User oldUser = userMapper.selectList(new QueryWrapper<User>().eq("corpwx_userid", curUserid).eq("company_id", companyId).orderByDesc("create_time")).get(0);
+                                    oldUser.setName(userJson.getString("name"));
+                                    oldUser.setDepartmentId(departmentId);
+
+                                    userMapper.updateById(oldUser);
+                                }
+                            }
+                        }
+
+//                    再来更新部门的层级关系
+                        List<Department> needUpdateDepts = new ArrayList<>();
+                        for (int i=0;i<deptObjJSONArray.size(); i++) {
+                            JSONObject deptJson = deptObjJSONArray.getJSONObject(i);
+                            int pid = deptJson.getInteger("parentid");
+                            if (pid != 1) {
+                                //根部门Id = 1
+                                int sysDeptId = deptJson.getInteger("sys_dept_id");
+                                Department department = sysDeptList.stream().filter(d -> d.getDepartmentId().equals(sysDeptId)).findFirst().get();
+                                //从deptjson数组中寻找parent item
+                                for (int m=0;m<deptObjJSONArray.size(); m++) {
+                                    JSONObject item = deptObjJSONArray.getJSONObject(m);
+                                    if (item.getInteger("id").equals(pid)) {
+                                        department.setSuperiorId(item.getInteger("sys_dept_id"));
+                                        break;
+                                    }
+                                }
+                                needUpdateDepts.add(department);
+                            }
+                        }
+                        if (needUpdateDepts.size() > 0) {
+                            departmentService.updateBatchById(needUpdateDepts);
+                        }
+                    }
                 } else {
                     //企业已经存在
                     Integer companyId = data.getCompanyId();
@@ -969,7 +985,8 @@ public class WeiXinCorpController {
                                 .setName(data.getAuthUsername()==null?userId:data.getAuthUsername())
                                 .setCorpwxUserid(userId)
                                 .setColor(ColorUtil.randomColor())
-                                .setCompanyId(companyId);
+                                .setCompanyId(companyId)
+                                .setJobNumber(userId);//工号就是企业微信的用户ID
                         userMapper.insert(user);
                     }
                 }
@@ -1200,7 +1217,8 @@ public class WeiXinCorpController {
 //                curUser = userMapper.selectById("7913998191517310976");
 //            }
             Company company = companyMapper.selectOne(new QueryWrapper<Company>().eq("id", curUser.getCompanyId()));
-
+            WxCorpInfo info = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", curUser.getCompanyId()));
+            curUser.setUserNameNeedTranslate(info.getSaasSyncContact());
             //检测密码正确时
             UserVO userVO = new UserVO().setCompanyName(company.getCompanyName());
             userVO.setCompany(company);

+ 71 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/ReportLogDetail.java

@@ -0,0 +1,71 @@
+package com.management.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import java.time.LocalDate;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+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 2022-09-19
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class ReportLogDetail extends Model<ReportLogDetail> {
+
+    private static final long serialVersionUID=1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 日报的id
+     */
+    @TableField("report_id")
+    private Integer reportId;
+
+    /**
+     * 审核内容
+     */
+    @TableField("msg")
+    private String msg;
+
+    /**
+     * 操作人id
+     */
+    @TableField("operator_id")
+    private String operatorId;
+
+    /**
+     * 操作日期
+     */
+    @TableField("operate_date")
+    private LocalDateTime operateDate;
+
+    @TableField("company_id")
+    private Integer companyId;
+
+    /**
+     * 日报所属工作日期
+     */
+    @TableField("work_date")
+    private LocalDate workDate;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return this.id;
+    }
+
+}

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

@@ -230,6 +230,12 @@ public class User extends Model<User> {
     @TableField(exist = false)
     private List<UserCert> certList;
 
+    /**
+     * 企业微信的用户姓名是否需要转化, 0-不需要,1-需要
+     */
+    @TableField(exist = false)
+    private Integer userNameNeedTranslate = 0;
+
     @Override
     protected Serializable pkVal() {
         return this.id;

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

@@ -15,7 +15,7 @@ import lombok.experimental.Accessors;
  * </p>
  *
  * @author Seyason
- * @since 2022-07-28
+ * @since 2022-09-21
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -93,6 +93,12 @@ public class WxCorpInfo extends Model<WxCorpInfo> {
     @TableField("contact_server")
     private String contactServer;
 
+    /**
+     * 作为第三方平台,是否自动同步企业微信通讯录。对老数据关闭,新企业默认开启
+     */
+    @TableField("saas_sync_contact")
+    private Integer saasSyncContact;
+
 
     @Override
     protected Serializable pkVal() {

+ 1 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/vo/UserDailyWorkItem.java

@@ -7,4 +7,5 @@ public class UserDailyWorkItem {
     public String name;
     private String inactiveDate;
     public String cardTime;
+    public String status;
 }

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

@@ -0,0 +1,16 @@
+package com.management.platform.mapper;
+
+import com.management.platform.entity.ReportLogDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-09-19
+ */
+public interface ReportLogDetailMapper extends BaseMapper<ReportLogDetail> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.management.platform.service;
+
+import com.management.platform.entity.ReportLogDetail;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-09-19
+ */
+public interface ReportLogDetailService extends IService<ReportLogDetail> {
+
+}

+ 3 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DepartmentServiceImpl.java

@@ -509,6 +509,7 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
                     User user = new User();
                     user.setId((String)map.get(("id")));
                     user.setName((String)map.get("user"));
+                    user.setJobNumber((String)map.get("jobNumber"));
                     userList.add(user);
                     //这个名字尚未装进数组中
                     List<Map<String, Object>> tempList = new ArrayList<>();
@@ -731,7 +732,7 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
         list.add(unAssignedDept);
 
         //获取公司全部人员
-        List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId));
+        List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId).eq("is_active", 1));
         List<HashMap> userMapList = new ArrayList<>();
         for (User u : userList) {
             HashMap<String, Object> user = new HashMap<String, Object>();
@@ -760,7 +761,7 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
         list.add(unAssignedDept);
 
         List<User> userList = new ArrayList<>();
-        userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId));
+        userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId).eq("is_active", 1));
 
         List<HashMap> userMapList = new ArrayList<>();
         for (User u : userList) {

+ 58 - 178
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -1018,7 +1018,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         try {
             //根据系统配置的员工成本计算方式,按固定时薪还是固定月薪,分情况计算。
             User targetUser = userMapper.selectById(request.getHeader("Token"));
-            Integer companyId =targetUser.getCompanyId();
+            Integer companyId = targetUser.getCompanyId();
             Map<String, Object> resultMap = new HashMap<>();
             //当前用户管理部门
             List<Integer> deptIds=null;
@@ -1045,109 +1045,34 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     }
                 }
             }
-            TimeType timeType = timeTypeMapper.selectById(companyId);
-            if (timeType.getFixMonthcost() == 1) {
-                //每月固定月薪的方式计算,平摊到各个项目中
-                List<Map<String, Object>> list = projectMapper.getTimeCostReport(companyId, startDate+"-01", endDate+"-31", null,deptIds);
-                //检查财务表中是否已经导入成本
-                List<Finance> financeList = financeMapper.selectList(new QueryWrapper<Finance>().eq("ymonth", startDate).eq("company_id", companyId));
-                List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId));
-                //计算人员总工时
-                for (Map<String, Object> map : list) {
-                    String creatorId = (String)map.get("creatorId");
-                    double cost = (double)map.get("cost");
-                    User user = userList.stream().filter(u -> u.getId().equals(creatorId)).findFirst().get();
-                    user.setTotalHours(user.getTotalHours() + cost);
-                }
-                //计算实际时薪
-                for (User user : userList) {
-                    if (user.getTotalHours() != 0) {
-                        Optional<Finance> first = financeList.stream().filter(f -> f.getUserId().equals(user.getId())).findFirst();
-                        BigDecimal monthCost = null;
-                        if (first.isPresent()) {
-                            monthCost = first.get().getTotalCost();
-                        } else {
-                            monthCost = user.getMonthCost();
-                        }
-                        user.setCost(monthCost.divide(new BigDecimal(user.getTotalHours()), 6, BigDecimal.ROUND_HALF_UP));
-                    } else {
-                        user.setCost(new BigDecimal(0));
-                    }
-                }
 
-                BigDecimal totalMoneyCost = BigDecimal.valueOf(0);
-                List<Map<String, Object>> retList = new ArrayList<>();
-                List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().eq("company_id", companyId).orderByAsc("id"));
-                for (Project p : projectList) {
-                    Map<String, Object> projectMap = new HashMap<>();
-                    projectMap.put("id", p.getId());
-                    projectMap.put("name", p.getProjectName());
-                    //按照项目汇总
-                    double pTotalTime = 0;
-                    BigDecimal pTotalMoney = new BigDecimal(0);
-                    for (Map<String, Object> map : list) {
-                        String creatorId = (String)map.get("creatorId");
-                        int projectId = (int)map.get("projectId");
-                        if (projectId == p.getId()) {
-                            double costTime = (double)map.get("cost");
-                            pTotalTime += costTime;
-                            User curUser = userList.stream().filter(u->u.getId().equals(creatorId)).findFirst().get();
-                            //该人员的成本
-                            pTotalMoney = pTotalMoney.add(curUser.getCost().multiply(new BigDecimal(costTime)));
-                        }
-                    }
-                    if (pTotalTime > 0) {
-                        projectMap.put("cost", pTotalTime);
-                        projectMap.put("costMoney", pTotalMoney);
-                        retList.add(projectMap);
-                        totalMoneyCost = totalMoneyCost.add(pTotalMoney);
-                    }
-                }
-
-                resultMap.put("costList", retList);
-                resultMap.put("totalMoneyCost", totalMoneyCost);
-                if(functionCostList.size()==0){
-                    resultMap.put("totalCostMoney",new BigDecimal(0));
-                    list.forEach(li->{
-                        li.put("costMoney",new BigDecimal(0));
-                    });
-                }
-                if(functionTimeList.size()==0){
-                    retList.forEach(li->{
-                        li.put("cost",0.0);
-                    });
+            List<Map<String, Object>> list = projectMapper.getTimeCost(companyId, startDate, endDate, null, userId,deptIds,null);
+            BigDecimal totalMoneyCost = BigDecimal.valueOf(0);
+            for (Map<String, Object> map : list) {
+                if (!map.containsKey("cost")) {
+                    map.put("cost", 0);
                 }
-                httpRespMsg.data = resultMap;
-
-            } else {
-                List<Map<String, Object>> list = projectMapper.getTimeCost(companyId, startDate, endDate, null, userId,deptIds,null);
-                BigDecimal totalMoneyCost = BigDecimal.valueOf(0);
-                for (Map<String, Object> map : list) {
-                    if (!map.containsKey("cost")) {
-                        map.put("cost", 0);
-                    }
-                    if (!map.containsKey("costMoney")) {
-                        map.put("costMoney", 0);
-                    } else {
-                        totalMoneyCost = totalMoneyCost.add((BigDecimal)map.get("costMoney"));
-                    }
+                if (!map.containsKey("costMoney")) {
+                    map.put("costMoney", 0);
+                } else {
+                    totalMoneyCost = totalMoneyCost.add((BigDecimal)map.get("costMoney"));
                 }
+            }
 
-                resultMap.put("costList", list);
-                resultMap.put("totalMoneyCost", totalMoneyCost);
-                if(functionCostList.size()==0){
-                    resultMap.put("totalCostMoney",new BigDecimal(0));
-                    list.forEach(li->{
-                        li.put("costMoney",new BigDecimal(0));
-                    });
-                }
-                if(functionTimeList.size()==0){
-                    list.forEach(li->{
-                        li.put("cost",0.0);
-                    });
-                }
-                httpRespMsg.data = resultMap;
+            resultMap.put("costList", list);
+            resultMap.put("totalMoneyCost", totalMoneyCost);
+            if(functionCostList.size()==0){
+                resultMap.put("totalCostMoney",new BigDecimal(0));
+                list.forEach(li->{
+                    li.put("costMoney",new BigDecimal(0));
+                });
+            }
+            if(functionTimeList.size()==0){
+                list.forEach(li->{
+                    li.put("cost",0.0);
+                });
             }
+            httpRespMsg.data = resultMap;
         } catch (NullPointerException e) {
             e.printStackTrace();
             //httpRespMsg.setError("验证失败");
@@ -1552,6 +1477,8 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         try {
             User targetUser = userMapper.selectById(request.getHeader("Token"));
             Integer companyId = targetUser.getCompanyId();
+            //优先判断这个项目的所属部门,是不是当前这个人担任负责人的部门
+            Integer projectBelongDeptId = projectMapper.selectById(projectId).getDeptId();
             List<Department> allDepartmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
             List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("manager_id", targetUser.getId()).eq("company_id", companyId));
             List<DepartmentOtherManager> departmentOtherManagerList = departmentOtherManagerMapper.selectList(new QueryWrapper<DepartmentOtherManager>().eq("other_manager_id", targetUser.getId()));
@@ -1562,20 +1489,26 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             //判断查看权限
             List<Integer> deptIds=null;
             if(functionAllList.size()==0){
-                deptIds=new ArrayList<>();
-                deptIds.add(-1);
-                if(functionDpartList.size()>0){
-                    if(functionTimeList.size()>0||functionCostList.size()>0){
-                        for (Department department : departmentList) {
-                            List<Integer> branchDepartment = getBranchDepartment(department.getDepartmentId(), allDepartmentList);
-                            deptIds.addAll(branchDepartment);
-                        }
-                        List<Integer> collect = departmentList.stream().map(dp -> dp.getDepartmentId()).distinct().collect(Collectors.toList());
-                        List<Integer> otherCollect = departmentOtherManagerList.stream().distinct().map(dom -> dom.getDepartmentId()).collect(Collectors.toList());
-                        collect.addAll(otherCollect);
-                        for (Integer integer : collect) {
-                            List<Integer> branchDepartment = getBranchDepartment(integer, allDepartmentList);
-                            deptIds.addAll(branchDepartment);
+                //判断是否是当前项目的所属部门的主要或者其他负责人
+                if (projectBelongDeptId != null && (departmentOtherManagerList.stream().anyMatch(other->other.getDepartmentId().equals(projectBelongDeptId))
+                        || departmentList.stream().anyMatch(main->main.getDepartmentId().equals(projectBelongDeptId)))) {
+                    //默认为空的deptIds, 不过滤
+                } else {
+                    deptIds=new ArrayList<>();
+                    deptIds.add(-1);
+                    if(functionDpartList.size()>0){
+                        if(functionTimeList.size()>0||functionCostList.size()>0){
+                            for (Department department : departmentList) {
+                                List<Integer> branchDepartment = getBranchDepartment(department.getDepartmentId(), allDepartmentList);
+                                deptIds.addAll(branchDepartment);
+                            }
+                            List<Integer> collect = departmentList.stream().map(dp -> dp.getDepartmentId()).distinct().collect(Collectors.toList());
+                            List<Integer> otherCollect = departmentOtherManagerList.stream().distinct().map(dom -> dom.getDepartmentId()).collect(Collectors.toList());
+                            collect.addAll(otherCollect);
+                            for (Integer integer : collect) {
+                                List<Integer> branchDepartment = getBranchDepartment(integer, allDepartmentList);
+                                deptIds.addAll(branchDepartment);
+                            }
                         }
                     }
                 }
@@ -1585,73 +1518,20 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 //httpRespMsg.setError("无权查看其他公司的项目详情");
                 httpRespMsg.setError(MessageUtils.message("access.otherCompanyProject"));
             } else {
-                TimeType timeType = timeTypeMapper.selectById(companyId);
-                if (timeType.getFixMonthcost() == 0) {
-                    Map<String, Object> resultMap = new HashMap<>();
-                    //数据下 非负责部门人员数据不展示
-                    List<Map<String, Object>> list = projectMapper.getProjectCost(companyId,startDate, endDate, projectId,stateKey, null,deptIds,null);
-                    BigDecimal totalMoneyCost = BigDecimal.valueOf(0);
-                    for (Map<String, Object> map : list) {
-                        if (!map.containsKey("costMoney")) {
-                            map.put("costMoney", 0);
-                        } else {
-                            totalMoneyCost = totalMoneyCost.add((BigDecimal)map.get("costMoney"));
-                        }
-                    }
-                    resultMap.put("costList", list);
-                    resultMap.put("totalMoneyCost", totalMoneyCost);
-                    httpRespMsg.data = resultMap;
-                } else {
-                    startDate = startDate + "-01";
-                    endDate = endDate + "-31";
-                    List<Map<String, Object>> userMonthTimeCostList = projectMapper.getUserMonthTimeCost(companyId, startDate+"-01", endDate+"-31");
-
-                    List<Map<String, Object>> list = projectMapper.getProjectCost(companyId,startDate, endDate, projectId,stateKey, null,deptIds,null);
-
-                    //检查财务表中是否已经导入成本
-                    List<Finance> financeList = financeMapper.selectList(new QueryWrapper<Finance>().eq("ymonth", startDate).eq("company_id", companyId));
-                    List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId));
-
-                    //计算实际时薪
-                    for (User user : userList) {
-                        double userTotalTime = 0;
-                        for (int i=0;i<userMonthTimeCostList.size(); i++) {
-                            Map map = userMonthTimeCostList.get(i);
-                            if (map.get("creatorId").equals(user.getId())) {
-                                userTotalTime = (double)map.get("cost");
-                                break;
-                            }
-                        }
-                        if (userTotalTime != 0) {
-                            Optional<Finance> first = financeList.stream().filter(f -> f.getUserId().equals(user.getId())).findFirst();
-                            BigDecimal monthCost = null;
-                            if (first.isPresent()) {
-                                monthCost = first.get().getTotalCost();
-                            } else {
-                                monthCost = user.getMonthCost();
-                            }
-                            user.setCost(monthCost.divide(new BigDecimal(userTotalTime), 6, BigDecimal.ROUND_HALF_UP));
-                        } else {
-                            user.setCost(new BigDecimal(0));
-                        }
-                    }
-
-                    Map<String, Object> resultMap = new HashMap<>();
-                    BigDecimal totalMoneyCost = BigDecimal.valueOf(0);
-
-                    //计算人员在项目上的投入工时
-                    for (Map<String, Object> map : list) {
-                        String creatorId = (String)map.get("creatorId");
-                        double cost = (double)map.get("cost");
-                        User user = userList.stream().filter(u -> u.getId().equals(creatorId)).findFirst().get();
-                        BigDecimal costMoney = user.getCost().multiply(new BigDecimal(cost));
-                        map.put("costMoney", costMoney);
-                        totalMoneyCost = totalMoneyCost.add(costMoney);
+                Map<String, Object> resultMap = new HashMap<>();
+                //数据下 非负责部门人员数据不展示
+                List<Map<String, Object>> list = projectMapper.getProjectCost(companyId,startDate, endDate, projectId,stateKey, null,deptIds,null);
+                BigDecimal totalMoneyCost = BigDecimal.valueOf(0);
+                for (Map<String, Object> map : list) {
+                    if (!map.containsKey("costMoney")) {
+                        map.put("costMoney", 0);
+                    } else {
+                        totalMoneyCost = totalMoneyCost.add((BigDecimal)map.get("costMoney"));
                     }
-                    resultMap.put("costList", list);
-                    resultMap.put("totalMoneyCost", totalMoneyCost);
-                    httpRespMsg.data = resultMap;
                 }
+                resultMap.put("costList", list);
+                resultMap.put("totalMoneyCost", totalMoneyCost);
+                httpRespMsg.data = resultMap;
             }
         } catch (NullPointerException e) {
             //httpRespMsg.setError("验证失败");

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

@@ -0,0 +1,20 @@
+package com.management.platform.service.impl;
+
+import com.management.platform.entity.ReportLogDetail;
+import com.management.platform.mapper.ReportLogDetailMapper;
+import com.management.platform.service.ReportLogDetailService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-09-19
+ */
+@Service
+public class ReportLogDetailServiceImpl extends ServiceImpl<ReportLogDetailMapper, ReportLogDetail> implements ReportLogDetailService {
+
+}

+ 127 - 52
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -77,6 +77,10 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     @Resource
     private TaskGroupMapper taskGroupMapper;
     @Resource
+    private ReportLogDetailMapper reportLogDetailMapper;
+    @Resource
+    private ReportLogDetailService reportLogDetailService;
+    @Resource
     private ProjectAuditorMapper projectAuditorMapper;
     @Resource
     private SysFunctionMapper sysFunctionMapper;
@@ -808,6 +812,17 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         log.setCompanyId(report.getCompanyId());
         log.setReportIds(reportIds);
         reportLogMapper.insert(log);
+        for (Integer reportId : ids) {
+            ReportLogDetail detail = new ReportLogDetail();
+            detail.setCompanyId(log.getCompanyId());
+            detail.setMsg(log.getMsg());
+            detail.setOperateDate(log.getOperateDate());
+            detail.setOperatorId(log.getOperatorId());
+            detail.setReportId(reportId);
+            detail.setWorkDate(log.getCreateDate());
+            reportLogDetailMapper.insert(detail);
+        }
+
     }
 
     //保存提交日报的记录
@@ -815,6 +830,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         if (reportList.size() == 0) return;
         Report r = reportList.get(0);
         List<ReportLog> addLogList = new ArrayList<>();
+        List<ReportLogDetail> addLogDetailList = new ArrayList<>();
         //待审核或者直接通过的(代填时state可能是直接通过)
         if (r.getState() == 0 || r.getState() == 1) {
             Integer companyId = r.getCompanyId();
@@ -824,6 +840,10 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 ReportLog log = new ReportLog();
                 log.setCreatorId(report.getCreatorId());
                 log.setCreateDate(report.getCreateDate());
+                ReportLogDetail detail = new ReportLogDetail();
+                detail.setWorkDate(log.getCreateDate());
+                detail.setReportId(report.getId());
+                detail.setCompanyId(companyId);
                 //去重
                 Optional<ReportLog> oldLog = addLogList.stream().filter(add -> add.getCreateDate().isEqual(log.getCreateDate()) && add.getCreatorId().equals(log.getCreatorId())).findFirst();
                 if (!oldLog.isPresent()) {
@@ -848,12 +868,23 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     log.setCompanyId(companyId);
                     log.setReportIds(report.getId()+"");
                     addLogList.add(log);
+                    detail.setOperatorId(log.getOperatorId());
+                    detail.setOperateDate(log.getOperateDate());
+                    detail.setMsg(log.getMsg());
+
                 } else {
                     ReportLog reportLog = oldLog.get();
                     reportLog.setReportIds(reportLog.getReportIds()+","+report.getId());
+                    detail.setOperatorId(reportLog.getOperatorId());
+                    detail.setOperateDate(reportLog.getOperateDate());
+                    detail.setMsg(reportLog.getMsg());
                 }
+
+                addLogDetailList.add(detail);
             }
             reportLogService.saveBatch(addLogList);
+            //详细保存
+            reportLogDetailService.saveBatch(addLogDetailList);
         }
     }
 
@@ -861,6 +892,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     private void saveApproveReportLog(List<Report> reportList, String operatorId, String opName) {
         Report r = reportList.get(0);
         List<ReportLog> addLogList = new ArrayList<>();
+        List<ReportLogDetail> addLogDetailList = new ArrayList<>();
         Integer companyId = r.getCompanyId();
 //        List<Integer> projectIds = reportList.stream().map(Report::getProjectId).collect(Collectors.toList());
 //        List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().select("id, project_name").in("id", projectIds));
@@ -881,14 +913,24 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 ReportLog reportLog = oldLog.get();
                 reportLog.setReportIds(reportLog.getReportIds()+","+report.getId());
             }
+            ReportLogDetail detail = new ReportLogDetail();
+            detail.setReportId(report.getId());
+            detail.setWorkDate(log.getCreateDate());
+            detail.setOperatorId(log.getOperatorId());
+            detail.setOperateDate(log.getOperateDate());
+            detail.setCompanyId(log.getCompanyId());
+            detail.setMsg(log.getMsg());
+            addLogDetailList.add(detail);
         }
         reportLogService.saveBatch(addLogList);
+        reportLogDetailService.saveBatch(addLogDetailList);
     }
 
     //保存审核日报的记录
     private void saveDenyReportLog(List<Report> reportList, String operatorId, String opName,  String reason) {
         Report r = reportList.get(0);
         List<ReportLog> addLogList = new ArrayList<>();
+        List<ReportLogDetail> addLogDetailList = new ArrayList<>();
         Integer companyId = r.getCompanyId();
         //操作审核通过
         for (Report report : reportList) {
@@ -907,8 +949,17 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 ReportLog reportLog = oldLog.get();
                 reportLog.setReportIds(reportLog.getReportIds()+","+report.getId());
             }
+            ReportLogDetail detail = new ReportLogDetail();
+            detail.setReportId(report.getId());
+            detail.setWorkDate(log.getCreateDate());
+            detail.setOperatorId(log.getOperatorId());
+            detail.setOperateDate(log.getOperateDate());
+            detail.setCompanyId(log.getCompanyId());
+            detail.setMsg(log.getMsg());
+            addLogDetailList.add(detail);
         }
         reportLogService.saveBatch(addLogList);
+        reportLogDetailService.saveBatch(addLogDetailList);
     }
 
     private void loadPicFromCorpWXServer(Integer companyId, List<Report> reportList) {
@@ -1818,7 +1869,9 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             for (Integer integer : otherCollect) {
                 Optional<Department> first = allDepartmentList.stream().filter(ad -> ad.getDepartmentId().equals(integer)).findFirst();
                 if(first.isPresent()){
-                    allMDeptList.add(first.get());
+                    if (!allMDeptList.stream().anyMatch(all->all.getDepartmentId().equals(first.get().getDepartmentId()))) {
+                        allMDeptList.add(first.get());
+                    }
                 }
             }
 
@@ -1831,10 +1884,21 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 }
             }
 
-            ArrayList realMDeptList = new ArrayList<>();
+            ArrayList<DepartmentVO> realMDeptList = new ArrayList<>();
             for (Department d : allMDeptList) {
                 realMDeptList.addAll(getSpecifiedDept(list, d.getDepartmentId()));
             }
+            //去掉第一层的部门是其他第一层部门的子部门的数据
+
+            for (int i=0;i<realMDeptList.size(); i++) {
+                DepartmentVO curDept = realMDeptList.get(i);
+                boolean exists = existsInChildDeptList(curDept.getId(), realMDeptList);
+                if (exists) {
+                    realMDeptList.remove(i);
+                    i--;
+                }
+            }
+
             list = realMDeptList;
         }
 
@@ -1879,6 +1943,29 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         return msg;
     }
 
+    boolean existsInChildDeptList(Integer departmentId, List<DepartmentVO> parentDeptList) {
+        boolean find = false;
+        for (DepartmentVO p : parentDeptList) {
+            if (p.getChildren() != null && p.getChildren().size() > 0) {
+                for (DepartmentVO vo : p.getChildren()) {
+                    if (vo.getId().equals(departmentId)) {
+                        find = true;
+                        break;
+                    } else {
+                        if (vo.getChildren() != null && vo.getChildren().size() > 0) {
+                            if (existsInChildDeptList(departmentId, p.getChildren())) {
+                                find = true;
+                                break;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        return find;
+    }
+
     @Override
     public HttpRespMsg batchApproveReport(String reportIds, Integer isDepartment, HttpServletRequest request,String evaluate) {
         String token = request.getHeader("Token");
@@ -2684,14 +2771,6 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             //检查是不是部门负责人(含主要负责人和其他负责人)
             List<Integer> allDeptIds = getAllVisibleDeptIdList(user, allDeptList);
             if (allDeptIds.size() > 0) {
-//                List<Department> allDepts = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
-//                List<Department> myDeptList = allDepts.stream().filter(d->user.getId().equals(d.getManagerId()) || (hasDeptWorktimePriv && d.getDepartmentId().equals(user.getDepartmentId()))).collect(Collectors.toList());
-//                List<Department> subDepts = new ArrayList<>();
-//                for (Department dp : myDeptList) {
-//                    subDepts.addAll(getSubDepts(dp, allDepts));
-//                    subDepts.add(dp);
-//                }
-//                List<Integer> collect = subDepts.stream().map(Department::getDepartmentId).collect(Collectors.toList());
                 list = reportMapper.getUserDailyWorkTime(companyId, startDate, endDate, allDeptIds, null);
                 //部门负责人看自己部门相关的
                 allRangeUserList = userMapper.selectList(new QueryWrapper<User>().in("department_id", allDeptIds).orderByDesc("department_id"));
@@ -2724,10 +2803,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         //准备部门数据
         List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
         //获取所有同步的企业微信数据
-        LocalDateTime a=LocalDateTime.now();
         List<Map> userCorpwxTimeMapList = userCorpwxTimeMapper.selectByAsk(companyId,startDate,endDate);
-        LocalDateTime b=LocalDateTime.now();
-        long l = Duration.between(a, b).toMillis();
         String lastUserId = null;
         UserMonthWork lastUserData = null;
         for (Map<String, Object> data : list) {
@@ -3279,12 +3355,16 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                 titles.add("任务分组");
                 titles.add("投入阶段");
             }
+            //每个日报的审批流程记录
+            List<ReportLogDetail> logDetails = new ArrayList<>();
             if (timeType.getShowFillauditTime() == 1) {
-//                titles.add("填写时间");
-//                titles.add("项目审核人");
-//                titles.add("审核时间");
+                titles.add("填写时间");
+                titles.add("项目审核人");
+                titles.add("审核时间");
                 titles.add("审核流程");
+                logDetails = reportLogDetailMapper.selectList(new QueryWrapper<ReportLogDetail>().eq("company_id", company.getId()).between("work_date", startDate, endDate));
             }
+
             titles.add("工作事项");
             if(stateKey==1){
                 titles.add("审核状态");
@@ -3493,29 +3573,22 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     index++;
                 }
                 if (timeType.getShowFillauditTime() == 1) {
-//                    row.createCell(index).setCellValue(sdf.format((Date)map.get("time")));
-//                    index++;
-//                    row.createCell(index).setCellValue((String)map.get("projectAuditorName"));
-//                    index++;
-//                    if (map.get("projectAuditTime") == null) {
-//                        row.createCell(index).setCellValue("");
-//                    } else {
-//                        row.createCell(index).setCellValue(sdf.format((Date)map.get("projectAuditTime")));
-//                    }
-//                    index++;
-                    //审核流程显示
-                    QueryWrapper<ReportLog> logQueryWrapper = new QueryWrapper<ReportLog>().eq("report_ids", (int)map.get("id"))
-                            .or().likeLeft("report_ids", ","+map.get("id"))
-                            .or().like("report_ids", ","+map.get("id")+",")
-                            .or().likeRight("report_ids", map.get("id")+",");
-                    List<ReportLog> auditLogs = reportLogMapper.selectList(logQueryWrapper);
-
-                    if (auditLogs.size() == 0) {
+                    row.createCell(index).setCellValue(sdf.format((Date)map.get("time")));
+                    index++;
+                    row.createCell(index).setCellValue((String)map.get("projectAuditorName"));
+                    index++;
+                    if (map.get("projectAuditTime") == null) {
                         row.createCell(index).setCellValue("");
                     } else {
+                        row.createCell(index).setCellValue(sdf.format((Date)map.get("projectAuditTime")));
+                    }
+                    index++;
+                    //审核流程显示
+                    List<ReportLogDetail> detailList = logDetails.stream().filter(log -> log.getReportId().equals((Integer) map.get("id"))).collect(Collectors.toList());
+                    if (detailList.size() > 0) {
                         StringBuilder sb = new StringBuilder();
                         boolean isFirst = true;
-                        for (ReportLog audit:auditLogs) {
+                        for (ReportLogDetail audit:detailList) {
                             String time = dtf.format(audit.getOperateDate());
                             String msg = time+" " + audit.getMsg();
                             if (!isFirst) {
@@ -3526,8 +3599,9 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                             sb.append(msg);
                         }
                         row.createCell(index).setCellValue(sb.toString());
+                    } else {
+                        row.createCell(index).setCellValue("");
                     }
-
                     index++;
                 }
                 row.createCell(index).setCellValue((String) map.get("content"));
@@ -3757,14 +3831,6 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             List<Integer> allVisibleDeptIdList = getAllVisibleDeptIdList(user, null);
             //检查是不是部门负责人
             if (allVisibleDeptIdList.size() > 0) {
-//                List<Department> allDepts = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
-//                List<Department> myDeptList = allDepts.stream().filter(d->user.getId().equals(d.getManagerId())|| (hasDeptWorktimePriv && d.getDepartmentId().equals(user.getDepartmentId()))).collect(Collectors.toList());
-//                List<Department> subDepts = new ArrayList<>();
-//                for (Department dp : myDeptList) {
-//                    subDepts.addAll(getSubDepts(dp, allDepts));
-//                    subDepts.add(dp);
-//                }
-//                List<Integer> collect = subDepts.stream().map(Department::getDepartmentId).collect(Collectors.toList());
                 list = reportMapper.getUserDailyWorkTime(companyId, startDate, endDate, allVisibleDeptIdList, null);
                 //部门负责人看自己部门相关的
                 allRangeUserList = userMapper.selectList(new QueryWrapper<User>().in("department_id", allVisibleDeptIdList).eq("report_status",0));
@@ -3793,8 +3859,6 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         //获取企业微信同步数据
         List<Map> userCorpwxTimeMapList = userCorpwxTimeMapper.selectByAsk(companyId,startDate,endDate);
 
-        String lastUserId = null;
-        UserMonthWork lastUserData = null;
         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
         LocalDate localStart = LocalDate.parse(startDate, dtf);
@@ -3818,6 +3882,9 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         List<String> cpwxIds = new ArrayList<>();
         //获取请假数据
         List<LeaveSheet> leaveSheetList = leaveSheetMapper.selectList(new QueryWrapper<LeaveSheet>().eq("company_id", user.getCompanyId()));
+        //已驳回的数据
+        List<Report> deniedReportList = reportMapper.selectList(new QueryWrapper<Report>().eq("company_id", companyId).eq("state", 2).between("create_date", startDate, endDate));
+        List<Report> waitingSubmitReportList = reportMapper.selectList(new QueryWrapper<Report>().eq("company_id", companyId).eq("state", 3).between("create_date", startDate, endDate));
         //按人员过滤
         for (User curUser: allRangeUserList){
                 for (int i=0;i<=cnt; i++) {
@@ -3845,10 +3912,19 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                         cpwxIds.add(curUser.getCorpwxUserid());
                         List<Map> userCorpwxListOn = userCorpwxTimeMapList.stream().filter(mapList -> mapList.get("create_date").toString().equals(dateStr)
                                 && mapList.get("corpwx_userid").equals(curUser.getCorpwxUserid())).collect(Collectors.toList());
+                        noRecord.createDate = dtf.format(date);
+                        //默认为未填写
+                        noRecord.status = "未填写";
                         if(!userCorpwxListOn.isEmpty()){
-                                noRecord.createDate = dtf.format(date)+"/请假";
+                            noRecord.status = "请假";
                         }else{
-                            noRecord.createDate = dtf.format(date);
+                            //检查是否是驳回或者待提交的
+                            if (deniedReportList.stream().anyMatch(deny->deny.getCreatorId().equals(curUser.getId()) && date.isEqual(deny.getCreateDate()))) {
+                                noRecord.status = "已驳回";
+                            }
+                            if (waitingSubmitReportList.stream().anyMatch(deny->deny.getCreatorId().equals(curUser.getId()) && date.isEqual(deny.getCreateDate()))) {
+                                noRecord.status = "待提交";
+                            }
                         }
 
                         if (curUser.getDepartmentId() != null && curUser.getDepartmentId() != 0) {
@@ -3861,8 +3937,6 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                         List<LeaveSheet> leaveSheets = leaveSheetList.stream().filter(ls -> ls.getOwnerId().equals(curUser.getId())
                                 &&(ls.getStartDate().isAfter(LocalDate.parse(startDate))||ls.getStartDate().isEqual(LocalDate.parse(startDate)))
                                 &&(ls.getEndDate().isBefore(LocalDate.parse(endDate))||ls.getEndDate().isEqual(LocalDate.parse(endDate)))).collect(Collectors.toList());
-                        System.out.println(date);
-                        System.out.println(leaveSheets);
                         noReportDataList.add(noRecord);
                         for (LeaveSheet leaveSheet : leaveSheets) {
                             if(!(date.isBefore(leaveSheet.getStartDate())||date.isAfter(leaveSheet.getEndDate()))){
@@ -3924,7 +3998,8 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         List<String> titleList = new ArrayList<>();
         titleList.add("部门");
         titleList.add("姓名");
-        titleList.add("未填日期");
+        titleList.add("日期");
+        titleList.add("状态");
         if (timeType.getSyncCorpwxTime() == 1) {
             //企业微信同步考勤打卡的,需要加上这一列
             titleList.add("考勤打卡");
@@ -3937,10 +4012,10 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             line.add(dataItem.department);
             line.add(dataItem.name);
             line.add(dataItem.createDate);
+            line.add(dataItem.status);
             if (timeType.getSyncCorpwxTime() == 1) {
                 line.add(dataItem.cardTime);
             }
-
             dataList.add(line);
         }
         //生成excel文件导出

+ 10 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java

@@ -180,6 +180,10 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
             //检测密码正确时
             UserVO userVO = new UserVO().setCompanyName(company.getCompanyName());
             userVO.setCompany(company);
+            WxCorpInfo info = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", company.getId()));
+            if (info != null) {
+                userVO.setUserNameNeedTranslate(info.getSaasSyncContact());
+            }
             BeanUtils.copyProperties(userList.get(0), userVO);
             if (userVO.getRoleId() == null || userVO.getRoleId() == 0) {
                 httpRespMsg.setError(MessageUtils.message("user.noRole"));
@@ -1787,6 +1791,12 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
             }
         }
 
+        WxCorpInfo info = wxCorpInfoMapper.selectOne(new QueryWrapper<WxCorpInfo>().eq("company_id", company.getId()));
+        if (info != null) {
+            user.setUserNameNeedTranslate(info.getSaasSyncContact());
+        }
+
+
         UserVO userVO = new UserVO().setCompanyName(company.getCompanyName());
         userVO.setCompany(company);
         BeanUtils.copyProperties(user, userVO);

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

@@ -140,6 +140,7 @@ suitSecret: 1ApL6LIB4Z0v7wBrKTUNmJrerRWV3gEQWBlYOm8Kijw
 corpId: wwf11426cf618e1703
 token: Mhi7ehNX61UN4MB7PHnC
 encodingAesKey: PHVMkME1XMrImmGJZ4OZJxSysI7hFEhtDDUQrlHAfIS
+providerSecret: wlwGIUXskWKsNtCfKUsAfJ6ueba55rZnqZvcC-rUM6nQ-LnRDyYgISQ2BO-UlL_A
 
 configEnv:
   isDev: true

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

@@ -37,7 +37,7 @@
 
     <!--根据人员获取成本-->
     <select id="getCostByUser" resultType="java.util.Map">
-        SELECT a.id as id, a.name AS user, c.project_name AS project, SUM(b.working_time) AS time, SUM(b.cost) AS
+        SELECT a.id as id, a.name AS user, a.job_number as jobNumber, c.project_name AS project, SUM(b.working_time) AS time, SUM(b.cost) AS
         money
         FROM user AS a
         LEFT JOIN report AS b ON a.id = b.creator_id
@@ -66,7 +66,7 @@
 
     <!-- 根据人员获取自定义的日报数值 -->
     <select id="getCustomDataByUser" resultType="java.util.Map">
-        SELECT a.id as id, a.name AS user, c.project_name AS project, IFNULL(SUM(b.custom_data),0) AS cost
+        SELECT a.id as id, a.name AS user, a.job_number as jobNumber,c.project_name AS project, IFNULL(SUM(b.custom_data),0) AS cost
         FROM user AS a
         LEFT JOIN report AS b ON a.id = b.creator_id
         LEFT JOIN project AS c ON b.project_id = c.id

+ 21 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportLogDetailMapper.xml

@@ -0,0 +1,21 @@
+<?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.ReportLogDetailMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.ReportLogDetail">
+        <id column="id" property="id" />
+        <result column="report_id" property="reportId" />
+        <result column="msg" property="msg" />
+        <result column="operator_id" property="operatorId" />
+        <result column="operate_date" property="operateDate" />
+        <result column="company_id" property="companyId" />
+        <result column="work_date" property="workDate" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, report_id, msg, operator_id, operate_date, company_id, work_date
+    </sql>
+
+</mapper>

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

@@ -19,11 +19,12 @@
         <result column="agentid" property="agentid" />
         <result column="contact_secret" property="contactSecret" />
         <result column="contact_server" property="contactServer" />
+        <result column="saas_sync_contact" property="saasSyncContact" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        corpid, corp_name, corp_full_name, corp_scale, corp_industry, corp_sub_industry, location, access_token, expire_time, permanent_code, auth_username, company_id, agentid, contact_secret, contact_server
+        corpid, corp_name, corp_full_name, corp_scale, corp_industry, corp_sub_industry, location, access_token, expire_time, permanent_code, auth_username, company_id, agentid, contact_secret, contact_server, saas_sync_contact
     </sql>
 
 </mapper>

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

@@ -1166,11 +1166,17 @@
             </el-table-column>
             <el-table-column
               min-width="200"
-              :label="$t('other.missingDate')"
+              :label="$t('weekDay.date')"
               align="center"
               prop="createDate"
             >
             </el-table-column>
+            <el-table-column
+              min-width="200"
+              :label="$t('state.states')"
+              align="center"
+              prop="status"
+            />
             <el-table-column
               min-width="200"
               :label="$t('other.attendanceData')"