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.WmsEmployeeTransferBo; import com.klp.domain.vo.WmsEmployeeTransferVo; import com.klp.domain.WmsEmployeeTransfer; import com.klp.domain.WmsEmployeeInfo; import com.klp.mapper.WmsEmployeeTransferMapper; import com.klp.mapper.WmsEmployeeInfoMapper; import com.klp.service.IWmsEmployeeTransferService; import java.util.List; import java.util.Map; import java.util.Collection; /** * 员工转岗记录Service业务层处理 * * @author klp * @date 2026-03-18 */ @RequiredArgsConstructor @Service public class WmsEmployeeTransferServiceImpl implements IWmsEmployeeTransferService { private final WmsEmployeeTransferMapper baseMapper; private final WmsEmployeeInfoMapper wmsEmployeeInfoMapper; /** * 查询员工转岗记录 */ @Override public WmsEmployeeTransferVo queryById(Long transferId){ WmsEmployeeTransferVo vo = baseMapper.selectVoById(transferId); if (vo != null && vo.getInfoId() != null) { WmsEmployeeInfo employee = wmsEmployeeInfoMapper.selectById(vo.getInfoId()); vo.setWmsEmployeeInfo(employee); } return vo; } /** * 查询员工转岗记录列表 */ @Override public TableDataInfo queryPageList(WmsEmployeeTransferBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); for (WmsEmployeeTransferVo vo : result.getRecords()) { if (vo.getInfoId() != null) { WmsEmployeeInfo employee = wmsEmployeeInfoMapper.selectById(vo.getInfoId()); vo.setWmsEmployeeInfo(employee); } } return TableDataInfo.build(result); } /** * 查询员工转岗记录列表 */ @Override public List queryList(WmsEmployeeTransferBo bo) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); List list = baseMapper.selectVoList(lqw); for (WmsEmployeeTransferVo vo : list) { if (vo.getInfoId() != null) { WmsEmployeeInfo employee = wmsEmployeeInfoMapper.selectById(vo.getInfoId()); vo.setWmsEmployeeInfo(employee); } } return list; } private LambdaQueryWrapper buildQueryWrapper(WmsEmployeeTransferBo bo) { Map params = bo.getParams(); LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.eq(bo.getInfoId() != null, WmsEmployeeTransfer::getInfoId, bo.getInfoId()); lqw.eq(StringUtils.isNotBlank(bo.getOldDept()), WmsEmployeeTransfer::getOldDept, bo.getOldDept()); lqw.eq(StringUtils.isNotBlank(bo.getOldJobType()), WmsEmployeeTransfer::getOldJobType, bo.getOldJobType()); lqw.eq(StringUtils.isNotBlank(bo.getNewDept()), WmsEmployeeTransfer::getNewDept, bo.getNewDept()); lqw.eq(StringUtils.isNotBlank(bo.getNewJobType()), WmsEmployeeTransfer::getNewJobType, bo.getNewJobType()); lqw.eq(bo.getTransferTime() != null, WmsEmployeeTransfer::getTransferTime, bo.getTransferTime()); lqw.ge(bo.getTransferStartTime() != null, WmsEmployeeTransfer::getTransferTime, bo.getTransferStartTime()); lqw.le(bo.getTransferEndTime() != null, WmsEmployeeTransfer::getTransferTime, bo.getTransferEndTime()); lqw.eq(StringUtils.isNotBlank(bo.getTransferReason()), WmsEmployeeTransfer::getTransferReason, bo.getTransferReason()); lqw.eq(StringUtils.isNotBlank(bo.getTransferHandler()), WmsEmployeeTransfer::getTransferHandler, bo.getTransferHandler()); lqw.eq(bo.getApprovalStatus() != null, WmsEmployeeTransfer::getApprovalStatus, bo.getApprovalStatus()); lqw.eq(StringUtils.isNotBlank(bo.getAttachment()), WmsEmployeeTransfer::getAttachment, bo.getAttachment()); // 按照转岗时间倒叙排序 lqw.orderByDesc(WmsEmployeeTransfer::getTransferTime); return lqw; } /** * 新增员工转岗记录 */ @Override public Boolean insertByBo(WmsEmployeeTransferBo bo) { WmsEmployeeTransfer add = BeanUtil.toBean(bo, WmsEmployeeTransfer.class); validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setTransferId(add.getTransferId()); } return flag; } /** * 修改员工转岗记录 */ @Override public Boolean updateByBo(WmsEmployeeTransferBo bo) { WmsEmployeeTransfer update = BeanUtil.toBean(bo, WmsEmployeeTransfer.class); validEntityBeforeSave(update); return baseMapper.updateById(update) > 0; } /** * 保存前的数据校验 */ private void validEntityBeforeSave(WmsEmployeeTransfer entity){ //TODO 做一些数据校验,如唯一约束 } /** * 批量删除员工转岗记录 */ @Override public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { if(isValid){ //TODO 做一些业务上的校验,判断是否需要校验 } return baseMapper.deleteBatchIds(ids) > 0; } /** * 员工转岗 */ @Override @Transactional(rollbackFor = Exception.class) public Boolean employeeTransfer(WmsEmployeeTransferBo 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("员工已离职,无法转岗"); } bo.setOldDept(employee.getDept()); bo.setOldJobType(employee.getJobType()); WmsEmployeeInfo update = new WmsEmployeeInfo(); update.setInfoId(bo.getInfoId()); if (bo.getNewDept() != null) { update.setDept(bo.getNewDept()); } if (bo.getNewJobType() != null) { update.setJobType(bo.getNewJobType()); } boolean flag = wmsEmployeeInfoMapper.updateById(update) > 0; if (!flag) { return false; } WmsEmployeeTransfer transfer = new WmsEmployeeTransfer(); transfer.setInfoId(bo.getInfoId()); transfer.setOldDept(bo.getOldDept()); transfer.setOldJobType(bo.getOldJobType()); transfer.setNewDept(bo.getNewDept()); transfer.setNewJobType(bo.getNewJobType()); transfer.setTransferTime(bo.getTransferTime()); transfer.setTransferReason(bo.getTransferReason()); transfer.setTransferHandler(bo.getTransferHandler()); transfer.setAttachment(bo.getAttachment()); transfer.setRemark(bo.getRemark()); transfer.setCreateBy(bo.getCreateBy()); transfer.setApprovalStatus(1); return baseMapper.insert(transfer) > 0; } }