Commit 25f030ddcfdec420bd97eb2b4ce0e215f8021c6b

Authored by YunaiV
1 parent b572669c

fix(hrm): 统一定薪调薪工资项范围

关联:https://t.zsxq.com/hhClm
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/salary/employee/HrmSalaryEmployeeInfoServiceImpl.java
... ... @@ -265,7 +265,7 @@ public class HrmSalaryEmployeeInfoServiceImpl implements HrmSalaryEmployeeInfoSe
265 265  
266 266 @Override
267 267 public List<HrmSalaryOptionDO> getSalaryImportOptionList() {
268   - List<HrmSalaryOptionDO> options = salaryOptionService.getSalaryOptionList(false);
  268 + List<HrmSalaryOptionDO> options = salaryOptionService.getSalaryOptionList(true);
269 269 return filterList(options, option -> ObjectUtil.notEqual(option.getParentCode(), ROOT_PARENT_CODE)
270 270 && Boolean.TRUE.equals(option.getCalculateEnabled())
271 271 && !HrmSalaryOptionCodeEnum.EMPLOYEE_INFO_IMPORT_EXCLUDED_PARENT_CODES.contains(option.getParentCode()));
... ... @@ -762,7 +762,7 @@ public class HrmSalaryEmployeeInfoServiceImpl implements HrmSalaryEmployeeInfoSe
762 762 }
763 763  
764 764 private Map<Integer, HrmSalaryOptionDO> getSalaryOptionMap() {
765   - return convertMap(salaryOptionService.getSalaryOptionList(false), HrmSalaryOptionDO::getCode);
  765 + return convertMap(salaryOptionService.getSalaryOptionList(true), HrmSalaryOptionDO::getCode);
766 766 }
767 767  
768 768 private HrmSalaryOptionValueVO buildSalaryOptionValueVO(HrmSalaryEmployeeInfoDO.SalaryOption optionDO) {
... ...
yudao-module-hrm/src/test/java/cn/iocoder/yudao/module/hrm/service/salary/config/HrmSalaryOptionServiceImplTest.java
... ... @@ -154,13 +154,37 @@ public class HrmSalaryOptionServiceImplTest extends BaseDbUnitTest {
154 154 salaryOptionMapper.insert(createSalaryOption(100101, 100, "个人社保", false));
155 155 salaryOptionMapper.insert(createSalaryOption(20, 0, "津贴", false).setEnabled(false));
156 156 salaryOptionMapper.insert(createSalaryOption(20101, 20, "交通补贴", false));
  157 + salaryOptionMapper.insert(createSalaryOption(180, 0, "加班工资", true));
  158 + salaryOptionMapper.insert(createSalaryOption(180101, 180, "加班工资", true));
  159 + salaryOptionMapper.insert(createSalaryOption(190, 0, "考勤扣款", true));
  160 + for (int code = 190101; code <= 190106; code++) {
  161 + salaryOptionMapper.insert(createSalaryOption(code, 190, "考勤扣款", true).setVisible(false));
  162 + }
  163 + salaryOptionMapper.insert(createSalaryOption(10102, 10, "停用工资项", false).setEnabled(false));
  164 + salaryOptionMapper.insert(createSalaryOption(10103, 10, "隐藏工资项", false).setVisible(false));
157 165  
158 166 // 调用
159 167 List<HrmSalaryOptionDO> options = salaryOptionService.getSalaryOptionList(true);
160 168  
161 169 // 断言
162   - assertEquals(1, options.size());
  170 + assertEquals(2, options.size());
163 171 assertEquals(Integer.valueOf(10101), options.get(0).getCode());
  172 + assertEquals(Integer.valueOf(10103), options.get(1).getCode());
  173 + }
  174 +
  175 + @Test
  176 + public void testGetSalaryOptionList_adjustableCategoryDisabled() {
  177 + // mock 数据
  178 + salaryOptionMapper.insert(createSalaryOption(10, 0, "基本工资", false).setEnabled(false));
  179 + salaryOptionMapper.insert(createSalaryOption(10101, 10, "基本工资", false));
  180 + salaryOptionMapper.insert(createSalaryOption(180, 0, "加班工资", true));
  181 + salaryOptionMapper.insert(createSalaryOption(180101, 180, "加班工资", true));
  182 +
  183 + // 调用
  184 + List<HrmSalaryOptionDO> options = salaryOptionService.getSalaryOptionList(true);
  185 +
  186 + // 断言
  187 + assertTrue(options.isEmpty());
164 188 }
165 189  
166 190 @Test
... ...
yudao-module-hrm/src/test/java/cn/iocoder/yudao/module/hrm/service/salary/employee/HrmSalaryEmployeeInfoServiceImplTest.java
... ... @@ -40,6 +40,7 @@ import java.util.Map;
40 40 import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException;
41 41 import static cn.iocoder.yudao.module.hrm.enums.ErrorCodeConstants.SALARY_CHANGE_EFFECT_DATE_INVALID;
42 42 import static cn.iocoder.yudao.module.hrm.enums.ErrorCodeConstants.SALARY_CHANGE_RECORD_STATUS_INVALID;
  43 +import static cn.iocoder.yudao.module.hrm.enums.ErrorCodeConstants.SALARY_DATA_ILLEGAL;
43 44 import static org.junit.jupiter.api.Assertions.assertEquals;
44 45 import static org.junit.jupiter.api.Assertions.assertNotNull;
45 46 import static org.junit.jupiter.api.Assertions.assertTrue;
... ... @@ -166,6 +167,50 @@ public class HrmSalaryEmployeeInfoServiceImplTest extends BaseDbUnitTest {
166 167 }
167 168  
168 169 @Test
  170 + public void testUpdateSalaryEmployeeInfo_salaryOptionInvalid() {
  171 + // mock 数据
  172 + mockSalaryOptions();
  173 + HrmEmployeeDO employee = mockEmployee(1L, HrmEmployeeStatusEnum.REGULAR.getStatus());
  174 + // 准备参数
  175 + HrmSalaryEmployeeInfoUpdateReqVO reqVO = buildSetSalaryReqVO(employee.getId(),
  176 + new BigDecimal("8000"), new BigDecimal("2000"), new BigDecimal("6000"));
  177 +
  178 + // 调用,并断言加班工资、考勤扣款不能作为定薪项
  179 + for (Integer code : Arrays.asList(180101, 190101, 190102, 190103, 190104, 190105, 190106)) {
  180 + reqVO.setSalaryOptions(Collections.singletonList(
  181 + optionValue(code, "系统计算项", new BigDecimal("100"))));
  182 + assertServiceException(() -> salaryEmployeeInfoService.updateSalaryEmployeeInfo(reqVO),
  183 + SALARY_DATA_ILLEGAL);
  184 + }
  185 +
  186 + // 断言未写入薪资档案和调薪记录
  187 + assertEquals(0L, salaryEmployeeInfoMapper.selectCount());
  188 + verify(salaryChangeRecordService, never()).createSalaryChangeRecord(any());
  189 + }
  190 +
  191 + @Test
  192 + public void testUpdateSalaryEmployeeInfo_probationSalaryOptionInvalid() {
  193 + // mock 数据
  194 + mockSalaryOptions();
  195 + HrmEmployeeDO employee = mockEmployee(1L, HrmEmployeeStatusEnum.REGULAR.getStatus());
  196 + // 准备参数
  197 + HrmSalaryEmployeeInfoUpdateReqVO reqVO = buildSetSalaryReqVO(employee.getId(),
  198 + new BigDecimal("8000"), new BigDecimal("2000"), new BigDecimal("6000"));
  199 +
  200 + // 调用,并断言加班工资、考勤扣款不能作为定薪项
  201 + for (Integer code : Arrays.asList(180101, 190101, 190102, 190103, 190104, 190105, 190106)) {
  202 + reqVO.setProbationSalaryOptions(Collections.singletonList(
  203 + optionValue(code, "系统计算项", new BigDecimal("100"))));
  204 + assertServiceException(() -> salaryEmployeeInfoService.updateSalaryEmployeeInfo(reqVO),
  205 + SALARY_DATA_ILLEGAL);
  206 + }
  207 +
  208 + // 断言未写入薪资档案和调薪记录
  209 + assertEquals(0L, salaryEmployeeInfoMapper.selectCount());
  210 + verify(salaryChangeRecordService, never()).createSalaryChangeRecord(any());
  211 + }
  212 +
  213 + @Test
169 214 public void testUpdateSalaryEmployeeInfo_adjustmentPending() {
170 215 // mock 数据
171 216 mockSalaryOptions();
... ... @@ -317,7 +362,7 @@ public class HrmSalaryEmployeeInfoServiceImplTest extends BaseDbUnitTest {
317 362 public void testGetSalaryImportOptionList() {
318 363 // mock 数据
319 364 List<HrmSalaryOptionDO> options = buildSalaryOptions();
320   - when(salaryOptionService.getSalaryOptionList(false)).thenReturn(options);
  365 + when(salaryOptionService.getSalaryOptionList(true)).thenReturn(options);
321 366  
322 367 // 调用
323 368 List<HrmSalaryOptionDO> result =
... ... @@ -435,7 +480,7 @@ public class HrmSalaryEmployeeInfoServiceImplTest extends BaseDbUnitTest {
435 480 }
436 481  
437 482 private void mockSalaryOptions() {
438   - when(salaryOptionService.getSalaryOptionList(false))
  483 + when(salaryOptionService.getSalaryOptionList(true))
439 484 .thenReturn(buildSalaryOptions());
440 485 }
441 486  
... ...