package com.engine.salary.service.impl; import com.alibaba.fastjson.JSON; import com.api.formmode.mybatis.util.SqlProxyHandle; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.encrypt.EncryptUtil; import com.engine.salary.entity.siaccount.param.BalanceAccountBaseParam; import com.engine.salary.entity.siaccount.param.InspectAccountParam; import com.engine.salary.entity.siarchives.po.InsuranceArchivesEmployeePO; import com.engine.salary.entity.siarchives.po.InsuranceArchivesFundSchemePO; import com.engine.salary.entity.siarchives.po.InsuranceArchivesOtherSchemePO; import com.engine.salary.entity.siarchives.po.InsuranceArchivesSocialSchemePO; import com.engine.salary.entity.sicategory.po.ICategoryPO; import com.engine.salary.entity.sischeme.po.InsuranceSchemeDetailPO; import com.engine.salary.enums.sicategory.IsPaymentEnum; import com.engine.salary.enums.sicategory.PaymentScopeEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.siaccount.InsuranceAccountDetailMapper; import com.engine.salary.mapper.siarchives.FundSchemeMapper; import com.engine.salary.mapper.siarchives.OtherSchemeMapper; import com.engine.salary.mapper.siarchives.SocialSchemeMapper; import com.engine.salary.mapper.sicategory.ICategoryMapper; import com.engine.salary.mapper.sischeme.InsuranceSchemeDetailMapper; import com.engine.salary.service.SIAccountService; import com.engine.salary.service.SIBalanceService; 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 org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import weaver.hrm.User; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; /** * @Author: sy * @Description: 福利台账-补差实现类 * @Date: 2022/12/8 **/ public class SIBalanceServiceImpl extends Service implements SIBalanceService { private InsuranceAccountDetailMapper getInsuranceAccountDetailMapper() { return SqlProxyHandle.getProxy(InsuranceAccountDetailMapper.class); } private SIAccountService getSIAccountService(User user) { return ServiceUtil.getService(SIAccountServiceImpl.class, user); } private SocialSchemeMapper getSocialSchemeMapper() { return MapperProxyFactory.getProxy(SocialSchemeMapper.class); } private FundSchemeMapper getFundSchemeMapper() { return MapperProxyFactory.getProxy(FundSchemeMapper.class); } private OtherSchemeMapper getOtherSchemeMapper() { return MapperProxyFactory.getProxy(OtherSchemeMapper.class); } private ICategoryMapper getICategoryMapper() { return MapperProxyFactory.getProxy(ICategoryMapper.class); } private InsuranceSchemeDetailMapper getInsuranceSchemeDetailMapper() { return MapperProxyFactory.getProxy(InsuranceSchemeDetailMapper.class); } private EncryptUtil encryptUtil = new EncryptUtil(); @Override public void del(InspectAccountParam param, Long employeeId) { //入参判断 if (CollectionUtils.isEmpty(param.getIds()) || param.getPaymentOrganization() == null || param.getBillMonth() == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "参数错误")); } //根据id删除 List> partition = Lists.partition((List) param.getIds(), 100); partition.forEach(getInsuranceAccountDetailMapper()::batchDelAccountDetailsByIds); //刷新bill_batch表中统计信息 getSIAccountService(user).refreshBillBatch(param.getPaymentOrganization(), param.getBillMonth()); } /** * 获取待编辑的补差费用相关福利项 */ @Override public List> getPaymentGroup(BalanceAccountBaseParam param) { Long paymentOrganization = param.getPaymentOrganization(); Long employeeId = param.getEmployeeId(); InsuranceArchivesSocialSchemePO socialSchemePO = new InsuranceArchivesSocialSchemePO(); InsuranceArchivesFundSchemePO fundSchemePO = new InsuranceArchivesFundSchemePO(); InsuranceArchivesOtherSchemePO otherSchemePO = new InsuranceArchivesOtherSchemePO(); List socialSchemePOList = getSocialSchemeMapper().getSocialByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() .employeeId(employeeId) .paymentOrganization(paymentOrganization) .build()); if (socialSchemePOList.size() > 0) { encryptUtil.decryptList(socialSchemePOList, InsuranceArchivesSocialSchemePO.class); socialSchemePO = socialSchemePOList.get(0); } List fundSchemePOList = getFundSchemeMapper().getFundByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() .employeeId(employeeId) .paymentOrganization(paymentOrganization) .build()); if (fundSchemePOList.size() > 0) { encryptUtil.decryptList(fundSchemePOList, InsuranceArchivesFundSchemePO.class); fundSchemePO = fundSchemePOList.get(0); } List otherSchemePOList = getOtherSchemeMapper().getOtherByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() .employeeId(employeeId) .paymentOrganization(paymentOrganization) .build()); if (otherSchemePOList.size() > 0) { encryptUtil.decryptList(otherSchemePOList, InsuranceArchivesOtherSchemePO.class); otherSchemePO = otherSchemePOList.get(0); } List allCategoryList = getICategoryMapper().listAll(); Map categoryNameMap = SalaryEntityUtil.convert2Map(allCategoryList, ICategoryPO::getId, ICategoryPO::getInsuranceName); Map welfareTypeMap = SalaryEntityUtil.convert2Map(allCategoryList, ICategoryPO::getId, ICategoryPO::getWelfareType); List> resultList = new ArrayList<>(); if (socialSchemePO != null && StringUtils.isNotBlank(socialSchemePO.getSocialPaymentBaseString())) { Map socialMap = JSON.parseObject(socialSchemePO.getSocialPaymentBaseString(), new HashMap().getClass()); //查询该福利方案下开启缴纳的福利项 List insuranceIdAndScopeList = payInsuranceIdAndScopeList(socialSchemePO.getSocialSchemeId()); socialMap.forEach((k, v) -> { String welfareTypeName = welfareTypeMap.get(Long.valueOf(k)) == 1 ? "社保" : (welfareTypeMap.get(Long.valueOf(k)) == 2 ? "公积金" : "企业年金及其它福利" ); if (insuranceIdAndScopeList.contains(k + "-" + PaymentScopeEnum.SCOPE_COMPANY.getValue())) { Map comMap = new HashMap<>(); comMap.put("title", welfareTypeName + "公司" + "缴纳"); comMap.put("insuranceId", k); comMap.put("insuranceName", categoryNameMap.get(Long.valueOf(k))); comMap.put("paymentScope", "公司"); resultList.add(comMap); } if (insuranceIdAndScopeList.contains(k + "-" + PaymentScopeEnum.SCOPE_PERSON.getValue())) { Map perMap = new HashMap<>(); perMap.put("title", welfareTypeName + "个人" + "缴纳"); perMap.put("insuranceId", k); perMap.put("insuranceName", categoryNameMap.get(Long.valueOf(k))); perMap.put("paymentScope", "个人"); resultList.add(perMap); } }); } if (fundSchemePO != null && StringUtils.isNotBlank(fundSchemePO.getFundPaymentBaseString())) { Map fundMap = JSON.parseObject(fundSchemePO.getFundPaymentBaseString(), new HashMap().getClass()); //查询该福利方案下开启缴纳的福利项 List insuranceIdAndScopeList = payInsuranceIdAndScopeList(fundSchemePO.getFundSchemeId()); fundMap.forEach((k, v) -> { String welfareTypeName = welfareTypeMap.get(Long.valueOf(k)) == 1 ? "社保" : (welfareTypeMap.get(Long.valueOf(k)) == 2 ? "公积金" : "企业年金及其它福利" ); if (insuranceIdAndScopeList.contains(k + "-" + PaymentScopeEnum.SCOPE_COMPANY.getValue())) { Map comMap = new HashMap<>(); comMap.put("title", welfareTypeName + "公司" + "缴纳"); comMap.put("insuranceId", k); comMap.put("insuranceName", categoryNameMap.get(Long.valueOf(k))); comMap.put("paymentScope", "公司"); resultList.add(comMap); } if (insuranceIdAndScopeList.contains(k + "-" + PaymentScopeEnum.SCOPE_PERSON.getValue())) { Map perMap = new HashMap<>(); perMap.put("title", welfareTypeName + "个人" + "缴纳"); perMap.put("insuranceId", k); perMap.put("insuranceName", categoryNameMap.get(Long.valueOf(k))); perMap.put("paymentScope", "个人"); resultList.add(perMap); } }); } if (otherSchemePO != null && StringUtils.isNotBlank(otherSchemePO.getOtherPaymentBaseString())) { Map otherMap = JSON.parseObject(otherSchemePO.getOtherPaymentBaseString(), new HashMap().getClass()); //查询该福利方案下开启缴纳的福利项 List insuranceIdAndScopeList = payInsuranceIdAndScopeList(otherSchemePO.getOtherSchemeId()); otherMap.forEach((k, v) -> { String welfareTypeName = welfareTypeMap.get(Long.valueOf(k)) == 1 ? "社保" : (welfareTypeMap.get(Long.valueOf(k)) == 2 ? "公积金" : "企业年金及其它福利" ); if (insuranceIdAndScopeList.contains(k + "-" + PaymentScopeEnum.SCOPE_COMPANY.getValue())) { Map comMap = new HashMap<>(); comMap.put("title", welfareTypeName + "公司" + "缴纳"); comMap.put("insuranceId", k); comMap.put("insuranceName", categoryNameMap.get(Long.valueOf(k))); comMap.put("paymentScope", "公司"); resultList.add(comMap); } if (insuranceIdAndScopeList.contains(k + "-" + PaymentScopeEnum.SCOPE_PERSON.getValue())) { Map perMap = new HashMap<>(); perMap.put("title", welfareTypeName + "个人" + "缴纳"); perMap.put("insuranceId", k); perMap.put("insuranceName", categoryNameMap.get(Long.valueOf(k))); perMap.put("paymentScope", "个人"); resultList.add(perMap); } }); } return resultList; } @Override public void addNewBalance(BalanceAccountBaseParam param) { } public List payInsuranceIdAndScopeList(Long socialSchemeId) { //查询该福利方案下开启缴纳的福利项 List detailPOS = getInsuranceSchemeDetailMapper().queryListBySchemeId(socialSchemeId); List insuranceIdList = new ArrayList<>(); if (detailPOS != null && detailPOS.size() > 0) { //开启缴纳的 insuranceIdList = detailPOS.stream().filter(f -> f.getIsPayment().equals(IsPaymentEnum.YES.getValue())).map(m -> { return m.getInsuranceId() .toString() + "-" + m.getPaymentScope().toString(); }).collect(Collectors.toList()); } return insuranceIdList; } }