浏览代码

统计部门

Reiskuchen 5 年之前
父节点
当前提交
d6e7b04001

+ 17 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/DepartmentController.java

@@ -70,5 +70,22 @@ public class DepartmentController {
     public HttpRespMsg deleteDepartment(@RequestParam Integer id, HttpServletRequest request) {
         return departmentService.deleteDepartment(id, request);
     }
+
+    /**
+     * 获取顶级项目及其统计
+     */
+    @RequestMapping("/departmentStatistic")
+    public HttpRespMsg getDepartmentStatistics(HttpServletRequest request) {
+        return departmentService.getDepartmentStatistics(request);
+    }
+
+    /**
+     * 获取某个部门下人员的统计
+     * departmentId 要查询的项目
+     */
+    @RequestMapping("/userStatistic")
+    public HttpRespMsg getUserStatistics(Integer departmentId, HttpServletRequest request) {
+        return departmentService.getUserStatistics(departmentId, request);
+    }
 }
 

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

@@ -44,12 +44,6 @@ public class Department extends Model<Department> {
     @TableField(value = "superior_id", updateStrategy = FieldStrategy.IGNORED)
     private Integer superiorId;
 
-    /**
-     * 顶级部门id
-     */
-    @TableField("master_id")
-    private Integer masterId;
-
     /**
      * 所属公司id
      */

+ 14 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/vo/DepartmentMasterVO.java

@@ -0,0 +1,14 @@
+package com.management.platform.entity.vo;
+
+import com.management.platform.entity.Department;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class DepartmentMasterVO extends Department {
+    private Double costTime;
+    private Double costMoney;
+}

+ 6 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/DepartmentMapper.java

@@ -1,7 +1,11 @@
 package com.management.platform.mapper;
 
-import com.management.platform.entity.Department;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.management.platform.entity.Department;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
 
 /**
  * <p>
@@ -12,5 +16,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @since 2020-02-11
  */
 public interface DepartmentMapper extends BaseMapper<Department> {
-
+    Map<String, Object> getCostByDepartment(@Param("departmentIds") List departmentIds);
 }

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

@@ -24,4 +24,8 @@ public interface DepartmentService extends IService<Department> {
     HttpRespMsg getNormalDepartmentList(HttpServletRequest request);
 
     HttpRespMsg getDepartmentList(HttpServletRequest request);
+
+    HttpRespMsg getDepartmentStatistics(HttpServletRequest request);
+
+    HttpRespMsg getUserStatistics(Integer departmentId, HttpServletRequest request);
 }

+ 65 - 7
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DepartmentServiceImpl.java

@@ -4,17 +4,20 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.management.platform.entity.Department;
 import com.management.platform.entity.User;
+import com.management.platform.entity.vo.DepartmentMasterVO;
 import com.management.platform.entity.vo.DepartmentVO;
 import com.management.platform.mapper.DepartmentMapper;
 import com.management.platform.mapper.UserMapper;
 import com.management.platform.service.DepartmentService;
 import com.management.platform.util.HttpRespMsg;
+import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 import java.util.Stack;
 
 /**
@@ -47,14 +50,9 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
                         .setDepartmentName(departmentName)
                         .setSuperiorId(superiorId)
                         .setCompanyId(companyId);
-                departmentMapper.insert(department);
-                //更新最顶级部门
-                Integer masterId = department.getDepartmentId();
-                while (superiorId != null) {
-                    masterId = superiorId;
-                    superiorId = departmentMapper.selectById(masterId).getSuperiorId();
+                if (departmentMapper.insert(department) == 0) {
+                    httpRespMsg.setError("修改失败");
                 }
-                departmentMapper.updateById(department.setMasterId(masterId));
             } else {
                 httpRespMsg.setError("无所选父级部门");
             }
@@ -250,4 +248,64 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
                 .setParentId(department.getSuperiorId());
     }
 
+    //获取某个项目下的统计
+    @Override
+    public HttpRespMsg getDepartmentStatistics(HttpServletRequest request) {
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        try {
+            Integer companyId = userMapper.selectById(request.getHeader("Token")).getCompanyId();
+            List<Department> masterList = departmentMapper.selectList(new QueryWrapper<Department>()
+                    .eq("company_id", companyId).isNull("superior_id"));
+            List<DepartmentMasterVO> list = new ArrayList<>();
+            for (Department department : masterList) {
+                DepartmentMasterVO departmentMasterVO = new DepartmentMasterVO();
+                BeanUtils.copyProperties(department, departmentMasterVO);
+                Map<String, Object> map = departmentMapper.getCostByDepartment(
+                        getBranchDepartment(department.getDepartmentId(), companyId));
+                departmentMasterVO.setCostTime(map == null ? new Double(0) : (Double) map.get("time"));
+                departmentMasterVO.setCostMoney(map == null ? new Double(0) : (Double) map.get("money"));
+                list.add(departmentMasterVO);
+            }
+            httpRespMsg.data = list;
+        } catch (NullPointerException e) {
+            e.printStackTrace();
+            httpRespMsg.setError("验证失败");
+            return httpRespMsg;
+        }
+        return httpRespMsg;
+    }
+
+    @Override
+    public HttpRespMsg getUserStatistics(Integer departmentId, HttpServletRequest request) {
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        try {
+//            Integer companyId = userMapper.selectById(request.getHeader("Token")).getCompanyId();
+            Integer companyId = 6;
+        } catch (NullPointerException e) {
+            httpRespMsg.setError("验证失败");
+            return httpRespMsg;
+        }
+        return httpRespMsg;
+    }
+
+    //获取某个部门所有子部门id
+    private List<Integer> getBranchDepartment(Integer departmentId, Integer companyId) {
+        List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>()
+                .eq("company_id", companyId));
+        List<Integer> list = new ArrayList<>();
+        list.add(departmentId);
+        for (int i = 0; i < list.size(); i++) {
+            Integer targetId = list.get(i);
+            for (int j = 0; j < departmentList.size(); j++) {
+                Integer superiorId = departmentList.get(j).getSuperiorId();
+                if (superiorId == null) {
+                    departmentList.remove(j--);
+                } else if (superiorId.equals(targetId)) {
+                    list.add(departmentList.get(j).getDepartmentId());
+                    departmentList.remove(j--);
+                }
+            }
+        }
+        return list;
+    }
 }

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

@@ -4,16 +4,26 @@
 
     <!-- 通用查询映射结果 -->
     <resultMap id="BaseResultMap" type="com.management.platform.entity.Department">
-        <id column="department_id" property="departmentId" />
-        <result column="department_name" property="departmentName" />
-        <result column="superior_id" property="superiorId" />
-        <result column="master_id" property="masterId" />
-        <result column="company_id" property="companyId" />
+        <id column="department_id" property="departmentId"/>
+        <result column="department_name" property="departmentName"/>
+        <result column="superior_id" property="superiorId"/>
+        <result column="company_id" property="companyId"/>
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        department_id, department_name, superior_id, master_id, company_id
+        department_id, department_name, superior_id, company_id
     </sql>
 
+    <!--范围分页获取人员-->
+    <select id="getCostByDepartment" resultType="java.util.Map">
+        SELECT SUM(b.working_time) AS time, SUM(b.working_time * a.cost) AS money
+        FROM user AS a
+        LEFT JOIN report AS b ON a.id = b.creator_id
+        WHERE a.department_id IN
+        <foreach collection="departmentIds" item="departmentId" index="index" open="(" close=")" separator=",">
+            #{departmentId}
+        </foreach>
+    </select>
+
 </mapper>

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

@@ -14,7 +14,7 @@
         id, user_id, project_id
     </sql>
 
-    <!--获取查询者所在公司每个项目的工时成本-->
+    <!--根据项目id获取所有参与者id和name-->
     <select id="getParticipator" resultType="java.util.Map">
         SELECT a.user_id AS id, b.name
         FROM participation AS a