package com.engine.salary.service.impl; import com.alibaba.fastjson.JSON; import com.alipay.oceanbase.jdbc.StringUtils; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.encrypt.siaccount.InsuranceAccountDetailPOEncrypt; import com.engine.salary.entity.hrm.dto.HrmInfoDTO; import com.engine.salary.entity.hrm.param.HrmQueryParam; import com.engine.salary.entity.siaccount.param.CompensationParam; import com.engine.salary.entity.siaccount.po.InsuranceAccountDetailPO; import com.engine.salary.entity.taxagent.dto.TaxAgentEmployeeDTO; import com.engine.salary.mapper.datacollection.EmployMapper; import com.engine.salary.mapper.siaccount.InsuranceAccountDetailMapper; import com.engine.salary.service.SICategoryService; import com.engine.salary.service.SICompensationService; import com.engine.salary.util.SalaryAssert; import com.engine.salary.util.SalaryEntityUtil; 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.SalaryPageUtil; import com.google.common.collect.Lists; import weaver.hrm.User; import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; /** * @Author: sy * @Description: 福利台账-调差实现类 * @Date: 2022/11/23 **/ public class SICompensationServiceImpl extends Service implements SICompensationService { private InsuranceAccountDetailMapper getInsuranceAccountDetailMapper() { return MapperProxyFactory.getProxy(InsuranceAccountDetailMapper.class); } private EmployMapper getEmployMapper() { return MapperProxyFactory.getProxy(EmployMapper.class); } public SICategoryService getSICategoryService(User user) { return ServiceUtil.getService(SICategoryServiceImpl.class, user); } /** * 可调差人员 */ @Override public PageInfo getEmployeeListToCompensation(HrmQueryParam param) { // 当前登录人员 Long currentEmployeeId = (long) user.getUID(); //查询账单月份+个税扣缴义务人下的社保福利正常缴纳人员列表 List normalDataList = getInsuranceAccountDetailMapper().queryNormalListByBillMonth(param.getBillMonth(), param.getPaymentOrganization()); List empIds = normalDataList.stream().map(InsuranceAccountDetailPO::getEmployeeId).collect(Collectors.toList()); List resultData = new ArrayList<>(); if (empIds.size() > 0) { List> partition = Lists.partition(empIds, 1000); partition.forEach(p -> { param.setIds(p); resultData.addAll(getEmployMapper().listHrmInfoByIdAndName(param)); }); } // 分页 PageInfo page = new PageInfo<>(); if (resultData.size() == 0) { return page; } page.setTotal(resultData.size()); page.setList(SalaryPageUtil.subList(param.getPageNum(), param.getPageSize(), resultData)); page.setPageSize(param.getPageSize()); page.setPageNum(param.getPageNum()); return page; } /** * 调差福利项 * @param id InsuranceAccountDetailPO.id */ @Override public List> compensationCategoryType(Long id) { SalaryAssert.notNull(id, SalaryI18nUtil.getI18nLabel(120999, "调差对象必选")); InsuranceAccountDetailPO insuranceAccountDetailPO = getInsuranceAccountDetailMapper().getById(id); if (insuranceAccountDetailPO == null) { return Lists.newArrayList(); } InsuranceAccountDetailPOEncrypt.decryptItem(insuranceAccountDetailPO); List> result = new ArrayList<>(); String socialComJson = insuranceAccountDetailPO.getSocialComJson(); if (StringUtils.isNotBlank(socialComJson)) { Map categoryIdNameMap = getSICategoryService(user).categoryIdNameMap(); Map socialJson = JSON.parseObject(socialComJson, new HashMap().getClass()); for (Map.Entry entry : socialJson.entrySet()) { Map temp = new HashMap<>(); String insuranceId = entry.getKey(); if (StringUtils.isNotBlank(categoryIdNameMap.get(insuranceId))) { temp.put("id", insuranceId); temp.put("content", categoryIdNameMap.get(insuranceId)); result.add(temp); } } } return result; } /** * 获取当前调差福利类型-公司方支出总计 */ @Override public Map>> compensationComTotal(Map> param) { Map>> result = new HashMap<>(); param.forEach((paymentAgencyId, compensationList) -> { List> paymentList = new ArrayList<>(); compensationList.forEach(compensation -> { Map temp = new HashMap<>(); temp.put("rowId", compensation.getRowId()); if (StringUtils.isBlank(compensation.getCategoryType()) || compensation.getTarget() == null) { temp.put("error", SalaryI18nUtil.getI18nLabel(84026, "参数错误")); temp.put("totalNum", "0"); } else { InsuranceAccountDetailPO insuranceAccountDetailPO = getInsuranceAccountDetailMapper().getById(compensation.getTarget()); if (insuranceAccountDetailPO == null) { temp.put("error", SalaryI18nUtil.getI18nLabel(121038, "当前月在该缴纳组织下没有核算记录")); } InsuranceAccountDetailPOEncrypt.decryptItem(insuranceAccountDetailPO); BigDecimal total = new BigDecimal("0"); List categoryTypeList = Arrays.asList(compensation.getCategoryType().split(",")); if (StringUtils.isNotBlank(insuranceAccountDetailPO.getSocialComJson())) { Map socialJson = JSON.parseObject(insuranceAccountDetailPO.getSocialComJson(), new HashMap().getClass()); for (Map.Entry entry : socialJson.entrySet()) { String insuranceId = entry.getKey(); String num = entry.getValue(); if (categoryTypeList.contains(insuranceId)) { total = total.add(new BigDecimal(num)); } } } temp.put("totalNum", total.toPlainString()); } paymentList.add(temp); }); result.put(paymentAgencyId, paymentList); }); return result; } }