package com.engine.salary.service.impl; import com.engine.core.impl.Service; import com.engine.salary.biz.SISchemeBiz; import com.engine.salary.cmd.sischeme.*; import com.engine.salary.entity.sicategory.po.ICategoryPO; import com.engine.salary.entity.sischeme.dto.InsuranceSchemeListDTO; import com.engine.salary.entity.sischeme.param.InsuranceSchemeParam; import com.engine.salary.entity.sischeme.po.InsuranceSchemeDetailPO; import com.engine.salary.entity.sischeme.po.InsuranceSchemePO; import com.engine.salary.enums.sicategory.DeleteTypeEnum; import com.engine.salary.enums.sicategory.IsPaymentEnum; import com.engine.salary.enums.sicategory.PaymentTypeEnum; import com.engine.salary.mapper.sicategory.ICategoryMapper; import com.engine.salary.mapper.sischeme.InsuranceSchemeDetailMapper; import com.engine.salary.mapper.sischeme.InsuranceSchemeMapper; import com.engine.salary.service.SISchemeService; import com.engine.salary.util.SalaryAssert; import com.engine.salary.util.SalaryEnumUtil; import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.PageUtil; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import java.util.*; import java.util.stream.Collectors; /** * @Author weaver_cl * @Description: TODO * @Date 2022/3/7 * @Version V1.0 **/ public class SISchemeServiceImpl extends Service implements SISchemeService { @Override public Map getForm(Map params) { return commandExecutor.execute(new SISchemeGetFormCmd(params,user)); } @Override public Map insertScheme(Map params) { return commandExecutor.execute(new SISchemeInsertCmd(params,user)); } @Override public Map update(Map params) { return commandExecutor.execute(new SISchemeUpdateCmd(params,user)); } @Override public Map delete(Map params) { return commandExecutor.execute(new SISchemeDeleteCmd(params,user)); } @Override public Map copyScheme(Map params) { return commandExecutor.execute(new SISchemeCopyCmd(params,user)); } @Override public List queryListByInsuranceIdIsPayment(Long insuranceId, Integer isPayment) { return new SISchemeBiz().queryListByInsuranceIdIsPayment(insuranceId,isPayment); } @Override public Map listPage(Map params) { return commandExecutor.execute(new SISchemeListCmd(params,user)); } @Override public Map getSchemeIdNameMap() { Map result = new HashMap<>(); List insuranceSchemePOS = MapperProxyFactory.getProxy(InsuranceSchemeMapper.class).listAll(); if (CollectionUtils.isNotEmpty(insuranceSchemePOS)) { result = insuranceSchemePOS.stream().collect(Collectors.toMap(InsuranceSchemePO::getId, InsuranceSchemePO::getSchemeName)); } return result; } @Override public PageInfo list(InsuranceSchemeParam queryParam) { SalaryAssert.notNull(queryParam.getWelfareTypeEnum(), SalaryI18nUtil.getI18nLabel( 84026, "参数错误")); PageUtil.start(queryParam.getCurrent(), queryParam.getPageSize()); List insuranceSchemePOS = MapperProxyFactory.getProxy(InsuranceSchemeMapper.class).listByWelfareType(queryParam.getWelfareTypeEnum().getValue()); List collect = insuranceSchemePOS.stream().map(item -> InsuranceSchemeListDTO.builder() .id(item.getId()) .paymentType(SalaryI18nUtil.getI18nLabel( buildPaymentTypeEnum(item.getPaymentType()).getLabelId(), buildPaymentTypeEnum(item.getPaymentType()).getDefaultLabel())) .schemeName(item.getSchemeName()) .paymentArea(item.getPaymentArea()) .paymentScope(buildPaymentScope(item.getId())) .remarks(item.getRemarks()) .build() ).collect(Collectors.toList()); PageInfo pageInfo = new PageInfo<>(collect,InsuranceSchemeListDTO.class); return pageInfo; } public PaymentTypeEnum buildPaymentTypeEnum(Integer value) { return SalaryEnumUtil.enumMatchByValue(value, PaymentTypeEnum.values(), PaymentTypeEnum.class); } /** * 组装社保福利方案列表页【缴纳范围】 * 1、到福利方案明细表查询该方案id下面有哪些福利 * 2、去重(福利是分个人和公司的,明细表中查询出来的福利id会重复) * 3、根据查询出来的福利id,去福利表里面查询福利的名称 * 4、组装,以“、”分割 * * @param id 福利方案主表id * @return result */ public String buildPaymentScope(Long id) { List collect = queryInsuranceSchemeDetailList(id).stream().map(InsuranceSchemeDetailPO::getInsuranceId).distinct().collect(Collectors.toList()) .stream().map(this::queryInsuranceName).collect(Collectors.toList()); return StringUtils.join(collect, "、"); } public Collection queryInsuranceSchemeDetailList(Long id) { List insuranceSchemeDetailPOS = MapperProxyFactory.getProxy(InsuranceSchemeDetailMapper.class).queryInsuranceSchemeDetailList(id, IsPaymentEnum.YES.getValue()); return insuranceSchemeDetailPOS; } public String queryInsuranceName(Long id) { ICategoryPO insuranceCategoryPO = MapperProxyFactory.getProxy(ICategoryMapper.class).getById(id); return insuranceCategoryPO == null ? "" : Objects.isNull(insuranceCategoryPO.getInsuranceName()) ? "" : insuranceCategoryPO.getInsuranceName(); } }