175 lines
8.9 KiB
Java
175 lines
8.9 KiB
Java
package com.engine.salary.service.impl;
|
|
|
|
import com.engine.common.util.ServiceUtil;
|
|
import com.engine.core.impl.Service;
|
|
import com.engine.salary.annotation.SalaryFormulaVar;
|
|
import com.engine.salary.constant.SalaryDefaultTenantConstant;
|
|
import com.engine.salary.entity.datacollection.AddUpSituation;
|
|
import com.engine.salary.entity.salaryitem.po.SalaryItemPO;
|
|
import com.engine.salary.entity.salarysob.dto.SalarySobAddUpRuleDTO;
|
|
import com.engine.salary.entity.salarysob.param.SalarySobAddUpRuleSaveParam;
|
|
import com.engine.salary.entity.salarysob.po.SalarySobAddUpRulePO;
|
|
import com.engine.salary.entity.salarysob.po.SalarySobBackItemPO;
|
|
import com.engine.salary.entity.salarysob.po.SalarySobItemPO;
|
|
import com.engine.salary.entity.salarysob.po.SalarySobPO;
|
|
import com.engine.salary.enums.salarysob.IncomeCategoryEnum;
|
|
import com.engine.salary.enums.sicategory.DeleteTypeEnum;
|
|
import com.engine.salary.mapper.salarysob.SalarySobAddUpRuleMapper;
|
|
import com.engine.salary.service.*;
|
|
import com.engine.salary.util.SalaryEntityUtil;
|
|
import com.engine.salary.util.SalaryI18nUtil;
|
|
import com.engine.salary.util.db.MapperProxyFactory;
|
|
import com.google.common.collect.Lists;
|
|
import com.google.common.collect.Maps;
|
|
import com.google.common.collect.Sets;
|
|
import dm.jdbc.util.IdGenerator;
|
|
import org.apache.commons.collections4.CollectionUtils;
|
|
import weaver.hrm.User;
|
|
|
|
import java.lang.reflect.Field;
|
|
import java.util.*;
|
|
|
|
/**
|
|
* 薪资账套的累计字段对应
|
|
* <p>Copyright: Copyright (c) 2023</p>
|
|
* <p>Company: 泛微软件</p>
|
|
*
|
|
* @author qiantao
|
|
* @version 1.0
|
|
**/
|
|
public class SalarySobAddUpRuleServiceImpl extends Service implements SalarySobAddUpRuleService {
|
|
|
|
private SalarySobAddUpRuleMapper getSalarySobAddUpRuleMapper() {
|
|
return MapperProxyFactory.getProxy(SalarySobAddUpRuleMapper.class);
|
|
}
|
|
|
|
private SalaryItemService getSalaryItemService(User user) {
|
|
return ServiceUtil.getService(SalaryItemServiceImpl.class, user);
|
|
}
|
|
|
|
private SalarySobService getSalarySobService(User user) {
|
|
return ServiceUtil.getService(SalarySobServiceImpl.class, user);
|
|
}
|
|
|
|
private SalarySobItemService getSalarySobItemService(User user) {
|
|
return ServiceUtil.getService(SalarySobItemServiceImpl.class, user);
|
|
}
|
|
|
|
private SalarySobBackItemService getSalarySobBackItemService(User user) {
|
|
return ServiceUtil.getService(SalarySobBackItemServiceImpl.class, user);
|
|
}
|
|
|
|
@Override
|
|
public List<SalarySobAddUpRulePO> listBySalarySobIds(Collection<Long> salarySobIds) {
|
|
if (CollectionUtils.isEmpty(salarySobIds)) {
|
|
return new ArrayList<>();
|
|
}
|
|
return getSalarySobAddUpRuleMapper().listSome(SalarySobAddUpRulePO.builder().salarySobIds(salarySobIds).build());
|
|
}
|
|
|
|
@Override
|
|
public List<SalarySobAddUpRuleDTO> listSalarySobAddUpRuleDTO(Long salarySobId) {
|
|
List<SalarySobAddUpRuleDTO> resultList = Lists.newArrayList();
|
|
// 查询薪资账套
|
|
SalarySobPO salarySob = getSalarySobService(user).getById(salarySobId);
|
|
// 薪资账套的收入所得项目
|
|
Integer incomeCategoryId = salarySob.getIncomeCategory();
|
|
// 薪资账套的薪资项目
|
|
List<SalarySobItemPO> salarySobItems = getSalarySobItemService(user).listBySalarySobId(salarySobId);
|
|
// 薪资账套的回算薪资项目
|
|
List<SalarySobBackItemPO> salarySobBackItems = getSalarySobBackItemService(user).listBySalarySobId(salarySobId);
|
|
// 薪资项目
|
|
Set<Long> salaryItemIds = Sets.newHashSet();
|
|
salaryItemIds.addAll(SalaryEntityUtil.properties(salarySobItems, SalarySobItemPO::getSalaryItemId));
|
|
salaryItemIds.addAll(SalaryEntityUtil.properties(salarySobBackItems, SalarySobBackItemPO::getSalaryItemId));
|
|
List<SalaryItemPO> salaryItems = getSalaryItemService(user).listByIds(salaryItemIds);
|
|
Map<Long, SalaryItemPO> idKeySalaryItemMap = SalaryEntityUtil.convert2Map(salaryItems, SalaryItemPO::getId);
|
|
// 薪资账套的已经存在的对应关系
|
|
List<SalarySobAddUpRulePO> salarySobAddUpRulePOS = listBySalarySobIds(Collections.singleton(salarySobId));
|
|
Map<String, Long> salarySobAddUpMap = SalaryEntityUtil.convert2Map(salarySobAddUpRulePOS,
|
|
e -> e.getIncomeCategory() + "-" + e.getAddUpColumnDataIndex(), SalarySobAddUpRulePO::getSalaryItemId);
|
|
|
|
IncomeCategoryEnum incomeCategoryEnum = IncomeCategoryEnum.parseByValue(incomeCategoryId);
|
|
if (incomeCategoryEnum != IncomeCategoryEnum.WAGES_AND_SALARIES
|
|
&& incomeCategoryEnum != IncomeCategoryEnum.INCOME_FOR_INSURANCE_SALESMAN
|
|
&& incomeCategoryEnum != IncomeCategoryEnum.INCOME_FOR_SECURITIES_BROKER
|
|
&& incomeCategoryEnum != IncomeCategoryEnum.REMUNERATION_FOR_OTHER_CONTINUOUS_LABOR) {
|
|
return resultList;
|
|
}
|
|
List<SalarySobAddUpRuleDTO.AddUpRuleDTO> addUpRules = Lists.newArrayList();
|
|
Field[] declaredFields = AddUpSituation.class.getDeclaredFields();
|
|
for (Field declaredField : declaredFields) {
|
|
if (!declaredField.isAnnotationPresent(SalaryFormulaVar.class)) {
|
|
continue;
|
|
}
|
|
SalaryFormulaVar annotation = declaredField.getAnnotation(SalaryFormulaVar.class);
|
|
SalarySobAddUpRuleDTO.AddUpRuleDTO addUpRuleDTO = new SalarySobAddUpRuleDTO.AddUpRuleDTO();
|
|
addUpRuleDTO.setId(IdGenerator.generate());
|
|
addUpRuleDTO.setAddUpColumnName(SalaryI18nUtil.getI18nLabel(annotation.labelId(), annotation.defaultLabel()));
|
|
addUpRuleDTO.setAddUpColumnDataIndex(declaredField.getName());
|
|
addUpRuleDTO.setSalaryItem(Collections.emptyList());
|
|
addUpRuleDTO.setCanEdit(true);
|
|
|
|
Long salaryItemId = salarySobAddUpMap.get(incomeCategoryId + "-" + declaredField.getName());
|
|
SalaryItemPO salaryItem = idKeySalaryItemMap.get(salaryItemId);
|
|
if (Objects.nonNull(salaryItem)) {
|
|
Map<String, Object> dataMap = Maps.newHashMap();
|
|
dataMap.put("id", salaryItem.getId().toString());
|
|
dataMap.put("name", salaryItem.getName());
|
|
dataMap.put("icon", "Icon-N-Salary-item-management");
|
|
addUpRuleDTO.setSalaryItem(Collections.singletonList(dataMap));
|
|
}
|
|
addUpRules.add(addUpRuleDTO);
|
|
}
|
|
SalarySobAddUpRuleDTO salarySobAddUpRuleDTO = new SalarySobAddUpRuleDTO();
|
|
salarySobAddUpRuleDTO.setIncomeCategoryId(incomeCategoryId.toString());
|
|
salarySobAddUpRuleDTO.setIncomeCategoryName(SalaryI18nUtil.getI18nLabel(incomeCategoryEnum.getLabelId(), incomeCategoryEnum.getDefaultLabel()));
|
|
salarySobAddUpRuleDTO.setAddUpRules(addUpRules);
|
|
resultList.add(salarySobAddUpRuleDTO);
|
|
return resultList;
|
|
}
|
|
|
|
@Override
|
|
public void saveByParam(SalarySobAddUpRuleSaveParam saveParam) {
|
|
// 校验参数是否合法
|
|
// 根据保存参数构建出po
|
|
Date now = new Date();
|
|
List<SalarySobAddUpRulePO> salarySobAddUpRulePOS = Lists.newArrayList();
|
|
for (SalarySobAddUpRuleSaveParam.AddUpRuleIncomeCategoryParam incomeCategoryParam : saveParam.getIncomeCategoryParams()) {
|
|
for (SalarySobAddUpRuleSaveParam.AddUpRuleParam addUpRuleParam : incomeCategoryParam.getAddUpRuleParams()) {
|
|
SalarySobAddUpRulePO salarySobAddUpRulePO = new SalarySobAddUpRulePO();
|
|
salarySobAddUpRulePO.setId(IdGenerator.generate());
|
|
salarySobAddUpRulePO.setSalarySobId(saveParam.getSalarySobId());
|
|
salarySobAddUpRulePO.setIncomeCategory(incomeCategoryParam.getIncomeCategory());
|
|
salarySobAddUpRulePO.setSalaryItemId(addUpRuleParam.getSalaryItemId());
|
|
salarySobAddUpRulePO.setAddUpColumnDataIndex(addUpRuleParam.getAddUpColumnDataIndex());
|
|
salarySobAddUpRulePO.setTenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY);
|
|
salarySobAddUpRulePO.setDeleteType(DeleteTypeEnum.NOT_DELETED.getValue());
|
|
salarySobAddUpRulePO.setCreator((long) user.getUID());
|
|
salarySobAddUpRulePO.setCreateTime(now);
|
|
salarySobAddUpRulePO.setUpdateTime(now);
|
|
salarySobAddUpRulePOS.add(salarySobAddUpRulePO);
|
|
}
|
|
}
|
|
// 删除原来的配置,保存新的
|
|
deleteBySalarySobIds(Collections.singleton(saveParam.getSalarySobId()));
|
|
if (CollectionUtils.isNotEmpty(salarySobAddUpRulePOS)) {
|
|
saveBatch(salarySobAddUpRulePOS);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void deleteBySalarySobIds(Collection<Long> salarySobIds) {
|
|
if (CollectionUtils.isNotEmpty(salarySobIds)) {
|
|
getSalarySobAddUpRuleMapper().deleteBySalarySobIds(salarySobIds);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void saveBatch(List<SalarySobAddUpRulePO> salarySobAddUpRules) {
|
|
if (CollectionUtils.isNotEmpty(salarySobAddUpRules)) {
|
|
salarySobAddUpRules.forEach(o -> getSalarySobAddUpRuleMapper().insertIgnoreNull(o));
|
|
}
|
|
}
|
|
}
|