Explorar o código

add 排班功能

459242451@qq.com %!s(int64=3) %!d(string=hai) anos
pai
achega
6d92002450

+ 7 - 2
ruoyi-admin/src/main/java/com/ruoyi/web/controller/zhdd/DutyEmpController.java

@@ -33,6 +33,8 @@ import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 值班排班信息Controller
@@ -54,8 +56,11 @@ public class DutyEmpController extends BaseController {
      */
     @ApiOperation("查询值班排班信息列表")
     @GetMapping("/list")
-    public AjaxResult<List<DutyEmpVo>> list(@Validated(QueryGroup.class) DutyEmpBo bo) {
-        return AjaxResult.success(iDutyEmpService.listVo(Wrappers.<DutyEmp>lambdaQuery().orderByAsc(DutyEmp::getPeriod)));
+    public AjaxResult list(@Validated(QueryGroup.class) DutyEmpBo bo) {
+        List<DutyEmpVo> dutyEmpVos = iDutyEmpService.listVo(Wrappers.<DutyEmp>lambdaQuery().orderByAsc(DutyEmp::getPeriod).orderByAsc(DutyEmp::getPeriodTime));
+        // 分组
+        Map<Integer, List<DutyEmpVo>> collect = dutyEmpVos.stream().collect(Collectors.groupingBy(DutyEmpVo::getPeriod));
+        return AjaxResult.success(collect);
     }
 
     /**

+ 14 - 6
ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/domain/DutyEmp.java

@@ -1,12 +1,16 @@
 package com.ruoyi.zhdd.domain;
 
-import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import lombok.experimental.Accessors;
+
 import java.io.Serializable;
 import java.util.Date;
-import java.math.BigDecimal;
 
 /**
  * 值班排班信息对象 b_duty_emp
@@ -20,7 +24,7 @@ import java.math.BigDecimal;
 @TableName("b_duty_emp")
 public class DutyEmp implements Serializable {
 
-    private static final long serialVersionUID=1L;
+    private static final long serialVersionUID = 1L;
 
 
     /**
@@ -40,10 +44,14 @@ public class DutyEmp implements Serializable {
     private String empName;
 
     /**
-     * $column.columnComment
+     * 时间段
+     */
+    private String periodTime;
+
+    /**
+     * 值班人员的json格式
      */
-    @TableLogic
-    private String delFlag;
+    private String empJson;
 
     /**
      * $column.columnComment

+ 16 - 5
ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/domain/bo/DutyEmpBo.java

@@ -1,16 +1,14 @@
 package com.ruoyi.zhdd.domain.bo;
 
+import com.ruoyi.common.core.domain.BaseEntity;
 import com.ruoyi.common.core.validate.AddGroup;
-import com.ruoyi.common.core.validate.EditGroup;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
-import javax.validation.constraints.*;
-
-import java.util.Date;
 
-import com.ruoyi.common.core.domain.BaseEntity;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
 
 /**
  * 值班排班信息业务对象 b_duty_emp
@@ -34,9 +32,22 @@ public class DutyEmpBo extends BaseEntity {
      * 日期
      */
     @ApiModelProperty(value = "日期")
+    @NotNull(message = "period不能为空", groups = {AddGroup.class})
     private Integer period;
 
     /**
+     * 时间段
+     */
+    @NotBlank(message = "periodTime不能为空", groups = {AddGroup.class})
+    private String periodTime;
+
+    /**
+     * 值班人员的json格式
+     */
+    @NotBlank(message = "empJson不能为空", groups = {AddGroup.class})
+    private String empJson;
+
+    /**
      * 值班人
      */
     @ApiModelProperty(value = "值班人")

+ 10 - 0
ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/domain/vo/DutyEmpVo.java

@@ -38,5 +38,15 @@ public class DutyEmpVo {
     @ApiModelProperty("值班人")
     private String empName;
 
+    /**
+     * 时间段
+     */
+    private String periodTime;
+
+    /**
+     * 值班人员的json格式
+     */
+    private String empJson;
+
 
 }

+ 57 - 21
ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/service/impl/DutyEmpServiceImpl.java

@@ -1,23 +1,29 @@
 package com.ruoyi.zhdd.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
-import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.common.utils.PageUtils;
-import com.ruoyi.common.core.page.PagePlus;
-import com.ruoyi.common.core.page.TableDataInfo;
-import org.springframework.stereotype.Service;
-import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl;
+import com.ruoyi.common.core.page.PagePlus;
+import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.PageUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.zhdd.domain.DutyEmp;
 import com.ruoyi.zhdd.domain.bo.DutyEmpBo;
 import com.ruoyi.zhdd.domain.vo.DutyEmpVo;
-import com.ruoyi.zhdd.domain.DutyEmp;
 import com.ruoyi.zhdd.mapper.DutyEmpMapper;
 import com.ruoyi.zhdd.service.IDutyEmpService;
+import org.springframework.stereotype.Service;
 
+import java.util.Collection;
 import java.util.List;
 import java.util.Map;
-import java.util.Collection;
+import java.util.stream.Collectors;
 
 /**
  * 值班排班信息Service业务层处理
@@ -29,7 +35,7 @@ import java.util.Collection;
 public class DutyEmpServiceImpl extends ServicePlusImpl<DutyEmpMapper, DutyEmp, DutyEmpVo> implements IDutyEmpService {
 
     @Override
-    public DutyEmpVo queryById(String id){
+    public DutyEmpVo queryById(String id) {
         return getVoById(id);
     }
 
@@ -55,31 +61,61 @@ public class DutyEmpServiceImpl extends ServicePlusImpl<DutyEmpMapper, DutyEmp,
     @Override
     public Boolean insertByBo(DutyEmpBo bo) {
         DutyEmp add = BeanUtil.toBean(bo, DutyEmp.class);
-        validEntityBeforeSave(add);
+        // 校验是否存在重叠时间段
+        // 先获取当前星期下所有的数据
+        List<DutyEmpVo> dutyEmpVos = this.listVo(Wrappers.<DutyEmp>lambdaQuery().eq(DutyEmp::getPeriod, add.getPeriod()));
+        for (DutyEmpVo dutyEmpVo : dutyEmpVos) {
+            int startTime = DateUtil.timeToSecond(dutyEmpVo.getPeriodTime().split("~")[0]);
+            int endTime = DateUtil.timeToSecond(dutyEmpVo.getPeriodTime().split("~")[1]);
+            int requestStartTime = DateUtil.timeToSecond(bo.getPeriodTime().split("~")[0]);
+            int requestendTime = DateUtil.timeToSecond(bo.getPeriodTime().split("~")[1]);
+            if ((requestStartTime > startTime && requestStartTime < endTime) ||
+                (requestendTime > startTime && requestendTime < endTime) ||
+                (requestStartTime <= startTime && requestendTime >= endTime)) {
+                throw new ServiceException(bo.getPeriodTime() + "存在重叠时间段,请检查!");
+            }
+        }
+        // 处理人名
+        if (StrUtil.isNotBlank(bo.getEmpJson())) {
+            List<SysUser> users = JSONUtil.toList(StrUtil.blankToDefault(bo.getEmpJson(), "[]"), SysUser.class);
+            String userNames = users.stream().map(SysUser::getNickName).collect(Collectors.joining(","));
+            add.setEmpName(userNames);
+        }
         return save(add);
     }
 
     @Override
     public Boolean updateByBo(DutyEmpBo bo) {
         DutyEmp update = BeanUtil.toBean(bo, DutyEmp.class);
-        validEntityBeforeSave(update);
+        List<DutyEmpVo> dutyEmpVos = this.listVo(Wrappers.<DutyEmp>lambdaQuery().eq(DutyEmp::getPeriod, update.getPeriod()));
+        for (DutyEmpVo dutyEmpVo : dutyEmpVos) {
+            if (dutyEmpVo.getId().equals(bo.getId())) {
+                continue;
+            }
+            int startTime = DateUtil.timeToSecond(dutyEmpVo.getPeriodTime().split("~")[0]);
+            int endTime = DateUtil.timeToSecond(dutyEmpVo.getPeriodTime().split("~")[1]);
+            int requestStartTime = DateUtil.timeToSecond(bo.getPeriodTime().split("~")[0]);
+            int requestendTime = DateUtil.timeToSecond(bo.getPeriodTime().split("~")[1]);
+            if ((requestStartTime > startTime && requestStartTime < endTime) ||
+                (requestendTime > startTime && requestendTime < endTime) ||
+                (requestStartTime <= startTime && requestendTime >= endTime)) {
+                throw new ServiceException(bo.getPeriodTime() + "存在重叠时间段,请检查!");
+            }
+        }
+        if (StrUtil.isNotBlank(bo.getEmpJson())) {
+            List<SysUser> users = JSONUtil.toList(StrUtil.blankToDefault(bo.getEmpJson(), "[]"), SysUser.class);
+            String userNames = users.stream().map(SysUser::getNickName).collect(Collectors.joining(","));
+            update.setEmpName(userNames);
+        }
         return updateById(update);
     }
 
-    /**
-     * 保存前的数据校验
-     *
-     * @param entity 实体类数据
-     */
-    private void validEntityBeforeSave(DutyEmp entity){
-        //TODO 做一些数据校验,如唯一约束
-    }
-
     @Override
     public Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid) {
-        if(isValid){
+        if (isValid) {
             //TODO 做一些业务上的校验,判断是否需要校验
         }
         return removeByIds(ids);
     }
+
 }

+ 4 - 3
ruoyi-zhdd/src/main/resources/mapper/zhdd/DutyEmpMapper.xml

@@ -1,14 +1,15 @@
 <?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">
+    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.zhdd.mapper.DutyEmpMapper">
 
     <resultMap type="com.ruoyi.zhdd.domain.DutyEmp" id="DutyEmpResult">
         <result property="id" column="id"/>
         <result property="period" column="period"/>
+        <result property="periodTime" column="period_time"/>
         <result property="empName" column="emp_name"/>
-        <result property="delFlag" column="del_flag"/>
+        <result property="empJson" column="emp_json"/>
         <result property="createBy" column="create_by"/>
         <result property="createTime" column="create_time"/>
         <result property="updateBy" column="update_by"/>