فهرست منبع

人员工时填报及时率

yurk 2 سال پیش
والد
کامیت
039a5ef9ab

+ 4 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectController.java

@@ -488,5 +488,9 @@ public class ProjectController {
     public HttpRespMsg getProjectByCustomer(Integer customerId,HttpServletRequest request){
         return projectService.getProjectByCustomer(customerId,request);
     }
+    @RequestMapping("/getUserReportTimelinessRate")
+    public HttpRespMsg getUserReportTimelinessRate(HttpServletRequest request,String startDate,String endDate,Integer departmentId,String userId,Integer pageIndex,Integer pageSize){
+        return projectService.getUserReportTimelinessRate(request,startDate,endDate,departmentId,userId,pageIndex,pageSize);
+    }
 }
 

+ 14 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/vo/TimelinessRateVO.java

@@ -0,0 +1,14 @@
+package com.management.platform.entity.vo;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+@Data
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+public class TimelinessRateVO {
+    private String userName;
+    private String departmentName;
+    private String timelinessRate;
+}

+ 2 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/ReportMapper.java

@@ -129,4 +129,6 @@ public interface ReportMapper extends BaseMapper<Report> {
 
     @Update("update report set task_id = null where task_id=#{taskId}")
     void deleteReportTask(Integer taskId);
+
+    List<Map<String, Object>> getUserReportTimelinessRate(Integer companyId,String startDate, String endDate);
 }

+ 2 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectService.java

@@ -135,4 +135,6 @@ public interface ProjectService extends IService<Project> {
     HttpRespMsg getUserWorkingTimeList(String userId, Integer projectId, String startDate, String endDate, Integer pageIndex, Integer pageSize,HttpServletRequest request);
 
     HttpRespMsg exportUserWorkingTimeList(String userId, Integer projectId, String startDate, String endDate,HttpServletRequest request);
+
+    HttpRespMsg getUserReportTimelinessRate(HttpServletRequest request, String startDate, String endDate, Integer departmentId, String userId,Integer pageIndex,Integer pageSize);
 }

+ 81 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

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

+ 9 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/ReportMapper.xml

@@ -624,4 +624,13 @@
     <select id="getOneProjectBaseCost" resultType="java.util.HashMap">
         SELECT basecost_id as basecostId, IFNULL(SUM(cost), 0) AS cost FROM report WHERE state = 1 and basecost_id > 0 AND project_id = #{projectId} group by basecost_id
     </select>
+
+    <select id="getUserReportTimelinessRate" resultType="java.util.Map">
+        select `user`.name as userName,report.create_date as createDate,report.create_time as createTime from report
+        left join `user` on `user`.id=report.creator_id
+        where report.company_id=#{companyId}
+        and report.state=1
+        and report.create_date between #{startDate} and #{endDate}
+        group by `user`.id,report.create_date
+    </select>
 </mapper>