Browse Source

add 排班功能

459242451@qq.com 3 years ago
parent
commit
5215d04724

+ 34 - 15
ruoyi-admin/src/main/java/com/ruoyi/web/controller/zhdd/DutyEmpController.java

@@ -1,18 +1,19 @@
 package com.ruoyi.web.controller.zhdd;
 
 import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.ruoyi.common.annotation.Log;
 import com.ruoyi.common.annotation.RepeatSubmit;
 import com.ruoyi.common.core.controller.BaseController;
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.validate.AddGroup;
-import com.ruoyi.common.core.validate.EditGroup;
 import com.ruoyi.common.core.validate.QueryGroup;
 import com.ruoyi.common.enums.BusinessType;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.zhdd.domain.DutyEmp;
 import com.ruoyi.zhdd.domain.bo.DutyEmpBo;
+import com.ruoyi.zhdd.domain.bo.DutyEmpSaveBo;
 import com.ruoyi.zhdd.domain.vo.DutyEmpVo;
 import com.ruoyi.zhdd.service.IDutyEmpService;
 import io.swagger.annotations.Api;
@@ -24,7 +25,6 @@ import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.PutMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
@@ -96,13 +96,43 @@ public class DutyEmpController extends BaseController {
         result.put("all", collect);
         result.put("current", null);
         List<DutyEmpVo> currentWeekList = collect.get(week);
+        DutyEmpVo tempEmp = null;
         for (DutyEmpVo dutyEmpVo : currentWeekList) {
             int startTime = DateUtil.timeToSecond(dutyEmpVo.getPeriodTime().split("~")[0]);
             int endTime = DateUtil.timeToSecond(dutyEmpVo.getPeriodTime().split("~")[1]);
             if (nowTime >= startTime && nowTime <= endTime) {
                 result.put("current", dutyEmpVo);
-                break;
+                continue;
             }
+            if (nowTime > endTime && tempEmp == null) {
+                tempEmp = dutyEmpVo;
+            }
+        }
+        if (ObjectUtil.isNull(result.get("current")) && tempEmp != null) {
+            result.put("current", tempEmp);
+            return AjaxResult.success(result);
+        }
+
+        // 如果当前星期没有,则往下查询最近一个
+        if (ObjectUtil.isNull(result.get("current"))) {
+            for (int i = week + 1; i < 8; i++) {
+                List<DutyEmpVo> nextniWeekList = collect.get(i);
+                if (nextniWeekList != null && nextniWeekList.size() > 0) {
+                    tempEmp = nextniWeekList.get(0);
+                    break;
+                }
+            }
+            if (tempEmp == null) {
+                // 如果还是为空,则从周一开始继续查询
+                for (int i = 1; i < 8; i++) {
+                    List<DutyEmpVo> nextniWeekList = collect.get(i);
+                    if (nextniWeekList != null && nextniWeekList.size() > 0) {
+                        tempEmp = nextniWeekList.get(0);
+                        break;
+                    }
+                }
+            }
+            result.put("current", tempEmp);
         }
         return AjaxResult.success(result);
     }
@@ -135,22 +165,11 @@ public class DutyEmpController extends BaseController {
     @Log(title = "值班排班信息", businessType = BusinessType.INSERT)
     @RepeatSubmit()
     @PostMapping()
-    public AjaxResult<Void> add(@Validated(AddGroup.class) @RequestBody DutyEmpBo bo) {
+    public AjaxResult<Void> add(@Validated(AddGroup.class) @RequestBody DutyEmpSaveBo bo) {
         return toAjax(iDutyEmpService.insertByBo(bo) ? 1 : 0);
     }
 
     /**
-     * 修改值班排班信息
-     */
-    @ApiOperation("修改值班排班信息")
-    @Log(title = "值班排班信息", businessType = BusinessType.UPDATE)
-    @RepeatSubmit()
-    @PutMapping()
-    public AjaxResult<Void> edit(@Validated(EditGroup.class) @RequestBody DutyEmpBo bo) {
-        return toAjax(iDutyEmpService.updateByBo(bo) ? 1 : 0);
-    }
-
-    /**
      * 删除值班排班信息
      */
     @ApiOperation("删除值班排班信息")

+ 0 - 7
ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/domain/bo/DutyEmpBo.java

@@ -54,13 +54,6 @@ public class DutyEmpBo extends BaseEntity {
     private String empName;
 
     /**
-     * $column.columnComment
-     */
-    @ApiModelProperty(value = "$column.columnComment")
-    private String delFlag;
-
-
-    /**
      * 分页大小
      */
     @ApiModelProperty("分页大小")

+ 46 - 0
ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/domain/bo/DutyEmpSaveBo.java

@@ -0,0 +1,46 @@
+package com.ruoyi.zhdd.domain.bo;
+
+import com.ruoyi.common.core.validate.AddGroup;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * 值班排班信息业务对象 b_duty_emp
+ *
+ * @author xintong
+ * @date 2021-10-11
+ */
+
+@Data
+@ApiModel("值班排班信息业务对象2")
+public class DutyEmpSaveBo {
+
+    /**
+     * 日期
+     */
+    @ApiModelProperty(value = "日期")
+    @NotNull(message = "period不能为空", groups = {AddGroup.class})
+    private Integer period;
+
+    private List<DutyDetail> dutyDetailList;
+
+    @Data
+    public static class DutyDetail {
+
+        /**
+         * 时间段
+         */
+        private String periodTime;
+
+        /**
+         * 值班人员的json格式
+         */
+        private String empJson;
+
+    }
+
+}

+ 35 - 38
ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/service/IDutyEmpService.java

@@ -1,10 +1,11 @@
 package com.ruoyi.zhdd.service;
 
-import com.ruoyi.zhdd.domain.DutyEmp;
-import com.ruoyi.zhdd.domain.vo.DutyEmpVo;
-import com.ruoyi.zhdd.domain.bo.DutyEmpBo;
 import com.ruoyi.common.core.mybatisplus.core.IServicePlus;
 import com.ruoyi.common.core.page.TableDataInfo;
+import com.ruoyi.zhdd.domain.DutyEmp;
+import com.ruoyi.zhdd.domain.bo.DutyEmpBo;
+import com.ruoyi.zhdd.domain.bo.DutyEmpSaveBo;
+import com.ruoyi.zhdd.domain.vo.DutyEmpVo;
 
 import java.util.Collection;
 import java.util.List;
@@ -16,41 +17,37 @@ import java.util.List;
  * @date 2021-10-11
  */
 public interface IDutyEmpService extends IServicePlus<DutyEmp, DutyEmpVo> {
-	/**
-	 * 查询单个
-	 * @return
-	 */
-	DutyEmpVo queryById(String id);
-
-	/**
-	 * 查询列表
-	 */
+    /**
+     * 查询单个
+     *
+     * @return
+     */
+    DutyEmpVo queryById(String id);
+
+    /**
+     * 查询列表
+     */
     TableDataInfo<DutyEmpVo> queryPageList(DutyEmpBo bo);
 
-	/**
-	 * 查询列表
-	 */
-	List<DutyEmpVo> queryList(DutyEmpBo bo);
-
-	/**
-	 * 根据新增业务对象插入值班排班信息
-	 * @param bo 值班排班信息新增业务对象
-	 * @return
-	 */
-	Boolean insertByBo(DutyEmpBo bo);
-
-	/**
-	 * 根据编辑业务对象修改值班排班信息
-	 * @param bo 值班排班信息编辑业务对象
-	 * @return
-	 */
-	Boolean updateByBo(DutyEmpBo bo);
-
-	/**
-	 * 校验并删除数据
-	 * @param ids 主键集合
-	 * @param isValid 是否校验,true-删除前校验,false-不校验
-	 * @return
-	 */
-	Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid);
+    /**
+     * 查询列表
+     */
+    List<DutyEmpVo> queryList(DutyEmpBo bo);
+
+    /**
+     * 根据新增业务对象插入值班排班信息
+     *
+     * @param bo 值班排班信息新增业务对象
+     * @return
+     */
+    Boolean insertByBo(DutyEmpSaveBo bo);
+
+    /**
+     * 校验并删除数据
+     *
+     * @param ids     主键集合
+     * @param isValid 是否校验,true-删除前校验,false-不校验
+     * @return
+     */
+    Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid);
 }

+ 30 - 45
ruoyi-zhdd/src/main/java/com/ruoyi/zhdd/service/impl/DutyEmpServiceImpl.java

@@ -1,6 +1,5 @@
 package com.ruoyi.zhdd.service.impl;
 
-import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONUtil;
@@ -15,11 +14,14 @@ 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.bo.DutyEmpSaveBo;
 import com.ruoyi.zhdd.domain.vo.DutyEmpVo;
 import com.ruoyi.zhdd.mapper.DutyEmpMapper;
 import com.ruoyi.zhdd.service.IDutyEmpService;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
@@ -59,55 +61,38 @@ public class DutyEmpServiceImpl extends ServicePlusImpl<DutyEmpMapper, DutyEmp,
     }
 
     @Override
-    public Boolean insertByBo(DutyEmpBo bo) {
-        DutyEmp add = BeanUtil.toBean(bo, DutyEmp.class);
+    @Transactional
+    public Boolean insertByBo(DutyEmpSaveBo bo) {
         // 校验是否存在重叠时间段
-        // 先获取当前星期下所有的数据
-        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() + "存在重叠时间段,请检查!");
+        List<String> periods = bo.getDutyDetailList().stream().map(DutyEmpSaveBo.DutyDetail::getPeriodTime).collect(Collectors.toList());
+        for (int i = 0; i < periods.size(); i++) {
+            int startTime = DateUtil.timeToSecond(periods.get(i).split("~")[0]);
+            int endTime = DateUtil.timeToSecond(periods.get(i).split("~")[1]);
+            for (int j = i + 1; j < periods.size(); j++) {
+                // 循环比较
+                int compareStartTime = DateUtil.timeToSecond(periods.get(j).split("~")[0]);
+                int compareEndTime = DateUtil.timeToSecond(periods.get(j).split("~")[1]);
+                if ((startTime > compareStartTime && startTime < compareEndTime) ||
+                    (endTime > compareStartTime && endTime < compareEndTime) ||
+                    (startTime <= compareStartTime && endTime >= compareEndTime)) {
+                    throw new ServiceException(periods.get(i) + "存在重叠时间段,请检查!");
+                }
             }
         }
-        // 处理人名
-        if (StrUtil.isNotBlank(bo.getEmpJson())) {
-            List<SysUser> users = JSONUtil.toList(StrUtil.blankToDefault(bo.getEmpJson(), "[]"), SysUser.class);
+        List<DutyEmp> list = new ArrayList<>();
+        for (DutyEmpSaveBo.DutyDetail dutyDetail : bo.getDutyDetailList()) {
+            DutyEmp dutyEmp = new DutyEmp();
+            dutyEmp.setPeriod(bo.getPeriod());
+            dutyEmp.setPeriodTime(dutyDetail.getPeriodTime());
+            dutyEmp.setEmpJson(dutyDetail.getEmpJson());
+            List<SysUser> users = JSONUtil.toList(StrUtil.blankToDefault(dutyDetail.getEmpJson(), "[]"), SysUser.class);
             String userNames = users.stream().map(SysUser::getNickName).collect(Collectors.joining(","));
-            add.setEmpName(userNames);
+            dutyEmp.setEmpName(userNames);
+            list.add(dutyEmp);
         }
-        return save(add);
-    }
-
-    @Override
-    public Boolean updateByBo(DutyEmpBo bo) {
-        DutyEmp update = BeanUtil.toBean(bo, DutyEmp.class);
-        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);
+        // 先删除之前的星期数据
+        this.remove(Wrappers.<DutyEmp>lambdaQuery().eq(DutyEmp::getPeriod, bo.getPeriod()));
+        return saveBatch(list);
     }
 
     @Override