Browse Source

Merge branch 'master' of http://47.100.37.243:10080/wutt/manHourHousekeeper

Lijy 2 years ago
parent
commit
2c4fb1b3b9
49 changed files with 1206 additions and 223 deletions
  1. 78 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/CompanyReportController.java
  2. 23 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectController.java
  3. 34 8
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java
  4. 36 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportFormController.java
  5. 16 4
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TaskController.java
  6. 31 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserCustomController.java
  7. 43 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/CompanyReport.java
  8. 8 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Project.java
  9. 19 12
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Report.java
  10. 11 19
      src/main/java/com/management/platform/entity/ExpenseType.java
  11. 7 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/SysFunction.java
  12. 9 7
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Task.java
  13. 19 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/TimeType.java
  14. 8 3
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/UserCustom.java
  15. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/CompanyReportMapper.java
  16. 2 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ProjectMapper.java
  17. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ReportFormMapper.java
  18. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/TaskMapper.java
  19. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/CompanyReportService.java
  20. 9 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectService.java
  21. 3 3
      src/main/java/com/management/platform/service/ExpenseTypeService.java
  22. 2 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ReportService.java
  23. 20 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/CompanyReportServiceImpl.java
  24. 12 4
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/PermissionServiceImpl.java
  25. 278 44
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java
  26. 2 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProviderInfoServiceImpl.java
  27. 20 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportFormServiceImpl.java
  28. 44 9
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  29. 29 3
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java
  30. 24 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/WxCorpInfoServiceImpl.java
  31. 4 6
      src/main/resources/mapper/ExpenseTypeMapper.xml
  32. 27 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectMapper.xml
  33. 16 0
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportFormMapper.xml
  34. 7 6
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportMapper.xml
  35. 2 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/SysFunctionMapper.xml
  36. 14 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TaskMapper.xml
  37. 4 1
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TimeTypeMapper.xml
  38. 73 0
      fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/controller/CompanyReportController.java
  39. 44 0
      fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/entity/CompanyReport.java
  40. 11 19
      fhKeeper/formulahousekeeper/user/src/main/java/com/hssx/user/entity/UserPermission.java
  41. 16 0
      fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/mapper/CompanyReportMapper.java
  42. 3 3
      src/main/java/com/management/platform/mapper/ExpenseTypeMapper.java
  43. 17 0
      fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/service/CompanyReportService.java
  44. 16 0
      fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/service/ReportFormService.java
  45. 20 0
      fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/service/impl/CompanyReportServiceImpl.java
  46. 20 0
      fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/service/impl/ReportFormServiceImpl.java
  47. 16 0
      fhKeeper/formulahousekeeper/ops-platform/src/main/resources/mapper/CompanyReportMapper.xml
  48. 16 0
      fhKeeper/formulahousekeeper/ops-platform/src/main/resources/mapper/ReportFormMapper.xml
  49. 44 58
      fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/index.vue

+ 78 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/CompanyReportController.java

@@ -0,0 +1,78 @@
+package com.management.platform.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.management.platform.entity.CompanyReport;
+import com.management.platform.entity.ReportForm;
+import com.management.platform.service.CompanyReportService;
+import com.management.platform.service.ReportFormService;
+import com.management.platform.util.HttpRespMsg;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-08-03
+ */
+@RestController
+@RequestMapping("/company-report")
+public class CompanyReportController {
+    @Autowired
+    private CompanyReportService companyReportService;
+    @Resource
+    private ReportFormService reportFormService;
+
+
+    @RequestMapping("/list")
+    public HttpRespMsg list(Integer companyId){
+        HttpRespMsg httpRespMsg=new HttpRespMsg();
+        List<CompanyReport> companyReportList = companyReportService.list(new QueryWrapper<CompanyReport>().eq("company_id", companyId));
+        List<ReportForm> reportFormList = reportFormService.list();
+        for (ReportForm reportForm : reportFormList) {
+            boolean b = companyReportList.stream().anyMatch(cr -> cr.getReportFormId().equals(reportForm.getId()));
+            if(b){
+                reportForm.setOwned(1);
+            }
+        }
+        httpRespMsg.data=reportFormList;
+        return httpRespMsg;
+    }
+
+    @RequestMapping("/update")
+    public HttpRespMsg update(Integer companyId,String formIds){
+        HttpRespMsg httpRespMsg=new HttpRespMsg();
+        if(companyReportService.remove(new QueryWrapper<CompanyReport>().eq("company_id", companyId))){
+            httpRespMsg.setError("更新失败");
+            return httpRespMsg;
+        }
+        List<CompanyReport> updateList=new ArrayList<>();
+        if(formIds!=null&&!StringUtils.isEmpty(formIds)){
+            String[] split = formIds.split(",");
+            List<String> list = Arrays.asList(split);
+            for (String s : list) {
+                CompanyReport companyReport=new CompanyReport();
+                companyReport.setCompanyId(companyId);
+                companyReport.setReportFormId(Integer.parseInt(s));
+                updateList.add(companyReport);
+            }
+            if(!companyReportService.saveBatch(updateList)){
+                httpRespMsg.setError("更新失败");
+            }
+        }
+        return httpRespMsg;
+    }
+
+}
+

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

@@ -126,12 +126,13 @@ public class ProjectController {
                                    String providerIds,
                                    String providerIds,
                                    String providerNames,
                                    String providerNames,
                                    ProjectSeparate projectSeparate,
                                    ProjectSeparate projectSeparate,
+                                   Double outputValue,
                                    @RequestParam(defaultValue = "false") boolean onlyChangeParticipate
                                    @RequestParam(defaultValue = "false") boolean onlyChangeParticipate
                                    ) {
                                    ) {
         return projectService.editProject(id, name, code, userId, inchargerId, isPublic, planStartDate, planEndDate, level, contractAmount,
         return projectService.editProject(id, name, code, userId, inchargerId, isPublic, planStartDate, planEndDate, level, contractAmount,
                 projectBaseCostData,
                 projectBaseCostData,
                  budget,customerId,chosenLeaders, associateDegrees, associateDegreeNames,
                  budget,customerId,chosenLeaders, associateDegrees, associateDegreeNames,
-                taskGpIncharge,auditUserIds, category, projectDesc,projectMainId, providerIds, providerNames, request,projectSeparate,onlyChangeParticipate);
+                taskGpIncharge,auditUserIds, category, projectDesc,projectMainId, providerIds, providerNames, request,projectSeparate,outputValue,onlyChangeParticipate);
     }
     }
 
 
     @RequestMapping("/adjustBase")
     @RequestMapping("/adjustBase")
@@ -595,6 +596,9 @@ public class ProjectController {
         if(company.getId()==936){
         if(company.getId()==936){
             heads.add("合同编号");
             heads.add("合同编号");
         }
         }
+        if(company.getId()==428){
+            heads.add("项目分组");
+        }
         if(timeType.getMainProjectState()!=1){
         if(timeType.getMainProjectState()!=1){
             heads.add("项目分类");
             heads.add("项目分类");
         }
         }
@@ -906,5 +910,23 @@ public class ProjectController {
     public HttpRespMsg exportGroupWithProjectTimeCost(String startDate,String endDate,Integer pageIndex,Integer pageSize,Integer groupId,Integer projectId){
     public HttpRespMsg exportGroupWithProjectTimeCost(String startDate,String endDate,Integer pageIndex,Integer pageSize,Integer groupId,Integer projectId){
         return projectService.exportGroupWithProjectTimeCost(startDate,endDate,pageIndex,pageSize,groupId,projectId,request);
         return projectService.exportGroupWithProjectTimeCost(startDate,endDate,pageIndex,pageSize,groupId,projectId,request);
     }
     }
+    @RequestMapping("/getProjectBaseCost")
+    public HttpRespMsg getProjectBaseCost(Integer projectId,HttpServletRequest request,Integer pageIndex,Integer pageSize){
+        return projectService.getProjectBaseCost(projectId,request,pageIndex,pageSize);
+    }
+
+    @RequestMapping("/exportProjectBaseCost")
+    public HttpRespMsg exportProjectBaseCost(HttpServletRequest request){
+        return projectService.exportProjectBaseCost(request);
+    }
+
+    @RequestMapping("/getTimeCostByUserCustom")
+    public HttpRespMsg getTimeCostByUserCustom(String startDate,String endDate,String subCustomName,Integer customId,HttpServletRequest request,String fieldName){
+        return  projectService.getTimeCostByUserCustom(startDate,endDate,subCustomName,customId,request,fieldName);
+    }
+    @RequestMapping("/exportTimeCostByUserCustom")
+    public HttpRespMsg exportTimeCostByUserCustom(String startDate,String endDate,String subCustomName,Integer customId,HttpServletRequest request,String fieldName){
+        return projectService.exportTimeCostByUserCustom(startDate,endDate,subCustomName,customId,request,fieldName);
+    }
 }
 }
 
 

+ 34 - 8
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java

@@ -9,10 +9,7 @@ import com.management.platform.entity.*;
 import com.management.platform.entity.vo.SysRichFunction;
 import com.management.platform.entity.vo.SysRichFunction;
 import com.management.platform.entity.vo.WorktimeItem;
 import com.management.platform.entity.vo.WorktimeItem;
 import com.management.platform.mapper.*;
 import com.management.platform.mapper.*;
-import com.management.platform.service.CompanyService;
-import com.management.platform.service.ReportService;
-import com.management.platform.service.UserSalaryService;
-import com.management.platform.service.UserService;
+import com.management.platform.service.*;
 import com.management.platform.util.HttpRespMsg;
 import com.management.platform.util.HttpRespMsg;
 import com.management.platform.util.WorkDayCalculateUtils;
 import com.management.platform.util.WorkDayCalculateUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -58,6 +55,8 @@ public class ReportController {
     @Resource
     @Resource
     private DepartmentMapper departmentMapper;
     private DepartmentMapper departmentMapper;
     @Resource
     @Resource
+    private BusinessTripService businessTripService;
+    @Resource
     private ProjectCurrentcostMapper projectCurrentcostMapper;
     private ProjectCurrentcostMapper projectCurrentcostMapper;
     @Resource
     @Resource
     private UserSalaryService userSalaryService;
     private UserSalaryService userSalaryService;
@@ -915,6 +914,33 @@ public class ReportController {
 
 
         }
         }
 
 
+        //自定义数值为餐补的情况下,如果是出差则不能填餐补
+        if (comTimeType.getCustomDataActive() == 1 && comTimeType.getCustomDataName().contains("餐补")) {
+            if (company.getPackageOa() == 1) {
+                //含OA模块的才有出差
+                for (Report r : reportList) {
+                    if (r.getCustomData() > 0) {
+                        //检查出差记录
+                        LocalDate workDate = r.getCreateDate();
+                        String ownerId = r.getCreatorId();
+                        int cnt = businessTripService.count(new QueryWrapper<BusinessTrip>().eq("owner_id", ownerId).le("start_date", workDate).ge("end_date", workDate));
+                        System.out.println("检查出差条数=="+cnt);
+                        if (cnt > 0) {
+                            //返回错误提示
+                            HttpRespMsg msg = new HttpRespMsg();
+                            if (ownerId.equals(token)) {
+                                //自己填报自己的
+                                msg.setError(dtf.format(workDate)+"有出差,餐补必须为0");
+                            } else {
+                                msg.setError(userService.getById(ownerId) + "在" + dtf.format(workDate)+"有出差,餐补必须为0");
+                            }
+                            return msg;
+                        }
+                    }
+                }
+            }
+        }
+
         return reportService.editReport(reportList, createDate.length > 0 ? createDate[0] : null, targetUserList, hourCost, user.getCompanyId());
         return reportService.editReport(reportList, createDate.length > 0 ? createDate[0] : null, targetUserList, hourCost, user.getCompanyId());
     }
     }
 
 
@@ -1067,8 +1093,8 @@ public class ReportController {
      * reportIds 报告id
      * reportIds 报告id
      */
      */
     @RequestMapping("/approve")
     @RequestMapping("/approve")
-    public HttpRespMsg approveReport(@RequestParam String reportIds, Integer isDepartment, HttpServletRequest request) {
-        return reportService.approveReport(reportIds,isDepartment, request);
+    public HttpRespMsg approveReport(@RequestParam String reportIds, Integer isDepartment, HttpServletRequest request,String evaluate) {
+        return reportService.approveReport(reportIds,isDepartment, request,evaluate);
     }
     }
 
 
 
 
@@ -1115,8 +1141,8 @@ public class ReportController {
     }
     }
 
 
     @RequestMapping("/batchApproveReport")
     @RequestMapping("/batchApproveReport")
-    public HttpRespMsg batchApproveReport(@RequestParam String ids, Integer isDepartment, HttpServletRequest request) {
-        return reportService.batchApproveReport(ids, isDepartment, request);
+    public HttpRespMsg batchApproveReport(@RequestParam String ids, Integer isDepartment, HttpServletRequest request,String evaluate) {
+        return reportService.batchApproveReport(ids, isDepartment, request,evaluate);
     }
     }
 
 
     @RequestMapping("/batchDenyReport")
     @RequestMapping("/batchDenyReport")

+ 36 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportFormController.java

@@ -0,0 +1,36 @@
+package com.management.platform.controller;
+
+
+import com.management.platform.entity.ReportForm;
+import com.management.platform.service.ReportFormService;
+import com.management.platform.util.HttpRespMsg;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-08-03
+ */
+@RestController
+@RequestMapping("/report-form")
+public class ReportFormController {
+    @Autowired
+    private ReportFormService reportFormService;
+
+    @RequestMapping("/list")
+    public HttpRespMsg list(){
+        HttpRespMsg httpRespMsg=new HttpRespMsg();
+        List<ReportForm> list = reportFormService.list();
+        httpRespMsg.data=list;
+        return httpRespMsg;
+    }
+}
+

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

@@ -71,6 +71,8 @@ public class TaskController {
     private CompanyDingdingService companyDingdingService;
     private CompanyDingdingService companyDingdingService;
     @Resource
     @Resource
     private WxCorpInfoService wxCorpInfoService;
     private WxCorpInfoService wxCorpInfoService;
+    @Resource
+    private ProjectSeparateMapper projectSeparateMapper;
 
 
     @RequestMapping("/save")
     @RequestMapping("/save")
     @Transactional
     @Transactional
@@ -703,7 +705,7 @@ public class TaskController {
      * @return
      * @return
      */
      */
     @RequestMapping("/listByPage")
     @RequestMapping("/listByPage")
-    public HttpRespMsg listByPage(Integer status, Integer viewId, Integer pageIndex, Integer pageSize,Integer type,Integer dateType,String startDate,String endDate) {
+    public HttpRespMsg listByPage(Integer status, Integer viewId, Integer pageIndex, Integer pageSize,Integer type,Integer dateType,String startDate,String endDate,String groupName) {
         HttpRespMsg msg = new HttpRespMsg();
         HttpRespMsg msg = new HttpRespMsg();
         String userId = request.getHeader("Token");
         String userId = request.getHeader("Token");
         User user = userMapper.selectById(userId);
         User user = userMapper.selectById(userId);
@@ -739,14 +741,24 @@ public class TaskController {
 //            //已超期的任务,未完成的任务
 //            //已超期的任务,未完成的任务
 //            queryWrapper.lt("end_date", LocalDate.now()).eq("task_status", 0);
 //            queryWrapper.lt("end_date", LocalDate.now()).eq("task_status", 0);
 //        }
 //        }
-        List<Task> list = taskMapper.getTaskWithProjectName(queryWrapper, (pageIndex-1)*pageSize, pageSize);
-
-        int total = taskMapper.selectCount(queryWrapper);;
+        List<Task> list = taskMapper.getTaskWithProjectName(queryWrapper, (pageIndex-1)*pageSize, pageSize,companyId,groupName);
+        int total = taskMapper.selectCount(queryWrapper);
         Map<String, Object> map = new HashMap<>();
         Map<String, Object> map = new HashMap<>();
         map.put("records", list);
         map.put("records", list);
         map.put("total", total);
         map.put("total", total);
         msg.data = map;
         msg.data = map;
         return msg;
         return msg;
     }
     }
+    @RequestMapping("/getGroupNameList")
+    public HttpRespMsg getGroupNameList(HttpServletRequest request){
+        HttpRespMsg httpRespMsg=new HttpRespMsg();
+        Integer companyId = userMapper.selectById(request.getHeader("token")).getCompanyId();
+        List<Project> projectList = projectService.list(new QueryWrapper<Project>().eq("company_id", companyId));
+        List<Integer> collect = projectList.stream().distinct().map(Project::getId).collect(Collectors.toList());
+        List<ProjectSeparate> projectSeparateList = projectSeparateMapper.selectList(new QueryWrapper<ProjectSeparate>().in("id", collect));
+        List<String> nameList = projectSeparateList.stream().distinct().map(ProjectSeparate::getProjectCategorySub).collect(Collectors.toList());
+        httpRespMsg.data=nameList;
+        return httpRespMsg;
+    }
 }
 }
 
 

+ 31 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserCustomController.java

@@ -3,10 +3,12 @@ package com.management.platform.controller;
 
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONArray;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.management.platform.entity.SubUserCustom;
 import com.management.platform.entity.User;
 import com.management.platform.entity.User;
 import com.management.platform.entity.UserCustom;
 import com.management.platform.entity.UserCustom;
 import com.management.platform.mapper.UserCustomMapper;
 import com.management.platform.mapper.UserCustomMapper;
 import com.management.platform.mapper.UserMapper;
 import com.management.platform.mapper.UserMapper;
+import com.management.platform.service.SubUserCustomService;
 import com.management.platform.service.UserCustomService;
 import com.management.platform.service.UserCustomService;
 import com.management.platform.util.HttpRespMsg;
 import com.management.platform.util.HttpRespMsg;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -15,7 +17,10 @@ import org.springframework.web.bind.annotation.RestController;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 import java.util.List;
+import java.util.stream.Collectors;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -33,6 +38,8 @@ public class UserCustomController {
     @Resource
     @Resource
     private UserCustomMapper userCustomMapper;
     private UserCustomMapper userCustomMapper;
     @Resource
     @Resource
+    private SubUserCustomService subUserCustomService;
+    @Resource
     private UserMapper userMapper;
     private UserMapper userMapper;
     @RequestMapping("/addOrMod")
     @RequestMapping("/addOrMod")
     public HttpRespMsg addOrMod(String json, HttpServletRequest request){
     public HttpRespMsg addOrMod(String json, HttpServletRequest request){
@@ -92,5 +99,29 @@ public class UserCustomController {
         userCustomService.removeById(id);
         userCustomService.removeById(id);
         return new HttpRespMsg();
         return new HttpRespMsg();
     }
     }
+    @RequestMapping("/getUserCustomTitle")
+    public HttpRespMsg getUserCustomTitle(HttpServletRequest request){
+        HttpRespMsg httpRespMsg=new HttpRespMsg();
+        User user = userMapper.selectById(request.getHeader("token"));
+        List<UserCustom> userCustomList = userCustomMapper.selectList(new QueryWrapper<UserCustom>().eq("company_id", user.getCompanyId()).eq("type", 0));
+        List<UserCustom> customList = userCustomMapper.selectList(new QueryWrapper<UserCustom>().eq("company_id", user.getCompanyId()));
+        List<SubUserCustom> subUserCustomList =subUserCustomService.list();
+        List<String> fieldList=new ArrayList<>();
+        for (int i = 0; i < customList.size(); i++) {
+            UserCustom userCustom = customList.get(i);
+            if(userCustom.getType()==0){
+                fieldList.add("plate"+(i+1));
+            }
+        }
+        for (UserCustom userCustom : userCustomList) {
+            List<SubUserCustom> collect = subUserCustomList.stream().filter(sub -> sub.getUserCustomId().equals(userCustom.getId())).collect(Collectors.toList());
+            userCustom.setSubUserCustomList(collect);
+        }
+        HashMap map=new HashMap();
+        map.put("result",userCustomList);
+        map.put("field",fieldList);
+        httpRespMsg.data=map;
+        return httpRespMsg;
+    }
 }
 }
 
 

+ 43 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/CompanyReport.java

@@ -0,0 +1,43 @@
+package com.management.platform.entity;
+
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.baomidou.mybatisplus.annotation.TableField;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-08-03
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class CompanyReport extends Model<CompanyReport> {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 公司id
+     */
+    @TableField("company_id")
+    private Integer companyId;
+
+    /**
+     * 报表id
+     */
+    @TableField("report_form_id")
+    private Integer reportFormId;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return null;
+    }
+
+}

+ 8 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Project.java

@@ -288,9 +288,17 @@ public class Project extends Model<Project> {
     @TableField("current_stage_name")
     @TableField("current_stage_name")
     private String currentStageName;
     private String currentStageName;
 
 
+    /**
+     * 项目产值
+     */
+    @TableField("output_value")
+    private Double outputValue;
+
     @TableField(exist = false)
     @TableField(exist = false)
     ProjectSeparate projectSeparate;
     ProjectSeparate projectSeparate;
 
 
+    @TableField(exist = false)
+    List<ProjectBasecost> projectBasecostList;
 
 
     @Override
     @Override
     protected Serializable pkVal() {
     protected Serializable pkVal() {

+ 19 - 12
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Report.java

@@ -1,16 +1,9 @@
 package com.management.platform.entity;
 package com.management.platform.entity;
 
 
-import java.math.BigDecimal;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.IdType;
-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 com.baomidou.mybatisplus.annotation.TableField;
-import java.io.Serializable;
-import java.util.HashMap;
-import java.util.List;
-
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.management.platform.entity.vo.WorktimeItem;
 import com.management.platform.entity.vo.WorktimeItem;
 import lombok.Data;
 import lombok.Data;
@@ -18,13 +11,20 @@ import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 import lombok.experimental.Accessors;
 import org.springframework.format.annotation.DateTimeFormat;
 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.HashMap;
+import java.util.List;
+
 /**
 /**
  * <p>
  * <p>
  * 
  * 
  * </p>
  * </p>
  *
  *
  * @author Seyason
  * @author Seyason
- * @since 2022-07-24
+ * @since 2022-08-04
  */
  */
 @Data
 @Data
 @EqualsAndHashCode(callSuper = false)
 @EqualsAndHashCode(callSuper = false)
@@ -66,13 +66,13 @@ public class Report extends Model<Report> {
     private Double workingTime;
     private Double workingTime;
 
 
     /**
     /**
-     * 报告内容
+     * 报告内容; 根据multi_worktime的取值,形式有差别
      */
      */
     @TableField("content")
     @TableField("content")
     private String content;
     private String content;
 
 
     /**
     /**
-     * 审查状态 0-未审核 1-已通过 2-未通过
+     * 审查状态 0-未审核 1-已通过 2-未通过, -1-导入待审核, 3草稿
      */
      */
     @TableField("state")
     @TableField("state")
     private Integer state;
     private Integer state;
@@ -250,6 +250,7 @@ public class Report extends Model<Report> {
      */
      */
     @TableField("is_final_audit")
     @TableField("is_final_audit")
     private Integer isFinalAudit;
     private Integer isFinalAudit;
+
     /**
     /**
      * 审核流程:审核过程中,项目的审核状态; 0-待审核,1-审核通过
      * 审核流程:审核过程中,项目的审核状态; 0-待审核,1-审核通过
      */
      */
@@ -338,6 +339,12 @@ public class Report extends Model<Report> {
     @TableField("group_audit_state")
     @TableField("group_audit_state")
     private Integer groupAuditState;
     private Integer groupAuditState;
 
 
+    /**
+     * 评价
+     */
+    @TableField("evaluate")
+    private String evaluate;
+
 
 
     @Override
     @Override
     protected Serializable pkVal() {
     protected Serializable pkVal() {

+ 11 - 19
src/main/java/com/management/platform/entity/ExpenseType.java

@@ -1,26 +1,27 @@
 package com.management.platform.entity;
 package com.management.platform.entity;
 
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.extension.activerecord.Model;
-import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableField;
-import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
 import lombok.Data;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 import lombok.experimental.Accessors;
 
 
+import java.io.Serializable;
+
 /**
 /**
  * <p>
  * <p>
  * 
  * 
  * </p>
  * </p>
  *
  *
  * @author Seyason
  * @author Seyason
- * @since 2022-07-28
+ * @since 2022-08-03
  */
  */
 @Data
 @Data
 @EqualsAndHashCode(callSuper = false)
 @EqualsAndHashCode(callSuper = false)
 @Accessors(chain = true)
 @Accessors(chain = true)
-public class ExpenseType extends Model<ExpenseType> {
+public class ReportForm extends Model<ReportForm> {
 
 
     private static final long serialVersionUID=1L;
     private static final long serialVersionUID=1L;
 
 
@@ -28,22 +29,13 @@ public class ExpenseType extends Model<ExpenseType> {
     private Integer id;
     private Integer id;
 
 
     /**
     /**
-     * 主类型: 0-一般费用,1-差旅费用,2-外包费用
-     */
-    @TableField("main_type")
-    private Integer mainType;
-
-    /**
-     * 费用类型名称
+     * 报表名称
      */
      */
-    @TableField("type_name")
-    private String typeName;
+    @TableField("report_form_name")
+    private String reportFormName;
 
 
-    /**
-     * 公司id
-     */
-    @TableField("company_id")
-    private Integer companyId;
+    @TableField(exist = false)
+    private Integer owned;
 
 
 
 
     @Override
     @Override

+ 7 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/SysFunction.java

@@ -16,7 +16,7 @@ import java.io.Serializable;
  * </p>
  * </p>
  *
  *
  * @author Seyason
  * @author Seyason
- * @since 2022-06-30
+ * @since 2022-08-04
  */
  */
 @Data
 @Data
 @EqualsAndHashCode(callSuper = false)
 @EqualsAndHashCode(callSuper = false)
@@ -136,6 +136,12 @@ public class SysFunction extends Model<SysFunction> {
     @TableField("remarks")
     @TableField("remarks")
     private String remarks;
     private String remarks;
 
 
+    /**
+     * 权限所属报表
+     */
+    @TableField("report_form_id")
+    private Integer reportFormId;
+
     @TableField(exist = false)
     @TableField(exist = false)
     private boolean checked;
     private boolean checked;
     @Override
     @Override

+ 9 - 7
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/Task.java

@@ -1,20 +1,20 @@
 package com.management.platform.entity;
 package com.management.platform.entity;
 
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.IdType;
-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 com.baomidou.mybatisplus.annotation.TableField;
-import java.io.Serializable;
-import java.util.List;
-
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 import lombok.experimental.Accessors;
 import org.springframework.format.annotation.DateTimeFormat;
 import org.springframework.format.annotation.DateTimeFormat;
 
 
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.List;
+
 /**
 /**
  * <p>
  * <p>
  * 
  * 
@@ -203,6 +203,8 @@ public class Task extends Model<Task> {
     private List<MilestoneTaskRef> refTaskList;
     private List<MilestoneTaskRef> refTaskList;
     @TableField(exist = false)
     @TableField(exist = false)
     private Integer finishRefTaskCount;
     private Integer finishRefTaskCount;
+    @TableField(exist = false)
+    private String projectCategorySub;
 
 
     @Override
     @Override
     protected Serializable pkVal() {
     protected Serializable pkVal() {

+ 19 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/TimeType.java

@@ -17,7 +17,7 @@ import java.util.List;
  * </p>
  * </p>
  *
  *
  * @author Seyason
  * @author Seyason
- * @since 2022-08-03
+ * @since 2022-08-05
  */
  */
 @Data
 @Data
 @EqualsAndHashCode(callSuper = false)
 @EqualsAndHashCode(callSuper = false)
@@ -296,6 +296,24 @@ public class TimeType extends Model<TimeType> {
     @TableField("project_level_state")
     @TableField("project_level_state")
     private Integer projectLevelState;
     private Integer projectLevelState;
 
 
+    /**
+     * 0-未开启 1-开启
+     */
+    @TableField("need_evaluate")
+    private Integer needEvaluate;
+
+    /**
+     * 0-未开启 1-开启
+     */
+    @TableField("output_value_status")
+    private Integer outputValueStatus;
+
+    /**
+     * 0-未开启 1-开启
+     */
+    @TableField("user_custom_static")
+    private Integer userCustomStatic;
+
     @TableField(exist = false)
     @TableField(exist = false)
     private List<User> userList;
     private List<User> userList;
 
 

+ 8 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/UserCustom.java

@@ -1,14 +1,16 @@
 package com.management.platform.entity;
 package com.management.platform.entity;
 
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.extension.activerecord.Model;
-import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableField;
-import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
 import lombok.Data;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 import lombok.experimental.Accessors;
 
 
+import java.io.Serializable;
+import java.util.List;
+
 /**
 /**
  * <p>
  * <p>
  * 
  * 
@@ -39,6 +41,9 @@ public class UserCustom extends Model<UserCustom> {
     @TableField("type")
     @TableField("type")
     private Integer type;
     private Integer type;
 
 
+    @TableField(exist = false)
+    private List<SubUserCustom> subUserCustomList;
+
 
 
     @Override
     @Override
     protected Serializable pkVal() {
     protected Serializable pkVal() {

+ 16 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/CompanyReportMapper.java

@@ -0,0 +1,16 @@
+package com.management.platform.mapper;
+
+import com.management.platform.entity.CompanyReport;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-08-03
+ */
+public interface CompanyReportMapper extends BaseMapper<CompanyReport> {
+
+}

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

@@ -119,4 +119,6 @@ public interface ProjectMapper extends BaseMapper<Project> {
     List<Map<String, Object>> selectWithGroupProject(Integer companyId, String startDate, String endDate,  Integer startIndex, Integer endIndex, Integer projectId, List<Integer> inchagerIds, Integer groupId);
     List<Map<String, Object>> selectWithGroupProject(Integer companyId, String startDate, String endDate,  Integer startIndex, Integer endIndex, Integer projectId, List<Integer> inchagerIds, Integer groupId);
 
 
     long selectCountWithGroupProject(Integer companyId, String startDate, String endDate, Integer startIndex, Integer endIndex, Integer projectId, List<Integer> inchagerIds, Integer groupId);
     long selectCountWithGroupProject(Integer companyId, String startDate, String endDate, Integer startIndex, Integer endIndex, Integer projectId, List<Integer> inchagerIds, Integer groupId);
+
+    List<Map<String, Object>> getCostByUserCustom(String startDate, String endDate, Integer companyId, List<Integer> deptIds, Integer customId, String subCustomName,String fieldName);
 }
 }

+ 16 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ReportFormMapper.java

@@ -0,0 +1,16 @@
+package com.management.platform.mapper;
+
+import com.management.platform.entity.ReportForm;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-08-03
+ */
+public interface ReportFormMapper extends BaseMapper<ReportForm> {
+
+}

+ 1 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/TaskMapper.java

@@ -35,7 +35,7 @@ public interface TaskMapper extends BaseMapper<Task> {
 
 
     Integer getProjectTaskCount(Integer companyId, Integer projectId,Integer taskType,List<Integer> inchagerIds);
     Integer getProjectTaskCount(Integer companyId, Integer projectId,Integer taskType,List<Integer> inchagerIds);
 
 
-    List getTaskWithProjectName(@Param(Constants.WRAPPER) Wrapper wrapper, Integer pageStart, Integer pageSize);
+    List getTaskWithProjectName(@Param(Constants.WRAPPER) Wrapper wrapper, Integer pageStart, Integer pageSize,Integer companyId,String groupName);
 
 
     List recentSimpleList(Integer projectId, String userId);
     List recentSimpleList(Integer projectId, String userId);
 
 

+ 16 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/CompanyReportService.java

@@ -0,0 +1,16 @@
+package com.management.platform.service;
+
+import com.management.platform.entity.CompanyReport;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-08-03
+ */
+public interface CompanyReportService extends IService<CompanyReport> {
+
+}

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

@@ -43,7 +43,7 @@ public interface ProjectService extends IService<Project> {
                             String providerIds,
                             String providerIds,
                             String providerNames,
                             String providerNames,
                             HttpServletRequest request,
                             HttpServletRequest request,
-                            ProjectSeparate projectSeparate,boolean onlyChangeParticipate);
+                            ProjectSeparate projectSeparate,Double outputValue,boolean onlyChangeParticipate);
 
 
     HttpRespMsg deleteProject(Integer id, Integer force);
     HttpRespMsg deleteProject(Integer id, Integer force);
 
 
@@ -170,4 +170,12 @@ public interface ProjectService extends IService<Project> {
     HttpRespMsg getTimeCostByGroupProject(String startDate, String endDate, Integer pageIndex, Integer pageSize, Integer groupId, Integer projectId, HttpServletRequest request);
     HttpRespMsg getTimeCostByGroupProject(String startDate, String endDate, Integer pageIndex, Integer pageSize, Integer groupId, Integer projectId, HttpServletRequest request);
 
 
     HttpRespMsg exportGroupWithProjectTimeCost(String startDate, String endDate, Integer pageIndex, Integer pageSize, Integer groupId, Integer projectId, HttpServletRequest request);
     HttpRespMsg exportGroupWithProjectTimeCost(String startDate, String endDate, Integer pageIndex, Integer pageSize, Integer groupId, Integer projectId, HttpServletRequest request);
+
+    HttpRespMsg getProjectBaseCost(Integer projectId, HttpServletRequest request, Integer pageIndex, Integer pageSize);
+
+    HttpRespMsg exportProjectBaseCost(HttpServletRequest request);
+
+    HttpRespMsg getTimeCostByUserCustom(String startDate, String endDate, String subCustomName, Integer customId,HttpServletRequest request,String fieldName);
+
+    HttpRespMsg exportTimeCostByUserCustom(String startDate, String endDate, String subCustomName, Integer customId, HttpServletRequest request, String fieldName);
 }
 }

+ 3 - 3
src/main/java/com/management/platform/service/ExpenseTypeService.java

@@ -1,6 +1,6 @@
 package com.management.platform.service;
 package com.management.platform.service;
 
 
-import com.management.platform.entity.ExpenseType;
+import com.management.platform.entity.ReportForm;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.baomidou.mybatisplus.extension.service.IService;
 
 
 /**
 /**
@@ -9,8 +9,8 @@ import com.baomidou.mybatisplus.extension.service.IService;
  * </p>
  * </p>
  *
  *
  * @author Seyason
  * @author Seyason
- * @since 2022-07-28
+ * @since 2022-08-03
  */
  */
-public interface ExpenseTypeService extends IService<ExpenseType> {
+public interface ReportFormService extends IService<ReportForm> {
 
 
 }
 }

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

@@ -41,13 +41,13 @@ public interface ReportService extends IService<Report> {
                                String userId,
                                String userId,
                                HttpServletRequest request);
                                HttpServletRequest request);
 
 
-    HttpRespMsg approveReport(String reportIds, Integer isDepartment, HttpServletRequest request);
+    HttpRespMsg approveReport(String reportIds, Integer isDepartment, HttpServletRequest request,String evaluate);
 
 
     HttpRespMsg denyReport(String date, String reportIds, String reason, Integer isDepartment, HttpServletRequest request);
     HttpRespMsg denyReport(String date, String reportIds, String reason, Integer isDepartment, HttpServletRequest request);
 
 
     HttpRespMsg getMembList(String date, HttpServletRequest request);
     HttpRespMsg getMembList(String date, HttpServletRequest request);
 
 
-    HttpRespMsg batchApproveReport(String ids, Integer isDepartment, HttpServletRequest request);
+    HttpRespMsg batchApproveReport(String ids, Integer isDepartment, HttpServletRequest request,String evaluate);
     HttpRespMsg batchDenyReport(String ids, Integer isDepartment, String reason, HttpServletRequest request);
     HttpRespMsg batchDenyReport(String ids, Integer isDepartment, String reason, HttpServletRequest request);
 
 
     HttpRespMsg cancelReport(String userId, String reportIds, HttpServletRequest request);
     HttpRespMsg cancelReport(String userId, String reportIds, HttpServletRequest request);

+ 20 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/CompanyReportServiceImpl.java

@@ -0,0 +1,20 @@
+package com.management.platform.service.impl;
+
+import com.management.platform.entity.CompanyReport;
+import com.management.platform.mapper.CompanyReportMapper;
+import com.management.platform.service.CompanyReportService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-08-03
+ */
+@Service
+public class CompanyReportServiceImpl extends ServiceImpl<CompanyReportMapper, CompanyReport> implements CompanyReportService {
+
+}

+ 12 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/PermissionServiceImpl.java

@@ -60,6 +60,8 @@ public class PermissionServiceImpl extends ServiceImpl<PermissionMapper, Permiss
     private SysRoleModuleService sysRoleModuleService;
     private SysRoleModuleService sysRoleModuleService;
     @Resource
     @Resource
     private CompanyMapper companyMapper;
     private CompanyMapper companyMapper;
+    @Resource
+    private CompanyReportMapper companyReportMapper;
 
 
 
 
     //根据角色id获取角色列表
     //根据角色id获取角色列表
@@ -253,13 +255,19 @@ public class PermissionServiceImpl extends ServiceImpl<PermissionMapper, Permiss
         List<SysFunction> functionList = sysFunctionMapper.selectList(functionQueryWrapper);
         List<SysFunction> functionList = sysFunctionMapper.selectList(functionQueryWrapper);
         //勾选上角色选中的功能
         //勾选上角色选中的功能
         List<SysRoleFunction> roleFunctionList = sysRoleFunctionMapper.selectList(new QueryWrapper<SysRoleFunction>().eq("role_id", role));
         List<SysRoleFunction> roleFunctionList = sysRoleFunctionMapper.selectList(new QueryWrapper<SysRoleFunction>().eq("role_id", role));
+        //获取当前公司开启了得报表
+        List<CompanyReport> companyReportList = companyReportMapper.selectList(new QueryWrapper<CompanyReport>().eq("company_id", companyId));
+        List<Integer> formIds = companyReportList.stream().map(CompanyReport::getReportFormId).collect(Collectors.toList());
         List<Integer> funIds = roleFunctionList.stream().map(fun -> fun.getFunctionId()).collect(Collectors.toList());
         List<Integer> funIds = roleFunctionList.stream().map(fun -> fun.getFunctionId()).collect(Collectors.toList());
-        functionList.stream().forEach(fun -> {
+        List<SysFunction> resultFunList=new ArrayList<>();
+        for (SysFunction fun : functionList) {
             if (funIds.contains(fun.getId())) {
             if (funIds.contains(fun.getId())) {
                 fun.setChecked(true);
                 fun.setChecked(true);
             }
             }
-        });
-
+            if(fun.getReportFormId()==null||(fun.getReportFormId()!=null&&formIds.contains(fun.getReportFormId()))){
+                resultFunList.add(fun);
+            }
+        }
         for (SysModule module : moduleList) {
         for (SysModule module : moduleList) {
             if (module.getParentId() == null) {
             if (module.getParentId() == null) {
                 menuList.add(module);
                 menuList.add(module);
@@ -268,7 +276,7 @@ public class PermissionServiceImpl extends ServiceImpl<PermissionMapper, Permiss
                 module.setChecked(true);
                 module.setChecked(true);
             }
             }
             //赋予菜单对应功能列表
             //赋予菜单对应功能列表
-            module.setFunctionList(functionList.stream().filter(item -> item.getModuleId().equals(module.getId())).collect(Collectors.toList()));
+            module.setFunctionList(resultFunList.stream().filter(item -> item.getModuleId().equals(module.getId())).collect(Collectors.toList()));
         }
         }
         for (SysModule mainMenu : menuList) {
         for (SysModule mainMenu : menuList) {
             List<SysModule> list = moduleList.stream().filter(mod -> mainMenu.getId().equals(mod.getParentId())).collect(Collectors.toList());
             List<SysModule> list = moduleList.stream().filter(mod -> mainMenu.getId().equals(mod.getParentId())).collect(Collectors.toList());

+ 278 - 44
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -148,6 +148,11 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
     ProjectSeparateMapper projectSeparateMapper;
     ProjectSeparateMapper projectSeparateMapper;
     @Resource
     @Resource
     ProjectStageMapper projectStageMapper;
     ProjectStageMapper projectStageMapper;
+    @Resource
+    UserCustomMapper userCustomMapper;
+    @Resource
+    SubUserCustomMapper subUserCustomMapper;
+
 
 
     @Resource
     @Resource
     private HttpServletResponse response;
     private HttpServletResponse response;
@@ -258,7 +263,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             TimeType timeType = timeTypeMapper.selectById(companyId);
             TimeType timeType = timeTypeMapper.selectById(companyId);
             List<Integer> projectIds = projectList.stream().distinct().map(pl -> pl.getId()).collect(Collectors.toList());
             List<Integer> projectIds = projectList.stream().distinct().map(pl -> pl.getId()).collect(Collectors.toList());
             List<ProjectSeparate> projectSeparateList=new ArrayList<>();
             List<ProjectSeparate> projectSeparateList=new ArrayList<>();
-            if(companyId==936){
+            if(companyId==936||companyId==428){
                 if (projectIds.size() > 0) {
                 if (projectIds.size() > 0) {
                     projectSeparateList = projectSeparateMapper.selectList(new QueryWrapper<ProjectSeparate>().in("id", projectIds));
                     projectSeparateList = projectSeparateMapper.selectList(new QueryWrapper<ProjectSeparate>().in("id", projectIds));
                 }
                 }
@@ -319,7 +324,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     }
                     }
                     projectVO.setProviderInfoList(mapList);
                     projectVO.setProviderInfoList(mapList);
                 }
                 }
-                if(companyId==936){
+                if(companyId==936||companyId==428){
                         Optional<ProjectSeparate> first1 = projectSeparateList.stream().filter(ps -> ps.getId().equals(project.getId())).findFirst();
                         Optional<ProjectSeparate> first1 = projectSeparateList.stream().filter(ps -> ps.getId().equals(project.getId())).findFirst();
                         if(first1.isPresent()){
                         if(first1.isPresent()){
                             projectVO.setProjectSeparate(first1.get());
                             projectVO.setProjectSeparate(first1.get());
@@ -365,11 +370,11 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                                    String providerIds,
                                    String providerIds,
                                    String providerNames,
                                    String providerNames,
                                    HttpServletRequest request,
                                    HttpServletRequest request,
-                                   ProjectSeparate projectSeparate,boolean onlyChangeParticipate) {
+                                   ProjectSeparate projectSeparate,Double outputValue,boolean onlyChangeParticipate) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         User user = userMapper.selectById(request.getHeader("Token"));
         User user = userMapper.selectById(request.getHeader("Token"));
         Integer companyId = user.getCompanyId();
         Integer companyId = user.getCompanyId();
-
+        TimeType timeType = timeTypeMapper.selectById(user.getCompanyId());
         boolean isNew = true;
         boolean isNew = true;
         //检查负责人要在参与人中
         //检查负责人要在参与人中
         if (inchargerId != null) {
         if (inchargerId != null) {
@@ -423,6 +428,9 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                             .setTaskGpIncharge(taskGpIncharge)
                             .setTaskGpIncharge(taskGpIncharge)
                             .setProviderIds(providerIds)
                             .setProviderIds(providerIds)
                             .setProviderNames(providerNames);
                             .setProviderNames(providerNames);
+                    if(timeType.getOutputValueStatus()==1){
+                        project.setOutputValue(outputValue==null?0.00:outputValue);
+                    }
                     ProjectMain projectMain = projectMainMapper.selectById(projectMainId);
                     ProjectMain projectMain = projectMainMapper.selectById(projectMainId);
                     if(projectMain!=null){
                     if(projectMain!=null){
                         project.setCategory(projectMain.getCategoryId());
                         project.setCategory(projectMain.getCategoryId());
@@ -471,7 +479,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                         }
                         }
                     }
                     }
                     id = project.getId();
                     id = project.getId();
-                    if(companyId==936){
+                    if(companyId==936||companyId==428){
                         projectSeparate.setId(id);
                         projectSeparate.setId(id);
                         projectSeparateMapper.insert(projectSeparate);
                         projectSeparateMapper.insert(projectSeparate);
                     }
                     }
@@ -502,6 +510,9 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                         .setTaskGpIncharge(taskGpIncharge)
                         .setTaskGpIncharge(taskGpIncharge)
                         .setProviderIds(providerIds)
                         .setProviderIds(providerIds)
                         .setProviderNames(providerNames);
                         .setProviderNames(providerNames);
+                if(timeType.getOutputValueStatus()==1){
+                    p.setOutputValue(outputValue==null?0.00:outputValue);
+                }
                 if (category != null) {
                 if (category != null) {
                     ProjectCategory projectCategory = projectCategoryMapper.selectById(category);
                     ProjectCategory projectCategory = projectCategoryMapper.selectById(category);
                     if (projectCategory != null) {
                     if (projectCategory != null) {
@@ -509,7 +520,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                         p.setCategoryName(projectCategory.getName());
                         p.setCategoryName(projectCategory.getName());
                     }
                     }
                 }
                 }
-                if(companyId==936){
+                if(companyId==936||companyId==428){
                     //编辑之前的项目是否存在子表数据
                     //编辑之前的项目是否存在子表数据
                     ProjectSeparate separate = projectSeparateMapper.selectById(id);
                     ProjectSeparate separate = projectSeparateMapper.selectById(id);
                     projectSeparate.setId(id);
                     projectSeparate.setId(id);
@@ -1179,7 +1190,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         List<ProjectAuditor> auditorList = projectAuditorMapper.selectList(new QueryWrapper<ProjectAuditor>().eq("project_id", id));
         List<ProjectAuditor> auditorList = projectAuditorMapper.selectList(new QueryWrapper<ProjectAuditor>().eq("project_id", id));
         project.setAuditorList(auditorList);
         project.setAuditorList(auditorList);
         project.setAuditUserIds(auditorList.stream().map(ProjectAuditor::getAuditorId).collect(Collectors.toList()));
         project.setAuditUserIds(auditorList.stream().map(ProjectAuditor::getAuditorId).collect(Collectors.toList()));
-        if(project.getCompanyId()==936){
+        if(project.getCompanyId()==936||project.getCompanyId()==428){
             ProjectSeparate projectSeparate = projectSeparateMapper.selectById(id);
             ProjectSeparate projectSeparate = projectSeparateMapper.selectById(id);
             project.setProjectSeparate(projectSeparate);
             project.setProjectSeparate(projectSeparate);
         }
         }
@@ -2772,20 +2783,25 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     int i=0;
                     int i=0;
                     int k=0;
                     int k=0;
                     int c=0;
                     int c=0;
+                    int d=0;
                     if(timeType.getMainProjectState()==1){
                     if(timeType.getMainProjectState()==1){
                         mainNameCell = row.getCell(0);
                         mainNameCell = row.getCell(0);
-                        codeCell = row.getCell(1);
+                        if(company.getId()==428){
+                            projectCategorySubCell=row.getCell(1);
+                            d++;
+                        }
+                        codeCell = row.getCell(1+d);
                         if(company.getId()==936){
                         if(company.getId()==936){
-                            contractCell=row.getCell(2);
+                            contractCell=row.getCell(2+d);
                             c++;
                             c++;
                         }
                         }
-                        isPublicCell = row.getCell(2+c);
-                        nameCell = row.getCell(3+c);
-                        participatorCell = row.getCell(4+c);
-                        inchargerCell = row.getCell(5+c);
-                        levelCell = row.getCell(6+c);
+                        isPublicCell = row.getCell(2+c+d);
+                        nameCell = row.getCell(3+c+d);
+                        participatorCell = row.getCell(4+c+d);
+                        inchargerCell = row.getCell(5+c+d);
+                        levelCell = row.getCell(6+c+d);
                         if(company.getPackageCustomer()==1){
                         if(company.getPackageCustomer()==1){
-                            customerCell=row.getCell(7+c);
+                            customerCell=row.getCell(7+c+d);
                             i++;
                             i++;
                         }
                         }
                         if(company.getPackageProvider()==1){
                         if(company.getPackageProvider()==1){
@@ -2795,17 +2811,17 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                                 }
                                 }
                             }
                             }
                         }
                         }
-                        startDateCell = row.getCell(7+i+k+c);
-                        endDateCell = row.getCell(8+i+k+c);
-                        amountCell = row.getCell(9+i+k+c);
+                        startDateCell = row.getCell(7+i+k+c+d);
+                        endDateCell = row.getCell(8+i+k+c+d);
+                        amountCell = row.getCell(9+i+k+c+d);
                         if(company.getId()==936){
                         if(company.getId()==936){
-                            warrantyEndDateCell=row.getCell(10+i+k+c);
-                            warrantyStartDateCell=row.getCell(11+i+k+c);
-                            projectCategorySubCell=row.getCell(12+i+k+c);
-                            regionCell=row.getCell(13+i+k+c);
-                            buCell=row.getCell(14+i+k+c);
-                            stateCell=row.getCell(15+i+k+c);
-                            stageCell=row.getCell(16+i+k+c);
+                            warrantyEndDateCell=row.getCell(10+i+k+c+d);
+                            warrantyStartDateCell=row.getCell(11+i+k+c+d);
+                            projectCategorySubCell=row.getCell(12+i+k+c+d);
+                            regionCell=row.getCell(13+i+k+c+d);
+                            buCell=row.getCell(14+i+k+c+d);
+                            stateCell=row.getCell(15+i+k+c+d);
+                            stageCell=row.getCell(16+i+k+c+d);
                         }
                         }
                     }else {
                     }else {
                         codeCell = row.getCell(0);
                         codeCell = row.getCell(0);
@@ -2813,15 +2829,19 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                             contractCell=row.getCell(1);
                             contractCell=row.getCell(1);
                             c++;
                             c++;
                         }
                         }
-                        categoryCell = row.getCell(1+c);
-                        isPublicCell = row.getCell(2+c);
-                        nameCell = row.getCell(3+c);
-                        subNameCell = row.getCell(4+c);
-                        participatorCell = row.getCell(5+c);
-                        inchargerCell = row.getCell(6+c);
-                        levelCell = row.getCell(7+c);
+                        if(company.getId()==428){
+                            projectCategorySubCell=row.getCell(1+c);
+                            d++;
+                        }
+                        categoryCell = row.getCell(1+c+d);
+                        isPublicCell = row.getCell(2+c+d);
+                        nameCell = row.getCell(3+c+d);
+                        subNameCell = row.getCell(4+c+d);
+                        participatorCell = row.getCell(5+c+d);
+                        inchargerCell = row.getCell(6+c+d);
+                        levelCell = row.getCell(7+c+d);
                         if(company.getPackageCustomer()==1){
                         if(company.getPackageCustomer()==1){
-                            customerCell=row.getCell(8+c);
+                            customerCell=row.getCell(8+c+d);
                             i++;
                             i++;
                         }
                         }
                         if(company.getPackageProvider()==1){
                         if(company.getPackageProvider()==1){
@@ -2831,17 +2851,17 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                                 }
                                 }
                             }
                             }
                         }
                         }
-                        startDateCell = row.getCell(8+i+k+c);
-                        endDateCell = row.getCell(9+i+k+c);
-                        amountCell = row.getCell(10+i+k+c);
+                        startDateCell = row.getCell(8+i+k+c+d);
+                        endDateCell = row.getCell(9+i+k+c+d);
+                        amountCell = row.getCell(10+i+k+c+d);
                         if(company.getId()==936){
                         if(company.getId()==936){
-                            warrantyEndDateCell=row.getCell(11+i+k+c);
-                            warrantyStartDateCell=row.getCell(12+i+k+c);
-                            projectCategorySubCell=row.getCell(13+i+k+c);
-                            regionCell=row.getCell(14+i+k+c);
-                            buCell=row.getCell(15+i+k+c);
-                            stateCell=row.getCell(16+i+k+c);
-                            stageCell=row.getCell(17+i+k+c);
+                            warrantyEndDateCell=row.getCell(11+i+k+c+d);
+                            warrantyStartDateCell=row.getCell(12+i+k+c+d);
+                            projectCategorySubCell=row.getCell(13+i+k+c+d);
+                            regionCell=row.getCell(14+i+k+c+d);
+                            buCell=row.getCell(15+i+k+c+d);
+                            stateCell=row.getCell(16+i+k+c+d);
+                            stageCell=row.getCell(17+i+k+c+d);
                         }
                         }
                     }
                     }
                     if (codeCell != null)codeCell.setCellType(CellType.STRING);
                     if (codeCell != null)codeCell.setCellType(CellType.STRING);
@@ -3094,7 +3114,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     if(company.getId()==936){
                     if(company.getId()==936){
                         ProjectSeparate projectSeparate=new ProjectSeparate();
                         ProjectSeparate projectSeparate=new ProjectSeparate();
                         projectSeparate.setId(id);
                         projectSeparate.setId(id);
-                        if (warrantyStartDateCell !=null && !StringUtils.isEmpty(warrantyStartDateCell.getDateCellValue())) {
+                        if (warrantyStartDateCell !=null&& warrantyStartDateCell.getCellTypeEnum() == CellType.NUMERIC  && !StringUtils.isEmpty(warrantyStartDateCell.getDateCellValue())) {
                             projectSeparate.setWarrantyStartDate(LocalDate.parse(sdf.format(warrantyStartDateCell.getDateCellValue()), DateTimeFormatter.ofPattern("yyyy-MM-dd")));
                             projectSeparate.setWarrantyStartDate(LocalDate.parse(sdf.format(warrantyStartDateCell.getDateCellValue()), DateTimeFormatter.ofPattern("yyyy-MM-dd")));
                         }
                         }
                         if (warrantyEndDateCell !=null && warrantyEndDateCell.getCellTypeEnum() == CellType.NUMERIC && !StringUtils.isEmpty(warrantyEndDateCell.getDateCellValue())) {
                         if (warrantyEndDateCell !=null && warrantyEndDateCell.getCellTypeEnum() == CellType.NUMERIC && !StringUtils.isEmpty(warrantyEndDateCell.getDateCellValue())) {
@@ -3115,6 +3135,14 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                         }
                         }
                         projectSeparateMapper.insert(projectSeparate);
                         projectSeparateMapper.insert(projectSeparate);
                     }
                     }
+                    if(company.getId()==428){
+                        ProjectSeparate projectSeparate=new ProjectSeparate();
+                        projectSeparate.setId(id);
+                        if (projectCategorySubCell != null && !StringUtils.isEmpty(projectCategorySubCell.getStringCellValue())) {
+                            projectSeparate.setProjectCategorySub(projectCategorySubCell.getStringCellValue());
+                        }
+                        projectSeparateMapper.insert(projectSeparate);
+                    }
                     importCount++;
                     importCount++;
                     //参与人
                     //参与人
                     if(inchargerCell!=null){
                     if(inchargerCell!=null){
@@ -3290,6 +3318,9 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             headList.add("项目状态");
             headList.add("项目状态");
             headList.add("项目阶段");
             headList.add("项目阶段");
         }
         }
+        if(company.getId()==428){
+            headList.add("项目分组");
+        }
         List<List<String>> allList = new ArrayList<List<String>>();
         List<List<String>> allList = new ArrayList<List<String>>();
         allList.add(headList);
         allList.add(headList);
         String[] levelArray = new String[]{"正常","紧急","重要","重要且紧急","低风险","中风险","高风险"};
         String[] levelArray = new String[]{"正常","紧急","重要","重要且紧急","低风险","中风险","高风险"};
@@ -3390,6 +3421,15 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 }
                 }
                 rowData.add(projectVO.getCurrentStageName()==null?"":projectVO.getCurrentStageName());
                 rowData.add(projectVO.getCurrentStageName()==null?"":projectVO.getCurrentStageName());
             }
             }
+            if(company.getId()==428){
+                Optional<ProjectSeparate> first = projectSeparateList.stream().filter(ps -> ps.getId().equals(projectVO.getId())).findFirst();
+                if(first.isPresent()){
+                    ProjectSeparate projectSeparate = first.get();
+                    rowData.add(projectSeparate.getProjectCategorySub()==null?"":projectSeparate.getProjectCategorySub());
+                }else {
+                    rowData.add("");
+                }
+            }
             allList.add(rowData);
             allList.add(rowData);
         }
         }
 
 
@@ -5024,6 +5064,200 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         return httpRespMsg;
         return httpRespMsg;
     }
     }
 
 
+    @Override
+    public HttpRespMsg getProjectBaseCost(Integer projectId, HttpServletRequest request, Integer pageIndex, Integer pageSize) {
+        HttpRespMsg httpRespMsg=new HttpRespMsg();
+        User user = userMapper.selectById(request.getHeader("Token"));
+        Integer companyId = user.getCompanyId();
+        List<Project> projectList = projectMapper.selectList(new QueryWrapper<Project>().eq("company_id", companyId));
+        List<SysRichFunction> functionAllList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "全部项目成本基线表");
+        List<SysRichFunction> functionInchargeList = sysFunctionMapper.getRoleFunctions(user.getRoleId(), "负责项目成本基线表");
+        //判断查看权限
+        List<Integer> inchagerIds=null;
+        if(functionAllList.size()==0){
+            inchagerIds=new ArrayList<>();
+            if(functionInchargeList.size()>0){
+                List<Project> list = projectList.stream().filter(pl ->(pl.getInchargerId()==null?0:pl.getInchargerId()).equals(user.getId())).collect(Collectors.toList());
+                if(list!=null){
+                    List<Integer> collect = list.stream().map(li -> li.getId()).collect(Collectors.toList());
+                    inchagerIds.addAll(collect);
+                }
+            }else {
+                inchagerIds.add(-1);
+            }
+        }
+        QueryWrapper<Project> queryWrapper=new QueryWrapper<>();
+        if(projectId!=null){
+            queryWrapper.eq("id",projectId);
+        }
+        if(inchagerIds!=null){
+            queryWrapper.in("id",inchagerIds);
+        }
+        IPage<Project> projectIPage;
+        if(pageIndex!=null && pageSize!=null){
+            projectIPage= projectMapper.selectPage(new Page<>(pageIndex, pageSize),
+                    queryWrapper.eq("company_id",user.getCompanyId()));
+        }else {
+            projectIPage= projectMapper.selectPage(new Page<>(-1,-1),
+                    queryWrapper.eq("company_id",user.getCompanyId()));
+        }
+        List<Project> targetProjectList = projectIPage.getRecords();
+        List<Integer> collect = targetProjectList.stream().distinct().map(Project::getId).collect(Collectors.toList());
+        List<ProjectBasecost> projectBasecostList=new ArrayList<>();
+        if(collect!=null&&collect.size()>0){
+            projectBasecostList = projectBasecostMapper.selectList(new QueryWrapper<ProjectBasecost>().in("project_id", collect));
+        }
+        List<ProjectBasecostSetting> settingList = projectBasecostSettingMapper.selectList(new QueryWrapper<ProjectBasecostSetting>().eq("company_id", user.getCompanyId()));
+        List<String> titleList = settingList.stream().distinct().map(ProjectBasecostSetting::getName).collect(Collectors.toList());
+        for (Project project : targetProjectList) {
+            List<ProjectBasecost> basecostList = projectBasecostList.stream().filter(pb -> pb.getProjectId().equals(project.getId())).collect(Collectors.toList());
+            if(basecostList!=null){
+                project.setProjectBasecostList(basecostList);
+            }
+        }
+        HashMap map=new HashMap();
+        map.put("total",projectIPage.getTotal());
+        map.put("title",titleList);
+        map.put("result",targetProjectList);
+        httpRespMsg.data=map;
+        return httpRespMsg;
+    }
+
+    @Override
+    public HttpRespMsg exportProjectBaseCost(HttpServletRequest request) {
+        HttpRespMsg httpRespMsg=new HttpRespMsg();
+        HttpRespMsg projectBaseCost = getProjectBaseCost(null, request, null, null);
+        HashMap map= (HashMap) projectBaseCost.data;
+        List<Project> resultProjectList= (List<Project>) map.get("result");
+        List<List<String>> dataList=new ArrayList<>();
+        List<String> titleList= (List<String>) map.get("title");
+        List<String> firstTitle=new ArrayList<>();
+        firstTitle.add("项目编号");
+        firstTitle.add("项目名称");
+        firstTitle.addAll(titleList);
+        dataList.add(firstTitle);
+        for (Project project : resultProjectList) {
+            List<String> item=new ArrayList<>();
+            item.add(project.getProjectCode());
+            item.add(project.getProjectName());
+            for (String s : titleList) {
+                List<ProjectBasecost> projectBasecostList = project.getProjectBasecostList();
+                if(projectBasecostList!=null){
+                    Optional<ProjectBasecost> first = projectBasecostList.stream().filter(pb -> pb.getBaseName().equals(s)).findFirst();
+                    if(first.isPresent()){
+                        ProjectBasecost projectBasecost = first.get();
+                        item.add(String.valueOf(projectBasecost.getBaseAmount()));
+                    }else item.add("");
+                }
+            }
+            dataList.add(item);
+        }
+        //生成excel文件导出
+        String fileName = "项目成本基线表_"+System.currentTimeMillis();
+        String resp = ExcelUtil.exportGeneralExcelByTitleAndList(fileName , dataList, path);
+        httpRespMsg.data = resp;
+        return httpRespMsg;
+    }
+
+    @Override
+    public HttpRespMsg getTimeCostByUserCustom(String startDate, String endDate, String subCustomName, Integer customId,HttpServletRequest request,String fieldName) {
+        HttpRespMsg httpRespMsg=new HttpRespMsg();
+        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(), "查看成本统计");
+        //判断查看权限
+        if(functionAllList.size()==0){
+            deptIds=new ArrayList<>();
+            deptIds.add(-1);
+            if(functionDpartList.size()>0){
+                if(functionTimeList.size()>0||functionCostList.size()>0){
+                    List<Integer> collect = departmentList.stream().distinct().map(dm -> dm.getDepartmentId()).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);
+                    }
+                }
+            }
+        }
+        List<Map<String, Object>> list= projectMapper.getCostByUserCustom(startDate, endDate,companyId,deptIds,customId,subCustomName,fieldName);
+        BigDecimal totalCostMoney = new BigDecimal(0);
+        Map<String, Object> finalMap = new HashMap<>();
+        for (Map<String, Object> map : list) {
+            totalCostMoney=totalCostMoney.add((BigDecimal) map.get("costMoney"));
+        }
+        finalMap.put("totalCostMoney", totalCostMoney);
+        finalMap.put("list", list);
+        if(functionCostList.size()==0){
+            finalMap.put("totalCostMoney",null);
+            list.forEach(li->{
+                List<Map<String,Object>> mapList= (List<Map<String, Object>>) li.get("name");
+                mapList.forEach(ml->{
+                    ml.put("costMoney",null);
+                });
+            });
+        }
+        if(functionTimeList.size()==0){
+            list.forEach(li->{
+                List<Map<String,Object>> mapList= (List<Map<String, Object>>) li.get("name");
+                mapList.forEach(ml->{
+                    ml.put("cost",null);
+                });
+            });
+        }
+        httpRespMsg.data = finalMap;
+        return httpRespMsg;
+    }
+
+    @Override
+    public HttpRespMsg exportTimeCostByUserCustom(String startDate, String endDate, String subCustomName, Integer customId, HttpServletRequest request, String fieldName) {
+        HttpRespMsg httpRespMsg=new HttpRespMsg();
+        User targetUser = userMapper.selectById(request.getHeader("token"));
+        List<SysRichFunction> functionTimeList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看工时统计");
+        List<SysRichFunction> functionCostList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "查看成本统计");
+        HttpRespMsg msg = getTimeCostByUserCustom(startDate, endDate, null, customId, request, fieldName);
+        HashMap map= (HashMap) msg.data;
+        UserCustom userCustom = userCustomMapper.selectById(customId);
+        List<Map<String,Object>> resultList= (List<Map<String, Object>>) map.get("list");
+        List<List<String>> dataList=new ArrayList<>();
+        List<String> titleList=new ArrayList<>();
+        titleList.add(userCustom.getName());
+        if(functionTimeList.size()>0){
+            titleList.add("工时");
+        }
+        if(functionCostList.size()>0){
+            titleList.add("成本");
+        }
+        dataList.add(titleList);
+        for (Map<String, Object> stringObjectMap : resultList) {
+            List<String> item=new ArrayList<>();
+            item.add(String.valueOf(stringObjectMap.get("name")));
+            if(functionTimeList.size()>0){
+                item.add(String.valueOf(stringObjectMap.get("cost"))==null?"":String.valueOf(stringObjectMap.get("cost")));
+            }
+            if(functionCostList.size()>0){
+                item.add(String.valueOf(stringObjectMap.get("costMoney"))==null?"":String.valueOf(stringObjectMap.get("costMoney")));
+            }
+            dataList.add(item);
+        }
+        //生成excel文件导出
+        String fileName = userCustom.getName()+"工时成本统计_"+System.currentTimeMillis();
+        String resp = ExcelUtil.exportGeneralExcelByTitleAndList(fileName , dataList, path);
+        httpRespMsg.data = resp;
+
+        return httpRespMsg;
+    }
+
 
 
     private List<Department> getSubDepts(Department dp, List<Department> list) {
     private List<Department> getSubDepts(Department dp, List<Department> list) {
         List<Department> collect = list.stream().filter(l -> dp.getDepartmentId().equals(l.getSuperiorId())).collect(Collectors.toList());
         List<Department> collect = list.stream().filter(l -> dp.getDepartmentId().equals(l.getSuperiorId())).collect(Collectors.toList());

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

@@ -152,14 +152,14 @@ public class ProviderInfoServiceImpl extends ServiceImpl<ProviderInfoMapper, Pro
     public HttpRespMsg exportData(HttpServletRequest request) {
     public HttpRespMsg exportData(HttpServletRequest request) {
         User user = userMapper.selectById(request.getHeader("token"));
         User user = userMapper.selectById(request.getHeader("token"));
         List<List<String>> dataList=new ArrayList<>();
         List<List<String>> dataList=new ArrayList<>();
-        String[] titleString=new String[]{"供应商名称","供应商编码","分类","联系人","联系人电话","邮箱","地址","备注"};
+        String[] titleString=new String[]{"供应商编号","供应商名称","分类","联系人","联系电话","邮箱","地址","备注"};
         List<String> titleList = Arrays.asList(titleString);
         List<String> titleList = Arrays.asList(titleString);
         dataList.add(titleList);
         dataList.add(titleList);
         List<ProviderInfo> providerInfoList = providerInfoMapper.selectList(new QueryWrapper<ProviderInfo>().eq("company_id", user.getCompanyId()));
         List<ProviderInfo> providerInfoList = providerInfoMapper.selectList(new QueryWrapper<ProviderInfo>().eq("company_id", user.getCompanyId()));
         for (ProviderInfo providerInfo : providerInfoList) {
         for (ProviderInfo providerInfo : providerInfoList) {
             List<String> item=new ArrayList<>();
             List<String> item=new ArrayList<>();
-            item.add(providerInfo.getProviderName()==null?"":providerInfo.getProviderName());
             item.add(providerInfo.getProviderCode()==null?"":providerInfo.getProviderCode());
             item.add(providerInfo.getProviderCode()==null?"":providerInfo.getProviderCode());
+            item.add(providerInfo.getProviderName()==null?"":providerInfo.getProviderName());
             item.add(providerInfo.getProviderCategoryName()==null?"":providerInfo.getProviderCategoryName());
             item.add(providerInfo.getProviderCategoryName()==null?"":providerInfo.getProviderCategoryName());
             item.add(providerInfo.getContactName()==null?"":providerInfo.getContactName());
             item.add(providerInfo.getContactName()==null?"":providerInfo.getContactName());
             item.add(providerInfo.getContactPhone()==null?"":providerInfo.getContactPhone());
             item.add(providerInfo.getContactPhone()==null?"":providerInfo.getContactPhone());

+ 20 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportFormServiceImpl.java

@@ -0,0 +1,20 @@
+package com.management.platform.service.impl;
+
+import com.management.platform.entity.ReportForm;
+import com.management.platform.mapper.ReportFormMapper;
+import com.management.platform.service.ReportFormService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-08-03
+ */
+@Service
+public class ReportFormServiceImpl extends ServiceImpl<ReportFormMapper, ReportForm> implements ReportFormService {
+
+}

+ 44 - 9
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -1128,11 +1128,12 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
 
 
     //审核通过某天某人的某报告
     //审核通过某天某人的某报告
     @Override
     @Override
-    public HttpRespMsg approveReport(String reportIds, Integer isDepartment, HttpServletRequest request) {
+    public HttpRespMsg approveReport(String reportIds, Integer isDepartment, HttpServletRequest request,String evaluate) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         String token = request.getHeader("Token");
         String token = request.getHeader("Token");
         User user = userMapper.selectById(token);
         User user = userMapper.selectById(token);
         Company company = companyMapper.selectById(user.getCompanyId());
         Company company = companyMapper.selectById(user.getCompanyId());
+        TimeType timeType = timeTypeMapper.selectById(company.getId());
         final List<Integer> ids = ListUtil.convertIntegerIdsArrayToList(reportIds);
         final List<Integer> ids = ListUtil.convertIntegerIdsArrayToList(reportIds);
         if (company.getPackageEngineering() == 1) {
         if (company.getPackageEngineering() == 1) {
             //检查是否有专业进度待审核
             //检查是否有专业进度待审核
@@ -1148,6 +1149,9 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     if (report.getDepartmentAuditState() == 0){
                     if (report.getDepartmentAuditState() == 0){
                         report = new Report();
                         report = new Report();
                         report.setDepartmentAuditState(1);
                         report.setDepartmentAuditState(1);
+                        if(timeType.getNeedEvaluate()==1){
+                            report.setEvaluate(evaluate);
+                        }
                         reportMapper.update(report, new QueryWrapper<Report>().in("id", ids));
                         reportMapper.update(report, new QueryWrapper<Report>().in("id", ids));
                     }
                     }
                 }
                 }
@@ -1173,11 +1177,17 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                         if (count == 0) {
                         if (count == 0) {
                             Report report = new Report();
                             Report report = new Report();
                             report.setDepartmentAuditState(0);
                             report.setDepartmentAuditState(0);
+                            if(timeType.getNeedEvaluate()==1){
+                                report.setEvaluate(evaluate);
+                            }
                             reportMapper.update(report, new QueryWrapper<Report>().in("id", ids));
                             reportMapper.update(report, new QueryWrapper<Report>().in("id", ids));
                         }
                         }
                     }
                     }
                 } else {
                 } else {
                     Report report = reportMapper.selectById(ids.get(0));
                     Report report = reportMapper.selectById(ids.get(0));
+                    if(timeType.getNeedEvaluate()==1){
+                        report.setEvaluate(evaluate);
+                    }
                     //部门待审核,部门审核通过
                     //部门待审核,部门审核通过
                     if (report.getDepartmentAuditState() == 0) {
                     if (report.getDepartmentAuditState() == 0) {
                         report = new Report();
                         report = new Report();
@@ -1206,7 +1216,6 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             }
             }
         } else {
         } else {
             //先按照大的审核模式进行分类
             //先按照大的审核模式进行分类
-            TimeType timeType = timeTypeMapper.selectById(company.getId());
             Report oneReport = reportMapper.selectById(ids.get(0));
             Report oneReport = reportMapper.selectById(ids.get(0));
             int oldState = oneReport.getState();
             int oldState = oneReport.getState();
             String creatorId = oneReport.getCreatorId();
             String creatorId = oneReport.getCreatorId();
@@ -1223,6 +1232,9 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     return httpRespMsg;
                     return httpRespMsg;
                 }
                 }
                 for (Report r : reportList) {
                 for (Report r : reportList) {
+                    if(timeType.getNeedEvaluate()==1){
+                        r.setEvaluate(evaluate);
+                    }
                     if (r.getGroupAuditState() == 0) {
                     if (r.getGroupAuditState() == 0) {
                         r.setGroupAuditState(1);
                         r.setGroupAuditState(1);
                         r.setProjectAuditTime(LocalDateTime.now());
                         r.setProjectAuditTime(LocalDateTime.now());
@@ -1245,7 +1257,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                                 .orderByAsc("seq"));
                                 .orderByAsc("seq"));
                 if (settings.size() == 0) {
                 if (settings.size() == 0) {
                     //直接进行项目经理审核
                     //直接进行项目经理审核
-                    reportMapper.update(new Report().setState(1).setProjectAuditState(1).setProjectAuditTime(LocalDateTime.now()),
+                    reportMapper.update(new Report().setState(1).setProjectAuditState(1).setProjectAuditTime(LocalDateTime.now()).setEvaluate(timeType.getNeedEvaluate()==1?evaluate:null),
                             new QueryWrapper<Report>().in("id", ids));
                             new QueryWrapper<Report>().in("id", ids));
                 } else {
                 } else {
                     //按流程走
                     //按流程走
@@ -1256,17 +1268,20 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                         //最终审核了,审核通过
                         //最终审核了,审核通过
                         if (item.getIsDeptAudit() == 1) {
                         if (item.getIsDeptAudit() == 1) {
                             //如果最终是部门审核,直接通过
                             //如果最终是部门审核,直接通过
-                            reportMapper.update(new Report().setState(1).setProjectAuditTime(LocalDateTime.now()),
+                            reportMapper.update(new Report().setState(1).setProjectAuditTime(LocalDateTime.now()).setEvaluate(timeType.getNeedEvaluate()==1?evaluate:null),
                                     new QueryWrapper<Report>().in("id", ids));
                                     new QueryWrapper<Report>().in("id", ids));
                         } else {
                         } else {
                             //如果最终是项目审核,流程中的项目审核字段也要更新: state为最终审核状态,projectAuditState为阶段性的项目审核状态
                             //如果最终是项目审核,流程中的项目审核字段也要更新: state为最终审核状态,projectAuditState为阶段性的项目审核状态
-                            reportMapper.update(new Report().setState(1).setProjectAuditState(1).setProjectAuditTime(LocalDateTime.now()),
+                            reportMapper.update(new Report().setState(1).setProjectAuditState(1).setProjectAuditTime(LocalDateTime.now()).setEvaluate(timeType.getNeedEvaluate()==1?evaluate:null),
                                     new QueryWrapper<Report>().in("id", ids));
                                     new QueryWrapper<Report>().in("id", ids));
                         }
                         }
                     } else {
                     } else {
                         if (item.getIsDeptAudit() == 1) {
                         if (item.getIsDeptAudit() == 1) {
                             //当前是部门审核,获取审核部门id
                             //当前是部门审核,获取审核部门id
                             Report upR = new Report();
                             Report upR = new Report();
+                            if(timeType.getNeedEvaluate()==1){
+                                upR.setEvaluate(evaluate);
+                            }
                             Integer auditDeptid = item.getAuditDeptid();
                             Integer auditDeptid = item.getAuditDeptid();
                             for (int m=0;m<settings.size(); m++) {
                             for (int m=0;m<settings.size(); m++) {
                                 if (auditDeptid.equals(settings.get(m).getAuditDeptId()) && m < settings.size() -1) {
                                 if (auditDeptid.equals(settings.get(m).getAuditDeptId()) && m < settings.size() -1) {
@@ -1287,7 +1302,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                                     new QueryWrapper<Report>().in("id", ids));
                                     new QueryWrapper<Report>().in("id", ids));
                         } else {
                         } else {
                             //当前的先审核通过
                             //当前的先审核通过
-                            reportMapper.update(new Report().setProjectAuditState(1),
+                            reportMapper.update(new Report().setProjectAuditState(1).setEvaluate(timeType.getNeedEvaluate()==1?evaluate:null),
                                     new QueryWrapper<Report>().in("id", ids));
                                     new QueryWrapper<Report>().in("id", ids));
                             //项目审核的情况下,需要判断是否该员工当天所有项目是否都是项目经理审核通过了
                             //项目审核的情况下,需要判断是否该员工当天所有项目是否都是项目经理审核通过了
                             List<Report> sameUserSameDayOtherReports = reportMapper.selectList(new QueryWrapper<Report>()
                             List<Report> sameUserSameDayOtherReports = reportMapper.selectList(new QueryWrapper<Report>()
@@ -1298,6 +1313,9 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                             if (pendingNum == 0) {
                             if (pendingNum == 0) {
                                 //没有其他待审核的项目了,流程往下走
                                 //没有其他待审核的项目了,流程往下走
                                 Report upR = new Report();
                                 Report upR = new Report();
+                                if(timeType.getNeedEvaluate()==1){
+                                    upR.setEvaluate(evaluate);
+                                }
                                 for (int m=0;m<settings.size(); m++) {
                                 for (int m=0;m<settings.size(); m++) {
                                     if (settings.get(m).getIsDeptAudit()== 0) {//找到项目审核的那个节点
                                     if (settings.get(m).getIsDeptAudit()== 0) {//找到项目审核的那个节点
                                         AuditWorkflowTimeSetting nextNode = settings.get(m + 1);
                                         AuditWorkflowTimeSetting nextNode = settings.get(m + 1);
@@ -1771,10 +1789,11 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     }
     }
 
 
     @Override
     @Override
-    public HttpRespMsg batchApproveReport(String reportIds, Integer isDepartment, HttpServletRequest request) {
+    public HttpRespMsg batchApproveReport(String reportIds, Integer isDepartment, HttpServletRequest request,String evaluate) {
         String token = request.getHeader("Token");
         String token = request.getHeader("Token");
         User user = userMapper.selectById(token);
         User user = userMapper.selectById(token);
         Company company = companyMapper.selectById(user.getCompanyId());
         Company company = companyMapper.selectById(user.getCompanyId());
+        TimeType timeType = timeTypeMapper.selectById(company.getId());
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         final List<Integer> ids = ListUtil.convertIntegerIdsArrayToList(reportIds);
         final List<Integer> ids = ListUtil.convertIntegerIdsArrayToList(reportIds);
         if (company.getPackageEngineering() == 1) {
         if (company.getPackageEngineering() == 1) {
@@ -1790,6 +1809,9 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     if (report.getDepartmentAuditState() == 0) {
                     if (report.getDepartmentAuditState() == 0) {
                         report = new Report();
                         report = new Report();
                         report.setDepartmentAuditState(1);
                         report.setDepartmentAuditState(1);
+                        if(timeType.getNeedEvaluate()==1){
+                            report.setEvaluate(evaluate);
+                        }
                         reportMapper.update(report, new QueryWrapper<Report>().in("id", ids));
                         reportMapper.update(report, new QueryWrapper<Report>().in("id", ids));
                     }
                     }
                 }
                 }
@@ -1814,6 +1836,9 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                         if (count == 0) {
                         if (count == 0) {
                             Report report = new Report();
                             Report report = new Report();
                             report.setDepartmentAuditState(0);
                             report.setDepartmentAuditState(0);
+                            if(timeType.getNeedEvaluate()==1){
+                                report.setEvaluate(evaluate);
+                            }
                             reportMapper.update(report, new QueryWrapper<Report>().in("id", ids));
                             reportMapper.update(report, new QueryWrapper<Report>().in("id", ids));
                         }
                         }
                     }
                     }
@@ -1823,6 +1848,9 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     if (report.getDepartmentAuditState() == 0) {
                     if (report.getDepartmentAuditState() == 0) {
                         report = new Report();
                         report = new Report();
                         report.setDepartmentAuditState(1);
                         report.setDepartmentAuditState(1);
+                        if(timeType.getNeedEvaluate()==1){
+                            report.setEvaluate(evaluate);
+                        }
                         reportMapper.update(report, new QueryWrapper<Report>().in("id", ids));
                         reportMapper.update(report, new QueryWrapper<Report>().in("id", ids));
                     } else {
                     } else {
                         //直接进行项目经理审核
                         //直接进行项目经理审核
@@ -1835,10 +1863,11 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             }
             }
 
 
         } else {
         } else {
-            TimeType timeType = timeTypeMapper.selectById(company.getId());
             LocalDateTime now = LocalDateTime.now();
             LocalDateTime now = LocalDateTime.now();
-
             Report oneReport = reportMapper.selectById(ids.get(0));
             Report oneReport = reportMapper.selectById(ids.get(0));
+            if(timeType.getNeedEvaluate()==1){
+                oneReport.setEvaluate(evaluate);
+            }
             int oldState = oneReport.getState();
             int oldState = oneReport.getState();
             List<User> allUsers = null;
             List<User> allUsers = null;
             List<Report> allReports = null;
             List<Report> allReports = null;
@@ -1856,6 +1885,9 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                     return httpRespMsg;
                     return httpRespMsg;
                 }
                 }
                 for (Report r : reportList) {
                 for (Report r : reportList) {
+                    if(timeType.getNeedEvaluate()==1){
+                        r.setEvaluate(evaluate);
+                    }
                     if (r.getGroupAuditState() == 0) {
                     if (r.getGroupAuditState() == 0) {
                         r.setGroupAuditState(1);
                         r.setGroupAuditState(1);
                         r.setProjectAuditTime(LocalDateTime.now());
                         r.setProjectAuditTime(LocalDateTime.now());
@@ -1892,6 +1924,9 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
                         User auditTargetUser = allUsers.stream().filter(a->a.getId().equals(creatorId)).findFirst().get();
                         User auditTargetUser = allUsers.stream().filter(a->a.getId().equals(creatorId)).findFirst().get();
                         List<AuditWorkflowTimeSetting> deptSettings = settings.stream().filter(s->s.getDeptId().equals(auditTargetUser.getDepartmentId())).collect(Collectors.toList());
                         List<AuditWorkflowTimeSetting> deptSettings = settings.stream().filter(s->s.getDeptId().equals(auditTargetUser.getDepartmentId())).collect(Collectors.toList());
                         Report curReport = new Report().setId(rid);
                         Report curReport = new Report().setId(rid);
+                        if(timeType.getNeedEvaluate()==1){
+                            curReport.setEvaluate(evaluate);
+                        }
                         if (deptSettings.size() == 0) {
                         if (deptSettings.size() == 0) {
                             //直接进行项目经理审核
                             //直接进行项目经理审核
                             curReport.setState(1).setProjectAuditTime(now);
                             curReport.setState(1).setProjectAuditTime(now);

+ 29 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java

@@ -686,7 +686,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                 //新增
                 //新增
                 //电话号码列 检测重名
                 //电话号码列 检测重名
                 if (!StringUtils.isEmpty(phone) && userMapper.selectList(new QueryWrapper<User>().eq("phone", phone)).size() > 0) {
                 if (!StringUtils.isEmpty(phone) && userMapper.selectList(new QueryWrapper<User>().eq("phone", phone)).size() > 0) {
-                    httpRespMsg.setError("电话号码重复");
+                    httpRespMsg.setError("该电话号码已存在");
                 } else {
                 } else {
                     //只计算活跃的用户
                     //只计算活跃的用户
                     if (userMapper.selectCount(new QueryWrapper<User>()
                     if (userMapper.selectCount(new QueryWrapper<User>()
@@ -741,6 +741,11 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                 }
                 }
             } else {
             } else {
                 //修改
                 //修改
+                if (!StringUtils.isEmpty(phone) && userMapper.selectList(new QueryWrapper<User>().eq("phone", phone).ne("id", targetId)).size() > 0) {
+                    httpRespMsg.setError("该电话号码已存在");
+                    return httpRespMsg;
+                }
+
                 User oldUser = userMapper.selectById(targetId);
                 User oldUser = userMapper.selectById(targetId);
                 boolean salaryChange = false;
                 boolean salaryChange = false;
 
 
@@ -1296,6 +1301,9 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
             headCell.setCellValue("时薪");
             headCell.setCellValue("时薪");
             headCell.setCellStyle(headStyle);
             headCell.setCellStyle(headStyle);
             headCell = headRow.createCell(7);
             headCell = headRow.createCell(7);
+            headCell.setCellValue("证书");
+            headCell.setCellStyle(headStyle);
+            headCell = headRow.createCell(8);
             headCell.setCellValue("状态");
             headCell.setCellValue("状态");
             headCell.setCellStyle(headStyle);
             headCell.setCellStyle(headStyle);
 
 
@@ -1311,6 +1319,11 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
             }
             }
             List<User> data = userMapper.selectList(queryWrapper);
             List<User> data = userMapper.selectList(queryWrapper);
             List<Department> deptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", user.getCompanyId()));
             List<Department> deptList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", user.getCompanyId()));
+            List<String> collect = data.stream().distinct().map(da -> da.getId()).collect(Collectors.toList());
+            List<UserCert> userCertList=new ArrayList<>();
+            if(collect!=null&&!StringUtils.isEmpty(data)){
+                userCertList = userCertMapper.selectList(new QueryWrapper<UserCert>().in("user_id", collect));
+            }
             for (User item : data) {
             for (User item : data) {
                 if (item.getDepartmentId() != 0) {
                 if (item.getDepartmentId() != 0) {
                     Optional<Department> first = deptList.stream().filter(d -> d.getDepartmentId().equals(item.getDepartmentId())).findFirst();
                     Optional<Department> first = deptList.stream().filter(d -> d.getDepartmentId().equals(item.getDepartmentId())).findFirst();
@@ -1327,8 +1340,21 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
                 row.createCell(4).setCellValue(item.getDepartmentName());
                 row.createCell(4).setCellValue(item.getDepartmentName());
                 row.createCell(5).setCellValue(item.getMonthCost()==null? 0 : item.getMonthCost().intValue());
                 row.createCell(5).setCellValue(item.getMonthCost()==null? 0 : item.getMonthCost().intValue());
                 row.createCell(6).setCellValue(item.getCost() == null?0.0 : item.getCost().doubleValue());
                 row.createCell(6).setCellValue(item.getCost() == null?0.0 : item.getCost().doubleValue());
-                row.createCell(7).setCellValue(item.getIsActive()==1?"正常":"已停用");
-
+                List<UserCert> certList = userCertList.stream().distinct().filter(uc -> uc.getUserId().equals(item.getId())).collect(Collectors.toList());
+                if(certList.size()>0){
+                    String s="";
+                    for (int i = 0; i < certList.size(); i++) {
+                        if(i<certList.size()-1){
+                            s+=certList.get(i).getCertName()+" "+certList.get(i).getCertDate()+",";
+                        }else {
+                            s+=certList.get(i).getCertName()+" "+certList.get(i).getCertDate();
+                        }
+                    }
+                    row.createCell(7).setCellValue(s);
+                }else {
+                    row.createCell(7).setCellValue("");
+                }
+                row.createCell(8).setCellValue(item.getIsActive()==1?"正常":"已停用");
                 rowNum++;
                 rowNum++;
             }
             }
             //生成Excel文件
             //生成Excel文件

+ 24 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/WxCorpInfoServiceImpl.java

@@ -519,6 +519,7 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                                     if ("00:00".equals(leaveStart)) {
                                     if ("00:00".equals(leaveStart)) {
                                         leaveStart = baseMorningStart;
                                         leaveStart = baseMorningStart;
                                     }
                                     }
+                                    System.out.println("leaveStart=="+leaveStart+", leaveEnd="+leaveEnd);
                                 } else {
                                 } else {
                                     if (showLog)System.out.println("跨天请假@@@@");
                                     if (showLog)System.out.println("跨天请假@@@@");
                                     if (showLog)System.out.println("当天=="+localDate+", sDate=" + sDate+", 比较="+(localDate.isEqual(sDate)));
                                     if (showLog)System.out.println("当天=="+localDate+", sDate=" + sDate+", 比较="+(localDate.isEqual(sDate)));
@@ -609,7 +610,7 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                                 if (leaveTime == null) {
                                 if (leaveTime == null) {
                                     leaveTime = 0.0;
                                     leaveTime = 0.0;
                                 }
                                 }
-                                ct.setAskLeaveTime(leaveTime + DateTimeUtil.getHoursFromSeconds(spItem.getInteger("duration")));
+                                ct.setAskLeaveTime(leaveTime + convertDayTimeToHours(DateTimeUtil.getHoursFromSeconds(spItem.getInteger("duration"))));
                                 break;
                                 break;
                             case 2://补卡
                             case 2://补卡
                             case 3://出差
                             case 3://出差
@@ -619,7 +620,7 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                                 if (outdoorTime == null) {
                                 if (outdoorTime == null) {
                                     outdoorTime = 0.0;
                                     outdoorTime = 0.0;
                                 }
                                 }
-                                double otTime = DateTimeUtil.getHoursFromSeconds(spItem.getInteger("duration"));
+                                double otTime = convertDayTimeToHours(DateTimeUtil.getHoursFromSeconds(spItem.getInteger("duration")));
                                 if (otTime > 8.0) {
                                 if (otTime > 8.0) {
                                     otTime = 8.0;
                                     otTime = 8.0;
                                 }
                                 }
@@ -667,6 +668,10 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                     if (ct.getAskLeaveTime() != null && ct.getAskLeaveTime() == 24.0) {
                     if (ct.getAskLeaveTime() != null && ct.getAskLeaveTime() == 24.0) {
                         ct.setAskLeaveTime(8.0);//24小时为一天,修正为8小时
                         ct.setAskLeaveTime(8.0);//24小时为一天,修正为8小时
                     }
                     }
+                    if (ct.getAskLeaveTime() > 8.0) {
+                        ct.setAskLeaveTime(8.0);//超过8小时都以8小时计算
+                    }
+                    if (showLog)System.out.println("校正后请假时长="+ct.getAskLeaveTime());
                     //如果有出差的,但是没有打卡,则用出差的时间作为timeDelta
                     //如果有出差的,但是没有打卡,则用出差的时间作为timeDelta
                     if (timeDelta < 8.0 && ct.getOutdoorTime() > 0) {
                     if (timeDelta < 8.0 && ct.getOutdoorTime() > 0) {
                         timeDelta += ct.getOutdoorTime();
                         timeDelta += ct.getOutdoorTime();
@@ -675,6 +680,13 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
                     if (workHours < 0) {
                     if (workHours < 0) {
                         workHours = 0;
                         workHours = 0;
                     }
                     }
+                    if (ct.getAskLeaveTime() >= 8.0) {
+                        //全天请假了,就不算打卡工作时长了。
+                        workHours = 0;
+                        //重新校正开始时间和结束时间
+                        ct.setStartTime(baseMorningStart);
+                        ct.setEndTime(baseAfternoonEnd);
+                    }
                     if (showLog)System.out.println("工作时长=="+workHours);
                     if (showLog)System.out.println("工作时长=="+workHours);
                     ct.setWorkHours(DateTimeUtil.getHoursFromDouble(workHours));
                     ct.setWorkHours(DateTimeUtil.getHoursFromDouble(workHours));
 //                        if (regular_work_sec < standard_work_sec) {
 //                        if (regular_work_sec < standard_work_sec) {
@@ -711,4 +723,14 @@ public class WxCorpInfoServiceImpl extends ServiceImpl<WxCorpInfoMapper, WxCorpI
             }
             }
         }
         }
     }
     }
+
+    private double convertDayTimeToHours(double d) {
+        if (d == 12) {
+            return 4.0;
+        } else if (d == 24) {
+            return 8.0;
+        } else {
+            return d;
+        }
+    }
 }
 }

+ 4 - 6
src/main/resources/mapper/ExpenseTypeMapper.xml

@@ -1,18 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.management.platform.mapper.ExpenseTypeMapper">
+<mapper namespace="com.management.platform.mapper.CompanyReportMapper">
 
 
     <!-- 通用查询映射结果 -->
     <!-- 通用查询映射结果 -->
-    <resultMap id="BaseResultMap" type="com.management.platform.entity.ExpenseType">
-        <id column="id" property="id" />
-        <result column="main_type" property="mainType" />
-        <result column="type_name" property="typeName" />
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.CompanyReport">
         <result column="company_id" property="companyId" />
         <result column="company_id" property="companyId" />
+        <result column="report_form_id" property="reportFormId" />
     </resultMap>
     </resultMap>
 
 
     <!-- 通用查询结果列 -->
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
     <sql id="Base_Column_List">
-        id, main_type, type_name, company_id
+        company_id, report_form_id
     </sql>
     </sql>
 
 
 </mapper>
 </mapper>

File diff suppressed because it is too large
+ 27 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ProjectMapper.xml


+ 16 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportFormMapper.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.management.platform.mapper.ReportFormMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.ReportForm">
+        <id column="id" property="id" />
+        <result column="report_form_name" property="reportFormName" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, report_form_name
+    </sql>
+
+</mapper>

File diff suppressed because it is too large
+ 7 - 6
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportMapper.xml


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

@@ -23,6 +23,7 @@
         <result column="sync_corpwx_time" property="syncCorpwxTime" />
         <result column="sync_corpwx_time" property="syncCorpwxTime" />
         <result column="finance_audit" property="financeAudit" />
         <result column="finance_audit" property="financeAudit" />
         <result column="remarks" property="remarks" />
         <result column="remarks" property="remarks" />
+        <result column="report_form_id" property="reportFormId" />
     </resultMap>
     </resultMap>
     <resultMap id="BaseResultMap1" type="com.management.platform.entity.vo.SysRichFunction">
     <resultMap id="BaseResultMap1" type="com.management.platform.entity.vo.SysRichFunction">
         <id column="id" property="id" />
         <id column="id" property="id" />
@@ -35,7 +36,7 @@
     </resultMap>
     </resultMap>
     <!-- 通用查询结果列 -->
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
     <sql id="Base_Column_List">
-        id, name, icon, code, module_id, seq, use_state, package_time, package_project, package_oa, package_expense, package_customer, package_engineering, package_contract, package_etimecard, package_finance, sync_corpwx_time, finance_audit, remarks
+        id, name, icon, code, module_id, seq, use_state, package_time, package_project, package_oa, package_expense, package_customer, package_engineering, package_contract, package_etimecard, package_finance, sync_corpwx_time, finance_audit, remarks, report_form_id
     </sql>
     </sql>
     <select id="getRoleFunctions" resultMap="BaseResultMap1" >
     <select id="getRoleFunctions" resultMap="BaseResultMap1" >
         select sys_function.id, sys_function.name, sys_function.icon, sys_function.code, sys_function.module_id, sys_function.seq, sys_module.name as module_name
         select sys_function.id, sys_function.name, sys_function.icon, sys_function.code, sys_function.module_id, sys_function.seq, sys_module.name as module_name

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

@@ -87,6 +87,7 @@
         <result column="project_name" property="projectName" />
         <result column="project_name" property="projectName" />
         <result column="start_date" property="startDate" />
         <result column="start_date" property="startDate" />
         <result column="stages_name" property="stagesName" />
         <result column="stages_name" property="stagesName" />
+        <result column="project_category_sub" property="projectCategorySub" />
     </resultMap>
     </resultMap>
 
 
     <!-- 通用查询结果列 -->
     <!-- 通用查询结果列 -->
@@ -197,9 +198,21 @@
     </select>
     </select>
 
 
     <select id="getTaskWithProjectName" resultMap="RichResultMap">
     <select id="getTaskWithProjectName" resultMap="RichResultMap">
-        SELECT task.*, project.`project_name`, stages.stages_name FROM task LEFT JOIN project ON project.id = task.`project_id`
+        SELECT task.*, project.`project_name`, stages.stages_name
+        <if test="companyId==428">
+            ,ps.project_category_sub
+        </if>
+        FROM task LEFT JOIN project ON project.id = task.`project_id`
         left join stages on stages.id = task.stages_id
         left join stages on stages.id = task.stages_id
+        <if test="companyId==428">
+            left join project_separate ps on ps.id=task.project_id
+        </if>
         ${ew.customSqlSegment}
         ${ew.customSqlSegment}
+        <if test="companyId==428">
+            <if test="groupName!=null and groupName!=''">
+                and ps.project_category_sub=#{groupName}
+            </if>
+        </if>
         ORDER BY task.indate desc
         ORDER BY task.indate desc
         <if test="pageStart != null and pageSize != null">
         <if test="pageStart != null and pageSize != null">
             limit #{pageStart}, #{pageSize}
             limit #{pageStart}, #{pageSize}

File diff suppressed because it is too large
+ 4 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/TimeTypeMapper.xml


+ 73 - 0
fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/controller/CompanyReportController.java

@@ -0,0 +1,73 @@
+package com.management.platform.controller;
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.management.platform.entity.CompanyReport;
+import com.management.platform.entity.ReportForm;
+import com.management.platform.service.CompanyReportService;
+import com.management.platform.service.ReportFormService;
+import com.management.platform.util.HttpRespMsg;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-08-03
+ */
+@RestController
+@RequestMapping("/company-report")
+public class CompanyReportController {
+    @Resource
+    private CompanyReportService companyReportService;
+    @Resource
+    private ReportFormService reportFormService;
+
+
+    @RequestMapping("/list")
+    public HttpRespMsg list(Integer companyId){
+        HttpRespMsg httpRespMsg=new HttpRespMsg();
+        List<CompanyReport> companyReportList = companyReportService.list(new QueryWrapper<CompanyReport>().eq("company_id", companyId));
+        List<ReportForm> reportFormList = reportFormService.list();
+        for (ReportForm reportForm : reportFormList) {
+            boolean b = companyReportList.stream().anyMatch(cr -> cr.getReportFormId().equals(reportForm.getId()));
+            if(b){
+                reportForm.setOwned(1);
+            }
+        }
+        httpRespMsg.data=reportFormList;
+        return httpRespMsg;
+    }
+
+    @RequestMapping("/update")
+    public HttpRespMsg update(Integer companyId,String formIds){
+        HttpRespMsg httpRespMsg=new HttpRespMsg();
+        companyReportService.remove(new QueryWrapper<CompanyReport>().eq("company_id", companyId));
+        List<CompanyReport> updateList=new ArrayList<>();
+        if(formIds!=null&&!StringUtils.isEmpty(formIds)){
+            String[] split = formIds.split(",");
+            List<String> list = Arrays.asList(split);
+            for (String s : list) {
+                CompanyReport companyReport=new CompanyReport();
+                companyReport.setCompanyId(companyId);
+                companyReport.setReportFormId(Integer.parseInt(s));
+                updateList.add(companyReport);
+            }
+            if(!companyReportService.saveBatch(updateList)){
+                httpRespMsg.setError("更新失败");
+            }
+        }
+        return httpRespMsg;
+    }
+
+}
+

+ 44 - 0
fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/entity/CompanyReport.java

@@ -0,0 +1,44 @@
+package com.management.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-08-03
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class CompanyReport extends Model<CompanyReport> {
+
+    private static final long serialVersionUID=1L;
+
+    /**
+     * 公司id
+     */
+    @TableField("company_id")
+    private Integer companyId;
+
+    /**
+     * 报表id
+     */
+    @TableField("report_form_id")
+    private Integer reportFormId;
+
+
+    @Override
+    protected Serializable pkVal() {
+        return null;
+    }
+
+}

+ 11 - 19
fhKeeper/formulahousekeeper/user/src/main/java/com/hssx/user/entity/UserPermission.java

@@ -1,9 +1,8 @@
-package com.hssx.user.entity;
+package com.management.platform.entity;
 
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import com.baomidou.mybatisplus.extension.activerecord.Model;
 import lombok.Data;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.EqualsAndHashCode;
@@ -13,37 +12,30 @@ import java.io.Serializable;
 
 
 /**
 /**
  * <p>
  * <p>
- *
+ * 
  * </p>
  * </p>
  *
  *
- * @author Reiskuchen
- * @since 2019-11-04
+ * @author Seyason
+ * @since 2022-08-03
  */
  */
 @Data
 @Data
 @EqualsAndHashCode(callSuper = false)
 @EqualsAndHashCode(callSuper = false)
 @Accessors(chain = true)
 @Accessors(chain = true)
-@TableName("user_permission")
-public class UserPermission extends Model<UserPermission> {
+public class ReportForm extends Model<ReportForm> {
 
 
-    private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID=1L;
 
 
-    /**
-     * 角色权限关联表主键
-     */
     @TableId(value = "id", type = IdType.AUTO)
     @TableId(value = "id", type = IdType.AUTO)
     private Integer id;
     private Integer id;
 
 
     /**
     /**
-     * 用户id
+     * 报表名称
      */
      */
-    @TableField("user_id")
-    private Integer userId;
+    @TableField("report_form_name")
+    private String reportFormName;
 
 
-    /**
-     * 权限id
-     */
-    @TableField("permission_id")
-    private Integer permissionId;
+    @TableField(exist = false)
+    private Integer owned;
 
 
 
 
     @Override
     @Override

+ 16 - 0
fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/mapper/CompanyReportMapper.java

@@ -0,0 +1,16 @@
+package com.management.platform.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.management.platform.entity.CompanyReport;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-08-03
+ */
+public interface CompanyReportMapper extends BaseMapper<CompanyReport> {
+
+}

+ 3 - 3
src/main/java/com/management/platform/mapper/ExpenseTypeMapper.java

@@ -1,7 +1,7 @@
 package com.management.platform.mapper;
 package com.management.platform.mapper;
 
 
-import com.management.platform.entity.ExpenseType;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.management.platform.entity.ReportForm;
 
 
 /**
 /**
  * <p>
  * <p>
@@ -9,8 +9,8 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * </p>
  * </p>
  *
  *
  * @author Seyason
  * @author Seyason
- * @since 2022-07-28
+ * @since 2022-08-03
  */
  */
-public interface ExpenseTypeMapper extends BaseMapper<ExpenseType> {
+public interface ReportFormMapper extends BaseMapper<ReportForm> {
 
 
 }
 }

+ 17 - 0
fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/service/CompanyReportService.java

@@ -0,0 +1,17 @@
+package com.management.platform.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.management.platform.entity.CompanyReport;
+
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-08-03
+ */
+public interface CompanyReportService extends IService<CompanyReport> {
+
+}

+ 16 - 0
fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/service/ReportFormService.java

@@ -0,0 +1,16 @@
+package com.management.platform.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.management.platform.entity.ReportForm;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-08-03
+ */
+public interface ReportFormService extends IService<ReportForm> {
+
+}

+ 20 - 0
fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/service/impl/CompanyReportServiceImpl.java

@@ -0,0 +1,20 @@
+package com.management.platform.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.management.platform.entity.CompanyReport;
+import com.management.platform.mapper.CompanyReportMapper;
+import com.management.platform.service.CompanyReportService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-08-03
+ */
+@Service
+public class CompanyReportServiceImpl extends ServiceImpl<CompanyReportMapper, CompanyReport> implements CompanyReportService {
+
+}

+ 20 - 0
fhKeeper/formulahousekeeper/ops-platform/src/main/java/com/management/platform/service/impl/ReportFormServiceImpl.java

@@ -0,0 +1,20 @@
+package com.management.platform.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.management.platform.entity.ReportForm;
+import com.management.platform.mapper.ReportFormMapper;
+import com.management.platform.service.ReportFormService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author Seyason
+ * @since 2022-08-03
+ */
+@Service
+public class ReportFormServiceImpl extends ServiceImpl<ReportFormMapper, ReportForm> implements ReportFormService {
+
+}

+ 16 - 0
fhKeeper/formulahousekeeper/ops-platform/src/main/resources/mapper/CompanyReportMapper.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.management.platform.mapper.CompanyReportMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.CompanyReport">
+        <result column="company_id" property="companyId" />
+        <result column="report_form_id" property="reportFormId" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        company_id, report_form_id
+    </sql>
+
+</mapper>

+ 16 - 0
fhKeeper/formulahousekeeper/ops-platform/src/main/resources/mapper/ReportFormMapper.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.management.platform.mapper.ReportFormMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.management.platform.entity.ReportForm">
+        <id column="id" property="id" />
+        <result column="report_form_name" property="reportFormName" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, report_form_name
+    </sql>
+
+</mapper>

+ 44 - 58
fhKeeper/formulahousekeeper/timesheet_h5/src/views/edit/index.vue

@@ -29,7 +29,7 @@
                 @click="copyProject(index)" style="border: 1px solid #20a0ff;padding:5px;"
                 @click="copyProject(index)" style="border: 1px solid #20a0ff;padding:5px;"
                  icon="plus" type="default" ><span style="color:#666;padding: 0 5px;">复制项目</span></van-tag> -->
                  icon="plus" type="default" ><span style="color:#666;padding: 0 5px;">复制项目</span></van-tag> -->
                 
                 
-                <van-tag v-if="index>0&&item.canEdit" color="#fff" 
+                <van-tag v-if="index>0&&canEdit" color="#fff" 
                 @click="delPro(index)" style="border: 1px solid #ff0000;padding:5px;margin-left:10px;"
                 @click="delPro(index)" style="border: 1px solid #ff0000;padding:5px;margin-left:10px;"
                  icon="plus" type="default" ><span style="color:#666;padding: 0 5px;">删除</span></van-tag>
                  icon="plus" type="default" ><span style="color:#666;padding: 0 5px;">删除</span></van-tag>
                 </div>
                 </div>
@@ -91,13 +91,13 @@
                     </van-popup>
                     </van-popup>
 
 
                     <!-- 自定义数值 -->
                     <!-- 自定义数值 -->
-                    <van-field v-if="user.timeType.customDataActive==1" type="number" :disabled="!item.canEdit" v-model="item.customData" :label="user.timeType.customDataName" placeholder="请输入数字" :rules="user.timeType.customDataStatus == 1 ? [{ required: true, message: '请输入' + user.timeType.customDataName }] : []"></van-field> 
+                    <van-field v-if="user.timeType.customDataActive==1" type="number" :disabled="!canEdit" v-model="item.customData" :label="user.timeType.customDataName" placeholder="请输入数字" :rules="user.timeType.customDataStatus == 1 ? [{ required: true, message: '请输入' + user.timeType.customDataName }] : []"></van-field> 
                     <!-- 自定义文本 -->
                     <!-- 自定义文本 -->
-                    <van-field v-if="user.timeType.customTextActive==1" :disabled="!item.canEdit" v-model="item.customText" :label="user.timeType.customTextName" placeholder="请输入" maxlength="1000" :rules="user.timeType.customTextStatus ? [{ required: true, message: '请选择' + user.timeType.customTextName }] : []" rows="2" type="textarea" show-word-limit autosize></van-field> 
+                    <van-field v-if="user.timeType.customTextActive==1" :disabled="!canEdit" v-model="item.customText" :label="user.timeType.customTextName" placeholder="请输入" maxlength="1000" :rules="user.timeType.customTextStatus ? [{ required: true, message: '请选择' + user.timeType.customTextName }] : []" rows="2" type="textarea" show-word-limit autosize></van-field> 
 
 
                     <van-cell title="专业进度" v-if="user.company.packageEngineering == 1">
                     <van-cell title="专业进度" v-if="user.company.packageEngineering == 1">
                     </van-cell>
                     </van-cell>
-                    <van-field :disabled="!item.canEdit"
+                    <van-field :disabled="!canEdit"
                         type="number"  :name="'progress_'+pItem.professionId" input-align="right"  
                         type="number"  :name="'progress_'+pItem.professionId" input-align="right"  
                         v-for="pItem in item.professionProgress" :key="pItem.professionId"
                         v-for="pItem in item.professionProgress" :key="pItem.professionId"
                         :label="'--    '+pItem.professionName"  
                         :label="'--    '+pItem.professionName"  
@@ -106,11 +106,11 @@
                         <van-stepper v-model="pItem.progress" integer min="0" max="100" />%
                         <van-stepper v-model="pItem.progress" integer min="0" max="100" />%
                     </template>
                     </template>
                     </van-field>
                     </van-field>
-                    <van-field v-if="user.company.packageProject == 1"  readonly name="taskId" :value="item.taskName" label="关联任务" placeholder="请选择关联任务" @click="clickPickerTask(index,item)"
+                    <van-field v-if="user.company.packageProject == 1"  readonly name="taskId" :value="item.taskName" label="关联任务" placeholder="请选择关联任务" @click="clickPickerTask(index)"
                     ></van-field>
                     ></van-field>
                     <van-field name="taskFinish" label="是否已完成" v-if="item.taskId != null">
                     <van-field name="taskFinish" label="是否已完成" v-if="item.taskId != null">
                         <template #input>
                         <template #input>
-                            <van-checkbox :disabled="!item.canEdit" v-model="item.taskFinish" shape="square">已完成</van-checkbox>
+                            <van-checkbox :disabled="!canEdit" v-model="item.taskFinish" shape="square">已完成</van-checkbox>
                         </template>
                         </template>
                         
                         
                     </van-field>
                     </van-field>
@@ -124,7 +124,7 @@
                     <!-- 常规选择时间的方式 -->
                     <!-- 常规选择时间的方式 -->
                     <!-- 全天上下午模式 -->
                     <!-- 全天上下午模式 -->
                     <div v-if="reportTimeType.multiWorktime==0">
                     <div v-if="reportTimeType.multiWorktime==0">
-                    <van-field v-if="reportTimeType.type < 2" readonly clickable  :value="reportTimeType.type==0?item.label:(parseFloat(item.workingTime).toFixed(1)+'h')" label="工作时长" placeholder="请选择工作时长(小时)" @click="clickTimePicker(index,item)"
+                    <van-field v-if="reportTimeType.type < 2" readonly clickable  :value="reportTimeType.type==0?item.label:(parseFloat(item.workingTime).toFixed(1)+'h')" label="工作时长" placeholder="请选择工作时长(小时)" @click="clickTimePicker(index)"
                     :rules="[{ required: true, message: '请选择工作时长' }]"/>
                     :rules="[{ required: true, message: '请选择工作时长' }]"/>
                     <van-popup v-model="showPickerTime" position="bottom">
                     <van-popup v-model="showPickerTime" position="bottom">
                         <van-picker show-toolbar :columns="timeType"  value-key="label" @confirm="choseTimePick" @cancel="showPickerTime = false" />
                         <van-picker show-toolbar :columns="timeType"  value-key="label" @confirm="choseTimePick" @cancel="showPickerTime = false" />
@@ -139,7 +139,7 @@
 
 
                     <!-- 时间段选择模式 -->
                     <!-- 时间段选择模式 -->
                     <van-field readonly v-if="reportTimeType.type == 2" clickable name="datetimePicker" :value="item.startTime" label="开始时间" placeholder="点击选择时间" 
                     <van-field readonly v-if="reportTimeType.type == 2" clickable name="datetimePicker" :value="item.startTime" label="开始时间" placeholder="点击选择时间" 
-                        @click="item.canEdit?showStartTime = true:''" :disabled="!item.canEdit"
+                        @click="canEdit?showStartTime = true:''" :disabled="!canEdit"
                         :rules="[{ required: true, message: '请选择开始时间' }]"
                         :rules="[{ required: true, message: '请选择开始时间' }]"
                           />
                           />
                     <van-popup v-model="showStartTime" position="bottom">
                     <van-popup v-model="showStartTime" position="bottom">
@@ -154,7 +154,7 @@
                         <!-- :filter="filter" 原本这个属性在里面 -->
                         <!-- :filter="filter" 原本这个属性在里面 -->
                     </van-popup>
                     </van-popup>
                     <van-field v-if="reportTimeType.type == 2" readonly clickable name="datetimePicker" :value="item.endTime" label="结束时间" placeholder="点击选择时间" 
                     <van-field v-if="reportTimeType.type == 2" readonly clickable name="datetimePicker" :value="item.endTime" label="结束时间" placeholder="点击选择时间" 
-                        @click="item.canEdit?showEndTime = true:''" :disabled="!item.canEdit" 
+                        @click="canEdit?showEndTime = true:''" :disabled="!canEdit" 
                         :rules="[{ required: true, message: '请选择结束时间' }]" />
                         :rules="[{ required: true, message: '请选择结束时间' }]" />
                     <van-popup v-model="showEndTime" position="bottom" >
                     <van-popup v-model="showEndTime" position="bottom" >
                         <van-datetime-picker
                         <van-datetime-picker
@@ -171,7 +171,7 @@
                         <template >
                         <template >
                             <div>
                             <div>
                         <span>用时占比</span>
                         <span>用时占比</span>
-                        <van-slider :disabled="!item.canEdit" :min="5" :step="5" style="width:120px;display:inline-block;margin-left:50px;" v-model="item.progress" :value="100" @change="item.workingTime = (reportTimeType.allday*item.progress/100).toFixed(1)" >
+                        <van-slider :disabled="!canEdit" :min="5" :step="5" style="width:120px;display:inline-block;margin-left:50px;" v-model="item.progress" :value="100" @change="item.workingTime = (reportTimeType.allday*item.progress/100).toFixed(1)" >
                         <template #button>
                         <template #button>
                             <div class="custom-button">{{ item.progress }}%</div>
                             <div class="custom-button">{{ item.progress }}%</div>
                         </template>
                         </template>
@@ -180,7 +180,7 @@
                             </div>
                             </div>
                         </template>
                         </template>
                     </van-cell>
                     </van-cell>
-                    <van-field class="form_input" :disabled="!item.canEdit"
+                    <van-field class="form_input" :disabled = "!canEdit"
                     v-model="item.content" name="content" type="textarea" :label="user.companyId==781?'具体内容与结果':'工作事项'" placeholder="请输入" :rules="user.timeType.workContentState == 1 ? [{ required: true, message: '请填写工作事项' }] : null"
                     v-model="item.content" name="content" type="textarea" :label="user.companyId==781?'具体内容与结果':'工作事项'" placeholder="请输入" :rules="user.timeType.workContentState == 1 ? [{ required: true, message: '请填写工作事项' }] : null"
                     rows="3" autosize  />
                     rows="3" autosize  />
                     </div>
                     </div>
@@ -188,21 +188,21 @@
                     <!-- 多个时间和工作事项的选择方式 -->
                     <!-- 多个时间和工作事项的选择方式 -->
                     <div v-if="reportTimeType.multiWorktime==1">
                     <div v-if="reportTimeType.multiWorktime==1">
                         <div v-for="(timeItem, tindex) in item.worktimeList" :key="tindex" style="position:relative;border:#ccc 0.5px solid;margin:7px;">
                         <div v-for="(timeItem, tindex) in item.worktimeList" :key="tindex" style="position:relative;border:#ccc 0.5px solid;margin:7px;">
-                            <van-tag v-if="tindex>0 && item.canEdit" style="position:absolute; right:-7px;top:-7px;z-index:10;" 
+                            <van-tag v-if="tindex>0 && canEdit" style="position:absolute; right:-7px;top:-7px;z-index:10;" 
                                 @click="removeTimeItem(item,tindex)">X</van-tag>
                                 @click="removeTimeItem(item,tindex)">X</van-tag>
                             
                             
                             <!-- 时间段选择模式 -->
                             <!-- 时间段选择模式 -->
-                            <van-field readonly v-if="reportTimeType.type == 2" :clickable="item.canEdit" name="datetimePicker" 
+                            <van-field readonly v-if="reportTimeType.type == 2" :clickable="canEdit" name="datetimePicker" 
                             :value="timeItem.startTime" label="开始时间" placeholder="点击选择时间" 
                             :value="timeItem.startTime" label="开始时间" placeholder="点击选择时间" 
                             :rules="[{ required: true, message: '必填项' }]"
                             :rules="[{ required: true, message: '必填项' }]"
-                                @click="item.canEdit?showStartDialog(timeItem):''"  />
+                                @click="canEdit?showStartDialog(timeItem):''"  />
                             
                             
                             <van-field v-if="reportTimeType.type == 2" readonly :clickable="canEdit" name="datetimePicker" 
                             <van-field v-if="reportTimeType.type == 2" readonly :clickable="canEdit" name="datetimePicker" 
                             :value="timeItem.endTime" label="结束时间" placeholder="点击选择时间" 
                             :value="timeItem.endTime" label="结束时间" placeholder="点击选择时间" 
                             :rules="[{ required: true, message: '必填项' }]"
                             :rules="[{ required: true, message: '必填项' }]"
-                                @click="item.canEdit?showEndDialog(timeItem):''"  />
+                                @click="canEdit?showEndDialog(timeItem):''"  />
                             
                             
-                            <van-field class="form_input" :disabled="!item.canEdit" style="color:#333;-webkit-text-fill-color:#646566;"
+                            <van-field class="form_input" :disabled="!canEdit" style="color:#333;-webkit-text-fill-color:#646566;"
                             
                             
                                 v-model="timeItem.content" name="content" type="textarea" label="工作事项" placeholder="请输入工作事项" 
                                 v-model="timeItem.content" name="content" type="textarea" label="工作事项" placeholder="请输入工作事项" 
                                 :rules="user.timeType.workContentState == 1 ? [{ required: true, message: '请填写工作事项' }] : null"
                                 :rules="user.timeType.workContentState == 1 ? [{ required: true, message: '请填写工作事项' }] : null"
@@ -233,27 +233,27 @@
                             </van-popup>
                             </van-popup>
                     </div>
                     </div>
                     
                     
-                    <div style="width:100%;" v-if="item.canEdit&&reportTimeType.multiWorktime==1">
+                    <div style="width:100%;" v-if="canEdit&&reportTimeType.multiWorktime==1">
                     <van-tag  style="text-align:center;padding:5px;margin-left:15px;border: 1px solid #20a0ff;"
                     <van-tag  style="text-align:center;padding:5px;margin-left:15px;border: 1px solid #20a0ff;"
-                        :disabled="!item.canEdit" @click="addNewWorktime(index, item)" 
+                        :disabled="!canEdit" @click="addNewWorktime(index, item)" 
                         icon="plus" color="#ffffff" ><span style="color:#999;text-align:center;padding: 0 5px;"> 添加工时  </span></van-tag>
                         icon="plus" color="#ffffff" ><span style="color:#999;text-align:center;padding: 0 5px;"> 添加工时  </span></van-tag>
                     </div>
                     </div>
                     
                     
-                    <div class="overtime" v-if="!user.timeType.lockWorktime || isWeekend">
-                        <div class="overTimeClas">
-                            <van-checkbox :disabled="!item.canEdit" v-model="item.isOvertime" style="width: 4.3rem;">含加班</van-checkbox>
-                            <van-field v-model="item.overtimeHours" type="number" :disabled="!item.canEdit || item.isOvertime==null||item.isOvertime==0 || !item.isOvertime"
+                    <div class="overtime" v-if="((user.timeType.fillOvertime || isWeekend) || (isCorpWX&&canEdit))">
+                        <div class="overTimeClas" v-if="user.timeType.fillOvertime || isWeekend">
+                            <van-checkbox :disabled="!canEdit" v-model="item.isOvertime" style="width: 4.3rem;">含加班</van-checkbox>
+                            <van-field v-model="item.overtimeHours" type="number" :disabled="!canEdit || item.isOvertime==null||item.isOvertime==0 || !item.isOvertime"
                             placeholder="请输入加班时长" style="width: 5rem"></van-field>
                             placeholder="请输入加班时长" style="width: 5rem"></van-field>
-                            <span :class="item.canEdit ? 'overListTime' : 'overListTime hoveOver'">小时</span>    
+                            <span :class="canEdit ? 'overListTime' : 'overListTime hoveOver'">小时</span>    
                         </div>
                         </div>
-                        <van-tag style="position:absolute;right:10px;" v-if="isCorpWX&&item.canEdit" type="primary" size="large" @click="takePhoto(index)">拍照上传</van-tag>
+                        <van-tag style="position:absolute;right:10px;" v-if="isCorpWX&&canEdit" type="primary" size="large" @click="takePhoto(index)">拍照上传</van-tag>
                         <!-- <van-tag style="position:absolute;right:10px;" type="primary" size="large" @click="takePhoto(index)">拍照上传</van-tag> -->
                         <!-- <van-tag style="position:absolute;right:10px;" type="primary" size="large" @click="takePhoto(index)">拍照上传</van-tag> -->
                         <!-- <van-tag style="position:absolute;right:10px;" type="primary" size="large" @click="takePhoto(index)">拍照上传</van-tag> -->
                         <!-- <van-tag style="position:absolute;right:10px;" type="primary" size="large" @click="takePhoto(index)">拍照上传</van-tag> -->
                     </div>
                     </div>
                     <div style="padding:5px;text-align:center;" v-if="!isIOSystem">
                     <div style="padding:5px;text-align:center;" v-if="!isIOSystem">
                         <span v-for="(p, index) in item.pics"  :key="p" style="margin-right:15px;">
                         <span v-for="(p, index) in item.pics"  :key="p" style="margin-right:15px;">
                         <div class="imgList">    
                         <div class="imgList">    
-                            <van-icon v-if="item.canEdit && user.companyId==7" size="20" name="clear"  @click="deleteImg(item, index)" class="imgList_i"/>
+                            <van-icon v-if="canEdit && user.companyId==7" size="20" name="clear"  @click="deleteImg(item, index)" class="imgList_i"/>
                             <img  :src="p" style="width:100px; height:100px;" @click="showLargeImg(item.pics, index)"/>
                             <img  :src="p" style="width:100px; height:100px;" @click="showLargeImg(item.pics, index)"/>
                         </div>
                         </div>
                         </span>
                         </span>
@@ -261,7 +261,7 @@
                     <div style="padding:5px;text-align:center;" v-if="isIOSystem">
                     <div style="padding:5px;text-align:center;" v-if="isIOSystem">
                         <span v-for="(p, index) in item.iospics"  :key="p" style="margin-right:15px;">
                         <span v-for="(p, index) in item.iospics"  :key="p" style="margin-right:15px;">
                         <div class="imgList">
                         <div class="imgList">
-                            <van-icon  v-if="item.canEdit && user.companyId==7" size="20" name="clear"  @click="deleteImg(item, index)" class="imgList_i"/>
+                            <van-icon  v-if="canEdit && user.companyId==7" size="20" name="clear"  @click="deleteImg(item, index)" class="imgList_i"/>
                             <img :src="p" style="width:100px; height:100px;" @click="showLargeImg(item.iospics, index)"/>
                             <img :src="p" style="width:100px; height:100px;" @click="showLargeImg(item.iospics, index)"/>
                         </div>
                         </div>
                         </span>
                         </span>
@@ -277,7 +277,7 @@
                 
                 
             </div>
             </div>
             <div style="text-align:center;" >
             <div style="text-align:center;" >
-            <van-tag size="large" style="text-align:center;margin:10px;padding:12px;margin-bottom:120px;border: 1px solid #20a0ff;"
+            <van-tag v-if="canEdit" size="large" style="text-align:center;margin:10px;padding:12px;margin-bottom:120px;border: 1px solid #20a0ff;"
                 :disabled="!canEdit" @click="addNewPro" 
                 :disabled="!canEdit" @click="addNewPro" 
                 icon="plus" color="#ffffff" ><span style="color:#999;text-align:center;padding: 0 50px;"> + 新增{{user.companyId==781?'任务':'项目'}}  </span></van-tag>
                 icon="plus" color="#ffffff" ><span style="color:#999;text-align:center;padding: 0 50px;"> + 新增{{user.companyId==781?'任务':'项目'}}  </span></van-tag>
             </div>  
             </div>  
@@ -292,7 +292,7 @@
                         <van-loading type="spinner" v-if="!flgLg" />
                         <van-loading type="spinner" v-if="!flgLg" />
                     </van-button>
                     </van-button>
                 </div>
                 </div>
-                 <van-button v-if="canDeleteReport" 
+                 <van-button v-if="canEdit&&form.domains.length>0 && form.domains[0].id != null" 
                         square block type="default" @click="deleteReport" native-type="button" 
                         square block type="default" @click="deleteReport" native-type="button" 
                     style=""> 删除 </van-button>
                     style=""> 删除 </van-button>
                 <!-- <div v-if="canEdit&&form.domains.length>0 && form.domains[0].id != null"
                 <!-- <div v-if="canEdit&&form.domains.length>0 && form.domains[0].id != null"
@@ -303,7 +303,7 @@
             </div>
             </div>
         </van-form>
         </van-form>
         <div style="position:fixed; bottom:0px;width:100%;">
         <div style="position:fixed; bottom:0px;width:100%;">
-            <van-button  v-if="canCancelInDialog" block type="default" @click="cancel"> 撤销 </van-button>
+            <van-button  v-if="canCancel" block type="default" @click="cancel"> 撤销 </van-button>
         </div>
         </div>
         
         
         <div class="form_tip" v-if="!canEdit && !canCancel"> 已审核无法修改 </div>
         <div class="form_tip" v-if="!canEdit && !canCancel"> 已审核无法修改 </div>
@@ -343,8 +343,6 @@
                 isWX: false,
                 isWX: false,
                 showPickerTask:false,
                 showPickerTask:false,
                 canCancel:false,
                 canCancel:false,
-                canDeleteReport: false,
-                canCancelInDialog: false,
                 canEdit:false,
                 canEdit:false,
                 showEndTime: false,
                 showEndTime: false,
                 showStartTime: false,
                 showStartTime: false,
@@ -697,9 +695,7 @@
                 var data = this.form.domains;
                 var data = this.form.domains;
                 data.forEach(element => {
                 data.forEach(element => {
                     if (element.id != null && element.id != '') {
                     if (element.id != null && element.id != '') {
-                        if(element.id){
-                            ids +=(element.id+',');
-                        }
+                        ids +=(element.id+',');
                     }
                     }
                 });
                 });
                 this.$axios.post("/report/cancel", {userId: this.user.id, reportIds:ids})
                 this.$axios.post("/report/cancel", {userId: this.user.id, reportIds:ids})
@@ -772,8 +768,8 @@
                 }
                 }
       
       
             },
             },
-            clickTimePicker(i,item) {
-                if (!item.canEdit) {
+            clickTimePicker(i) {
+                if (!this.canEdit) {
                     return;
                     return;
                 }
                 }
                 this.clickTimeIndex = i;
                 this.clickTimeIndex = i;
@@ -893,11 +889,9 @@
                             timeType.push({value:2, label:'下午 - '+t.pm+'小时', hours: t.pm});
                             timeType.push({value:2, label:'下午 - '+t.pm+'小时', hours: t.pm});
                         }
                         }
                         var list = res.data.report;
                         var list = res.data.report;
-                        this.canCancelInDialog = false
                         if(list.length != 0) {
                         if(list.length != 0) {
                             this.canEdit = false;
                             this.canEdit = false;
                             this.canCancel = false;
                             this.canCancel = false;
-                            this.canDeleteReport = true
                             let array = [];
                             let array = [];
                             for(var i in list) {
                             for(var i in list) {
                                 var projectName = "";
                                 var projectName = "";
@@ -970,17 +964,12 @@
                                     projectAuditorName: list[i].projectAuditorName,
                                     projectAuditorName: list[i].projectAuditorName,
                                     auditUserList: list[i].auditUserList,
                                     auditUserList: list[i].auditUserList,
                                     overtimeHours: list[i].overtimeHours,
                                     overtimeHours: list[i].overtimeHours,
-                                    customText: list[i].customText,
-                                    canEdit: list[i].state >= 2 ? true : false
+                                    customText: list[i].customText
                                 })
                                 })
                                 if (list[i].state >= 2) {
                                 if (list[i].state >= 2) {
                                     this.canEdit = true;
                                     this.canEdit = true;
-                                } else {
-                                    this.canDeleteReport = false
-                                }
-                                if (list[i].state == 0) {
+                                } else if (list[i].state == 0) {
                                     this.canCancel = true;
                                     this.canCancel = true;
-                                    this.canCancelInDialog = true
                                 }
                                 }
                             }
                             }
                             this.form.domains = array;
                             this.form.domains = array;
@@ -1002,7 +991,6 @@
                                 professionProgress:[],
                                 professionProgress:[],
                                 multiWorktime:t.multiWorktime,
                                 multiWorktime:t.multiWorktime,
                                 worktimeList:[{}],  
                                 worktimeList:[{}],  
-                                canEdit: true
                             }]
                             }]
                             if(this.isWeekend){
                             if(this.isWeekend){
                                 this.$set(this.form.domains[0],'isOvertime',true)
                                 this.$set(this.form.domains[0],'isOvertime',true)
@@ -1035,7 +1023,7 @@
 
 
             //点击选择审核人
             //点击选择审核人
             clickPickAuditor(i, item) {
             clickPickAuditor(i, item) {
-                if (!item.canEdit) return;
+                if (!this.canEdit) return;
                 if (item.auditUserList.length<=1) return;
                 if (item.auditUserList.length<=1) return;
                 this.clickIndex = i;
                 this.clickIndex = i;
                 item.showPickerAuditor = true;
                 item.showPickerAuditor = true;
@@ -1051,25 +1039,25 @@
 
 
             //点击选择子项目
             //点击选择子项目
             clickPickSubProject(i, item) {
             clickPickSubProject(i, item) {
-                if (!item.canEdit) return;
+                if (!this.canEdit) return;
                 this.clickIndex = i;
                 this.clickIndex = i;
                 item.showPickerSubProject = true;
                 item.showPickerSubProject = true;
                 this.$forceUpdate();
                 this.$forceUpdate();
             },
             },
             clickPickCostId(i, item) {
             clickPickCostId(i, item) {
-                if (!item.canEdit) return;
+                if (!this.canEdit) return;
                 this.clickIndex = i;
                 this.clickIndex = i;
                 item.showPickerCostId = true;
                 item.showPickerCostId = true;
                 this.$forceUpdate();
                 this.$forceUpdate();
             },
             },
             clickPickTaskGroup(i, item) {
             clickPickTaskGroup(i, item) {
-                if (!item.canEdit) return;
+                if (!this.canEdit) return;
                 this.clickIndex = i;
                 this.clickIndex = i;
                 item.showPickerTaskGroup = true;
                 item.showPickerTaskGroup = true;
                 this.$forceUpdate();
                 this.$forceUpdate();
             },
             },
             clickPickStage(i, item) {
             clickPickStage(i, item) {
-                if (!item.canEdit) return;
+                if (!this.canEdit) return;
                 this.clickIndex = i;
                 this.clickIndex = i;
                 item.showPickerStage = true;
                 item.showPickerStage = true;
                 this.$forceUpdate();
                 this.$forceUpdate();
@@ -1077,7 +1065,7 @@
 
 
             // 选择项目
             // 选择项目
             clickPicker(i, item) {
             clickPicker(i, item) {
-                if (!item.canEdit) return;
+                if (!this.canEdit) return;
                 // this.clickIndex = i;
                 // this.clickIndex = i;
                 // this.showPickerProject = true;
                 // this.showPickerProject = true;
                 // console.log(i, item, this.form)
                 // console.log(i, item, this.form)
@@ -1096,7 +1084,7 @@
             },
             },
             clickPickers(i,item) {
             clickPickers(i,item) {
                 // console.log('wudulist',item.wuduList);
                 // console.log('wudulist',item.wuduList);
-                if (!item.canEdit) return;
+                if (!this.canEdit) return;
                 
                 
                 this.clickIndex = i;
                 this.clickIndex = i;
                 // item.showPickDegree = true;
                 // item.showPickDegree = true;
@@ -1105,8 +1093,8 @@
                 // this.dimension(proId)
                 // this.dimension(proId)
             },
             },
             //选择任务
             //选择任务
-            clickPickerTask(i,item) {
-                if (!item.canEdit) return;
+            clickPickerTask(i) {
+                if (!this.canEdit) return;
                 // console.log(i);
                 // console.log(i);
                 this.clickIndex = i;
                 this.clickIndex = i;
                 // var proId = this.form.domains[this.clickIndex].projectId
                 // var proId = this.form.domains[this.clickIndex].projectId
@@ -1263,8 +1251,7 @@
                     isOvertime:false,
                     isOvertime:false,
                     multiWorktime: this.reportTimeType.multiWorktime,
                     multiWorktime: this.reportTimeType.multiWorktime,
                     worktimeList:[{}],
                     worktimeList:[{}],
-                    degreeId: null,
-                    canEdit: true
+                    degreeId: null
                 }
                 }
                 if(this.isWeekend){
                 if(this.isWeekend){
                     this.$set(item,'isOvertime',true)
                     this.$set(item,'isOvertime',true)
@@ -1275,7 +1262,6 @@
                     }
                     }
                 }
                 }
                 this.form.domains.push(item)
                 this.form.domains.push(item)
-                this.canEdit = true
             },
             },
 
 
             // 移除项目
             // 移除项目