feat: 新增产线管理、批量操作与绩效考核自动化功能

1.  新增部门产线绑定字段,优化部门列表展示
2.  添加薪资、考核、维度明细的批量新增/修改接口与实现
3.  新增绩效考核得分计算引擎与WMS数据拉取服务
4.  新增一键生成薪资与考核记录的弹窗功能
5.  优化配置页面UI与新增批量导入项目功能
6.  隐藏 coil/ship.vue 页面的校正按钮
This commit is contained in:
砂糖
2026-07-11 14:53:42 +08:00
parent 3c506e8ca6
commit 43069d8dc6
26 changed files with 1545 additions and 147 deletions

View File

@@ -71,8 +71,18 @@ public class PerfAppraisalController extends BaseController {
@Log(title = "月度绩效考核记录", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody PerfAppraisalBo bo) {
return toAjax(iPerfAppraisalService.insertByBo(bo));
public R<Long> add(@Validated(AddGroup.class) @RequestBody PerfAppraisalBo bo) {
PerfAppraisalBo result = iPerfAppraisalService.insertByBo(bo);
return R.ok(result.getId());
}
/**
* 批量新增月度绩效考核记录(含维度明细)
*/
@Log(title = "月度绩效考核记录", businessType = BusinessType.INSERT)
@PostMapping("/batch")
public R<Integer> addBatch(@RequestBody List<PerfAppraisalBo> list) {
return R.ok(iPerfAppraisalService.batchInsertByBo(list));
}
/**

View File

@@ -85,6 +85,15 @@ public class PerfAppraisalDetailController extends BaseController {
return toAjax(iPerfAppraisalDetailService.updateByBo(bo));
}
/**
* 批量修改考核维度评分明细
*/
@Log(title = "考核维度评分明细", businessType = BusinessType.UPDATE)
@PutMapping("/batch")
public R<Integer> editBatch(@RequestBody List<PerfAppraisalDetailBo> list) {
return R.ok(iPerfAppraisalDetailService.batchUpdateByBo(list));
}
/**
* 删除考核维度评分明细
*

View File

@@ -75,6 +75,15 @@ public class PerfSalaryController extends BaseController {
return toAjax(iPerfSalaryService.insertByBo(bo));
}
/**
* 批量新增月度薪资计算记录
*/
@Log(title = "月度薪资计算记录", businessType = BusinessType.INSERT)
@PostMapping("/batch")
public R<Integer> addBatch(@RequestBody List<PerfSalaryBo> list) {
return R.ok(iPerfSalaryService.batchInsertByBo(list));
}
/**
* 修改月度薪资计算记录
*/

View File

@@ -40,6 +40,10 @@ public class PerfDept extends BaseEntity {
* 状态0正常 1停用
*/
private String status;
/**
* 产线
*/
private String productionLine;
/**
* 删除标志0=正常 1=已删除)
*/

View File

@@ -7,6 +7,7 @@ import javax.validation.constraints.*;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonFormat;
/**
@@ -95,5 +96,9 @@ public class PerfAppraisalBo extends BaseEntity {
*/
private String remark;
/**
* 考核维度明细(批量新增时使用)
*/
private List<PerfAppraisalDetailBo> details;
}

View File

@@ -42,6 +42,11 @@ public class PerfDeptBo extends BaseEntity {
*/
private String status;
/**
* 产线
*/
private String productionLine;
/**
* 备注
*/

View File

@@ -50,6 +50,12 @@ public class PerfDeptVo {
@ExcelDictFormat(readConverterExp = "0=正常,1=停用")
private String status;
/**
* 产线
*/
@ExcelProperty(value = "产线")
private String productionLine;
/**
* 备注
*/

View File

@@ -46,4 +46,8 @@ public interface IPerfAppraisalDetailService {
* 校验并批量删除考核维度评分明细信息
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 批量修改考核维度评分明细
*/
int batchUpdateByBo(List<PerfAppraisalDetailBo> list);
}

View File

@@ -35,7 +35,7 @@ public interface IPerfAppraisalService {
/**
* 新增月度绩效考核记录
*/
Boolean insertByBo(PerfAppraisalBo bo);
PerfAppraisalBo insertByBo(PerfAppraisalBo bo);
/**
* 修改月度绩效考核记录
@@ -46,4 +46,8 @@ public interface IPerfAppraisalService {
* 校验并批量删除月度绩效考核记录信息
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 批量新增月度绩效考核记录(含维度明细)
*/
int batchInsertByBo(List<PerfAppraisalBo> list);
}

View File

@@ -46,4 +46,8 @@ public interface IPerfSalaryService {
* 校验并批量删除月度薪资计算记录信息
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 批量新增月度薪资计算记录
*/
int batchInsertByBo(List<PerfSalaryBo> list);
}

View File

@@ -102,6 +102,20 @@ public class PerfAppraisalDetailServiceImpl implements IPerfAppraisalDetailServi
return baseMapper.updateById(update) > 0;
}
/**
* 批量修改考核维度评分明细
*/
@Override
public int batchUpdateByBo(List<PerfAppraisalDetailBo> list) {
if (list == null || list.isEmpty()) return 0;
int count = 0;
for (PerfAppraisalDetailBo bo : list) {
PerfAppraisalDetail update = BeanUtil.toBean(bo, PerfAppraisalDetail.class);
if (baseMapper.updateById(update) > 0) count++;
}
return count;
}
/**
* 保存前的数据校验
*/

View File

@@ -13,6 +13,9 @@ 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.mapper.PerfAppraisalDetailMapper;
import com.klp.perf.domain.PerfAppraisalDetail;
import com.klp.perf.domain.bo.PerfAppraisalDetailBo;
import com.klp.perf.service.IPerfAppraisalService;
import java.util.List;
@@ -30,6 +33,7 @@ import java.util.Collection;
public class PerfAppraisalServiceImpl implements IPerfAppraisalService {
private final PerfAppraisalMapper baseMapper;
private final PerfAppraisalDetailMapper detailMapper;
/**
* 查询月度绩效考核记录
@@ -81,14 +85,14 @@ public class PerfAppraisalServiceImpl implements IPerfAppraisalService {
* 新增月度绩效考核记录
*/
@Override
public Boolean insertByBo(PerfAppraisalBo bo) {
public PerfAppraisalBo 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;
return bo;
}
/**
@@ -101,6 +105,35 @@ public class PerfAppraisalServiceImpl implements IPerfAppraisalService {
return baseMapper.updateById(update) > 0;
}
/**
* 批量新增月度绩效考核记录(含维度明细)
*/
@Override
public int batchInsertByBo(List<PerfAppraisalBo> list) {
if (list == null || list.isEmpty()) {
return 0;
}
int count = 0;
for (PerfAppraisalBo bo : list) {
PerfAppraisal entity = BeanUtil.toBean(bo, PerfAppraisal.class);
validEntityBeforeSave(entity);
if (baseMapper.insert(entity) > 0) {
bo.setId(entity.getId());
count++;
// 插入维度明细
List<PerfAppraisalDetailBo> details = bo.getDetails();
if (details != null && !details.isEmpty()) {
for (PerfAppraisalDetailBo detailBo : details) {
detailBo.setAppraisalId(entity.getId());
PerfAppraisalDetail detail = BeanUtil.toBean(detailBo, PerfAppraisalDetail.class);
detailMapper.insert(detail);
}
}
}
}
return count;
}
/**
* 保存前的数据校验
*/

View File

@@ -152,6 +152,26 @@ public class PerfSalaryServiceImpl implements IPerfSalaryService {
return baseMapper.updateById(update) > 0;
}
/**
* 批量新增月度薪资计算记录
*/
@Override
public int batchInsertByBo(List<PerfSalaryBo> list) {
if (list == null || list.isEmpty()) {
return 0;
}
int count = 0;
for (PerfSalaryBo bo : list) {
PerfSalary entity = BeanUtil.toBean(bo, PerfSalary.class);
validEntityBeforeSave(entity);
if (baseMapper.insert(entity) > 0) {
bo.setId(entity.getId());
count++;
}
}
return count;
}
/**
* 保存前的数据校验
*/

View File

@@ -10,6 +10,7 @@
<result property="orderNum" column="order_num"/>
<result property="hasBaoSalary" column="has_bao_salary"/>
<result property="status" column="status"/>
<result property="productionLine" column="production_line"/>
<result property="delFlag" column="del_flag"/>
<result property="remark" column="remark"/>
<result property="createBy" column="create_by"/>