瀏覽代碼

工时成本统计 按部门筛选修改
日报审核 通知 修改

yurk 2 年之前
父節點
當前提交
0a7a7fa0d0

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

@@ -211,8 +211,8 @@ public class ProjectController {
      * 导出查询者所在公司每个项目的工时成本
      */
     @RequestMapping("/exportTimeCost")
-    public HttpRespMsg exportTimeCost(String startDate, String endDate, Integer projectId, String userId, Boolean projectSum,Integer type) {
-        return projectService.exportTimeCost(startDate, endDate, projectId, userId, projectSum,type, request);
+    public HttpRespMsg exportTimeCost(String startDate, String endDate, Integer projectId, String userId, Boolean projectSum,Integer type,Integer deptId) {
+        return projectService.exportTimeCost(startDate, endDate, projectId, userId, projectSum,type,deptId, request);
     }
 
     /**

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

@@ -1240,6 +1240,7 @@ public class ReportController {
         return reportService.getlastWeekFillTime(userId);
     }
 
+    /*提供第三方接口获取日报数据*/
     @PostMapping("/getReportListByToken")
     public HttpRespMsg getReportListByToken(@RequestParam String token, @RequestParam String startDate, @RequestParam String endDate){
         return reportService.getReportListByToken(token,startDate,endDate);

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

@@ -25,12 +25,12 @@ public interface ProjectMapper extends BaseMapper<Project> {
     List<Map<String, Object>> getOnlyJoinProjects(@Param("userId") String userId, @Param("companyId") Integer companyId);
 
     List<Map<String, Object>> getTimeCost(@Param("companyId") Integer companyId, @Param("startDate") String startDate, @Param("endDate") String endDate,
-        @Param("projectId") Integer projectId, @Param("userId") String userId,@Param("deptIds")List<Integer> deptIds);
+        @Param("projectId") Integer projectId, @Param("userId") String userId,@Param("deptIds")List<Integer> deptIds,@Param("filterDeptIds")List<Integer> filterDeptIds);
 
     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);
 
-    List<Map<String, Object>> getProjectCost(@Param("companyId")Integer companyId,@Param("startDate") String startDate, @Param("endDate") String endDate, @Param("projectId") Integer projectId, @Param("userId") String userId);
+    List<Map<String, Object>> getProjectCost(@Param("companyId")Integer companyId,@Param("startDate") String startDate, @Param("endDate") String endDate, @Param("projectId") Integer projectId, @Param("userId") String userId,@Param("deptIds")List<Integer> deptIds,@Param("filterDeptIds")List<Integer> filterDeptIds);
 
     List<Map<String, Object>> getProjectCusDataSumItem(@Param("companyId") Integer companyId, @Param("startDate") String startDate, @Param("endDate") String endDate, @Param("projectId") Integer projectId, @Param("userId") String userId);
     List<Map<String, Object>> getProjectCusDataDetailItem(@Param("companyId") Integer companyId, @Param("startDate") String startDate, @Param("endDate") String endDate, @Param("projectId") Integer projectId, @Param("userId") String userId);

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

@@ -56,7 +56,7 @@ public interface ProjectService extends IService<Project> {
 
     HttpRespMsg getAllMembCost(String startDate, String endDate, Integer projectId, HttpServletRequest request);
 
-    HttpRespMsg exportTimeCost(String startDate, String endDate, Integer projectId,String userId, Boolean projectSum,Integer type,HttpServletRequest request);
+    HttpRespMsg exportTimeCost(String startDate, String endDate, Integer projectId,String userId, Boolean projectSum,Integer type,Integer deptId,HttpServletRequest request);
 
     HttpRespMsg updateProgress(Integer id, Integer progress, HttpServletRequest request);
 

+ 20 - 8
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/CompanyDingdingServiceImpl.java

@@ -19,8 +19,10 @@ import com.dingtalk.api.response.OapiMessageCorpconversationSendbytemplateRespon
 import com.dingtalk.api.response.OapiServiceGetSuiteTokenResponse;
 import com.management.platform.entity.CompanyDingding;
 import com.management.platform.entity.SysConfig;
+import com.management.platform.entity.TimeType;
 import com.management.platform.mapper.CompanyDingdingMapper;
 import com.management.platform.mapper.SysConfigMapper;
+import com.management.platform.mapper.TimeTypeMapper;
 import com.management.platform.service.CompanyDingdingService;
 import com.taobao.api.ApiException;
 import org.springframework.beans.factory.annotation.Value;
@@ -55,8 +57,9 @@ public class CompanyDingdingServiceImpl extends ServiceImpl<CompanyDingdingMappe
     public static final String TEMPLATE_LEAVE_APPLY = "8e2f89e03f1a43b58b3e83dc7c9ac5ba";
     //日报待审批的数量通知
     public static final String TEMPLATE_REPORT_WAITING_APPLY = "d871e80191d14ec8aeec3986aca3ce46";
-    //日报审批通过通知
-    public static final String TEMPLATE_REPORT_APPROVE_APPLY = "33ef248317f641c1ab23b152bd96eb79";
+    //日报审批通过通知带评价
+    public static final String TEMPLATE_REPORT_APPROVE_APPLY_EVALUATE = "33ef248317f641c1ab23b152bd96eb79";
+    public static final String TEMPLATE_REPORT_APPROVE_APPLY = "03bbfd4e67c8431aa37f5e61e08ddac4";
     //出差待关联
     public static final String TEMPLATE_BUSTRIP_SETTING = "68cc6f3a150f4d869449e83a2f249b65";
     //新任务
@@ -68,6 +71,8 @@ public class CompanyDingdingServiceImpl extends ServiceImpl<CompanyDingdingMappe
     private SysConfigMapper sysConfigMapper;
     @Resource
     private CompanyDingdingMapper companyDingdingMapper;
+    @Resource
+    private TimeTypeMapper timeTypeMapper;
     @Value("${dingding.appId}")
     private long appId;//钉钉第三方应用的appId
     @Value("${configEnv.isPrivateDeploy}")
@@ -237,6 +242,7 @@ public class CompanyDingdingServiceImpl extends ServiceImpl<CompanyDingdingMappe
     public void sendReportApproveMsg(Integer companyId, Long agentId, String auditorName, String evaluate, LocalDate date, String useridList) {
         if (isDev) return;
         CompanyDingding dingding = getOne(new QueryWrapper<CompanyDingding>().eq("company_id", companyId));
+        TimeType timeType = timeTypeMapper.selectById(new QueryWrapper<TimeType>().eq("company_id", companyId));
         DateTimeFormatter df=DateTimeFormatter.ofPattern("yyyy-MM-dd");
         if (isPrivateDeploy) {
             List<OapiMessageCorpconversationAsyncsendV2Request.Form> form=new ArrayList<>();
@@ -245,19 +251,25 @@ public class CompanyDingdingServiceImpl extends ServiceImpl<CompanyDingdingMappe
             item1.setKey("审核人:");
             item1.setValue(auditorName);
             form.add(item1);
-            item2.setKey("评价:");
-            item2.setValue(evaluate);
-            form.add(item2);
+            if(timeType.getNeedEvaluate()==1){
+                item2.setKey("评价:");
+                item2.setValue(evaluate);
+                form.add(item2);
+            }
             sendOAMsg(dingding,useridList,"日报审核通过","您"+df.format(date)+"提交的日报审核通过了",form,null);
         } else {
             DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/message/corpconversation/sendbytemplate");
+            JSONObject json = new JSONObject();
             OapiMessageCorpconversationSendbytemplateRequest req = new OapiMessageCorpconversationSendbytemplateRequest();
             req.setAgentId(agentId);
             req.setUseridList(useridList);
-            req.setTemplateId(TEMPLATE_REPORT_APPROVE_APPLY);
-            JSONObject json = new JSONObject();
+            if(timeType.getNeedEvaluate()==1){
+                req.setTemplateId(TEMPLATE_REPORT_APPROVE_APPLY_EVALUATE);
+                json.put("evaluate",evaluate);
+            }else {
+                req.setTemplateId(TEMPLATE_REPORT_APPROVE_APPLY);
+            }
             json.put("auditor",auditorName);
-            json.put("evaluate",evaluate);
             json.put("date", "" + df.format(date));
             json.put("APPID", "" + appId);
             json.put("CORPID", dingding.getCorpid());

+ 65 - 9
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -305,6 +305,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 if(optional.isPresent()){
                     projectVO.setDepartmentName(optional.get().getDepartmentName());
                 }
+                /**/
                 projectVO.setParticipator(participationMapper.getParticipator(projectVO.getId()));
                 Optional<User> first = userList.stream().filter(u -> u.getId().equals(project.getInchargerId())).findFirst();
                 if (first.isPresent()) {
@@ -978,7 +979,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 httpRespMsg.data = resultMap;
 
             } else {
-                List<Map<String, Object>> list = projectMapper.getTimeCost(companyId, startDate, endDate, null, userId,deptIds);
+                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")) {
@@ -1017,7 +1018,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
 
     //导出查询者所在公司每个项目的工时成本,包括项目人员明细统计
     @Override
-    public HttpRespMsg exportTimeCost(String startDate, String endDate,Integer projectId, String userId, Boolean projectSum,Integer type, HttpServletRequest request) {
+    public HttpRespMsg exportTimeCost(String startDate, String endDate,Integer projectId, String userId, Boolean projectSum,Integer type,Integer deptId, HttpServletRequest request) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         try {
             User targetUser = userMapper.selectById(request.getHeader("Token"));
@@ -1026,12 +1027,17 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             //当前用户管理部门
             List<Integer> deptIds=null;
             List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("manager_id", targetUser.getId()).eq("company_id", companyId));
+            List<Department> allDepartmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", targetUser.getCompanyId()));
             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> filterDeptIds=null;
+            if(deptId!=null){
+                filterDeptIds= getBranchDepartment(deptId, allDepartmentList);
+            }
             if(functionAllList.size()==0){
                 deptIds=new ArrayList<>();
                 deptIds.add(-1);
@@ -1040,11 +1046,27 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                         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);
-                        deptIds.addAll(otherCollect);
+                        for (Integer integer : collect) {
+                            List<Integer> branchDepartment = getBranchDepartment(integer, allDepartmentList);
+                            deptIds.addAll(branchDepartment);
+                        }
+                    }
+                }
+                //没有查看全公司的权限 只能先判断当前部门/父级别是否在负责部门才能获取数据
+                if(deptId!=null){
+                    Optional<Department> first = allDepartmentList.stream().filter(ad -> ad.getDepartmentId().equals(deptId)).findFirst();
+                    if(first.isPresent()){
+                        if(deptIds.contains(first.get().getSuperiorId())||deptIds.contains(deptId)){
+                            filterDeptIds= getBranchDepartment(deptId,allDepartmentList);
+                        }else {
+                            filterDeptIds=new ArrayList<>();
+                            filterDeptIds.add(-1);
+                        }
                     }
                 }
             }
-            List<Map<String, Object>> list = projectMapper.getTimeCost(companyId, startDate, endDate, projectId, userId,deptIds);
+            System.out.println(filterDeptIds);
+            List<Map<String, Object>> list = projectMapper.getTimeCost(companyId, startDate, endDate, projectId, userId,deptIds,filterDeptIds);
             BigDecimal totalMoneyCost = BigDecimal.valueOf(0);
             List<List<String>> allList=null ;
             List<String> sumRow = null;
@@ -1091,7 +1113,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     }
                     //统计每个项目中的人员时间成本投入
                     int curProjectId = (Integer)map.get("id");
-                    List<Map<String, Object>> membList = projectMapper.getProjectCost(companyId,startDate, endDate, curProjectId, userId);
+                    List<Map<String, Object>> membList = projectMapper.getProjectCost(companyId,startDate, endDate, curProjectId, userId,deptIds,filterDeptIds);
                     map.put("membList", membList);
                     for (Map<String, Object> membMap : membList) {
                         double pTotalTime = 0;
@@ -1360,7 +1382,36 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
     public HttpRespMsg getProjectCost(String startDate, String endDate, Integer projectId, HttpServletRequest request) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         try {
-            Integer companyId = userMapper.selectById(request.getHeader("Token")).getCompanyId();
+            User targetUser = userMapper.selectById(request.getHeader("Token"));
+            Integer companyId = targetUser.getCompanyId();
+            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> 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 (!projectMapper.selectById(projectId).getCompanyId().equals(companyId)) {
                 httpRespMsg.setError("无权查看其他公司的项目详情");
@@ -1368,7 +1419,8 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 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, null);
+                    //数据下 非负责部门人员数据不展示
+                    List<Map<String, Object>> list = projectMapper.getProjectCost(companyId,startDate, endDate, projectId, null,deptIds,null);
                     BigDecimal totalMoneyCost = BigDecimal.valueOf(0);
                     for (Map<String, Object> map : list) {
                         if (!map.containsKey("costMoney")) {
@@ -1385,7 +1437,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     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, null);
+                    List<Map<String, Object>> list = projectMapper.getProjectCost(companyId,startDate, endDate, projectId, null,deptIds,null);
 
                     //检查财务表中是否已经导入成本
                     List<Finance> financeList = financeMapper.selectList(new QueryWrapper<Finance>().eq("ymonth", startDate).eq("company_id", companyId));
@@ -4212,6 +4264,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             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(), "查看全公司");
@@ -4227,7 +4280,10 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                         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);
-                        deptIds.addAll(collect);
+                        for (Integer integer : collect) {
+                            List<Integer> branchDepartment = getBranchDepartment(integer, allDepartmentList);
+                            deptIds.addAll(branchDepartment);
+                        }
                     }
                 }
             }

+ 6 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -1393,10 +1393,14 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                             JSONArray dataJson=new JSONArray();
                             JSONObject item=new JSONObject();
                             item.put("审核人",user.getName());
-                            item.put("评价",report.getEvaluate());
+                            if(timeType.getNeedEvaluate()==1){
+                                item.put("评价",report.getEvaluate());
+                                json.put("template_id","tty9TkCAAAWoUyhGnXRCZuhkgCqw_Uow");
+                            }else {
+                                json.put("template_id","tty9TkCAAANpvEtLrkPUGeOEd1-U7W2w");
+                            }
                             item.put("填报日期",report.getCreateDate());
                             dataJson.add(item);
-                            json.put("template_id","tty9TkCAAAWoUyhGnXRCZuhkgCqw_Uow");
                             json.put("url","https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww4e237fd6abb635af&redirect_uri=http://mobworktime.ttkuaiban.com/api/corpWXAuth&response_type=code&scope=snsapi_base&state=0#wechat_redirect");
                             json.put("content_item",dataJson);
                             wxCorpInfoService.sendWXCorpTemplateMsg(wxCorpInfoList.get(0),u.getCorpwxUserid(),json);

+ 33 - 7
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectMapper.xml

@@ -136,13 +136,23 @@
         <if test="startDate != null and endDate != null">
             AND b.create_date between #{startDate} and #{endDate}
         </if>
-        <if test="deptIds!=null and deptIds.size()>0">
-            and b.dept_id in
-            <foreach collection="deptIds" open="(" item="item" separator="," close=")">
-                #{item}
-            </foreach>
-        </if>
-        AND b.state = 1
+        <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>
+            </otherwise>
+        </choose>
+        AND (b.state = 1 or b.state=0)
         GROUP BY a.id
         ORDER BY a.id ASC
     </select>
@@ -280,6 +290,22 @@
         <if test="userId != null">
             AND a.creator_id = #{userId}
         </if>
+        <choose>
+            <when test="filterDeptIds!=null and filterDeptIds.size()>0">
+                and a.dept_id in
+                <foreach collection="filterDeptIds" open="(" item="item" separator="," close=")">
+                    #{item}
+                </foreach>
+            </when>
+            <otherwise>
+                <if test="deptIds!=null and deptIds.size()>0">
+                    and a.dept_id in
+                    <foreach collection="deptIds" open="(" item="item" separator="," close=")">
+                        #{item}
+                    </foreach>
+                </if>
+            </otherwise>
+        </choose>
         GROUP BY b.id, a.dept_id
         ORDER BY b.id ASC, a.dept_id ASC
     </select>