Browse Source

增加权限:查看本部门工时

seyason 2 years ago
parent
commit
34401b74f6

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

@@ -400,6 +400,7 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
             List<Map<String, Object>> list = departmentMapper
                     .getCostByUser(null, startDate, endDate, companyId, allUserIds);
             Map<String, List<Map<String, Object>>> tempMap = new HashMap<>();
+            List<String> names = new ArrayList<>();
             BigDecimal totalCostMoney = new BigDecimal(0);
             for (Map<String, Object> map : list) {
                 if (tempMap.containsKey(map.get("user"))) {
@@ -414,6 +415,7 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
                     dataMap.put("time", time);
                     tempList.add(dataMap);
                 } else {
+                    names.add((String)map.get("user"));
                     //这个名字尚未装进数组中
                     List<Map<String, Object>> tempList = new ArrayList<>();
                     if (map.containsKey("project")) {
@@ -438,7 +440,7 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
             dataList.add(titleList);
             BigDecimal totalMoneyCost = BigDecimal.valueOf(0);
             double totalCostTime = 0;
-            for (String key : tempMap.keySet()) {
+            for (String key : names) {
                 Map<String, Object> map = new HashMap<>();
                 map.put("name", key);
                 map.put("project", tempMap.get(key));
@@ -652,14 +654,23 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
             Integer companyId = userMapper.selectById(request.getHeader("Token")).getCompanyId();
             User user = userMapper.selectById(request.getHeader("TOKEN"));
             List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看全公司工时");
+            boolean hasDeptWorktimePriv = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看本部门工时").size() > 0;
             List<Integer> deptIds = null;
             if (functionList.size() == 0) {
                 deptIds = new ArrayList<>();
                 deptIds.add(-1);
-                if (user.getManageDeptId() != 0) {
+                if (hasDeptWorktimePriv || (user.getManageDeptId() != null && user.getManageDeptId() != 0)) {
                     //有负责的部门
                     List<Department> myDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("manager_id", user.getId()));
                     List<Department> allDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", user.getCompanyId()));
+                    if (hasDeptWorktimePriv && user.getDepartmentId() != null) {
+                        Department ownerDept = departmentMapper.selectById(user.getDepartmentId());
+                        //要加上自己的部门,如果没有的话
+                        if (!myDeptList.stream().anyMatch(d->d.getDepartmentId().equals(ownerDept.getDepartmentId()))) {
+                            myDeptList.add(ownerDept);
+                        }
+                    }
+
                     for (Department dept: myDeptList) {
                         deptIds.add(dept.getDepartmentId());
                         deptIds.addAll(getBranchDepartment(dept.getDepartmentId(), allDeptList));

+ 24 - 11
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -207,9 +207,9 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     map.put("cost", total);
                     map.put("state", state);
                 }
-
-                //部门经理需要看本部门的所有人员的日报
-                if (user.getManageDeptId() != null &&  user.getManageDeptId() > 0) {
+                boolean hasDeptWorktimePriv = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看本部门工时").size() > 0;
+                //需要看本部门的所有人员的日报
+                if (hasDeptWorktimePriv || (user.getManageDeptId() != null &&  user.getManageDeptId() > 0)) {
                     //找到该部门的所有子部门
                     List<Department> allDepts = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", user.getCompanyId()));
                     //查找当前部门经理负责的部门
@@ -218,7 +218,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                         queryDeptList = allDepts.stream().filter(dp->dp.getDepartmentId().equals(deptId)).collect(Collectors.toList());
                     } else {
                         queryDeptList = allDepts.stream().filter(
-                                dp -> user.getId().equals(dp.getManagerId())).collect(Collectors.toList());
+                                dp -> user.getId().equals(dp.getManagerId()) || (hasDeptWorktimePriv && dp.getDepartmentId().equals(user.getDepartmentId()))).collect(Collectors.toList());
                     }
 
                     if (queryDeptList.size() > 0) {
@@ -1480,6 +1480,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         HttpRespMsg departmentList = departmentService.getDepartmentList(request);
         List<DepartmentVO> list = (List<DepartmentVO>) departmentList.data;
         List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(curUser.getRoleId(), "查看全公司工时");
+        boolean hasDeptWorktimePriv = sysFunctionMapper.getRoleFunctions(curUser.getRoleId(), "查看本部门工时").size() > 0;
         if (functionList.size() > 0) {
             //查看全部的
             //加上未分配的部门
@@ -1487,9 +1488,16 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             unAssignedDept.setId(0);
             unAssignedDept.setLabel("未分配");
             list.add(unAssignedDept);
-        } else if (manageDeptId != null && manageDeptId > 0) {
+        } else if (hasDeptWorktimePriv || (manageDeptId != null && manageDeptId > 0)) {
             //指定查看某个部门下的,一个人可能负责多个部门
             List<Department> allMDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("manager_id", token));
+            if (hasDeptWorktimePriv && curUser.getDepartmentId() != null) {
+                Department ownerDept = departmentMapper.selectById(curUser.getDepartmentId());
+                //要加上自己的部门,如果没有的话
+                if (!allMDeptList.stream().anyMatch(d->d.getDepartmentId().equals(ownerDept.getDepartmentId()))) {
+                    allMDeptList.add(ownerDept);
+                }
+            }
             if (allMDeptList.size() == 1) {
                 list = getSpecifiedDept(list, manageDeptId);
             } else {
@@ -1515,6 +1523,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             
             if (first.isPresent()) {
                 user.put("state", first.get().get("state"));
+                user.put("workingTime", first.get().get("workingTime"));
             }
             userMapList.add(user);
         }
@@ -2086,10 +2095,11 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         //分角色权限:管理员看全部的,部门负责人看自己部门的,个人只能看自己的。
         List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看全公司工时");
         if (functionList.size() == 0) {
+            boolean hasDeptWorktimePriv = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看本部门工时").size() > 0;
             //检查是不是部门负责人
-            if (user.getManageDeptId() != null && user.getManageDeptId() != 0) {
+            if (hasDeptWorktimePriv || (user.getManageDeptId() != null && user.getManageDeptId() != 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())).collect(Collectors.toList());
+                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));
@@ -2700,11 +2710,13 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             int rowNum = 1;
             List<HashMap<String, Object>> allReportByDate = null;
             List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看全公司工时");
+            boolean hasDeptWorktimePriv = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看本部门工时").size() > 0;
+
             if (functionList.size() == 0) {
                 //检查是否是部门负责人
-                if (user.getManageDeptId() > 0) {
+                if (hasDeptWorktimePriv || (user.getManageDeptId() != null && user.getManageDeptId() > 0)) {
                     List<Department> allDeptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", user.getCompanyId()));
-                    List<Department> deptList = allDeptList.stream().filter(dept->user.getId().equals(dept.getManagerId())).collect(Collectors.toList());
+                    List<Department> deptList = allDeptList.stream().filter(dept->user.getId().equals(dept.getManagerId())|| (hasDeptWorktimePriv && dept.getDepartmentId().equals(user.getDepartmentId()))).collect(Collectors.toList());
                     List<Department> allSubDepts = new ArrayList<>();
                     allSubDepts.addAll(deptList);
                     for (Department dept: deptList) {
@@ -3062,11 +3074,12 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         List<Map<String, Object>> list = null;
         //分角色权限:管理员看全部的,部门负责人看自己部门的,个人只能看自己的。
         List<SysRichFunction> functionList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看全公司工时");
+        boolean hasDeptWorktimePriv = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "查看本部门工时").size() > 0;
         if (functionList.size() == 0) {
             //检查是不是部门负责人
-            if (user.getManageDeptId() != null && user.getManageDeptId() != 0) {
+            if (hasDeptWorktimePriv || (user.getManageDeptId() != null && user.getManageDeptId() != 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())).collect(Collectors.toList());
+                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));

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

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

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

@@ -58,7 +58,7 @@
         <if test="startDate != null and endDate != null">
             AND b.create_date between #{startDate} and #{endDate}
         </if>
-        GROUP BY b.project_id, a.id
+        GROUP BY b.project_id, a.id order by a.department_id
     </select>
 
     <!-- 根据人员获取自定义的日报数值 -->

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

@@ -368,7 +368,7 @@
 
     <!--根据日期获取报告上传人-->
     <select id="getReportNameByDate" resultType="java.util.Map">
-        SELECT DISTINCT b.id, b.name, a.state, a.department_audit_state as departmentAuditState
+        SELECT DISTINCT b.id, b.name, a.state, a.department_audit_state as departmentAuditState, IFNULL(sum(a.working_time),0) as workingTime
         FROM report AS a
         JOIN user AS b ON a.creator_id=b.id
         left join project on project.id = a.project_id
@@ -382,6 +382,7 @@
         <if test="leaderId != null and leaderId != ''">
             AND (a.project_auditor_id = #{leaderId} or project.incharger_id = #{leaderId})
         </if>
+        group by a.creator_id
     </select>
 
     <!--根据日期,部门,指定人员获取报告上传人-->