Selaa lähdekoodia

部门主要负责人要有权限看负责部门的出差记录并进行关联

seyason 2 vuotta sitten
vanhempi
commit
710eca262a
15 muutettua tiedostoa jossa 222 lisäystä ja 143 poistoa
  1. 8 10
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/BusinessTripController.java
  2. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskController.java
  3. 2 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserController.java
  4. 64 65
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/WeiXinCorpController.java
  5. 15 9
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/User.java
  6. 3 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/DepartmentService.java
  7. 2 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/UserService.java
  8. 40 5
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/BusinessTripServiceImpl.java
  9. 13 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DepartmentServiceImpl.java
  10. 17 5
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java
  11. 8 4
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/UserMapper.xml
  12. 5 8
      fhKeeper/formulahousekeeper/timesheet/src/views/awayOffice/awayOffice.vue
  13. 6 7
      fhKeeper/formulahousekeeper/timesheet/src/views/project/info.vue
  14. 23 24
      fhKeeper/formulahousekeeper/timesheet/src/views/project/list.vue
  15. 15 2
      fhKeeper/formulahousekeeper/timesheet/src/views/team/index.vue

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

@@ -1,13 +1,17 @@
 package com.management.platform.controller;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.management.platform.entity.BusinessTrip;
+import com.management.platform.entity.Department;
 import com.management.platform.entity.LeaveSheet;
 import com.management.platform.entity.User;
 import com.management.platform.entity.vo.SysRichFunction;
+import com.management.platform.mapper.DepartmentMapper;
 import com.management.platform.mapper.SysFunctionMapper;
 import com.management.platform.mapper.UserMapper;
 import com.management.platform.service.BusinessTripService;
+import com.management.platform.service.DepartmentService;
 import com.management.platform.service.LeaveSheetService;
 import com.management.platform.util.HttpRespMsg;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -17,7 +21,9 @@ import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -37,8 +43,8 @@ public class BusinessTripController {
     BusinessTripService businessTripService;
     @Resource
     private HttpServletRequest request;
-    @Resource
-    SysFunctionMapper sysFunctionMapper;
+
+
 
     @RequestMapping("/add")
     public HttpRespMsg add(BusinessTrip sheet) {
@@ -59,14 +65,6 @@ public class BusinessTripController {
 
     @RequestMapping("/list")
     public HttpRespMsg list(BusinessTrip sheet, @RequestParam Integer pageIndex, @RequestParam Integer pageSize) {
-        String token = request.getHeader("TOKEN");
-        User user = userMapper.selectById(token);
-        List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看全部出差");
-        if (functionList.size() == 0) {
-            //普通员工只能看自己的
-            sheet.setOwnerId(user.getId());
-        }
-        sheet.setCompanyId(user.getCompanyId());
         return businessTripService.queryList(sheet, pageIndex, pageSize);
     }
 

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

@@ -608,7 +608,7 @@ public class TaskController {
         String userId = request.getHeader("Token");
 
         QueryWrapper<Task> queryWrapper = new QueryWrapper<Task>().eq("project_id", projectId).eq("task_type", 1);
-        queryWrapper.orderByAsc("id");
+        queryWrapper.orderByAsc("end_date");
         msg.data = taskService.list(queryWrapper);
         return msg;
     }

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

@@ -136,9 +136,9 @@ public class UserController {
                                   @RequestParam Integer roleId, Double monthCost, Double cost,
                                   Integer departmentId, Integer salaryType, String costApplyDate,
                                     String position, String certJson,String inductionDate,String superiorId,
-                                    String plate1,String plate2,String plate3,String plate4,String plate5) {
+                                    String plate1,String plate2,String plate3,String plate4,String plate5, String jobNumber) {
         return userService.insertUser(id, name, phone, roleId, monthCost, cost, departmentId, salaryType, costApplyDate,
-                    position, certJson, request,inductionDate,superiorId,plate1, plate2, plate3,plate4,plate5);
+                    position, certJson, request,inductionDate,superiorId,plate1, plate2, plate3,plate4,plate5, jobNumber);
     }
 
     /**

+ 64 - 65
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/WeiXinCorpController.java

@@ -391,8 +391,10 @@ public class WeiXinCorpController {
                                     .setRoleId(defaultRole.getId())
                                     .setRoleName(defaultRole.getRolename())
                                     .setName(userObj.getString("name"))
+                                    .setPhone(userObj.getString("mobile"))
                                     .setPassword(MD5Util.getPassword("000000"))
                                     .setCorpwxUserid(corpWxUserId)
+                                    .setJobNumber(userObj.getString("userid"))
                                     .setColor(ColorUtil.randomColor())
                                     .setCompanyId(companyId);
                             if (sysDept != null) {
@@ -1472,12 +1474,12 @@ public class WeiXinCorpController {
             if (unAssignedUserList.size() > 0) {
                 remoteUnAUserList = remoteGetDeptUserDetail(wxCorpInfo, corpContactAccessToken, companyRootDeptId);
                 //做id转化
-                List<String> userIds = new ArrayList<>();
+                List<String> corpUserIds = new ArrayList<>();
                 for (int i=0;i<remoteUnAUserList.size(); i++) {
-                    userIds.add(remoteUnAUserList.getJSONObject(i).getString("userid"));
+                    corpUserIds.add(remoteUnAUserList.getJSONObject(i).getString("userid"));
                 }
                 try {
-                    JSONArray array = convertUserIdToOpenUserId(curCorpAccessToken, userIds);
+                    JSONArray array = convertUserIdToOpenUserId(curCorpAccessToken, corpUserIds);
                     for (int i=0;i<array.size(); i++) {
                         JSONObject jsonObject = array.getJSONObject(i);
                         String userid = jsonObject.getString("userid");
@@ -1486,7 +1488,7 @@ public class WeiXinCorpController {
                         for (int m=0;m<remoteUnAUserList.size(); m++) {
                             JSONObject remoteUser = remoteUnAUserList.getJSONObject(m);
                             if (remoteUser.getString("userid").equals(userid)) {
-                                remoteUser.put("userid", openUserid);
+                                remoteUser.put("openUserid", openUserid);
                                 break;
                             }
                         }
@@ -1498,7 +1500,7 @@ public class WeiXinCorpController {
                 }
             }
 
-
+            List<User> updateUserList = new ArrayList<>();
             for (int m=0;m<unAssignedUserList.size(); m++) {
                 JSONObject userJson = unAssignedUserList.getJSONObject(m);
                 String curUserid = userJson.getString("userid");
@@ -1523,36 +1525,44 @@ public class WeiXinCorpController {
                 if (remoteUnAUserList != null) {
                     for (int i=0;i<remoteUnAUserList.size(); i++) {
                         JSONObject remoteUserJson = remoteUnAUserList.getJSONObject(i);
-                        if (remoteUserJson.getString("userid").equals(curUserid)) {
+                        if (remoteUserJson.getString("openUserid").equals(curUserid)) {
                             user.setName(remoteUserJson.getString("name"));
+                            user.setJobNumber(remoteUserJson.getString("userid"));
+                            user.setPhone(remoteUserJson.getString("mobile"));
                             break;
                         }
                     }
                 }
                 //检查用户是否已经存在
-                User oldUser = userMapper.selectOne(new QueryWrapper<User>().select("id, name, role_name").eq("corpwx_userid", curUserid).eq("company_id", companyId));
-
+                User oldUser = userMapper.selectOne(new QueryWrapper<User>().select("id, name, job_number, phone").eq("corpwx_userid", curUserid).eq("company_id", companyId));
                 if (oldUser == null) {
-                    //先检查姓名+手机号是否存在,如果存在,则更新corpwxId
-                    User sameNameUser = userMapper.selectOne(new QueryWrapper<User>().eq("name", user.getName()).eq("phone", user.getPhone()).eq("company_id", companyId).isNull("corpwx_userid").last("limit 1"));
-                    if (sameNameUser != null) {
-                        User upUser = new User();
-                        upUser.setId(sameNameUser.getId());
-                        upUser.setCorpwxUserid(user.getCorpwxUserid());
-                        userMapper.updateById(upUser);
-                    } else {
-                        userMapper.insert(user);
-                    }
+                    updateUserList.add(user);
                 } else {
-                    if (oldUser.getRoleName().equals("超级管理员") && !oldUser.getName().equals(user.getName())) {
-                        //姓名不一致,需要更新
-                        System.out.println("===更新超管姓名==="+user.getName());
-                        user.setId(oldUser.getId());
-                        oldUser.setName(user.getName());
-                        userMapper.updateById(oldUser);
+                    boolean hasChange = false;
+                    User updateUser = new User();
+                    updateUser.setId(oldUser.getId());
+                    //工号或者手机号更新了
+                    if (user.getJobNumber() != null && !user.getJobNumber().equals(oldUser.getJobNumber())) {
+                        hasChange = true;
+                        updateUser.setJobNumber(user.getJobNumber());
+                    }
+                    if (user.getPhone() != null && !user.getPhone().equals(oldUser.getPhone())) {
+                        hasChange = true;
+                        updateUser.setPhone(user.getPhone());
+                    }
+                    if (user.getName() != null && !user.getName().equals(oldUser.getName())) {
+                        hasChange = true;
+                        updateUser.setName(user.getName());
+                    }
+                    if (hasChange) {
+                        //需要更新
+                        updateUserList.add(updateUser);
                     }
                 }
             }
+            if (updateUserList.size() > 0) {
+                userService.saveOrUpdateBatch(updateUserList);
+            }
         }
 
         //获取公司全部部门,不需要递归
@@ -1587,15 +1597,6 @@ public class WeiXinCorpController {
                 if (deptId != 1) {
                     //忽略根,根是公司名称
                     departmentMapper.insert(department);
-                    //按名称比对
-//                    oldDept = departmentMapper.selectOne(new QueryWrapper<Department>().eq("company_id", companyId).eq("department_name", department.getDepartmentName()).last("limit 1"));
-//                    if (oldDept == null) {
-//                        departmentMapper.insert(department);
-//                    } else {
-//                        //按照企业微信部门id进行更新
-//                        oldDept.setCorpwxDeptid(department.getCorpwxDeptid());
-//                        departmentMapper.updateById(oldDept);
-//                    }
                 }
             } else {
                 //比较是否有更新
@@ -1619,7 +1620,6 @@ public class WeiXinCorpController {
                 department = oldDept;
             }
 
-//            sysDeptList.add(department);
             deptObjJSONArray.getJSONObject(i).put("sys_dept_id", department.getDepartmentId());
             Integer departmentId = department.getDepartmentId();
             if (syncMembs == 1) {
@@ -1628,12 +1628,12 @@ public class WeiXinCorpController {
                 if (userList.size() > 0) {
                     remoteDeptUserList = remoteGetDeptUserDetail(wxCorpInfo, corpContactAccessToken, deptId);
                     //做id转化
-                    List<String> userIds = new ArrayList<>();
+                    List<String> corpUserIds = new ArrayList<>();
                     for (int p=0;p<remoteDeptUserList.size(); p++) {
-                        userIds.add(remoteDeptUserList.getJSONObject(p).getString("userid"));
+                        corpUserIds.add(remoteDeptUserList.getJSONObject(p).getString("userid"));
                     }
                     try {
-                        JSONArray array = convertUserIdToOpenUserId(curCorpAccessToken, userIds);
+                        JSONArray array = convertUserIdToOpenUserId(curCorpAccessToken, corpUserIds);
                         for (int w=0;w<array.size(); w++) {
                             JSONObject jsonObject = array.getJSONObject(w);
                             String userid = jsonObject.getString("userid");
@@ -1642,7 +1642,7 @@ public class WeiXinCorpController {
                             for (int m=0;m<remoteDeptUserList.size(); m++) {
                                 JSONObject remoteUser = remoteDeptUserList.getJSONObject(m);
                                 if (remoteUser.getString("userid").equals(userid)) {
-                                    remoteUser.put("userid", openUserid);
+                                    remoteUser.put("openUserid", openUserid);
                                     break;
                                 }
                             }
@@ -1653,7 +1653,7 @@ public class WeiXinCorpController {
                         return msg;
                     }
                 }
-
+                List<User> updateUserList = new ArrayList<>();
                 for (int m=0;m<userList.size(); m++) {
                     JSONObject userJson = userList.getJSONObject(m);
                     String curUserid = userJson.getString("userid");
@@ -1678,47 +1678,46 @@ public class WeiXinCorpController {
                     if (remoteDeptUserList != null) {
                         for (int t=0;t<remoteDeptUserList.size(); t++) {
                             JSONObject remoteUserJson = remoteDeptUserList.getJSONObject(t);
-                            if (remoteUserJson.getString("userid").equals(curUserid)) {
+                            if (remoteUserJson.getString("openUserid").equals(curUserid)) {
                                 //匹配到了。设置姓名
                                 System.out.println("远程的用户匹配到了:"+remoteUserJson.getString("name"));
                                 user.setName(remoteUserJson.getString("name"));
+                                user.setJobNumber(remoteUserJson.getString("userid"));
+                                user.setPhone(remoteUserJson.getString("mobile"));
                                 break;
                             }
                         }
                     }
                     //检查用户是否已经存在
-                    User oldUser = userMapper.selectOne(new QueryWrapper<User>().eq("corpwx_userid", curUserid).eq("company_id", companyId));
+                    User oldUser = userMapper.selectOne(new QueryWrapper<User>().select("id, name, job_number, phone").eq("corpwx_userid", curUserid).eq("company_id", companyId));
                     if (oldUser == null) {
-                        //先检查姓名是否存在,如果存在,则更新corpwxId
-                        User sameNameUser = userMapper.selectOne(new QueryWrapper<User>().eq("name", user.getName()).eq("phone", user.getPhone()).eq("company_id", companyId).isNull("corpwx_userid").last("limit 1"));
-                        if (sameNameUser != null) {
-                            User upUser = new User();
-                            upUser.setId(sameNameUser.getId());
-                            upUser.setCorpwxUserid(user.getCorpwxUserid());
-                            userMapper.updateById(upUser);
-                        } else {
-                            //姓名也不存在,则插入新记录
-                            userMapper.insert(user);
-                        }
+                        updateUserList.add(user);
                     } else {
-                        boolean shouldUpdate = false;
-                        if (oldUser.getRoleName().equals("超级管理员") && !oldUser.getName().equals(user.getName())) {
-                            //姓名不一致,需要更新
-                            System.out.println("===更新超管姓名==="+user.getName());
-                            user.setId(oldUser.getId());
-                            oldUser.setName(user.getName());
-                            shouldUpdate = true;
+                        boolean hasChange = false;
+                        User updateUser = new User();
+                        updateUser.setId(oldUser.getId());
+                        //工号或者手机号更新了
+                        if (user.getJobNumber() != null && !user.getJobNumber().equals(oldUser.getJobNumber())) {
+                            hasChange = true;
+                            updateUser.setJobNumber(user.getJobNumber());
                         }
-                        if (!oldUser.getDepartmentId().equals(user.getDepartmentId())) {
-                            oldUser.setDepartmentId(user.getDepartmentId());
-                            shouldUpdate = true;
+                        if (user.getPhone() != null && !user.getPhone().equals(oldUser.getPhone())) {
+                            hasChange = true;
+                            updateUser.setPhone(user.getPhone());
                         }
-                        if (shouldUpdate) {
-                            userMapper.updateById(oldUser);
+                        if (user.getName() != null && !user.getName().equals(oldUser.getName())) {
+                            hasChange = true;
+                            updateUser.setName(user.getName());
+                        }
+                        if (hasChange) {
+                            //需要更新
+                            updateUserList.add(updateUser);
                         }
-
                     }
                 }
+                if (updateUserList.size() > 0) {
+                    userService.saveOrUpdateBatch(updateUserList);
+                }
             }
         }
 

+ 15 - 9
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/User.java

@@ -1,27 +1,27 @@
 package com.management.platform.entity;
 
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
+import java.math.BigDecimal;
 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 java.util.List;
+
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 import org.springframework.format.annotation.DateTimeFormat;
 
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.util.List;
-
 /**
  * <p>
  * 
  * </p>
  *
  * @author Seyason
- * @since 2022-06-14
+ * @since 2022-08-09
  */
 @Data
 @EqualsAndHashCode(callSuper = false)
@@ -220,6 +220,12 @@ public class User extends Model<User> {
     @TableField(exist = false)
     private double totalHours;
 
+    /**
+     * 员工工号,公司内唯一
+     */
+    @TableField("job_number")
+    private String jobNumber;
+
     @TableField(exist = false)
     private List<UserCert> certList;
 

+ 3 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/DepartmentService.java

@@ -5,6 +5,7 @@ import com.management.platform.entity.Department;
 import com.management.platform.util.HttpRespMsg;
 
 import javax.servlet.http.HttpServletRequest;
+import java.util.List;
 
 /**
  * <p>
@@ -40,4 +41,6 @@ public interface DepartmentService extends IService<Department> {
     HttpRespMsg exportDeptStatistic(String startDate, String endDate, HttpServletRequest request);
 
     HttpRespMsg getDeptCustomDataStatistic(String startDate, String endDate, Integer departmentId, HttpServletRequest request);
+
+    public List<Integer> getDeptIncludeSubDeptIds(Integer departmentId, List<Department> allDeptList);
 }

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

@@ -33,7 +33,8 @@ public interface UserService extends IService<User> {
 
     HttpRespMsg insertUser(String id, String name, String phone, Integer roleId, Double monthCost, Double cost, Integer departmentId,
                            Integer salaryType, String costApplyDate, String position, String certJson,
-                           HttpServletRequest request,String inductionDate, String superiorId,String plate1,String plate2,String plate3,String plate4,String plate5);
+                           HttpServletRequest request,String inductionDate, String superiorId,String plate1,
+                           String plate2,String plate3,String plate4,String plate5, String jobNumber);
 
     HttpRespMsg importUser(MultipartFile multipartFile, HttpServletRequest request);
 

+ 40 - 5
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/BusinessTripServiceImpl.java

@@ -4,19 +4,18 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.management.platform.entity.*;
+import com.management.platform.entity.vo.SysRichFunction;
 import com.management.platform.mapper.*;
 import com.management.platform.service.BusinessTripService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.management.platform.service.DepartmentService;
 import com.management.platform.util.HttpRespMsg;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -41,7 +40,12 @@ public class BusinessTripServiceImpl extends ServiceImpl<BusinessTripMapper, Bus
     private HttpServletRequest request;
     @Resource
     private ProjectMapper projectMapper;
-
+    @Resource
+    SysFunctionMapper sysFunctionMapper;
+    @Resource
+    DepartmentMapper departmentMapper;
+    @Resource
+    DepartmentService departmentService;
 
     @Override
     public HttpRespMsg modifyProject(BusinessTrip sheet) {
@@ -90,8 +94,39 @@ public class BusinessTripServiceImpl extends ServiceImpl<BusinessTripMapper, Bus
 
     @Override
     public HttpRespMsg queryList(BusinessTrip sheet, Integer pageIndex, Integer pageSize) {
+        String token = request.getHeader("TOKEN");
+        User user = userMapper.selectById(token);
         QueryWrapper<BusinessTrip> queryWrapper = new QueryWrapper<BusinessTrip>();
         HttpRespMsg httpRespMsg = new HttpRespMsg();
+        List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看全部出差");
+        if (functionList.size() == 0) {
+            //部门主要负责人可以看这个部门的
+            List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("manager_id", user.getId()));
+            if (departmentList.size() > 0) {
+                //先是自己的
+                List<String> userIds = new ArrayList<>();
+                userIds.add(user.getId());
+                //负责的部门的人员
+                List<Department> allDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", user.getCompanyId()));
+                List<Integer> allDeptIds = new ArrayList<>();
+                for (Department firstLevelDept : departmentList) {
+                    List<Integer> deptIncludeSubDeptIds = departmentService.getDeptIncludeSubDeptIds(firstLevelDept.getDepartmentId(), allDeptList);
+                    allDeptIds.addAll(deptIncludeSubDeptIds);
+                }
+                if (allDeptIds.size() > 0) {
+                    List<User> userList = userMapper.selectList(new QueryWrapper<User>().select("id").in("department_id", allDeptIds));
+                    List<String> collect = userList.stream().map(User::getId).collect(Collectors.toList());
+                    userIds.addAll(collect);
+                    System.out.println("可见用户size=="+userIds.size());
+                    queryWrapper.in("owner_id", userIds);
+                }
+            } else {
+                //普通员工只能看自己的
+                sheet.setOwnerId(user.getId());
+            }
+        }
+        sheet.setCompanyId(user.getCompanyId());
+
         queryWrapper.eq("company_id", sheet.getCompanyId()).orderByDesc("id");
 
         //增加状态

+ 13 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DepartmentServiceImpl.java

@@ -952,6 +952,19 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
         return httpRespMsg;
     }
 
+    @Override
+    public List<Integer> getDeptIncludeSubDeptIds(Integer departmentId, List<Department> allDeptList) {
+        List<Integer> list = new ArrayList<>();
+        list.add(departmentId);
+        //搜到子部门进行添加
+        for (Department department : allDeptList) {
+            if (departmentId.equals(department.getSuperiorId())) {
+                list.addAll(getBranchDepartment(department.getDepartmentId(), allDeptList));
+            }
+        }
+        return list;
+    }
+
 
     private void fillDeptUser(List<DepartmentVO> list, List<HashMap> userList) {
         list.forEach(l->{

+ 17 - 5
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java

@@ -674,13 +674,14 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
     @Override
     public HttpRespMsg insertUser(String targetId, String name, String phone, Integer roleId, Double monthCost, Double cost,
                                   Integer departmentId, Integer salaryType, String costApplyDate, String position, String certJson, HttpServletRequest request,String inductionDate,
-                                  String superiorId,   String plate1,String plate2,String plate3,String plate4,String plate5) {
+                                  String superiorId,   String plate1,String plate2,String plate3,String plate4,String plate5, String jobNumber) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
         try {
             User creator = userMapper.selectById(request.getHeader("Token"));
             if (name != null) name = name.trim();
             if (phone != null) phone = phone.trim();
+            if (jobNumber != null) jobNumber = jobNumber.trim();
             //处理时薪
             BigDecimal costValue = cost == null ? BigDecimal.valueOf(0) : BigDecimal.valueOf(cost);
             BigDecimal monthCostValue = (monthCost == null ? BigDecimal.valueOf(0) : BigDecimal.valueOf(monthCost));
@@ -696,6 +697,11 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                             (companyMapper.selectById(creator.getCompanyId()).getStaffCountMax())) {
                         httpRespMsg.setError("公司人员已达上限");
                     } else {
+                        //检查本公司内工号是否重复
+                        if (!StringUtils.isEmpty(jobNumber) && userMapper.selectList(new QueryWrapper<User>().eq("company_id", creator.getCompanyId()).eq("job_number", jobNumber)).size() > 0) {
+                            httpRespMsg.setError("该工号已存在");
+                            return httpRespMsg;
+                        }
                         Long id = SnowFlake.nextId();
                         User user = new User()
                                 .setId(id.toString())
@@ -720,7 +726,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                                 .setPlate2(plate2)
                                 .setPlate3(plate3)
                                 .setPlate4(plate4)
-                                .setPlate5(plate5);
+                                .setPlate5(plate5)
+                                .setJobNumber(jobNumber);
                         if(inductionDate!=null&&inductionDate!=""){
                             user.setInductionDate(LocalDate.parse(inductionDate,dtf));
                         }
@@ -747,7 +754,11 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                     httpRespMsg.setError("该电话号码已存在");
                     return httpRespMsg;
                 }
-
+                //检查本公司内工号是否重复
+                if (!StringUtils.isEmpty(jobNumber) && userMapper.selectList(new QueryWrapper<User>().eq("company_id", creator.getCompanyId()).eq("job_number", jobNumber).ne("id", targetId)).size() > 0) {
+                    httpRespMsg.setError("该工号已存在");
+                    return httpRespMsg;
+                }
                 User oldUser = userMapper.selectById(targetId);
                 boolean salaryChange = false;
 
@@ -784,7 +795,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                         .setPlate2(plate2)
                         .setPlate3(plate3)
                         .setPlate4(plate4)
-                        .setPlate5(plate5));
+                        .setPlate5(plate5)
+                        .setJobNumber(jobNumber));
                 if (salaryChange) {
                     UserSalary userSalary = UserSalary.copyFromUser(oldUser);
                     userSalaryMapper.insert(userSalary);
@@ -1769,7 +1781,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
         HttpRespMsg msg = new HttpRespMsg();
         String token = request.getHeader("TOKEN");
         User user = userMapper.selectById(token);
-        List<User> userList = userMapper.selectList(new QueryWrapper<User>().select("id, name, phone").eq("company_id", user.getCompanyId()).eq("is_active", 1));
+        List<User> userList = userMapper.selectList(new QueryWrapper<User>().select("id, name, phone, job_number").eq("company_id", user.getCompanyId()).eq("is_active", 1));
         msg.data = userList;
         return msg;
     }

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

@@ -37,6 +37,8 @@
         <result column="plate3" property="plate3" />
         <result column="plate4" property="plate4" />
         <result column="plate5" property="plate5" />
+        <result column="is_ops" property="isOps" />
+        <result column="job_number" property="jobNumber" />
     </resultMap>
     <resultMap id="BaseResultMap2" type="com.management.platform.entity.User">
         <id column="id" property="id" />
@@ -46,13 +48,14 @@
     </resultMap>
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id, name, phone, password, portrait_url, create_time, role, company_id, department_id, department_cascade, cost, month_cost, salary_type, manage_dept_id, color, is_active, wx_openid, role_id, role_name, cost_apply_date, dingding_userid, dingding_unionid, corpwx_userid, induction_date, inactive_date, position, report_status, superior_id, plate1, plate2, plate3, plate4, plate5
+        id, name, phone, password, portrait_url, create_time, role, company_id, department_id, department_cascade, cost, month_cost, salary_type, manage_dept_id, color, is_active, wx_openid, role_id, role_name, cost_apply_date, dingding_userid, dingding_unionid, corpwx_userid, induction_date, inactive_date, position, report_status, superior_id, plate1, plate2, plate3, plate4, plate5, is_ops, job_number
     </sql>
     <!--单独分页获取人员-->
     <select id="getUserByDepartment" resultType="java.util.Map">
         SELECT a.id, a.role_id as roleId, a.role_name as roleName, a.name, a.phone, a.portrait_url AS portraitUrl, a.role, a.company_id AS companyId, a.cost,
         a.department_id AS departmentId, b.department_name AS departmentName, a.department_cascade AS departmentCascade,
-        a.month_cost as monthCost, a.salary_type as salaryType, a.is_active as isActive,date_format(a.`inactive_date`, '%Y-%m-%d') AS inactiveDate, a.cost_apply_date as costApplyDate,a.plate1,a.plate2,a.plate3,a.plate4,a.plate5
+        a.month_cost as monthCost, a.salary_type as salaryType, a.is_active as isActive,date_format(a.`inactive_date`, '%Y-%m-%d') AS inactiveDate, a.cost_apply_date as costApplyDate,a.plate1,a.plate2,a.plate3,a.plate4,a.plate5,
+        a.job_number as jobNumber
         FROM user AS a
         LEFT JOIN department AS b ON a.department_id = b.department_id
         WHERE a.company_id = #{companyId}
@@ -74,7 +77,8 @@
     <select id="getUserByDepartmentList" resultType="java.util.Map">
         SELECT a.id,  a.role_id as roleId, a.role_name as roleName,  a.name, a.phone, a.portrait_url AS portraitUrl, a.role, a.company_id AS companyId, a.cost,
         a.department_id AS departmentId, b.department_name AS departmentName, a.department_cascade AS departmentCascade,
-        a.month_cost as monthCost, a.salary_type as salaryType, a.is_active as isActive,date_format(a.`inactive_date`, '%Y-%m-%d') AS inactiveDate, a.cost_apply_date as costApplyDate,a.plate1,a.plate2,a.plate3,a.plate4,a.plate5
+        a.month_cost as monthCost, a.salary_type as salaryType, a.is_active as isActive,date_format(a.`inactive_date`, '%Y-%m-%d') AS inactiveDate, a.cost_apply_date as costApplyDate,a.plate1,a.plate2,a.plate3,a.plate4,a.plate5,
+        a.job_number as jobNumber
         FROM user AS a
         LEFT JOIN department AS b ON a.department_id = b.department_id
         WHERE a.company_id = #{companyId} AND a.department_id IN
@@ -136,7 +140,7 @@
         AND a.id in (select user_id from participation where project_id = #{projectId})
     </select>
     <select id="getSimpleNameList" resultType="java.util.HashMap">
-        select id, name from user
+        select id, name, job_number as jobNumber from user
         ${ew.customSqlSegment}
     </select>
 

+ 5 - 8
fhKeeper/formulahousekeeper/timesheet/src/views/awayOffice/awayOffice.vue

@@ -186,9 +186,9 @@
                     <div><span style="color: #606266">时间段</span>
                         <el-date-picker v-model="createDate" type="daterange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期" @change="billss()" value-format="yyyy-MM-dd" placeholder="选择日期" size="small" clearable style="width:280px"></el-date-picker>
                     </div>
-                    <!-- 从顶顶同步按钮 -->
-                    <div style="margin: 0 0 0 20px">
-                        <el-button size="small" type="primary" @click="dingdingClick()">从钉钉同步</el-button>
+                    <!-- 从钉钉同步按钮,只有钉钉的用户并且有查看全部权限的管理员才有同步按钮 -->
+                    <div style="margin: 0 0 0 20px" v-if="userComLis.dingdingUserid != null && permissions.awayOfficeAll">
+                        <el-button size="small" type="primary" @click="dingdingClick()" >从钉钉同步</el-button>
                     </div>
                 </div>
         <!-- 出差列表 -->
@@ -249,8 +249,8 @@
                                 <el-button icon="el-icon-close" circle size="mini"  @click="deny(scope.row)"></el-button>
                             </div>
                             <div v-if="!isAuditList">
-                                <el-button v-if="!isAuditList && ((scope.row.status != 0 && scope.row.ownerId == user.id) || permissions.leaveAll)" icon="el-icon-delete" circle size="mini"  @click="deletes(scope.row)"></el-button>
-                                <el-button v-if="((scope.row.status != 0 && scope.row.ownerId == user.id) || permissions.leaveAll) || scope.row.status == 1" icon="el-icon-edit" circle size="mini" @click="editor(scope.row)"></el-button>
+                                <el-button v-if="!isAuditList && ((scope.row.status != 0 && scope.row.ownerId == user.id) || permissions.awayOfficeAll)" icon="el-icon-delete" circle size="mini"  @click="deletes(scope.row)"></el-button>
+                                <el-button v-if="((scope.row.status != 0 && scope.row.ownerId == user.id) || permissions.awayOfficeAll) || scope.row.status == 1" icon="el-icon-edit" circle size="mini" @click="editor(scope.row)"></el-button>
                             </div>
                         </template>
                     </el-table-column>
@@ -650,8 +650,6 @@ export default {
             displayTable: false,
             formloading: false,
             apk: 0,
-            // userdata: JSON.parse(sessionStorage.getItem("user")),
-
             permissions: JSON.parse(sessionStorage.getItem("permissions")),
             userComLis: JSON.parse(sessionStorage.getItem("user")),
             addform: {
@@ -813,7 +811,6 @@ export default {
                 let transmissionObj = {}
                 transmissionObj.userId = this.ownerIdsId
                 transmissionObj.companyId = this.userComLis.companyId
-                console.log(this.createDateList, '俺看')
                 if(this.createDateList != 'null' && this.createDateList != null) {
                     if(this.createDateList.length > 0) {
                         transmissionObj.startDate = this.createDateList[0]

+ 6 - 7
fhKeeper/formulahousekeeper/timesheet/src/views/project/info.vue

@@ -129,8 +129,8 @@
                     </div>
                 </div>
 
-                <!--项目相关领导 -->
-                <div class="box info" style="margin-top:10px;" >
+                <!--项目相关领导,弃用 -->
+                <!-- <div class="box info" style="margin-top:10px;" >
                     <div><label>相关领导<el-link v-if="user.id == project.creatorId || user.id == project.inchargerId || permissions.projectManagement" @click="showChooseLeaderTree" style="float:right;"><i class="el-icon-edit"  ></i></el-link></label>
                     
                     </div>
@@ -141,7 +141,7 @@
                         </el-col>
                     </el-row>
                     
-                </div>
+                </div> -->
 
                 <div class="box" style="margin-top:10px;">
                     <label>项目统计</label>
@@ -518,9 +518,8 @@
         </el-dialog>
 
         
-        <!-- 按部门选择相关领导 -->
-        <el-dialog title="选择相关领导"  v-if="chooseLeaderVisible" :visible.sync="chooseLeaderVisible" :close-on-click-modal="false" customClass="customWidth" width="500px">
-            <!-- <el-input style="width:100%" v-model="filterName" placeholder="请输入姓名搜索" @change="findUserInTree"></el-input> -->
+        <!-- 按部门选择相关领导,弃用 -->
+        <!-- <el-dialog title="选择相关领导"  v-if="chooseLeaderVisible" :visible.sync="chooseLeaderVisible" :close-on-click-modal="false" customClass="customWidth" width="500px">
             <div class="tree" style="height:400px">
                 <el-scrollbar style="height:100%">
                 <el-tree :data="deptMembData" show-checkbox :props="defaultProps" node-key="id"
@@ -533,7 +532,7 @@
                 <el-button  @click="chooseLeaderVisible = false" >取消</el-button>
                 <el-button type="primary" @click="chooseLeader()" >确定</el-button>
             </div>
-        </el-dialog>
+        </el-dialog> -->
     </div>
 </template>
 <style scoped>

+ 23 - 24
fhKeeper/formulahousekeeper/timesheet/src/views/project/list.vue

@@ -580,11 +580,11 @@
                            </el-table>
                        </div>
                     </el-tab-pane>
-                    <el-tab-pane label="相关领导" name="leaders" >
+                    <!-- <el-tab-pane label="相关领导" name="leaders" >
                        <div style="padding-top:10px;">
                            <el-input @focus="showChooseLeaderTree" v-model="addForm.notifyUserNames" placeholder="请选择需要接收审核通知的相关领导"></el-input>
                        </div>
-                    </el-tab-pane>
+                    </el-tab-pane> -->
                     </el-tabs>
                 </div>
             
@@ -863,9 +863,8 @@
             </div>
         </el-dialog>
 
-        <!-- 按部门选择相关领导 -->
-        <el-dialog title="选择相关领导"  v-if="chooseLeaderVisible" :visible.sync="chooseLeaderVisible" :close-on-click-modal="false" customClass="customWidth" width="500px">
-            <!-- <el-input style="width:100%" v-model="filterName" placeholder="请输入姓名搜索" @change="findUserInTree"></el-input> -->
+        <!-- 按部门选择相关领导,弃用 -->
+        <!-- <el-dialog title="选择相关领导"  v-if="chooseLeaderVisible" :visible.sync="chooseLeaderVisible" :close-on-click-modal="false" customClass="customWidth" width="500px">
             <div class="tree" style="height:400px">
                 <el-scrollbar style="height:100%">
                 <el-tree :data="deptMembData" show-checkbox :props="defaultProps" node-key="id"
@@ -878,7 +877,7 @@
                 <el-button  @click="chooseLeaderVisible = false" >取消</el-button>
                 <el-button type="primary" @click="chooseLeader()" >确定</el-button>
             </div>
-        </el-dialog>
+        </el-dialog> -->
 
         <!-- 项目专业人员的设置 -->
         <el-dialog title="设置项目专业人员"  v-if="editPpMembDialog" :visible.sync="editPpMembDialog" :close-on-click-modal="false" customClass="customWidth" width="600px">
@@ -2254,23 +2253,23 @@ a {
             },
 
             //选中相关领导
-            chooseLeader() {
-                this.chooseLeaderVisible = false;
-                var chosenList = this.$refs.chooseLeaderTree.getCheckedNodes();
-                var chosenMembList = chosenList.filter(item=>item.isUser == 1);
-                this.addForm.notifyUserNames = '';
-                this.addForm.notifyUserIds = [];
-                this.chosenLeaders = [];
-                for (var i=0;i<chosenMembList.length; i++) {
-                    this.addForm.notifyUserIds.push(chosenMembList[i].id);
-                    this.addForm.notifyUserNames += chosenMembList[i].label+',';
-                    var item = {userId:chosenMembList[i].id, userName:chosenMembList[i].label};
-                    this.chosenLeaders.push(item);
-                }
-                if (this.addForm.notifyUserNames.length > 0) {
-                    this.addForm.notifyUserNames = this.addForm.notifyUserNames.substring(0, this.addForm.notifyUserNames.length-1);
-                }
-            },
+            // chooseLeader() {
+            //     this.chooseLeaderVisible = false;
+            //     var chosenList = this.$refs.chooseLeaderTree.getCheckedNodes();
+            //     var chosenMembList = chosenList.filter(item=>item.isUser == 1);
+            //     this.addForm.notifyUserNames = '';
+            //     this.addForm.notifyUserIds = [];
+            //     this.chosenLeaders = [];
+            //     for (var i=0;i<chosenMembList.length; i++) {
+            //         this.addForm.notifyUserIds.push(chosenMembList[i].id);
+            //         this.addForm.notifyUserNames += chosenMembList[i].label+',';
+            //         var item = {userId:chosenMembList[i].id, userName:chosenMembList[i].label};
+            //         this.chosenLeaders.push(item);
+            //     }
+            //     if (this.addForm.notifyUserNames.length > 0) {
+            //         this.addForm.notifyUserNames = this.addForm.notifyUserNames.substring(0, this.addForm.notifyUserNames.length-1);
+            //     }
+            // },
 
             // 获取部门列表
             getDepartment() {
@@ -3148,7 +3147,7 @@ a {
                         
                     }
                     //获取项目的相关领导
-                    this.getProjectNotifyUserList(item.id);
+                    // this.getProjectNotifyUserList(item.id);
                     this.getProjectAutorList(item.id);
                 }
                 this.addFormVisible = true;

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

@@ -145,6 +145,7 @@
                     </template>
                 </el-table-column>
                 <el-table-column prop="name" label="姓名" ></el-table-column>
+                <el-table-column prop="jobNumber" label="工号" ></el-table-column>
                 <el-table-column prop="phone" label="手机" width="120"></el-table-column>
                 <el-table-column prop="departmentName" label="部门" ></el-table-column>
                 <el-table-column label="角色" width="100">
@@ -270,12 +271,15 @@
         <!-- 新增/编辑人员的Dialog -->
         <el-dialog :title="title" :visible.sync="dialogVisible" width="550px" >
             <el-form ref="form12" :model="insertForm" :rules="rules" label-width="80px">
-                <el-form-item label="名" prop="name">
+                <el-form-item label="名" prop="name">
                     <el-input v-model="insertForm.name" placeholder="请输入姓名" clearable></el-input>
                 </el-form-item>
                 <el-form-item label="电话" prop="phone">
                     <el-input v-model="insertForm.phone" placeholder="请输入电话号码" clearable></el-input>
                 </el-form-item>
+                <el-form-item label="工号" prop="jobNumber">
+                    <el-input v-model="insertForm.jobNumber" placeholder="请输入工号" clearable></el-input>
+                </el-form-item>
                 <el-form-item label="薪酬方式" prop="salaryType" v-if="permissions.structurePersonnel&&user.timeType.isSecretSalary==0">
                     <el-radio-group v-model="insertForm.salaryType" @change="onSalaryTypeChange">
                     <el-radio  :label="0" >固定月成本</el-radio>
@@ -354,12 +358,16 @@
         <!-- 编辑超级管理员的Dialog -->
         <el-dialog title="编辑人员" :visible.sync="dialogVisible1" width="550px" >
             <el-form ref="form1" :model="insertForm" :rules="rules" label-width="80px">
-                <el-form-item label="名字" prop="name">
+                
+                <el-form-item label="姓名" prop="name">
                     <el-input v-model="insertForm.name" placeholder="请输入姓名" clearable></el-input>
                 </el-form-item>
                 <el-form-item label="电话" prop="phone">
                     <el-input v-model="insertForm.phone" placeholder="请输入电话号码" clearable></el-input>
                 </el-form-item>
+                <el-form-item label="工号" prop="jobNumber">
+                    <el-input v-model="insertForm.jobNumber" placeholder="请输入工号" clearable></el-input>
+                </el-form-item>
                 <el-form-item label="薪酬方式" prop="salaryType" v-if="permissions.structurePersonnel">
                     <el-radio-group v-model="insertForm.salaryType" @change="onSalaryTypeChange">
                     <el-radio  :label="0" >固定月成本</el-radio>
@@ -2017,6 +2025,7 @@ export default {
                 plate3: res.data.plate3,
                 plate4: res.data.plate4,
                 plate5: res.data.plate5,
+                jobNumber: res.data.jobNumber
               };
               this.$set(this.insertForm, 'inductionDate', res.data.inductionDate)
               this.getUserCustomConfig(1);
@@ -2058,6 +2067,7 @@ export default {
           plate3: null,
           plate4: null,
           plate5: null,
+          jobNumber:null,
         };
         this.title = "新增人员";
         this.getUserCustomConfig();
@@ -2116,6 +2126,7 @@ export default {
             plate3: this.insertForm.plate3,
             plate4: this.insertForm.plate4,
             plate5: this.insertForm.plate5,
+            jobNumber: this.insertForm.jobNumber,
           };
 
           // for(let i=0;i<5;i++) {
@@ -2291,6 +2302,7 @@ export default {
               certJson: res.data.certList,
               plateMap: {},
               superiorId: res.data.superiorId,
+              jobNumber: res.data.jobNumber,
             };
           } else {
             this.$message({
@@ -2339,6 +2351,7 @@ export default {
             position: this.insertForm.position,
             certJson: this.insertForm.certJson,
             inductionDate: this.insertForm.inductionDate,
+            jobNumber: this.insertForm.jobNumber,
           };
           if (this.insertForm.departmentId != null) {
             form.departmentId =