2022-10-13 14:45:18 +08:00
|
|
|
|
package com.engine.salary.entity.siarchives.bo;
|
|
|
|
|
|
|
|
|
|
|
|
import com.engine.salary.constant.SalaryDefaultTenantConstant;
|
|
|
|
|
|
import com.engine.salary.entity.siarchives.po.InsuranceArchivesBaseInfoPO;
|
|
|
|
|
|
import com.engine.salary.entity.taxagent.po.TaxAgentEmpChangePO;
|
|
|
|
|
|
import com.engine.salary.enums.siaccount.EmployeeStatusEnum;
|
|
|
|
|
|
import com.engine.salary.enums.taxagent.TaxAgentEmpChangeTypeEnum;
|
|
|
|
|
|
import com.engine.salary.util.SalaryEntityUtil;
|
|
|
|
|
|
import com.google.common.collect.Lists;
|
|
|
|
|
|
import dm.jdbc.util.IdGenerator;
|
|
|
|
|
|
import lombok.AllArgsConstructor;
|
|
|
|
|
|
import lombok.Builder;
|
|
|
|
|
|
import lombok.Data;
|
|
|
|
|
|
import lombok.NoArgsConstructor;
|
|
|
|
|
|
import org.apache.commons.lang3.math.NumberUtils;
|
|
|
|
|
|
|
|
|
|
|
|
import java.util.*;
|
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* @Author: sy
|
|
|
|
|
|
* @Description: 社保福利档案基础信息
|
|
|
|
|
|
* @Date: 2022/10/13
|
|
|
|
|
|
**/
|
|
|
|
|
|
public class InsuranceArchivesBaseInfoBO {
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
public String toString() {
|
|
|
|
|
|
return "InsuranceArchivesBaseInfoBO{}";
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 构建增量数据
|
|
|
|
|
|
*/
|
|
|
|
|
|
public static InsuranceArchivesBaseInfoBO.ChangeData buildChangeData(List<TaxAgentEmpChangePO> taxAgentEmpChangeList, List<InsuranceArchivesBaseInfoPO> insuranceArchivesBaseInfoList, Long currentEmployeeId) {
|
|
|
|
|
|
List<Long> changeIds = taxAgentEmpChangeList.stream().map(TaxAgentEmpChangePO::getId).collect(Collectors.toList());
|
|
|
|
|
|
// 根据个税扣缴义务人和人员以及增量类型分组
|
|
|
|
|
|
Map<String, Long> changeTypeMap = taxAgentEmpChangeList.stream().collect(Collectors.groupingBy(change -> change.getTaxAgentId() + "-" + change.getEmployeeId() + "-" + change.getChangeType(), Collectors.counting()));
|
|
|
|
|
|
// 顺序倒转
|
|
|
|
|
|
Collections.reverse(taxAgentEmpChangeList);
|
|
|
|
|
|
// 去重
|
|
|
|
|
|
taxAgentEmpChangeList = taxAgentEmpChangeList.stream()
|
|
|
|
|
|
.collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(f -> f.getTaxAgentId() + "-" + f.getEmployeeId()))), ArrayList::new));
|
|
|
|
|
|
List<TaxAgentEmpChangePO> taxAgentEmpChanges = taxAgentEmpChangeList
|
|
|
|
|
|
.stream()
|
|
|
|
|
|
// 不相等则保留,否则忽略
|
|
|
|
|
|
.filter(change -> !Objects.equals(changeTypeMap.get(change.getTaxAgentId() + "-" + change.getEmployeeId() + "-" + TaxAgentEmpChangeTypeEnum.ADD.getValue())
|
|
|
|
|
|
, changeTypeMap.get(change.getTaxAgentId() + "-" + change.getEmployeeId() + "-" + TaxAgentEmpChangeTypeEnum.DEL.getValue())))
|
|
|
|
|
|
.collect(Collectors.toList());
|
|
|
|
|
|
|
|
|
|
|
|
Date now = new Date();
|
|
|
|
|
|
Date today = new Date();
|
|
|
|
|
|
List<InsuranceArchivesBaseInfoPO> baseInfoAddTodoList = Lists.newArrayList();
|
|
|
|
|
|
List<InsuranceArchivesBaseInfoPO> baseInfoUpdateTodoList = Lists.newArrayList();
|
|
|
|
|
|
|
|
|
|
|
|
Map<String, InsuranceArchivesBaseInfoPO> insuranceArchivesBaseInfoListMap = SalaryEntityUtil.convert2Map(insuranceArchivesBaseInfoList, k -> k.getPaymentOrganization() + "-" + k.getEmployeeId());
|
|
|
|
|
|
taxAgentEmpChanges.forEach(change -> {
|
|
|
|
|
|
InsuranceArchivesBaseInfoPO insuranceBaseInfo = insuranceArchivesBaseInfoListMap.get(change.getTaxAgentId() + "-" + change.getEmployeeId());
|
|
|
|
|
|
// 如果是新增 说明:如果没有档案,则新增,如果有档案而且是停止缴纳,就转移到待增员中,以个税扣缴义务人和人员id判断唯一
|
|
|
|
|
|
if (change.getChangeType() == TaxAgentEmpChangeTypeEnum.ADD.getValue()) {
|
|
|
|
|
|
if (insuranceBaseInfo != null) {
|
|
|
|
|
|
// 停止缴纳->待增员
|
2022-10-13 17:36:15 +08:00
|
|
|
|
if (insuranceBaseInfo.getRunStatus().equals(EmployeeStatusEnum.STOP_PAYMENT_FROM_DEL.getValue()) || insuranceBaseInfo.getRunStatus().equals(EmployeeStatusEnum.STOP_PAYMENT_FROM_ADD.getValue())) {
|
2022-10-13 14:45:18 +08:00
|
|
|
|
insuranceBaseInfo.setRunStatus(EmployeeStatusEnum.STAY_ADD.getValue());
|
|
|
|
|
|
insuranceBaseInfo.setUpdateTime(now);
|
|
|
|
|
|
baseInfoUpdateTodoList.add(insuranceBaseInfo);
|
|
|
|
|
|
}
|
|
|
|
|
|
} else {
|
|
|
|
|
|
//新增社保、公积金、其他福利档案
|
|
|
|
|
|
// 新增基础信息
|
|
|
|
|
|
baseInfoAddTodoList.add(InsuranceArchivesBaseInfoPO.builder()
|
|
|
|
|
|
.id(IdGenerator.generate())
|
|
|
|
|
|
.employeeId(change.getEmployeeId())
|
|
|
|
|
|
.paymentOrganization(change.getTaxAgentId())
|
|
|
|
|
|
.runStatus(EmployeeStatusEnum.STAY_ADD.getValue())
|
|
|
|
|
|
.createTime(now)
|
|
|
|
|
|
.updateTime(now)
|
|
|
|
|
|
.creator(currentEmployeeId)
|
|
|
|
|
|
.deleteType(NumberUtils.INTEGER_ZERO)
|
|
|
|
|
|
.tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY)
|
|
|
|
|
|
.build());
|
|
|
|
|
|
}
|
|
|
|
|
|
// 如果是删除 说明:如果有档案并且是在缴纳中才处理,没档案不用管
|
|
|
|
|
|
} else if (change.getChangeType() == TaxAgentEmpChangeTypeEnum.DEL.getValue()) {
|
|
|
|
|
|
if (insuranceBaseInfo != null) {
|
|
|
|
|
|
if (insuranceBaseInfo.getRunStatus().equals(EmployeeStatusEnum.PAYING.getValue())) {
|
|
|
|
|
|
// 正在缴纳->待减员
|
|
|
|
|
|
insuranceBaseInfo.setRunStatus(EmployeeStatusEnum.STAY_DEL.getValue());
|
|
|
|
|
|
insuranceBaseInfo.setUpdateTime(now);
|
|
|
|
|
|
baseInfoUpdateTodoList.add(insuranceBaseInfo);
|
|
|
|
|
|
} else if (insuranceBaseInfo.getRunStatus().equals(EmployeeStatusEnum.STAY_DEL.getValue())) {
|
|
|
|
|
|
// 待减员->停止缴纳
|
2022-10-13 17:36:15 +08:00
|
|
|
|
insuranceBaseInfo.setRunStatus(EmployeeStatusEnum.STOP_PAYMENT_FROM_DEL.getValue());
|
2022-10-20 14:09:36 +08:00
|
|
|
|
insuranceBaseInfo.setUpdateTime(now);
|
|
|
|
|
|
baseInfoUpdateTodoList.add(insuranceBaseInfo);
|
|
|
|
|
|
} else if (insuranceBaseInfo.getRunStatus().equals(EmployeeStatusEnum.STAY_ADD.getValue())) {
|
|
|
|
|
|
// 待增员->停止缴纳
|
2022-10-21 15:51:08 +08:00
|
|
|
|
insuranceBaseInfo.setRunStatus(EmployeeStatusEnum.STOP_PAYMENT_FROM_ADD.getValue());
|
2022-10-20 14:09:36 +08:00
|
|
|
|
insuranceBaseInfo.setUpdateTime(now);
|
2022-10-13 14:45:18 +08:00
|
|
|
|
baseInfoUpdateTodoList.add(insuranceBaseInfo);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
return ChangeData.builder()
|
|
|
|
|
|
.baseInfoAddTodoList(baseInfoAddTodoList)
|
|
|
|
|
|
.baseInfoUpdateTodoList(baseInfoUpdateTodoList)
|
|
|
|
|
|
.changeIds(changeIds)
|
|
|
|
|
|
.build();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Data
|
|
|
|
|
|
@Builder
|
|
|
|
|
|
@NoArgsConstructor
|
|
|
|
|
|
@AllArgsConstructor
|
|
|
|
|
|
public static class ChangeData {
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 需要批量修改的福利档案基础信息
|
|
|
|
|
|
*/
|
|
|
|
|
|
private List<InsuranceArchivesBaseInfoPO> baseInfoAddTodoList;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 需要批量新增的福利档案基础信息
|
|
|
|
|
|
*/
|
|
|
|
|
|
private List<InsuranceArchivesBaseInfoPO> baseInfoUpdateTodoList;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 需要删除的增量数据
|
|
|
|
|
|
*/
|
|
|
|
|
|
private List<Long> changeIds;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|