Files
klp-oa/klp-wms/src/main/java/com/klp/service/impl/WmsEmployeeChangeServiceImpl.java
Joshi e1dd76ee4a feat(employee): 添加员工信息和变动记录的排序功能
- 在WmsEmployeeInfoBo中新增sortByRegularTime和sortByEntryTime字段
- 实现员工信息按入职时间、转正时间或创建时间的倒序排序
- 添加员工变动记录按变动时间的倒序排序
- 实现员工转岗记录按转岗时间的倒序排序
- 优化查询条件构建逻辑,支持多维度排序需求
2026-03-23 09:20:19 +08:00

252 lines
9.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 org.springframework.transaction.annotation.Transactional;
import com.klp.domain.bo.WmsEmployeeChangeBo;
import com.klp.domain.vo.WmsEmployeeChangeVo;
import com.klp.domain.WmsEmployeeChange;
import com.klp.domain.WmsEmployeeInfo;
import com.klp.mapper.WmsEmployeeChangeMapper;
import com.klp.mapper.WmsEmployeeInfoMapper;
import com.klp.service.IWmsEmployeeChangeService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 员工异动(入职/离职/转正Service业务层处理
*
* @author klp
* @date 2026-03-14
*/
@RequiredArgsConstructor
@Service
public class WmsEmployeeChangeServiceImpl implements IWmsEmployeeChangeService {
private final WmsEmployeeChangeMapper baseMapper;
private final WmsEmployeeInfoMapper wmsEmployeeInfoMapper;
/**
* 查询员工异动(入职/离职/转正)
*/
@Override
public WmsEmployeeChangeVo queryById(Long changeId){
WmsEmployeeChangeVo vo = baseMapper.selectVoById(changeId);
if (vo != null && vo.getInfoId() != null) {
WmsEmployeeInfo employee = wmsEmployeeInfoMapper.selectById(vo.getInfoId());
vo.setWmsEmployeeInfo(employee);
}
return vo;
}
/**
* 查询员工异动(入职/离职/转正)列表
*/
@Override
public TableDataInfo<WmsEmployeeChangeVo> queryPageList(WmsEmployeeChangeBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<WmsEmployeeChange> lqw = buildQueryWrapper(bo);
Page<WmsEmployeeChangeVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
for (WmsEmployeeChangeVo vo : result.getRecords()) {
WmsEmployeeInfo employee = wmsEmployeeInfoMapper.selectById(vo.getInfoId());
vo.setWmsEmployeeInfo(employee);
}
return TableDataInfo.build(result);
}
/**
* 查询员工异动(入职/离职/转正)列表
*/
@Override
public List<WmsEmployeeChangeVo> queryList(WmsEmployeeChangeBo bo) {
LambdaQueryWrapper<WmsEmployeeChange> lqw = buildQueryWrapper(bo);
List<WmsEmployeeChangeVo> list = baseMapper.selectVoList(lqw);
for (WmsEmployeeChangeVo vo : list) {
WmsEmployeeInfo employee = wmsEmployeeInfoMapper.selectById(vo.getInfoId());
vo.setWmsEmployeeInfo(employee);
}
return list;
}
private LambdaQueryWrapper<WmsEmployeeChange> buildQueryWrapper(WmsEmployeeChangeBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<WmsEmployeeChange> lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getInfoId() != null, WmsEmployeeChange::getInfoId, bo.getInfoId());
lqw.eq(bo.getChangeType() != null, WmsEmployeeChange::getChangeType, bo.getChangeType());
lqw.eq(bo.getChangeTime() != null, WmsEmployeeChange::getChangeTime, bo.getChangeTime());
lqw.ge(bo.getChangeStartTime() != null, WmsEmployeeChange::getChangeTime, bo.getChangeStartTime());
lqw.le(bo.getChangeEndTime() != null, WmsEmployeeChange::getChangeTime, bo.getChangeEndTime());
lqw.eq(StringUtils.isNotBlank(bo.getChangeReason()), WmsEmployeeChange::getChangeReason, bo.getChangeReason());
lqw.eq(StringUtils.isNotBlank(bo.getChangeHandler()), WmsEmployeeChange::getChangeHandler, bo.getChangeHandler());
lqw.eq(StringUtils.isNotBlank(bo.getAttachment()), WmsEmployeeChange::getAttachment, bo.getAttachment());
// 按照变动时间倒叙排序
lqw.orderByDesc(WmsEmployeeChange::getChangeTime);
return lqw;
}
/**
* 新增员工异动(入职/离职/转正)
*/
@Override
public Boolean insertByBo(WmsEmployeeChangeBo bo) {
WmsEmployeeChange add = BeanUtil.toBean(bo, WmsEmployeeChange.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setChangeId(add.getChangeId());
}
return flag;
}
/**
* 修改员工异动(入职/离职/转正)
*/
@Override
public Boolean updateByBo(WmsEmployeeChangeBo bo) {
WmsEmployeeChange update = BeanUtil.toBean(bo, WmsEmployeeChange.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(WmsEmployeeChange entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 批量删除员工异动(入职/离职/转正)
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
}
/**
* 员工入职
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean employeeEntry(WmsEmployeeChangeBo bo) {
WmsEmployeeInfo employee = new WmsEmployeeInfo();
employee.setSerialNumber(bo.getSerialNumber());
employee.setDept(bo.getDept());
employee.setJobType(bo.getJobType());
employee.setName(bo.getName());
employee.setIdCard(bo.getIdCard());
employee.setAge(bo.getAge());
employee.setGender(bo.getGender());
employee.setEducation(bo.getEducation());
employee.setHomeAddress(bo.getHomeAddress());
employee.setPhone(bo.getPhone());
employee.setEntryTime(bo.getEntryTime());
employee.setEmergencyContact(bo.getEmergencyContact());
employee.setRelationship(bo.getRelationship());
employee.setEmergencyContactPhone(bo.getEmergencyContactPhone());
employee.setSocialInsuranceType(bo.getSocialInsuranceType());
employee.setRemark(bo.getInfoRemark());
employee.setIsLeave(0);
boolean flag = wmsEmployeeInfoMapper.insert(employee) > 0;
if (!flag) {
return false;
}
Long infoId = employee.getInfoId();
WmsEmployeeChange change = new WmsEmployeeChange();
change.setInfoId(infoId);
change.setChangeType(0);
change.setChangeTime(bo.getChangeTime());
change.setChangeHandler(bo.getChangeHandler());
change.setAttachment(bo.getAttachment());
change.setCreateBy(bo.getCreateBy());
change.setRemark(bo.getRemark());
return baseMapper.insert(change) > 0;
}
/**
* 员工离职
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean employeeLeave(WmsEmployeeChangeBo bo) {
if (bo.getInfoId() == null) {
throw new RuntimeException("员工ID不能为空");
}
WmsEmployeeInfo employee = wmsEmployeeInfoMapper.selectById(bo.getInfoId());
if (employee == null) {
throw new RuntimeException("员工不存在");
}
if (employee.getIsLeave() != null && employee.getIsLeave() == 1) {
throw new RuntimeException("员工已离职");
}
employee.setIsLeave(1);
boolean flag = wmsEmployeeInfoMapper.updateById(employee) > 0;
if (!flag) {
return false;
}
WmsEmployeeChange change = new WmsEmployeeChange();
change.setInfoId(bo.getInfoId());
change.setChangeType(1);
change.setChangeTime(bo.getChangeTime());
change.setChangeReason(bo.getChangeReason());
change.setChangeHandler(bo.getChangeHandler());
change.setAttachment(bo.getAttachment());
change.setCreateBy(bo.getCreateBy());
change.setRemark(bo.getRemark());
return baseMapper.insert(change) > 0;
}
/**
* 员工转正
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean employeeRegular(WmsEmployeeChangeBo bo) {
if (bo.getInfoId() == null) {
throw new RuntimeException("员工ID不能为空");
}
WmsEmployeeInfo employee = wmsEmployeeInfoMapper.selectById(bo.getInfoId());
if (employee == null) {
throw new RuntimeException("员工不存在");
}
if (employee.getIsLeave() != null && employee.getIsLeave() == 1) {
throw new RuntimeException("员工已离职,无法转正");
}
if (employee.getIsRegular() != null && employee.getIsRegular() == 1) {
throw new RuntimeException("员工已转正");
}
employee.setIsRegular(1);
employee.setRegularTime(bo.getChangeTime());
boolean flag = wmsEmployeeInfoMapper.updateById(employee) > 0;
if (!flag) {
return false;
}
WmsEmployeeChange change = new WmsEmployeeChange();
change.setInfoId(bo.getInfoId());
change.setChangeType(2);
change.setChangeTime(bo.getChangeTime());
change.setChangeReason(bo.getChangeReason());
change.setChangeHandler(bo.getChangeHandler());
change.setAttachment(bo.getAttachment());
change.setCreateBy(bo.getCreateBy());
change.setRemark(bo.getRemark());
return baseMapper.insert(change) > 0;
}
}