yusm před 7 měsíci
rodič
revize
2864d1e276

+ 8 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/DeviceController.java

@@ -4,6 +4,7 @@ package com.management.platform.controller;
 import com.management.platform.entity.Device;
 import com.management.platform.service.DeviceService;
 import com.management.platform.util.HttpRespMsg;
+import org.springframework.format.annotation.DateTimeFormat;
 import org.springframework.web.bind.annotation.RequestMapping;
 
 import org.springframework.web.bind.annotation.RequestParam;
@@ -12,6 +13,7 @@ import org.springframework.web.bind.annotation.RestController;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
 
 /**
  * <p>
@@ -39,10 +41,13 @@ public class DeviceController {
                                        @RequestParam(required = false) String deviceName,
                                        @RequestParam(required = false) String deviceModel,
                                        @RequestParam(required = false) String manufacturer,
-                                       @RequestParam(required = false) LocalDate purchaseDate,
-                                       @RequestParam(required = false) LocalDate maintenanceDate
+                                       @RequestParam(required = false) String purchaseDate,
+                                       @RequestParam(required = false) String maintenanceDate
                                        ){
-        return deviceService.updateOrInsert(request,id,deviceCode,deviceName,deviceModel,manufacturer,purchaseDate,maintenanceDate);
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+        LocalDate parse_purchaseDate = LocalDate.parse(purchaseDate, formatter);
+        LocalDate parse_maintenanceDate = LocalDate.parse(maintenanceDate, formatter);
+        return deviceService.updateOrInsert(request,id,deviceCode,deviceName,deviceModel,manufacturer,parse_purchaseDate,parse_maintenanceDate);
     }
 
     @RequestMapping("/delete")

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

@@ -133,6 +133,11 @@ public class ProjectController {
         return projectService.getProjectEstimatedWork(pageIndex, pageSize, projectId, request);
     }
 
+    @RequestMapping("/getProjectEstimatedWorkNew")
+    public HttpRespMsg getProjectEstimatedWorkNew(@RequestParam Integer pageIndex, @RequestParam Integer pageSize, Integer projectId ,Integer type,Integer isWarn) {
+        return projectService.getProjectEstimatedWorkNew(pageIndex, pageSize, projectId,type,isWarn, request);
+    }
+
 
     @RequestMapping("/saveBatchAccoDegrees")
     public HttpRespMsg saveBatchAccoDegrees(String ids,

+ 2 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/vo/GroupEstimatedWorkVO.java

@@ -11,4 +11,6 @@ public class GroupEstimatedWorkVO {
     private String projectCode;
     private String estimatedWorkTime;
     private String workTime;
+    private String remainWorkTime;
+    private String remainWorkTimeProportion;
 }

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

@@ -313,4 +313,6 @@ public interface ProjectService extends IService<Project> {
     HttpRespMsg getProjectListByPage(Integer pageIndex, Integer pageSize, String infoString, Integer id, Integer forReport, HttpServletRequest request);
 
     HttpRespMsg exportTimeByProjectAndEmployee(String date, HttpServletRequest request);
+
+    HttpRespMsg getProjectEstimatedWorkNew(Integer pageIndex, Integer pageSize, Integer projectId, Integer type,Integer isWarn, HttpServletRequest request);
 }

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

@@ -82,7 +82,7 @@ public class DeviceCostServiceImpl extends ServiceImpl<DeviceCostMapper, DeviceC
             return httpRespMsg;
         }
         UpdateWrapper<DeviceCost> updateWrapper = new UpdateWrapper<>();
-        updateWrapper.eq("id",deviceCost.getId()).set(StringUtils.isNotEmpty(deviceCost.getYmonth()),"ymonth",deviceCost.getYmonth());
+        updateWrapper.eq("id",deviceCost.getId()).set(deviceCost.getMonthCost()!=null,"month_cost",deviceCost.getMonthCost());
         deviceCostMapper.update(null, updateWrapper);
         return httpRespMsg;
     }
@@ -240,14 +240,14 @@ public class DeviceCostServiceImpl extends ServiceImpl<DeviceCostMapper, DeviceC
 
                 List<DeviceLog> deviceLogs = deviceLogMapper.selectList(new QueryWrapper<DeviceLog>()
                         .between("create_date", startDate, endDate)
-                        .isNotNull("end_time"));
+                        .isNotNull("end_time").isNotNull("use_time"));
                 for (DeviceCost deviceCost : deviceCostArrayList) {
                     BigDecimal monthCost = deviceCost.getMonthCost();
                     Integer deviceId = deviceCost.getDeviceId();
-                    double sumTime = deviceLogs.stream().filter(dl -> dl.getDeviceId().equals(deviceId)).mapToDouble(DeviceLog::getUseTime).sum();
+                    double sumTime = deviceLogs.stream().filter(dl -> dl.getDeviceId().equals(deviceId)&&dl.getUseTime()!=null).mapToDouble(DeviceLog::getUseTime).sum();
                     if (sumTime>0){
                         BigDecimal result = monthCost.divide(BigDecimal.valueOf(sumTime), 2, RoundingMode.HALF_UP);
-                        List<DeviceLog> deviceLogList = deviceLogs.stream().filter(dl -> dl.getDeviceId().equals(deviceId)).collect(Collectors.toList());
+                        List<DeviceLog> deviceLogList = deviceLogs.stream().filter(dl -> dl.getDeviceId().equals(deviceId)&&dl.getUseTime()!=null).collect(Collectors.toList());
                         for (DeviceLog deviceLog : deviceLogList) {
                             Double useTime = deviceLog.getUseTime();
                             BigDecimal multiply = BigDecimal.valueOf(useTime).multiply(result);

+ 134 - 14
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DeviceLogServiceImpl.java

@@ -21,7 +21,11 @@ import org.springframework.transaction.annotation.Transactional;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.math.BigDecimal;
+import java.time.Duration;
 import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.ChronoUnit;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -58,10 +62,21 @@ public class DeviceLogServiceImpl extends ServiceImpl<DeviceLogMapper, DeviceLog
         HashMap<String, Object> hashMap = new HashMap<>();
         hashMap.put("companyId", user.getCompanyId());
         hashMap.put("usageUserId", user.getId());
-        hashMap.put("startDate",deviceLog.getStartTime());
-        hashMap.put("endDate", deviceLog.getEndTime());
+        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+
+        hashMap.put("startDate",deviceLog.getStartTime().format(dateTimeFormatter));
+        hashMap.put("endDate", deviceLog.getEndTime().format(dateTimeFormatter));
 
         ArrayList<HashMap<String,Object>> maps =deviceLogMapper.getDeviceLogList(hashMap);
+        if(maps != null && !maps.isEmpty()){
+            for (HashMap<String, Object> map : maps) {
+                if(map.get("endTime") != null){
+                    map.put("usageStatus",false);
+                }else {
+                    map.put("usageStatus",true);
+                }
+            }
+        }
         httpRespMsg.setData(maps);
         return httpRespMsg;
     }
@@ -89,7 +104,7 @@ public class DeviceLogServiceImpl extends ServiceImpl<DeviceLogMapper, DeviceLog
             deviceLog.setStartTime(device.getStartTime());
             deviceLog.setCreateDate(LocalDate.now());
             deviceLog.setDeviceId(selectedDevice.getId());
-            deviceLog.setProjectId(selectedDevice.getProjectId());
+            deviceLog.setProjectId(device.getProjectId());
             deviceLog.setUsageUserId(user.getId());
             deviceLogMapper.insert(deviceLog);
 
@@ -110,17 +125,122 @@ public class DeviceLogServiceImpl extends ServiceImpl<DeviceLogMapper, DeviceLog
                 return httpRespMsg;
             }
             DeviceLog deviceLog = deviceLogMapper.selectById(device.getDeviceLogId());
-            deviceLog.setEndTime(device.getEndTime());
-            deviceLog.setUseTime(device.getUseTime());
-            deviceLogMapper.update(null,new UpdateWrapper<DeviceLog>()
-                    .set("end_time",deviceLog.getEndTime()).set("use_time",deviceLog.getUseTime())
-                    .eq("id",deviceLog.getId()));
-            selectedDevice.setUsageStatus(false);
-            selectedDevice.setUsageUserId(null);
-            deviceMapper.update(null,new UpdateWrapper<Device>()
-                    .eq("id",selectedDevice.getId())
-                    .set("usage_status",selectedDevice.getUsageStatus())
-                    .set("usage_user_id",selectedDevice.getUsageUserId()));
+
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
+            DateTimeFormatter formatterDate = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+            LocalDateTime endTime = device.getEndTime();
+            LocalDateTime startTime = device.getStartTime();
+            // 判断同一天
+            boolean isSameDay = startTime.toLocalDate().isEqual(endTime.toLocalDate());
+            // 判断同一个月
+            boolean isSameMonth = startTime.getMonth() == endTime.getMonth() && startTime.getYear() == endTime.getYear();
+            // 计算天数间隔
+            long daysBetween = ChronoUnit.DAYS.between(startTime.toLocalDate(), endTime.toLocalDate());
+            System.out.println("同一天: " + isSameDay);
+            System.out.println("同一个月: " + isSameMonth);
+            System.out.println("天数间隔: " + daysBetween);
+            // 将时间分组
+            List<LocalDateTime[]> groupedTimes = new ArrayList<>();
+
+            LocalDateTime currentStart = startTime;
+            while (currentStart.isBefore(endTime)) {
+                LocalDateTime nextEnd = currentStart.toLocalDate().atTime(23, 59, 59); // 当天的最后时间
+
+                if (nextEnd.isAfter(endTime)) {
+                    nextEnd = endTime; // 如果超过了结束时间,使用结束时间
+                }
+
+                groupedTimes.add(new LocalDateTime[]{currentStart, nextEnd});
+                currentStart = currentStart.toLocalDate().plusDays(1).atStartOfDay(); // 移动到下一天的开始时间
+            }
+            System.out.println("长度: " + groupedTimes.size());
+
+            // 输出分组结果
+            for (LocalDateTime[] group : groupedTimes) {
+                String formatStart = group[0].format(formatter);
+                String formatEnd = group[1].format(formatter);
+
+                Duration duration = Duration.between(group[0], group[1]);
+                double hours = duration.toMinutes() / 60.0; // 转换为小时
+                // 四舍五入保留一位小数
+                hours = Math.round(hours * 10.0) / 10.0;
+                String createDate = group[0].format(formatterDate);
+                System.out.println("开始时间: " + formatStart + ", 结束时间: " + formatEnd+",时间差:"+hours+",日期:"+createDate);
+            }
+
+            //当天的
+            if (groupedTimes.size()==1) {
+                deviceLog.setEndTime(device.getEndTime());
+                deviceLog.setStartTime(device.getStartTime());
+                Duration duration = Duration.between(deviceLog.getStartTime(), deviceLog.getEndTime());
+                double hours = duration.toMinutes() / 60.0; // 转换为小时
+                // 四舍五入保留一位小数
+                hours = Math.round(hours * 10.0) / 10.0;
+
+                deviceLogMapper.update(null,new UpdateWrapper<DeviceLog>()
+                        .set("start_time",deviceLog.getStartTime())
+                        .set("end_time",deviceLog.getEndTime()).set("use_time",hours)
+                        .eq("id",deviceLog.getId()));
+                selectedDevice.setUsageStatus(false);
+                selectedDevice.setUsageUserId(null);
+                deviceMapper.update(null,new UpdateWrapper<Device>()
+                        .eq("id",selectedDevice.getId())
+                        .set("usage_status",selectedDevice.getUsageStatus())
+                        .set("usage_user_id",selectedDevice.getUsageUserId()));
+            }
+            //间隔好几天
+            else {
+                for (int i = 0; i < groupedTimes.size(); i++) {
+                    if (i==0){
+                        String formatStart = groupedTimes.get(i)[0].format(formatter);
+                        String formatEnd = groupedTimes.get(i)[1].format(formatter);
+                        Duration duration = Duration.between(groupedTimes.get(i)[0], groupedTimes.get(i)[1]);
+                        double hours = duration.toMinutes() / 60.0; // 转换为小时
+                        // 四舍五入保留一位小数
+                        hours = Math.round(hours * 10.0) / 10.0;
+                        String createDate = groupedTimes.get(i)[0].format(formatterDate);
+
+                        deviceLog.setStartTime(LocalDateTime.parse(formatStart, formatter));
+                        deviceLog.setEndTime(LocalDateTime.parse(formatEnd, formatter));
+                        deviceLog.setCreateDate(LocalDate.parse(createDate, formatterDate));
+                        deviceLog.setUseTime(hours);
+
+                        deviceLogMapper.update(null,new UpdateWrapper<DeviceLog>()
+                                .set("start_time",deviceLog.getStartTime())
+                                .set("end_time",deviceLog.getEndTime())
+                                .set("use_time",hours)
+                                .set("create_date",createDate)
+                                .eq("id",deviceLog.getId()));
+
+
+                    }else {
+                        String formatStart = groupedTimes.get(i)[0].format(formatter);
+                        String formatEnd = groupedTimes.get(i)[1].format(formatter);
+                        Duration duration = Duration.between(groupedTimes.get(i)[0], groupedTimes.get(i)[1]);
+                        double hours = duration.toMinutes() / 60.0; // 转换为小时
+                        // 四舍五入保留一位小数
+                        hours = Math.round(hours * 10.0) / 10.0;
+                        String createDate = groupedTimes.get(i)[0].format(formatterDate);
+
+                        DeviceLog deviceLogNew = new DeviceLog();
+                        deviceLogNew.setDeviceId(deviceLog.getDeviceId());
+                        deviceLogNew.setProjectId(deviceLog.getProjectId());
+                        deviceLogNew.setStartTime(LocalDateTime.parse(formatStart, formatter));
+                        deviceLogNew.setEndTime(LocalDateTime.parse(formatEnd, formatter));
+                        deviceLogNew.setCreateDate(LocalDate.parse(createDate, formatterDate));
+                        deviceLogNew.setUsageUserId(deviceLog.getUsageUserId());
+                        deviceLogNew.setUseTime(hours);
+                        deviceLogMapper.insert(deviceLogNew);
+                    }
+
+                    selectedDevice.setUsageStatus(false);
+                    selectedDevice.setUsageUserId(null);
+                    deviceMapper.update(null,new UpdateWrapper<Device>()
+                            .eq("id",selectedDevice.getId())
+                            .set("usage_status",selectedDevice.getUsageStatus())
+                            .set("usage_user_id",selectedDevice.getUsageUserId()));
+                }
+            }
             return httpRespMsg;
         }
 

+ 23 - 8
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/DeviceServiceImpl.java

@@ -5,14 +5,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.management.platform.entity.CompanyDingding;
-import com.management.platform.entity.Device;
-import com.management.platform.entity.User;
-import com.management.platform.entity.WxCorpInfo;
-import com.management.platform.mapper.CompanyDingdingMapper;
-import com.management.platform.mapper.DeviceMapper;
-import com.management.platform.mapper.UserMapper;
-import com.management.platform.mapper.WxCorpInfoMapper;
+import com.management.platform.entity.*;
+import com.management.platform.mapper.*;
 import com.management.platform.service.DeviceService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.management.platform.service.ExcelExportService;
@@ -45,12 +39,18 @@ public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> impleme
     @Resource
     private DeviceMapper deviceMapper;
 
+    @Resource
+    private DeviceLogMapper deviceLogMapper;
+
     @Resource
     private WxCorpInfoMapper wxCorpInfoMapper;
 
     @Resource
     private CompanyDingdingMapper companyDingdingMapper;
 
+    @Resource
+    private ProjectMapper projectMapper;
+
     @Resource
     ExcelExportService excelExportService;
 
@@ -153,6 +153,21 @@ public class DeviceServiceImpl extends ServiceImpl<DeviceMapper, Device> impleme
             if (one!=null&& one.getUsageStatus()&&StringUtils.isNotEmpty(one.getUsageUserId())){
                 User selectedUser = userMapper.selectById(one.getUsageUserId());
                 one.setUsageUserName(selectedUser.getName());
+
+                List<DeviceLog> deviceLogs = deviceLogMapper.selectList(new QueryWrapper<DeviceLog>().eq("device_id", one.getId()).isNull("end_time").orderByDesc("id"));
+                if (!deviceLogs.isEmpty()){
+                    DeviceLog deviceLog = deviceLogs.get(0);
+                    one.setProjectId(deviceLog.getProjectId());
+                    one.setProjectName(projectMapper.selectById(deviceLogs.get(0).getProjectId()).getProjectName());
+                    one.setStartTime(deviceLog.getStartTime());
+                    one.setDeviceLogId(deviceLog.getId());
+                    if (deviceLog.getEndTime()!=null){
+                        one.setEndTime(deviceLog.getEndTime());
+                    }
+                    if (deviceLog.getUseTime()!=null){
+                        one.setUseTime(deviceLog.getUseTime());
+                    }
+                }
             }
             httpRespMsg.setData(one);
             return httpRespMsg;

+ 131 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -719,6 +719,137 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
         return httpRespMsg;
     }
 
+    @Override
+    public HttpRespMsg getProjectEstimatedWorkNew(Integer pageIndex, Integer pageSize, Integer projectId, Integer type,Integer isWarn, HttpServletRequest request) {
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        //通过公司id获取该公司所有的项目列表
+        User user = userMapper.selectById(request.getHeader("Token"));
+        Integer companyId = user.getCompanyId();
+        EstimateTimeSetting estimateTimeSetting = estimateTimeSettingMapper.selectOne(new QueryWrapper<EstimateTimeSetting>().eq("company_id", companyId));
+        //该公司下的allday
+        float allday=timeTypeMapper.selectOne(new QueryWrapper<TimeType>()
+                .eq("company_id",companyId)).getAllday();
+        //根据公司的id搜索该公司有哪些项目  20231108之前完成的不统计,状态为进行中/已完成
+        List<Project> records = projectMapper.selectList(new QueryWrapper<Project>().eq("company_id", companyId).in("status", 1, 2)
+                .and(wrapper -> wrapper.isNull("finish_date").or()
+                        .ge("finish_date", "2023-11-08")).eq(projectId != null, "id", projectId));
+
+        List<Integer> collectIds = records.stream().map(Project::getId).collect(Collectors.toList());
+
+        //根据查询道德project列表查询总的reporeList
+        List<Report> reportList = reportMapper.selectList(new QueryWrapper<Report>()
+                .in("project_id", collectIds));
+        //根据查询道德project列表查询总的task_groupList
+        List<TaskGroup> taskGroups = taskGroupMapper.selectList(new QueryWrapper<TaskGroup>()
+                .in("project_id", collectIds));
+
+        DecimalFormat df = new DecimalFormat("0.00");
+        List<GroupEstimatedWorkVO> lastList=new ArrayList<>();
+        for (Project project : records) {
+
+            List<TaskGroup> taskGroupCollect = taskGroups.stream().filter(t -> t.getProjectId().equals(project.getId())).collect(Collectors.toList());
+
+            //0代表按项目查看
+            if (type==0){
+                GroupEstimatedWorkVO estimatedWorkVO = new GroupEstimatedWorkVO();
+                Double reallWorkTime = reportList.stream().filter(r -> r.getProjectId() .equals( project.getId())&&r.getWorkingTime()!=null)
+                        .mapToDouble(Report::getWorkingTime).sum();
+                String rWorkTime=reallWorkTime==null ? "0":df.format(reallWorkTime);
+                estimatedWorkVO.setProjectName(project.getProjectName());
+                estimatedWorkVO.setWorkTime(rWorkTime);
+                String pEstimatedWork=project.getManDay()==null? "0": (project.getManDay()*allday+"");
+                estimatedWorkVO.setEstimatedWorkTime(pEstimatedWork);
+                if (project.getManDay()==null){
+                    estimatedWorkVO.setRemainWorkTime("\\");
+                    estimatedWorkVO.setRemainWorkTimeProportion("\\");
+                }else{
+                    double rWorkTimeDouble = Double.parseDouble(rWorkTime);
+                    double pEstimatedWorkDouble = Double.parseDouble(pEstimatedWork);
+                    double remainDouble = pEstimatedWorkDouble - rWorkTimeDouble;
+                    estimatedWorkVO.setRemainWorkTime(String.format("%.2f", remainDouble));
+                    double proportion = (remainDouble / pEstimatedWorkDouble)*100;
+                    estimatedWorkVO.setRemainWorkTimeProportion(String.format("%.2f", proportion)+"%");
+                }
+                lastList.add(estimatedWorkVO);
+            }
+            else {
+                if (taskGroupCollect.size()>0){
+                    List<Integer> groupIds = taskGroupCollect.stream().map(TaskGroup::getId).collect(Collectors.toList());
+                    List<Report> getByProjectAndGroup = reportMapper.selectList(new QueryWrapper<Report>()
+                            .eq("project_id", project.getId())
+                            .in("group_id", groupIds));
+                    for (TaskGroup taskGroup : taskGroupCollect) {
+                        Double gReallWorkTime = getByProjectAndGroup.stream().filter(r -> r.getGroupId().equals( taskGroup.getId()))
+                                .mapToDouble(r->r.getWorkingTime()).sum();
+                        GroupEstimatedWorkVO groupEstimatedWorkVO = new GroupEstimatedWorkVO();
+                        String grWorkTime=gReallWorkTime==null ? "0":gReallWorkTime+"";
+                        String gEstimatedWork=taskGroup.getManDay()==null ? 0*allday+"": taskGroup.getManDay()*allday+"";
+
+                        if (taskGroup.getManDay()==null){
+                            groupEstimatedWorkVO.setRemainWorkTime("\\");
+                            groupEstimatedWorkVO.setRemainWorkTimeProportion("\\");
+                        }else{
+                            double grWorkTimeDouble = Double.parseDouble(grWorkTime);
+                            double gEstimatedWorkDouble = Double.parseDouble(gEstimatedWork);
+                            double remainDouble = gEstimatedWorkDouble - grWorkTimeDouble;
+                            groupEstimatedWorkVO.setRemainWorkTime(String.format("%.2f", remainDouble));
+                            double proportion = (remainDouble / gEstimatedWorkDouble)*100;
+                            groupEstimatedWorkVO.setRemainWorkTimeProportion(String.format("%.2f", proportion)+"%");
+                        }
+
+                        groupEstimatedWorkVO.setWorkTime(grWorkTime);
+                        groupEstimatedWorkVO.setEstimatedWorkTime(gEstimatedWork);
+                        groupEstimatedWorkVO.setId(taskGroup.getId());
+                        groupEstimatedWorkVO.setGroupName(taskGroup.getName());
+                        groupEstimatedWorkVO.setProjectId(project.getId());
+                        groupEstimatedWorkVO.setProjectName(project.getProjectName());
+
+                        lastList.add(groupEstimatedWorkVO);
+                    }
+                }
+                else {
+                    GroupEstimatedWorkVO groupEstimatedWorkVO = new GroupEstimatedWorkVO();
+                    groupEstimatedWorkVO.setWorkTime("");
+                    groupEstimatedWorkVO.setEstimatedWorkTime("");
+                    groupEstimatedWorkVO.setId(null);
+                    groupEstimatedWorkVO.setGroupName("");
+                    groupEstimatedWorkVO.setProjectId(project.getId());
+                    groupEstimatedWorkVO.setProjectName(project.getProjectName());
+                    groupEstimatedWorkVO.setRemainWorkTime("\\");
+                    groupEstimatedWorkVO.setRemainWorkTimeProportion("\\");
+                    lastList.add(groupEstimatedWorkVO);
+                }
+            }
+        }
+        Integer projectWarningPercent = estimateTimeSetting.getProjectWarningPercent();
+        Integer groupWarningPercent = estimateTimeSetting.getGroupWarningPercent();
+        if (isWarn!=null){
+            lastList = lastList.stream().
+                    filter(l -> !StringUtils.isEmpty(l.getRemainWorkTimeProportion()) && !l.getRemainWorkTimeProportion().equals("\\")).collect(Collectors.toList());
+            if (type==0){
+                lastList = lastList.stream().
+                        filter(l -> Double.parseDouble(l.getRemainWorkTimeProportion()) < projectWarningPercent)
+                        .collect(Collectors.toList());
+            }else {
+                lastList = lastList.stream().
+                        filter(l -> Double.parseDouble(l.getRemainWorkTimeProportion()) < groupWarningPercent)
+                        .collect(Collectors.toList());
+            }
+        }
+        Integer size=(pageIndex-1)*pageSize;
+        List<GroupEstimatedWorkVO> subList = new ArrayList<>();
+        if (lastList.size()>size+pageSize){
+            subList=lastList.subList(size,size+pageIndex);
+        }else {
+            subList=lastList.subList(size,lastList.size());
+        }
+        Map<String,Object> resultMap=new HashMap<>();
+        resultMap.put("total",lastList.size());
+        resultMap.put("records",subList);
+        httpRespMsg.data=resultMap;
+        return httpRespMsg;
+    }
+
     public HttpRespMsg getProjectEstimatedWork(Integer pageIndex, Integer pageSize, Integer projectId, HttpServletRequest request) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         //通过公司id获取该公司所有的项目列表

+ 13 - 12
fhKeeper/formulahousekeeper/management-platform/src/main/resources/mapper/DeviceLogMapper.xml

@@ -21,30 +21,31 @@
     </sql>
     <select id="getDeviceLogList" resultType="java.util.HashMap">
         SELECT d.id deviceId,d.device_code deviceCode,d.device_name deviceName,d.usage_status usageStatus,d.usage_user_id usageUserId,
-               p.project_code projectCode,p.project_name projectName,
-               dl.create_date createDate,dl.start_time startTime,dl.end_time endTime,dl.id deviceLogId
+               p.project_code projectCode,p.project_name projectName,p.id projectId,
+               dl.create_date createDate,dl.start_time startTime,dl.end_time endTime,dl.id deviceLogId,dl.use_time useTime
         from device d
-                 LEFT JOIN device_log dl on d.id=dl.device_id
+                 inner join device_log dl on d.id=dl.device_id
                  INNER JOIN project p on dl.project_id=p.id
         <where>
-            <if test="startDate !=null and startDate!='' and endDate !=null and endDate!='' ">
-                and dl.create_date BETWEEN #{startDate} and #{endDate}
+            <if test="hashMap.startDate !=null  and hashMap.endDate !=null  ">
+                and dl.create_date BETWEEN #{hashMap.startDate} and #{hashMap.endDate}
             </if>
-            <if test="companyId!=null">
-                and d.company_id=#{companyId}
+            <if test="hashMap.companyId!=null">
+                and d.company_id=#{hashMap.companyId}
             </if>
-            <if test="usageUserId!=null">
-                and dl.usage_user_id=#{usageUserId}
+            <if test="hashMap.usageUserId!=null">
+                and dl.usage_user_id=#{hashMap.usageUserId}
             </if>
-            <if test="deviceLogId!=null">
-                and dl.id=#{deviceLogId}
+            <if test="hashMap.deviceLogId!=null">
+                and dl.id=#{hashMap.deviceLogId}
             </if>
         </where>
+        order by dl.id desc
     </select>
     <select id="selectListGroupByProject" resultType="java.util.Map">
         select p.id id,p.project_code projectCode,p.project_name projectName,sum(dl.usage_cost) costMoney,sum(dl.use_time) cost
         from project p
-        LEFT JOIN device_log dl on p.id=dl.project_id
+        inner JOIN device_log dl on p.id=dl.project_id
         <where>
             <if test="startDate !=null and startDate!='' and endDate !=null and endDate!='' ">
                 and dl.create_date BETWEEN #{startDate} and #{endDate}