Selaa lähdekoodia

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

ggooalice 2 vuotta sitten
vanhempi
commit
79787cb68c
17 muutettua tiedostoa jossa 197 lisäystä ja 168 poistoa
  1. 2 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectController.java
  2. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectService.java
  3. 1 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DepartmentServiceImpl.java
  4. 6 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DingDingServiceImpl.java
  5. 17 5
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java
  6. 121 64
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  7. 18 53
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/task/TimingTask.java
  8. 5 5
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/application-prod.yml
  9. 8 5
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/application.yml
  10. 6 5
      fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportMapper.xml
  11. 3 0
      fhKeeper/formulahousekeeper/octopus/src/views/customer/list.vue
  12. 1 0
      fhKeeper/formulahousekeeper/timesheet/src/i18n/en.js
  13. 1 0
      fhKeeper/formulahousekeeper/timesheet/src/i18n/zh.js
  14. 3 3
      fhKeeper/formulahousekeeper/timesheet/src/views/Home.vue
  15. 2 2
      fhKeeper/formulahousekeeper/timesheet/src/views/awayOffice/awayOffice.vue
  16. 2 2
      fhKeeper/formulahousekeeper/timesheet/src/views/project/list.vue
  17. 0 20
      src/main/java/com/management/platform/service/impl/ExpenseTypeServiceImpl.java

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

@@ -85,8 +85,8 @@ public class ProjectController {
     public HttpRespMsg getProjectPage(@RequestParam Integer pageIndex, @RequestParam Integer pageSize, String keyword,
                                       @RequestParam(required = false, defaultValue = "1") Integer searchField,
                                       Integer projectId, //可以直接传projectId来进行匹配
-                                      Integer status, Integer category,Integer projectMainId,Integer deptId, String sortProp, Integer sortOrder,String inchagerId) {
-        return projectService.getProjectPage(pageIndex, pageSize, keyword,searchField, status, category, projectId,projectMainId,deptId, sortProp, sortOrder,inchagerId, request);
+                                      Integer status, Integer category,Integer projectMainId,Integer deptId, String sortProp, Integer sortOrder,String inchagerId,String participation) {
+        return projectService.getProjectPage(pageIndex, pageSize, keyword,searchField, status, category, projectId,projectMainId,deptId, sortProp, sortOrder,inchagerId,participation, request);
     }
 
     @RequestMapping("/saveBatchAccoDegrees")

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

@@ -21,7 +21,7 @@ public interface ProjectService extends IService<Project> {
     HttpRespMsg getProjectList(Integer forReport, HttpServletRequest request);
 
     HttpRespMsg getProjectPage(Integer pageIndex, Integer pageSize, String keyword, Integer searchField,
-                               Integer status, Integer category, Integer projectId,Integer projectMainId,Integer deptId, String sortProp, Integer sortOrder,String inchagerId, HttpServletRequest request);
+                               Integer status, Integer category, Integer projectId,Integer projectMainId,Integer deptId, String sortProp, Integer sortOrder,String inchagerId,String participation, HttpServletRequest request);
 
     HttpRespMsg editProject(Integer id, String name, String code, String[] userIds, String inchargerId,
                             Integer isPublic,

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

@@ -164,7 +164,7 @@ public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Departm
                                     userMapper.updateById(manageDeptOldUser);
                                 }
 
-                                //TODO: 如果存在审核中的日报,需要切换部门的审核人为新的负责人, 需测试验证
+                                //如果存在审核中的日报,需要切换部门的审核人为新的负责人
                                 List<Report> oldReportList = reportMapper.selectList(new QueryWrapper<Report>().select("id")
                                         .eq("audit_dept_managerid", manageDeptOldUser.getId())
                                         .eq("audit_deptid", departmentId)

+ 6 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DingDingServiceImpl.java

@@ -926,6 +926,7 @@ public class DingDingServiceImpl implements DingDingService {
                     .setName(userJson.getString("name"))
                     .setDingdingUserid(dingdingUserid)
                     .setDingdingUnionid(userJson.getString("unionid"))
+                    .setJobNumber(userJson.getString("job_number"))
                     .setColor(ColorUtil.randomColor());
 
 
@@ -958,6 +959,11 @@ public class DingDingServiceImpl implements DingDingService {
                         userMapper.updateById(oldUser);
                         System.out.println("更新用户姓名==" + oldUser.getName());
                     }
+                    //可能需要更新工号
+                    if (!StringUtils.isEmpty(userJson.getString("job_number")) && (oldUser.getJobNumber() == null || !oldUser.getJobNumber().equals(userJson.getString("job_number")))) {
+                        oldUser.setJobNumber(userJson.getString("job_number"));
+                        userMapper.updateById(oldUser);
+                    }
                     if (oldList.size() > 1) {
                         System.err.println("Exception 存在重复用户 dingdingUserId="+oldUser.getDingdingUserid()+", name="+oldUser.getName()+", companyId"+oldUser.getCompanyId());
                     }

+ 17 - 5
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -203,7 +203,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
     //分页获取项目列表
     @Override
     public HttpRespMsg getProjectPage(Integer pageIndex, Integer pageSize, String keyword, Integer searchField,
-                                      Integer status, Integer category, Integer projectId,Integer projectMainId,Integer deptId,  String sortProp, Integer sortOrder,String inchagerId, HttpServletRequest request) {
+                                      Integer status, Integer category, Integer projectId,Integer projectMainId,Integer deptId,  String sortProp, Integer sortOrder,String inchagerId,String participation, HttpServletRequest request) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         try {
             //通过公司id获取该公司所有的项目列表
@@ -254,6 +254,13 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             if(!StringUtils.isEmpty(inchagerId)){
                 queryWrapper.eq("incharger_id",inchagerId);
             }
+            if(!StringUtils.isEmpty(participation)){
+                List<Participation> participationList = participationMapper.selectList(new QueryWrapper<Participation>().eq("user_id", participation).select("project_id"));
+                if(participationList.size()>0){
+                    List<Integer> collect = participationList.stream().map(Participation::getProjectId).collect(Collectors.toList());
+                    queryWrapper.in("id",collect);
+                }
+            }
             if (status != null && status != 0) {
                 queryWrapper.eq("status", status);
             }
@@ -3892,7 +3899,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             userId = user.getId();
         }
         List<HashMap<String, Object>> list = projectMapper.getExportData(user.getCompanyId(), userId);
-        HttpRespMsg projectPage = getProjectPage(null, null, null, null, null, null, null, null,null, null, null,null, request);
+        HttpRespMsg projectPage = getProjectPage(null, null, null, null, null, null, null, null,null, null, null,null,null, request);
         List<ProjectKeyNodesSetting> projectKeyNodesSettingList = projectKeyNodesSettingMapper.selectList(new QueryWrapper<ProjectKeyNodesSetting>().eq("company_id", user.getCompanyId()));
         Map<String,Object> resultMap= (Map<String, Object>) projectPage.data;
         List<ProjectVO> projectVOList= (List<ProjectVO>) resultMap.get("records");
@@ -5121,6 +5128,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         List<LeaveSheet> leaveSheetList = leaveSheetMapper.selectList(new QueryWrapper<LeaveSheet>().eq("company_id", targetUser.getCompanyId()));
         List<TimelinessRateVO> resultList=new ArrayList<>();
         for (User user : userList){
+            List<Map<String,Object>> dataList=new ArrayList<>();
             long days =dateTimeList.size();
             List<LeaveSheet> leaveSheets = leaveSheetList.stream().filter(ls -> ls.getOwnerId().equals(user.getId())
                     &&(ls.getStartDate().isAfter(ChronoLocalDate.from(sDate))||ls.getStartDate().isEqual(ChronoLocalDate.from(sDate)))
@@ -5148,6 +5156,9 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                             LocalDate createDate = LocalDate.parse(String.valueOf(date));
                             return createDate.isEqual(localDateTime.toLocalDate());
                         })){
+                            Map<String,Object> map=new HashMap<>();
+                            map.put(localDateTime.toLocalDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")),"请假");
+                            dataList.add(map);
                             days++;
                         }
                     }
@@ -5170,7 +5181,6 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                 }
 
             }
-            List<Map<String,Object>> dataList=new ArrayList<>();
             if(mapList!=null){
                 int num=0;
                 for (Map<String, Object> map : mapList) {
@@ -5199,9 +5209,11 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     }
                     if(createTimeDate.isBefore(createDate)||createTimeDate.isEqual(createDate)){
                         num++;
-                        objectMap.put(createTimeDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")),"及时");
-                        dataList.add(objectMap);
+                        objectMap.put((LocalDate.parse(String.valueOf(date)).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))),"及时/提交时间"+createTimeDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+                    }else {
+                        objectMap.put((LocalDate.parse(String.valueOf(date)).format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))),"不及时/提交时间"+createTimeDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
                     }
+                    dataList.add(objectMap);
                 }
                 timelinessRateVO.setDataList(dataList);
                 BigDecimal bigDecimal=new BigDecimal(num);

+ 121 - 64
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -47,6 +47,9 @@ import java.time.format.DateTimeFormatter;
 import java.time.format.DateTimeParseException;
 import java.time.temporal.ChronoUnit;
 import java.util.*;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
 import java.util.stream.Collectors;
 
 /**
@@ -62,7 +65,7 @@ import java.util.stream.Collectors;
 public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> implements ReportService {
 //    @Resource
 //    AsyncTaskExecutor asyncTaskExecutor;//注入线程池对象
-
+    private final static Executor executor = Executors.newFixedThreadPool(3);//启用多线程
     @Value("${wx.template_report_pass}")
     public String TEMPLATE_REPORT_PASS;
     @Value("${wx.template_report_reject}")
@@ -3993,7 +3996,7 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
             return msg;
         }
         ThirdPartyInterface thirdPartyInterface = thirdPartyInterfaceList.get(0);
-        List<ReportLog> reportLogList = reportLogMapper.selectList(new QueryWrapper<ReportLog>().eq("company_id", thirdPartyInterface.getCompanyId()).orderByAsc("operate_date"));
+        List<ReportLog> reportLogList = reportLogMapper.selectList(new QueryWrapper<ReportLog>().eq("company_id", thirdPartyInterface.getCompanyId()).ge("operate_date",openDate.atTime(LocalTime.now())).orderByAsc("operate_date"));
         List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", thirdPartyInterface.getCompanyId()));
         if(LocalDateTime.now().isAfter(thirdPartyInterface.getExpireTime())){
             msg.setError("token过期失效");
@@ -4001,37 +4004,44 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         }
         if(token.equals(thirdPartyInterface.getToken())){
             List<HashMap<String, Object>> allReportByDate = reportMapper.getAllReportByDate(startDate,thirdPartyInterface.getCompanyId(), null, endDate, null, 1, null);
+            final CountDownLatch latch=new CountDownLatch(allReportByDate.size());
             for (HashMap<String, Object> map : allReportByDate) {
-                java.sql.Date sqlCreateDate= (java.sql.Date) map.get("createDate");
-                java.sql.Timestamp sqlProjectAuditTime= (Timestamp) map.get("projectAuditTime");
-                java.sql.Timestamp sqlTime= (Timestamp) map.get("time");
-                if(sqlCreateDate!=null){
-                    LocalDate createDate = sqlCreateDate.toLocalDate();
-                    map.put("createDate",df.format(createDate));
-                }
-                if(sqlProjectAuditTime!=null){
-                    LocalDateTime projectAuditTime = sqlProjectAuditTime.toLocalDateTime();
-                    map.put("projectAuditTime",projectAuditTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
-                }
-                if(sqlTime!=null){
-                    LocalDateTime time = sqlTime.toLocalDateTime();
-                    map.put("time",time.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
-                }
-                List<ReportLog> item=new ArrayList<>();
-                Integer reportId = (Integer) map.get("id");
-                for (ReportLog reportLog : reportLogList) {
-                    List<String> list = Arrays.asList(reportLog.getReportIds().split(","));
-                    reportLog.setCreatorName(!userList.stream().filter(
-                            ul->ul.getId().equals(reportLog.getCreatorId())).findFirst().isPresent()?"":userList.stream().filter(
-                            ul->ul.getId().equals(reportLog.getCreatorId())).findFirst().get().getName());
-                    reportLog.setOperateName(!userList.stream().filter(
-                            ul->ul.getId().equals(reportLog.getOperatorId())).findFirst().isPresent()?"":userList.stream().filter(
-                            ul->ul.getId().equals(reportLog.getOperatorId())).findFirst().get().getName());
-                    if(list.contains(String.valueOf(reportId))&&!reportLog.getMsg().contains("提交")){
-                         item.add(reportLog);
+                executor.execute(new Runnable() {
+                    @Override
+                    public void run() {
+                        java.sql.Date sqlCreateDate= (java.sql.Date) map.get("createDate");
+                        java.sql.Timestamp sqlProjectAuditTime= (Timestamp) map.get("projectAuditTime");
+                        java.sql.Timestamp sqlTime= (Timestamp) map.get("time");
+                        if(sqlCreateDate!=null){
+                            LocalDate createDate = sqlCreateDate.toLocalDate();
+                            map.put("createDate",df.format(createDate));
+                        }
+                        if(sqlProjectAuditTime!=null){
+                            LocalDateTime projectAuditTime = sqlProjectAuditTime.toLocalDateTime();
+                            map.put("projectAuditTime",projectAuditTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+                        }
+                        if(sqlTime!=null){
+                            LocalDateTime time = sqlTime.toLocalDateTime();
+                            map.put("time",time.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
+                        }
+                        List<ReportLog> item=new ArrayList<>();
+                        Integer reportId = (Integer) map.get("id");
+                        for (ReportLog reportLog : reportLogList) {
+                            List<String> list = Arrays.asList(reportLog.getReportIds().split(","));
+                            reportLog.setCreatorName(!userList.stream().filter(
+                                    ul->ul.getId().equals(reportLog.getCreatorId())).findFirst().isPresent()?"":userList.stream().filter(
+                                    ul->ul.getId().equals(reportLog.getCreatorId())).findFirst().get().getName());
+                            reportLog.setOperateName(!userList.stream().filter(
+                                    ul->ul.getId().equals(reportLog.getOperatorId())).findFirst().isPresent()?"":userList.stream().filter(
+                                    ul->ul.getId().equals(reportLog.getOperatorId())).findFirst().get().getName());
+                            if(list.contains(String.valueOf(reportId))&&!reportLog.getMsg().contains("提交")){
+                                item.add(reportLog);
+                            }
+                        }
+                        map.put("checkLog",item);
+                        latch.countDown();
                     }
-                }
-                map.put("checkLog",item);
+                });
             }
             msg.data=allReportByDate;
         }
@@ -4040,46 +4050,93 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
 
     @Override
     public HttpRespMsg fixIssue() {
-        Integer companyId = 862;
-        Company company = companyMapper.selectById(companyId);
-        System.out.println("========处理公司======="+company.getCompanyName());
-        //查找某日某天的日报,项目上已经都审核通过,但是state = 0,并且没有走到下一个阶段的
-        List<Report> reportList = reportMapper.selectList(new QueryWrapper<Report>().eq("company_id", companyId));
-        List<String> creatorIds = reportList.stream().map(Report::getCreatorId).distinct().collect(Collectors.toList());
-        List<LocalDate> dateList = reportList.stream().map(Report::getCreateDate).distinct().collect(Collectors.toList());
-        List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", companyId));
-        List<Department> allDepts = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
-        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        //处理被误操作为自动审核的数据,
+        List<AuditWorkflowTimeSetting> settings = auditWorkflowTimeSettingMapper.selectList(new QueryWrapper<AuditWorkflowTimeSetting>().select("distinct company_id"));
+        System.out.println("有审批流的公司size="+settings.size());
+
+        List<Report> reportList = reportMapper.selectList(
+                new QueryWrapper<Report>().select("company_id, id, state, project_auditor_id, creator_id, create_date")
+            .eq("report_auto_approve", 1));
+        reportList = reportList.stream().filter(r->r.getCompanyId() != 767).collect(Collectors.toList());
+        System.out.println("查询到数据=="+reportList.size());
+        int dealCnt = 0;
+        List<Report> auditWorkflowReportList = new ArrayList<>();
+        List<Report> noWorkflowReportList = new ArrayList<>();
+        for (Report report : reportList) {
+            if (!settings.stream().anyMatch(s->s.getCompanyId().equals(report.getCompanyId()))) {
+                //无审批流的公司,直接通过
+                Report r = new Report();
+                r.setId(report.getId());
+                r.setReportAutoApprove(0);
+                r.setProjectAuditState(0);
+                r.setState(0);
+                noWorkflowReportList.add(r);
+                dealCnt++;
+            } else {
+                auditWorkflowReportList.add(report);
+            }
+        }
+        if (noWorkflowReportList.size() > 0) {
+            updateBatchById(noWorkflowReportList);
+        }
 
-        for (String creator : creatorIds) {
-            User user = userList.stream().filter(u -> u.getId().equals(creator)).findFirst().get();
-            String creatorName = user.getName();
-            String dateStr = "";
-            for (LocalDate date : dateList) {
-                //某人某天的全部日报
-                List<Report> userDayReport = reportList.stream().filter(r -> r.getCreatorId().equals(creator) && r.getCreateDate().isEqual(date)).collect(Collectors.toList());
-                if (userDayReport.size() > 0) {
-                    //有当前的日报
-                    boolean isAllProjectAuditPass = !userDayReport.stream().anyMatch(r->r.getProjectAuditState() != 1);
-                    boolean isAllState0 = !userDayReport.stream().anyMatch(r->r.getState() != 0);
-
-                    if (isAllProjectAuditPass && isAllState0) {
-                        //当前的日报项目全部通过,但是日报本身还是待审核状态的,需要更新
-                        dateStr +=dtf.format(date) + ", ";
-                        List<Integer> rids = userDayReport.stream().map(Report::getId).collect(Collectors.toList());
-                        //测试: 翁浩勃
-//                        if ("翁浩勃".equals(creatorName)) {
-//
-//                        }
-                        selfUpdateToNextWorkFlow(companyId, user, rids, allDepts);
+        System.out.println("已处理无审批流的日报size="+dealCnt);
+        System.out.println("有审批流的日报size="+auditWorkflowReportList.size());
+        //检查哪些是项目没审核的
+        int projectAuditManulPassCnt = 0;
+        int blurFind = 0;
+        List<Report> updateList = new ArrayList<>();
+        for (Report report : auditWorkflowReportList) {
+            int count = reportLogMapper.selectCount(new QueryWrapper<ReportLog>()
+                    .like("msg", "审核通过了日报").eq("operator_id", report.getProjectAuditorId())
+                    .eq("report_ids", report.getId()));
+            boolean findLog = false;
+
+            if (count == 0) {
+                //模糊匹配一下
+                List<ReportLog> reportLogs = reportLogMapper.selectList(new QueryWrapper<ReportLog>().select("id, report_ids")
+                        .like("msg", "审核通过了日报").eq("operator_id", report.getProjectAuditorId())
+                        .eq("company_id", report.getCompanyId())
+                        .eq("creator_id", report.getCreatorId())
+                        .eq("create_date", report.getCreateDate()));
+                if (reportLogs.size() > 0) {
+                    //找到匹配的记录
+                    System.out.println("开始匹配模糊===reportLog Size=="+reportLogs.size());
+                    for (ReportLog log : reportLogs) {
+                        String[] arr = log.getReportIds().split(",");
+                        for (String s : arr) {
+                            System.out.println("比对=logId="+log.getId()+", "+s+" , "+report.getId());
+                            if (s.equals(report.getId().toString())) {
+                                findLog = true;
+                                blurFind++;
+                                System.out.println("模糊匹配到了====="+blurFind);
+                                break;
+                            }
+                        }
                     }
                 }
+            } else {
+                findLog = true;
             }
-            if (!StringUtils.isEmpty(dateStr)) {
-                System.out.println(creatorName+"  " + dateStr);
+            Report r = new Report();
+            r.setId(report.getId());
+            r.setReportAutoApprove(0);
+            r.setState(0);
+            if (findLog) {
+                projectAuditManulPassCnt++;
+                //已经是手动审核通过的,不需要撤回projectAuditState了
+            } else {
+                //没有项目审核通过的,需要撤回为0状态
+                r.setProjectAuditState(0);
             }
+            updateList.add(r);
         }
 
+        System.out.println("手动审核过的日报size="+projectAuditManulPassCnt+", 其中模糊匹配到的size=" +blurFind);
+        if (updateList.size() > 0) {
+            updateBatchById(updateList);
+        }
+        System.out.println("===无审批流的日报size="+noWorkflowReportList.size()+", 有审批流的日报size="+updateList.size());
         return new HttpRespMsg();
     }
 

+ 18 - 53
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/task/TimingTask.java

@@ -237,61 +237,26 @@ public class TimingTask {
     @Scheduled(cron = "0 10 2 ? * *")
     private void autoApprove() {
         if (isDev) return;
-        List<Company> list = companyMapper.selectList(new QueryWrapper<Company>());
-        List<CompanyDingding> companyDingdingList = companyDingdingService.list();
-        List<WxCorpInfo> wxCorpInfoList = wxCorpInfoService.list();
-        for (Company company : list) {
-            TimeType timeType = timeTypeMapper.selectById(company.getId());
-            List<User> userList = userMapper.selectList(new QueryWrapper<User>().eq("company_id", company.getId()));
-            if(timeType.getReportAutoApprove()==1){
-                Integer reportAutoApproveDays = timeType.getReportAutoApproveDays();
-                if(reportAutoApproveDays==null){
-                    continue;
-                }
-                LocalDate localDate = LocalDate.now().minusDays(reportAutoApproveDays);
-                List<Report> reports = reportMapper.selectList(new QueryWrapper<Report>().eq("state", 0).le("create_time", localDate.atTime(LocalTime.now())));
-                for (Report report : reports) {
-                    report.setState(1);
-                    //项目审核的状态修改成已审核
-                    report.setProjectAuditState(1);
-                    report.setReportAutoApprove(1);
-                    reportMapper.updateById(report);
-                    /*Optional<User> first = userList.stream().filter(u -> u.getId().equals(report.getCreatorId())).findFirst();
-                    if(first.isPresent()){
-                        Optional<CompanyDingding> optional = companyDingdingList.stream().filter(cm -> cm.getCompanyId().equals(company.getId())).findFirst();
-                        if(optional.isPresent()){
-                            companyDingdingService.sendReportApproveMsg(company.getId(),optional.get().getAgentId(),"自动审核","",LocalDate.now(),first.get().getDingdingUserid());
-                        }
-                        Optional<WxCorpInfo> corpInfo = wxCorpInfoList.stream().filter(wx -> wx.getCompanyId().equals(company.getId())).findFirst();
-                        if(corpInfo.isPresent()){
-                            JSONObject json=new JSONObject();
-                            JSONArray dataJson=new JSONArray();
-                            JSONObject item=new JSONObject();
-                            item.put("key","审核人");
-                            item.put("value","自动审核");
-                            dataJson.add(item);
-                            if(timeType.getNeedEvaluate()==1){
-                                JSONObject item1=new JSONObject();
-                                item1.put("key","评价");
-                                item1.put("value",StringUtils.isEmpty(report.getEvaluate())?"":report.getEvaluate());
-                                dataJson.add(item1);
-                                json.put("template_id","tty9TkCAAAWoUyhGnXRCZuhkgCqw_Uow");
-                            }else {
-                                json.put("template_id","tty9TkCAAANpvEtLrkPUGeOEd1-U7W2w");
-                            }
-                            JSONObject item2=new JSONObject();
-                            item2.put("key","日期");
-                            item2.put("value",report.getCreateDate());
-                            dataJson.add(item2);
-                            json.put("url","https://open.weixin.qq.com/connect/oauth2/authorize?appid=ww4e237fd6abb635af&redirect_uri=http://mobworktime.ttkuaiban.com/api/corpWXAuth&response_type=code&scope=snsapi_base&state=0#wechat_redirect");
-                            json.put("content_item",dataJson);
-                            wxCorpInfoService.sendWXCorpTemplateMsg(corpInfo.get(),first.get().getCorpwxUserid(),json);
-                        }
-                    }*/
-                }
+        List<TimeType> timeTypeList = timeTypeMapper.selectList(new QueryWrapper<TimeType>().eq("report_auto_approve", 1));
+        if(timeTypeList.size()<=0){
+            return;
+        }
+        for (TimeType timeType : timeTypeList) {
+            Integer companyId = timeType.getCompanyId();
+            Integer reportAutoApproveDays = timeType.getReportAutoApproveDays();
+            if(reportAutoApproveDays==null){
+                continue;
+            }
+            LocalDate localDate = LocalDate.now().minusDays(reportAutoApproveDays);
+            List<Report> reports = reportMapper.selectList(new QueryWrapper<Report>().eq("state", 0).eq("company_id",companyId).le("create_time", localDate.atTime(LocalTime.now())));
+            for (Report report : reports) {
+                report.setState(1);
+                //项目审核的状态修改成已审核
+                report.setProjectAuditState(1);
+                report.setReportAutoApprove(1);
+                reportMapper.updateById(report);
             }
         }
-
     }
 
     //每周日晚上11点 企业微信同步一次本月的考勤打卡记录

+ 5 - 5
fhKeeper/formulahousekeeper/management-platform/src/main/resources/application-prod.yml

@@ -17,9 +17,11 @@ spring:
     username: root
     password: Ziyu20141026!@@
     hikari:
-      maximum-pool-size: 10
-      minimum-idle: 3
-      max-lifetime: 30000
+      maximum-pool-size: 60
+      minimum-idle: 10
+      max-lifetime: 180000
+      # 数据库连接超时时间,默认30秒,即30000
+      connection-timeout: 60000
       connection-test-query: SELECT 1
     #######redis配置######
     # redis
@@ -82,8 +84,6 @@ mybatis:
 upload:
   path: /www/staticproject/timesheet/upload/
 
-excludeUrls: /report/getReportListByToken
-
 
 
 ##actuator健康检查配置

+ 8 - 5
fhKeeper/formulahousekeeper/management-platform/src/main/resources/application.yml

@@ -8,19 +8,22 @@ spring:
   servlet:
     multipart:
       # 配置上传文件的大小设置
+
       # Single file max size  即单个文件大小
       max-file-size: 100MB
       max-request-size: 100MB
       location: C:/upload/
   datasource:
     driver-class-name: com.mysql.cj.jdbc.Driver
-    url: jdbc:mysql://47.101.180.183:3306/man_dev?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&useSSL=false
+    url: jdbc:mysql://47.101.180.183:3306/man_bk?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&useSSL=false
     username: root
     password: HuoshiDB@2022
     hikari:
-      maximum-pool-size: 10
-      minimum-idle: 3
-      max-lifetime: 30000
+      maximum-pool-size: 60
+      minimum-idle: 10
+      max-lifetime: 180000
+      # 数据库连接超时时间,默认30秒,即30000
+      connection-timeout: 60000
       connection-test-query: SELECT 1
   #######redis配置######
     # redis
@@ -126,7 +129,7 @@ referer:
     - mldworktime.ttkuaiban.com
     - gs.farben.com.cn
     - 47.101.180.183
-excludeUrls: /wxcorp/*,/wxcorp/*/*,/dingding/*,/error,/testClient,/corpWXAuth,/wx-corp-info/*,/clean/*,/innerRoles/*
+excludeUrls: /wxcorp/*,/wxcorp/*/*,/dingding/*,/error,/testClient,/corpWXAuth,/wx-corp-info/*,/clean/*,/innerRoles/*,/report/getReportListByToken
 
 #企业微信相关参数
 suitId: ww4e237fd6abb635af

+ 6 - 5
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportMapper.xml

@@ -637,10 +637,11 @@
     </select>
 
     <select id="getUserReportTimelinessRate" resultType="java.util.Map">
-        select `user`.name as userName,report.create_date as createDate,report.create_time as createTime from report
-        left join `user` on `user`.id=report.creator_id
-        where report.company_id=#{companyId}
-        and report.create_date between #{startDate} and #{endDate}
-        group by user.id,report.create_date
+        select `user`.name as userName,rl.create_date as createDate,MIN(rl.operate_date )as createTime from report_log rl
+        left join `user` on `user`.id=rl.operator_id
+        where rl.company_id=#{companyId}
+        and rl.create_date between  #{startDate} and #{endDate}
+        and rl.msg like '%提交了%'
+        group by user.id,rl.create_date
     </select>
 </mapper>

+ 3 - 0
fhKeeper/formulahousekeeper/octopus/src/views/customer/list.vue

@@ -39,6 +39,9 @@
             <el-table-column prop="staffCountMax" label="人数上限"  min-width="80" align="center">
             </el-table-column>
             <el-table-column prop="activeUserCount" label="在职人数"  min-width="80" align="center">
+                <template slot-scope="scope">
+                    <div :style="'color:'+(parseInt(scope.row.activeUserCount)>parseInt(scope.row.staffCountMax)?'red':'')">{{scope.row.activeUserCount}}</div>
+                </template>
             </el-table-column>
             <el-table-column prop="packageWorktime" label="使用版本" align="left" min-width="500" header-align="center">
                 <template slot-scope="scope">

+ 1 - 0
fhKeeper/formulahousekeeper/timesheet/src/i18n/en.js

@@ -94,6 +94,7 @@ export default {
       launchTheLogin: 'launch the login', // 退出登录
       confirmExit: 'Confirm exit', // 确定退出吗?
       prompts: 'prompt', // 提示
+      expired: 'expired', // 已过期
     },
     // 提示
     message: {

+ 1 - 0
fhKeeper/formulahousekeeper/timesheet/src/i18n/zh.js

@@ -95,6 +95,7 @@ export default {
     launchTheLogin: '退出登录',
     confirmExit: '确定退出吗?',
     prompts: '提示',
+    expired: '已过期'
   },
   // 提示
   message: {

+ 3 - 3
fhKeeper/formulahousekeeper/timesheet/src/views/Home.vue

@@ -17,7 +17,7 @@
 
             <el-col :span="10" class="userinfo">
                 <!-- 中英文切换入口 -->
-                <el-dropdown trigger="click" @command="langChange" style="margin-right:30px;">
+                <!-- <el-dropdown trigger="click" @command="langChange" style="margin-right:30px;">
                     <span class="el-dropdown-link userinfo-inner">
                         {{language}} <i class="el-icon-caret-bottom"></i>
                     </span>
@@ -25,7 +25,7 @@
                         <el-dropdown-item divided  command="zh">中文</el-dropdown-item>
                         <el-dropdown-item divided  command="en">English</el-dropdown-item>
                     </el-dropdown-menu> 
-                </el-dropdown>
+                </el-dropdown> -->
 
                 <el-dropdown trigger="hover" style="margin-right:30px;">
                     <span class="el-dropdown-link userinfo-inner">
@@ -488,7 +488,7 @@
                 if(this.user.remainingTime != "" && this.user.remainingTime != 0) {
                     this.remainingTime = util.formatDate.format(new Date(new Date().getTime() + this.user.remainingTime), "yyyy-MM-dd")
                 } else {
-                    this.remainingTime = "已过期";
+                    this.remainingTime = this.$t('other.expired');
                     clearInterval(this.timer);
                 }
             } else {

+ 2 - 2
fhKeeper/formulahousekeeper/timesheet/src/views/awayOffice/awayOffice.vue

@@ -260,7 +260,7 @@
                                 <el-button icon="el-icon-close" circle size="mini"  @click="deny(scope.row)"></el-button>
                             </div>
                             <div v-if="!isAuditList">
-                                <el-button v-if="!isAuditList && permissions.awayOfficeDelete && ((scope.row.status != 0 && scope.row.ownerId == user.id) || permissions.awayOfficeAll)" icon="el-icon-delete" circle size="mini"  @click="deletes(scope.row)"></el-button>
+                                <el-button v-if="permissions.awayOfficeDelete && ((scope.row.status != 0 && scope.row.ownerId == user.id) || permissions.awayOfficeAll)" icon="el-icon-delete" circle size="mini"  @click="deletes(scope.row)"></el-button>
                                 <el-button v-if="((scope.row.status != 0 && scope.row.ownerId == user.id) || permissions.awayOfficeAll) || scope.row.status == 1" icon="el-icon-edit" circle size="mini" @click="editor(scope.row)"></el-button>
                             </div>
                         </template>
@@ -268,7 +268,7 @@
                     <el-table-column v-if="isDingding" label="操作" width="150" fixed="right">
                         <template slot-scope="scope">
                             <el-button icon="iconfont firerock-iconguanlian" circle size="mini" @click="DingdingEditor(scope.row)"></el-button>
-                            <el-button v-if="(permissions.awayOfficeAll || userComLis.manageDeptId) && permissions.awayOfficeDelete" icon="el-icon-delete" circle size="mini" @click="deleteOfDingding(scope.row)"></el-button>
+                            <el-button v-if="permissions.awayOfficeDelete" icon="el-icon-delete" circle size="mini" @click="deleteOfDingding(scope.row)"></el-button>
                         </template>
                     </el-table-column>
                 </el-table>

+ 2 - 2
fhKeeper/formulahousekeeper/timesheet/src/views/project/list.vue

@@ -92,9 +92,9 @@
                                 <el-link type="primary" :underline="false" @click="showBaseCostItemDialog">基线成本项</el-link>
                             </el-dropdown-item>
                             <!-- <el-dropdown-item v-if="user.company.packageProject == 1 && user.companyId == '936'"> -->
-                            <el-dropdown-item>
+                            <!-- <el-dropdown-item >
                                 <el-link type="primary" :underline="false" @click="keyNodesIsShow = true">关键节点项</el-link>
-                            </el-dropdown-item>
+                            </el-dropdown-item> -->
                             <el-dropdown-item v-if="permissions.projectClassification">
                                 <el-link type="primary" :underline="false" @click="showClfDialog = true">分类管理</el-link>
                             </el-dropdown-item>

+ 0 - 20
src/main/java/com/management/platform/service/impl/ExpenseTypeServiceImpl.java

@@ -1,20 +0,0 @@
-package com.management.platform.service.impl;
-
-import com.management.platform.entity.ExpenseType;
-import com.management.platform.mapper.ExpenseTypeMapper;
-import com.management.platform.service.ExpenseTypeService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.stereotype.Service;
-
-/**
- * <p>
- *  服务实现类
- * </p>
- *
- * @author Seyason
- * @since 2022-07-28
- */
-@Service
-public class ExpenseTypeServiceImpl extends ServiceImpl<ExpenseTypeMapper, ExpenseType> implements ExpenseTypeService {
-
-}