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; 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.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.stream.Collectors; /** * 值班排班信息Service业务层处理 * * @author xintong * @date 2021-10-11 */ @Service public class DutyEmpServiceImpl extends ServicePlusImpl implements IDutyEmpService { @Override public DutyEmpVo queryById(String id) { return getVoById(id); } @Override public TableDataInfo queryPageList(DutyEmpBo bo) { PagePlus result = pageVo(PageUtils.buildPagePlus(), buildQueryWrapper(bo)); return PageUtils.buildDataInfo(result); } @Override public List queryList(DutyEmpBo bo) { return listVo(buildQueryWrapper(bo)); } private LambdaQueryWrapper buildQueryWrapper(DutyEmpBo bo) { Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.eq(bo.getPeriod() != null, DutyEmp::getPeriod, bo.getPeriod()); lqw.like(StringUtils.isNotBlank(bo.getEmpName()), DutyEmp::getEmpName, bo.getEmpName()); return lqw; } @Override public Boolean insertByBo(DutyEmpBo bo) { DutyEmp add = BeanUtil.toBean(bo, DutyEmp.class); // 校验是否存在重叠时间段 // 先获取当前星期下所有的数据 List dutyEmpVos = this.listVo(Wrappers.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 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); List dutyEmpVos = this.listVo(Wrappers.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 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); } @Override public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { if (isValid) { //TODO 做一些业务上的校验,判断是否需要校验 } return removeByIds(ids); } }