瀏覽代碼

设置特殊节假日 暂时 控制填报及时率数据

Min 1 年之前
父節點
當前提交
78bb809640

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

@@ -8,7 +8,6 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.github.pagehelper.util.StringUtil;
 import com.management.platform.entity.*;
 import com.management.platform.entity.Task;
 import com.management.platform.entity.vo.*;
@@ -16,8 +15,6 @@ import com.management.platform.mapper.*;
 import com.management.platform.service.*;
 import com.management.platform.util.*;
 import com.management.platform.webservice.po.*;
-import com.sun.star.bridge.oleautomation.Decimal;
-import javafx.stage.Stage;
 import org.apache.http.client.entity.UrlEncodedFormEntity;
 import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpPost;
@@ -25,7 +22,6 @@ import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.HttpClients;
 import org.apache.http.message.BasicNameValuePair;
 import org.apache.http.util.EntityUtils;
-import org.apache.ibatis.annotations.Select;
 import org.apache.poi.EncryptedDocumentException;
 import org.apache.poi.hssf.usermodel.HSSFCell;
 import org.apache.poi.hssf.usermodel.HSSFRow;
@@ -45,7 +41,6 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
-import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.multipart.MultipartFile;
 
@@ -55,21 +50,18 @@ import javax.servlet.http.HttpServletResponse;
 import java.io.*;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.sql.Array;
 import java.sql.Timestamp;
 import java.text.*;
 import java.time.*;
 import java.time.chrono.ChronoLocalDate;
+import java.time.chrono.ChronoLocalDateTime;
 import java.time.format.DateTimeFormatter;
-import java.time.temporal.TemporalAdjuster;
 import java.time.temporal.TemporalAdjusters;
 import java.util.*;
-import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.Executor;
 import java.util.concurrent.Executors;
-import java.util.function.Function;
+import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
 
 /**
@@ -247,6 +239,8 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
     private StagesService stagesService;
     @Resource
     private SapProjectServiceService sapProjectServiceService;
+    @Resource
+    private HolidaySettingService holidaySettingService;
 
     @Value(value = "${upload.path}")
     private String path;
@@ -8114,6 +8108,8 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         Integer timeliness = timeType.getTimeliness();
         List<SysRichFunction> functionAllList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "全公司填报及时率");
         List<SysRichFunction> functionDeptList = sysFunctionMapper.getRoleFunctions(targetUser.getRoleId(), "负责部门填报及时率");
+        //获取到公司设置的特殊节假日设置
+        List<HolidaySetting> holidaySettingList = holidaySettingService.list(new LambdaQueryWrapper<HolidaySetting>().eq(HolidaySetting::getCompanyId, targetUser.getCompanyId()));
         List<Integer> deptIds=new ArrayList<>();
         List<Department> allDepartmentList=departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id",targetUser.getCompanyId()));
         List<Department> userDepartmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("manager_id", targetUser.getId()).eq("company_id",targetUser.getCompanyId()));
@@ -8161,8 +8157,9 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         }
         List<Map<String,Object>> reportList=reportMapper.getUserReportTimelinessRate(targetUser.getCompanyId(),startDate,endDate,userId,deptIds);
         Map<Object, List<Map<String, Object>>> listMap = reportList.stream().filter(item->!StringUtils.isEmpty(item.get("userName"))).collect(Collectors.groupingBy(rp -> rp.get("userName")));
-        //获取请假数据
-        List<LeaveSheet> leaveSheetList = leaveSheetMapper.selectList(new QueryWrapper<LeaveSheet>().eq("company_id", targetUser.getCompanyId()));
+        //获取请假数据 todo:待优化 这里需要过滤日期(防止获取数据太慢)
+        List<LeaveSheet> leaveSheetList = leaveSheetMapper.selectList(new LambdaQueryWrapper<LeaveSheet>()
+                .eq(LeaveSheet::getCompanyId, targetUser.getCompanyId()).le(LeaveSheet::getStartDate,endDate).ge(LeaveSheet::getEndDate,startDate));
         List<TimelinessRateVO> resultList=new ArrayList<>();
         for (User user : userList){
             LocalDateTime sDate;
@@ -8176,13 +8173,39 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
                     sDate = inductionDate.atTime(LocalTime.MIN);
                 }
             }else  sDate = LocalDate.parse(startDate).atTime(LocalTime.MIN);
-            List<LocalDateTime> dateTimeList=getDays(sDate, eDate);
+            AtomicReference<List<LocalDateTime>> dateTimeList= new AtomicReference<>(getDays(sDate, eDate));
             //针对美莱德 去除2024-02-09
-            if(user.getCompanyId()==876){
-                dateTimeList=dateTimeList.stream().filter(d->!d.isEqual(LocalDate.parse("2024-02-09").atTime(LocalTime.MIN))).collect(Collectors.toList());
+            //针对人员已经特殊节假日设置去除相对应的日期
+            List<HolidaySetting> allUsersSetting = holidaySettingList.stream().filter(h -> h.getRangeType() == 0).collect(Collectors.toList());
+            if(allUsersSetting.size()>0){
+                List<LocalDateTime> holidayDateList = allUsersSetting.stream().map(h->h.getHolidayDate().atTime(LocalTime.MIN)).collect(Collectors.toList());
+                dateTimeList.set(dateTimeList.get().stream().filter(d -> !holidayDateList.contains(d)).collect(Collectors.toList()));
+            }
+            List<HolidaySetting> targetUserOrDeptSetting = holidaySettingList.stream().filter(h -> h.getRangeType() == 1).collect(Collectors.toList());
+            if(targetUserOrDeptSetting.size()>0){
+                targetUserOrDeptSetting.forEach(t->{
+                    LocalDateTime holidayDate = t.getHolidayDate().atTime(LocalTime.MIN);
+                    if(!StringUtils.isEmpty(t.getTargetUsers())){
+                        String[] userSplit = t.getTargetUsers().split(",");
+                        List<String> userAsList = Arrays.asList(userSplit);
+                        if(userAsList.contains(user.getId())){
+                            dateTimeList.set(dateTimeList.get().stream().filter(d -> !d.isEqual(holidayDate)).collect(Collectors.toList()));
+                        }
+                    }
+                    if(!StringUtils.isEmpty(t.getTargetDepts())){
+                        String[] deptSplit = t.getTargetUsers().split(",");
+                        List<String> deptAsList = Arrays.asList(deptSplit);
+                        for (String deptId : deptAsList) {
+                            List<Integer> subDeptIds = getBranchDepartment(Integer.valueOf(deptId), departmentList);
+                            if(deptId.equals(user.getDepartmentId())||subDeptIds.contains(user.getDepartmentId())){
+                                dateTimeList.set(dateTimeList.get().stream().filter(d -> !d.isEqual(holidayDate)).collect(Collectors.toList()));
+                            }
+                        }
+                    }
+                });
             }
             List<Map<String,Object>> dataList=new ArrayList<>();
-            long days =dateTimeList.size();
+            long days = dateTimeList.get().size();
             List<LeaveSheet> leaveSheets = leaveSheetList.stream().filter(ls -> ls.getOwnerId().equals(user.getId())
                     &&((ls.getStartDate().isBefore(ChronoLocalDate.from(eDate))||ls.getStartDate().isEqual(ChronoLocalDate.from(eDate))))
                     &&((ls.getEndDate().isAfter(ChronoLocalDate.from(sDate))||ls.getEndDate().isEqual(ChronoLocalDate.from(sDate))))).collect(Collectors.toList());
@@ -8204,7 +8227,7 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
             }
             List<Map<String, Object>> mapList = listMap.get(user.getName());
             //去掉填非工作日
-            for (LocalDateTime localDateTime : dateTimeList) {
+            for (LocalDateTime localDateTime : dateTimeList.get()) {
                 if(mapList!=null){
                     //在非工作日下 填报了的情况下 及时填报了就算作及时率计算的基数
                     if(!WorkDayCalculateUtils.isWorkDay(localDateTime.toLocalDate())&&!mapList.stream().anyMatch(ml->{