From d81883e3d2ca5519f2a7fb5767974675b2fcea00 Mon Sep 17 00:00:00 2001 From: sy Date: Wed, 23 Nov 2022 14:49:44 +0800 Subject: [PATCH] =?UTF-8?q?=E8=96=AA=E9=85=AC=E7=B3=BB=E7=BB=9F-=E7=A6=8F?= =?UTF-8?q?=E5=88=A9=E5=8F=B0=E8=B4=A6=EF=BC=8C=E8=B0=83=E5=B7=AEv1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/hrm/param/HrmQueryParam.java | 5 +- .../siaccount/param/CompensationParam.java | 48 ++++++ .../salary/service/SICompensationService.java | 18 ++ .../impl/SICompensationServiceImpl.java | 159 ++++++++++++++++++ 4 files changed, 229 insertions(+), 1 deletion(-) create mode 100644 src/com/engine/salary/entity/siaccount/param/CompensationParam.java create mode 100644 src/com/engine/salary/service/SICompensationService.java create mode 100644 src/com/engine/salary/service/impl/SICompensationServiceImpl.java diff --git a/src/com/engine/salary/entity/hrm/param/HrmQueryParam.java b/src/com/engine/salary/entity/hrm/param/HrmQueryParam.java index 03787f33e..0e6da1aa6 100644 --- a/src/com/engine/salary/entity/hrm/param/HrmQueryParam.java +++ b/src/com/engine/salary/entity/hrm/param/HrmQueryParam.java @@ -18,10 +18,13 @@ import java.util.Collection; @AllArgsConstructor public class HrmQueryParam { - String userName; + private String userName; private int pageNum; private int pageSize; private Collection ids; + + private String billMonth; + private Long paymentOrganization; } diff --git a/src/com/engine/salary/entity/siaccount/param/CompensationParam.java b/src/com/engine/salary/entity/siaccount/param/CompensationParam.java new file mode 100644 index 000000000..0aca6d1a3 --- /dev/null +++ b/src/com/engine/salary/entity/siaccount/param/CompensationParam.java @@ -0,0 +1,48 @@ +package com.engine.salary.entity.siaccount.param; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * @Author: sy + * @Description: 福利台账-调差请求参数 + * @Date: 2022/11/23 + **/ +@Data +@NoArgsConstructor +@AllArgsConstructor +@Builder +public class CompensationParam { + + /** + * 缴纳组织 + */ + private Long paymentOrganization; + + /** + * 对象,指InsuranceAccountDetailPO.id + */ + private Long target; + + /** + * 前端rowId,指被调差的人员id + */ + private String rowId; + + /** + * 账单月份 + */ + private String billMonth; + + /** + * 统计调差福利 + */ + private Integer welfareType; + + /** + * 统计调差福利项,即社保、公积金、其他福利类型下的具体项目 + */ + private String categoryType; +} diff --git a/src/com/engine/salary/service/SICompensationService.java b/src/com/engine/salary/service/SICompensationService.java new file mode 100644 index 000000000..8aa89a649 --- /dev/null +++ b/src/com/engine/salary/service/SICompensationService.java @@ -0,0 +1,18 @@ +package com.engine.salary.service; + +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.util.page.PageInfo; + +import java.util.List; +import java.util.Map; + +public interface SICompensationService { + + PageInfo getEmployeeListToCompensation(HrmQueryParam param); + + List> compensationCategoryType(Long id); + + Map>> compensationComTotal(Map> param); +} diff --git a/src/com/engine/salary/service/impl/SICompensationServiceImpl.java b/src/com/engine/salary/service/impl/SICompensationServiceImpl.java new file mode 100644 index 000000000..17179f22d --- /dev/null +++ b/src/com/engine/salary/service/impl/SICompensationServiceImpl.java @@ -0,0 +1,159 @@ +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 (null == resultData) { + 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; + } +}