Bladeren bron

数据拉取定时任务、逻辑补充;工时统计页添加按照项目状态

zhouyy 3 weken geleden
bovenliggende
commit
ac6583c043

+ 2 - 2
fhKeeper/formulahousekeeper/collectdata/src/main/java/com/management/collectdata/controller/DataCollectController.java

@@ -265,7 +265,7 @@ public class DataCollectController {
 //                " from mom_orderdetail " +
 //                " where status in (3,4) "
 //                +" ORDER BY MoDId OFFSET ? ROWS FETCH NEXT ? ROWS ONLY ";
-        String sqlQuery = "select mo.cbSysBarCode,SUBSTRING(mo.cbSysBarCode, 8, 15) as orderId,mo.Define24,mo.Define25 " +
+        String sqlQuery = "select mo.cbSysBarCode,SUBSTRING(mo.cbSysBarCode, 8, 15) as orderId,mo.Define24  as projectId,mo.Define25  as projectName,mo.relsdate" +
                 "     ,RIGHT(mo.cbSysBarCode,1) as line,mo.Status,cb.cDeptID,cb.cDepName,mo.MoDId " +
                 " from mom_orderdetail mo " +
                 " left join ca_batchmap cb on SUBSTRING(mo.cbSysBarCode, 8, 15) = cb.cMOCode and RIGHT(mo.cbSysBarCode,1) = cb.iMOSubSN " +
@@ -287,7 +287,7 @@ public class DataCollectController {
                     erpOrderInfo.setProjectId(resultSet.getString("projectId"));
                     erpOrderInfo.setProjectName(resultSet.getString("projectName"));
                     erpOrderInfo.setLine(resultSet.getInt("line"));
-                    erpOrderInfo.setStatus(resultSet.getInt("status"));
+                    erpOrderInfo.setStatus(resultSet.getInt("Status"));
                     erpOrderInfo.setRelsDate(resultSet.getDate("relsdate"));
                     erpOrderInfo.setDeptId(resultSet.getString("cDeptID"));
                     erpOrderInfo.setDeptName(resultSet.getString("cDepName"));

+ 5 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectController.java

@@ -274,6 +274,11 @@ public class ProjectController {
         return projectService.getTimeCost(startDate, endDate, userIds,projectId,type, request);
     }
 
+    @RequestMapping("/getTimeCostByStatus")
+    public HttpRespMsg getTimeCostByStatus(String startDate, String endDate, String userIds,Integer status,Integer type) {
+        return projectService.getTimeCostByStatus(startDate, endDate, userIds,status,type, request);
+    }
+
     /**
      * 获取查询者所在公司每个主项目的工时成本
      */

+ 5 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ProjectMapper.java

@@ -31,6 +31,11 @@ public interface ProjectMapper extends BaseMapper<Project> {
                                           @Param("deptIds")List<Integer> deptIds,@Param("filterDeptIds")List<Integer> filterDeptIds, @Param("deptRelatedProjectIds") List<Integer> deptRelatedProjectIds,
                                           @Param("projectIds") List<Integer> projectIds, @Param("inchargeUserIds") List<String> inchargeUserIds,@Param("categoryId") Integer categoryId);
 
+    List<Map<String, Object>> getTimeCostByStatus(@Param("companyId") Integer companyId, @Param("startDate") String startDate, @Param("endDate") String endDate,
+                                          @Param("status") Integer status, @Param("userIdList") List<String> userIdList,
+                                          @Param("deptIds")List<Integer> deptIds,@Param("filterDeptIds")List<Integer> filterDeptIds, @Param("deptRelatedProjectIds") List<Integer> deptRelatedProjectIds,
+                                          @Param("projectIds") List<Integer> projectIds, @Param("inchargeUserIds") List<String> inchargeUserIds,@Param("categoryId") Integer categoryId);
+
     List<Map<String, Object>> getCustomDataSum(@Param("companyId") Integer companyId, @Param("startDate") String startDate, @Param("endDate") String endDate,
                                           @Param("projectId") Integer projectId, @Param("userId") String userId);
 

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

@@ -330,4 +330,6 @@ public interface ProjectService extends IService<Project> {
     HttpRespMsg getProjectTaskPlanFTEData(Integer pageIndex, Integer pageSize, String monthStart, String monthEnd, String area, String userId, String sortProp, Integer sortOrder, Integer departmentId, HttpServletRequest request);
 
     HttpRespMsg exportTaskPlanFTEData(String monthStart, String monthEnd, String area, String userId, Integer departmentId, HttpServletRequest request);
+
+    HttpRespMsg getTimeCostByStatus(String startDate, String endDate, String userIds, Integer status, Integer type, HttpServletRequest request);
 }

+ 105 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -2684,6 +2684,111 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         return httpRespMsg;
     }
 
+    @Override
+    public HttpRespMsg getTimeCostByStatus(String startDate, String endDate, String userIds,Integer status, Integer type,HttpServletRequest request) {
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        try {
+            //根据系统配置的员工成本计算方式,按固定时薪还是固定月薪,分情况计算。
+            User targetUser = userMapper.selectById(request.getHeader("Token"));
+            Integer companyId = targetUser.getCompanyId();
+            Map<String, Object> resultMap = new HashMap<>();
+            //当前用户管理部门
+            List<Integer> deptIds=null;
+            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()));
+            List<SysRichFunction> functionAllList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看全公司");
+            List<SysRichFunction> functionDpartList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看负责部门");
+            List<SysRichFunction> functionTimeList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看工时统计");
+            List<SysRichFunction> functionCostList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看成本统计");
+            List<Integer> deptRelatedProjectIds = new ArrayList<>();
+            List<Integer> projectIds = null;
+            //针对威派格,部门的主要和其他负责人需要查看部门下人员负责的项目或者项目下的任务分组的工时
+            boolean containDeptMembInchargeProjects = targetUser.getCompanyId() == 936;
+            List<String> inchargeUserIds = null;
+            //判断查看权限
+            if(functionAllList.size()==0){
+                deptIds=new ArrayList<>();
+                deptIds.add(-1);
+
+                //获取负责的部门的相关的项目,对于这些项目是有查看全部参与人的权限的
+                List<Integer> allMyManagedDeptIds = new ArrayList<>();
+                List<Integer> collect = departmentList.stream().map(dm -> dm.getDepartmentId()).distinct().collect(Collectors.toList());
+                List<Integer> otherCollect = departmentOtherManagerList.stream().map(dom -> dom.getDepartmentId()).distinct().collect(Collectors.toList());
+                collect.addAll(otherCollect);
+                for (Integer integer : collect) {
+                    List<Integer> branchDepartment = getBranchDepartment(integer, allDepartmentList);
+                    allMyManagedDeptIds.addAll(branchDepartment);
+                }
+                if (allMyManagedDeptIds.size() > 0) {
+                    List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().select("id").in("dept_id", allMyManagedDeptIds));
+                    deptRelatedProjectIds = projectList.stream().map(Project::getId).collect(Collectors.toList());
+                }
+
+                //有限匹配项目经理的数据视角
+                List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().select("id").eq("incharger_id", targetUser.getId()));
+                if (projectList.size() > 0) {
+                    projectIds = projectList.stream().map(Project::getId).collect(Collectors.toList());
+                    deptIds = null;
+                } else {
+                    if(functionDpartList.size()>0){
+                        if(functionTimeList.size()>0||functionCostList.size()>0){
+                            deptIds.addAll(allMyManagedDeptIds);
+                        }
+                        if (containDeptMembInchargeProjects && deptIds.size() > 1) {
+                            inchargeUserIds = userMapper.selectList(new QueryWrapper<User>().select("id").in("department_id", deptIds)).stream().map(User::getId).collect(Collectors.toList());
+                        }
+                    }
+                }
+            }
+            List<String> userIdList=new ArrayList<>();
+            if(userIds!=null&&userIds.length()>0){
+                String[] split = userIds.split(",");
+                userIdList = Arrays.asList(split);
+            }
+            List<Map<String, Object>> list = projectMapper.getTimeCostByStatus(companyId, startDate, endDate, status, userIdList,deptIds,null, deptRelatedProjectIds, projectIds, inchargeUserIds,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 (type.equals(0)){
+                list = list.stream().sorted(Comparator.comparing(l -> -Double.parseDouble(l.get("costMoney").toString()))).collect(Collectors.toList());
+            }else {
+                list = list.stream().sorted(Comparator.comparing(l -> -Double.parseDouble(l.get("cost").toString()))).collect(Collectors.toList());
+            }
+            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("验证失败");
+            httpRespMsg.setError(MessageUtils.message("access.verificationError"));
+            return httpRespMsg;
+        }
+
+        return httpRespMsg;
+    }
+
+
     private HashMap fillMainProjectRowData(Integer projectMainId, Integer companyId, String startDate, String endDate, Integer stateKey, List<String> userIdList, List<Map<String, Object>> list,
                                            List<UserCustom> userCustoms, List<SysRichFunction> functionTimeList, List<SysRichFunction> functionCostList,
                                            String exportContent, List<User> userList, List<Integer> deptIds, List<Integer> deptRelatedProjectIds,

+ 66 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectMapper.xml

@@ -218,6 +218,72 @@
         ORDER BY a.id ASC
     </select>
 
+    <select id="getTimeCostByStatus" resultType="java.util.Map">
+        SELECT a.id, a.project_main_id as projectMainId, a.project_code as projectCode, a.project_name AS project, SUM(b.working_time) AS cost, SUM(b.cost) AS costMoney,a.category_name as categoryName
+        FROM project AS a
+        LEFT JOIN report AS b ON b.project_id = a.id
+        JOIN user AS c ON b.creator_id = c.id
+        WHERE a.company_id = #{companyId}
+        <if test="status != null">
+            AND a.status = #{status}
+        </if>
+        <if test="categoryId != null">
+            AND a.category = #{categoryId}
+        </if>
+        <if test="projectIds != null">
+            and a.id in
+            <foreach collection="projectIds" open="(" close=")" separator="," item="item">
+                #{item}
+            </foreach>
+        </if>
+        <if test="userIdList != null and userIdList.size()>0">
+            AND b.creator_id in
+            <foreach collection="userIdList" item="item" open="(" separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        <if test="startDate != null and endDate != null">
+            AND b.create_date between #{startDate} and #{endDate}
+        </if>
+        <choose>
+            <when test="filterDeptIds!=null and filterDeptIds.size()>0">
+                and b.dept_id in
+                <foreach collection="filterDeptIds" open="(" item="item" separator="," close=")">
+                    #{item}
+                </foreach>
+            </when>
+            <otherwise>
+                <if test="deptIds!=null and deptIds.size()>0">
+                    and (b.dept_id in
+                    <foreach collection="deptIds" open="(" item="item" separator="," close=")">
+                        #{item}
+                    </foreach>
+                    <if test="deptRelatedProjectIds.size() > 0">
+                        or a.id in
+                        <foreach collection="deptRelatedProjectIds" open="(" item="pid" separator="," close=")">
+                            #{pid}
+                        </foreach>
+                    </if>
+                    <if test="inchargeUserIds != null and inchargeUserIds.size()>0">
+                        OR a.`incharger_id` IN
+                        <foreach collection="inchargeUserIds" open="(" item="pid" separator="," close=")">
+                            #{pid}
+                        </foreach>
+                        OR b.`group_id` IN(SELECT id FROM task_group WHERE incharger_id IN
+                        <foreach collection="inchargeUserIds" open="(" item="pid" separator="," close=")">
+                            #{pid}
+                        </foreach>
+                        )
+                    </if>
+                    )
+                </if>
+            </otherwise>
+        </choose>
+        AND b.state = 1
+        GROUP BY a.id
+        ORDER BY a.id ASC
+    </select>
+
     <!--获取查询者所在公司每个子项目的工时成本-->
     <select id="getSubProjectTimeCost" resultType="java.util.Map">
         select b.project_code as projectCode,b.project_name as projectName,a.code as subProjectCode,a.name as subProjectName,SUM(c.cost) as cost,SUM(c.working_time) as workingTime