|
@@ -3,6 +3,7 @@ package com.management.platform.service.impl;
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
@@ -53,10 +54,7 @@ import java.math.RoundingMode;
|
|
|
import java.sql.Array;
|
|
|
import java.sql.Timestamp;
|
|
|
import java.text.*;
|
|
|
-import java.time.Duration;
|
|
|
-import java.time.LocalDate;
|
|
|
-import java.time.LocalDateTime;
|
|
|
-import java.time.LocalTime;
|
|
|
+import java.time.*;
|
|
|
import java.time.chrono.ChronoLocalDate;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
import java.time.temporal.TemporalAdjusters;
|
|
@@ -11199,6 +11197,81 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
|
|
|
return msg;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public HttpRespMsg getEffectiveLaborHourRate(String startDate, String endDate) {
|
|
|
+ LambdaQueryWrapper<Department> lqw = new LambdaQueryWrapper<>();
|
|
|
+ lqw.in(Department::getDepartmentId,3759,3899,3900,3901,3902,3903,3904,3906,5719);
|
|
|
+ List<Department> departments = departmentMapper.selectList(lqw);
|
|
|
+
|
|
|
+ ArrayList<LaborHourRateVo> laborHourRateVos = new ArrayList<>();
|
|
|
+
|
|
|
+ int dayCount = WorkDayCalculateUtils.getWorkDaysCountInRange(startDate, endDate, 0);//应报工时天数
|
|
|
+
|
|
|
+ for (Department department : departments) {
|
|
|
+ LaborHourRateVo laborHourRateVo = new LaborHourRateVo();
|
|
|
+ laborHourRateVo.setRoot_id(department.getDepartmentId());
|
|
|
+ laborHourRateVo.setDepartment_name(department.getDepartmentName());
|
|
|
+ ArrayList<Integer> deptIds = new ArrayList<>();
|
|
|
+ setDeptIdList(department.getDepartmentId(),deptIds);
|
|
|
+ deptIds.add(department.getDepartmentId());
|
|
|
+ laborHourRateVo.setChild_ids(deptIds);
|
|
|
+ //查询该公司下某头部部门及子部门在四种项目下的工时之和,某个时间段内
|
|
|
+ List<Report> reportList= reportMapper.getSumWorkingTime(deptIds,startDate,endDate);
|
|
|
+ ArrayList<Report> reports = new ArrayList<>();//按时填报的report
|
|
|
+ for (Report report : reportList) {
|
|
|
+ LocalDate createDate = report.getCreateDate();
|
|
|
+ LocalDateTime createTime = report.getCreateTime();
|
|
|
+ LocalDate createTimeLocalDate = createTime.toLocalDate();
|
|
|
+ boolean b1 = WorkDayCalculateUtils.sameMonth(createDate, createTimeLocalDate);
|
|
|
+ boolean b2 = WorkDayCalculateUtils.sameWeek(createDate, createTimeLocalDate);
|
|
|
+ if (b1&&b2){
|
|
|
+ reports.add(report);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ double timeSum = reports.stream().mapToDouble(Report::getWorkingTime).sum();
|
|
|
+
|
|
|
+
|
|
|
+ int inActiveDays=0;
|
|
|
+ //查询 入职时间早于起始时间 但是员工在这段时间离职 的员工列表
|
|
|
+ List<User> inActiveList=userMapper.getInActiveList(deptIds,startDate,endDate);
|
|
|
+ //获取离职员工在此期间工作多少天
|
|
|
+ for (User user : inActiveList) {
|
|
|
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
|
|
+ String inactiveDate = user.getInactiveDate().format(formatter);
|
|
|
+ inActiveDays+=WorkDayCalculateUtils.getWorkDaysCountInRange(startDate,inactiveDate,0);
|
|
|
+ }
|
|
|
+ //-- 查询 有多少个 入职时间早于起始时间 并且是在职的员工
|
|
|
+ int isActiveCount=userMapper.getIsActiveCount(deptIds,startDate,endDate);
|
|
|
+
|
|
|
+ laborHourRateVo.setWorking_time(timeSum);
|
|
|
+ laborHourRateVo.setDate_count(dayCount);
|
|
|
+ laborHourRateVo.setCount(isActiveCount);
|
|
|
+ laborHourRateVo.setTotal_time((long) (inActiveList.size()*8*inActiveDays+isActiveCount*8*dayCount));//应报工时还少了在职的加上可能辞职的
|
|
|
+ System.out.println("============="+inActiveDays);
|
|
|
+ System.out.println("============="+isActiveCount);
|
|
|
+ laborHourRateVo.setDay_time(8);
|
|
|
+ laborHourRateVos.add(laborHourRateVo);
|
|
|
+ }
|
|
|
+ HttpRespMsg msg = new HttpRespMsg();
|
|
|
+ msg.setData(laborHourRateVos);
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public void setDeptIdList(Integer departmentId,List<Integer> deptIds){
|
|
|
+ LambdaQueryWrapper<Department> lqw = new LambdaQueryWrapper<>();
|
|
|
+ lqw.eq(Department::getSuperiorId,departmentId);
|
|
|
+ List<Department> departmentList = departmentMapper.selectList(lqw);
|
|
|
+
|
|
|
+ if (departmentList!=null&&departmentList.size()>0){
|
|
|
+ List<Integer> collect = departmentList.stream().map(Department::getDepartmentId).collect(Collectors.toList());
|
|
|
+ deptIds.addAll(collect);
|
|
|
+ for (Integer id : collect) {
|
|
|
+ setDeptIdList(id,deptIds);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private void syncServiceData(String startDate, String endDate, Integer companyId) {
|
|
|
List<ReportExtraDegree> extraDegrees = reportExtraDegreeService.list(new QueryWrapper<ReportExtraDegree>().eq("company_id", companyId));
|
|
|
//配置请求xml
|