Files
klp-oa/klp-wms/src/main/java/com/klp/service/impl/WmsAttendanceShiftRuleServiceImpl.java
Joshi 0ecc886485 feat(attendance): 添加排班生成功能
- 在IWmsAttendanceScheduleService中新增generateSchedule方法
- 在WmsAttendanceScheduleController中添加生成排班API接口
- 实现WmsAttendanceScheduleServiceImpl中的排班生成逻辑,支持正常排班和倒班
- 扩展WmsAttendanceShiftRule实体类,添加倒班转换班次字段
- 更新WmsAttendanceShiftRule相关BO、VO类及数据库映射
- 创建GenerateScheduleBo请求对象用于接收排班生成参数
- 实现倒班规则查询和班次验证功能
- 添加排班重复性检查机制
2026-05-09 13:59:37 +08:00

116 lines
4.4 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.klp.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.klp.common.core.page.TableDataInfo;
import com.klp.common.core.domain.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.klp.common.utils.StringUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.klp.domain.bo.WmsAttendanceShiftRuleBo;
import com.klp.domain.vo.WmsAttendanceShiftRuleVo;
import com.klp.domain.WmsAttendanceShiftRule;
import com.klp.mapper.WmsAttendanceShiftRuleMapper;
import com.klp.service.IWmsAttendanceShiftRuleService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 倒班规则支持按日期或按周期自动切换班次Service业务层处理
*
* @author klp
* @date 2026-05-08
*/
@RequiredArgsConstructor
@Service
public class WmsAttendanceShiftRuleServiceImpl implements IWmsAttendanceShiftRuleService {
private final WmsAttendanceShiftRuleMapper baseMapper;
/**
* 查询倒班规则(支持按日期或按周期自动切换班次)
*/
@Override
public WmsAttendanceShiftRuleVo queryById(Long ruleId){
return baseMapper.selectVoById(ruleId);
}
/**
* 查询倒班规则(支持按日期或按周期自动切换班次)列表
*/
@Override
public TableDataInfo<WmsAttendanceShiftRuleVo> queryPageList(WmsAttendanceShiftRuleBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<WmsAttendanceShiftRule> lqw = buildQueryWrapper(bo);
Page<WmsAttendanceShiftRuleVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询倒班规则(支持按日期或按周期自动切换班次)列表
*/
@Override
public List<WmsAttendanceShiftRuleVo> queryList(WmsAttendanceShiftRuleBo bo) {
LambdaQueryWrapper<WmsAttendanceShiftRule> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<WmsAttendanceShiftRule> buildQueryWrapper(WmsAttendanceShiftRuleBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<WmsAttendanceShiftRule> lqw = Wrappers.lambdaQuery();
lqw.eq(StringUtils.isNotBlank(bo.getRuleType()), WmsAttendanceShiftRule::getRuleType, bo.getRuleType());
lqw.eq(StringUtils.isNotBlank(bo.getChangeDays()), WmsAttendanceShiftRule::getChangeDays, bo.getChangeDays());
lqw.eq(bo.getCycleDays() != null, WmsAttendanceShiftRule::getCycleDays, bo.getCycleDays());
lqw.eq(bo.getShiftA() != null, WmsAttendanceShiftRule::getShiftA, bo.getShiftA());
lqw.eq(bo.getShiftB() != null, WmsAttendanceShiftRule::getShiftB, bo.getShiftB());
lqw.eq(bo.getChangeShiftBId() != null, WmsAttendanceShiftRule::getChangeShiftBId, bo.getChangeShiftBId());
lqw.eq(bo.getChangeShiftAId() != null, WmsAttendanceShiftRule::getChangeShiftAId, bo.getChangeShiftAId());
return lqw;
}
/**
* 新增倒班规则(支持按日期或按周期自动切换班次)
*/
@Override
public Boolean insertByBo(WmsAttendanceShiftRuleBo bo) {
WmsAttendanceShiftRule add = BeanUtil.toBean(bo, WmsAttendanceShiftRule.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setRuleId(add.getRuleId());
}
return flag;
}
/**
* 修改倒班规则(支持按日期或按周期自动切换班次)
*/
@Override
public Boolean updateByBo(WmsAttendanceShiftRuleBo bo) {
WmsAttendanceShiftRule update = BeanUtil.toBean(bo, WmsAttendanceShiftRule.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(WmsAttendanceShiftRule entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 批量删除倒班规则(支持按日期或按周期自动切换班次)
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
}
}