소스 검색

Merge branch 'master' of http://47.100.37.243:10080/wutt/manHourHousekeeper

seyason 5 년 전
부모
커밋
298b958ee7
15개의 변경된 파일479개의 추가작업 그리고 227개의 파일을 삭제
  1. 6 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectController.java
  2. 42 8
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java
  3. 14 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TimeCalculationController.java
  4. 13 3
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserController.java
  5. 4 2
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ProjectService.java
  6. 4 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ReportService.java
  7. 2 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/TimeCalculationService.java
  8. 3 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/UserService.java
  9. 29 13
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java
  10. 49 10
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java
  11. 16 14
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ScreenshotServiceImpl.java
  12. 47 0
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/TimeCalculationServiceImpl.java
  13. 9 1
      fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java
  14. 5 0
      fhKeeper/formulahousekeeper/timesheet/src/port.js
  15. 236 172
      fhKeeper/formulahousekeeper/timesheet/src/views/system/index.vue

+ 6 - 2
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ProjectController.java

@@ -9,6 +9,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.servlet.http.HttpServletRequest;
+
 /**
  * <p>
  * 前端控制器
@@ -22,13 +24,15 @@ import org.springframework.web.bind.annotation.RestController;
 public class ProjectController {
     @Autowired
     private ProjectService projectService;
+    @Autowired
+    private HttpServletRequest request;
 
     /**
      * 获取项目列表
      */
     @RequestMapping("/getProjectList")
     public HttpRespMsg getProjectList() {
-        return projectService.getProjectList();
+        return projectService.getProjectList(request);
     }
 
     /**
@@ -38,7 +42,7 @@ public class ProjectController {
      */
     @RequestMapping("/editProject")
     public HttpRespMsg editProject(Integer id, @RequestParam String name) {
-        return projectService.editProject(id, name);
+        return projectService.editProject(id, name, request);
     }
 
     /**

+ 42 - 8
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java

@@ -11,6 +11,10 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletRequest;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.List;
 
 /**
  * <p>
@@ -37,18 +41,48 @@ public class ReportController {
         return reportService.getReportList(date, request);
     }
 
+    /**
+     * 根据时间 获取本人报告信息 以及工时
+     * date 日期 格式yyyy-mm-dd
+     */
+    @RequestMapping("/getReport")
+    public HttpRespMsg getReport(@RequestParam String date) {
+        return reportService.getReport(date, request);
+    }
+
     /**
      * 新增或编辑报告
-     * id 报告id 编辑时传
-     * creatorId 报告上传者id 新增时不可为空
-     * projectId 报告相关项目id 新增时不可为空
-     * createDate 报告创建时间 新增时不可为空 yyyy-MM-dd
-     * workingTime 工作时间
-     * content 工作内容
+     * id 报告id 数组
+     * projectId 报告相关项目id 数组
+     * workingTime 工作时间 数组
+     * content 工作内容 数组
+     * createDate 报告日期 数组
      */
     @RequestMapping("/editReport")
-    public HttpRespMsg editReport(Report report) {
-        return reportService.editReport(report);
+    public HttpRespMsg editReport(Integer[] id, Integer[] projectId, Double[] workingTime, String[] content,
+                                  String[] createDate) {
+        List<Report> reportList = new ArrayList<>();
+        try {
+            for (int i = 0; i < id.length; i++) {
+                reportList.add(new Report()
+                        .setId(id[i] == -1 ? null : id[i])
+                        .setProjectId(projectId[i])
+                        .setWorkingTime(workingTime[i])
+                        .setContent(content[i])
+                        .setCreateDate(LocalDate.parse(createDate[i], DateTimeFormatter.ofPattern("yyyy-MM-dd")))
+                        .setCreatorId(request.getHeader("Token")));
+                if (createDate[i] == null || projectId[i] == null) {
+                    HttpRespMsg httpRespMsg = new HttpRespMsg();
+                    httpRespMsg.setError("缺少数据");
+                    return httpRespMsg;
+                }
+            }
+        } catch (NullPointerException e) {
+            HttpRespMsg httpRespMsg = new HttpRespMsg();
+            httpRespMsg.setError("缺少数据");
+            return httpRespMsg;
+        }
+        return reportService.editReport(reportList);
     }
 
     /**

+ 14 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/TimeCalculationController.java

@@ -51,9 +51,23 @@ public class TimeCalculationController {
         return timeCalculationService.getDevianceList(pageIndex, pageSize, userId, actionCode, date, request);
     }
 
+    /**
+     * 获取相同公司内所有人某天的时间统计
+     * date 日期
+     */
     @RequestMapping("/getTimeStatistics")
     public HttpRespMsg getTimeStatistics(@RequestParam String date) {
         return timeCalculationService.getTimeStatistics(date, request);
     }
+
+    /**
+     * 获取一段时间内某人的工作
+     * startDate 开始日期 格式yyyy-mm-dd
+     * endDate 结束日期 格式yyyy-mm-dd
+     */
+    @RequestMapping("/getDuration")
+    public HttpRespMsg getDuration(@RequestParam String startDate, @RequestParam String endDate) {
+        return timeCalculationService.getDuration(startDate, endDate, request);
+    }
 }
 

+ 13 - 3
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/UserController.java

@@ -48,6 +48,15 @@ public class UserController {
         return userService.loginEmployee(username, password);
     }
 
+    /**
+     * 根据id获取用户信息
+     * userId 用户id
+     */
+    @RequestMapping("/getUserInfo")
+    public HttpRespMsg getUserInfo(@RequestParam String userId) {
+        return userService.getUserInfo(userId);
+    }
+
     /**
      * 获取员工的列表
      */
@@ -58,6 +67,7 @@ public class UserController {
 
     /**
      * 删除用户
+     * userId 用户id
      */
     @RequestMapping("/deleteUser")
     public HttpRespMsg deleteUser(@RequestParam String userId) {
@@ -80,9 +90,9 @@ public class UserController {
      * name 姓名
      * phone 电话号码
      */
-    @RequestMapping("/createCompany")
-    HttpRespMsg createCompany(@RequestParam String companyName, @RequestParam String name, @RequestParam String phone) {
-        return userService.createCompany(companyName, name, phone);
+    @RequestMapping("/insertCompany")
+    HttpRespMsg insertCompany(@RequestParam String companyName, @RequestParam String name, @RequestParam String phone) {
+        return userService.insertCompany(companyName, name, phone);
     }
 
     /**

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

@@ -4,6 +4,8 @@ import com.management.platform.entity.Project;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.management.platform.util.HttpRespMsg;
 
+import javax.servlet.http.HttpServletRequest;
+
 /**
  * <p>
  * 服务类
@@ -13,9 +15,9 @@ import com.management.platform.util.HttpRespMsg;
  * @since 2020-01-03
  */
 public interface ProjectService extends IService<Project> {
-    HttpRespMsg getProjectList();
+    HttpRespMsg getProjectList(HttpServletRequest request);
 
-    HttpRespMsg editProject(Integer id, String name);
+    HttpRespMsg editProject(Integer id, String name, HttpServletRequest request);
 
     HttpRespMsg deleteProject(Integer id);
 }

+ 4 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/ReportService.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.management.platform.util.HttpRespMsg;
 
 import javax.servlet.http.HttpServletRequest;
+import java.util.List;
 
 /**
  * <p>
@@ -17,7 +18,9 @@ import javax.servlet.http.HttpServletRequest;
 public interface ReportService extends IService<Report> {
     HttpRespMsg getReportList(String date, HttpServletRequest request);
 
-    HttpRespMsg editReport(Report report);
+    HttpRespMsg getReport(String date, HttpServletRequest request);
+
+    HttpRespMsg editReport(List<Report> reportList);
 
     HttpRespMsg deleteReport(Integer reportId);
 }

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

@@ -21,4 +21,6 @@ public interface TimeCalculationService extends IService<TimeCalculation> {
                                 String userId, Integer actionCode, String date, HttpServletRequest request);
 
     HttpRespMsg getTimeStatistics(String date, HttpServletRequest request);
+
+    HttpRespMsg getDuration(String startDate, String endDate, HttpServletRequest request);
 }

+ 3 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/UserService.java

@@ -20,13 +20,15 @@ public interface UserService extends IService<User> {
 
     HttpRespMsg loginEmployee(String username, String password);
 
+    HttpRespMsg getUserInfo(String id);
+
     HttpRespMsg getEmployeeList(HttpServletRequest request);
 
     HttpRespMsg deleteUser(String userId, HttpServletRequest request);
 
     HttpRespMsg editPassword(String originPassword, String newPassword, HttpServletRequest request);
 
-    HttpRespMsg createCompany(String companyName, String name, String phone);
+    HttpRespMsg insertCompany(String companyName, String name, String phone);
 
     HttpRespMsg insertUser(String name, String phone, Integer role, HttpServletRequest request);
 

+ 29 - 13
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ProjectServiceImpl.java

@@ -3,14 +3,17 @@ package com.management.platform.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.management.platform.entity.Project;
 import com.management.platform.entity.Report;
+import com.management.platform.entity.User;
 import com.management.platform.mapper.ProjectMapper;
 import com.management.platform.mapper.ReportMapper;
+import com.management.platform.mapper.UserMapper;
 import com.management.platform.service.ProjectService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.management.platform.util.HttpRespMsg;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
 
 /**
  * <p>
@@ -25,35 +28,48 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, Project> impl
     @Resource
     private ProjectMapper projectMapper;
     @Resource
+    private UserMapper userMapper;
+    @Resource
     private ReportMapper reportMapper;
 
     //获取项目列表
     @Override
-    public HttpRespMsg getProjectList() {
+    public HttpRespMsg getProjectList(HttpServletRequest request) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
-        httpRespMsg.data = projectMapper.selectList(new QueryWrapper<>());
+        try {
+            Integer companyId = userMapper.selectById(request.getHeader("Token")).getCompanyId();
+            httpRespMsg.data = projectMapper.selectList(new QueryWrapper<Project>().eq("company_id", companyId));
+        } catch (NullPointerException e) {
+            httpRespMsg.setError("验证失败");
+        }
         return httpRespMsg;
     }
 
     //添加或编辑项目
     @Override
-    public HttpRespMsg editProject(Integer id, String name) {
+    public HttpRespMsg editProject(Integer id, String name, HttpServletRequest request) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
-        if (id == null) {
-            //新增项目
-            if (name == null) {
-                httpRespMsg.setError("请填写项目名称");
+        try {
+            Integer companyId = userMapper.selectById(request.getHeader("Token")).getCompanyId();
+            if (id == null) {
+                //新增项目
+                if (name == null) {
+                    httpRespMsg.setError("请填写项目名称");
+                } else {
+                    if (projectMapper.insert(new Project().setProjectName(name).setCompanyId(companyId)) == 0) {
+                        httpRespMsg.setError("操作失败");
+                    }
+                }
             } else {
-                if (projectMapper.insert(new Project().setProjectName(name)) == 0) {
+                //修改项目
+                if (projectMapper.updateById(new Project().setProjectName(name).setId(id).setCompanyId(companyId)) == 0) {
                     httpRespMsg.setError("操作失败");
                 }
             }
-        } else {
-            //修改项目
-            if (projectMapper.updateById(new Project().setProjectName(name).setId(id)) == 0) {
-                httpRespMsg.setError("操作失败");
-            }
+        } catch (NullPointerException e) {
+            httpRespMsg.setError("验证失败");
         }
+
         return httpRespMsg;
     }
 

+ 49 - 10
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ReportServiceImpl.java

@@ -2,17 +2,23 @@ package com.management.platform.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.management.platform.entity.Project;
 import com.management.platform.entity.Report;
+import com.management.platform.entity.TimeCalculation;
+import com.management.platform.mapper.ProjectMapper;
 import com.management.platform.mapper.ReportMapper;
+import com.management.platform.mapper.TimeCalculationMapper;
 import com.management.platform.mapper.UserMapper;
 import com.management.platform.service.ReportService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.management.platform.util.HttpRespMsg;
 import org.springframework.stereotype.Service;
 
+import java.text.SimpleDateFormat;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeParseException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -36,6 +42,10 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
     private ReportMapper reportMapper;
     @Resource
     private UserMapper userMapper;
+    @Resource
+    private TimeCalculationMapper timeCalculationMapper;
+    @Resource
+    private ProjectMapper projectMapper;
 
     //获取报告列表
     @Override
@@ -56,22 +66,51 @@ public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> impleme
         return httpRespMsg;
     }
 
+    //获取本人某天工作时间和已提交的报告
+    @Override
+    public HttpRespMsg getReport(String date, HttpServletRequest request) {
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        try {
+            String userId = request.getHeader("Token");
+            Map<String, Object> resultMap = new HashMap<>();
+            //获取某日本人的所有日志
+            resultMap.put("report", reportMapper.selectList(new QueryWrapper<Report>()
+                    .eq("creator_id", userId)
+                    .eq("create_date", LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd")))));
+            //顺便再获取一下可分配时间
+            Double totalWorkingTime = 0.0;
+            //此处认为0是工作时间
+            for (TimeCalculation timeCalculation : timeCalculationMapper.selectList(new QueryWrapper<TimeCalculation>()
+                    .eq("date", LocalDate.parse(date, DateTimeFormatter.ofPattern("yyyy-MM-dd")))
+                    .eq("user_id", userId)
+                    .eq("action_type", 0))) {
+                totalWorkingTime += timeCalculation.getDuration();
+            }
+            resultMap.put("time", totalWorkingTime);
+            resultMap.put("project", projectMapper.selectList(new QueryWrapper<Project>()
+                    .eq("company_id", userMapper.selectById(userId).getCompanyId())));
+            httpRespMsg.data = resultMap;
+        } catch (NullPointerException e) {
+            httpRespMsg.setError("验证失败");
+        } catch (DateTimeParseException e) {
+            httpRespMsg.setError("日期格式有误");
+        }
+        return httpRespMsg;
+    }
+
     //新增或编辑报告
     @Override
-    public HttpRespMsg editReport(Report report) {
+    public HttpRespMsg editReport(List<Report> reportList) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
-        if (report.getId() == null) {
-            //新增报告时 需要检查项目和人员id
-            if (report.getCreatorId() == null || report.getProjectId() == null) {
-                httpRespMsg.setError("请填写完整信息");
-            } else {
+        for (Report report : reportList) {
+            if (report.getId() == null) {
                 if (reportMapper.insert(report) == 0) {
                     httpRespMsg.setError("操作失败");
                 }
-            }
-        } else {
-            if (reportMapper.updateById(report) == 0) {
-                httpRespMsg.setError("操作失败");
+            } else {
+                if (reportMapper.updateById(report) == 0) {
+                    httpRespMsg.setError("操作失败");
+                }
             }
         }
         return httpRespMsg;

+ 16 - 14
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/ScreenshotServiceImpl.java

@@ -348,13 +348,13 @@ public class ScreenshotServiceImpl extends ServiceImpl<ScreenshotMapper, Screens
                 }
                 sMap.put(temp.getValue(), temp.getKey());
             }
-            sMap = ((TreeMap)sMap).descendingMap();
+            sMap = ((TreeMap) sMap).descendingMap();
             Iterator it = sMap.keySet().iterator();
             Integer k1 = (Integer) it.next();
             Integer k2 = (Integer) it.next();
             Integer color1 = sMap.get(k1);
             Integer color2 = sMap.get(k2);
-            System.out.println("kkkk=="+k1+","+color1 + "," + k2 + "," + color2);
+            System.out.println("kkkk==" + k1 + "," + color1 + "," + k2 + "," + color2);
             System.out.println("最.." + maxCnt + ", key=" + key);
             rgb[0] = (key & 0xff0000) >> 16;
             rgb[1] = (key & 0xff00) >> 8;
@@ -364,15 +364,15 @@ public class ScreenshotServiceImpl extends ServiceImpl<ScreenshotMapper, Screens
             int colorPercent = maxCnt * 100 / totalPixl;
             if (colorPercent < 50) {
                 //可能存在2中底色, 大布局的底色和小模块的底色,都算底色。
-                int secPercent = k2 * 100/totalPixl;
+                int secPercent = k2 * 100 / totalPixl;
                 rgb[0] = (color2 & 0xff0000) >> 16;
                 rgb[1] = (color2 & 0xff00) >> 8;
                 rgb[2] = (color2 & 0xff);
-                System.out.println("二级底色色值为: " + rgb[0] + ", " + rgb[1]+", "+rgb[2]);
-                System.out.println("二级底色比例=="+secPercent);
-                colorPercent = (k1 + k2) * 100/totalPixl;
+                System.out.println("二级底色色值为: " + rgb[0] + ", " + rgb[1] + ", " + rgb[2]);
+                System.out.println("二级底色比例==" + secPercent);
+                colorPercent = (k1 + k2) * 100 / totalPixl;
             }
-            System.out.println("总底色比例=="+colorPercent);
+            System.out.println("总底色比例==" + colorPercent);
             //计算底色是否是连续分布的
             int windowSize = 50;
             int pureColorBlockCnt = 0;
@@ -450,12 +450,14 @@ public class ScreenshotServiceImpl extends ServiceImpl<ScreenshotMapper, Screens
             //单独记录当前的时间以便使用
             LocalTime currentTime = screenshot.getIndate().toLocalTime();
             if (latestRecord != null) {
-                //如果有记录的话 单独记录原来时间并加上间隔时间 准备进行对比
-                LocalTime estimatedTime = latestRecord.getEndTime().plusSeconds(DETECTION_INTERVAL);
-                //和当前时间进行对比 如果在小时和分数数相同则认为是连续的 秒和毫秒不考虑
-                if (estimatedTime.getHour() == currentTime.getHour()
-                        && estimatedTime.getMinute() == currentTime.getMinute()) {
-                    //确认连续 此时将状态改为连续
+                //如果有记录的话 准备计算上次结束和新的开始的时间差
+                LocalTime estimatedTime = latestRecord.getEndTime();
+                Integer durationSecond = ((currentTime.getHour() - estimatedTime.getHour()) * 3600
+                        + (currentTime.getMinute() - estimatedTime.getMinute()) * 60
+                        + (currentTime.getSecond() - estimatedTime.getSecond()));
+                //如果断层不大于600秒的话
+                if (durationSecond <= DETECTION_INTERVAL) {
+                    //确认连续 将状态改为连续
                     isConsecutive = true;
                 }
             }
@@ -481,7 +483,7 @@ public class ScreenshotServiceImpl extends ServiceImpl<ScreenshotMapper, Screens
                         .setStartTime(currentTime)
                         .setEndTime(currentTime)
                         //第一次的持续时间默认为最短的一次间隔 以后为开始时间和结束时间只差 以防看一眼不计入时间的现象
-                        .setDuration((double) DETECTION_INTERVAL / 3600);
+                        .setDuration(0.0);
                 timeCalculationMapper.insert(timeCalculation);
             }
             /*之后可能还需要处理跨越一天的情况*/

+ 47 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/TimeCalculationServiceImpl.java

@@ -13,8 +13,10 @@ import org.springframework.stereotype.Service;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.time.LocalDate;
+import java.time.LocalDateTime;
 import java.time.ZoneOffset;
 import java.time.format.DateTimeFormatter;
+import java.time.format.DateTimeParseException;
 import java.util.*;
 
 /**
@@ -110,4 +112,49 @@ public class TimeCalculationServiceImpl extends ServiceImpl<TimeCalculationMappe
         }
         return httpRespMsg;
     }
+
+    //根据日期段获取本人的工作时间段
+    @Override
+    public HttpRespMsg getDuration(String startDate, String endDate, HttpServletRequest request) {
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        try {
+            LocalDate start = LocalDate.parse(startDate, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+            LocalDate end = LocalDate.parse(endDate, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
+            //首先获取数据
+            List<TimeCalculation> dataList = timeCalculationMapper.selectList(new QueryWrapper<TimeCalculation>()
+                    .eq("user_id", request.getHeader("Token"))
+                    .eq("action_type", 0)
+                    .between("date", start, end)
+                    .orderByAsc("start_time"));
+            //先把所有的日期搞到一个list里面
+            ArrayList<String> dateList = new ArrayList<>();
+            LocalDate currentDate = start;
+            for (int i = 0; !currentDate.equals(end.plusDays(1)) || ++i >= 100; currentDate = currentDate.plusDays(1)) {
+                dateList.add(currentDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")));
+            }
+            List<Map<String, Object>> resultList = new ArrayList<>();
+            for (String date : dateList) {
+                Map<String, Object> dataMap = new HashMap<>();
+                dataMap.put("date", date);
+                List<Map<String, Object>> list = new ArrayList<>();
+                for (TimeCalculation timeCalculation : dataList) {
+                    if (timeCalculation.getDate().toString().equals(date)) {
+                        Map<String, Object> map = new HashMap<>();
+                        map.put("startTime", timeCalculation.getStartTime().format(DateTimeFormatter.ofPattern("HH:mm")));
+                        map.put("endTime", timeCalculation.getEndTime().format(DateTimeFormatter.ofPattern("HH:mm")));
+                        map.put("duration", timeCalculation.getDuration());
+                        list.add(map);
+                    }
+                }
+                dataMap.put("time", list);
+                resultList.add(dataMap);
+            }
+            httpRespMsg.data = resultList;
+        } catch (NullPointerException e) {
+            httpRespMsg.setError("验证失败");
+        } catch (DateTimeParseException e) {
+            httpRespMsg.setError("日期格式有误");
+        }
+        return httpRespMsg;
+    }
 }

+ 9 - 1
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/UserServiceImpl.java

@@ -85,6 +85,14 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
         return httpRespMsg;
     }
 
+    //获取用户信息
+    @Override
+    public HttpRespMsg getUserInfo(String id) {
+        HttpRespMsg httpRespMsg = new HttpRespMsg();
+        httpRespMsg.data = userMapper.selectById(id);
+        return httpRespMsg;
+    }
+
     //获取员工的列表
     @Override
     public HttpRespMsg getEmployeeList(HttpServletRequest request) {
@@ -148,7 +156,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
 
     //新增公司和负责人
     @Override
-    public HttpRespMsg createCompany(String companyName, String name, String phone) {
+    public HttpRespMsg insertCompany(String companyName, String name, String phone) {
         HttpRespMsg httpRespMsg = new HttpRespMsg();
         //首先检测用户名是否重复
         if (userMapper.selectList(new QueryWrapper<User>().eq("phone", phone)).size() > 0) {

+ 5 - 0
fhKeeper/formulahousekeeper/timesheet/src/port.js

@@ -1,4 +1,9 @@
 export default {
+    test:{
+      test1:'/time-calculation/getDuration'
+    },
+
+
     manage: {
         login: '/user/loginAdmin', // 登录
         list: '/user/getEmployeeList', //获取员工列表

+ 236 - 172
fhKeeper/formulahousekeeper/timesheet/src/views/system/index.vue

@@ -1,192 +1,256 @@
 <template>
-	<section>
-		<!--工具条-->
-		<el-col :span="24" class="toolbar" style="padding-bottom: 0px;">
-			<el-form :inline="true">
-				<el-form-item>
-					<el-date-picker v-model="date" :editable="false" format="yyyy-MM-dd" value-format="yyyy-MM-dd" @change='getList' :clearable="false" type="date" placeholder="选择日期"></el-date-picker>
-				</el-form-item>
-				<el-form-item style="float:right;">
-                    <el-link type="primary" :underline="false" @click="handleAdd">异常申请</el-link>
-				</el-form-item>
-			</el-form>
-		</el-col>
+  <section>
+    <!--工具条-->
+    <el-col :span="24" class="toolbar" style="padding-bottom: 0px;">
+      <el-form :inline="true">
+        <el-form-item>
+          <el-date-picker
+            v-model="date"
+            :editable="false"
+            format="yyyy-MM-dd"
+            value-format="yyyy-MM-dd"
+            @change="getList"
+            :clearable="false"
+            type="date"
+            placeholder="选择日期"
+          ></el-date-picker>
+        </el-form-item>
+        <el-form-item style="float:right;">
+          <el-link type="primary" :underline="false" @click="handleAdd">异常申请</el-link>
+        </el-form-item>
+      </el-form>
+    </el-col>
 
-		<!--列表-->
-		<el-table :data="list" highlight-current-row v-loading="listLoading" :height="tableHeight" style="width: 100%;">
-			<el-table-column type="index" width="60"></el-table-column>
-			<el-table-column prop="projectName" label="姓名" width="140" sortable></el-table-column>
-            <el-table-column prop="ownerCompanyName" label="手机" width="180"></el-table-column>
-            <el-table-column prop="customCompaniesStr" label="编程"></el-table-column>
-            <el-table-column prop="manager" label="设计" sortable></el-table-column>
-            <el-table-column prop="manager" label="办公" sortable></el-table-column>
-            <el-table-column prop="manager" label="娱乐" sortable></el-table-column>
-            <el-table-column prop="manager" label="浏览" sortable></el-table-column>
-			<el-table-column prop="indate" label="总时长" width="180" sortable></el-table-column>
-		</el-table>
+    <!--列表-->
+    <el-table
+      :data="list"
+      highlight-current-row
+      v-loading="listLoading"
+      :height="tableHeight"
+      style="width: 100%;"
+    >
+      <el-table-column type="index" width="60"></el-table-column>
+      <el-table-column prop="projectName" label="姓名" width="140" sortable></el-table-column>
+      <el-table-column prop="ownerCompanyName" label="手机" width="180"></el-table-column>
+      <el-table-column prop="customCompaniesStr" label="编程"></el-table-column>
+      <el-table-column prop="manager" label="设计" sortable></el-table-column>
+      <el-table-column prop="manager" label="办公" sortable></el-table-column>
+      <el-table-column prop="manager" label="娱乐" sortable></el-table-column>
+      <el-table-column prop="manager" label="浏览" sortable></el-table-column>
+      <el-table-column prop="indate" label="总时长" width="180" sortable></el-table-column>
+    </el-table>
 
-		<!--工具条-->
-		<el-col :span="24" class="toolbar">
-			<el-pagination
-                @size-change="handleSizeChange"
-                @current-change="handleCurrentChange"
-                :page-sizes="[20 , 50 , 80 , 100]"
-                :page-size="20"
-                layout="total, sizes, prev, pager, next"
-                :total="total"
-                style="float:right;">
-            </el-pagination>
-		</el-col>
+    <!--工具条-->
+    <el-col :span="24" class="toolbar">
+      <el-pagination
+        @size-change="handleSizeChange"
+        @current-change="handleCurrentChange"
+        :page-sizes="[20 , 50 , 80 , 100]"
+        :page-size="20"
+        layout="total, sizes, prev, pager, next"
+        :total="total"
+        style="float:right;"
+      ></el-pagination>
+    </el-col>
 
-        <!--新增界面-->
-		<el-dialog title="异常申请列表" v-if="addFormVisible" :visible.sync="addFormVisible" :close-on-click-modal="false" customClass='customWidth'>
-			<el-table :data="list" highlight-current-row v-loading="listLoading" height="400" style="width: 100%;">
-                <el-table-column type="index" width="60"></el-table-column>
-                <el-table-column prop="projectName" label="姓名" width="140" sortable></el-table-column>
-                <el-table-column prop="indate" label="工作时长" width="100" sortable></el-table-column>
-                <el-table-column prop="indate" label="异常原因" width="180" sortable></el-table-column>
-                <el-table-column prop="indate" label="时间" sortable></el-table-column>
-            </el-table>
-			<div slot="footer" class="dialog-footer">
-				<el-button @click.native="addFormVisible = false">取消</el-button>
-			</div>
-		</el-dialog>
-	</section>
+    <!--新增界面-->
+    <el-dialog
+      title="异常申请列表"
+      v-if="addFormVisible"
+      :visible.sync="addFormVisible"
+      :close-on-click-modal="false"
+      customClass="customWidth"
+    >
+      <el-table
+        :data="list"
+        highlight-current-row
+        v-loading="listLoading"
+        height="400"
+        style="width: 100%;"
+      >
+        <el-table-column type="index" width="60"></el-table-column>
+        <el-table-column prop="projectName" label="姓名" width="140" sortable></el-table-column>
+        <el-table-column prop="indate" label="工作时长" width="100" sortable></el-table-column>
+        <el-table-column prop="indate" label="异常原因" width="180" sortable></el-table-column>
+        <el-table-column prop="indate" label="时间" sortable></el-table-column>
+      </el-table>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click.native="addFormVisible = false">取消</el-button>
+      </div>
+    </el-dialog>
+  </section>
 </template>
 
 <script>
-	import util from '../../common/js/util'
+import util from "../../common/js/util";
 
-	export default {
-		data() {
-			return {
-                user: JSON.parse(sessionStorage.getItem('user')),
+export default {
+  data() {
+    return {
+      user: JSON.parse(sessionStorage.getItem("user")),
 
-                date: new Date(),
+      date: new Date(),
 
-                tableHeight: 0,
-                listLoading: false,
-				total: 0,
-                page: 1,
-                size: 20,
-                list: [],
-                
-                addFormVisible: false,
-				addLoading: false,
-			}
-		},
-		methods: {
-			//分页
-			handleCurrentChange(val) {
-				this.page = val;
-				this.getList();
-            },
+      tableHeight: 0,
+      listLoading: false,
+      total: 0,
+      page: 1,
+      size: 20,
+      list: [],
 
-            handleSizeChange(val) {
-                this.size = val;
-				this.getList();
-            },
-            
-			//获取项目列表
-			getList() {
-				this.listLoading = true;
-				this.http.post(this.port.project.projectList, {
-                    keyName: '',
-                    pageNum: this.page,
-                    pageSize: this.size,
-                }, res => {
-                    this.listLoading = false;
-                    if (res.code == "ok") {
-                        var list = res.data.list;
-                        for(var i in list){
-                            var customCompaniesStr = "";
-                            for(var j in list[i].customCompanies){
-                                if(j == list[i].customCompanies.length -1){
-                                    customCompaniesStr += list[i].customCompanies[j].companyName;
-                                } else {
-                                    customCompaniesStr += list[i].customCompanies[j].companyName + "、";
-                                }
-                            }
-                            list[i].customCompaniesStr = customCompaniesStr;
-                        }
-                        this.list = list;
-                        this.total = res.data.total;
-                    } else {
-                        this.$message({
-                            message: res.msg,
-                            type: 'error'
-                        });
-                    }
-                }, error => {
-                    this.listLoading = false;
-                    this.$message({
-                        message: error,
-                        type: 'error'
-                    });
-                })
-            },
+      addFormVisible: false,
+      addLoading: false
+    };
+  },
+  methods: {
+    //分页
+    handleCurrentChange(val) {
+      this.page = val;
+      this.getList();
+    },
 
-            //显示新增界面
-			handleAdd() {
-                this.getUnusual();
-				this.addFormVisible = true;
-            },
-
-            // 获取异常列表
-            getUnusual() {
-                this.listLoading = true;
-				this.http.post(this.port.project.projectList, {
-                    keyName: '',
-                    pageNum: this.page,
-                    pageSize: this.size,
-                }, res => {
-                    this.listLoading = false;
-                    if (res.code == "ok") {
-                        var list = res.data.list;
-                        for(var i in list){
-                            var customCompaniesStr = "";
-                            for(var j in list[i].customCompanies){
-                                if(j == list[i].customCompanies.length -1){
-                                    customCompaniesStr += list[i].customCompanies[j].companyName;
-                                } else {
-                                    customCompaniesStr += list[i].customCompanies[j].companyName + "、";
-                                }
-                            }
-                            list[i].customCompaniesStr = customCompaniesStr;
-                        }
-                        this.list = list;
-                        this.total = res.data.total;
-                    } else {
-                        this.$message({
-                            message: res.msg,
-                            type: 'error'
-                        });
-                    }
-                }, error => {
-                    this.listLoading = false;
-                    this.$message({
-                        message: error,
-                        type: 'error'
-                    });
-                })
-            },
+    handleSizeChange(val) {
+      this.size = val;
+      this.getList();
+    },
 
+    //获取项目列表
+    getList() {
+      this.listLoading = true;
+      this.http.post(
+        this.port.project.projectList,
+        {
+          keyName: "",
+          pageNum: this.page,
+          pageSize: this.size
         },
-        created() {
-            let height = window.innerHeight;
-            this.tableHeight = height - 195;
-            const that = this;
-            window.onresize = function temp() {
-                that.tableHeight = window.innerHeight - 195;    
-            };
+        res => {
+          this.listLoading = false;
+          if (res.code == "ok") {
+            var list = res.data.list;
+            for (var i in list) {
+              var customCompaniesStr = "";
+              for (var j in list[i].customCompanies) {
+                if (j == list[i].customCompanies.length - 1) {
+                  customCompaniesStr += list[i].customCompanies[j].companyName;
+                } else {
+                  customCompaniesStr +=
+                    list[i].customCompanies[j].companyName + "、";
+                }
+              }
+              list[i].customCompaniesStr = customCompaniesStr;
+            }
+            this.list = list;
+            this.total = res.data.total;
+          } else {
+            this.$message({
+              message: res.msg,
+              type: "error"
+            });
+          }
         },
-		mounted() {
-            // this.getList();
-		}
-	}
+        error => {
+          this.listLoading = false;
+          this.$message({
+            message: error,
+            type: "error"
+          });
+        }
+      );
+    },
+
+    //显示新增界面
+    handleAdd() {
+      this.getUnusual();
+      this.addFormVisible = true;
+    },
 
+    // 获取异常列表
+    getUnusual() {
+      this.listLoading = true;
+      this.http.post(
+        this.port.project.projectList,
+        {
+          keyName: "",
+          pageNum: this.page,
+          pageSize: this.size
+        },
+        res => {
+          this.listLoading = false;
+          if (res.code == "ok") {
+            var list = res.data.list;
+            for (var i in list) {
+              var customCompaniesStr = "";
+              for (var j in list[i].customCompanies) {
+                if (j == list[i].customCompanies.length - 1) {
+                  customCompaniesStr += list[i].customCompanies[j].companyName;
+                } else {
+                  customCompaniesStr +=
+                    list[i].customCompanies[j].companyName + "、";
+                }
+              }
+              list[i].customCompaniesStr = customCompaniesStr;
+            }
+            this.list = list;
+            this.total = res.data.total;
+          } else {
+            this.$message({
+              message: res.msg,
+              type: "error"
+            });
+          }
+        },
+        error => {
+          this.listLoading = false;
+          this.$message({
+            message: error,
+            type: "error"
+          });
+        }
+      );
+    },
+    //测试用的 没事就删掉吧
+    getTest() {
+      this.listLoading = true;
+      this.http.post(
+        this.port.test.test1,
+        {
+          startDate: "2020-01-01",
+          endDate: "2020-01-15"
+        },
+        res => {
+          this.listLoading = false;
+          if (res.code == "ok") {
+          } else {
+            this.$message({
+              message: res.msg,
+              type: "error"
+            });
+          }
+        },
+        error => {
+          this.listLoading = false;
+          this.$message({
+            message: error,
+            type: "error"
+          });
+        }
+      );
+    }
+  },
+  created() {
+    let height = window.innerHeight;
+    this.tableHeight = height - 195;
+    const that = this;
+    window.onresize = function temp() {
+      that.tableHeight = window.innerHeight - 195;
+    };
+  },
+  mounted() {
+    this.getTest();
+  }
+};
 </script>
 
 <style lang="scss" scoped>
-
 </style>