feat(approval): 完善审批流程并新增部门管理功能

- 修改审批任务服务接口返回类型为Map以支持复杂数据结构
- 新增WMS部门管理模块,包括实体、业务对象、控制器和实现类
- 添加部门树形结构支持和部门负责人管理功能
- 更新审批流程逻辑,集成部门领导审批机制
- 重构审批任务查询方法以关联审批详情和申请人信息
- 添加部门ID字段到请假和外出申请相关实体中
- 优化多级审批流程,支持基于部门层级的审批链路
- 移除废弃的导入语句并整理代码结构
This commit is contained in:
2026-03-02 14:41:43 +08:00
parent f47e1f529c
commit 05447c21ef
18 changed files with 628 additions and 52 deletions

View File

@@ -2,6 +2,7 @@ package com.klp.controller;
import java.util.List; import java.util.List;
import java.util.Arrays; import java.util.Arrays;
import java.util.Map;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
@@ -40,7 +41,7 @@ public class WmsApprovalTaskController extends BaseController {
* 查询审批任务列表 * 查询审批任务列表
*/ */
@GetMapping("/list") @GetMapping("/list")
public TableDataInfo<WmsApprovalTaskVo> list(WmsApprovalTaskBo bo, PageQuery pageQuery) { public TableDataInfo<Map<String, Object>> list(WmsApprovalTaskBo bo, PageQuery pageQuery) {
return iWmsApprovalTaskService.queryPageList(bo, pageQuery); return iWmsApprovalTaskService.queryPageList(bo, pageQuery);
} }

View File

@@ -0,0 +1,99 @@
package com.klp.controller;
import java.util.List;
import java.util.Arrays;
import lombok.RequiredArgsConstructor;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import com.klp.common.annotation.RepeatSubmit;
import com.klp.common.annotation.Log;
import com.klp.common.core.controller.BaseController;
import com.klp.common.core.domain.PageQuery;
import com.klp.common.core.domain.R;
import com.klp.common.core.validate.AddGroup;
import com.klp.common.core.validate.EditGroup;
import com.klp.common.enums.BusinessType;
import com.klp.common.utils.poi.ExcelUtil;
import com.klp.domain.vo.WmsDeptVo;
import com.klp.domain.bo.WmsDeptBo;
import com.klp.service.IWmsDeptService;
/**
* WMS系统部门树形结构
*
* @author klp
* @date 2026-03-02
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/wms/dept")
public class WmsDeptController extends BaseController {
private final IWmsDeptService iWmsDeptService;
/**
* 查询WMS系统部门树形结构列表
*/
@GetMapping("/list")
public R<List<WmsDeptVo>> list(WmsDeptBo bo) {
List<WmsDeptVo> list = iWmsDeptService.queryList(bo);
return R.ok(list);
}
/**
* 导出WMS系统部门树形结构列表
*/
@Log(title = "WMS系统部门树形结构", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(WmsDeptBo bo, HttpServletResponse response) {
List<WmsDeptVo> list = iWmsDeptService.queryList(bo);
ExcelUtil.exportExcel(list, "WMS系统部门树形结构", WmsDeptVo.class, response);
}
/**
* 获取WMS系统部门树形结构详细信息
*
* @param deptId 主键
*/
@GetMapping("/{deptId}")
public R<WmsDeptVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long deptId) {
return R.ok(iWmsDeptService.queryById(deptId));
}
/**
* 新增WMS系统部门树形结构
*/
@Log(title = "WMS系统部门树形结构", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody WmsDeptBo bo) {
return toAjax(iWmsDeptService.insertByBo(bo));
}
/**
* 修改WMS系统部门树形结构
*/
@Log(title = "WMS系统部门树形结构", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody WmsDeptBo bo) {
return toAjax(iWmsDeptService.updateByBo(bo));
}
/**
* 删除WMS系统部门树形结构
*
* @param deptIds 主键串
*/
@Log(title = "WMS系统部门树形结构", businessType = BusinessType.DELETE)
@DeleteMapping("/{deptIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] deptIds) {
return toAjax(iWmsDeptService.deleteWithValidByIds(Arrays.asList(deptIds), true));
}
}

View File

@@ -0,0 +1,53 @@
package com.klp.domain;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import com.klp.common.core.domain.TreeEntity;
/**
* WMS系统部门树形结构对象 wms_dept
*
* @author klp
* @date 2026-03-02
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("wms_dept")
public class WmsDept extends TreeEntity<WmsDept> {
private static final long serialVersionUID=1L;
/**
* 部门id
*/
@TableId(value = "dept_id")
private Long deptId;
/**
* 部门名称
*/
private String deptName;
/**
* 部门显示顺序(同级排序)
*/
private Long orderNum;
/**
* 部门负责人
*/
private Long leader;
/**
* 部门状态0正常 1停用
*/
private String status;
/**
* 删除标志0=正常1=已删除)
*/
@TableLogic
private Integer delFlag;
/**
* 备注
*/
private String remark;
}

View File

@@ -79,5 +79,8 @@ public class WmsApprovalBo extends BaseEntity {
*/ */
private String remark; private String remark;
//部门id
private Long deptId;
} }

View File

@@ -0,0 +1,51 @@
package com.klp.domain.bo;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.*;
import com.klp.common.core.domain.TreeEntity;
/**
* WMS系统部门树形结构业务对象 wms_dept
*
* @author klp
* @date 2026-03-02
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class WmsDeptBo extends TreeEntity<WmsDeptBo> {
/**
* 部门id
*/
private Long deptId;
/**
* 部门名称
*/
private String deptName;
/**
* 部门显示顺序(同级排序)
*/
private Long orderNum;
/**
* 部门负责人
*/
private Long leader;
/**
* 部门状态0正常 1停用
*/
private String status;
/**
* 备注
*/
private String remark;
}

View File

@@ -96,5 +96,8 @@ public class WmsLeaveRequestBo extends BaseEntity {
// 审批类型 // 审批类型
private String approvalType; private String approvalType;
// 部门id
private Long deptId;
} }

View File

@@ -78,4 +78,9 @@ public class WmsOutRequestBo extends BaseEntity {
// 审批人 // 审批人
private String approverName; private String approverName;
private String approvalType;
// 部门id
private Long deptId;
} }

View File

@@ -1,5 +1,6 @@
package com.klp.domain.vo; package com.klp.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ExcelProperty;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.klp.common.convert.ExcelDictConvert; import com.klp.common.convert.ExcelDictConvert;
@@ -15,6 +16,7 @@ import java.util.Date;
* @date 2026-01-20 * @date 2026-01-20
*/ */
@Data @Data
@ExcelIgnoreUnannotated
public class WmsApprovalTaskVo { public class WmsApprovalTaskVo {
private Long taskId; private Long taskId;

View File

@@ -0,0 +1,68 @@
package com.klp.domain.vo;
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 lombok.Data;
/**
* WMS系统部门树形结构视图对象 wms_dept
*
* @author klp
* @date 2026-03-02
*/
@Data
@ExcelIgnoreUnannotated
public class WmsDeptVo {
private static final long serialVersionUID = 1L;
/**
* 部门id
*/
@ExcelProperty(value = "部门id")
private Long deptId;
/**
* 父部门id0表示顶级部门
*/
@ExcelProperty(value = "父部门id", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "0=表示顶级部门")
private Long parentId;
/**
* 部门名称
*/
@ExcelProperty(value = "部门名称")
private String deptName;
/**
* 部门显示顺序(同级排序)
*/
@ExcelProperty(value = "部门显示顺序", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "同=级排序")
private Long orderNum;
/**
* 部门负责人
*/
@ExcelProperty(value = "部门负责人")
private Long leader;
/**
* 部门状态0正常 1停用
*/
@ExcelProperty(value = "部门状态", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "0=正常,1=停用")
private String status;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
}

View File

@@ -0,0 +1,15 @@
package com.klp.mapper;
import com.klp.domain.WmsDept;
import com.klp.domain.vo.WmsDeptVo;
import com.klp.common.core.mapper.BaseMapperPlus;
/**
* WMS系统部门树形结构Mapper接口
*
* @author klp
* @date 2026-03-02
*/
public interface WmsDeptMapper extends BaseMapperPlus<WmsDeptMapper, WmsDept, WmsDeptVo> {
}

View File

@@ -8,6 +8,7 @@ import com.klp.common.core.domain.PageQuery;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Map;
/** /**
* 审批任务Service接口 * 审批任务Service接口
@@ -19,7 +20,7 @@ public interface IWmsApprovalTaskService {
WmsApprovalTaskVo queryById(Long taskId); WmsApprovalTaskVo queryById(Long taskId);
TableDataInfo<WmsApprovalTaskVo> queryPageList(WmsApprovalTaskBo bo, PageQuery pageQuery); TableDataInfo<Map<String, Object>> queryPageList(WmsApprovalTaskBo bo, PageQuery pageQuery);
List<WmsApprovalTaskVo> queryList(WmsApprovalTaskBo bo); List<WmsApprovalTaskVo> queryList(WmsApprovalTaskBo bo);

View File

@@ -0,0 +1,43 @@
package com.klp.service;
import com.klp.domain.WmsDept;
import com.klp.domain.vo.WmsDeptVo;
import com.klp.domain.bo.WmsDeptBo;
import java.util.Collection;
import java.util.List;
/**
* WMS系统部门树形结构Service接口
*
* @author klp
* @date 2026-03-02
*/
public interface IWmsDeptService {
/**
* 查询WMS系统部门树形结构
*/
WmsDeptVo queryById(Long deptId);
/**
* 查询WMS系统部门树形结构列表
*/
List<WmsDeptVo> queryList(WmsDeptBo bo);
/**
* 新增WMS系统部门树形结构
*/
Boolean insertByBo(WmsDeptBo bo);
/**
* 修改WMS系统部门树形结构
*/
Boolean updateByBo(WmsDeptBo bo);
/**
* 校验并批量删除WMS系统部门树形结构信息
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@@ -14,6 +14,8 @@ import com.klp.common.core.service.UserService;
import com.klp.common.helper.LoginHelper; import com.klp.common.helper.LoginHelper;
import com.klp.common.utils.StringUtils; import com.klp.common.utils.StringUtils;
import com.klp.domain.WmsApprovalTask; import com.klp.domain.WmsApprovalTask;
import com.klp.domain.WmsDept;
import com.klp.mapper.*;
import com.klp.system.mapper.SysDeptMapper; import com.klp.system.mapper.SysDeptMapper;
import com.klp.system.mapper.SysUserMapper; import com.klp.system.mapper.SysUserMapper;
import com.klp.system.service.ISysUserService; import com.klp.system.service.ISysUserService;
@@ -25,8 +27,6 @@ import com.klp.domain.vo.WmsApprovalVo;
import com.klp.domain.WmsApproval; import com.klp.domain.WmsApproval;
import com.klp.domain.bo.WmsApprovalTaskBo; import com.klp.domain.bo.WmsApprovalTaskBo;
import com.klp.domain.vo.WmsApprovalTaskVo; import com.klp.domain.vo.WmsApprovalTaskVo;
import com.klp.mapper.WmsApprovalMapper;
import com.klp.mapper.WmsApprovalTaskMapper;
import com.klp.service.IWmsApprovalService; import com.klp.service.IWmsApprovalService;
import com.klp.service.IWmsApprovalTaskService; import com.klp.service.IWmsApprovalTaskService;
@@ -34,8 +34,6 @@ import java.math.BigDecimal;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import com.klp.mapper.WmsLeaveRequestMapper;
import com.klp.mapper.WmsOutRequestMapper;
import com.klp.domain.vo.WmsLeaveRequestVo; import com.klp.domain.vo.WmsLeaveRequestVo;
import com.klp.domain.vo.WmsOutRequestVo; import com.klp.domain.vo.WmsOutRequestVo;
import com.klp.domain.WmsLeaveRequest; import com.klp.domain.WmsLeaveRequest;
@@ -55,7 +53,7 @@ public class WmsApprovalServiceImpl implements IWmsApprovalService {
private final WmsLeaveRequestMapper leaveRequestMapper; private final WmsLeaveRequestMapper leaveRequestMapper;
private final WmsOutRequestMapper outRequestMapper; private final WmsOutRequestMapper outRequestMapper;
private final ISysUserService userService; private final ISysUserService userService;
private final SysDeptMapper deptMapper; private final WmsDeptMapper wmsDeptMapper;
private final SysUserMapper userMapper; private final SysUserMapper userMapper;
/** /**
@@ -262,13 +260,13 @@ public class WmsApprovalServiceImpl implements IWmsApprovalService {
bo.setApprovalId(add.getApprovalId()); bo.setApprovalId(add.getApprovalId());
if ("leave".equals(add.getApplyType()) && add.getApplyId() != null) { if ("leave".equals(add.getApplyType()) && add.getApplyId() != null) {
createApprovalTasks(add.getApprovalId(), add.getApplyId(), add.getApplyType(),add.getApprovalType()); createApprovalTasks(add.getApprovalId(), add.getApplyId(), add.getApplyType(), add.getApprovalType(), bo.getDeptId());
} }
} }
return flag; return flag;
} }
private void createApprovalTasks(Long approvalId, Long applyId, String applyType, String approvalType) { private void createApprovalTasks(Long approvalId, Long applyId, String applyType, String approvalType, Long deptId) {
if (!"leave".equals(applyType)) { if (!"leave".equals(applyType)) {
return; return;
} }
@@ -285,7 +283,7 @@ public class WmsApprovalServiceImpl implements IWmsApprovalService {
updateApproval.setApprovalType(approvalType); updateApproval.setApprovalType(approvalType);
if (isMultiLevel) { if (isMultiLevel) {
List<Long> leaderUserIds = getDeptLeaders(leaveRequest.getApplicantDeptName()); List<Long> leaderUserIds = getDeptLeaders(deptId);
updateApproval.setRequiredApprovers(leaderUserIds.size()); updateApproval.setRequiredApprovers(leaderUserIds.size());
for (Long leaderUserId : leaderUserIds) { for (Long leaderUserId : leaderUserIds) {
@@ -302,13 +300,13 @@ public class WmsApprovalServiceImpl implements IWmsApprovalService {
} else { } else {
updateApproval.setRequiredApprovers(1); updateApproval.setRequiredApprovers(1);
// 根据applicantId查询审批人name和id // 根据applicantId查询审批人name和id
WmsApproval approval = baseMapper.selectOne(new LambdaQueryWrapper<WmsApproval>().eq(WmsApproval::getApprovalId, approvalId)); WmsDept dept = wmsDeptMapper.selectById(deptId);
List<SysUser> currentUser = userMapper.selectList(new LambdaQueryWrapper<SysUser>().eq(SysUser::getNickName, approval.getApproverName())); SysUser leader = userMapper.selectById(dept.getLeader());
if (currentUser != null) { if (leader != null) {
WmsApprovalTaskBo taskBo = new WmsApprovalTaskBo(); WmsApprovalTaskBo taskBo = new WmsApprovalTaskBo();
taskBo.setApprovalId(approvalId); taskBo.setApprovalId(approvalId);
taskBo.setApproverId(currentUser.get(0).getUserId()); taskBo.setApproverId(dept.getLeader());
taskBo.setApproverName(approval.getApproverName()); taskBo.setApproverName(leader.getNickName());
taskBo.setTaskStatus("pending"); taskBo.setTaskStatus("pending");
approvalTaskMapper.insert(BeanUtil.toBean(taskBo, WmsApprovalTask.class)); approvalTaskMapper.insert(BeanUtil.toBean(taskBo, WmsApprovalTask.class));
} }
@@ -317,28 +315,20 @@ public class WmsApprovalServiceImpl implements IWmsApprovalService {
baseMapper.updateById(updateApproval); baseMapper.updateById(updateApproval);
} }
private List<Long> getDeptLeaders(String applicantDeptName) { private List<Long> getDeptLeaders(Long deptId) {
List<Long> leaderUserIds = new ArrayList<>(); List<Long> leaderUserIds = new ArrayList<>();
if (StringUtils.isBlank(applicantDeptName)) { if (deptId == null) {
return leaderUserIds;
}
// 根据部门名称查询部门信息
SysDept dept = deptMapper.selectOne(new LambdaQueryWrapper<SysDept>()
.eq(SysDept::getDeptName, applicantDeptName));
if (dept == null) {
return leaderUserIds; return leaderUserIds;
} }
// 获取部门的所有祖先部门ID包括自己 // 获取部门的所有祖先部门ID包括自己
List<Long> ancestorDeptIds = new ArrayList<>(); List<Long> ancestorDeptIds = new ArrayList<>();
Long currentDeptId = dept.getDeptId(); Long currentDeptId = deptId;
while (currentDeptId != null) { while (currentDeptId != null) {
ancestorDeptIds.add(currentDeptId); ancestorDeptIds.add(currentDeptId);
SysDept currentDept = deptMapper.selectById(currentDeptId); WmsDept currentDept = wmsDeptMapper.selectById(currentDeptId);
if (currentDept != null) { if (currentDept != null) {
currentDeptId = currentDept.getParentId(); currentDeptId = currentDept.getParentId();
} else { } else {
@@ -348,29 +338,29 @@ public class WmsApprovalServiceImpl implements IWmsApprovalService {
// 查询每个祖先部门的leader字段内容 // 查询每个祖先部门的leader字段内容
if (!ancestorDeptIds.isEmpty()) { if (!ancestorDeptIds.isEmpty()) {
List<SysDept> ancestorDepts = deptMapper.selectList(new LambdaQueryWrapper<SysDept>() List<WmsDept> ancestorDepts = wmsDeptMapper.selectList(new LambdaQueryWrapper<WmsDept>()
.in(SysDept::getDeptId, ancestorDeptIds)); .in(WmsDept::getDeptId, ancestorDeptIds));
if (CollectionUtil.isNotEmpty(ancestorDepts)) { if (CollectionUtil.isNotEmpty(ancestorDepts)) {
// 提取所有leader字段的内容 // 提取所有leader字段的内容
List<String> leaderNames = ancestorDepts.stream() leaderUserIds = ancestorDepts.stream()
.map(SysDept::getLeader) .map(WmsDept::getLeader)
.filter(StringUtils::isNotBlank) .filter(Objects::nonNull)
.distinct() .distinct()
.collect(Collectors.toList()); .collect(Collectors.toList());
// 根据leader名称查询对应的用户ID // // 根据leader名称查询对应的用户ID
if (!leaderNames.isEmpty()) { // if (!leaderNames.isEmpty()) {
List<SysUser> leaders = userMapper.selectList(new LambdaQueryWrapper<SysUser>() // List<SysUser> leaders = userMapper.selectList(new LambdaQueryWrapper<SysUser>()
.in(SysUser::getNickName, leaderNames)); // .in(SysUser::getNickName, leaderNames));
//
if (CollectionUtil.isNotEmpty(leaders)) { // if (CollectionUtil.isNotEmpty(leaders)) {
leaderUserIds = leaders.stream() // leaderUserIds = leaders.stream()
.map(SysUser::getUserId) // .map(SysUser::getUserId)
.distinct() // .distinct()
.collect(Collectors.toList()); // .collect(Collectors.toList());
} // }
} // }
} }
} }

View File

@@ -1,21 +1,30 @@
package com.klp.service.impl; package com.klp.service.impl;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.klp.common.core.page.TableDataInfo; import com.klp.common.core.page.TableDataInfo;
import com.klp.common.core.domain.PageQuery; import com.klp.common.core.domain.PageQuery;
import com.klp.common.utils.StringUtils;
import com.klp.domain.WmsApprovalTask; import com.klp.domain.WmsApprovalTask;
import com.klp.domain.bo.WmsApprovalTaskBo; import com.klp.domain.bo.WmsApprovalTaskBo;
import com.klp.domain.vo.WmsApprovalTaskVo; import com.klp.domain.vo.WmsApprovalTaskVo;
import com.klp.domain.vo.WmsApprovalVo;
import com.klp.domain.vo.WmsLeaveRequestVo;
import com.klp.domain.vo.WmsOutRequestVo;
import com.klp.mapper.WmsApprovalTaskMapper; import com.klp.mapper.WmsApprovalTaskMapper;
import com.klp.mapper.WmsApprovalMapper;
import com.klp.mapper.WmsLeaveRequestMapper;
import com.klp.mapper.WmsOutRequestMapper;
import com.klp.service.IWmsApprovalTaskService; import com.klp.service.IWmsApprovalTaskService;
import com.klp.system.service.ISysUserService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Collection; import java.util.*;
import java.util.List; import java.util.stream.Collectors;
/** /**
* 审批任务Service业务层处理 * 审批任务Service业务层处理
@@ -28,6 +37,10 @@ import java.util.List;
public class WmsApprovalTaskServiceImpl implements IWmsApprovalTaskService { public class WmsApprovalTaskServiceImpl implements IWmsApprovalTaskService {
private final WmsApprovalTaskMapper baseMapper; private final WmsApprovalTaskMapper baseMapper;
private final WmsApprovalMapper approvalMapper;
private final WmsLeaveRequestMapper leaveRequestMapper;
private final WmsOutRequestMapper outRequestMapper;
private final ISysUserService userService;
@Override @Override
public WmsApprovalTaskVo queryById(Long taskId) { public WmsApprovalTaskVo queryById(Long taskId) {
@@ -35,10 +48,111 @@ public class WmsApprovalTaskServiceImpl implements IWmsApprovalTaskService {
} }
@Override @Override
public TableDataInfo<WmsApprovalTaskVo> queryPageList(WmsApprovalTaskBo bo, PageQuery pageQuery) { public TableDataInfo<Map<String, Object>> queryPageList(WmsApprovalTaskBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<WmsApprovalTask> lqw = buildQueryWrapper(bo); LambdaQueryWrapper<WmsApprovalTask> lqw = buildQueryWrapper(bo);
Page<WmsApprovalTaskVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw); Page<WmsApprovalTaskVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result); List<WmsApprovalTaskVo> taskList = result.getRecords();
if (CollectionUtil.isEmpty(taskList)) {
return TableDataInfo.build(new ArrayList<>());
}
// 收集所有approvalId查询审批信息
List<Long> approvalIds = taskList.stream()
.map(WmsApprovalTaskVo::getApprovalId)
.distinct()
.collect(Collectors.toList());
List<WmsApprovalVo> approvalList = approvalMapper.selectVoList(
Wrappers.<com.klp.domain.WmsApproval>lambdaQuery()
.in(com.klp.domain.WmsApproval::getApprovalId, approvalIds)
);
Map<Long, WmsApprovalVo> approvalMap = approvalList.stream()
.collect(Collectors.toMap(WmsApprovalVo::getApprovalId, v -> v, (a, b) -> a));
// 收集所有applyId按类型分别查询
Set<String> userNames = new HashSet<>();
Map<String, Object> detailMap = new HashMap<>();
for (WmsApprovalTaskVo task : taskList) {
WmsApprovalVo approval = approvalMap.get(task.getApprovalId());
if (approval == null) {
continue;
}
String applyType = approval.getApplyType();
Long applyId = approval.getApplyId();
if (StringUtils.isNotBlank(applyType) && applyId != null) {
if ("leave".equalsIgnoreCase(applyType)) {
WmsLeaveRequestVo leaveDetail = leaveRequestMapper.selectVoById(applyId);
detailMap.put("leave_" + applyId, leaveDetail);
if (leaveDetail != null && StringUtils.isNotBlank(leaveDetail.getCreateBy())) {
userNames.add(leaveDetail.getCreateBy());
}
} else if ("out".equalsIgnoreCase(applyType)) {
WmsOutRequestVo outDetail = outRequestMapper.selectVoById(applyId);
detailMap.put("out_" + applyId, outDetail);
if (outDetail != null && StringUtils.isNotBlank(outDetail.getCreateBy())) {
userNames.add(outDetail.getCreateBy());
}
}
}
}
// 批量查询昵称
Map<String, String> nickMap = Collections.emptyMap();
if (!userNames.isEmpty()) {
nickMap = userService.selectNickNameMapByUserNames(new ArrayList<>(userNames));
}
// 组装返回结果
List<Map<String, Object>> resultList = new ArrayList<>();
for (WmsApprovalTaskVo task : taskList) {
Map<String, Object> item = new HashMap<>();
item.put("task", task);
WmsApprovalVo approval = approvalMap.get(task.getApprovalId());
if (approval != null) {
item.put("approval", approval);
String applyType = approval.getApplyType();
Long applyId = approval.getApplyId();
if (StringUtils.isNotBlank(applyType) && applyId != null) {
if ("leave".equalsIgnoreCase(applyType)) {
WmsLeaveRequestVo leaveDetail = (WmsLeaveRequestVo) detailMap.get("leave_" + applyId);
if (leaveDetail != null) {
if (StringUtils.isNotBlank(leaveDetail.getCreateBy())) {
leaveDetail.setCreateByName(nickMap.getOrDefault(leaveDetail.getCreateBy(), leaveDetail.getCreateBy()));
}
item.put("detail", leaveDetail);
item.put("applyType", "leave");
}
} else if ("out".equalsIgnoreCase(applyType)) {
WmsOutRequestVo outDetail = (WmsOutRequestVo) detailMap.get("out_" + applyId);
if (outDetail != null) {
if (StringUtils.isNotBlank(outDetail.getCreateBy())) {
outDetail.setCreateByName(nickMap.getOrDefault(outDetail.getCreateBy(), outDetail.getCreateBy()));
}
item.put("detail", outDetail);
item.put("applyType", "out");
}
}
}
}
resultList.add(item);
}
Page<Map<String, Object>> resultPage = new Page<>();
resultPage.setRecords(resultList);
resultPage.setTotal(result.getTotal());
resultPage.setSize(result.getSize());
resultPage.setCurrent(result.getCurrent());
resultPage.setPages(result.getPages());
return TableDataInfo.build(resultPage);
} }
@Override @Override

View File

@@ -0,0 +1,101 @@
package com.klp.service.impl;
import cn.hutool.core.bean.BeanUtil;
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.WmsDeptBo;
import com.klp.domain.vo.WmsDeptVo;
import com.klp.domain.WmsDept;
import com.klp.mapper.WmsDeptMapper;
import com.klp.service.IWmsDeptService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* WMS系统部门树形结构Service业务层处理
*
* @author klp
* @date 2026-03-02
*/
@RequiredArgsConstructor
@Service
public class WmsDeptServiceImpl implements IWmsDeptService {
private final WmsDeptMapper baseMapper;
/**
* 查询WMS系统部门树形结构
*/
@Override
public WmsDeptVo queryById(Long deptId){
return baseMapper.selectVoById(deptId);
}
/**
* 查询WMS系统部门树形结构列表
*/
@Override
public List<WmsDeptVo> queryList(WmsDeptBo bo) {
LambdaQueryWrapper<WmsDept> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<WmsDept> buildQueryWrapper(WmsDeptBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<WmsDept> lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getParentId() != null, WmsDept::getParentId, bo.getParentId());
lqw.like(StringUtils.isNotBlank(bo.getDeptName()), WmsDept::getDeptName, bo.getDeptName());
lqw.eq(bo.getOrderNum() != null, WmsDept::getOrderNum, bo.getOrderNum());
lqw.eq(bo.getLeader() != null, WmsDept::getLeader, bo.getLeader());
lqw.eq(StringUtils.isNotBlank(bo.getStatus()), WmsDept::getStatus, bo.getStatus());
return lqw;
}
/**
* 新增WMS系统部门树形结构
*/
@Override
public Boolean insertByBo(WmsDeptBo bo) {
WmsDept add = BeanUtil.toBean(bo, WmsDept.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setDeptId(add.getDeptId());
}
return flag;
}
/**
* 修改WMS系统部门树形结构
*/
@Override
public Boolean updateByBo(WmsDeptBo bo) {
WmsDept update = BeanUtil.toBean(bo, WmsDept.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(WmsDept entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 批量删除WMS系统部门树形结构
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
}
}

View File

@@ -130,6 +130,7 @@ public class WmsLeaveRequestServiceImpl implements IWmsLeaveRequestService {
approval.setApprovalStatus("待审批"); approval.setApprovalStatus("待审批");
approval.setApproverName(bo.getApproverName()); approval.setApproverName(bo.getApproverName());
approval.setApprovalType(bo.getApprovalType()); approval.setApprovalType(bo.getApprovalType());
approval.setDeptId(bo.getDeptId());
approvalService.insertByBo(approval); approvalService.insertByBo(approval);
} }

View File

@@ -7,6 +7,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.klp.common.utils.StringUtils; import com.klp.common.utils.StringUtils;
import com.klp.domain.bo.WmsApprovalBo;
import com.klp.service.IWmsApprovalService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.klp.domain.bo.WmsOutRequestBo; import com.klp.domain.bo.WmsOutRequestBo;
@@ -33,7 +35,7 @@ import com.klp.domain.WmsApproval;
public class WmsOutRequestServiceImpl implements IWmsOutRequestService { public class WmsOutRequestServiceImpl implements IWmsOutRequestService {
private final WmsOutRequestMapper baseMapper; private final WmsOutRequestMapper baseMapper;
private final WmsApprovalMapper approvalMapper; private final IWmsApprovalService approvalService;
/** /**
* 查询员工外出申请 * 查询员工外出申请
@@ -86,13 +88,14 @@ public class WmsOutRequestServiceImpl implements IWmsOutRequestService {
validEntityBeforeSave(add); validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0; boolean flag = baseMapper.insert(add) > 0;
if (flag) { if (flag) {
bo.setOutId(add.getOutId()); WmsApprovalBo approval = new WmsApprovalBo();
WmsApproval approval = new WmsApproval();
approval.setApplyType("out"); approval.setApplyType("out");
approval.setApplyId(add.getOutId()); approval.setApplyId(add.getOutId());
approval.setApprovalStatus("待审批"); approval.setApprovalStatus("待审批");
approval.setApproverName(bo.getApproverName()); approval.setApproverName(bo.getApproverName());
approvalMapper.insert(approval); approval.setApprovalType(bo.getApprovalType());
approval.setDeptId(bo.getDeptId());
approvalService.insertByBo(approval);
} }
return flag; return flag;
} }

View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.klp.mapper.WmsDeptMapper">
<resultMap type="com.klp.domain.WmsDept" id="WmsDeptResult">
<result property="deptId" column="dept_id"/>
<result property="parentId" column="parent_id"/>
<result property="deptName" column="dept_name"/>
<result property="orderNum" column="order_num"/>
<result property="leader" column="leader"/>
<result property="status" column="status"/>
<result property="delFlag" column="del_flag"/>
<result property="remark" column="remark"/>
<result property="createTime" column="create_time"/>
<result property="createBy" column="create_by"/>
<result property="updateTime" column="update_time"/>
<result property="updateBy" column="update_by"/>
</resultMap>
</mapper>