|
@@ -33,10 +33,12 @@ import javax.servlet.http.HttpServletRequest;
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
import java.io.*;
|
|
|
import java.math.BigDecimal;
|
|
|
-import java.text.DecimalFormat;
|
|
|
-import java.text.NumberFormat;
|
|
|
-import java.text.SimpleDateFormat;
|
|
|
+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.format.DateTimeFormatter;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
@@ -3081,9 +3083,84 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
|
|
|
return msg;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public HttpRespMsg getUserReportTimelinessRate(HttpServletRequest request, String startDate, String endDate, Integer departmentId, String userId,Integer pageIndex,Integer pageSize) {
|
|
|
+ HttpRespMsg msg=new HttpRespMsg();
|
|
|
+ DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
|
|
|
+ LocalDateTime sDate = LocalDate.parse(startDate).atTime(LocalTime.now());
|
|
|
+ LocalDateTime eDate = LocalDate.parse(endDate).atTime(LocalTime.now());
|
|
|
+ Duration duration=Duration.between(sDate,eDate);
|
|
|
+ long days = duration.toDays();
|
|
|
+ Integer companyId= userMapper.selectById(request.getHeader("token")).getCompanyId();
|
|
|
+ TimeType timeType = timeTypeMapper.selectById(companyId);
|
|
|
+ String alertTime = timeType.getAlertTime();
|
|
|
+ Integer alertType = timeType.getAlertType();
|
|
|
+ LocalTime alert = LocalTime.parse(alertTime);
|
|
|
+ List<Map<String,Object>> reportList=reportMapper.getUserReportTimelinessRate(companyId,startDate,endDate);
|
|
|
+ int i=0;
|
|
|
+ QueryWrapper<User> queryWrapper=new QueryWrapper();
|
|
|
+ queryWrapper.eq("company_id",companyId);
|
|
|
+ if(departmentId!=null){
|
|
|
+ queryWrapper.eq("department_id",departmentId);
|
|
|
+ }
|
|
|
+ if(userId!=null){
|
|
|
+ queryWrapper.eq("id",userId);
|
|
|
+ }
|
|
|
+ List<Department> departmentList = departmentMapper.selectList(new QueryWrapper<Department>().eq("company_id", companyId));
|
|
|
+ IPage<User> userIPage = userMapper.selectPage(new Page<>(pageIndex,pageSize),queryWrapper);
|
|
|
+ Map<Object, List<Map<String, Object>>> listMap = reportList.stream().collect(Collectors.groupingBy(rp -> rp.get("userName")));
|
|
|
+ List<TimelinessRateVO> resultList=new ArrayList<>();
|
|
|
+ for (User user : userIPage.getRecords()){
|
|
|
+ TimelinessRateVO timelinessRateVO=new TimelinessRateVO();
|
|
|
+ timelinessRateVO.setUserName(user.getName());
|
|
|
+ Optional<Department> first = departmentList.stream().filter(dp -> dp.getDepartmentId().equals(user.getDepartmentId())).findFirst();
|
|
|
+ if(first.isPresent()){
|
|
|
+ timelinessRateVO.setDepartmentName(first.get().getDepartmentName());
|
|
|
+ }
|
|
|
+ List<Map<String, Object>> mapList = listMap.get(user.getName());
|
|
|
+ if(mapList!=null){
|
|
|
+ int num=0;
|
|
|
+ for (Map<String, Object> map : mapList) {
|
|
|
+ Object date = map.get("createDate");
|
|
|
+ //去掉sql返回的毫秒值
|
|
|
+ Timestamp timestamp = (Timestamp) map.get("createTime");
|
|
|
+ LocalDate createDate = LocalDate.parse(String.valueOf(date));
|
|
|
+ LocalDate createTimeDate =timestamp.toLocalDateTime().toLocalDate();
|
|
|
+ LocalTime createTime =timestamp.toLocalDateTime().toLocalTime();
|
|
|
+ //根据提醒类型 判断比较昨天还是今天
|
|
|
+ if(alertType==1){
|
|
|
+ createDate=createDate.plusDays(1);
|
|
|
+ }
|
|
|
+ if(createTimeDate.isBefore(createDate)||(createTimeDate.isEqual(createDate)&&createTime.isBefore(alert))){
|
|
|
+ num++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ BigDecimal bigDecimal=new BigDecimal(num);
|
|
|
+ BigDecimal divide;
|
|
|
+ if(days!=0){
|
|
|
+ divide = bigDecimal.divide(BigDecimal.valueOf(days), 2, BigDecimal.ROUND_HALF_UP);
|
|
|
+ }else if(days==0&&num!=0){
|
|
|
+ divide=new BigDecimal(1);
|
|
|
+ }else{
|
|
|
+ divide=new BigDecimal(0);
|
|
|
+ }
|
|
|
+ DecimalFormat dft = new DecimalFormat("0%");
|
|
|
+ String number = dft.format(divide);
|
|
|
+ timelinessRateVO.setTimelinessRate(String.valueOf(number));
|
|
|
+ }
|
|
|
+ resultList.add(timelinessRateVO);
|
|
|
+ }
|
|
|
+ long total=userIPage.getTotal();
|
|
|
+ HashMap map=new HashMap();
|
|
|
+ map.put("total",total);
|
|
|
+ map.put("list",resultList);
|
|
|
+ msg.data=map;
|
|
|
+ return msg;
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
private List<Department> getSubDepts(Department dp, List<Department> list) {
|
|
|
- List<Department> collect = list.stream().filter(l -> dp.getDepartmentId().equals(l.getSuperiorId())).collect(Collectors.toList());;
|
|
|
+ List<Department> collect = list.stream().filter(l -> dp.getDepartmentId().equals(l.getSuperiorId())).collect(Collectors.toList());
|
|
|
List<Department> allList = new ArrayList<>();
|
|
|
allList.addAll(collect);
|
|
|
if (collect.size() > 0) {
|