|
@@ -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->{
|