feat(wms): 新增员工入职离职功能

- 在 IWmsEmployeeChangeService 中添加 employeeEntry 和 employeeLeave 方法
- 扩展 WmsEmployeeChangeBo 类增加员工详细信息字段
- 在 WmsEmployeeChangeController 中添加入职和离职接口
- 实现 WmsEmployeeChangeServiceImpl 的入职离职业务逻辑
- 集成员工信息查询功能并在查询结果中关联员工详情
- 添加事务管理确保数据一致性操作
This commit is contained in:
2026-03-14 10:40:44 +08:00
parent 0091a46811
commit 9b82d7230a
5 changed files with 212 additions and 2 deletions

View File

@@ -96,4 +96,24 @@ public class WmsEmployeeChangeController extends BaseController {
@PathVariable Long[] changeIds) {
return toAjax(iWmsEmployeeChangeService.deleteWithValidByIds(Arrays.asList(changeIds), true));
}
/**
* 员工入职
*/
@Log(title = "员工入职", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping("/entry")
public R<Void> entry(@Validated(AddGroup.class) @RequestBody WmsEmployeeChangeBo bo) {
return toAjax(iWmsEmployeeChangeService.employeeEntry(bo));
}
/**
* 员工离职
*/
@Log(title = "员工离职", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping("/leave")
public R<Void> leave(@Validated(AddGroup.class) @RequestBody WmsEmployeeChangeBo bo) {
return toAjax(iWmsEmployeeChangeService.employeeLeave(bo));
}
}

View File

@@ -59,5 +59,84 @@ public class WmsEmployeeChangeBo extends BaseEntity {
*/
private String remark;
/**
* 序号
*/
private Long serialNumber;
/**
* 部门
*/
private String dept;
/**
* 岗位工种
*/
private String jobType;
/**
* 姓名
*/
private String name;
/**
* 身份证号
*/
private String idCard;
/**
* 年龄
*/
private Long age;
/**
* 性别(男/女)
*/
private String gender;
/**
* 学历
*/
private String education;
/**
* 家庭住址
*/
private String homeAddress;
/**
* 联系电话
*/
private String phone;
/**
* 入职时间
*/
private Date entryTime;
/**
* 紧急联系人
*/
private String emergencyContact;
/**
* 关系
*/
private String relationship;
/**
* 紧急联系人电话
*/
private String emergencyContactPhone;
/**
* 社保类型(三险/五险)
*/
private String socialInsuranceType;
// infoRemart
private String infoRemark;
}

View File

@@ -1,11 +1,13 @@
package com.klp.domain.vo;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.klp.common.annotation.ExcelDictFormat;
import com.klp.common.convert.ExcelDictConvert;
import com.klp.domain.WmsEmployeeInfo;
import lombok.Data;
@@ -70,6 +72,11 @@ public class WmsEmployeeChangeVo {
*/
@ExcelProperty(value = "备注")
private String remark;
/**
* 员工信息
*/
private WmsEmployeeInfo wmsEmployeeInfo;
}

View File

@@ -46,4 +46,14 @@ public interface IWmsEmployeeChangeService {
* 校验并批量删除员工异动(入职/离职)信息
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 员工入职
*/
Boolean employeeEntry(WmsEmployeeChangeBo bo);
/**
* 员工离职
*/
Boolean employeeLeave(WmsEmployeeChangeBo bo);
}

View File

@@ -9,10 +9,13 @@ 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;
@@ -30,13 +33,19 @@ import java.util.Collection;
public class WmsEmployeeChangeServiceImpl implements IWmsEmployeeChangeService {
private final WmsEmployeeChangeMapper baseMapper;
private final WmsEmployeeInfoMapper wmsEmployeeInfoMapper;
/**
* 查询员工异动(入职/离职)
*/
@Override
public WmsEmployeeChangeVo queryById(Long changeId){
return baseMapper.selectVoById(changeId);
WmsEmployeeChangeVo vo = baseMapper.selectVoById(changeId);
if (vo != null && vo.getInfoId() != null) {
WmsEmployeeInfo employee = wmsEmployeeInfoMapper.selectById(vo.getInfoId());
vo.setWmsEmployeeInfo(employee);
}
return vo;
}
/**
@@ -46,6 +55,10 @@ public class WmsEmployeeChangeServiceImpl implements IWmsEmployeeChangeService {
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);
}
@@ -55,7 +68,12 @@ public class WmsEmployeeChangeServiceImpl implements IWmsEmployeeChangeService {
@Override
public List<WmsEmployeeChangeVo> queryList(WmsEmployeeChangeBo bo) {
LambdaQueryWrapper<WmsEmployeeChange> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
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) {
@@ -111,4 +129,80 @@ public class WmsEmployeeChangeServiceImpl implements IWmsEmployeeChangeService {
}
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;
}
}