From 9b3c39f28f4596e6c0c3a3700833696b9e5c2551 Mon Sep 17 00:00:00 2001
From: Joshi <3040996759@qq.com>
Date: Tue, 7 Jul 2026 15:24:11 +0800
Subject: [PATCH] =?UTF-8?q?feat(perf):=20=E6=B7=BB=E5=8A=A0=E7=BB=A9?=
=?UTF-8?q?=E6=95=88=E8=80=83=E6=A0=B8=E7=9B=B8=E5=85=B3=E6=9C=8D=E5=8A=A1?=
=?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=92=8C=E5=AE=9E=E4=BD=93=E7=B1=BB?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 创建了考核维度评分明细服务接口及实现类
- 添加了月度绩效考核记录服务接口及实现类
- 实现了绩效系数换算、车间考核参数配置等相关服务
- 定义了绩效考核相关的实体类和业务对象
- 创建了绩效考核控制器提供CRUD操作接口
- 配置了数据库映射文件和结果集映射
- 实现了数据校验和分页查询功能
---
klp-admin/pom.xml | 6 +
klp-perf/pom.xml | 28 +++
.../controller/PerfAppraisalController.java | 99 ++++++++
.../PerfAppraisalDetailController.java | 99 ++++++++
.../controller/PerfCoeffRangeController.java | 99 ++++++++
.../controller/PerfDeptConfigController.java | 99 ++++++++
.../PerfDeptItemConfigController.java | 99 ++++++++
.../controller/PerfDeptSummaryController.java | 99 ++++++++
.../PerfEmployeeInfoController.java | 99 ++++++++
.../PerfPositionTemplateController.java | 99 ++++++++
.../perf/controller/PerfSalaryController.java | 99 ++++++++
.../PerfTemplateDimensionController.java | 99 ++++++++
.../com/klp/perf/domain/PerfAppraisal.java | 92 ++++++++
.../klp/perf/domain/PerfAppraisalDetail.java | 86 +++++++
.../com/klp/perf/domain/PerfCoeffRange.java | 66 ++++++
.../com/klp/perf/domain/PerfDeptConfig.java | 83 +++++++
.../klp/perf/domain/PerfDeptItemConfig.java | 63 ++++++
.../com/klp/perf/domain/PerfDeptSummary.java | 102 +++++++++
.../com/klp/perf/domain/PerfEmployeeInfo.java | 66 ++++++
.../klp/perf/domain/PerfPositionTemplate.java | 53 +++++
.../java/com/klp/perf/domain/PerfSalary.java | 156 +++++++++++++
.../perf/domain/PerfTemplateDimension.java | 73 ++++++
.../klp/perf/domain/bo/PerfAppraisalBo.java | 99 ++++++++
.../perf/domain/bo/PerfAppraisalDetailBo.java | 92 ++++++++
.../klp/perf/domain/bo/PerfCoeffRangeBo.java | 67 ++++++
.../klp/perf/domain/bo/PerfDeptConfigBo.java | 94 ++++++++
.../perf/domain/bo/PerfDeptItemConfigBo.java | 63 ++++++
.../klp/perf/domain/bo/PerfDeptSummaryBo.java | 112 +++++++++
.../perf/domain/bo/PerfEmployeeInfoBo.java | 67 ++++++
.../domain/bo/PerfPositionTemplateBo.java | 51 +++++
.../com/klp/perf/domain/bo/PerfSalaryBo.java | 179 +++++++++++++++
.../domain/bo/PerfTemplateDimensionBo.java | 76 +++++++
.../perf/domain/vo/PerfAppraisalDetailVo.java | 108 +++++++++
.../klp/perf/domain/vo/PerfAppraisalVo.java | 116 ++++++++++
.../klp/perf/domain/vo/PerfCoeffRangeVo.java | 78 +++++++
.../klp/perf/domain/vo/PerfDeptConfigVo.java | 110 +++++++++
.../perf/domain/vo/PerfDeptItemConfigVo.java | 73 ++++++
.../klp/perf/domain/vo/PerfDeptSummaryVo.java | 132 +++++++++++
.../perf/domain/vo/PerfEmployeeInfoVo.java | 78 +++++++
.../domain/vo/PerfPositionTemplateVo.java | 59 +++++
.../com/klp/perf/domain/vo/PerfSalaryVo.java | 212 ++++++++++++++++++
.../domain/vo/PerfTemplateDimensionVo.java | 89 ++++++++
.../mapper/PerfAppraisalDetailMapper.java | 15 ++
.../klp/perf/mapper/PerfAppraisalMapper.java | 15 ++
.../klp/perf/mapper/PerfCoeffRangeMapper.java | 15 ++
.../klp/perf/mapper/PerfDeptConfigMapper.java | 15 ++
.../perf/mapper/PerfDeptItemConfigMapper.java | 15 ++
.../perf/mapper/PerfDeptSummaryMapper.java | 15 ++
.../perf/mapper/PerfEmployeeInfoMapper.java | 15 ++
.../mapper/PerfPositionTemplateMapper.java | 15 ++
.../com/klp/perf/mapper/PerfSalaryMapper.java | 15 ++
.../mapper/PerfTemplateDimensionMapper.java | 15 ++
.../service/IPerfAppraisalDetailService.java | 49 ++++
.../perf/service/IPerfAppraisalService.java | 49 ++++
.../perf/service/IPerfCoeffRangeService.java | 49 ++++
.../perf/service/IPerfDeptConfigService.java | 49 ++++
.../service/IPerfDeptItemConfigService.java | 49 ++++
.../perf/service/IPerfDeptSummaryService.java | 49 ++++
.../service/IPerfEmployeeInfoService.java | 49 ++++
.../service/IPerfPositionTemplateService.java | 49 ++++
.../klp/perf/service/IPerfSalaryService.java | 49 ++++
.../IPerfTemplateDimensionService.java | 49 ++++
.../impl/PerfAppraisalDetailServiceImpl.java | 120 ++++++++++
.../impl/PerfAppraisalServiceImpl.java | 121 ++++++++++
.../impl/PerfCoeffRangeServiceImpl.java | 115 ++++++++++
.../impl/PerfDeptConfigServiceImpl.java | 120 ++++++++++
.../impl/PerfDeptItemConfigServiceImpl.java | 114 ++++++++++
.../impl/PerfDeptSummaryServiceImpl.java | 124 ++++++++++
.../impl/PerfEmployeeInfoServiceImpl.java | 115 ++++++++++
.../impl/PerfPositionTemplateServiceImpl.java | 112 +++++++++
.../service/impl/PerfSalaryServiceImpl.java | 137 +++++++++++
.../PerfTemplateDimensionServiceImpl.java | 117 ++++++++++
.../mapper/perf/PerfAppraisalDetailMapper.xml | 30 +++
.../mapper/perf/PerfAppraisalMapper.xml | 31 +++
.../mapper/perf/PerfCoeffRangeMapper.xml | 25 +++
.../mapper/perf/PerfDeptConfigMapper.xml | 25 +++
.../mapper/perf/PerfDeptItemConfigMapper.xml | 24 ++
.../mapper/perf/PerfDeptSummaryMapper.xml | 34 +++
.../mapper/perf/PerfEmployeeInfoMapper.xml | 25 +++
.../perf/PerfPositionTemplateMapper.xml | 22 ++
.../mapper/perf/PerfSalaryMapper.xml | 47 ++++
.../perf/PerfTemplateDimensionMapper.xml | 27 +++
pom.xml | 8 +
83 files changed, 5952 insertions(+)
create mode 100644 klp-perf/pom.xml
create mode 100644 klp-perf/src/main/java/com/klp/perf/controller/PerfAppraisalController.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/controller/PerfAppraisalDetailController.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/controller/PerfCoeffRangeController.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/controller/PerfDeptConfigController.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/controller/PerfDeptItemConfigController.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/controller/PerfDeptSummaryController.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/controller/PerfEmployeeInfoController.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/controller/PerfPositionTemplateController.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/controller/PerfSalaryController.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/controller/PerfTemplateDimensionController.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/domain/PerfAppraisal.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/domain/PerfAppraisalDetail.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/domain/PerfCoeffRange.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/domain/PerfDeptConfig.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/domain/PerfDeptItemConfig.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/domain/PerfDeptSummary.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/domain/PerfEmployeeInfo.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/domain/PerfPositionTemplate.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/domain/PerfSalary.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/domain/PerfTemplateDimension.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/domain/bo/PerfAppraisalBo.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/domain/bo/PerfAppraisalDetailBo.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/domain/bo/PerfCoeffRangeBo.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/domain/bo/PerfDeptConfigBo.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/domain/bo/PerfDeptItemConfigBo.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/domain/bo/PerfDeptSummaryBo.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/domain/bo/PerfEmployeeInfoBo.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/domain/bo/PerfPositionTemplateBo.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/domain/bo/PerfSalaryBo.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/domain/bo/PerfTemplateDimensionBo.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/domain/vo/PerfAppraisalDetailVo.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/domain/vo/PerfAppraisalVo.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/domain/vo/PerfCoeffRangeVo.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/domain/vo/PerfDeptConfigVo.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/domain/vo/PerfDeptItemConfigVo.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/domain/vo/PerfDeptSummaryVo.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/domain/vo/PerfEmployeeInfoVo.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/domain/vo/PerfPositionTemplateVo.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/domain/vo/PerfSalaryVo.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/domain/vo/PerfTemplateDimensionVo.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/mapper/PerfAppraisalDetailMapper.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/mapper/PerfAppraisalMapper.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/mapper/PerfCoeffRangeMapper.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/mapper/PerfDeptConfigMapper.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/mapper/PerfDeptItemConfigMapper.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/mapper/PerfDeptSummaryMapper.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/mapper/PerfEmployeeInfoMapper.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/mapper/PerfPositionTemplateMapper.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/mapper/PerfSalaryMapper.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/mapper/PerfTemplateDimensionMapper.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/service/IPerfAppraisalDetailService.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/service/IPerfAppraisalService.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/service/IPerfCoeffRangeService.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/service/IPerfDeptConfigService.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/service/IPerfDeptItemConfigService.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/service/IPerfDeptSummaryService.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/service/IPerfEmployeeInfoService.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/service/IPerfPositionTemplateService.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/service/IPerfSalaryService.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/service/IPerfTemplateDimensionService.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/service/impl/PerfAppraisalDetailServiceImpl.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/service/impl/PerfAppraisalServiceImpl.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/service/impl/PerfCoeffRangeServiceImpl.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/service/impl/PerfDeptConfigServiceImpl.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/service/impl/PerfDeptItemConfigServiceImpl.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/service/impl/PerfDeptSummaryServiceImpl.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/service/impl/PerfEmployeeInfoServiceImpl.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/service/impl/PerfPositionTemplateServiceImpl.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/service/impl/PerfSalaryServiceImpl.java
create mode 100644 klp-perf/src/main/java/com/klp/perf/service/impl/PerfTemplateDimensionServiceImpl.java
create mode 100644 klp-perf/src/main/resources/mapper/perf/PerfAppraisalDetailMapper.xml
create mode 100644 klp-perf/src/main/resources/mapper/perf/PerfAppraisalMapper.xml
create mode 100644 klp-perf/src/main/resources/mapper/perf/PerfCoeffRangeMapper.xml
create mode 100644 klp-perf/src/main/resources/mapper/perf/PerfDeptConfigMapper.xml
create mode 100644 klp-perf/src/main/resources/mapper/perf/PerfDeptItemConfigMapper.xml
create mode 100644 klp-perf/src/main/resources/mapper/perf/PerfDeptSummaryMapper.xml
create mode 100644 klp-perf/src/main/resources/mapper/perf/PerfEmployeeInfoMapper.xml
create mode 100644 klp-perf/src/main/resources/mapper/perf/PerfPositionTemplateMapper.xml
create mode 100644 klp-perf/src/main/resources/mapper/perf/PerfSalaryMapper.xml
create mode 100644 klp-perf/src/main/resources/mapper/perf/PerfTemplateDimensionMapper.xml
diff --git a/klp-admin/pom.xml b/klp-admin/pom.xml
index 08c5aa7c2..676b77b58 100644
--- a/klp-admin/pom.xml
+++ b/klp-admin/pom.xml
@@ -146,6 +146,12 @@
klp-pltcm
+
+
+ com.klp
+ klp-perf
+
+
org.springframework.boot
spring-boot-starter-test
diff --git a/klp-perf/pom.xml b/klp-perf/pom.xml
new file mode 100644
index 000000000..383f73a92
--- /dev/null
+++ b/klp-perf/pom.xml
@@ -0,0 +1,28 @@
+
+
+
+ klp-oa
+ com.klp
+ 0.8.3
+
+ 4.0.0
+
+ klp-perf
+
+
+ 性能管理模块
+
+
+
+
+
+
+ com.klp
+ klp-common
+
+
+
+
+
diff --git a/klp-perf/src/main/java/com/klp/perf/controller/PerfAppraisalController.java b/klp-perf/src/main/java/com/klp/perf/controller/PerfAppraisalController.java
new file mode 100644
index 000000000..a613230b6
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/controller/PerfAppraisalController.java
@@ -0,0 +1,99 @@
+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.PerfAppraisalVo;
+import com.klp.perf.domain.bo.PerfAppraisalBo;
+import com.klp.perf.service.IPerfAppraisalService;
+import com.klp.common.core.page.TableDataInfo;
+
+/**
+ * 月度绩效考核记录
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/perf/appraisal")
+public class PerfAppraisalController extends BaseController {
+
+ private final IPerfAppraisalService iPerfAppraisalService;
+
+ /**
+ * 查询月度绩效考核记录列表
+ */
+ @GetMapping("/list")
+ public TableDataInfo list(PerfAppraisalBo bo, PageQuery pageQuery) {
+ return iPerfAppraisalService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出月度绩效考核记录列表
+ */
+ @Log(title = "月度绩效考核记录", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(PerfAppraisalBo bo, HttpServletResponse response) {
+ List list = iPerfAppraisalService.queryList(bo);
+ ExcelUtil.exportExcel(list, "月度绩效考核记录", PerfAppraisalVo.class, response);
+ }
+
+ /**
+ * 获取月度绩效考核记录详细信息
+ *
+ * @param id 主键
+ */
+ @GetMapping("/{id}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable String id) {
+ return R.ok(iPerfAppraisalService.queryById(id));
+ }
+
+ /**
+ * 新增月度绩效考核记录
+ */
+ @Log(title = "月度绩效考核记录", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody PerfAppraisalBo bo) {
+ return toAjax(iPerfAppraisalService.insertByBo(bo));
+ }
+
+ /**
+ * 修改月度绩效考核记录
+ */
+ @Log(title = "月度绩效考核记录", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody PerfAppraisalBo bo) {
+ return toAjax(iPerfAppraisalService.updateByBo(bo));
+ }
+
+ /**
+ * 删除月度绩效考核记录
+ *
+ * @param ids 主键串
+ */
+ @Log(title = "月度绩效考核记录", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable String[] ids) {
+ return toAjax(iPerfAppraisalService.deleteWithValidByIds(Arrays.asList(ids), true));
+ }
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/controller/PerfAppraisalDetailController.java b/klp-perf/src/main/java/com/klp/perf/controller/PerfAppraisalDetailController.java
new file mode 100644
index 000000000..8d227187e
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/controller/PerfAppraisalDetailController.java
@@ -0,0 +1,99 @@
+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.PerfAppraisalDetailVo;
+import com.klp.perf.domain.bo.PerfAppraisalDetailBo;
+import com.klp.perf.service.IPerfAppraisalDetailService;
+import com.klp.common.core.page.TableDataInfo;
+
+/**
+ * 考核维度评分明细
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/perf/appraisalDetail")
+public class PerfAppraisalDetailController extends BaseController {
+
+ private final IPerfAppraisalDetailService iPerfAppraisalDetailService;
+
+ /**
+ * 查询考核维度评分明细列表
+ */
+ @GetMapping("/list")
+ public TableDataInfo list(PerfAppraisalDetailBo bo, PageQuery pageQuery) {
+ return iPerfAppraisalDetailService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出考核维度评分明细列表
+ */
+ @Log(title = "考核维度评分明细", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(PerfAppraisalDetailBo bo, HttpServletResponse response) {
+ List list = iPerfAppraisalDetailService.queryList(bo);
+ ExcelUtil.exportExcel(list, "考核维度评分明细", PerfAppraisalDetailVo.class, response);
+ }
+
+ /**
+ * 获取考核维度评分明细详细信息
+ *
+ * @param id 主键
+ */
+ @GetMapping("/{id}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable String id) {
+ return R.ok(iPerfAppraisalDetailService.queryById(id));
+ }
+
+ /**
+ * 新增考核维度评分明细
+ */
+ @Log(title = "考核维度评分明细", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody PerfAppraisalDetailBo bo) {
+ return toAjax(iPerfAppraisalDetailService.insertByBo(bo));
+ }
+
+ /**
+ * 修改考核维度评分明细
+ */
+ @Log(title = "考核维度评分明细", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody PerfAppraisalDetailBo bo) {
+ return toAjax(iPerfAppraisalDetailService.updateByBo(bo));
+ }
+
+ /**
+ * 删除考核维度评分明细
+ *
+ * @param ids 主键串
+ */
+ @Log(title = "考核维度评分明细", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable String[] ids) {
+ return toAjax(iPerfAppraisalDetailService.deleteWithValidByIds(Arrays.asList(ids), true));
+ }
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/controller/PerfCoeffRangeController.java b/klp-perf/src/main/java/com/klp/perf/controller/PerfCoeffRangeController.java
new file mode 100644
index 000000000..6459736a2
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/controller/PerfCoeffRangeController.java
@@ -0,0 +1,99 @@
+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.PerfCoeffRangeVo;
+import com.klp.perf.domain.bo.PerfCoeffRangeBo;
+import com.klp.perf.service.IPerfCoeffRangeService;
+import com.klp.common.core.page.TableDataInfo;
+
+/**
+ * 绩效系数换算
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/perf/coeffRange")
+public class PerfCoeffRangeController extends BaseController {
+
+ private final IPerfCoeffRangeService iPerfCoeffRangeService;
+
+ /**
+ * 查询绩效系数换算列表
+ */
+ @GetMapping("/list")
+ public TableDataInfo list(PerfCoeffRangeBo bo, PageQuery pageQuery) {
+ return iPerfCoeffRangeService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出绩效系数换算列表
+ */
+ @Log(title = "绩效系数换算", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(PerfCoeffRangeBo bo, HttpServletResponse response) {
+ List list = iPerfCoeffRangeService.queryList(bo);
+ ExcelUtil.exportExcel(list, "绩效系数换算", PerfCoeffRangeVo.class, response);
+ }
+
+ /**
+ * 获取绩效系数换算详细信息
+ *
+ * @param id 主键
+ */
+ @GetMapping("/{id}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable String id) {
+ return R.ok(iPerfCoeffRangeService.queryById(id));
+ }
+
+ /**
+ * 新增绩效系数换算
+ */
+ @Log(title = "绩效系数换算", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody PerfCoeffRangeBo bo) {
+ return toAjax(iPerfCoeffRangeService.insertByBo(bo));
+ }
+
+ /**
+ * 修改绩效系数换算
+ */
+ @Log(title = "绩效系数换算", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody PerfCoeffRangeBo bo) {
+ return toAjax(iPerfCoeffRangeService.updateByBo(bo));
+ }
+
+ /**
+ * 删除绩效系数换算
+ *
+ * @param ids 主键串
+ */
+ @Log(title = "绩效系数换算", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable String[] ids) {
+ return toAjax(iPerfCoeffRangeService.deleteWithValidByIds(Arrays.asList(ids), true));
+ }
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/controller/PerfDeptConfigController.java b/klp-perf/src/main/java/com/klp/perf/controller/PerfDeptConfigController.java
new file mode 100644
index 000000000..36171783a
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/controller/PerfDeptConfigController.java
@@ -0,0 +1,99 @@
+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.PerfDeptConfigVo;
+import com.klp.perf.domain.bo.PerfDeptConfigBo;
+import com.klp.perf.service.IPerfDeptConfigService;
+import com.klp.common.core.page.TableDataInfo;
+
+/**
+ * 车间考核参数配置
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/perf/deptConfig")
+public class PerfDeptConfigController extends BaseController {
+
+ private final IPerfDeptConfigService iPerfDeptConfigService;
+
+ /**
+ * 查询车间考核参数配置列表
+ */
+ @GetMapping("/list")
+ public TableDataInfo list(PerfDeptConfigBo bo, PageQuery pageQuery) {
+ return iPerfDeptConfigService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出车间考核参数配置列表
+ */
+ @Log(title = "车间考核参数配置", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(PerfDeptConfigBo bo, HttpServletResponse response) {
+ List list = iPerfDeptConfigService.queryList(bo);
+ ExcelUtil.exportExcel(list, "车间考核参数配置", PerfDeptConfigVo.class, response);
+ }
+
+ /**
+ * 获取车间考核参数配置详细信息
+ *
+ * @param id 主键
+ */
+ @GetMapping("/{id}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable String id) {
+ return R.ok(iPerfDeptConfigService.queryById(id));
+ }
+
+ /**
+ * 新增车间考核参数配置
+ */
+ @Log(title = "车间考核参数配置", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody PerfDeptConfigBo bo) {
+ return toAjax(iPerfDeptConfigService.insertByBo(bo));
+ }
+
+ /**
+ * 修改车间考核参数配置
+ */
+ @Log(title = "车间考核参数配置", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody PerfDeptConfigBo bo) {
+ return toAjax(iPerfDeptConfigService.updateByBo(bo));
+ }
+
+ /**
+ * 删除车间考核参数配置
+ *
+ * @param ids 主键串
+ */
+ @Log(title = "车间考核参数配置", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable String[] ids) {
+ return toAjax(iPerfDeptConfigService.deleteWithValidByIds(Arrays.asList(ids), true));
+ }
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/controller/PerfDeptItemConfigController.java b/klp-perf/src/main/java/com/klp/perf/controller/PerfDeptItemConfigController.java
new file mode 100644
index 000000000..7096cea61
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/controller/PerfDeptItemConfigController.java
@@ -0,0 +1,99 @@
+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.PerfDeptItemConfigVo;
+import com.klp.perf.domain.bo.PerfDeptItemConfigBo;
+import com.klp.perf.service.IPerfDeptItemConfigService;
+import com.klp.common.core.page.TableDataInfo;
+
+/**
+ * 车间扣款/奖励项目配置
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/perf/deptItemConfig")
+public class PerfDeptItemConfigController extends BaseController {
+
+ private final IPerfDeptItemConfigService iPerfDeptItemConfigService;
+
+ /**
+ * 查询车间扣款/奖励项目配置列表
+ */
+ @GetMapping("/list")
+ public TableDataInfo list(PerfDeptItemConfigBo bo, PageQuery pageQuery) {
+ return iPerfDeptItemConfigService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出车间扣款/奖励项目配置列表
+ */
+ @Log(title = "车间扣款/奖励项目配置", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(PerfDeptItemConfigBo bo, HttpServletResponse response) {
+ List list = iPerfDeptItemConfigService.queryList(bo);
+ ExcelUtil.exportExcel(list, "车间扣款/奖励项目配置", PerfDeptItemConfigVo.class, response);
+ }
+
+ /**
+ * 获取车间扣款/奖励项目配置详细信息
+ *
+ * @param id 主键
+ */
+ @GetMapping("/{id}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable String id) {
+ return R.ok(iPerfDeptItemConfigService.queryById(id));
+ }
+
+ /**
+ * 新增车间扣款/奖励项目配置
+ */
+ @Log(title = "车间扣款/奖励项目配置", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody PerfDeptItemConfigBo bo) {
+ return toAjax(iPerfDeptItemConfigService.insertByBo(bo));
+ }
+
+ /**
+ * 修改车间扣款/奖励项目配置
+ */
+ @Log(title = "车间扣款/奖励项目配置", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody PerfDeptItemConfigBo bo) {
+ return toAjax(iPerfDeptItemConfigService.updateByBo(bo));
+ }
+
+ /**
+ * 删除车间扣款/奖励项目配置
+ *
+ * @param ids 主键串
+ */
+ @Log(title = "车间扣款/奖励项目配置", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable String[] ids) {
+ return toAjax(iPerfDeptItemConfigService.deleteWithValidByIds(Arrays.asList(ids), true));
+ }
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/controller/PerfDeptSummaryController.java b/klp-perf/src/main/java/com/klp/perf/controller/PerfDeptSummaryController.java
new file mode 100644
index 000000000..75a89445e
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/controller/PerfDeptSummaryController.java
@@ -0,0 +1,99 @@
+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.PerfDeptSummaryVo;
+import com.klp.perf.domain.bo.PerfDeptSummaryBo;
+import com.klp.perf.service.IPerfDeptSummaryService;
+import com.klp.common.core.page.TableDataInfo;
+
+/**
+ * 车间月度汇总
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/perf/deptSummary")
+public class PerfDeptSummaryController extends BaseController {
+
+ private final IPerfDeptSummaryService iPerfDeptSummaryService;
+
+ /**
+ * 查询车间月度汇总列表
+ */
+ @GetMapping("/list")
+ public TableDataInfo list(PerfDeptSummaryBo bo, PageQuery pageQuery) {
+ return iPerfDeptSummaryService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出车间月度汇总列表
+ */
+ @Log(title = "车间月度汇总", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(PerfDeptSummaryBo bo, HttpServletResponse response) {
+ List list = iPerfDeptSummaryService.queryList(bo);
+ ExcelUtil.exportExcel(list, "车间月度汇总", PerfDeptSummaryVo.class, response);
+ }
+
+ /**
+ * 获取车间月度汇总详细信息
+ *
+ * @param id 主键
+ */
+ @GetMapping("/{id}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable String id) {
+ return R.ok(iPerfDeptSummaryService.queryById(id));
+ }
+
+ /**
+ * 新增车间月度汇总
+ */
+ @Log(title = "车间月度汇总", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody PerfDeptSummaryBo bo) {
+ return toAjax(iPerfDeptSummaryService.insertByBo(bo));
+ }
+
+ /**
+ * 修改车间月度汇总
+ */
+ @Log(title = "车间月度汇总", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody PerfDeptSummaryBo bo) {
+ return toAjax(iPerfDeptSummaryService.updateByBo(bo));
+ }
+
+ /**
+ * 删除车间月度汇总
+ *
+ * @param ids 主键串
+ */
+ @Log(title = "车间月度汇总", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable String[] ids) {
+ return toAjax(iPerfDeptSummaryService.deleteWithValidByIds(Arrays.asList(ids), true));
+ }
+}
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
new file mode 100644
index 000000000..c627f99fe
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/controller/PerfEmployeeInfoController.java
@@ -0,0 +1,99 @@
+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 String 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 String[] ids) {
+ return toAjax(iPerfEmployeeInfoService.deleteWithValidByIds(Arrays.asList(ids), true));
+ }
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/controller/PerfPositionTemplateController.java b/klp-perf/src/main/java/com/klp/perf/controller/PerfPositionTemplateController.java
new file mode 100644
index 000000000..604ce080a
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/controller/PerfPositionTemplateController.java
@@ -0,0 +1,99 @@
+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.PerfPositionTemplateVo;
+import com.klp.perf.domain.bo.PerfPositionTemplateBo;
+import com.klp.perf.service.IPerfPositionTemplateService;
+import com.klp.common.core.page.TableDataInfo;
+
+/**
+ * 岗位绩效考核模板
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/perf/positionTemplate")
+public class PerfPositionTemplateController extends BaseController {
+
+ private final IPerfPositionTemplateService iPerfPositionTemplateService;
+
+ /**
+ * 查询岗位绩效考核模板列表
+ */
+ @GetMapping("/list")
+ public TableDataInfo list(PerfPositionTemplateBo bo, PageQuery pageQuery) {
+ return iPerfPositionTemplateService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出岗位绩效考核模板列表
+ */
+ @Log(title = "岗位绩效考核模板", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(PerfPositionTemplateBo bo, HttpServletResponse response) {
+ List list = iPerfPositionTemplateService.queryList(bo);
+ ExcelUtil.exportExcel(list, "岗位绩效考核模板", PerfPositionTemplateVo.class, response);
+ }
+
+ /**
+ * 获取岗位绩效考核模板详细信息
+ *
+ * @param id 主键
+ */
+ @GetMapping("/{id}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable String id) {
+ return R.ok(iPerfPositionTemplateService.queryById(id));
+ }
+
+ /**
+ * 新增岗位绩效考核模板
+ */
+ @Log(title = "岗位绩效考核模板", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody PerfPositionTemplateBo bo) {
+ return toAjax(iPerfPositionTemplateService.insertByBo(bo));
+ }
+
+ /**
+ * 修改岗位绩效考核模板
+ */
+ @Log(title = "岗位绩效考核模板", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody PerfPositionTemplateBo bo) {
+ return toAjax(iPerfPositionTemplateService.updateByBo(bo));
+ }
+
+ /**
+ * 删除岗位绩效考核模板
+ *
+ * @param ids 主键串
+ */
+ @Log(title = "岗位绩效考核模板", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable String[] ids) {
+ return toAjax(iPerfPositionTemplateService.deleteWithValidByIds(Arrays.asList(ids), true));
+ }
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/controller/PerfSalaryController.java b/klp-perf/src/main/java/com/klp/perf/controller/PerfSalaryController.java
new file mode 100644
index 000000000..63cf97931
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/controller/PerfSalaryController.java
@@ -0,0 +1,99 @@
+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.PerfSalaryVo;
+import com.klp.perf.domain.bo.PerfSalaryBo;
+import com.klp.perf.service.IPerfSalaryService;
+import com.klp.common.core.page.TableDataInfo;
+
+/**
+ * 月度薪资计算记录
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/perf/salary")
+public class PerfSalaryController extends BaseController {
+
+ private final IPerfSalaryService iPerfSalaryService;
+
+ /**
+ * 查询月度薪资计算记录列表
+ */
+ @GetMapping("/list")
+ public TableDataInfo list(PerfSalaryBo bo, PageQuery pageQuery) {
+ return iPerfSalaryService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出月度薪资计算记录列表
+ */
+ @Log(title = "月度薪资计算记录", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(PerfSalaryBo bo, HttpServletResponse response) {
+ List list = iPerfSalaryService.queryList(bo);
+ ExcelUtil.exportExcel(list, "月度薪资计算记录", PerfSalaryVo.class, response);
+ }
+
+ /**
+ * 获取月度薪资计算记录详细信息
+ *
+ * @param id 主键
+ */
+ @GetMapping("/{id}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable String id) {
+ return R.ok(iPerfSalaryService.queryById(id));
+ }
+
+ /**
+ * 新增月度薪资计算记录
+ */
+ @Log(title = "月度薪资计算记录", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody PerfSalaryBo bo) {
+ return toAjax(iPerfSalaryService.insertByBo(bo));
+ }
+
+ /**
+ * 修改月度薪资计算记录
+ */
+ @Log(title = "月度薪资计算记录", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody PerfSalaryBo bo) {
+ return toAjax(iPerfSalaryService.updateByBo(bo));
+ }
+
+ /**
+ * 删除月度薪资计算记录
+ *
+ * @param ids 主键串
+ */
+ @Log(title = "月度薪资计算记录", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable String[] ids) {
+ return toAjax(iPerfSalaryService.deleteWithValidByIds(Arrays.asList(ids), true));
+ }
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/controller/PerfTemplateDimensionController.java b/klp-perf/src/main/java/com/klp/perf/controller/PerfTemplateDimensionController.java
new file mode 100644
index 000000000..ef243af19
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/controller/PerfTemplateDimensionController.java
@@ -0,0 +1,99 @@
+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.PerfTemplateDimensionVo;
+import com.klp.perf.domain.bo.PerfTemplateDimensionBo;
+import com.klp.perf.service.IPerfTemplateDimensionService;
+import com.klp.common.core.page.TableDataInfo;
+
+/**
+ * 考核维度明细
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/perf/templateDimension")
+public class PerfTemplateDimensionController extends BaseController {
+
+ private final IPerfTemplateDimensionService iPerfTemplateDimensionService;
+
+ /**
+ * 查询考核维度明细列表
+ */
+ @GetMapping("/list")
+ public TableDataInfo list(PerfTemplateDimensionBo bo, PageQuery pageQuery) {
+ return iPerfTemplateDimensionService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出考核维度明细列表
+ */
+ @Log(title = "考核维度明细", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(PerfTemplateDimensionBo bo, HttpServletResponse response) {
+ List list = iPerfTemplateDimensionService.queryList(bo);
+ ExcelUtil.exportExcel(list, "考核维度明细", PerfTemplateDimensionVo.class, response);
+ }
+
+ /**
+ * 获取考核维度明细详细信息
+ *
+ * @param id 主键
+ */
+ @GetMapping("/{id}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable String id) {
+ return R.ok(iPerfTemplateDimensionService.queryById(id));
+ }
+
+ /**
+ * 新增考核维度明细
+ */
+ @Log(title = "考核维度明细", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody PerfTemplateDimensionBo bo) {
+ return toAjax(iPerfTemplateDimensionService.insertByBo(bo));
+ }
+
+ /**
+ * 修改考核维度明细
+ */
+ @Log(title = "考核维度明细", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody PerfTemplateDimensionBo bo) {
+ return toAjax(iPerfTemplateDimensionService.updateByBo(bo));
+ }
+
+ /**
+ * 删除考核维度明细
+ *
+ * @param ids 主键串
+ */
+ @Log(title = "考核维度明细", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable String[] ids) {
+ return toAjax(iPerfTemplateDimensionService.deleteWithValidByIds(Arrays.asList(ids), true));
+ }
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/domain/PerfAppraisal.java b/klp-perf/src/main/java/com/klp/perf/domain/PerfAppraisal.java
new file mode 100644
index 000000000..6315adb6e
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/domain/PerfAppraisal.java
@@ -0,0 +1,92 @@
+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;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+/**
+ * 月度绩效考核记录对象 perf_appraisal
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("perf_appraisal")
+public class PerfAppraisal extends BaseEntity {
+
+ private static final long serialVersionUID=1L;
+
+ /**
+ *
+ */
+ @TableId(value = "id")
+ private String id;
+ /**
+ * 关联现有员工表主键
+ */
+ private String employeeId;
+ /**
+ * 关联 wms_dept.id
+ */
+ private String deptId;
+ /**
+ * 关联 perf_position_template.id (当月使用的模板)
+ */
+ private String templateId;
+ /**
+ * 考核周期 YYYY-MM
+ */
+ private String period;
+ /**
+ * 加权得分 = SUM(维度得分)
+ */
+ private BigDecimal weightedScore;
+ /**
+ * 总加分
+ */
+ private BigDecimal bonusScore;
+ /**
+ * 总扣分
+ */
+ private BigDecimal penaltyScore;
+ /**
+ * 最终得分 = MIN(120, 加权得分+加分-扣分)
+ */
+ private BigDecimal finalScore;
+ /**
+ * 评级 S/A/B/C/D
+ */
+ private String grade;
+ /**
+ * 绩效系数(线性插值换算,自动同步到岗位系数)
+ */
+ private BigDecimal perfCoeff;
+ /**
+ * 0=草稿 1=已确认 2=已归档
+ */
+ private Long status;
+ /**
+ *
+ */
+ private Date confirmedAt;
+ /**
+ * 确认人
+ */
+ private String confirmedBy;
+ /**
+ * 删除标志(0=正常,1=已删除)
+ */
+ @TableLogic
+ private Integer delFlag;
+ /**
+ * 备注
+ */
+ private String remark;
+
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/domain/PerfAppraisalDetail.java b/klp-perf/src/main/java/com/klp/perf/domain/PerfAppraisalDetail.java
new file mode 100644
index 000000000..d1e57b7c4
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/domain/PerfAppraisalDetail.java
@@ -0,0 +1,86 @@
+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_appraisal_detail
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("perf_appraisal_detail")
+public class PerfAppraisalDetail extends BaseEntity {
+
+ private static final long serialVersionUID=1L;
+
+ /**
+ *
+ */
+ @TableId(value = "id")
+ private String id;
+ /**
+ * 关联 perf_appraisal.id
+ */
+ private String appraisalId;
+ /**
+ * 关联 perf_template_dimension.id
+ */
+ private String dimensionId;
+ /**
+ * 序号(从模板快照)
+ */
+ private String seq;
+ /**
+ * 维度名称(从模板快照)
+ */
+ private String dimName;
+ /**
+ * 权重(从模板快照)
+ */
+ private String weight;
+ /**
+ * 目标值(可覆盖模板默认值)
+ */
+ private String targetValue;
+ /**
+ * 实际值(考核人填写)
+ */
+ private String actualValue;
+ /**
+ * 维度得分(公式计算)
+ */
+ private BigDecimal dimScore;
+ /**
+ * 本维度额外加分
+ */
+ private BigDecimal bonus;
+ /**
+ * 本维度额外扣分
+ */
+ private BigDecimal penalty;
+ /**
+ * 评分公式(从模板快照)
+ */
+ private String scoreFormula;
+ /**
+ * 评分规则(从模板快照)
+ */
+ private String scoreRule;
+ /**
+ * 删除标志(0=正常,1=已删除)
+ */
+ @TableLogic
+ private Integer delFlag;
+ /**
+ * 备注
+ */
+ private String remark;
+
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/domain/PerfCoeffRange.java b/klp-perf/src/main/java/com/klp/perf/domain/PerfCoeffRange.java
new file mode 100644
index 000000000..f9e29d531
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/domain/PerfCoeffRange.java
@@ -0,0 +1,66 @@
+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_coeff_range
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("perf_coeff_range")
+public class PerfCoeffRange extends BaseEntity {
+
+ private static final long serialVersionUID=1L;
+
+ /**
+ * 主键
+ */
+ @TableId(value = "id")
+ private String id;
+ /**
+ * 等级标识 S/A/B/C/D
+ */
+ private String grade;
+ /**
+ * 等级名称 卓越/优秀/合格/待改进/不合格
+ */
+ private String gradeLabel;
+ /**
+ * 得分下限(含)
+ */
+ private BigDecimal scoreMin;
+ /**
+ * 得分上限(含)
+ */
+ private BigDecimal scoreMax;
+ /**
+ * 最低绩效系数
+ */
+ private BigDecimal coeffMin;
+ /**
+ * 最高绩效系数
+ */
+ private BigDecimal coeffMax;
+ /**
+ * 排序(高→低)
+ */
+ private Long sortOrder;
+ /**
+ * 删除标志(0=正常,1=已删除)
+ */
+ @TableLogic
+ private Integer delFlag;
+ /**
+ * 备注
+ */
+ private String remark;
+
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/domain/PerfDeptConfig.java b/klp-perf/src/main/java/com/klp/perf/domain/PerfDeptConfig.java
new file mode 100644
index 000000000..4f63b60ac
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/domain/PerfDeptConfig.java
@@ -0,0 +1,83 @@
+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;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+/**
+ * 车间考核参数配置对象 perf_dept_config
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("perf_dept_config")
+public class PerfDeptConfig extends BaseEntity {
+
+ private static final long serialVersionUID=1L;
+
+ /**
+ *
+ */
+ @TableId(value = "id")
+ private String id;
+ /**
+ * 关联 wms_dept.id
+ */
+ private String deptId;
+ /**
+ * 月产量目标(吨) 或 月产长度目标(m)
+ */
+ private BigDecimal monthlyProductionTarget;
+ /**
+ * 产量单位: 吨 / m
+ */
+ private String productionUnit;
+ /**
+ * 绩效吨钢(元) 或 绩效米钢(元)
+ */
+ private BigDecimal perfUnitPrice;
+ /**
+ * 生产班数
+ */
+ private Long productionShifts;
+ /**
+ * 停机保底班数
+ */
+ private Long guaranteedShifts;
+ /**
+ * 车间系数(默认1.0)
+ */
+ private BigDecimal deptCoeff;
+ /**
+ * 薪资模式: 0=普通模式 1=保底模式(hasBaoSalary)
+ */
+ private Long salaryMode;
+ /**
+ * 保底薪资除数(底薪÷60=保底每班金额)
+ */
+ private Long baseDivisor;
+ /**
+ * 月份
+ */
+ private Date month;
+ /**
+ *
+ */
+ private String remark;
+ /**
+ *
+ */
+ private Date createdAt;
+ /**
+ *
+ */
+ private Date updatedAt;
+
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/domain/PerfDeptItemConfig.java b/klp-perf/src/main/java/com/klp/perf/domain/PerfDeptItemConfig.java
new file mode 100644
index 000000000..85309d310
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/domain/PerfDeptItemConfig.java
@@ -0,0 +1,63 @@
+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.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+/**
+ * 车间扣款/奖励项目配置对象 perf_dept_item_config
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("perf_dept_item_config")
+public class PerfDeptItemConfig extends BaseEntity {
+
+ private static final long serialVersionUID=1L;
+
+ /**
+ *
+ */
+ @TableId(value = "id")
+ private String id;
+ /**
+ * 关联 wms_dept.id
+ */
+ private String deptId;
+ /**
+ * 类型: 1=扣款项目 2=奖励项目
+ */
+ private Long itemType;
+ /**
+ * 项目名称 如:质量扣款/节能奖励
+ */
+ private String itemName;
+ /**
+ *
+ */
+ private Long sortOrder;
+ /**
+ * 月份
+ */
+ private Date month;
+ /**
+ *
+ */
+ private Long isEnabled;
+ /**
+ * 删除标志(0=正常,1=已删除)
+ */
+ @TableLogic
+ private Integer delFlag;
+ /**
+ * 备注
+ */
+ private String remark;
+
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/domain/PerfDeptSummary.java b/klp-perf/src/main/java/com/klp/perf/domain/PerfDeptSummary.java
new file mode 100644
index 000000000..9d1b2b39e
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/domain/PerfDeptSummary.java
@@ -0,0 +1,102 @@
+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_dept_summary
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("perf_dept_summary")
+public class PerfDeptSummary extends BaseEntity {
+
+ private static final long serialVersionUID=1L;
+
+ /**
+ *
+ */
+ @TableId(value = "id")
+ private String id;
+ /**
+ * 关联 wms_dept.id
+ */
+ private String deptId;
+ /**
+ * 周期 YYYY-MM
+ */
+ private String period;
+ /**
+ * 总人数
+ */
+ private Long totalEmployees;
+ /**
+ * 系数总计(所有人员总系数之和)
+ */
+ private BigDecimal totalCoeffSum;
+ /**
+ * 平均考核得分
+ */
+ private BigDecimal avgPerfScore;
+ /**
+ * 平均绩效系数
+ */
+ private BigDecimal avgPerfCoeff;
+ /**
+ * 底薪合计
+ */
+ private BigDecimal totalBaseSalary;
+ /**
+ * 月度绩效工资合计
+ */
+ private BigDecimal totalPerfWage;
+ /**
+ * 扣款合计
+ */
+ private BigDecimal totalDeductions;
+ /**
+ * 奖励合计
+ */
+ private BigDecimal totalBonuses;
+ /**
+ * 其他合计
+ */
+ private BigDecimal totalOther;
+ /**
+ * 实领薪资合计
+ */
+ private BigDecimal totalActualSalary;
+ /**
+ * 人均实领薪资
+ */
+ private BigDecimal avgActualSalary;
+ /**
+ * 当月实际产量
+ */
+ private BigDecimal monthlyProduction;
+ /**
+ * 系数单价(自动计算) = 月产量×绩效吨钢/系数总计
+ */
+ private BigDecimal unitPrice;
+ /**
+ * 0=草稿 1=已确认
+ */
+ private Long status;
+ /**
+ * 删除标志(0=正常,1=已删除)
+ */
+ @TableLogic
+ private Integer delFlag;
+ /**
+ * 备注
+ */
+ private String remark;
+
+}
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
new file mode 100644
index 000000000..63a16aa36
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/domain/PerfEmployeeInfo.java
@@ -0,0 +1,66 @@
+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 String id;
+ /**
+ * 关联现有员工表主键
+ */
+ private String employeeId;
+ /**
+ * 关联 wms_dept.id (冗余,便于按部门查询)
+ */
+ private String 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/PerfPositionTemplate.java b/klp-perf/src/main/java/com/klp/perf/domain/PerfPositionTemplate.java
new file mode 100644
index 000000000..d2f8c6c62
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/domain/PerfPositionTemplate.java
@@ -0,0 +1,53 @@
+package com.klp.perf.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.klp.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+
+/**
+ * 岗位绩效考核模板对象 perf_position_template
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("perf_position_template")
+public class PerfPositionTemplate extends BaseEntity {
+
+ private static final long serialVersionUID=1L;
+
+ /**
+ *
+ */
+ @TableId(value = "id")
+ private String id;
+ /**
+ * 关联 wms_dept.id
+ */
+ private String deptId;
+ /**
+ * 岗位名称 (与员工表岗位字段匹配)
+ */
+ private String positionName;
+ /**
+ * 模板标题 如:轧机主操绩效考核评分表
+ */
+ private String title;
+ /**
+ *
+ */
+ private Long isEnabled;
+ /**
+ * 删除标志(0=正常,1=已删除)
+ */
+ @TableLogic
+ private Integer delFlag;
+ /**
+ * 备注
+ */
+ private String remark;
+
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/domain/PerfSalary.java b/klp-perf/src/main/java/com/klp/perf/domain/PerfSalary.java
new file mode 100644
index 000000000..d448bf9f1
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/domain/PerfSalary.java
@@ -0,0 +1,156 @@
+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;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+/**
+ * 月度薪资计算记录对象 perf_salary
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("perf_salary")
+public class PerfSalary extends BaseEntity {
+
+ private static final long serialVersionUID=1L;
+
+ /**
+ *
+ */
+ @TableId(value = "id")
+ private String id;
+ /**
+ * 关联现有员工表主键
+ */
+ private String employeeId;
+ /**
+ * 关联 wms_dept.id
+ */
+ private String deptId;
+ /**
+ * 关联 perf_appraisal.id (可为空=未考核)
+ */
+ private String appraisalId;
+ /**
+ * 薪资周期 YYYY-MM
+ */
+ private String period;
+ /**
+ * 底薪
+ */
+ private BigDecimal baseSalary;
+ /**
+ * 岗位绩效基数
+ */
+ private BigDecimal perfBase;
+ /**
+ * 考核得分(关联 perf_appraisal.final_score)
+ */
+ private BigDecimal perfScore;
+ /**
+ * 绩效系数(得分换算,关联 perf_appraisal.perf_coeff)
+ */
+ private BigDecimal perfCoeff;
+ /**
+ * 车间系数(来自 perf_dept_config.dept_coeff)
+ */
+ private BigDecimal deptCoeff;
+ /**
+ * 月度绩效工资 = perf_base × perf_coeff × dept_coeff
+ */
+ private BigDecimal perfWage;
+ /**
+ * 岗位系数 (=绩效系数,自动同步)
+ */
+ private BigDecimal posCoeff;
+ /**
+ * 固定系数 = pos_coeff × 0.7
+ */
+ private BigDecimal fixedCoeff;
+ /**
+ * 可调系数(手动覆盖,默认=pos_coeff×0.3)
+ */
+ private BigDecimal adjCoeff;
+ /**
+ * 可调系数是否手动覆盖: 0=自动 1=手动
+ */
+ private Long adjCoeffManual;
+ /**
+ * 总系数 = fixed_coeff + adj_coeff
+ */
+ private BigDecimal totalCoeff;
+ /**
+ * 扣款明细 {"质量扣款":0,"倒卷扣款":0,"客诉扣款":0,...}
+ */
+ private String deductionsJson;
+ /**
+ * 扣款合计
+ */
+ private BigDecimal deductionsTotal;
+ /**
+ * 奖励明细 {"节能奖励":0,...}
+ */
+ private String bonusesJson;
+ /**
+ * 奖励合计
+ */
+ private BigDecimal bonusesTotal;
+ /**
+ * 其他金额
+ */
+ private BigDecimal otherAmount;
+ /**
+ * 实领薪资 = 底薪+月度绩效工资-扣款合计+奖励合计+其他
+ */
+ private BigDecimal actualSalary;
+ /**
+ * 固定系数薪资(参考) = fixed_coeff × 系数单价
+ */
+ private BigDecimal fixedSalaryRef;
+ /**
+ * 可调系数薪资(参考) = adj_coeff × 系数单价
+ */
+ private BigDecimal adjSalaryRef;
+ /**
+ * 保底每班(参考) = base_salary / 60
+ */
+ private BigDecimal baoPerShiftRef;
+ /**
+ * 保底薪资(参考) = bao_per_shift × 保底班数
+ */
+ private BigDecimal baoSalaryRef;
+ /**
+ * 合计薪资(参考) = fixed_salary_ref+adj_salary_ref+bao_salary_ref
+ */
+ private BigDecimal totalSalaryRef;
+ /**
+ * 0=草稿 1=已确认 2=已归档
+ */
+ private Long status;
+ /**
+ *
+ */
+ private Date confirmedAt;
+ /**
+ *
+ */
+ private String confirmedBy;
+ /**
+ * 删除标志(0=正常,1=已删除)
+ */
+ @TableLogic
+ private Integer delFlag;
+ /**
+ * 备注
+ */
+ private String remark;
+
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/domain/PerfTemplateDimension.java b/klp-perf/src/main/java/com/klp/perf/domain/PerfTemplateDimension.java
new file mode 100644
index 000000000..4478ba48b
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/domain/PerfTemplateDimension.java
@@ -0,0 +1,73 @@
+package com.klp.perf.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.klp.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+
+/**
+ * 考核维度明细对象 perf_template_dimension
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("perf_template_dimension")
+public class PerfTemplateDimension extends BaseEntity {
+
+ private static final long serialVersionUID=1L;
+
+ /**
+ *
+ */
+ @TableId(value = "id")
+ private String id;
+ /**
+ * 关联 perf_position_template.id
+ */
+ private String templateId;
+ /**
+ * 序号
+ */
+ private String seq;
+ /**
+ * 考核维度 如:产量/质量/安全/检测准确性
+ */
+ private String dimName;
+ /**
+ * 权重 如:40% 或 0.4
+ */
+ private String weight;
+ /**
+ * 量化指标 如:月产量达标率/产品合格率
+ */
+ private String indicator;
+ /**
+ * 目标值 如:≥98% / 100% / 0次 / 达标
+ */
+ private String targetValue;
+ /**
+ * 评分公式 如:=IF(E4>0,25*(F4/E4),0)
+ */
+ private String scoreFormula;
+ /**
+ * 评分规则文字描述
+ */
+ private String scoreRule;
+ /**
+ *
+ */
+ private Long isEnabled;
+ /**
+ * 删除标志(0=正常,1=已删除)
+ */
+ @TableLogic
+ private Integer delFlag;
+ /**
+ * 备注
+ */
+ private String remark;
+
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfAppraisalBo.java b/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfAppraisalBo.java
new file mode 100644
index 000000000..fa1a2e2f0
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfAppraisalBo.java
@@ -0,0 +1,99 @@
+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;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+/**
+ * 月度绩效考核记录业务对象 perf_appraisal
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class PerfAppraisalBo extends BaseEntity {
+
+ /**
+ *
+ */
+ private String id;
+
+ /**
+ * 关联现有员工表主键
+ */
+ private String employeeId;
+
+ /**
+ * 关联 wms_dept.id
+ */
+ private String deptId;
+
+ /**
+ * 关联 perf_position_template.id (当月使用的模板)
+ */
+ private String templateId;
+
+ /**
+ * 考核周期 YYYY-MM
+ */
+ private String period;
+
+ /**
+ * 加权得分 = SUM(维度得分)
+ */
+ private BigDecimal weightedScore;
+
+ /**
+ * 总加分
+ */
+ private BigDecimal bonusScore;
+
+ /**
+ * 总扣分
+ */
+ private BigDecimal penaltyScore;
+
+ /**
+ * 最终得分 = MIN(120, 加权得分+加分-扣分)
+ */
+ private BigDecimal finalScore;
+
+ /**
+ * 评级 S/A/B/C/D
+ */
+ private String grade;
+
+ /**
+ * 绩效系数(线性插值换算,自动同步到岗位系数)
+ */
+ private BigDecimal perfCoeff;
+
+ /**
+ * 0=草稿 1=已确认 2=已归档
+ */
+ private Long status;
+
+ /**
+ *
+ */
+ private Date confirmedAt;
+
+ /**
+ * 确认人
+ */
+ private String confirmedBy;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfAppraisalDetailBo.java b/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfAppraisalDetailBo.java
new file mode 100644
index 000000000..210f4d2fe
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfAppraisalDetailBo.java
@@ -0,0 +1,92 @@
+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_appraisal_detail
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class PerfAppraisalDetailBo extends BaseEntity {
+
+ /**
+ *
+ */
+ private String id;
+
+ /**
+ * 关联 perf_appraisal.id
+ */
+ private String appraisalId;
+
+ /**
+ * 关联 perf_template_dimension.id
+ */
+ private String dimensionId;
+
+ /**
+ * 序号(从模板快照)
+ */
+ private String seq;
+
+ /**
+ * 维度名称(从模板快照)
+ */
+ private String dimName;
+
+ /**
+ * 权重(从模板快照)
+ */
+ private String weight;
+
+ /**
+ * 目标值(可覆盖模板默认值)
+ */
+ private String targetValue;
+
+ /**
+ * 实际值(考核人填写)
+ */
+ private String actualValue;
+
+ /**
+ * 维度得分(公式计算)
+ */
+ private BigDecimal dimScore;
+
+ /**
+ * 本维度额外加分
+ */
+ private BigDecimal bonus;
+
+ /**
+ * 本维度额外扣分
+ */
+ private BigDecimal penalty;
+
+ /**
+ * 评分公式(从模板快照)
+ */
+ private String scoreFormula;
+
+ /**
+ * 评分规则(从模板快照)
+ */
+ private String scoreRule;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfCoeffRangeBo.java b/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfCoeffRangeBo.java
new file mode 100644
index 000000000..8fb23d2aa
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfCoeffRangeBo.java
@@ -0,0 +1,67 @@
+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_coeff_range
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class PerfCoeffRangeBo extends BaseEntity {
+
+ /**
+ * 主键
+ */
+ private String id;
+
+ /**
+ * 等级标识 S/A/B/C/D
+ */
+ private String grade;
+
+ /**
+ * 等级名称 卓越/优秀/合格/待改进/不合格
+ */
+ private String gradeLabel;
+
+ /**
+ * 得分下限(含)
+ */
+ private BigDecimal scoreMin;
+
+ /**
+ * 得分上限(含)
+ */
+ private BigDecimal scoreMax;
+
+ /**
+ * 最低绩效系数
+ */
+ private BigDecimal coeffMin;
+
+ /**
+ * 最高绩效系数
+ */
+ private BigDecimal coeffMax;
+
+ /**
+ * 排序(高→低)
+ */
+ private Long sortOrder;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfDeptConfigBo.java b/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfDeptConfigBo.java
new file mode 100644
index 000000000..f05387667
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfDeptConfigBo.java
@@ -0,0 +1,94 @@
+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;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+/**
+ * 车间考核参数配置业务对象 perf_dept_config
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class PerfDeptConfigBo extends BaseEntity {
+
+ /**
+ *
+ */
+ private String id;
+
+ /**
+ * 关联 wms_dept.id
+ */
+ private String deptId;
+
+ /**
+ * 月产量目标(吨) 或 月产长度目标(m)
+ */
+ private BigDecimal monthlyProductionTarget;
+
+ /**
+ * 产量单位: 吨 / m
+ */
+ private String productionUnit;
+
+ /**
+ * 绩效吨钢(元) 或 绩效米钢(元)
+ */
+ private BigDecimal perfUnitPrice;
+
+ /**
+ * 生产班数
+ */
+ private Long productionShifts;
+
+ /**
+ * 停机保底班数
+ */
+ private Long guaranteedShifts;
+
+ /**
+ * 车间系数(默认1.0)
+ */
+ private BigDecimal deptCoeff;
+
+ /**
+ * 薪资模式: 0=普通模式 1=保底模式(hasBaoSalary)
+ */
+ private Long salaryMode;
+
+ /**
+ * 保底薪资除数(底薪÷60=保底每班金额)
+ */
+ private Long baseDivisor;
+
+ /**
+ * 月份
+ */
+ private Date month;
+
+ /**
+ *
+ */
+ private String remark;
+
+ /**
+ *
+ */
+ private Date createdAt;
+
+ /**
+ *
+ */
+ private Date updatedAt;
+
+
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfDeptItemConfigBo.java b/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfDeptItemConfigBo.java
new file mode 100644
index 000000000..b0c5f6b6c
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfDeptItemConfigBo.java
@@ -0,0 +1,63 @@
+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.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+/**
+ * 车间扣款/奖励项目配置业务对象 perf_dept_item_config
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class PerfDeptItemConfigBo extends BaseEntity {
+
+ /**
+ *
+ */
+ private String id;
+
+ /**
+ * 关联 wms_dept.id
+ */
+ private String deptId;
+
+ /**
+ * 类型: 1=扣款项目 2=奖励项目
+ */
+ private Long itemType;
+
+ /**
+ * 项目名称 如:质量扣款/节能奖励
+ */
+ private String itemName;
+
+ /**
+ *
+ */
+ private Long sortOrder;
+
+ /**
+ * 月份
+ */
+ private Date month;
+
+ /**
+ *
+ */
+ private Long isEnabled;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfDeptSummaryBo.java b/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfDeptSummaryBo.java
new file mode 100644
index 000000000..99e61b024
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfDeptSummaryBo.java
@@ -0,0 +1,112 @@
+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_dept_summary
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class PerfDeptSummaryBo extends BaseEntity {
+
+ /**
+ *
+ */
+ private String id;
+
+ /**
+ * 关联 wms_dept.id
+ */
+ private String deptId;
+
+ /**
+ * 周期 YYYY-MM
+ */
+ private String period;
+
+ /**
+ * 总人数
+ */
+ private Long totalEmployees;
+
+ /**
+ * 系数总计(所有人员总系数之和)
+ */
+ private BigDecimal totalCoeffSum;
+
+ /**
+ * 平均考核得分
+ */
+ private BigDecimal avgPerfScore;
+
+ /**
+ * 平均绩效系数
+ */
+ private BigDecimal avgPerfCoeff;
+
+ /**
+ * 底薪合计
+ */
+ private BigDecimal totalBaseSalary;
+
+ /**
+ * 月度绩效工资合计
+ */
+ private BigDecimal totalPerfWage;
+
+ /**
+ * 扣款合计
+ */
+ private BigDecimal totalDeductions;
+
+ /**
+ * 奖励合计
+ */
+ private BigDecimal totalBonuses;
+
+ /**
+ * 其他合计
+ */
+ private BigDecimal totalOther;
+
+ /**
+ * 实领薪资合计
+ */
+ private BigDecimal totalActualSalary;
+
+ /**
+ * 人均实领薪资
+ */
+ private BigDecimal avgActualSalary;
+
+ /**
+ * 当月实际产量
+ */
+ private BigDecimal monthlyProduction;
+
+ /**
+ * 系数单价(自动计算) = 月产量×绩效吨钢/系数总计
+ */
+ private BigDecimal unitPrice;
+
+ /**
+ * 0=草稿 1=已确认
+ */
+ private Long status;
+
+ /**
+ * 备注
+ */
+ 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
new file mode 100644
index 000000000..b997d73bc
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfEmployeeInfoBo.java
@@ -0,0 +1,67 @@
+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 String id;
+
+ /**
+ * 关联现有员工表主键
+ */
+ private String employeeId;
+
+ /**
+ * 关联 wms_dept.id (冗余,便于按部门查询)
+ */
+ private String 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/bo/PerfPositionTemplateBo.java b/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfPositionTemplateBo.java
new file mode 100644
index 000000000..e1813c232
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfPositionTemplateBo.java
@@ -0,0 +1,51 @@
+package com.klp.perf.domain.bo;
+
+import com.klp.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import javax.validation.constraints.*;
+
+
+/**
+ * 岗位绩效考核模板业务对象 perf_position_template
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class PerfPositionTemplateBo extends BaseEntity {
+
+ /**
+ *
+ */
+ private String id;
+
+ /**
+ * 关联 wms_dept.id
+ */
+ private String deptId;
+
+ /**
+ * 岗位名称 (与员工表岗位字段匹配)
+ */
+ private String positionName;
+
+ /**
+ * 模板标题 如:轧机主操绩效考核评分表
+ */
+ private String title;
+
+ /**
+ *
+ */
+ private Long isEnabled;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfSalaryBo.java b/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfSalaryBo.java
new file mode 100644
index 000000000..6da57e97e
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfSalaryBo.java
@@ -0,0 +1,179 @@
+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;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+/**
+ * 月度薪资计算记录业务对象 perf_salary
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class PerfSalaryBo extends BaseEntity {
+
+ /**
+ *
+ */
+ private String id;
+
+ /**
+ * 关联现有员工表主键
+ */
+ private String employeeId;
+
+ /**
+ * 关联 wms_dept.id
+ */
+ private String deptId;
+
+ /**
+ * 关联 perf_appraisal.id (可为空=未考核)
+ */
+ private String appraisalId;
+
+ /**
+ * 薪资周期 YYYY-MM
+ */
+ private String period;
+
+ /**
+ * 底薪
+ */
+ private BigDecimal baseSalary;
+
+ /**
+ * 岗位绩效基数
+ */
+ private BigDecimal perfBase;
+
+ /**
+ * 考核得分(关联 perf_appraisal.final_score)
+ */
+ private BigDecimal perfScore;
+
+ /**
+ * 绩效系数(得分换算,关联 perf_appraisal.perf_coeff)
+ */
+ private BigDecimal perfCoeff;
+
+ /**
+ * 车间系数(来自 perf_dept_config.dept_coeff)
+ */
+ private BigDecimal deptCoeff;
+
+ /**
+ * 月度绩效工资 = perf_base × perf_coeff × dept_coeff
+ */
+ private BigDecimal perfWage;
+
+ /**
+ * 岗位系数 (=绩效系数,自动同步)
+ */
+ private BigDecimal posCoeff;
+
+ /**
+ * 固定系数 = pos_coeff × 0.7
+ */
+ private BigDecimal fixedCoeff;
+
+ /**
+ * 可调系数(手动覆盖,默认=pos_coeff×0.3)
+ */
+ private BigDecimal adjCoeff;
+
+ /**
+ * 可调系数是否手动覆盖: 0=自动 1=手动
+ */
+ private Long adjCoeffManual;
+
+ /**
+ * 总系数 = fixed_coeff + adj_coeff
+ */
+ private BigDecimal totalCoeff;
+
+ /**
+ * 扣款明细 {"质量扣款":0,"倒卷扣款":0,"客诉扣款":0,...}
+ */
+ private String deductionsJson;
+
+ /**
+ * 扣款合计
+ */
+ private BigDecimal deductionsTotal;
+
+ /**
+ * 奖励明细 {"节能奖励":0,...}
+ */
+ private String bonusesJson;
+
+ /**
+ * 奖励合计
+ */
+ private BigDecimal bonusesTotal;
+
+ /**
+ * 其他金额
+ */
+ private BigDecimal otherAmount;
+
+ /**
+ * 实领薪资 = 底薪+月度绩效工资-扣款合计+奖励合计+其他
+ */
+ private BigDecimal actualSalary;
+
+ /**
+ * 固定系数薪资(参考) = fixed_coeff × 系数单价
+ */
+ private BigDecimal fixedSalaryRef;
+
+ /**
+ * 可调系数薪资(参考) = adj_coeff × 系数单价
+ */
+ private BigDecimal adjSalaryRef;
+
+ /**
+ * 保底每班(参考) = base_salary / 60
+ */
+ private BigDecimal baoPerShiftRef;
+
+ /**
+ * 保底薪资(参考) = bao_per_shift × 保底班数
+ */
+ private BigDecimal baoSalaryRef;
+
+ /**
+ * 合计薪资(参考) = fixed_salary_ref+adj_salary_ref+bao_salary_ref
+ */
+ private BigDecimal totalSalaryRef;
+
+ /**
+ * 0=草稿 1=已确认 2=已归档
+ */
+ private Long status;
+
+ /**
+ *
+ */
+ private Date confirmedAt;
+
+ /**
+ *
+ */
+ private String confirmedBy;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfTemplateDimensionBo.java b/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfTemplateDimensionBo.java
new file mode 100644
index 000000000..a926a64ee
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/domain/bo/PerfTemplateDimensionBo.java
@@ -0,0 +1,76 @@
+package com.klp.perf.domain.bo;
+
+import com.klp.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import javax.validation.constraints.*;
+
+
+/**
+ * 考核维度明细业务对象 perf_template_dimension
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class PerfTemplateDimensionBo extends BaseEntity {
+
+ /**
+ *
+ */
+ private String id;
+
+ /**
+ * 关联 perf_position_template.id
+ */
+ private String templateId;
+
+ /**
+ * 序号
+ */
+ private String seq;
+
+ /**
+ * 考核维度 如:产量/质量/安全/检测准确性
+ */
+ private String dimName;
+
+ /**
+ * 权重 如:40% 或 0.4
+ */
+ private String weight;
+
+ /**
+ * 量化指标 如:月产量达标率/产品合格率
+ */
+ private String indicator;
+
+ /**
+ * 目标值 如:≥98% / 100% / 0次 / 达标
+ */
+ private String targetValue;
+
+ /**
+ * 评分公式 如:=IF(E4>0,25*(F4/E4),0)
+ */
+ private String scoreFormula;
+
+ /**
+ * 评分规则文字描述
+ */
+ private String scoreRule;
+
+ /**
+ *
+ */
+ private Long isEnabled;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfAppraisalDetailVo.java b/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfAppraisalDetailVo.java
new file mode 100644
index 000000000..861c93b2b
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfAppraisalDetailVo.java
@@ -0,0 +1,108 @@
+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_appraisal_detail
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+@Data
+@ExcelIgnoreUnannotated
+public class PerfAppraisalDetailVo {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ *
+ */
+ @ExcelProperty(value = "")
+ private String id;
+
+ /**
+ * 关联 perf_appraisal.id
+ */
+ @ExcelProperty(value = "关联 perf_appraisal.id")
+ private String appraisalId;
+
+ /**
+ * 关联 perf_template_dimension.id
+ */
+ @ExcelProperty(value = "关联 perf_template_dimension.id")
+ private String dimensionId;
+
+ /**
+ * 序号(从模板快照)
+ */
+ @ExcelProperty(value = "序号(从模板快照)")
+ private String seq;
+
+ /**
+ * 维度名称(从模板快照)
+ */
+ @ExcelProperty(value = "维度名称(从模板快照)")
+ private String dimName;
+
+ /**
+ * 权重(从模板快照)
+ */
+ @ExcelProperty(value = "权重(从模板快照)")
+ private String weight;
+
+ /**
+ * 目标值(可覆盖模板默认值)
+ */
+ @ExcelProperty(value = "目标值(可覆盖模板默认值)")
+ private String targetValue;
+
+ /**
+ * 实际值(考核人填写)
+ */
+ @ExcelProperty(value = "实际值(考核人填写)")
+ private String actualValue;
+
+ /**
+ * 维度得分(公式计算)
+ */
+ @ExcelProperty(value = "维度得分(公式计算)")
+ private BigDecimal dimScore;
+
+ /**
+ * 本维度额外加分
+ */
+ @ExcelProperty(value = "本维度额外加分")
+ private BigDecimal bonus;
+
+ /**
+ * 本维度额外扣分
+ */
+ @ExcelProperty(value = "本维度额外扣分")
+ private BigDecimal penalty;
+
+ /**
+ * 评分公式(从模板快照)
+ */
+ @ExcelProperty(value = "评分公式(从模板快照)")
+ private String scoreFormula;
+
+ /**
+ * 评分规则(从模板快照)
+ */
+ @ExcelProperty(value = "评分规则(从模板快照)")
+ private String scoreRule;
+
+ /**
+ * 备注
+ */
+ @ExcelProperty(value = "备注")
+ private String remark;
+
+
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfAppraisalVo.java b/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfAppraisalVo.java
new file mode 100644
index 000000000..63d7ab9ce
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfAppraisalVo.java
@@ -0,0 +1,116 @@
+package com.klp.perf.domain.vo;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.klp.common.annotation.ExcelDictFormat;
+import com.klp.common.convert.ExcelDictConvert;
+import lombok.Data;
+
+
+/**
+ * 月度绩效考核记录视图对象 perf_appraisal
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+@Data
+@ExcelIgnoreUnannotated
+public class PerfAppraisalVo {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ *
+ */
+ @ExcelProperty(value = "")
+ private String id;
+
+ /**
+ * 关联现有员工表主键
+ */
+ @ExcelProperty(value = "关联现有员工表主键")
+ private String employeeId;
+
+ /**
+ * 关联 wms_dept.id
+ */
+ @ExcelProperty(value = "关联 wms_dept.id")
+ private String deptId;
+
+ /**
+ * 关联 perf_position_template.id (当月使用的模板)
+ */
+ @ExcelProperty(value = "关联 perf_position_template.id (当月使用的模板)")
+ private String templateId;
+
+ /**
+ * 考核周期 YYYY-MM
+ */
+ @ExcelProperty(value = "考核周期 YYYY-MM")
+ private String period;
+
+ /**
+ * 加权得分 = SUM(维度得分)
+ */
+ @ExcelProperty(value = "加权得分 = SUM(维度得分)")
+ private BigDecimal weightedScore;
+
+ /**
+ * 总加分
+ */
+ @ExcelProperty(value = "总加分")
+ private BigDecimal bonusScore;
+
+ /**
+ * 总扣分
+ */
+ @ExcelProperty(value = "总扣分")
+ private BigDecimal penaltyScore;
+
+ /**
+ * 最终得分 = MIN(120, 加权得分+加分-扣分)
+ */
+ @ExcelProperty(value = "最终得分 = MIN(120, 加权得分+加分-扣分)")
+ private BigDecimal finalScore;
+
+ /**
+ * 评级 S/A/B/C/D
+ */
+ @ExcelProperty(value = "评级 S/A/B/C/D")
+ private String grade;
+
+ /**
+ * 绩效系数(线性插值换算,自动同步到岗位系数)
+ */
+ @ExcelProperty(value = "绩效系数(线性插值换算,自动同步到岗位系数)")
+ private BigDecimal perfCoeff;
+
+ /**
+ * 0=草稿 1=已确认 2=已归档
+ */
+ @ExcelProperty(value = "0=草稿 1=已确认 2=已归档")
+ private Long status;
+
+ /**
+ *
+ */
+ @ExcelProperty(value = "")
+ private Date confirmedAt;
+
+ /**
+ * 确认人
+ */
+ @ExcelProperty(value = "确认人")
+ private String confirmedBy;
+
+ /**
+ * 备注
+ */
+ @ExcelProperty(value = "备注")
+ private String remark;
+
+
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfCoeffRangeVo.java b/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfCoeffRangeVo.java
new file mode 100644
index 000000000..d6754127e
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfCoeffRangeVo.java
@@ -0,0 +1,78 @@
+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_coeff_range
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+@Data
+@ExcelIgnoreUnannotated
+public class PerfCoeffRangeVo {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 主键
+ */
+ @ExcelProperty(value = "主键")
+ private String id;
+
+ /**
+ * 等级标识 S/A/B/C/D
+ */
+ @ExcelProperty(value = "等级标识 S/A/B/C/D")
+ private String grade;
+
+ /**
+ * 等级名称 卓越/优秀/合格/待改进/不合格
+ */
+ @ExcelProperty(value = "等级名称 卓越/优秀/合格/待改进/不合格")
+ private String gradeLabel;
+
+ /**
+ * 得分下限(含)
+ */
+ @ExcelProperty(value = "得分下限(含)")
+ private BigDecimal scoreMin;
+
+ /**
+ * 得分上限(含)
+ */
+ @ExcelProperty(value = "得分上限(含)")
+ private BigDecimal scoreMax;
+
+ /**
+ * 最低绩效系数
+ */
+ @ExcelProperty(value = "最低绩效系数")
+ private BigDecimal coeffMin;
+
+ /**
+ * 最高绩效系数
+ */
+ @ExcelProperty(value = "最高绩效系数")
+ private BigDecimal coeffMax;
+
+ /**
+ * 排序(高→低)
+ */
+ @ExcelProperty(value = "排序(高→低)")
+ private Long sortOrder;
+
+ /**
+ * 备注
+ */
+ @ExcelProperty(value = "备注")
+ private String remark;
+
+
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfDeptConfigVo.java b/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfDeptConfigVo.java
new file mode 100644
index 000000000..ff5202fc5
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfDeptConfigVo.java
@@ -0,0 +1,110 @@
+package com.klp.perf.domain.vo;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.klp.common.annotation.ExcelDictFormat;
+import com.klp.common.convert.ExcelDictConvert;
+import lombok.Data;
+
+
+/**
+ * 车间考核参数配置视图对象 perf_dept_config
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+@Data
+@ExcelIgnoreUnannotated
+public class PerfDeptConfigVo {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ *
+ */
+ @ExcelProperty(value = "")
+ private String id;
+
+ /**
+ * 关联 wms_dept.id
+ */
+ @ExcelProperty(value = "关联 wms_dept.id")
+ private String deptId;
+
+ /**
+ * 月产量目标(吨) 或 月产长度目标(m)
+ */
+ @ExcelProperty(value = "月产量目标(吨) 或 月产长度目标(m)")
+ private BigDecimal monthlyProductionTarget;
+
+ /**
+ * 产量单位: 吨 / m
+ */
+ @ExcelProperty(value = "产量单位: 吨 / m")
+ private String productionUnit;
+
+ /**
+ * 绩效吨钢(元) 或 绩效米钢(元)
+ */
+ @ExcelProperty(value = "绩效吨钢(元) 或 绩效米钢(元)")
+ private BigDecimal perfUnitPrice;
+
+ /**
+ * 生产班数
+ */
+ @ExcelProperty(value = "生产班数")
+ private Long productionShifts;
+
+ /**
+ * 停机保底班数
+ */
+ @ExcelProperty(value = "停机保底班数")
+ private Long guaranteedShifts;
+
+ /**
+ * 车间系数(默认1.0)
+ */
+ @ExcelProperty(value = "车间系数(默认1.0)")
+ private BigDecimal deptCoeff;
+
+ /**
+ * 薪资模式: 0=普通模式 1=保底模式(hasBaoSalary)
+ */
+ @ExcelProperty(value = "薪资模式: 0=普通模式 1=保底模式(hasBaoSalary)")
+ private Long salaryMode;
+
+ /**
+ * 保底薪资除数(底薪÷60=保底每班金额)
+ */
+ @ExcelProperty(value = "保底薪资除数(底薪÷60=保底每班金额)")
+ private Long baseDivisor;
+
+ /**
+ * 月份
+ */
+ @ExcelProperty(value = "月份")
+ private Date month;
+
+ /**
+ *
+ */
+ @ExcelProperty(value = "")
+ private String remark;
+
+ /**
+ *
+ */
+ @ExcelProperty(value = "")
+ private Date createdAt;
+
+ /**
+ *
+ */
+ @ExcelProperty(value = "")
+ private Date updatedAt;
+
+
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfDeptItemConfigVo.java b/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfDeptItemConfigVo.java
new file mode 100644
index 000000000..5760320fc
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfDeptItemConfigVo.java
@@ -0,0 +1,73 @@
+package com.klp.perf.domain.vo;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.klp.common.annotation.ExcelDictFormat;
+import com.klp.common.convert.ExcelDictConvert;
+import lombok.Data;
+
+
+/**
+ * 车间扣款/奖励项目配置视图对象 perf_dept_item_config
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+@Data
+@ExcelIgnoreUnannotated
+public class PerfDeptItemConfigVo {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ *
+ */
+ @ExcelProperty(value = "")
+ private String id;
+
+ /**
+ * 关联 wms_dept.id
+ */
+ @ExcelProperty(value = "关联 wms_dept.id")
+ private String deptId;
+
+ /**
+ * 类型: 1=扣款项目 2=奖励项目
+ */
+ @ExcelProperty(value = "类型: 1=扣款项目 2=奖励项目")
+ private Long itemType;
+
+ /**
+ * 项目名称 如:质量扣款/节能奖励
+ */
+ @ExcelProperty(value = "项目名称 如:质量扣款/节能奖励")
+ private String itemName;
+
+ /**
+ *
+ */
+ @ExcelProperty(value = "")
+ private Long sortOrder;
+
+ /**
+ * 月份
+ */
+ @ExcelProperty(value = "月份")
+ private Date month;
+
+ /**
+ *
+ */
+ @ExcelProperty(value = "")
+ private Long isEnabled;
+
+ /**
+ * 备注
+ */
+ @ExcelProperty(value = "备注")
+ private String remark;
+
+
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfDeptSummaryVo.java b/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfDeptSummaryVo.java
new file mode 100644
index 000000000..488cbaffd
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfDeptSummaryVo.java
@@ -0,0 +1,132 @@
+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_dept_summary
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+@Data
+@ExcelIgnoreUnannotated
+public class PerfDeptSummaryVo {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ *
+ */
+ @ExcelProperty(value = "")
+ private String id;
+
+ /**
+ * 关联 wms_dept.id
+ */
+ @ExcelProperty(value = "关联 wms_dept.id")
+ private String deptId;
+
+ /**
+ * 周期 YYYY-MM
+ */
+ @ExcelProperty(value = "周期 YYYY-MM")
+ private String period;
+
+ /**
+ * 总人数
+ */
+ @ExcelProperty(value = "总人数")
+ private Long totalEmployees;
+
+ /**
+ * 系数总计(所有人员总系数之和)
+ */
+ @ExcelProperty(value = "系数总计(所有人员总系数之和)")
+ private BigDecimal totalCoeffSum;
+
+ /**
+ * 平均考核得分
+ */
+ @ExcelProperty(value = "平均考核得分")
+ private BigDecimal avgPerfScore;
+
+ /**
+ * 平均绩效系数
+ */
+ @ExcelProperty(value = "平均绩效系数")
+ private BigDecimal avgPerfCoeff;
+
+ /**
+ * 底薪合计
+ */
+ @ExcelProperty(value = "底薪合计")
+ private BigDecimal totalBaseSalary;
+
+ /**
+ * 月度绩效工资合计
+ */
+ @ExcelProperty(value = "月度绩效工资合计")
+ private BigDecimal totalPerfWage;
+
+ /**
+ * 扣款合计
+ */
+ @ExcelProperty(value = "扣款合计")
+ private BigDecimal totalDeductions;
+
+ /**
+ * 奖励合计
+ */
+ @ExcelProperty(value = "奖励合计")
+ private BigDecimal totalBonuses;
+
+ /**
+ * 其他合计
+ */
+ @ExcelProperty(value = "其他合计")
+ private BigDecimal totalOther;
+
+ /**
+ * 实领薪资合计
+ */
+ @ExcelProperty(value = "实领薪资合计")
+ private BigDecimal totalActualSalary;
+
+ /**
+ * 人均实领薪资
+ */
+ @ExcelProperty(value = "人均实领薪资")
+ private BigDecimal avgActualSalary;
+
+ /**
+ * 当月实际产量
+ */
+ @ExcelProperty(value = "当月实际产量")
+ private BigDecimal monthlyProduction;
+
+ /**
+ * 系数单价(自动计算) = 月产量×绩效吨钢/系数总计
+ */
+ @ExcelProperty(value = "系数单价(自动计算) = 月产量×绩效吨钢/系数总计")
+ private BigDecimal unitPrice;
+
+ /**
+ * 0=草稿 1=已确认
+ */
+ @ExcelProperty(value = "0=草稿 1=已确认")
+ private Long status;
+
+ /**
+ * 备注
+ */
+ @ExcelProperty(value = "备注")
+ 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
new file mode 100644
index 000000000..3c1cd0987
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfEmployeeInfoVo.java
@@ -0,0 +1,78 @@
+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 String id;
+
+ /**
+ * 关联现有员工表主键
+ */
+ @ExcelProperty(value = "关联现有员工表主键")
+ private String employeeId;
+
+ /**
+ * 关联 wms_dept.id (冗余,便于按部门查询)
+ */
+ @ExcelProperty(value = "关联 wms_dept.id (冗余,便于按部门查询)")
+ private String 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
new file mode 100644
index 000000000..d02818209
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfPositionTemplateVo.java
@@ -0,0 +1,59 @@
+package com.klp.perf.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;
+
+
+/**
+ * 岗位绩效考核模板视图对象 perf_position_template
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+@Data
+@ExcelIgnoreUnannotated
+public class PerfPositionTemplateVo {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ *
+ */
+ @ExcelProperty(value = "")
+ private String id;
+
+ /**
+ * 关联 wms_dept.id
+ */
+ @ExcelProperty(value = "关联 wms_dept.id")
+ private String deptId;
+
+ /**
+ * 岗位名称 (与员工表岗位字段匹配)
+ */
+ @ExcelProperty(value = "岗位名称 (与员工表岗位字段匹配)")
+ private String positionName;
+
+ /**
+ * 模板标题 如:轧机主操绩效考核评分表
+ */
+ @ExcelProperty(value = "模板标题 如:轧机主操绩效考核评分表")
+ private String title;
+
+ /**
+ *
+ */
+ @ExcelProperty(value = "")
+ private Long isEnabled;
+
+ /**
+ * 备注
+ */
+ @ExcelProperty(value = "备注")
+ private String remark;
+
+
+}
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
new file mode 100644
index 000000000..0bf762895
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfSalaryVo.java
@@ -0,0 +1,212 @@
+package com.klp.perf.domain.vo;
+
+import java.math.BigDecimal;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.klp.common.annotation.ExcelDictFormat;
+import com.klp.common.convert.ExcelDictConvert;
+import lombok.Data;
+
+
+/**
+ * 月度薪资计算记录视图对象 perf_salary
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+@Data
+@ExcelIgnoreUnannotated
+public class PerfSalaryVo {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ *
+ */
+ @ExcelProperty(value = "")
+ private String id;
+
+ /**
+ * 关联现有员工表主键
+ */
+ @ExcelProperty(value = "关联现有员工表主键")
+ private String employeeId;
+
+ /**
+ * 关联 wms_dept.id
+ */
+ @ExcelProperty(value = "关联 wms_dept.id")
+ private String deptId;
+
+ /**
+ * 关联 perf_appraisal.id (可为空=未考核)
+ */
+ @ExcelProperty(value = "关联 perf_appraisal.id (可为空=未考核)")
+ private String appraisalId;
+
+ /**
+ * 薪资周期 YYYY-MM
+ */
+ @ExcelProperty(value = "薪资周期 YYYY-MM")
+ private String period;
+
+ /**
+ * 底薪
+ */
+ @ExcelProperty(value = "底薪")
+ private BigDecimal baseSalary;
+
+ /**
+ * 岗位绩效基数
+ */
+ @ExcelProperty(value = "岗位绩效基数")
+ private BigDecimal perfBase;
+
+ /**
+ * 考核得分(关联 perf_appraisal.final_score)
+ */
+ @ExcelProperty(value = "考核得分(关联 perf_appraisal.final_score)")
+ private BigDecimal perfScore;
+
+ /**
+ * 绩效系数(得分换算,关联 perf_appraisal.perf_coeff)
+ */
+ @ExcelProperty(value = "绩效系数(得分换算,关联 perf_appraisal.perf_coeff)")
+ private BigDecimal perfCoeff;
+
+ /**
+ * 车间系数(来自 perf_dept_config.dept_coeff)
+ */
+ @ExcelProperty(value = "车间系数(来自 perf_dept_config.dept_coeff)")
+ private BigDecimal deptCoeff;
+
+ /**
+ * 月度绩效工资 = perf_base × perf_coeff × dept_coeff
+ */
+ @ExcelProperty(value = "月度绩效工资 = perf_base × perf_coeff × dept_coeff")
+ private BigDecimal perfWage;
+
+ /**
+ * 岗位系数 (=绩效系数,自动同步)
+ */
+ @ExcelProperty(value = "岗位系数 (=绩效系数,自动同步)")
+ private BigDecimal posCoeff;
+
+ /**
+ * 固定系数 = pos_coeff × 0.7
+ */
+ @ExcelProperty(value = "固定系数 = pos_coeff × 0.7")
+ private BigDecimal fixedCoeff;
+
+ /**
+ * 可调系数(手动覆盖,默认=pos_coeff×0.3)
+ */
+ @ExcelProperty(value = "可调系数(手动覆盖,默认=pos_coeff×0.3)")
+ private BigDecimal adjCoeff;
+
+ /**
+ * 可调系数是否手动覆盖: 0=自动 1=手动
+ */
+ @ExcelProperty(value = "可调系数是否手动覆盖: 0=自动 1=手动")
+ private Long adjCoeffManual;
+
+ /**
+ * 总系数 = fixed_coeff + adj_coeff
+ */
+ @ExcelProperty(value = "总系数 = fixed_coeff + adj_coeff")
+ private BigDecimal totalCoeff;
+
+ /**
+ * 扣款明细 {"质量扣款":0,"倒卷扣款":0,"客诉扣款":0,...}
+ */
+ @ExcelProperty(value = "扣款明细")
+ private String deductionsJson;
+
+ /**
+ * 扣款合计
+ */
+ @ExcelProperty(value = "扣款合计")
+ private BigDecimal deductionsTotal;
+
+ /**
+ * 奖励明细 {"节能奖励":0,...}
+ */
+ @ExcelProperty(value = "奖励明细 ")
+ private String bonusesJson;
+
+ /**
+ * 奖励合计
+ */
+ @ExcelProperty(value = "奖励合计")
+ private BigDecimal bonusesTotal;
+
+ /**
+ * 其他金额
+ */
+ @ExcelProperty(value = "其他金额")
+ private BigDecimal otherAmount;
+
+ /**
+ * 实领薪资 = 底薪+月度绩效工资-扣款合计+奖励合计+其他
+ */
+ @ExcelProperty(value = "实领薪资 = 底薪+月度绩效工资-扣款合计+奖励合计+其他")
+ private BigDecimal actualSalary;
+
+ /**
+ * 固定系数薪资(参考) = fixed_coeff × 系数单价
+ */
+ @ExcelProperty(value = "固定系数薪资(参考) = fixed_coeff × 系数单价")
+ private BigDecimal fixedSalaryRef;
+
+ /**
+ * 可调系数薪资(参考) = adj_coeff × 系数单价
+ */
+ @ExcelProperty(value = "可调系数薪资(参考) = adj_coeff × 系数单价")
+ private BigDecimal adjSalaryRef;
+
+ /**
+ * 保底每班(参考) = base_salary / 60
+ */
+ @ExcelProperty(value = "保底每班(参考) = base_salary / 60")
+ private BigDecimal baoPerShiftRef;
+
+ /**
+ * 保底薪资(参考) = bao_per_shift × 保底班数
+ */
+ @ExcelProperty(value = "保底薪资(参考) = bao_per_shift × 保底班数")
+ private BigDecimal baoSalaryRef;
+
+ /**
+ * 合计薪资(参考) = fixed_salary_ref+adj_salary_ref+bao_salary_ref
+ */
+ @ExcelProperty(value = "合计薪资(参考) = fixed_salary_ref+adj_salary_ref+bao_salary_ref")
+ private BigDecimal totalSalaryRef;
+
+ /**
+ * 0=草稿 1=已确认 2=已归档
+ */
+ @ExcelProperty(value = "0=草稿 1=已确认 2=已归档")
+ private Long status;
+
+ /**
+ *
+ */
+ @ExcelProperty(value = "")
+ private Date confirmedAt;
+
+ /**
+ *
+ */
+ @ExcelProperty(value = "")
+ private String confirmedBy;
+
+ /**
+ * 备注
+ */
+ @ExcelProperty(value = "备注")
+ private String remark;
+
+
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfTemplateDimensionVo.java b/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfTemplateDimensionVo.java
new file mode 100644
index 000000000..47d1d0425
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/domain/vo/PerfTemplateDimensionVo.java
@@ -0,0 +1,89 @@
+package com.klp.perf.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;
+
+
+/**
+ * 考核维度明细视图对象 perf_template_dimension
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+@Data
+@ExcelIgnoreUnannotated
+public class PerfTemplateDimensionVo {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ *
+ */
+ @ExcelProperty(value = "")
+ private String id;
+
+ /**
+ * 关联 perf_position_template.id
+ */
+ @ExcelProperty(value = "关联 perf_position_template.id")
+ private String templateId;
+
+ /**
+ * 序号
+ */
+ @ExcelProperty(value = "序号")
+ private String seq;
+
+ /**
+ * 考核维度 如:产量/质量/安全/检测准确性
+ */
+ @ExcelProperty(value = "考核维度 如:产量/质量/安全/检测准确性")
+ private String dimName;
+
+ /**
+ * 权重 如:40% 或 0.4
+ */
+ @ExcelProperty(value = "权重 如:40% 或 0.4")
+ private String weight;
+
+ /**
+ * 量化指标 如:月产量达标率/产品合格率
+ */
+ @ExcelProperty(value = "量化指标 如:月产量达标率/产品合格率")
+ private String indicator;
+
+ /**
+ * 目标值 如:≥98% / 100% / 0次 / 达标
+ */
+ @ExcelProperty(value = "目标值 如:≥98% / 100% / 0次 / 达标")
+ private String targetValue;
+
+ /**
+ * 评分公式 如:=IF(E4>0,25*(F4/E4),0)
+ */
+ @ExcelProperty(value = "评分公式 如:=IF(E4>0,25*(F4/E4),0)")
+ private String scoreFormula;
+
+ /**
+ * 评分规则文字描述
+ */
+ @ExcelProperty(value = "评分规则文字描述")
+ private String scoreRule;
+
+ /**
+ *
+ */
+ @ExcelProperty(value = "")
+ private Long isEnabled;
+
+ /**
+ * 备注
+ */
+ @ExcelProperty(value = "备注")
+ private String remark;
+
+
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/mapper/PerfAppraisalDetailMapper.java b/klp-perf/src/main/java/com/klp/perf/mapper/PerfAppraisalDetailMapper.java
new file mode 100644
index 000000000..f8fb00e28
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/mapper/PerfAppraisalDetailMapper.java
@@ -0,0 +1,15 @@
+package com.klp.perf.mapper;
+
+import com.klp.perf.domain.PerfAppraisalDetail;
+import com.klp.perf.domain.vo.PerfAppraisalDetailVo;
+import com.klp.common.core.mapper.BaseMapperPlus;
+
+/**
+ * 考核维度评分明细Mapper接口
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+public interface PerfAppraisalDetailMapper extends BaseMapperPlus {
+
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/mapper/PerfAppraisalMapper.java b/klp-perf/src/main/java/com/klp/perf/mapper/PerfAppraisalMapper.java
new file mode 100644
index 000000000..51b6ba693
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/mapper/PerfAppraisalMapper.java
@@ -0,0 +1,15 @@
+package com.klp.perf.mapper;
+
+import com.klp.perf.domain.PerfAppraisal;
+import com.klp.perf.domain.vo.PerfAppraisalVo;
+import com.klp.common.core.mapper.BaseMapperPlus;
+
+/**
+ * 月度绩效考核记录Mapper接口
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+public interface PerfAppraisalMapper extends BaseMapperPlus {
+
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/mapper/PerfCoeffRangeMapper.java b/klp-perf/src/main/java/com/klp/perf/mapper/PerfCoeffRangeMapper.java
new file mode 100644
index 000000000..a2e7682f8
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/mapper/PerfCoeffRangeMapper.java
@@ -0,0 +1,15 @@
+package com.klp.perf.mapper;
+
+import com.klp.perf.domain.PerfCoeffRange;
+import com.klp.perf.domain.vo.PerfCoeffRangeVo;
+import com.klp.common.core.mapper.BaseMapperPlus;
+
+/**
+ * 绩效系数换算Mapper接口
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+public interface PerfCoeffRangeMapper extends BaseMapperPlus {
+
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/mapper/PerfDeptConfigMapper.java b/klp-perf/src/main/java/com/klp/perf/mapper/PerfDeptConfigMapper.java
new file mode 100644
index 000000000..d983e3110
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/mapper/PerfDeptConfigMapper.java
@@ -0,0 +1,15 @@
+package com.klp.perf.mapper;
+
+import com.klp.perf.domain.PerfDeptConfig;
+import com.klp.perf.domain.vo.PerfDeptConfigVo;
+import com.klp.common.core.mapper.BaseMapperPlus;
+
+/**
+ * 车间考核参数配置Mapper接口
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+public interface PerfDeptConfigMapper extends BaseMapperPlus {
+
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/mapper/PerfDeptItemConfigMapper.java b/klp-perf/src/main/java/com/klp/perf/mapper/PerfDeptItemConfigMapper.java
new file mode 100644
index 000000000..4d7960b17
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/mapper/PerfDeptItemConfigMapper.java
@@ -0,0 +1,15 @@
+package com.klp.perf.mapper;
+
+import com.klp.perf.domain.PerfDeptItemConfig;
+import com.klp.perf.domain.vo.PerfDeptItemConfigVo;
+import com.klp.common.core.mapper.BaseMapperPlus;
+
+/**
+ * 车间扣款/奖励项目配置Mapper接口
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+public interface PerfDeptItemConfigMapper extends BaseMapperPlus {
+
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/mapper/PerfDeptSummaryMapper.java b/klp-perf/src/main/java/com/klp/perf/mapper/PerfDeptSummaryMapper.java
new file mode 100644
index 000000000..5d35c958e
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/mapper/PerfDeptSummaryMapper.java
@@ -0,0 +1,15 @@
+package com.klp.perf.mapper;
+
+import com.klp.perf.domain.PerfDeptSummary;
+import com.klp.perf.domain.vo.PerfDeptSummaryVo;
+import com.klp.common.core.mapper.BaseMapperPlus;
+
+/**
+ * 车间月度汇总Mapper接口
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+public interface PerfDeptSummaryMapper extends BaseMapperPlus {
+
+}
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
new file mode 100644
index 000000000..df9a2467e
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/mapper/PerfEmployeeInfoMapper.java
@@ -0,0 +1,15 @@
+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/mapper/PerfPositionTemplateMapper.java b/klp-perf/src/main/java/com/klp/perf/mapper/PerfPositionTemplateMapper.java
new file mode 100644
index 000000000..e658c94ef
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/mapper/PerfPositionTemplateMapper.java
@@ -0,0 +1,15 @@
+package com.klp.perf.mapper;
+
+import com.klp.perf.domain.PerfPositionTemplate;
+import com.klp.perf.domain.vo.PerfPositionTemplateVo;
+import com.klp.common.core.mapper.BaseMapperPlus;
+
+/**
+ * 岗位绩效考核模板Mapper接口
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+public interface PerfPositionTemplateMapper extends BaseMapperPlus {
+
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/mapper/PerfSalaryMapper.java b/klp-perf/src/main/java/com/klp/perf/mapper/PerfSalaryMapper.java
new file mode 100644
index 000000000..6bc780ceb
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/mapper/PerfSalaryMapper.java
@@ -0,0 +1,15 @@
+package com.klp.perf.mapper;
+
+import com.klp.perf.domain.PerfSalary;
+import com.klp.perf.domain.vo.PerfSalaryVo;
+import com.klp.common.core.mapper.BaseMapperPlus;
+
+/**
+ * 月度薪资计算记录Mapper接口
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+public interface PerfSalaryMapper extends BaseMapperPlus {
+
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/mapper/PerfTemplateDimensionMapper.java b/klp-perf/src/main/java/com/klp/perf/mapper/PerfTemplateDimensionMapper.java
new file mode 100644
index 000000000..5b076c159
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/mapper/PerfTemplateDimensionMapper.java
@@ -0,0 +1,15 @@
+package com.klp.perf.mapper;
+
+import com.klp.perf.domain.PerfTemplateDimension;
+import com.klp.perf.domain.vo.PerfTemplateDimensionVo;
+import com.klp.common.core.mapper.BaseMapperPlus;
+
+/**
+ * 考核维度明细Mapper接口
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+public interface PerfTemplateDimensionMapper extends BaseMapperPlus {
+
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/service/IPerfAppraisalDetailService.java b/klp-perf/src/main/java/com/klp/perf/service/IPerfAppraisalDetailService.java
new file mode 100644
index 000000000..250edc600
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/service/IPerfAppraisalDetailService.java
@@ -0,0 +1,49 @@
+package com.klp.perf.service;
+
+import com.klp.perf.domain.PerfAppraisalDetail;
+import com.klp.perf.domain.vo.PerfAppraisalDetailVo;
+import com.klp.perf.domain.bo.PerfAppraisalDetailBo;
+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 IPerfAppraisalDetailService {
+
+ /**
+ * 查询考核维度评分明细
+ */
+ PerfAppraisalDetailVo queryById(String id);
+
+ /**
+ * 查询考核维度评分明细列表
+ */
+ TableDataInfo queryPageList(PerfAppraisalDetailBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询考核维度评分明细列表
+ */
+ List queryList(PerfAppraisalDetailBo bo);
+
+ /**
+ * 新增考核维度评分明细
+ */
+ Boolean insertByBo(PerfAppraisalDetailBo bo);
+
+ /**
+ * 修改考核维度评分明细
+ */
+ Boolean updateByBo(PerfAppraisalDetailBo bo);
+
+ /**
+ * 校验并批量删除考核维度评分明细信息
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/service/IPerfAppraisalService.java b/klp-perf/src/main/java/com/klp/perf/service/IPerfAppraisalService.java
new file mode 100644
index 000000000..3eb027634
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/service/IPerfAppraisalService.java
@@ -0,0 +1,49 @@
+package com.klp.perf.service;
+
+import com.klp.perf.domain.PerfAppraisal;
+import com.klp.perf.domain.vo.PerfAppraisalVo;
+import com.klp.perf.domain.bo.PerfAppraisalBo;
+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 IPerfAppraisalService {
+
+ /**
+ * 查询月度绩效考核记录
+ */
+ PerfAppraisalVo queryById(String id);
+
+ /**
+ * 查询月度绩效考核记录列表
+ */
+ TableDataInfo queryPageList(PerfAppraisalBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询月度绩效考核记录列表
+ */
+ List queryList(PerfAppraisalBo bo);
+
+ /**
+ * 新增月度绩效考核记录
+ */
+ Boolean insertByBo(PerfAppraisalBo bo);
+
+ /**
+ * 修改月度绩效考核记录
+ */
+ Boolean updateByBo(PerfAppraisalBo bo);
+
+ /**
+ * 校验并批量删除月度绩效考核记录信息
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/service/IPerfCoeffRangeService.java b/klp-perf/src/main/java/com/klp/perf/service/IPerfCoeffRangeService.java
new file mode 100644
index 000000000..df9646da2
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/service/IPerfCoeffRangeService.java
@@ -0,0 +1,49 @@
+package com.klp.perf.service;
+
+import com.klp.perf.domain.PerfCoeffRange;
+import com.klp.perf.domain.vo.PerfCoeffRangeVo;
+import com.klp.perf.domain.bo.PerfCoeffRangeBo;
+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 IPerfCoeffRangeService {
+
+ /**
+ * 查询绩效系数换算
+ */
+ PerfCoeffRangeVo queryById(String id);
+
+ /**
+ * 查询绩效系数换算列表
+ */
+ TableDataInfo queryPageList(PerfCoeffRangeBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询绩效系数换算列表
+ */
+ List queryList(PerfCoeffRangeBo bo);
+
+ /**
+ * 新增绩效系数换算
+ */
+ Boolean insertByBo(PerfCoeffRangeBo bo);
+
+ /**
+ * 修改绩效系数换算
+ */
+ Boolean updateByBo(PerfCoeffRangeBo bo);
+
+ /**
+ * 校验并批量删除绩效系数换算信息
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/service/IPerfDeptConfigService.java b/klp-perf/src/main/java/com/klp/perf/service/IPerfDeptConfigService.java
new file mode 100644
index 000000000..e3123e34b
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/service/IPerfDeptConfigService.java
@@ -0,0 +1,49 @@
+package com.klp.perf.service;
+
+import com.klp.perf.domain.PerfDeptConfig;
+import com.klp.perf.domain.vo.PerfDeptConfigVo;
+import com.klp.perf.domain.bo.PerfDeptConfigBo;
+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 IPerfDeptConfigService {
+
+ /**
+ * 查询车间考核参数配置
+ */
+ PerfDeptConfigVo queryById(String id);
+
+ /**
+ * 查询车间考核参数配置列表
+ */
+ TableDataInfo queryPageList(PerfDeptConfigBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询车间考核参数配置列表
+ */
+ List queryList(PerfDeptConfigBo bo);
+
+ /**
+ * 新增车间考核参数配置
+ */
+ Boolean insertByBo(PerfDeptConfigBo bo);
+
+ /**
+ * 修改车间考核参数配置
+ */
+ Boolean updateByBo(PerfDeptConfigBo bo);
+
+ /**
+ * 校验并批量删除车间考核参数配置信息
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/service/IPerfDeptItemConfigService.java b/klp-perf/src/main/java/com/klp/perf/service/IPerfDeptItemConfigService.java
new file mode 100644
index 000000000..ab590509a
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/service/IPerfDeptItemConfigService.java
@@ -0,0 +1,49 @@
+package com.klp.perf.service;
+
+import com.klp.perf.domain.PerfDeptItemConfig;
+import com.klp.perf.domain.vo.PerfDeptItemConfigVo;
+import com.klp.perf.domain.bo.PerfDeptItemConfigBo;
+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 IPerfDeptItemConfigService {
+
+ /**
+ * 查询车间扣款/奖励项目配置
+ */
+ PerfDeptItemConfigVo queryById(String id);
+
+ /**
+ * 查询车间扣款/奖励项目配置列表
+ */
+ TableDataInfo queryPageList(PerfDeptItemConfigBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询车间扣款/奖励项目配置列表
+ */
+ List queryList(PerfDeptItemConfigBo bo);
+
+ /**
+ * 新增车间扣款/奖励项目配置
+ */
+ Boolean insertByBo(PerfDeptItemConfigBo bo);
+
+ /**
+ * 修改车间扣款/奖励项目配置
+ */
+ Boolean updateByBo(PerfDeptItemConfigBo bo);
+
+ /**
+ * 校验并批量删除车间扣款/奖励项目配置信息
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/service/IPerfDeptSummaryService.java b/klp-perf/src/main/java/com/klp/perf/service/IPerfDeptSummaryService.java
new file mode 100644
index 000000000..956abdee8
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/service/IPerfDeptSummaryService.java
@@ -0,0 +1,49 @@
+package com.klp.perf.service;
+
+import com.klp.perf.domain.PerfDeptSummary;
+import com.klp.perf.domain.vo.PerfDeptSummaryVo;
+import com.klp.perf.domain.bo.PerfDeptSummaryBo;
+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 IPerfDeptSummaryService {
+
+ /**
+ * 查询车间月度汇总
+ */
+ PerfDeptSummaryVo queryById(String id);
+
+ /**
+ * 查询车间月度汇总列表
+ */
+ TableDataInfo queryPageList(PerfDeptSummaryBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询车间月度汇总列表
+ */
+ List queryList(PerfDeptSummaryBo bo);
+
+ /**
+ * 新增车间月度汇总
+ */
+ Boolean insertByBo(PerfDeptSummaryBo bo);
+
+ /**
+ * 修改车间月度汇总
+ */
+ Boolean updateByBo(PerfDeptSummaryBo bo);
+
+ /**
+ * 校验并批量删除车间月度汇总信息
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
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
new file mode 100644
index 000000000..fde95e435
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/service/IPerfEmployeeInfoService.java
@@ -0,0 +1,49 @@
+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(String 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/IPerfPositionTemplateService.java b/klp-perf/src/main/java/com/klp/perf/service/IPerfPositionTemplateService.java
new file mode 100644
index 000000000..f3cec7de6
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/service/IPerfPositionTemplateService.java
@@ -0,0 +1,49 @@
+package com.klp.perf.service;
+
+import com.klp.perf.domain.PerfPositionTemplate;
+import com.klp.perf.domain.vo.PerfPositionTemplateVo;
+import com.klp.perf.domain.bo.PerfPositionTemplateBo;
+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 IPerfPositionTemplateService {
+
+ /**
+ * 查询岗位绩效考核模板
+ */
+ PerfPositionTemplateVo queryById(String id);
+
+ /**
+ * 查询岗位绩效考核模板列表
+ */
+ TableDataInfo queryPageList(PerfPositionTemplateBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询岗位绩效考核模板列表
+ */
+ List queryList(PerfPositionTemplateBo bo);
+
+ /**
+ * 新增岗位绩效考核模板
+ */
+ Boolean insertByBo(PerfPositionTemplateBo bo);
+
+ /**
+ * 修改岗位绩效考核模板
+ */
+ Boolean updateByBo(PerfPositionTemplateBo bo);
+
+ /**
+ * 校验并批量删除岗位绩效考核模板信息
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/service/IPerfSalaryService.java b/klp-perf/src/main/java/com/klp/perf/service/IPerfSalaryService.java
new file mode 100644
index 000000000..a936dc01e
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/service/IPerfSalaryService.java
@@ -0,0 +1,49 @@
+package com.klp.perf.service;
+
+import com.klp.perf.domain.PerfSalary;
+import com.klp.perf.domain.vo.PerfSalaryVo;
+import com.klp.perf.domain.bo.PerfSalaryBo;
+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 IPerfSalaryService {
+
+ /**
+ * 查询月度薪资计算记录
+ */
+ PerfSalaryVo queryById(String id);
+
+ /**
+ * 查询月度薪资计算记录列表
+ */
+ TableDataInfo queryPageList(PerfSalaryBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询月度薪资计算记录列表
+ */
+ List queryList(PerfSalaryBo bo);
+
+ /**
+ * 新增月度薪资计算记录
+ */
+ Boolean insertByBo(PerfSalaryBo bo);
+
+ /**
+ * 修改月度薪资计算记录
+ */
+ Boolean updateByBo(PerfSalaryBo bo);
+
+ /**
+ * 校验并批量删除月度薪资计算记录信息
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/service/IPerfTemplateDimensionService.java b/klp-perf/src/main/java/com/klp/perf/service/IPerfTemplateDimensionService.java
new file mode 100644
index 000000000..3b2df0bc4
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/service/IPerfTemplateDimensionService.java
@@ -0,0 +1,49 @@
+package com.klp.perf.service;
+
+import com.klp.perf.domain.PerfTemplateDimension;
+import com.klp.perf.domain.vo.PerfTemplateDimensionVo;
+import com.klp.perf.domain.bo.PerfTemplateDimensionBo;
+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 IPerfTemplateDimensionService {
+
+ /**
+ * 查询考核维度明细
+ */
+ PerfTemplateDimensionVo queryById(String id);
+
+ /**
+ * 查询考核维度明细列表
+ */
+ TableDataInfo queryPageList(PerfTemplateDimensionBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询考核维度明细列表
+ */
+ List queryList(PerfTemplateDimensionBo bo);
+
+ /**
+ * 新增考核维度明细
+ */
+ Boolean insertByBo(PerfTemplateDimensionBo bo);
+
+ /**
+ * 修改考核维度明细
+ */
+ Boolean updateByBo(PerfTemplateDimensionBo bo);
+
+ /**
+ * 校验并批量删除考核维度明细信息
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/klp-perf/src/main/java/com/klp/perf/service/impl/PerfAppraisalDetailServiceImpl.java b/klp-perf/src/main/java/com/klp/perf/service/impl/PerfAppraisalDetailServiceImpl.java
new file mode 100644
index 000000000..eba26d299
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/service/impl/PerfAppraisalDetailServiceImpl.java
@@ -0,0 +1,120 @@
+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.PerfAppraisalDetailBo;
+import com.klp.perf.domain.vo.PerfAppraisalDetailVo;
+import com.klp.perf.domain.PerfAppraisalDetail;
+import com.klp.perf.mapper.PerfAppraisalDetailMapper;
+import com.klp.perf.service.IPerfAppraisalDetailService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 考核维度评分明细Service业务层处理
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+@RequiredArgsConstructor
+@Service
+public class PerfAppraisalDetailServiceImpl implements IPerfAppraisalDetailService {
+
+ private final PerfAppraisalDetailMapper baseMapper;
+
+ /**
+ * 查询考核维度评分明细
+ */
+ @Override
+ public PerfAppraisalDetailVo queryById(String id){
+ return baseMapper.selectVoById(id);
+ }
+
+ /**
+ * 查询考核维度评分明细列表
+ */
+ @Override
+ public TableDataInfo queryPageList(PerfAppraisalDetailBo bo, PageQuery pageQuery) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+ return TableDataInfo.build(result);
+ }
+
+ /**
+ * 查询考核维度评分明细列表
+ */
+ @Override
+ public List queryList(PerfAppraisalDetailBo bo) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ return baseMapper.selectVoList(lqw);
+ }
+
+ private LambdaQueryWrapper buildQueryWrapper(PerfAppraisalDetailBo bo) {
+ Map params = bo.getParams();
+ LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
+ lqw.eq(StringUtils.isNotBlank(bo.getAppraisalId()), PerfAppraisalDetail::getAppraisalId, bo.getAppraisalId());
+ lqw.eq(StringUtils.isNotBlank(bo.getDimensionId()), PerfAppraisalDetail::getDimensionId, bo.getDimensionId());
+ lqw.eq(StringUtils.isNotBlank(bo.getSeq()), PerfAppraisalDetail::getSeq, bo.getSeq());
+ lqw.like(StringUtils.isNotBlank(bo.getDimName()), PerfAppraisalDetail::getDimName, bo.getDimName());
+ lqw.eq(StringUtils.isNotBlank(bo.getWeight()), PerfAppraisalDetail::getWeight, bo.getWeight());
+ lqw.eq(StringUtils.isNotBlank(bo.getTargetValue()), PerfAppraisalDetail::getTargetValue, bo.getTargetValue());
+ lqw.eq(StringUtils.isNotBlank(bo.getActualValue()), PerfAppraisalDetail::getActualValue, bo.getActualValue());
+ lqw.eq(bo.getDimScore() != null, PerfAppraisalDetail::getDimScore, bo.getDimScore());
+ lqw.eq(bo.getBonus() != null, PerfAppraisalDetail::getBonus, bo.getBonus());
+ lqw.eq(bo.getPenalty() != null, PerfAppraisalDetail::getPenalty, bo.getPenalty());
+ lqw.eq(StringUtils.isNotBlank(bo.getScoreFormula()), PerfAppraisalDetail::getScoreFormula, bo.getScoreFormula());
+ lqw.eq(StringUtils.isNotBlank(bo.getScoreRule()), PerfAppraisalDetail::getScoreRule, bo.getScoreRule());
+ return lqw;
+ }
+
+ /**
+ * 新增考核维度评分明细
+ */
+ @Override
+ public Boolean insertByBo(PerfAppraisalDetailBo bo) {
+ PerfAppraisalDetail add = BeanUtil.toBean(bo, PerfAppraisalDetail.class);
+ validEntityBeforeSave(add);
+ boolean flag = baseMapper.insert(add) > 0;
+ if (flag) {
+ bo.setId(add.getId());
+ }
+ return flag;
+ }
+
+ /**
+ * 修改考核维度评分明细
+ */
+ @Override
+ public Boolean updateByBo(PerfAppraisalDetailBo bo) {
+ PerfAppraisalDetail update = BeanUtil.toBean(bo, PerfAppraisalDetail.class);
+ validEntityBeforeSave(update);
+ return baseMapper.updateById(update) > 0;
+ }
+
+ /**
+ * 保存前的数据校验
+ */
+ private void validEntityBeforeSave(PerfAppraisalDetail 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/PerfAppraisalServiceImpl.java b/klp-perf/src/main/java/com/klp/perf/service/impl/PerfAppraisalServiceImpl.java
new file mode 100644
index 000000000..126ba9e39
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/service/impl/PerfAppraisalServiceImpl.java
@@ -0,0 +1,121 @@
+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.PerfAppraisalBo;
+import com.klp.perf.domain.vo.PerfAppraisalVo;
+import com.klp.perf.domain.PerfAppraisal;
+import com.klp.perf.mapper.PerfAppraisalMapper;
+import com.klp.perf.service.IPerfAppraisalService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 月度绩效考核记录Service业务层处理
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+@RequiredArgsConstructor
+@Service
+public class PerfAppraisalServiceImpl implements IPerfAppraisalService {
+
+ private final PerfAppraisalMapper baseMapper;
+
+ /**
+ * 查询月度绩效考核记录
+ */
+ @Override
+ public PerfAppraisalVo queryById(String id){
+ return baseMapper.selectVoById(id);
+ }
+
+ /**
+ * 查询月度绩效考核记录列表
+ */
+ @Override
+ public TableDataInfo queryPageList(PerfAppraisalBo bo, PageQuery pageQuery) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+ return TableDataInfo.build(result);
+ }
+
+ /**
+ * 查询月度绩效考核记录列表
+ */
+ @Override
+ public List queryList(PerfAppraisalBo bo) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ return baseMapper.selectVoList(lqw);
+ }
+
+ private LambdaQueryWrapper buildQueryWrapper(PerfAppraisalBo bo) {
+ Map params = bo.getParams();
+ LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
+ lqw.eq(StringUtils.isNotBlank(bo.getEmployeeId()), PerfAppraisal::getEmployeeId, bo.getEmployeeId());
+ lqw.eq(StringUtils.isNotBlank(bo.getDeptId()), PerfAppraisal::getDeptId, bo.getDeptId());
+ lqw.eq(StringUtils.isNotBlank(bo.getTemplateId()), PerfAppraisal::getTemplateId, bo.getTemplateId());
+ lqw.eq(StringUtils.isNotBlank(bo.getPeriod()), PerfAppraisal::getPeriod, bo.getPeriod());
+ lqw.eq(bo.getWeightedScore() != null, PerfAppraisal::getWeightedScore, bo.getWeightedScore());
+ lqw.eq(bo.getBonusScore() != null, PerfAppraisal::getBonusScore, bo.getBonusScore());
+ lqw.eq(bo.getPenaltyScore() != null, PerfAppraisal::getPenaltyScore, bo.getPenaltyScore());
+ lqw.eq(bo.getFinalScore() != null, PerfAppraisal::getFinalScore, bo.getFinalScore());
+ lqw.eq(StringUtils.isNotBlank(bo.getGrade()), PerfAppraisal::getGrade, bo.getGrade());
+ lqw.eq(bo.getPerfCoeff() != null, PerfAppraisal::getPerfCoeff, bo.getPerfCoeff());
+ lqw.eq(bo.getStatus() != null, PerfAppraisal::getStatus, bo.getStatus());
+ lqw.eq(bo.getConfirmedAt() != null, PerfAppraisal::getConfirmedAt, bo.getConfirmedAt());
+ lqw.eq(StringUtils.isNotBlank(bo.getConfirmedBy()), PerfAppraisal::getConfirmedBy, bo.getConfirmedBy());
+ return lqw;
+ }
+
+ /**
+ * 新增月度绩效考核记录
+ */
+ @Override
+ public Boolean insertByBo(PerfAppraisalBo bo) {
+ PerfAppraisal add = BeanUtil.toBean(bo, PerfAppraisal.class);
+ validEntityBeforeSave(add);
+ boolean flag = baseMapper.insert(add) > 0;
+ if (flag) {
+ bo.setId(add.getId());
+ }
+ return flag;
+ }
+
+ /**
+ * 修改月度绩效考核记录
+ */
+ @Override
+ public Boolean updateByBo(PerfAppraisalBo bo) {
+ PerfAppraisal update = BeanUtil.toBean(bo, PerfAppraisal.class);
+ validEntityBeforeSave(update);
+ return baseMapper.updateById(update) > 0;
+ }
+
+ /**
+ * 保存前的数据校验
+ */
+ private void validEntityBeforeSave(PerfAppraisal 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/PerfCoeffRangeServiceImpl.java b/klp-perf/src/main/java/com/klp/perf/service/impl/PerfCoeffRangeServiceImpl.java
new file mode 100644
index 000000000..e88d1a4fe
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/service/impl/PerfCoeffRangeServiceImpl.java
@@ -0,0 +1,115 @@
+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.PerfCoeffRangeBo;
+import com.klp.perf.domain.vo.PerfCoeffRangeVo;
+import com.klp.perf.domain.PerfCoeffRange;
+import com.klp.perf.mapper.PerfCoeffRangeMapper;
+import com.klp.perf.service.IPerfCoeffRangeService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 绩效系数换算Service业务层处理
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+@RequiredArgsConstructor
+@Service
+public class PerfCoeffRangeServiceImpl implements IPerfCoeffRangeService {
+
+ private final PerfCoeffRangeMapper baseMapper;
+
+ /**
+ * 查询绩效系数换算
+ */
+ @Override
+ public PerfCoeffRangeVo queryById(String id){
+ return baseMapper.selectVoById(id);
+ }
+
+ /**
+ * 查询绩效系数换算列表
+ */
+ @Override
+ public TableDataInfo queryPageList(PerfCoeffRangeBo bo, PageQuery pageQuery) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+ return TableDataInfo.build(result);
+ }
+
+ /**
+ * 查询绩效系数换算列表
+ */
+ @Override
+ public List queryList(PerfCoeffRangeBo bo) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ return baseMapper.selectVoList(lqw);
+ }
+
+ private LambdaQueryWrapper buildQueryWrapper(PerfCoeffRangeBo bo) {
+ Map params = bo.getParams();
+ LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
+ lqw.eq(StringUtils.isNotBlank(bo.getGrade()), PerfCoeffRange::getGrade, bo.getGrade());
+ lqw.eq(StringUtils.isNotBlank(bo.getGradeLabel()), PerfCoeffRange::getGradeLabel, bo.getGradeLabel());
+ lqw.eq(bo.getScoreMin() != null, PerfCoeffRange::getScoreMin, bo.getScoreMin());
+ lqw.eq(bo.getScoreMax() != null, PerfCoeffRange::getScoreMax, bo.getScoreMax());
+ lqw.eq(bo.getCoeffMin() != null, PerfCoeffRange::getCoeffMin, bo.getCoeffMin());
+ lqw.eq(bo.getCoeffMax() != null, PerfCoeffRange::getCoeffMax, bo.getCoeffMax());
+ lqw.eq(bo.getSortOrder() != null, PerfCoeffRange::getSortOrder, bo.getSortOrder());
+ return lqw;
+ }
+
+ /**
+ * 新增绩效系数换算
+ */
+ @Override
+ public Boolean insertByBo(PerfCoeffRangeBo bo) {
+ PerfCoeffRange add = BeanUtil.toBean(bo, PerfCoeffRange.class);
+ validEntityBeforeSave(add);
+ boolean flag = baseMapper.insert(add) > 0;
+ if (flag) {
+ bo.setId(add.getId());
+ }
+ return flag;
+ }
+
+ /**
+ * 修改绩效系数换算
+ */
+ @Override
+ public Boolean updateByBo(PerfCoeffRangeBo bo) {
+ PerfCoeffRange update = BeanUtil.toBean(bo, PerfCoeffRange.class);
+ validEntityBeforeSave(update);
+ return baseMapper.updateById(update) > 0;
+ }
+
+ /**
+ * 保存前的数据校验
+ */
+ private void validEntityBeforeSave(PerfCoeffRange 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/PerfDeptConfigServiceImpl.java b/klp-perf/src/main/java/com/klp/perf/service/impl/PerfDeptConfigServiceImpl.java
new file mode 100644
index 000000000..f31d98c97
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/service/impl/PerfDeptConfigServiceImpl.java
@@ -0,0 +1,120 @@
+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.PerfDeptConfigBo;
+import com.klp.perf.domain.vo.PerfDeptConfigVo;
+import com.klp.perf.domain.PerfDeptConfig;
+import com.klp.perf.mapper.PerfDeptConfigMapper;
+import com.klp.perf.service.IPerfDeptConfigService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 车间考核参数配置Service业务层处理
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+@RequiredArgsConstructor
+@Service
+public class PerfDeptConfigServiceImpl implements IPerfDeptConfigService {
+
+ private final PerfDeptConfigMapper baseMapper;
+
+ /**
+ * 查询车间考核参数配置
+ */
+ @Override
+ public PerfDeptConfigVo queryById(String id){
+ return baseMapper.selectVoById(id);
+ }
+
+ /**
+ * 查询车间考核参数配置列表
+ */
+ @Override
+ public TableDataInfo queryPageList(PerfDeptConfigBo bo, PageQuery pageQuery) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+ return TableDataInfo.build(result);
+ }
+
+ /**
+ * 查询车间考核参数配置列表
+ */
+ @Override
+ public List queryList(PerfDeptConfigBo bo) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ return baseMapper.selectVoList(lqw);
+ }
+
+ private LambdaQueryWrapper buildQueryWrapper(PerfDeptConfigBo bo) {
+ Map params = bo.getParams();
+ LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
+ lqw.eq(StringUtils.isNotBlank(bo.getDeptId()), PerfDeptConfig::getDeptId, bo.getDeptId());
+ lqw.eq(bo.getMonthlyProductionTarget() != null, PerfDeptConfig::getMonthlyProductionTarget, bo.getMonthlyProductionTarget());
+ lqw.eq(StringUtils.isNotBlank(bo.getProductionUnit()), PerfDeptConfig::getProductionUnit, bo.getProductionUnit());
+ lqw.eq(bo.getPerfUnitPrice() != null, PerfDeptConfig::getPerfUnitPrice, bo.getPerfUnitPrice());
+ lqw.eq(bo.getProductionShifts() != null, PerfDeptConfig::getProductionShifts, bo.getProductionShifts());
+ lqw.eq(bo.getGuaranteedShifts() != null, PerfDeptConfig::getGuaranteedShifts, bo.getGuaranteedShifts());
+ lqw.eq(bo.getDeptCoeff() != null, PerfDeptConfig::getDeptCoeff, bo.getDeptCoeff());
+ lqw.eq(bo.getSalaryMode() != null, PerfDeptConfig::getSalaryMode, bo.getSalaryMode());
+ lqw.eq(bo.getBaseDivisor() != null, PerfDeptConfig::getBaseDivisor, bo.getBaseDivisor());
+ lqw.eq(bo.getMonth() != null, PerfDeptConfig::getMonth, bo.getMonth());
+ lqw.eq(bo.getCreatedAt() != null, PerfDeptConfig::getCreatedAt, bo.getCreatedAt());
+ lqw.eq(bo.getUpdatedAt() != null, PerfDeptConfig::getUpdatedAt, bo.getUpdatedAt());
+ return lqw;
+ }
+
+ /**
+ * 新增车间考核参数配置
+ */
+ @Override
+ public Boolean insertByBo(PerfDeptConfigBo bo) {
+ PerfDeptConfig add = BeanUtil.toBean(bo, PerfDeptConfig.class);
+ validEntityBeforeSave(add);
+ boolean flag = baseMapper.insert(add) > 0;
+ if (flag) {
+ bo.setId(add.getId());
+ }
+ return flag;
+ }
+
+ /**
+ * 修改车间考核参数配置
+ */
+ @Override
+ public Boolean updateByBo(PerfDeptConfigBo bo) {
+ PerfDeptConfig update = BeanUtil.toBean(bo, PerfDeptConfig.class);
+ validEntityBeforeSave(update);
+ return baseMapper.updateById(update) > 0;
+ }
+
+ /**
+ * 保存前的数据校验
+ */
+ private void validEntityBeforeSave(PerfDeptConfig 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/PerfDeptItemConfigServiceImpl.java b/klp-perf/src/main/java/com/klp/perf/service/impl/PerfDeptItemConfigServiceImpl.java
new file mode 100644
index 000000000..b434b7592
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/service/impl/PerfDeptItemConfigServiceImpl.java
@@ -0,0 +1,114 @@
+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.PerfDeptItemConfigBo;
+import com.klp.perf.domain.vo.PerfDeptItemConfigVo;
+import com.klp.perf.domain.PerfDeptItemConfig;
+import com.klp.perf.mapper.PerfDeptItemConfigMapper;
+import com.klp.perf.service.IPerfDeptItemConfigService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 车间扣款/奖励项目配置Service业务层处理
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+@RequiredArgsConstructor
+@Service
+public class PerfDeptItemConfigServiceImpl implements IPerfDeptItemConfigService {
+
+ private final PerfDeptItemConfigMapper baseMapper;
+
+ /**
+ * 查询车间扣款/奖励项目配置
+ */
+ @Override
+ public PerfDeptItemConfigVo queryById(String id){
+ return baseMapper.selectVoById(id);
+ }
+
+ /**
+ * 查询车间扣款/奖励项目配置列表
+ */
+ @Override
+ public TableDataInfo queryPageList(PerfDeptItemConfigBo bo, PageQuery pageQuery) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+ return TableDataInfo.build(result);
+ }
+
+ /**
+ * 查询车间扣款/奖励项目配置列表
+ */
+ @Override
+ public List queryList(PerfDeptItemConfigBo bo) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ return baseMapper.selectVoList(lqw);
+ }
+
+ private LambdaQueryWrapper buildQueryWrapper(PerfDeptItemConfigBo bo) {
+ Map params = bo.getParams();
+ LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
+ lqw.eq(StringUtils.isNotBlank(bo.getDeptId()), PerfDeptItemConfig::getDeptId, bo.getDeptId());
+ lqw.eq(bo.getItemType() != null, PerfDeptItemConfig::getItemType, bo.getItemType());
+ lqw.like(StringUtils.isNotBlank(bo.getItemName()), PerfDeptItemConfig::getItemName, bo.getItemName());
+ lqw.eq(bo.getSortOrder() != null, PerfDeptItemConfig::getSortOrder, bo.getSortOrder());
+ lqw.eq(bo.getMonth() != null, PerfDeptItemConfig::getMonth, bo.getMonth());
+ lqw.eq(bo.getIsEnabled() != null, PerfDeptItemConfig::getIsEnabled, bo.getIsEnabled());
+ return lqw;
+ }
+
+ /**
+ * 新增车间扣款/奖励项目配置
+ */
+ @Override
+ public Boolean insertByBo(PerfDeptItemConfigBo bo) {
+ PerfDeptItemConfig add = BeanUtil.toBean(bo, PerfDeptItemConfig.class);
+ validEntityBeforeSave(add);
+ boolean flag = baseMapper.insert(add) > 0;
+ if (flag) {
+ bo.setId(add.getId());
+ }
+ return flag;
+ }
+
+ /**
+ * 修改车间扣款/奖励项目配置
+ */
+ @Override
+ public Boolean updateByBo(PerfDeptItemConfigBo bo) {
+ PerfDeptItemConfig update = BeanUtil.toBean(bo, PerfDeptItemConfig.class);
+ validEntityBeforeSave(update);
+ return baseMapper.updateById(update) > 0;
+ }
+
+ /**
+ * 保存前的数据校验
+ */
+ private void validEntityBeforeSave(PerfDeptItemConfig 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/PerfDeptSummaryServiceImpl.java b/klp-perf/src/main/java/com/klp/perf/service/impl/PerfDeptSummaryServiceImpl.java
new file mode 100644
index 000000000..8dc60ce99
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/service/impl/PerfDeptSummaryServiceImpl.java
@@ -0,0 +1,124 @@
+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.PerfDeptSummaryBo;
+import com.klp.perf.domain.vo.PerfDeptSummaryVo;
+import com.klp.perf.domain.PerfDeptSummary;
+import com.klp.perf.mapper.PerfDeptSummaryMapper;
+import com.klp.perf.service.IPerfDeptSummaryService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 车间月度汇总Service业务层处理
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+@RequiredArgsConstructor
+@Service
+public class PerfDeptSummaryServiceImpl implements IPerfDeptSummaryService {
+
+ private final PerfDeptSummaryMapper baseMapper;
+
+ /**
+ * 查询车间月度汇总
+ */
+ @Override
+ public PerfDeptSummaryVo queryById(String id){
+ return baseMapper.selectVoById(id);
+ }
+
+ /**
+ * 查询车间月度汇总列表
+ */
+ @Override
+ public TableDataInfo queryPageList(PerfDeptSummaryBo bo, PageQuery pageQuery) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+ return TableDataInfo.build(result);
+ }
+
+ /**
+ * 查询车间月度汇总列表
+ */
+ @Override
+ public List queryList(PerfDeptSummaryBo bo) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ return baseMapper.selectVoList(lqw);
+ }
+
+ private LambdaQueryWrapper buildQueryWrapper(PerfDeptSummaryBo bo) {
+ Map params = bo.getParams();
+ LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
+ lqw.eq(StringUtils.isNotBlank(bo.getDeptId()), PerfDeptSummary::getDeptId, bo.getDeptId());
+ lqw.eq(StringUtils.isNotBlank(bo.getPeriod()), PerfDeptSummary::getPeriod, bo.getPeriod());
+ lqw.eq(bo.getTotalEmployees() != null, PerfDeptSummary::getTotalEmployees, bo.getTotalEmployees());
+ lqw.eq(bo.getTotalCoeffSum() != null, PerfDeptSummary::getTotalCoeffSum, bo.getTotalCoeffSum());
+ lqw.eq(bo.getAvgPerfScore() != null, PerfDeptSummary::getAvgPerfScore, bo.getAvgPerfScore());
+ lqw.eq(bo.getAvgPerfCoeff() != null, PerfDeptSummary::getAvgPerfCoeff, bo.getAvgPerfCoeff());
+ lqw.eq(bo.getTotalBaseSalary() != null, PerfDeptSummary::getTotalBaseSalary, bo.getTotalBaseSalary());
+ lqw.eq(bo.getTotalPerfWage() != null, PerfDeptSummary::getTotalPerfWage, bo.getTotalPerfWage());
+ lqw.eq(bo.getTotalDeductions() != null, PerfDeptSummary::getTotalDeductions, bo.getTotalDeductions());
+ lqw.eq(bo.getTotalBonuses() != null, PerfDeptSummary::getTotalBonuses, bo.getTotalBonuses());
+ lqw.eq(bo.getTotalOther() != null, PerfDeptSummary::getTotalOther, bo.getTotalOther());
+ lqw.eq(bo.getTotalActualSalary() != null, PerfDeptSummary::getTotalActualSalary, bo.getTotalActualSalary());
+ lqw.eq(bo.getAvgActualSalary() != null, PerfDeptSummary::getAvgActualSalary, bo.getAvgActualSalary());
+ lqw.eq(bo.getMonthlyProduction() != null, PerfDeptSummary::getMonthlyProduction, bo.getMonthlyProduction());
+ lqw.eq(bo.getUnitPrice() != null, PerfDeptSummary::getUnitPrice, bo.getUnitPrice());
+ lqw.eq(bo.getStatus() != null, PerfDeptSummary::getStatus, bo.getStatus());
+ return lqw;
+ }
+
+ /**
+ * 新增车间月度汇总
+ */
+ @Override
+ public Boolean insertByBo(PerfDeptSummaryBo bo) {
+ PerfDeptSummary add = BeanUtil.toBean(bo, PerfDeptSummary.class);
+ validEntityBeforeSave(add);
+ boolean flag = baseMapper.insert(add) > 0;
+ if (flag) {
+ bo.setId(add.getId());
+ }
+ return flag;
+ }
+
+ /**
+ * 修改车间月度汇总
+ */
+ @Override
+ public Boolean updateByBo(PerfDeptSummaryBo bo) {
+ PerfDeptSummary update = BeanUtil.toBean(bo, PerfDeptSummary.class);
+ validEntityBeforeSave(update);
+ return baseMapper.updateById(update) > 0;
+ }
+
+ /**
+ * 保存前的数据校验
+ */
+ private void validEntityBeforeSave(PerfDeptSummary 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/PerfEmployeeInfoServiceImpl.java b/klp-perf/src/main/java/com/klp/perf/service/impl/PerfEmployeeInfoServiceImpl.java
new file mode 100644
index 000000000..51e2628a7
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/service/impl/PerfEmployeeInfoServiceImpl.java
@@ -0,0 +1,115 @@
+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(String 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(StringUtils.isNotBlank(bo.getEmployeeId()), PerfEmployeeInfo::getEmployeeId, bo.getEmployeeId());
+ lqw.eq(StringUtils.isNotBlank(bo.getDeptId()), 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
new file mode 100644
index 000000000..b385d1126
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/service/impl/PerfPositionTemplateServiceImpl.java
@@ -0,0 +1,112 @@
+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.PerfPositionTemplateBo;
+import com.klp.perf.domain.vo.PerfPositionTemplateVo;
+import com.klp.perf.domain.PerfPositionTemplate;
+import com.klp.perf.mapper.PerfPositionTemplateMapper;
+import com.klp.perf.service.IPerfPositionTemplateService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 岗位绩效考核模板Service业务层处理
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+@RequiredArgsConstructor
+@Service
+public class PerfPositionTemplateServiceImpl implements IPerfPositionTemplateService {
+
+ private final PerfPositionTemplateMapper baseMapper;
+
+ /**
+ * 查询岗位绩效考核模板
+ */
+ @Override
+ public PerfPositionTemplateVo queryById(String id){
+ return baseMapper.selectVoById(id);
+ }
+
+ /**
+ * 查询岗位绩效考核模板列表
+ */
+ @Override
+ public TableDataInfo queryPageList(PerfPositionTemplateBo bo, PageQuery pageQuery) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+ return TableDataInfo.build(result);
+ }
+
+ /**
+ * 查询岗位绩效考核模板列表
+ */
+ @Override
+ public List queryList(PerfPositionTemplateBo bo) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ return baseMapper.selectVoList(lqw);
+ }
+
+ private LambdaQueryWrapper buildQueryWrapper(PerfPositionTemplateBo bo) {
+ Map params = bo.getParams();
+ LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
+ lqw.eq(StringUtils.isNotBlank(bo.getDeptId()), PerfPositionTemplate::getDeptId, bo.getDeptId());
+ lqw.like(StringUtils.isNotBlank(bo.getPositionName()), PerfPositionTemplate::getPositionName, bo.getPositionName());
+ lqw.eq(StringUtils.isNotBlank(bo.getTitle()), PerfPositionTemplate::getTitle, bo.getTitle());
+ lqw.eq(bo.getIsEnabled() != null, PerfPositionTemplate::getIsEnabled, bo.getIsEnabled());
+ return lqw;
+ }
+
+ /**
+ * 新增岗位绩效考核模板
+ */
+ @Override
+ public Boolean insertByBo(PerfPositionTemplateBo bo) {
+ PerfPositionTemplate add = BeanUtil.toBean(bo, PerfPositionTemplate.class);
+ validEntityBeforeSave(add);
+ boolean flag = baseMapper.insert(add) > 0;
+ if (flag) {
+ bo.setId(add.getId());
+ }
+ return flag;
+ }
+
+ /**
+ * 修改岗位绩效考核模板
+ */
+ @Override
+ public Boolean updateByBo(PerfPositionTemplateBo bo) {
+ PerfPositionTemplate update = BeanUtil.toBean(bo, PerfPositionTemplate.class);
+ validEntityBeforeSave(update);
+ return baseMapper.updateById(update) > 0;
+ }
+
+ /**
+ * 保存前的数据校验
+ */
+ private void validEntityBeforeSave(PerfPositionTemplate 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/PerfSalaryServiceImpl.java b/klp-perf/src/main/java/com/klp/perf/service/impl/PerfSalaryServiceImpl.java
new file mode 100644
index 000000000..a2ce47ab0
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/service/impl/PerfSalaryServiceImpl.java
@@ -0,0 +1,137 @@
+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.PerfSalaryBo;
+import com.klp.perf.domain.vo.PerfSalaryVo;
+import com.klp.perf.domain.PerfSalary;
+import com.klp.perf.mapper.PerfSalaryMapper;
+import com.klp.perf.service.IPerfSalaryService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 月度薪资计算记录Service业务层处理
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+@RequiredArgsConstructor
+@Service
+public class PerfSalaryServiceImpl implements IPerfSalaryService {
+
+ private final PerfSalaryMapper baseMapper;
+
+ /**
+ * 查询月度薪资计算记录
+ */
+ @Override
+ public PerfSalaryVo queryById(String id){
+ return baseMapper.selectVoById(id);
+ }
+
+ /**
+ * 查询月度薪资计算记录列表
+ */
+ @Override
+ public TableDataInfo queryPageList(PerfSalaryBo bo, PageQuery pageQuery) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+ return TableDataInfo.build(result);
+ }
+
+ /**
+ * 查询月度薪资计算记录列表
+ */
+ @Override
+ public List queryList(PerfSalaryBo bo) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ return baseMapper.selectVoList(lqw);
+ }
+
+ private LambdaQueryWrapper buildQueryWrapper(PerfSalaryBo bo) {
+ Map params = bo.getParams();
+ LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
+ lqw.eq(StringUtils.isNotBlank(bo.getEmployeeId()), PerfSalary::getEmployeeId, bo.getEmployeeId());
+ lqw.eq(StringUtils.isNotBlank(bo.getDeptId()), PerfSalary::getDeptId, bo.getDeptId());
+ lqw.eq(StringUtils.isNotBlank(bo.getAppraisalId()), PerfSalary::getAppraisalId, bo.getAppraisalId());
+ lqw.eq(StringUtils.isNotBlank(bo.getPeriod()), PerfSalary::getPeriod, bo.getPeriod());
+ lqw.eq(bo.getBaseSalary() != null, PerfSalary::getBaseSalary, bo.getBaseSalary());
+ lqw.eq(bo.getPerfBase() != null, PerfSalary::getPerfBase, bo.getPerfBase());
+ lqw.eq(bo.getPerfScore() != null, PerfSalary::getPerfScore, bo.getPerfScore());
+ lqw.eq(bo.getPerfCoeff() != null, PerfSalary::getPerfCoeff, bo.getPerfCoeff());
+ lqw.eq(bo.getDeptCoeff() != null, PerfSalary::getDeptCoeff, bo.getDeptCoeff());
+ lqw.eq(bo.getPerfWage() != null, PerfSalary::getPerfWage, bo.getPerfWage());
+ lqw.eq(bo.getPosCoeff() != null, PerfSalary::getPosCoeff, bo.getPosCoeff());
+ lqw.eq(bo.getFixedCoeff() != null, PerfSalary::getFixedCoeff, bo.getFixedCoeff());
+ lqw.eq(bo.getAdjCoeff() != null, PerfSalary::getAdjCoeff, bo.getAdjCoeff());
+ lqw.eq(bo.getAdjCoeffManual() != null, PerfSalary::getAdjCoeffManual, bo.getAdjCoeffManual());
+ lqw.eq(bo.getTotalCoeff() != null, PerfSalary::getTotalCoeff, bo.getTotalCoeff());
+ lqw.eq(StringUtils.isNotBlank(bo.getDeductionsJson()), PerfSalary::getDeductionsJson, bo.getDeductionsJson());
+ lqw.eq(bo.getDeductionsTotal() != null, PerfSalary::getDeductionsTotal, bo.getDeductionsTotal());
+ lqw.eq(StringUtils.isNotBlank(bo.getBonusesJson()), PerfSalary::getBonusesJson, bo.getBonusesJson());
+ lqw.eq(bo.getBonusesTotal() != null, PerfSalary::getBonusesTotal, bo.getBonusesTotal());
+ lqw.eq(bo.getOtherAmount() != null, PerfSalary::getOtherAmount, bo.getOtherAmount());
+ lqw.eq(bo.getActualSalary() != null, PerfSalary::getActualSalary, bo.getActualSalary());
+ lqw.eq(bo.getFixedSalaryRef() != null, PerfSalary::getFixedSalaryRef, bo.getFixedSalaryRef());
+ lqw.eq(bo.getAdjSalaryRef() != null, PerfSalary::getAdjSalaryRef, bo.getAdjSalaryRef());
+ lqw.eq(bo.getBaoPerShiftRef() != null, PerfSalary::getBaoPerShiftRef, bo.getBaoPerShiftRef());
+ lqw.eq(bo.getBaoSalaryRef() != null, PerfSalary::getBaoSalaryRef, bo.getBaoSalaryRef());
+ lqw.eq(bo.getTotalSalaryRef() != null, PerfSalary::getTotalSalaryRef, bo.getTotalSalaryRef());
+ lqw.eq(bo.getStatus() != null, PerfSalary::getStatus, bo.getStatus());
+ lqw.eq(bo.getConfirmedAt() != null, PerfSalary::getConfirmedAt, bo.getConfirmedAt());
+ lqw.eq(StringUtils.isNotBlank(bo.getConfirmedBy()), PerfSalary::getConfirmedBy, bo.getConfirmedBy());
+ return lqw;
+ }
+
+ /**
+ * 新增月度薪资计算记录
+ */
+ @Override
+ public Boolean insertByBo(PerfSalaryBo bo) {
+ PerfSalary add = BeanUtil.toBean(bo, PerfSalary.class);
+ validEntityBeforeSave(add);
+ boolean flag = baseMapper.insert(add) > 0;
+ if (flag) {
+ bo.setId(add.getId());
+ }
+ return flag;
+ }
+
+ /**
+ * 修改月度薪资计算记录
+ */
+ @Override
+ public Boolean updateByBo(PerfSalaryBo bo) {
+ PerfSalary update = BeanUtil.toBean(bo, PerfSalary.class);
+ validEntityBeforeSave(update);
+ return baseMapper.updateById(update) > 0;
+ }
+
+ /**
+ * 保存前的数据校验
+ */
+ private void validEntityBeforeSave(PerfSalary 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/PerfTemplateDimensionServiceImpl.java b/klp-perf/src/main/java/com/klp/perf/service/impl/PerfTemplateDimensionServiceImpl.java
new file mode 100644
index 000000000..4fd81b947
--- /dev/null
+++ b/klp-perf/src/main/java/com/klp/perf/service/impl/PerfTemplateDimensionServiceImpl.java
@@ -0,0 +1,117 @@
+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.PerfTemplateDimensionBo;
+import com.klp.perf.domain.vo.PerfTemplateDimensionVo;
+import com.klp.perf.domain.PerfTemplateDimension;
+import com.klp.perf.mapper.PerfTemplateDimensionMapper;
+import com.klp.perf.service.IPerfTemplateDimensionService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 考核维度明细Service业务层处理
+ *
+ * @author klp
+ * @date 2026-07-07
+ */
+@RequiredArgsConstructor
+@Service
+public class PerfTemplateDimensionServiceImpl implements IPerfTemplateDimensionService {
+
+ private final PerfTemplateDimensionMapper baseMapper;
+
+ /**
+ * 查询考核维度明细
+ */
+ @Override
+ public PerfTemplateDimensionVo queryById(String id){
+ return baseMapper.selectVoById(id);
+ }
+
+ /**
+ * 查询考核维度明细列表
+ */
+ @Override
+ public TableDataInfo queryPageList(PerfTemplateDimensionBo bo, PageQuery pageQuery) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+ return TableDataInfo.build(result);
+ }
+
+ /**
+ * 查询考核维度明细列表
+ */
+ @Override
+ public List queryList(PerfTemplateDimensionBo bo) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ return baseMapper.selectVoList(lqw);
+ }
+
+ private LambdaQueryWrapper buildQueryWrapper(PerfTemplateDimensionBo bo) {
+ Map params = bo.getParams();
+ LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
+ lqw.eq(StringUtils.isNotBlank(bo.getTemplateId()), PerfTemplateDimension::getTemplateId, bo.getTemplateId());
+ lqw.eq(StringUtils.isNotBlank(bo.getSeq()), PerfTemplateDimension::getSeq, bo.getSeq());
+ lqw.like(StringUtils.isNotBlank(bo.getDimName()), PerfTemplateDimension::getDimName, bo.getDimName());
+ lqw.eq(StringUtils.isNotBlank(bo.getWeight()), PerfTemplateDimension::getWeight, bo.getWeight());
+ lqw.eq(StringUtils.isNotBlank(bo.getIndicator()), PerfTemplateDimension::getIndicator, bo.getIndicator());
+ lqw.eq(StringUtils.isNotBlank(bo.getTargetValue()), PerfTemplateDimension::getTargetValue, bo.getTargetValue());
+ lqw.eq(StringUtils.isNotBlank(bo.getScoreFormula()), PerfTemplateDimension::getScoreFormula, bo.getScoreFormula());
+ lqw.eq(StringUtils.isNotBlank(bo.getScoreRule()), PerfTemplateDimension::getScoreRule, bo.getScoreRule());
+ lqw.eq(bo.getIsEnabled() != null, PerfTemplateDimension::getIsEnabled, bo.getIsEnabled());
+ return lqw;
+ }
+
+ /**
+ * 新增考核维度明细
+ */
+ @Override
+ public Boolean insertByBo(PerfTemplateDimensionBo bo) {
+ PerfTemplateDimension add = BeanUtil.toBean(bo, PerfTemplateDimension.class);
+ validEntityBeforeSave(add);
+ boolean flag = baseMapper.insert(add) > 0;
+ if (flag) {
+ bo.setId(add.getId());
+ }
+ return flag;
+ }
+
+ /**
+ * 修改考核维度明细
+ */
+ @Override
+ public Boolean updateByBo(PerfTemplateDimensionBo bo) {
+ PerfTemplateDimension update = BeanUtil.toBean(bo, PerfTemplateDimension.class);
+ validEntityBeforeSave(update);
+ return baseMapper.updateById(update) > 0;
+ }
+
+ /**
+ * 保存前的数据校验
+ */
+ private void validEntityBeforeSave(PerfTemplateDimension 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/PerfAppraisalDetailMapper.xml b/klp-perf/src/main/resources/mapper/perf/PerfAppraisalDetailMapper.xml
new file mode 100644
index 000000000..bfefc06c8
--- /dev/null
+++ b/klp-perf/src/main/resources/mapper/perf/PerfAppraisalDetailMapper.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/klp-perf/src/main/resources/mapper/perf/PerfAppraisalMapper.xml b/klp-perf/src/main/resources/mapper/perf/PerfAppraisalMapper.xml
new file mode 100644
index 000000000..bdcffde34
--- /dev/null
+++ b/klp-perf/src/main/resources/mapper/perf/PerfAppraisalMapper.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/klp-perf/src/main/resources/mapper/perf/PerfCoeffRangeMapper.xml b/klp-perf/src/main/resources/mapper/perf/PerfCoeffRangeMapper.xml
new file mode 100644
index 000000000..7614df6bd
--- /dev/null
+++ b/klp-perf/src/main/resources/mapper/perf/PerfCoeffRangeMapper.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/klp-perf/src/main/resources/mapper/perf/PerfDeptConfigMapper.xml b/klp-perf/src/main/resources/mapper/perf/PerfDeptConfigMapper.xml
new file mode 100644
index 000000000..0c96822b8
--- /dev/null
+++ b/klp-perf/src/main/resources/mapper/perf/PerfDeptConfigMapper.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/klp-perf/src/main/resources/mapper/perf/PerfDeptItemConfigMapper.xml b/klp-perf/src/main/resources/mapper/perf/PerfDeptItemConfigMapper.xml
new file mode 100644
index 000000000..6e8e16306
--- /dev/null
+++ b/klp-perf/src/main/resources/mapper/perf/PerfDeptItemConfigMapper.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/klp-perf/src/main/resources/mapper/perf/PerfDeptSummaryMapper.xml b/klp-perf/src/main/resources/mapper/perf/PerfDeptSummaryMapper.xml
new file mode 100644
index 000000000..bf29d200a
--- /dev/null
+++ b/klp-perf/src/main/resources/mapper/perf/PerfDeptSummaryMapper.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/klp-perf/src/main/resources/mapper/perf/PerfEmployeeInfoMapper.xml b/klp-perf/src/main/resources/mapper/perf/PerfEmployeeInfoMapper.xml
new file mode 100644
index 000000000..17bb24965
--- /dev/null
+++ b/klp-perf/src/main/resources/mapper/perf/PerfEmployeeInfoMapper.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/klp-perf/src/main/resources/mapper/perf/PerfPositionTemplateMapper.xml b/klp-perf/src/main/resources/mapper/perf/PerfPositionTemplateMapper.xml
new file mode 100644
index 000000000..d2b27d489
--- /dev/null
+++ b/klp-perf/src/main/resources/mapper/perf/PerfPositionTemplateMapper.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/klp-perf/src/main/resources/mapper/perf/PerfSalaryMapper.xml b/klp-perf/src/main/resources/mapper/perf/PerfSalaryMapper.xml
new file mode 100644
index 000000000..778538fd1
--- /dev/null
+++ b/klp-perf/src/main/resources/mapper/perf/PerfSalaryMapper.xml
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/klp-perf/src/main/resources/mapper/perf/PerfTemplateDimensionMapper.xml b/klp-perf/src/main/resources/mapper/perf/PerfTemplateDimensionMapper.xml
new file mode 100644
index 000000000..75dd0838c
--- /dev/null
+++ b/klp-perf/src/main/resources/mapper/perf/PerfTemplateDimensionMapper.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pom.xml b/pom.xml
index 5702e179e..ccddf4446 100644
--- a/pom.xml
+++ b/pom.xml
@@ -428,6 +428,13 @@
klp-pltcm
${klp-flowable-plus.version}
+
+
+
+ com.klp
+ klp-perf
+ ${klp-flowable-plus.version}
+
@@ -457,6 +464,7 @@
klp-flow
klp-pt
klp-pltcm
+ klp-perf
pom