diff --git a/klp-perf/pom.xml b/klp-perf/pom.xml index 383f73a92..98e4c75d2 100644 --- a/klp-perf/pom.xml +++ b/klp-perf/pom.xml @@ -22,6 +22,10 @@ com.klp klp-common + + com.klp + klp-wms + diff --git a/klp-perf/src/main/java/com/klp/perf/controller/PerfEmployeeInfoController.java b/klp-perf/src/main/java/com/klp/perf/controller/PerfEmployeeInfoController.java deleted file mode 100644 index 5d18464cc..000000000 --- a/klp-perf/src/main/java/com/klp/perf/controller/PerfEmployeeInfoController.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.klp.perf.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.perf.domain.vo.PerfEmployeeInfoVo; -import com.klp.perf.domain.bo.PerfEmployeeInfoBo; -import com.klp.perf.service.IPerfEmployeeInfoService; -import com.klp.common.core.page.TableDataInfo; - -/** - * 员工绩效薪资基本信息 - * - * @author klp - * @date 2026-07-07 - */ -@Validated -@RequiredArgsConstructor -@RestController -@RequestMapping("/perf/employeeInfo") -public class PerfEmployeeInfoController extends BaseController { - - private final IPerfEmployeeInfoService iPerfEmployeeInfoService; - - /** - * 查询员工绩效薪资基本信息列表 - */ - @GetMapping("/list") - public TableDataInfo list(PerfEmployeeInfoBo bo, PageQuery pageQuery) { - return iPerfEmployeeInfoService.queryPageList(bo, pageQuery); - } - - /** - * 导出员工绩效薪资基本信息列表 - */ - @Log(title = "员工绩效薪资基本信息", businessType = BusinessType.EXPORT) - @PostMapping("/export") - public void export(PerfEmployeeInfoBo bo, HttpServletResponse response) { - List list = iPerfEmployeeInfoService.queryList(bo); - ExcelUtil.exportExcel(list, "员工绩效薪资基本信息", PerfEmployeeInfoVo.class, response); - } - - /** - * 获取员工绩效薪资基本信息详细信息 - * - * @param id 主键 - */ - @GetMapping("/{id}") - public R getInfo(@NotNull(message = "主键不能为空") - @PathVariable Long id) { - return R.ok(iPerfEmployeeInfoService.queryById(id)); - } - - /** - * 新增员工绩效薪资基本信息 - */ - @Log(title = "员工绩效薪资基本信息", businessType = BusinessType.INSERT) - @RepeatSubmit() - @PostMapping() - public R add(@Validated(AddGroup.class) @RequestBody PerfEmployeeInfoBo bo) { - return toAjax(iPerfEmployeeInfoService.insertByBo(bo)); - } - - /** - * 修改员工绩效薪资基本信息 - */ - @Log(title = "员工绩效薪资基本信息", businessType = BusinessType.UPDATE) - @RepeatSubmit() - @PutMapping() - public R edit(@Validated(EditGroup.class) @RequestBody PerfEmployeeInfoBo bo) { - return toAjax(iPerfEmployeeInfoService.updateByBo(bo)); - } - - /** - * 删除员工绩效薪资基本信息 - * - * @param ids 主键串 - */ - @Log(title = "员工绩效薪资基本信息", businessType = BusinessType.DELETE) - @DeleteMapping("/{ids}") - public R remove(@NotEmpty(message = "主键不能为空") - @PathVariable Long[] ids) { - return toAjax(iPerfEmployeeInfoService.deleteWithValidByIds(Arrays.asList(ids), true)); - } -} diff --git a/klp-perf/src/main/java/com/klp/perf/domain/PerfEmployeeInfo.java b/klp-perf/src/main/java/com/klp/perf/domain/PerfEmployeeInfo.java deleted file mode 100644 index 64d05d1f7..000000000 --- a/klp-perf/src/main/java/com/klp/perf/domain/PerfEmployeeInfo.java +++ /dev/null @@ -1,66 +0,0 @@ -package com.klp.perf.domain; - -import com.baomidou.mybatisplus.annotation.*; -import com.klp.common.core.domain.BaseEntity; -import lombok.Data; -import lombok.EqualsAndHashCode; - -import java.math.BigDecimal; - -/** - * 员工绩效薪资基本信息对象 perf_employee_info - * - * @author klp - * @date 2026-07-07 - */ -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("perf_employee_info") -public class PerfEmployeeInfo extends BaseEntity { - - private static final long serialVersionUID=1L; - - /** - * - */ - @TableId(value = "id") - private Long id; - /** - * 关联现有员工表主键 - */ - private Long employeeId; - /** - * 关联 perf_dept.id (冗余,便于按部门查询) - */ - private Long deptId; - /** - * 岗位/工种 - */ - private String positionName; - /** - * 底薪(元) - */ - private BigDecimal baseSalary; - /** - * 岗位绩效基数(元), 默认≈底薪×20% - */ - private BigDecimal perfBase; - /** - * 默认岗位系数(初始值,后续月度由绩效自动覆盖) - */ - private BigDecimal posCoeffDefault; - /** - * 是否在职 1=在职 0=离职 - */ - private Long isActive; - /** - * 删除标志(0=正常,1=已删除) - */ - @TableLogic - private Integer delFlag; - /** - * 备注 - */ - private String remark; - -} diff --git a/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfEmployeeInfoBo.java b/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfEmployeeInfoBo.java deleted file mode 100644 index ed01261b7..000000000 --- a/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfEmployeeInfoBo.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.klp.perf.domain.bo; - -import com.klp.common.core.domain.BaseEntity; -import lombok.Data; -import lombok.EqualsAndHashCode; -import javax.validation.constraints.*; - -import java.math.BigDecimal; - -/** - * 员工绩效薪资基本信息业务对象 perf_employee_info - * - * @author klp - * @date 2026-07-07 - */ - -@Data -@EqualsAndHashCode(callSuper = true) -public class PerfEmployeeInfoBo extends BaseEntity { - - /** - * - */ - private Long id; - - /** - * 关联现有员工表主键 - */ - private Long employeeId; - - /** - * 关联 perf_dept.id (冗余,便于按部门查询) - */ - private Long deptId; - - /** - * 岗位/工种 - */ - private String positionName; - - /** - * 底薪(元) - */ - private BigDecimal baseSalary; - - /** - * 岗位绩效基数(元), 默认≈底薪×20% - */ - private BigDecimal perfBase; - - /** - * 默认岗位系数(初始值,后续月度由绩效自动覆盖) - */ - private BigDecimal posCoeffDefault; - - /** - * 是否在职 1=在职 0=离职 - */ - private Long isActive; - - /** - * 备注 - */ - private String remark; - - -} diff --git a/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfEmployeeInfoVo.java b/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfEmployeeInfoVo.java deleted file mode 100644 index 86aa50faa..000000000 --- a/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfEmployeeInfoVo.java +++ /dev/null @@ -1,78 +0,0 @@ -package com.klp.perf.domain.vo; - -import java.math.BigDecimal; -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; - - -/** - * 员工绩效薪资基本信息视图对象 perf_employee_info - * - * @author klp - * @date 2026-07-07 - */ -@Data -@ExcelIgnoreUnannotated -public class PerfEmployeeInfoVo { - - private static final long serialVersionUID = 1L; - - /** - * - */ - @ExcelProperty(value = "") - private Long id; - - /** - * 关联现有员工表主键 - */ - @ExcelProperty(value = "关联现有员工表主键") - private Long employeeId; - - /** - * 关联 perf_dept.id (冗余,便于按部门查询) - */ - @ExcelProperty(value = "关联 perf_dept.id (冗余,便于按部门查询)") - private Long deptId; - - /** - * 岗位/工种 - */ - @ExcelProperty(value = "岗位/工种") - private String positionName; - - /** - * 底薪(元) - */ - @ExcelProperty(value = "底薪(元)") - private BigDecimal baseSalary; - - /** - * 岗位绩效基数(元), 默认≈底薪×20% - */ - @ExcelProperty(value = "岗位绩效基数(元), 默认≈底薪×20%") - private BigDecimal perfBase; - - /** - * 默认岗位系数(初始值,后续月度由绩效自动覆盖) - */ - @ExcelProperty(value = "默认岗位系数(初始值,后续月度由绩效自动覆盖)") - private BigDecimal posCoeffDefault; - - /** - * 是否在职 1=在职 0=离职 - */ - @ExcelProperty(value = "是否在职 1=在职 0=离职") - private Long isActive; - - /** - * 备注 - */ - @ExcelProperty(value = "备注") - private String remark; - - -} diff --git a/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfPositionTemplateVo.java b/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfPositionTemplateVo.java index 1f68d98b8..8af07c188 100644 --- a/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfPositionTemplateVo.java +++ b/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfPositionTemplateVo.java @@ -1,5 +1,6 @@ package com.klp.perf.domain.vo; +import java.util.List; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; import com.klp.common.annotation.ExcelDictFormat; @@ -55,5 +56,10 @@ public class PerfPositionTemplateVo { @ExcelProperty(value = "备注") private String remark; + /** + * 考核维度明细列表 + */ + private List dimensionList; + } diff --git a/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfSalaryVo.java b/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfSalaryVo.java index ae34c92bf..f482dff5b 100644 --- a/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfSalaryVo.java +++ b/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfSalaryVo.java @@ -7,6 +7,7 @@ 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; @@ -208,5 +209,8 @@ public class PerfSalaryVo { @ExcelProperty(value = "备注") private String remark; - + /** + * 关联员工简要信息 (联查 wms_employee_info) + */ + private WmsEmployeeInfo wmsEmployeeInfo; } diff --git a/klp-perf/src/main/java/com/klp/perf/mapper/PerfEmployeeInfoMapper.java b/klp-perf/src/main/java/com/klp/perf/mapper/PerfEmployeeInfoMapper.java deleted file mode 100644 index df9a2467e..000000000 --- a/klp-perf/src/main/java/com/klp/perf/mapper/PerfEmployeeInfoMapper.java +++ /dev/null @@ -1,15 +0,0 @@ -package com.klp.perf.mapper; - -import com.klp.perf.domain.PerfEmployeeInfo; -import com.klp.perf.domain.vo.PerfEmployeeInfoVo; -import com.klp.common.core.mapper.BaseMapperPlus; - -/** - * 员工绩效薪资基本信息Mapper接口 - * - * @author klp - * @date 2026-07-07 - */ -public interface PerfEmployeeInfoMapper extends BaseMapperPlus { - -} diff --git a/klp-perf/src/main/java/com/klp/perf/service/IPerfEmployeeInfoService.java b/klp-perf/src/main/java/com/klp/perf/service/IPerfEmployeeInfoService.java deleted file mode 100644 index 9c76f822c..000000000 --- a/klp-perf/src/main/java/com/klp/perf/service/IPerfEmployeeInfoService.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.klp.perf.service; - -import com.klp.perf.domain.PerfEmployeeInfo; -import com.klp.perf.domain.vo.PerfEmployeeInfoVo; -import com.klp.perf.domain.bo.PerfEmployeeInfoBo; -import com.klp.common.core.page.TableDataInfo; -import com.klp.common.core.domain.PageQuery; - -import java.util.Collection; -import java.util.List; - -/** - * 员工绩效薪资基本信息Service接口 - * - * @author klp - * @date 2026-07-07 - */ -public interface IPerfEmployeeInfoService { - - /** - * 查询员工绩效薪资基本信息 - */ - PerfEmployeeInfoVo queryById(Long id); - - /** - * 查询员工绩效薪资基本信息列表 - */ - TableDataInfo queryPageList(PerfEmployeeInfoBo bo, PageQuery pageQuery); - - /** - * 查询员工绩效薪资基本信息列表 - */ - List queryList(PerfEmployeeInfoBo bo); - - /** - * 新增员工绩效薪资基本信息 - */ - Boolean insertByBo(PerfEmployeeInfoBo bo); - - /** - * 修改员工绩效薪资基本信息 - */ - Boolean updateByBo(PerfEmployeeInfoBo bo); - - /** - * 校验并批量删除员工绩效薪资基本信息信息 - */ - Boolean deleteWithValidByIds(Collection ids, Boolean isValid); -} diff --git a/klp-perf/src/main/java/com/klp/perf/service/impl/PerfEmployeeInfoServiceImpl.java b/klp-perf/src/main/java/com/klp/perf/service/impl/PerfEmployeeInfoServiceImpl.java deleted file mode 100644 index 58ce5e835..000000000 --- a/klp-perf/src/main/java/com/klp/perf/service/impl/PerfEmployeeInfoServiceImpl.java +++ /dev/null @@ -1,115 +0,0 @@ -package com.klp.perf.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.perf.domain.bo.PerfEmployeeInfoBo; -import com.klp.perf.domain.vo.PerfEmployeeInfoVo; -import com.klp.perf.domain.PerfEmployeeInfo; -import com.klp.perf.mapper.PerfEmployeeInfoMapper; -import com.klp.perf.service.IPerfEmployeeInfoService; - -import java.util.List; -import java.util.Map; -import java.util.Collection; - -/** - * 员工绩效薪资基本信息Service业务层处理 - * - * @author klp - * @date 2026-07-07 - */ -@RequiredArgsConstructor -@Service -public class PerfEmployeeInfoServiceImpl implements IPerfEmployeeInfoService { - - private final PerfEmployeeInfoMapper baseMapper; - - /** - * 查询员工绩效薪资基本信息 - */ - @Override - public PerfEmployeeInfoVo queryById(Long id){ - return baseMapper.selectVoById(id); - } - - /** - * 查询员工绩效薪资基本信息列表 - */ - @Override - public TableDataInfo queryPageList(PerfEmployeeInfoBo bo, PageQuery pageQuery) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); - return TableDataInfo.build(result); - } - - /** - * 查询员工绩效薪资基本信息列表 - */ - @Override - public List queryList(PerfEmployeeInfoBo bo) { - LambdaQueryWrapper lqw = buildQueryWrapper(bo); - return baseMapper.selectVoList(lqw); - } - - private LambdaQueryWrapper buildQueryWrapper(PerfEmployeeInfoBo bo) { - Map params = bo.getParams(); - LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); - lqw.eq(bo.getEmployeeId() != null, PerfEmployeeInfo::getEmployeeId, bo.getEmployeeId()); - lqw.eq(bo.getDeptId() != null, PerfEmployeeInfo::getDeptId, bo.getDeptId()); - lqw.like(StringUtils.isNotBlank(bo.getPositionName()), PerfEmployeeInfo::getPositionName, bo.getPositionName()); - lqw.eq(bo.getBaseSalary() != null, PerfEmployeeInfo::getBaseSalary, bo.getBaseSalary()); - lqw.eq(bo.getPerfBase() != null, PerfEmployeeInfo::getPerfBase, bo.getPerfBase()); - lqw.eq(bo.getPosCoeffDefault() != null, PerfEmployeeInfo::getPosCoeffDefault, bo.getPosCoeffDefault()); - lqw.eq(bo.getIsActive() != null, PerfEmployeeInfo::getIsActive, bo.getIsActive()); - return lqw; - } - - /** - * 新增员工绩效薪资基本信息 - */ - @Override - public Boolean insertByBo(PerfEmployeeInfoBo bo) { - PerfEmployeeInfo add = BeanUtil.toBean(bo, PerfEmployeeInfo.class); - validEntityBeforeSave(add); - boolean flag = baseMapper.insert(add) > 0; - if (flag) { - bo.setId(add.getId()); - } - return flag; - } - - /** - * 修改员工绩效薪资基本信息 - */ - @Override - public Boolean updateByBo(PerfEmployeeInfoBo bo) { - PerfEmployeeInfo update = BeanUtil.toBean(bo, PerfEmployeeInfo.class); - validEntityBeforeSave(update); - return baseMapper.updateById(update) > 0; - } - - /** - * 保存前的数据校验 - */ - private void validEntityBeforeSave(PerfEmployeeInfo entity){ - //TODO 做一些数据校验,如唯一约束 - } - - /** - * 批量删除员工绩效薪资基本信息 - */ - @Override - public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { - if(isValid){ - //TODO 做一些业务上的校验,判断是否需要校验 - } - return baseMapper.deleteBatchIds(ids) > 0; - } -} diff --git a/klp-perf/src/main/java/com/klp/perf/service/impl/PerfPositionTemplateServiceImpl.java b/klp-perf/src/main/java/com/klp/perf/service/impl/PerfPositionTemplateServiceImpl.java index f3221a8b8..fa8ee8e1f 100644 --- a/klp-perf/src/main/java/com/klp/perf/service/impl/PerfPositionTemplateServiceImpl.java +++ b/klp-perf/src/main/java/com/klp/perf/service/impl/PerfPositionTemplateServiceImpl.java @@ -11,13 +11,18 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import com.klp.perf.domain.bo.PerfPositionTemplateBo; import com.klp.perf.domain.vo.PerfPositionTemplateVo; +import com.klp.perf.domain.vo.PerfTemplateDimensionVo; import com.klp.perf.domain.PerfPositionTemplate; +import com.klp.perf.domain.PerfTemplateDimension; import com.klp.perf.mapper.PerfPositionTemplateMapper; +import com.klp.perf.mapper.PerfTemplateDimensionMapper; import com.klp.perf.service.IPerfPositionTemplateService; import java.util.List; import java.util.Map; import java.util.Collection; +import java.util.Collections; +import java.util.stream.Collectors; /** * 岗位绩效考核模板Service业务层处理 @@ -30,32 +35,62 @@ import java.util.Collection; public class PerfPositionTemplateServiceImpl implements IPerfPositionTemplateService { private final PerfPositionTemplateMapper baseMapper; + private final PerfTemplateDimensionMapper dimensionMapper; /** - * 查询岗位绩效考核模板 + * 查询岗位绩效考核模板(含维度明细) */ @Override public PerfPositionTemplateVo queryById(Long id){ - return baseMapper.selectVoById(id); + PerfPositionTemplateVo vo = baseMapper.selectVoById(id); + if (vo != null) { + LambdaQueryWrapper dimLqw = Wrappers.lambdaQuery(); + dimLqw.eq(PerfTemplateDimension::getTemplateId, id); + vo.setDimensionList(dimensionMapper.selectVoList(dimLqw)); + } + return vo; } /** - * 查询岗位绩效考核模板列表 + * 查询岗位绩效考核模板列表(含维度明细) */ @Override public TableDataInfo queryPageList(PerfPositionTemplateBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + attachDimensionList(result.getRecords()); return TableDataInfo.build(result); } /** - * 查询岗位绩效考核模板列表 + * 查询岗位绩效考核模板列表(含维度明细) */ @Override public List queryList(PerfPositionTemplateBo bo) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); - return baseMapper.selectVoList(lqw); + List list = baseMapper.selectVoList(lqw); + attachDimensionList(list); + return list; + } + + /** + * 批量填充维度明细到模板Vo列表 + */ + private void attachDimensionList(List voList) { + if (voList == null || voList.isEmpty()) { + return; + } + List templateIds = voList.stream() + .map(PerfPositionTemplateVo::getId) + .collect(Collectors.toList()); + LambdaQueryWrapper dimLqw = Wrappers.lambdaQuery(); + dimLqw.in(PerfTemplateDimension::getTemplateId, templateIds); + List allDimensions = dimensionMapper.selectVoList(dimLqw); + Map> dimMap = allDimensions.stream() + .collect(Collectors.groupingBy(PerfTemplateDimensionVo::getTemplateId)); + for (PerfPositionTemplateVo vo : voList) { + vo.setDimensionList(dimMap.getOrDefault(vo.getId(), Collections.emptyList())); + } } private LambdaQueryWrapper buildQueryWrapper(PerfPositionTemplateBo bo) { diff --git a/klp-perf/src/main/java/com/klp/perf/service/impl/PerfSalaryServiceImpl.java b/klp-perf/src/main/java/com/klp/perf/service/impl/PerfSalaryServiceImpl.java index d6d65bcc4..01991b73d 100644 --- a/klp-perf/src/main/java/com/klp/perf/service/impl/PerfSalaryServiceImpl.java +++ b/klp-perf/src/main/java/com/klp/perf/service/impl/PerfSalaryServiceImpl.java @@ -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.toolkit.Wrappers; import com.klp.common.utils.StringUtils; +import com.klp.domain.WmsEmployeeInfo; +import com.klp.mapper.WmsEmployeeInfoMapper; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import com.klp.perf.domain.bo.PerfSalaryBo; @@ -18,6 +20,8 @@ import com.klp.perf.service.IPerfSalaryService; import java.util.List; import java.util.Map; import java.util.Collection; +import java.util.function.Function; +import java.util.stream.Collectors; /** * 月度薪资计算记录Service业务层处理 @@ -30,9 +34,10 @@ import java.util.Collection; public class PerfSalaryServiceImpl implements IPerfSalaryService { private final PerfSalaryMapper baseMapper; + private final WmsEmployeeInfoMapper employeeMapper; /** - * 查询月度薪资计算记录 + * 查询月度薪资计算记录(含员工信息) */ @Override public PerfSalaryVo queryById(Long id){ @@ -40,22 +45,52 @@ public class PerfSalaryServiceImpl implements IPerfSalaryService { } /** - * 查询月度薪资计算记录列表 + * 查询月度薪资计算记录列表(含员工信息) */ @Override public TableDataInfo queryPageList(PerfSalaryBo bo, PageQuery pageQuery) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + attachEmployeeInfo(result.getRecords()); return TableDataInfo.build(result); } /** - * 查询月度薪资计算记录列表 + * 查询月度薪资计算记录列表(含员工信息) */ @Override public List queryList(PerfSalaryBo bo) { LambdaQueryWrapper lqw = buildQueryWrapper(bo); - return baseMapper.selectVoList(lqw); + List list = baseMapper.selectVoList(lqw); + attachEmployeeInfo(list); + return list; + } + + /** + * 批量填充员工简要信息 (避免 N+1 查询) + */ + private void attachEmployeeInfo(List voList) { + if (voList == null || voList.isEmpty()) { + return; + } + List employeeIds = voList.stream() + .map(PerfSalaryVo::getEmployeeId) + .filter(id -> id != null) + .distinct() + .collect(Collectors.toList()); + if (employeeIds.isEmpty()) { + return; + } + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.in(WmsEmployeeInfo::getInfoId, employeeIds); + List employees = employeeMapper.selectList(lqw); + Map empMap = employees.stream() + .collect(Collectors.toMap(WmsEmployeeInfo::getInfoId, Function.identity())); + for (PerfSalaryVo vo : voList) { + if (vo.getEmployeeId() != null) { + vo.setWmsEmployeeInfo(empMap.get(vo.getEmployeeId())); + } + } } private LambdaQueryWrapper buildQueryWrapper(PerfSalaryBo bo) { diff --git a/klp-perf/src/main/resources/mapper/perf/PerfEmployeeInfoMapper.xml b/klp-perf/src/main/resources/mapper/perf/PerfEmployeeInfoMapper.xml deleted file mode 100644 index 17bb24965..000000000 --- a/klp-perf/src/main/resources/mapper/perf/PerfEmployeeInfoMapper.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/klp-ui/src/router/index.js b/klp-ui/src/router/index.js index cbf559ee8..f2639818e 100644 --- a/klp-ui/src/router/index.js +++ b/klp-ui/src/router/index.js @@ -183,6 +183,33 @@ export const dynamicRoutes = [ } ] }, + // APS 排产独立页面(用于产需单跳转排产单) + { + path: '/aps/requirement', + component: Layout, + hidden: true, + children: [ + { + path: '', + component: () => import('@/views/wms/post/aps/requirement'), + name: 'ApsRequirement', + meta: { title: '产需单' } + } + ] + }, + { + path: '/aps/schedule', + component: Layout, + hidden: true, + children: [ + { + path: '', + component: () => import('@/views/wms/post/aps/schedule'), + name: 'ApsSchedule', + meta: { title: '排产单' } + } + ] + }, { path: '/system/dict-data', component: Layout, diff --git a/klp-ui/src/views/wms/post/aps/requirement.vue b/klp-ui/src/views/wms/post/aps/requirement.vue index d36e06b29..426f1255b 100644 --- a/klp-ui/src/views/wms/post/aps/requirement.vue +++ b/klp-ui/src/views/wms/post/aps/requirement.vue @@ -27,16 +27,23 @@
-
- {{ item.scheduleNo }} - {{ - statusMap[item.scheduleStatus] || '未知' }} -
-
- 生产日期:{{ item.prodDate || '-' }} 客户:{{ item.customerName || '-' }} 业务员:{{ item.businessUser || '-' }} -
-
- +
+
+
+ {{ item.scheduleNo }} + {{ + statusMap[item.scheduleStatus] || '未知' }} +
+
+ 生产日期:{{ item.prodDate || '-' }} 客户:{{ item.customerName || '-' }} 业务员:{{ item.businessUser || '-' }} +
+
+ +
+
+
+ 跳转排产 +
@@ -362,7 +369,7 @@
- +
@@ -382,6 +389,25 @@ 总数量:{{ bindPreviewTotalQty }} 吨 含税总额:{{ bindPreviewTotalAmount }}
+ +
+
+ 该订单已绑定以下产需单: +
+
+ + {{ rel.scheduleNo }} + {{ bindPreviewRelStatusMap[rel.scheduleStatus] || '' }} + +
+
@@ -471,6 +497,10 @@ export default { bindPreviewProductName: '', bindPreviewTotalQty: 0, bindPreviewTotalAmount: 0, + // 当前预览订单已绑定的产需单列表 + bindPreviewExistingRels: [], + // 产需单状态映射(用于展示绑定状态) + bindPreviewRelStatusMap: { 0: '草稿', 1: '待审核', 2: '已下达', 3: '已退回' }, // 排产明细 detailLoading: false, @@ -559,6 +589,18 @@ export default { this.getList() }, + // 跳转到排产单页面(路由跳转) + handleJumpToSchedule(item) { + this.$router.push({ + path: '/aps/schedule', + query: { + prodDate: item.prodDate || '', + scheduleNo: item.scheduleNo || '', + scheduleStatus: item.scheduleStatus + } + }) + }, + statusBadgeType(status) { return this.statusBadgeMap[status] || 'gray' }, @@ -738,6 +780,7 @@ export default { this.bindPreviewProductName = '' this.bindPreviewTotalQty = 0 this.bindPreviewTotalAmount = 0 + this.bindPreviewExistingRels = [] this.searchBindOrders() }, @@ -780,6 +823,29 @@ export default { this.bindPreviewTotalQty = 0 this.bindPreviewTotalAmount = 0 } + // 查询该订单已关联了哪些产需单 + this.bindPreviewExistingRels = [] + listRel({ orderId: order.orderId }).then(res => { + const rows = res.rows || [] + // 按 scheduleId 去重,并与当前已有的 reqList 匹配获取单号 + const seen = new Set() + const reqMap = new Map() + ;(this.reqList || []).forEach(r => reqMap.set(r.scheduleId, r)) + const unique = [] + rows.forEach(r => { + const key = r.scheduleId + if (!key || seen.has(key)) return + seen.add(key) + // 从已加载的 reqList 中找单号,找不到则不展示(已删除或不在当前页) + const match = reqMap.get(key) + if (match) { + unique.push({ ...r, scheduleNo: match.scheduleNo, scheduleStatus: match.scheduleStatus }) + } + }) + this.bindPreviewExistingRels = unique + }).catch(() => { + this.bindPreviewExistingRels = [] + }) }, confirmBind() { @@ -1038,6 +1104,31 @@ export default { transition: background 0.15s; } +.list-item-body { + display: flex; + align-items: stretch; + gap: 8px; +} + +.list-item-left { + flex: 1; + min-width: 0; +} + +.list-item-right { + display: flex; + align-items: center; + justify-content: center; + flex-shrink: 0; + padding-left: 4px; +} + +.item-actions { + display: flex; + gap: 8px; + margin-top: 4px; +} + .list-item:hover { background: $aps-silver-1; } @@ -1063,10 +1154,6 @@ export default { margin-bottom: 4px; } -.list-item .item-actions { - display: flex; - gap: 8px; -} // ====== 徽标 ====== .badge { diff --git a/klp-ui/src/views/wms/post/aps/schedule.vue b/klp-ui/src/views/wms/post/aps/schedule.vue index 4047323f8..a0f9a42a8 100644 --- a/klp-ui/src/views/wms/post/aps/schedule.vue +++ b/klp-ui/src/views/wms/post/aps/schedule.vue @@ -626,7 +626,7 @@
请为每条明细配置工序,所有明细配置完成后才能接收。
- + @@ -634,8 +634,8 @@