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.*; /** * 薪资账套的累计字段对应 *

Copyright: Copyright (c) 2023

*

Company: 泛微软件

* * @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 listBySalarySobIds(Collection salarySobIds) { if (CollectionUtils.isEmpty(salarySobIds)) { return new ArrayList<>(); } return getSalarySobAddUpRuleMapper().listSome(SalarySobAddUpRulePO.builder().salarySobIds(salarySobIds).build()); } @Override public List listSalarySobAddUpRuleDTO(Long salarySobId) { List resultList = Lists.newArrayList(); // 查询薪资账套 SalarySobPO salarySob = getSalarySobService(user).getById(salarySobId); // 薪资账套的收入所得项目 Integer incomeCategoryId = salarySob.getIncomeCategory(); // 薪资账套的薪资项目 List salarySobItems = getSalarySobItemService(user).listBySalarySobId(salarySobId); // 薪资账套的回算薪资项目 List salarySobBackItems = getSalarySobBackItemService(user).listBySalarySobId(salarySobId); // 薪资项目 Set salaryItemIds = Sets.newHashSet(); salaryItemIds.addAll(SalaryEntityUtil.properties(salarySobItems, SalarySobItemPO::getSalaryItemId)); salaryItemIds.addAll(SalaryEntityUtil.properties(salarySobBackItems, SalarySobBackItemPO::getSalaryItemId)); List salaryItems = getSalaryItemService(user).listByIds(salaryItemIds); Map idKeySalaryItemMap = SalaryEntityUtil.convert2Map(salaryItems, SalaryItemPO::getId); // 薪资账套的已经存在的对应关系 List salarySobAddUpRulePOS = listBySalarySobIds(Collections.singleton(salarySobId)); Map 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 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 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 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 salarySobIds) { if (CollectionUtils.isNotEmpty(salarySobIds)) { getSalarySobAddUpRuleMapper().deleteBySalarySobIds(salarySobIds); } } @Override public void saveBatch(List salarySobAddUpRules) { if (CollectionUtils.isNotEmpty(salarySobAddUpRules)) { salarySobAddUpRules.forEach(o -> getSalarySobAddUpRuleMapper().insertIgnoreNull(o)); } } }