From 20f4b24546b218ae6441545bedf85fdf287dd427 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Thu, 9 Jul 2026 14:28:23 +0800 Subject: [PATCH 1/5] =?UTF-8?q?refactor(perf):=20=E5=B0=86=E5=91=98?= =?UTF-8?q?=E5=B7=A5=E7=BB=A9=E6=95=88=E8=96=AA=E8=B5=84=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E6=95=B4=E5=90=88=E5=88=B0WMS=E5=91=98=E5=B7=A5=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 删除独立的员工绩效薪资信息相关文件(接口、实体类、业务对象、控制器、映射器) - 在WMS员工信息实体中新增底薪、岗位绩效基数和岗位系数字段 - 在WMS员工信息业务对象中添加对应的薪资相关属性 - 更新数据库映射文件,增加薪资字段的映射关系 - 修改WMS员工服务实现,添加对新增薪资字段的查询条件支持 - 在WMS员工信息视图对象中增加薪资相关字段并配置Excel导出属性 --- .../PerfEmployeeInfoController.java | 99 --------------- .../com/klp/perf/domain/PerfEmployeeInfo.java | 66 ---------- .../perf/domain/bo/PerfEmployeeInfoBo.java | 67 ---------- .../perf/domain/vo/PerfEmployeeInfoVo.java | 78 ------------ .../perf/mapper/PerfEmployeeInfoMapper.java | 15 --- .../service/IPerfEmployeeInfoService.java | 49 -------- .../impl/PerfEmployeeInfoServiceImpl.java | 115 ------------------ .../mapper/perf/PerfEmployeeInfoMapper.xml | 25 ---- .../java/com/klp/domain/WmsEmployeeInfo.java | 13 ++ .../com/klp/domain/bo/WmsEmployeeInfoBo.java | 16 +++ .../com/klp/domain/vo/WmsEmployeeInfoVo.java | 19 +++ .../impl/WmsEmployeeInfoServiceImpl.java | 3 + .../mapper/klp/WmsEmployeeInfoMapper.xml | 3 + 13 files changed, 54 insertions(+), 514 deletions(-) delete mode 100644 klp-perf/src/main/java/com/klp/perf/controller/PerfEmployeeInfoController.java delete mode 100644 klp-perf/src/main/java/com/klp/perf/domain/PerfEmployeeInfo.java delete mode 100644 klp-perf/src/main/java/com/klp/perf/domain/bo/PerfEmployeeInfoBo.java delete mode 100644 klp-perf/src/main/java/com/klp/perf/domain/vo/PerfEmployeeInfoVo.java delete mode 100644 klp-perf/src/main/java/com/klp/perf/mapper/PerfEmployeeInfoMapper.java delete mode 100644 klp-perf/src/main/java/com/klp/perf/service/IPerfEmployeeInfoService.java delete mode 100644 klp-perf/src/main/java/com/klp/perf/service/impl/PerfEmployeeInfoServiceImpl.java delete mode 100644 klp-perf/src/main/resources/mapper/perf/PerfEmployeeInfoMapper.xml 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/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/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-wms/src/main/java/com/klp/domain/WmsEmployeeInfo.java b/klp-wms/src/main/java/com/klp/domain/WmsEmployeeInfo.java index 4875d1859..8d4e35d75 100644 --- a/klp-wms/src/main/java/com/klp/domain/WmsEmployeeInfo.java +++ b/klp-wms/src/main/java/com/klp/domain/WmsEmployeeInfo.java @@ -6,6 +6,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import java.util.Date; +import java.math.BigDecimal; import com.fasterxml.jackson.annotation.JsonFormat; /** @@ -86,6 +87,18 @@ public class WmsEmployeeInfo extends BaseEntity { * 社保类型(三险/五险) */ private String socialInsuranceType; + /** + * 底薪(元) + */ + private BigDecimal baseSalary; + /** + * 岗位绩效基数(元), 默认≈底薪×20% + */ + private BigDecimal perfBase; + /** + * 默认岗位系数(初始值,后续月度由绩效自动覆盖) + */ + private BigDecimal posCoeffDefault; /** * 逻辑删除标识:0=正常,1=已删 */ diff --git a/klp-wms/src/main/java/com/klp/domain/bo/WmsEmployeeInfoBo.java b/klp-wms/src/main/java/com/klp/domain/bo/WmsEmployeeInfoBo.java index bd259c6c6..2e8fc3f83 100644 --- a/klp-wms/src/main/java/com/klp/domain/bo/WmsEmployeeInfoBo.java +++ b/klp-wms/src/main/java/com/klp/domain/bo/WmsEmployeeInfoBo.java @@ -6,6 +6,7 @@ import lombok.EqualsAndHashCode; import javax.validation.constraints.*; import java.util.Date; +import java.math.BigDecimal; import com.fasterxml.jackson.annotation.JsonFormat; import org.springframework.format.annotation.DateTimeFormat; @@ -114,6 +115,21 @@ public class WmsEmployeeInfoBo extends BaseEntity { */ private String socialInsuranceType; + /** + * 底薪(元) + */ + private BigDecimal baseSalary; + + /** + * 岗位绩效基数(元), 默认≈底薪×20% + */ + private BigDecimal perfBase; + + /** + * 默认岗位系数(初始值,后续月度由绩效自动覆盖) + */ + private BigDecimal posCoeffDefault; + /** * 备注 */ diff --git a/klp-wms/src/main/java/com/klp/domain/vo/WmsEmployeeInfoVo.java b/klp-wms/src/main/java/com/klp/domain/vo/WmsEmployeeInfoVo.java index 392141374..2ef6e4685 100644 --- a/klp-wms/src/main/java/com/klp/domain/vo/WmsEmployeeInfoVo.java +++ b/klp-wms/src/main/java/com/klp/domain/vo/WmsEmployeeInfoVo.java @@ -1,6 +1,7 @@ package com.klp.domain.vo; import java.util.Date; +import java.math.BigDecimal; import com.fasterxml.jackson.annotation.JsonFormat; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; @@ -117,6 +118,24 @@ public class WmsEmployeeInfoVo { */ private String socialInsuranceType; + /** + * 底薪(元) + */ + @ExcelProperty(value = "底薪(元)") + private BigDecimal baseSalary; + + /** + * 岗位绩效基数(元), 默认≈底薪×20% + */ + @ExcelProperty(value = "岗位绩效基数(元)") + private BigDecimal perfBase; + + /** + * 默认岗位系数(初始值,后续月度由绩效自动覆盖) + */ + @ExcelProperty(value = "默认岗位系数") + private BigDecimal posCoeffDefault; + /** * 备注 */ diff --git a/klp-wms/src/main/java/com/klp/service/impl/WmsEmployeeInfoServiceImpl.java b/klp-wms/src/main/java/com/klp/service/impl/WmsEmployeeInfoServiceImpl.java index b7f5c8521..bca353ae4 100644 --- a/klp-wms/src/main/java/com/klp/service/impl/WmsEmployeeInfoServiceImpl.java +++ b/klp-wms/src/main/java/com/klp/service/impl/WmsEmployeeInfoServiceImpl.java @@ -81,6 +81,9 @@ public class WmsEmployeeInfoServiceImpl implements IWmsEmployeeInfoService { lqw.eq(StringUtils.isNotBlank(bo.getRelationship()), WmsEmployeeInfo::getRelationship, bo.getRelationship()); lqw.eq(StringUtils.isNotBlank(bo.getEmergencyContactPhone()), WmsEmployeeInfo::getEmergencyContactPhone, bo.getEmergencyContactPhone()); lqw.eq(StringUtils.isNotBlank(bo.getSocialInsuranceType()), WmsEmployeeInfo::getSocialInsuranceType, bo.getSocialInsuranceType()); + lqw.eq(bo.getBaseSalary() != null, WmsEmployeeInfo::getBaseSalary, bo.getBaseSalary()); + lqw.eq(bo.getPerfBase() != null, WmsEmployeeInfo::getPerfBase, bo.getPerfBase()); + lqw.eq(bo.getPosCoeffDefault() != null, WmsEmployeeInfo::getPosCoeffDefault, bo.getPosCoeffDefault()); // 是否离职 lqw.eq(bo.getIsLeave() != null, WmsEmployeeInfo::getIsLeave, bo.getIsLeave()); // 离职时间范围查询 diff --git a/klp-wms/src/main/resources/mapper/klp/WmsEmployeeInfoMapper.xml b/klp-wms/src/main/resources/mapper/klp/WmsEmployeeInfoMapper.xml index 305120f13..b5c66a4c6 100644 --- a/klp-wms/src/main/resources/mapper/klp/WmsEmployeeInfoMapper.xml +++ b/klp-wms/src/main/resources/mapper/klp/WmsEmployeeInfoMapper.xml @@ -21,6 +21,9 @@ + + + From c1a9d36199032d9eff5929f8738503748bd31661 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=96=87=E6=98=8A?= <15984991+wwh2328692301@user.noreply.gitee.com> Date: Thu, 9 Jul 2026 14:41:39 +0800 Subject: [PATCH 2/5] =?UTF-8?q?refactor(wms,mes):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=B5=81=E7=A8=8B=E8=8A=82=E7=82=B9=E9=85=8D=E7=BD=AE=E4=B8=8E?= =?UTF-8?q?=E6=B5=81=E7=A8=8B=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 移除生产流程中按工序绑定钢卷节点,调整流程走向 2. 重构检验流程节点与流程图,拆分检验类型与审批流程 3. 统一调整样式类定义与节点样式 --- klp-ui/src/views/wms/post/flow.vue | 53 +++++++++++++++++------------- 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/klp-ui/src/views/wms/post/flow.vue b/klp-ui/src/views/wms/post/flow.vue index 5bcb72160..1343ef01a 100644 --- a/klp-ui/src/views/wms/post/flow.vue +++ b/klp-ui/src/views/wms/post/flow.vue @@ -129,8 +129,7 @@ const NODE_EVENT_CONFIG = { { id: 'H', label: '选择工艺路线', handler: 'handleOpen', params: { componentPath: 'wms/post/aps/schedule' } }, { id: 'I', label: '自动生成排产项', handler: 'handleOpen', params: { componentPath: 'wms/post/aps/schedule' } }, { id: 'J', label: '已排产明细管理', handler: 'handleOpen', params: { componentPath: 'wms/post/aps/schedule' } }, - { id: 'K', label: '按工序绑定钢卷', handler: 'handleOpen', params: { componentPath: 'wms/post/aps/compare' } }, - { id: 'L', label: '执行生产', handler: 'handleOpen', params: { componentPath: 'wms/post/aps/schedule' } }, + { id: 'K', label: '执行生产', handler: 'handleOpen', params: { componentPath: 'wms/post/aps/schedule' } }, ], equipmentRepair: [ { id: 'A', label: '创建维修计划', handler: 'handleOpen', params: { componentPath: 'wms/post/eqp/index' } }, @@ -164,11 +163,14 @@ const NODE_EVENT_CONFIG = { inspection: [ { id: 'A', label: '维护检验方案模板', handler: 'handleOpen', params: { componentPath: 'mes/qc/template/index' } }, - { id: 'B', label: '取样/检验数据录入', handler: 'handleOpen', params: { componentPath: 'mes/qc/inspectionSample/index' } }, - { id: 'D', label: '常规检验录入', handler: 'handleOpen', params: { componentPath: 'mes/qc/inspectionSample/index' } }, + { id: 'B', label: '检验数据录入', handler: 'handleOpen', params: { componentPath: 'mes/qc/inspectionSample/index' } }, + { id: 'D', label: '化学检验数据', handler: 'handleOpen', params: { componentPath: 'mes/qc/inspectionSample/index' } }, { id: 'E', label: '拉伸检验(专项)', handler: 'handleOpen', params: { componentPath: 'mes/qc/inspectionTensile/index' } }, - { id: 'H', label: '生成质量证明书', handler: 'handleOpen', params: { componentPath: 'mes/qc/certificate/book' } }, - { id: 'I', label: '触发质量评审', handler: 'handleOpen', params: { componentPath: 'mes/qc/qualityReview/index' } }, + { id: 'F', label: '创建审批申请', handler: 'handleOpen', params: { componentPath: 'mes/qc/approval/index' } }, + { id: 'H', label: '审批中', handler: 'handleOpen', params: { componentPath: 'mes/qc/approval/index' } }, + { id: 'J', label: '填写检验数据', handler: 'handleOpen', params: { componentPath: 'mes/qc/approval/index' } }, + { id: 'M', label: '生成质量证明书', handler: 'handleOpen', params: { componentPath: 'mes/qc/certificate/book' } }, + { id: 'N', label: '触发质量评审', handler: 'handleOpen', params: { componentPath: 'mes/qc/qualityReview/index' } }, ], qualityReview: [ @@ -320,9 +322,8 @@ graph TD H --> I["自动生成排产项
按工序步骤分组"]:::p7 I --> J["已排产明细管理
按步骤查看/编辑
内联修改排产状态"]:::p7 - J --> K["按工序绑定钢卷
将现存钢卷绑定到
对应的排产明细"]:::p8 - K --> L["执行生产"]:::p9 - L --> M(["排产完结"]):::pend + J --> K["执行生产"]:::p8 + K --> L(["排产完结"]):::pend classDef p1 fill:#409eff,stroke:#337ecc,color:#fff,stroke-width:2px classDef p2 fill:#e6fffa,stroke:#13c2c2,color:#303133,stroke-width:2px @@ -332,7 +333,6 @@ graph TD classDef p6 fill:#fffbe6,stroke:#fadb14,color:#606266,stroke-width:2px classDef p7 fill:#fff0f6,stroke:#eb2f96,color:#303133,stroke-width:2px classDef p8 fill:#f6ffed,stroke:#52c41a,color:#303133,stroke-width:2px - classDef p9 fill:#f0f5ff,stroke:#597ef7,color:#303133,stroke-width:2px classDef dec fill:#f9f0ff,stroke:#722ed1,color:#303133,stroke-width:2px classDef pend fill:#dcf7e8,stroke:#52c41a,color:#303133,stroke-width:2px,rx:10,ry:10 linkStyle default stroke:#bfbfbf,stroke-width:2px @@ -427,25 +427,34 @@ graph TD inspection: ` graph TD - A["维护检验方案模板
定义检验项/单位/标准"]:::i1 - A --> B["取样/检验数据录入
选择方案模板
动态生成检验项表格"]:::i2 - B --> C{"检验项类型"}:::dec - C -->|常规项| D["常规检验录入
直接在模板表格
填写检测数据"]:::i3 - C -->|拉伸试验| E["拉伸检验(专项)
独立试验记录
管理明细数据"]:::i4 - D --> F["汇总检验结果"]:::i5 + A["维护检验方案模板
定义检验项目/单位/标准值"]:::i1 + A --> B["检验数据录入
选择方案模板
填写样品信息
录入检验结果"]:::i2 + B --> C{"检验类型"}:::dec + C -->|化学检验| D["化学检验数据
按模板动态生成
检验项表格并填值"]:::i3 + C -->|物理检验| E["拉伸检验(专项)
独立试验记录
管理明细数据"]:::i4 + D --> F["创建审批申请
关联检验记录
填写申请信息"]:::i5 E --> F - F --> G{"判定"}:::dec - G -->|合格| H["生成质量证明书
汇总全部检验数据"]:::i6 - G -->|不合格| I["触发质量评审
进入评审流程"]:::i7 - H --> J(["检验归档"]):::iend + F --> G{"审批流转"}:::dec + G -->|送审| H["审批中
待审批"]:::i6 + H --> I{"审批"}:::dec + I -->|通过| J["填写检验数据
录入详细检验结果
含判定"]:::i7 + I -->|驳回| K["退回修改
重新编辑后送审"]:::i8 + K --> F + J --> L{"判定"}:::dec + L -->|合格| M["生成质量证明书
管理/编辑/打印
支持化学/物理模板"]:::i9 + L -->|不合格| N["触发质量评审
进入评审流程"]:::i10 + M --> O(["检验归档"]):::iend classDef i1 fill:#409eff,stroke:#337ecc,color:#fff,stroke-width:2px classDef i2 fill:#e6fffa,stroke:#13c2c2,color:#303133,stroke-width:2px classDef i3 fill:#fff7e6,stroke:#fa8c16,color:#303133,stroke-width:2px classDef i4 fill:#f0f5ff,stroke:#597ef7,color:#303133,stroke-width:2px classDef i5 fill:#fffbe6,stroke:#fadb14,color:#303133,stroke-width:2px - classDef i6 fill:#f6ffed,stroke:#52c41a,color:#303133,stroke-width:2px - classDef i7 fill:#fff1f0,stroke:#f5222d,color:#303133,stroke-width:2px + classDef i6 fill:#e6f7ff,stroke:#1890ff,color:#303133,stroke-width:2px + classDef i7 fill:#f6ffed,stroke:#52c41a,color:#303133,stroke-width:2px + classDef i8 fill:#fff1f0,stroke:#f5222d,color:#303133,stroke-width:2px + classDef i9 fill:#f0f5ff,stroke:#597ef7,color:#303133,stroke-width:2px + classDef i10 fill:#fff1f0,stroke:#f5222d,color:#303133,stroke-width:2px classDef dec fill:#f9f0ff,stroke:#722ed1,color:#303133,stroke-width:2px classDef iend fill:#dcf7e8,stroke:#52c41a,color:#303133,stroke-width:2px,rx:10,ry:10 linkStyle default stroke:#bfbfbf,stroke-width:2px From 950d9cf614deec56cdde2bb5bf7118af4ee5833e Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Thu, 9 Jul 2026 15:00:01 +0800 Subject: [PATCH 3/5] =?UTF-8?q?feat(perf):=20=E6=9F=A5=E8=AF=A2=E5=B2=97?= =?UTF-8?q?=E4=BD=8D=E7=BB=A9=E6=95=88=E8=80=83=E6=A0=B8=E6=A8=A1=E6=9D=BF?= =?UTF-8?q?=E6=97=B6=E8=BF=94=E5=9B=9E=E7=BB=B4=E5=BA=A6=E6=98=8E=E7=BB=86?= =?UTF-8?q?=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加 PerfTemplateDimensionVo 和 PerfTemplateDimension 实体类引用 - 注入 PerfTemplateDimensionMapper 数据访问层实例 - 修改 queryById 方法查询模板详情时关联查询维度明细 - 修改 queryPageList 方法分页查询时批量附加维度明细数据 - 修改 queryList 方法列表查询时批量附加维度明细数据 - 新增 attachDimensionList 私有方法实现批量填充维度明细逻辑 - 在 PerfPositionTemplateVo 中新增 dimensionList 字段存储维度明细列表 - 更新方法注释明确标识查询操作包含维度明细信息 --- .../domain/vo/PerfPositionTemplateVo.java | 6 +++ .../impl/PerfPositionTemplateServiceImpl.java | 45 ++++++++++++++++--- 2 files changed, 46 insertions(+), 5 deletions(-) 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/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) { From 4b28eb7d4b2b2fe69961f369265f5df2188a6f96 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Thu, 9 Jul 2026 16:41:30 +0800 Subject: [PATCH 4/5] =?UTF-8?q?feat(perf):=20=E6=9F=A5=E8=AF=A2=E6=9C=88?= =?UTF-8?q?=E5=BA=A6=E8=96=AA=E8=B5=84=E8=AE=B0=E5=BD=95=E6=97=B6=E5=85=B3?= =?UTF-8?q?=E8=81=94=E5=91=98=E5=B7=A5=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 引入 WmsEmployeeInfo 和 WmsEmployeeInfoMapper 依赖 - 在 PerfSalaryVo 中添加 wmsEmployeeInfo 字段 - 实现 attachEmployeeInfo 方法批量填充员工信息 - 避免 N+1 查询问题,通过员工ID批量获取员工信息 - 更新查询方法以返回包含员工信息的完整数据 - 在 pom.xml 中添加 klp-wms 模块依赖 --- klp-perf/pom.xml | 4 ++ .../com/klp/perf/domain/vo/PerfSalaryVo.java | 6 ++- .../service/impl/PerfSalaryServiceImpl.java | 43 +++++++++++++++++-- 3 files changed, 48 insertions(+), 5 deletions(-) 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/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/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) { From e7d96e2c3d8138acb4c1c041c24d0f18f8e4f84b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=96=87=E6=98=8A?= <15984991+wwh2328692301@user.noreply.gitee.com> Date: Thu, 9 Jul 2026 17:15:24 +0800 Subject: [PATCH 5/5] =?UTF-8?q?feat(wms):=20=E6=96=B0=E5=A2=9EAPS=E6=8E=92?= =?UTF-8?q?=E4=BA=A7=E7=9B=B8=E5=85=B3=E9=A1=B5=E9=9D=A2=E5=8F=8A=E4=BA=A7?= =?UTF-8?q?=E9=9C=80=E5=8D=95=E8=B7=B3=E8=BD=AC=E6=8E=92=E4=BA=A7=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. 新增/aps/requirement和/aps/schedule路由页面 2. 实现产需单列表跳转排产单功能 3. 为排产页面添加参数接收与自动查询逻辑 4. 新增弹窗组件间传递APS页面参数的能力 5. 优化产需单列表UI布局与绑定状态展示 --- klp-ui/src/router/index.js | 27 ++++ klp-ui/src/views/wms/post/aps/requirement.vue | 117 +++++++++++++++--- klp-ui/src/views/wms/post/aps/schedule.vue | 50 +++++++- klp-ui/src/views/wms/post/flow.vue | 35 ++++++ 4 files changed, 213 insertions(+), 16 deletions(-) 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 cdc8fb3f8..b1784e73e 100644 --- a/klp-ui/src/views/wms/post/aps/schedule.vue +++ b/klp-ui/src/views/wms/post/aps/schedule.vue @@ -653,6 +653,13 @@ import ProcessSelect from '@/components/KLPService/ProcessSelect/index.vue' export default { name: 'ApsSchedule', components: { ProcessSelect }, + props: { + // 由 flow.vue 通过 switchApsPage 传入的参数 + apsParams: { + type: Object, + default: null + } + }, data() { const today = new Date() const y = today.getFullYear() @@ -726,8 +733,49 @@ export default { ) } }, - watch: {}, + watch: { + // 接收 flow.vue 传入的参数:设置日期并自动查询 + apsParams: { + handler(val) { + if (val && val.prodDate) { + this.queryDate = val.prodDate + } + if (val && val.scheduleStatus !== undefined) { + // 根据产需单状态自动切换 Tab + // 1=待审核 2=已接收 4=已排产 + const statusToTab = { 1: 'pending', 2: 'accepted', 4: 'scheduled' } + const tab = statusToTab[val.scheduleStatus] || 'pending' + this.activeTab = tab + } + this.$nextTick(() => { + this.handleQuery() + }) + }, + immediate: false + } + }, created() { + // 优先从路由参数获取(产需单点击"跳转排产"通过 $router.push 传参) + const query = this.$route.query + // 其次从 apsParams prop 获取(弹窗内由 flow.vue 切换组件传入) + const params = this.apsParams + + let hasExternal = false + if (query && query.prodDate) { + this.queryDate = query.prodDate + hasExternal = true + if (query.scheduleStatus !== undefined) { + const statusToTab = { 1: 'pending', 2: 'accepted', 4: 'scheduled' } + this.activeTab = statusToTab[Number(query.scheduleStatus)] || 'pending' + } + } else if (params && params.prodDate) { + this.queryDate = params.prodDate + hasExternal = true + if (params.scheduleStatus !== undefined) { + const statusToTab = { 1: 'pending', 2: 'accepted', 4: 'scheduled' } + this.activeTab = statusToTab[params.scheduleStatus] || 'pending' + } + } this.handleQuery() }, methods: { diff --git a/klp-ui/src/views/wms/post/flow.vue b/klp-ui/src/views/wms/post/flow.vue index 1343ef01a..db3ce6a13 100644 --- a/klp-ui/src/views/wms/post/flow.vue +++ b/klp-ui/src/views/wms/post/flow.vue @@ -44,6 +44,7 @@ v-if="dynamicComponent && !dialogLoading" :is="dynamicComponent" :key="dialogKey" + :aps-params="apsDialogParams" />
@@ -533,6 +534,8 @@ export default { dialogLoading: false, dynamicComponent: null, dialogKey: 0, + // APS 页面切换参数(传递给子组件) + apsDialogParams: null, } }, @@ -701,6 +704,7 @@ export default { this.dialogWidth = dialogWidth this.dialogLoading = true this.dynamicComponent = null + this.apsDialogParams = params || null this.resolveImport(componentPath) .then(module => { @@ -716,6 +720,36 @@ export default { }) }, + /** + * APS 页面间切换(由子组件调用 this.$parent.switchApsPage) + * @param {string} componentPath - 相对于 @/views/ 的路径,如 'wms/post/aps/schedule' + * @param {object} params - 传递给目标组件的参数 + * @param {string} title - 弹窗标题 + */ + switchApsPage(componentPath, params, title) { + if (!componentPath) { + this.$message.warning('组件路径不能为空') + return + } + + this.dialogLoading = true + this.dynamicComponent = null + this.apsDialogParams = params || null + if (title) this.dialogTitle = title + + this.resolveImport(componentPath) + .then(module => { + this.dynamicComponent = module.default || module + }) + .catch(err => { + console.error('[FlowChart] switchApsPage error:', err) + this.$message.error('组件加载失败: ' + (err.message || '未知错误')) + }) + .finally(() => { + this.dialogLoading = false + }) + }, + resolveImport(componentPath) { // 与 src/store/modules/permission.js 的 loadView 同款模式 // componentPath 相对于 @/views/,如 'crm/order/index' @@ -730,6 +764,7 @@ export default { handleDialogClosed() { this.dynamicComponent = null this.dialogKey++ + this.apsDialogParams = null }, }, }