|
@@ -14,16 +14,17 @@ import com.usky.iot.service.PmProjectService;
|
|
|
import com.usky.iot.service.PmWorkContentService;
|
|
|
import com.usky.iot.service.PmWorkReportService;
|
|
|
import com.usky.common.mybatis.core.AbstractCrudService;
|
|
|
+import com.usky.iot.service.vo.PmProjectWorkTimeVo;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
import java.time.DayOfWeek;
|
|
|
import java.time.LocalDate;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.temporal.TemporalAdjusters;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.List;
|
|
|
+import java.util.*;
|
|
|
|
|
|
|
|
|
/**
|
|
@@ -43,9 +44,6 @@ public class PmWorkReportServiceImpl extends AbstractCrudService<PmWorkReportMap
|
|
|
@Autowired
|
|
|
private PmWorkReportMapper pmWorkReportMapper;
|
|
|
|
|
|
- @Autowired
|
|
|
- private PmProjectMapper pmProjectMapper;
|
|
|
-
|
|
|
@Autowired
|
|
|
private PmProjectService pmProjectService;
|
|
|
|
|
@@ -78,7 +76,7 @@ public class PmWorkReportServiceImpl extends AbstractCrudService<PmWorkReportMap
|
|
|
startDate1 = startDate1.plusDays(1);
|
|
|
}
|
|
|
LambdaQueryWrapper<PmWorkReport> queryWrapperR = Wrappers.lambdaQuery();
|
|
|
- queryWrapperR.select(PmWorkReport::getId, PmWorkReport::getReportDate, PmWorkReport::getSubmitDate,PmWorkReport::getTomorrowPlan, PmWorkReport::getCoordinateWork, PmWorkReport::getCcTo)
|
|
|
+ queryWrapperR.select(PmWorkReport::getId, PmWorkReport::getReportDate, PmWorkReport::getSubmitDate, PmWorkReport::getTomorrowPlan, PmWorkReport::getCoordinateWork, PmWorkReport::getCcTo)
|
|
|
.eq(PmWorkReport::getSubmitterId, SecurityUtils.getUserId())
|
|
|
.between(PmWorkReport::getReportDate, startDate, endDate)
|
|
|
.orderByAsc(PmWorkReport::getReportDate)
|
|
@@ -145,8 +143,15 @@ public class PmWorkReportServiceImpl extends AbstractCrudService<PmWorkReportMap
|
|
|
*/
|
|
|
@Override
|
|
|
public void addReport(PmWorkReport pmWorkReport) {
|
|
|
- //计算总工时
|
|
|
- BigDecimal totalWorkTime = BigDecimal.ZERO;
|
|
|
+ BigDecimal totalWorkTime = BigDecimal.ZERO; //计算总工时
|
|
|
+ int size = pmWorkReport.getWorkContents().size();
|
|
|
+ for (int p = 0; p < size; p++) {
|
|
|
+ for (int q = p + 1; q < size; q++) {
|
|
|
+ if (pmWorkReport.getWorkContents().get(p).getProjectId() == pmWorkReport.getWorkContents().get(q).getProjectId()) {
|
|
|
+ throw new BusinessException("存在重复项目,请检查!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
for (PmWorkContent a : pmWorkReport.getWorkContents()) {
|
|
|
totalWorkTime = totalWorkTime.add(a.getWorkTime());
|
|
|
}
|
|
@@ -206,7 +211,7 @@ public class PmWorkReportServiceImpl extends AbstractCrudService<PmWorkReportMap
|
|
|
rp.setId(pmWorkReport.getId());
|
|
|
rp.setReportDate(pmWorkReport.getReportDate());
|
|
|
rp.setSubmitterId(pmWorkReport.getSubmitterId());
|
|
|
- rp.setSubmitDate(pmWorkReport.getSubmitDate());
|
|
|
+ rp.setSubmitDate(LocalDateTime.now());
|
|
|
rp.setCcTo(pmWorkReport.getCcTo());
|
|
|
rp.setCoordinateWork(pmWorkReport.getCoordinateWork());
|
|
|
rp.setTomorrowPlan(pmWorkReport.getTomorrowPlan());
|
|
@@ -221,13 +226,14 @@ public class PmWorkReportServiceImpl extends AbstractCrudService<PmWorkReportMap
|
|
|
pmWorkReportMapper.updateById(rp);
|
|
|
|
|
|
LambdaQueryWrapper<PmWorkContent> queryWrapper = Wrappers.lambdaQuery();
|
|
|
- queryWrapper.select(PmWorkContent::getSubmitterId, PmWorkContent::getCreateBy, PmWorkContent::getCreateTime, PmWorkContent::getDeptId, PmWorkContent::getTenantId)
|
|
|
+ queryWrapper.select(PmWorkContent::getReportId, PmWorkContent::getSubmitterId, PmWorkContent::getCreateBy, PmWorkContent::getCreateTime, PmWorkContent::getDeptId, PmWorkContent::getTenantId)
|
|
|
.eq(PmWorkContent::getReportId, pmWorkReport.getId())
|
|
|
.last("LIMIT 1");
|
|
|
PmWorkContent f = pmWorkContentMapper.selectOne(queryWrapper);
|
|
|
pmWorkContentService.deleteContent(pmWorkReport.getId());
|
|
|
List<PmWorkContent> contents = pmWorkReport.getWorkContents();
|
|
|
for (PmWorkContent e : contents) {
|
|
|
+ e.setReportId(f.getReportId());
|
|
|
e.setUpdateBy(SecurityUtils.getUsername());
|
|
|
e.setUpdateTime(LocalDateTime.now());
|
|
|
e.setSubmitterId(f.getSubmitterId());
|
|
@@ -239,4 +245,69 @@ public class PmWorkReportServiceImpl extends AbstractCrudService<PmWorkReportMap
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<Map<String, Object>> countTime() {
|
|
|
+ int scale = 2;
|
|
|
+ RoundingMode roundingMode = RoundingMode.HALF_UP;
|
|
|
+ List<Map<String, Object>> returnList = new ArrayList<>();
|
|
|
+ Map<String, Object> weekTotalMap = new HashMap<>();
|
|
|
+ Map<String, Object> monthTotalMap = new HashMap<>();
|
|
|
+ Map<String, Object> weekMap = new HashMap<>();
|
|
|
+ Map<String, Object> monthMap = new HashMap<>();
|
|
|
+ List<PmProjectWorkTimeVo> returnListW = new ArrayList<>();
|
|
|
+ List<PmProjectWorkTimeVo> returnListM = new ArrayList<>();
|
|
|
+ LocalDate today = LocalDate.now();
|
|
|
+ LocalDate startOfWeek = today.with(TemporalAdjusters.previousOrSame(java.time.DayOfWeek.MONDAY));
|
|
|
+ LocalDate endOfWeek = today.with(TemporalAdjusters.nextOrSame(java.time.DayOfWeek.SUNDAY));
|
|
|
+ LocalDate startOfMonth = today.withDayOfMonth(1);
|
|
|
+ LocalDate endOfMonth = today.withDayOfMonth(today.lengthOfMonth());
|
|
|
+ BigDecimal weekTotal = BigDecimal.ZERO;
|
|
|
+ LambdaQueryWrapper<PmWorkContent> wrapperW = Wrappers.lambdaQuery();
|
|
|
+ wrapperW.eq(PmWorkContent::getSubmitterId,SecurityUtils.getUserId())
|
|
|
+ .between(PmWorkContent::getCreateTime,startOfWeek,endOfWeek);
|
|
|
+ List<PmWorkContent> week = pmWorkContentMapper.selectList(wrapperW);
|
|
|
+ if (week.isEmpty()){
|
|
|
+ weekTotalMap.put("WeekWorkTimeTotal",0);
|
|
|
+ weekMap.put("WeeklyData",week);
|
|
|
+ }
|
|
|
+ for (int i = 0; i < week.size(); i++) {
|
|
|
+ weekTotal = weekTotal.add(week.get(i).getWorkTime());
|
|
|
+ }
|
|
|
+ BigDecimal monthTotal = BigDecimal.ZERO;
|
|
|
+ LambdaQueryWrapper<PmWorkContent> wrapperM = Wrappers.lambdaQuery();
|
|
|
+ wrapperM.eq(PmWorkContent::getSubmitterId,SecurityUtils.getUserId())
|
|
|
+ .between(PmWorkContent::getCreateTime,startOfMonth,endOfMonth);
|
|
|
+ List<PmWorkContent> month = pmWorkContentMapper.selectList(wrapperW);
|
|
|
+ if (month.isEmpty()){
|
|
|
+ monthTotalMap.put("MonthWorkTimeTotal",0);
|
|
|
+ monthMap.put("MonthlyData",month);
|
|
|
+ }
|
|
|
+ for (int j = 0; j < month.size(); j++) {
|
|
|
+ monthTotal = monthTotal.add(month.get(j).getWorkTime());
|
|
|
+ }
|
|
|
+ for (int a = 0; a < week.size(); a++) {
|
|
|
+ PmProjectWorkTimeVo workTimeVo = new PmProjectWorkTimeVo();
|
|
|
+ workTimeVo.setProjectName(week.get(a).getProjectName());
|
|
|
+ workTimeVo.setWorkTime(week.get(a).getWorkTime());
|
|
|
+ workTimeVo.setPercentage(week.get(a).getWorkTime().divide(weekTotal, scale, roundingMode));
|
|
|
+ returnListW.add(workTimeVo);
|
|
|
+ }
|
|
|
+ for (int b = 0; b < month.size(); b++) {
|
|
|
+ PmProjectWorkTimeVo workTimeVo = new PmProjectWorkTimeVo();
|
|
|
+ workTimeVo.setProjectName(month.get(b).getProjectName());
|
|
|
+ workTimeVo.setWorkTime(month.get(b).getWorkTime());
|
|
|
+ workTimeVo.setPercentage(month.get(b).getWorkTime().divide(weekTotal, scale, roundingMode));
|
|
|
+ returnListM.add(workTimeVo);
|
|
|
+ }
|
|
|
+ weekTotalMap.put("WeekWorkTimeTotal",weekTotal);
|
|
|
+ monthTotalMap.put("MonthWorkTimeTotal",monthTotal);
|
|
|
+ weekMap.put("WeeklyData",returnListW);
|
|
|
+ monthMap.put("MonthlyData",returnListM);
|
|
|
+ returnList.add(weekTotalMap);
|
|
|
+ returnList.add(monthTotalMap);
|
|
|
+ returnList.add(weekMap);
|
|
|
+ returnList.add(monthMap);
|
|
|
+ return returnList;
|
|
|
+ }
|
|
|
}
|