Browse Source

修改过往的逻辑

yangcong 3 years ago
parent
commit
c4c9b451c8
16 changed files with 98 additions and 75 deletions
  1. 7 0
      fm-scheduling/src/main/java/com/persagy/fm/scheduling/dao/WorkScheduleMapper.java
  2. 0 29
      fm-scheduling/src/main/java/com/persagy/fm/scheduling/enums/WorkTimeType.java
  3. 2 0
      fm-scheduling/src/main/java/com/persagy/fm/scheduling/model/WorkPerson.java
  4. 1 1
      fm-scheduling/src/main/java/com/persagy/fm/scheduling/model/WorkSchedule.java
  5. 18 0
      fm-scheduling/src/main/java/com/persagy/fm/scheduling/model/dto/ScheduleListQueryDto.java
  6. 11 0
      fm-scheduling/src/main/java/com/persagy/fm/scheduling/model/dto/WorkScheduleDto.java
  7. 20 32
      fm-scheduling/src/main/java/com/persagy/fm/scheduling/service/WorkScheduleService.java
  8. 2 1
      fm-scheduling/src/main/java/com/persagy/fm/scheduling/transform/WorkScheduleTransform.java
  9. 19 1
      fm-scheduling/src/main/java/com/persagy/fm/scheduling/utils/StreamUtil.java
  10. 1 1
      fm-scheduling/src/main/java/com/persagy/fm/scheduling/vo/request/ScheduleListQueryVO.java
  11. 3 3
      fm-scheduling/src/main/java/com/persagy/fm/scheduling/vo/request/UpdateScheduleVO.java
  12. 1 4
      fm-scheduling/src/main/java/com/persagy/fm/scheduling/vo/response/OnePersonScheduleVO.java
  13. 0 1
      fm-scheduling/src/main/java/com/persagy/fm/scheduling/vo/response/StatisticalInfoVO.java
  14. 0 1
      fm-scheduling/src/main/java/com/persagy/fm/scheduling/vo/response/WorkTimeResultVO.java
  15. 1 0
      fm-scheduling/src/main/resources/db.init/table.sql
  16. 12 1
      fm-scheduling/src/main/resources/mapper/WokeScheduleMapper.xml

+ 7 - 0
fm-scheduling/src/main/java/com/persagy/fm/scheduling/dao/WorkScheduleMapper.java

@@ -1,10 +1,17 @@
 package com.persagy.fm.scheduling.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.persagy.fm.scheduling.model.WorkSchedule;
+import com.persagy.fm.scheduling.model.dto.ScheduleListQueryDto;
+import com.persagy.fm.scheduling.model.dto.WorkScheduleDto;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 @Mapper
 public interface WorkScheduleMapper extends BaseMapper<WorkSchedule> {
 
+
+    IPage<WorkScheduleDto> getPage(IPage<WorkSchedule> page, @Param("schedule") ScheduleListQueryDto dto );
+
 }

+ 0 - 29
fm-scheduling/src/main/java/com/persagy/fm/scheduling/enums/WorkTimeType.java

@@ -1,29 +0,0 @@
-package com.persagy.fm.scheduling.enums;
-
-import com.baomidou.mybatisplus.annotation.EnumValue;
-import com.fasterxml.jackson.annotation.JsonValue;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-import org.springframework.lang.NonNull;
-
-import java.util.Arrays;
-
-@Getter
-@AllArgsConstructor
-public enum WorkTimeType {
-    DAY(1,"白班"),
-    NIGHT(2,"夜班"),
-    MIDDLE(3,"中班");
-
-    @EnumValue
-    private final Integer value;
-    @JsonValue
-    private final  String desc;
-
-
-    public static WorkTimeType getByValue(@NonNull Integer value){
-        return Arrays.stream(WorkTimeType.values()).filter(a -> a.getValue().equals(value)).findFirst()
-                .orElseThrow(() -> new RuntimeException("workTime 的类型错误"));
-    }
-
-}

+ 2 - 0
fm-scheduling/src/main/java/com/persagy/fm/scheduling/model/WorkPerson.java

@@ -14,5 +14,7 @@ public class WorkPerson extends AuditableEntity<WorkSchedule> {
     private String personId;
     @TableField(value = "project_id")
     private String projectId;
+    @TableField(value = "dept_id")
+    private String deptId;
 
 }

+ 1 - 1
fm-scheduling/src/main/java/com/persagy/fm/scheduling/model/WorkSchedule.java

@@ -12,7 +12,7 @@ import java.util.Date;
 @TableName(value = "work_schedule")
 public class WorkSchedule extends AuditableEntity<WorkSchedule> {
 
-    @TableField(value = "workDay")
+    @TableField(value = "work_day")
     private Date workDay;
     @TableField(value = "shift_id")
     private String shiftId;

+ 18 - 0
fm-scheduling/src/main/java/com/persagy/fm/scheduling/model/dto/ScheduleListQueryDto.java

@@ -0,0 +1,18 @@
+package com.persagy.fm.scheduling.model.dto;
+
+
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.util.Date;
+
+@Data
+@Accessors(chain = true)
+public class ScheduleListQueryDto {
+
+
+    private Date minDate;
+    private Date maxDate;
+    private String projectId;
+    private String deptId;
+}

+ 11 - 0
fm-scheduling/src/main/java/com/persagy/fm/scheduling/model/dto/WorkScheduleDto.java

@@ -0,0 +1,11 @@
+package com.persagy.fm.scheduling.model.dto;
+
+import com.persagy.fm.scheduling.model.WorkSchedule;
+import lombok.Data;
+
+@Data
+public class WorkScheduleDto extends WorkSchedule {
+
+    private String shiftAbbr;
+
+}

+ 20 - 32
fm-scheduling/src/main/java/com/persagy/fm/scheduling/service/WorkScheduleService.java

@@ -1,26 +1,28 @@
 package com.persagy.fm.scheduling.service;
 
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.google.common.collect.Sets;
 import com.persagy.fm.common.response.PageList;
 import com.persagy.fm.scheduling.dao.WorkScheduleMapper;
 import com.persagy.fm.scheduling.model.WorkSchedule;
+import com.persagy.fm.scheduling.model.dto.ScheduleListQueryDto;
+import com.persagy.fm.scheduling.model.dto.WorkScheduleDto;
 import com.persagy.fm.scheduling.transform.WorkScheduleTransform;
 import com.persagy.fm.scheduling.vo.request.ScheduleListQueryVO;
 import com.persagy.fm.scheduling.vo.request.UpdateScheduleVO;
 import com.persagy.fm.scheduling.vo.response.OnePersonScheduleVO;
-import com.persagy.fm.scheduling.vo.response.StatisticalInfoVO;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections.CollectionUtils;
 import org.assertj.core.util.Lists;
 import org.springframework.stereotype.Service;
 
+import java.util.Date;
+import java.util.GregorianCalendar;
 import java.util.List;
 import java.util.Set;
 import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 
 @Slf4j
@@ -36,47 +38,33 @@ public class WorkScheduleService {
 
         //todo 根据父级部门id 获取下面所有子级部门的部门id
         final Set<String> departmentIds = Sets.newHashSet();
-        QueryWrapper<WorkSchedule> wrapper = new QueryWrapper<WorkSchedule>().eq("project_id", vo.getProjectId())
-                .in("department_id", departmentIds)
-                .eq("year", vo.getYear())
-                .eq("month", vo.getMonth());
+
+        Date minDate = new GregorianCalendar(vo.getYear(), vo.getMonth(), 1).getTime();
+        Date maxDate = new GregorianCalendar(vo.getYear(), vo.getMonth() + 1, 1).getTime();
+
+        ScheduleListQueryDto listQueryDto = new ScheduleListQueryDto().setDeptId(vo.getDeptId())
+                .setMaxDate(maxDate)
+                .setMinDate(minDate)
+                .setProjectId(vo.getProjectId());
+
 
         Page<WorkSchedule> page = new Page<WorkSchedule>().setSize(vo.getPageSize()).setCurrent(vo.getPageNum());
 
 
-        Page<WorkSchedule> workSchedulePage = workScheduleMapper.selectPage(page, wrapper);
-        final List<WorkSchedule> records = workSchedulePage.getRecords();
+        IPage<WorkScheduleDto> workSchedulePage = workScheduleMapper.getPage(page, listQueryDto);
+        final List<WorkScheduleDto> records = workSchedulePage.getRecords();
         if (CollectionUtils.isEmpty(records)) return new PageList<>(Lists.newArrayList(), 0);
-        ConcurrentMap<String, List<WorkSchedule>> personSchedulesMap = records.stream()
+        ConcurrentMap<String, List<WorkScheduleDto>> personSchedulesMap = records.stream()
                 .collect(Collectors.groupingByConcurrent(WorkSchedule::getPersonId));
 
-        //todo 根据personIds 获取用户信息
-        Set<String> personIds = personSchedulesMap.keySet();
-
         List<OnePersonScheduleVO> personScheduleList = personSchedulesMap
                 .entrySet()
                 .stream().map(entry -> {
-                    List<WorkSchedule> value = entry.getValue();
-                    AtomicInteger workHours = new AtomicInteger();
-                    AtomicInteger remainWorkMinutes = new AtomicInteger();
-                    List<StatisticalInfoVO.OneStatisticalInfo> oneStatisticalInfos = value.stream()
-                            .collect(Collectors.groupingByConcurrent(WorkSchedule::getWorkTimeType))
-                            .entrySet().stream()
-                            .map(keyValue -> new StatisticalInfoVO.OneStatisticalInfo()
-                                    .setWorkTimeType(keyValue.getKey())
-                                    .setTimes(keyValue.getValue().size()))
-                            .peek(a -> {
-                                //todo 根据工作时间的配置 去处理工作时间的统计问题
-                            })
-                            .collect(Collectors.toList());
+                    List<WorkScheduleDto> value = entry.getValue();
                     List<OnePersonScheduleVO.WorkScheduleVO> workScheduleVOS = value.stream()
                             .map(workScheduleTransform::toWorkScheduleVO)
                             .collect(Collectors.toList());
                     return new OnePersonScheduleVO()
-                            .setStatisticalInfoVO(new StatisticalInfoVO()
-                                    .setStatisticalInfos(oneStatisticalInfos)
-                                    .setWorkHours(workHours.get())
-                                    .setWorkMinutes(remainWorkMinutes.get()))
                             .setPersonInfo(new OnePersonScheduleVO.PersonInfo().setPersonId(entry.getKey()))
                             .setWorkScheduleVOS(workScheduleVOS);
                 })
@@ -103,8 +91,8 @@ public class WorkScheduleService {
         }
         scheduleVOS.stream().filter(usefulIds::contains).forEach(a -> workSchedules.forEach(b -> {
             if (a.getId().equals(b.getId())) {
-                b.setWorkTimeType(a.getWorkTimeType());
-                b.setDay(a.getDay());
+                b.setShiftId(a.getShiftId());
+                b.setWorkDay(a.getWorkDay());
             }
         }));
         workSchedules.forEach(workScheduleMapper::updateById);

+ 2 - 1
fm-scheduling/src/main/java/com/persagy/fm/scheduling/transform/WorkScheduleTransform.java

@@ -1,6 +1,7 @@
 package com.persagy.fm.scheduling.transform;
 
 import com.persagy.fm.scheduling.model.WorkSchedule;
+import com.persagy.fm.scheduling.model.dto.WorkScheduleDto;
 import com.persagy.fm.scheduling.vo.request.UpdateScheduleVO;
 import com.persagy.fm.scheduling.vo.response.OnePersonScheduleVO;
 import org.mapstruct.Mapper;
@@ -11,7 +12,7 @@ public interface WorkScheduleTransform {
 
 
 
-    OnePersonScheduleVO.WorkScheduleVO toWorkScheduleVO(WorkSchedule workSchedule);
+    OnePersonScheduleVO.WorkScheduleVO toWorkScheduleVO(WorkScheduleDto dto);
 
 
     WorkSchedule toWorkSchedule(UpdateScheduleVO.ScheduleVO vo);

+ 19 - 1
fm-scheduling/src/main/java/com/persagy/fm/scheduling/utils/StreamUtil.java

@@ -1,6 +1,8 @@
 package com.persagy.fm.scheduling.utils;
 
+import java.util.Optional;
 import java.util.function.Consumer;
+import java.util.function.Function;
 import java.util.function.Predicate;
 
 public interface StreamUtil {
@@ -10,7 +12,23 @@ public interface StreamUtil {
         if (condition.test(t)) consumer.accept(t);
     }
 
-    static <T> void actionWhen(T t, Boolean flag, Consumer<T> consumer) {
+    static <T, U> void actionWhen(T t, U u, Predicate<U> condition, Consumer<T> consumer) {
+        if (condition.test(u)) consumer.accept(t);
+    }
+
+    static <T> void actionWhen(T t, boolean flag, Consumer<T> consumer) {
         if (flag) consumer.accept(t);
     }
+
+
+    static <T, R> Optional<R> transformWhen(T t, Predicate<T> condition, Function<T, R> function) {
+        if (condition.test(t)) return Optional.of(function.apply(t));
+        return Optional.empty();
+    }
+
+
+    static <T, R> Optional<R> transformWhen(T t, boolean flag, Function<T, R> function) {
+        if (flag) return Optional.of(function.apply(t));
+        return Optional.empty();
+    }
 }

+ 1 - 1
fm-scheduling/src/main/java/com/persagy/fm/scheduling/vo/request/ScheduleListQueryVO.java

@@ -25,7 +25,7 @@ public class ScheduleListQueryVO {
     private String projectId;
     @NotBlank(message = "部门数据为空")
     @ApiModelProperty(value = "部门id", example = "214457")
-    private String departmentId;
+    private String deptId;
     @Min(1)
     private Long pageSize;
     @Min(1)

+ 3 - 3
fm-scheduling/src/main/java/com/persagy/fm/scheduling/vo/request/UpdateScheduleVO.java

@@ -1,12 +1,12 @@
 package com.persagy.fm.scheduling.vo.request;
 
 
-import com.persagy.fm.scheduling.enums.WorkTimeType;
 import lombok.Data;
 
 import javax.validation.Valid;
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
+import java.util.Date;
 import java.util.List;
 
 @Data
@@ -21,9 +21,9 @@ public class UpdateScheduleVO {
         @NotBlank
         private String id;
         @NotNull
-        private WorkTimeType workTimeType;
+        private String shiftId;
         @NotNull
-        private Integer day;
+        private Date workDay;
     }
 
 

+ 1 - 4
fm-scheduling/src/main/java/com/persagy/fm/scheduling/vo/response/OnePersonScheduleVO.java

@@ -1,6 +1,5 @@
 package com.persagy.fm.scheduling.vo.response;
 
-import com.persagy.fm.scheduling.enums.WorkTimeType;
 import lombok.Data;
 import lombok.experimental.Accessors;
 
@@ -17,7 +16,6 @@ public class OnePersonScheduleVO {
     private StatisticalInfoVO statisticalInfoVO;
 
 
-
     @Data
     @Accessors(chain = true)
     public static class PersonInfo {
@@ -29,13 +27,12 @@ public class OnePersonScheduleVO {
     }
 
 
-
     @Data
     @Accessors(chain = true)
     public static class WorkScheduleVO {
         private String id;
         private Integer day;
-        private WorkTimeType workTimeType;
+        private String shiftAbbr;
     }
 
 

+ 0 - 1
fm-scheduling/src/main/java/com/persagy/fm/scheduling/vo/response/StatisticalInfoVO.java

@@ -1,6 +1,5 @@
 package com.persagy.fm.scheduling.vo.response;
 
-import com.persagy.fm.scheduling.enums.WorkTimeType;
 import lombok.Data;
 import lombok.experimental.Accessors;
 

+ 0 - 1
fm-scheduling/src/main/java/com/persagy/fm/scheduling/vo/response/WorkTimeResultVO.java

@@ -1,6 +1,5 @@
 package com.persagy.fm.scheduling.vo.response;
 
-import com.persagy.fm.scheduling.enums.WorkTimeType;
 import lombok.Data;
 import lombok.experimental.Accessors;
 

+ 1 - 0
fm-scheduling/src/main/resources/db.init/table.sql

@@ -103,6 +103,7 @@ CREATE TABLE
 (
     `id`            VARCHAR(64) NOT NULL COMMENT '主键',
     `person_id`     VARCHAR(64) NOT NULL COMMENT '工作人员id',
+    `dept_id`       VARCHAR ( 64) NOT NULL COMMENT '部门id',
     `project_id`    VARCHAR(64) NOT NULL COMMENT '项目id',
     `ts`            TIMESTAMP            default current_timestamp on update current_timestamp NOT NULL COMMENT '乐观锁',
     `creator`       VARCHAR(32) NOT NULL COMMENT '创建人',

+ 12 - 1
fm-scheduling/src/main/resources/mapper/WokeScheduleMapper.xml

@@ -1,6 +1,17 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.persagy.fm.scheduling.dao.WokeScheduleMapper">
+<mapper namespace="com.persagy.fm.scheduling.dao.WorkScheduleMapper">
 
+    <select id="getPage" resultType="com.persagy.fm.scheduling.model.dto.WorkScheduleDto">
+
+        select a.*,b.shift_abbr as shiftAbbr
+        from work_schedule a , work_shift b, work_person c where a.shift_id = b.id
+        and a.person_id = c.id
+        and a. work_day &gt;= #{schedule.minDate}
+        and a.work_day &lt; #{schedule.maxDate}
+        and c.project_id = #{schedule.projectId}
+        and c.dept_id = #{schedule.deptId}
+
+    </select>
 </mapper>