224 lines
14 KiB
Java
224 lines
14 KiB
Java
package com.engine.salary.entity.employeedeclare.bo;
|
|
|
|
import com.api.formmode.page.util.Util;
|
|
import com.engine.salary.constant.SalaryDefaultTenantConstant;
|
|
import com.engine.salary.entity.datacollection.DataCollectionEmployee;
|
|
import com.engine.salary.entity.employeedeclare.dto.EmployeeDeclareRefreshDTO;
|
|
import com.engine.salary.entity.employeedeclare.po.EmployeeDeclarePO;
|
|
import com.engine.salary.entity.extemp.po.ExtEmpPO;
|
|
import com.engine.salary.entity.salaryarchive.po.SalaryArchivePO;
|
|
import com.engine.salary.enums.SalaryOnOffEnum;
|
|
import com.engine.salary.enums.employeedeclare.*;
|
|
import com.engine.salary.enums.salaryaccounting.EmployeeTypeEnum;
|
|
import com.engine.salary.enums.salaryarchive.SalaryArchiveStatusEnum;
|
|
import com.engine.salary.enums.sicategory.DeleteTypeEnum;
|
|
import com.engine.salary.util.SalaryDateUtil;
|
|
import com.engine.salary.util.SalaryEntityUtil;
|
|
import com.engine.salary.util.SalaryI18nUtil;
|
|
import com.engine.salary.util.valid.SalaryCardUtil;
|
|
import com.google.common.collect.Lists;
|
|
import dm.jdbc.util.IdGenerator;
|
|
import lombok.Data;
|
|
import org.apache.commons.lang3.StringUtils;
|
|
import org.springframework.beans.BeanUtils;
|
|
|
|
import java.time.YearMonth;
|
|
import java.util.*;
|
|
|
|
/**
|
|
* @description:
|
|
* @author: xiajun
|
|
* @modified By: xiajun
|
|
* @date: 2022/11/6 15:47
|
|
* @version:v1.0
|
|
*/
|
|
public class EmployeeDeclareRefresh {
|
|
|
|
public static Result refresh(EmployeeDeclareRefreshDTO dto, Long employeeId) {
|
|
Result result = new Result();
|
|
// 本月已有的需要报送的人员
|
|
Set<Long> employeeIds = SalaryEntityUtil.properties(dto.getEmployeeDeclares(), EmployeeDeclarePO::getEmployeeId);
|
|
// 员工的个人信息
|
|
Map<Long, DataCollectionEmployee> simpleUserInfoMap = SalaryEntityUtil.convert2Map(dto.getHrmEmployeeComInfos(), DataCollectionEmployee::getEmployeeId);
|
|
// 薪资档案的数据(任职受雇从业类型、起始发薪日期、最后发薪日期)
|
|
Map<Long, SalaryArchivePO> salaryArchiveMap = SalaryEntityUtil.convert2Map(dto.getSalaryArchives(), SalaryArchivePO::getEmployeeId);
|
|
// 非系统人员的数据(任职受雇从业类型)
|
|
Map<Long, ExtEmpPO> extEmployeeMap = SalaryEntityUtil.convert2Map(dto.getExtEmployees(), ExtEmpPO::getId);
|
|
Date now = new Date();
|
|
// 对已有人员处理「人员状态」、「离职日期」、「任职受雇从业类型」
|
|
for (EmployeeDeclarePO employeeDeclare : dto.getEmployeeDeclares()) {
|
|
SalaryArchivePO salaryArchive = salaryArchiveMap.get(employeeDeclare.getEmployeeId());
|
|
if (salaryArchive != null && (Objects.equals(salaryArchive.getRunStatus(), SalaryArchiveStatusEnum.STOP_FROM_PENDING.getValue())
|
|
|| Objects.equals(salaryArchive.getRunStatus(), SalaryArchiveStatusEnum.STOP_FROM_SUSPEND.getValue()))) {
|
|
if (Objects.equals(employeeDeclare.getEmploymentStatus(), EmploymentStatusEnum.ABNORMAL.getValue())
|
|
|| Objects.equals(Util.null2String(employeeDeclare.getDismissDate()), Util.null2String(salaryArchive.getPayEndDate()))) {
|
|
employeeDeclare.setEmploymentStatus(EmploymentStatusEnum.ABNORMAL.getValue());
|
|
employeeDeclare.setDismissDate(salaryArchive.getPayEndDate());
|
|
employeeDeclare.setNewEmployeeInfo(1);
|
|
employeeDeclare.setUpdateTime(now);
|
|
result.getEmployeeDeclares().add(employeeDeclare);
|
|
}
|
|
}
|
|
// if (salaryArchive != null && !Objects.equals(employeeDeclare.getEmploymentType(), Util.getIntValue(salaryArchive.getEmploymentType()))) {
|
|
// employeeDeclare.setDeclareStatus(DeclareStatusEnum.NOT_DECLARE.getValue());
|
|
// employeeDeclare.setEmploymentType(Util.getIntValue(salaryArchive.getEmploymentType()));
|
|
// employeeDeclare.setNewEmployeeInfo(1);
|
|
// }
|
|
// ExtEmpPO extEmployee = extEmployeeMap.get(employeeDeclare.getEmployeeId());
|
|
// if (extEmployee != null && !Objects.equals(employeeDeclare.getEmploymentType(), extEmployee.getEmploymentType())) {
|
|
// employeeDeclare.setDeclareStatus(DeclareStatusEnum.NOT_DECLARE.getValue());
|
|
// employeeDeclare.setEmploymentType(extEmployee.getEmploymentType());
|
|
// employeeDeclare.setNewEmployeeInfo(1);
|
|
// }
|
|
}
|
|
// 自动保存上个月报送成功的人员
|
|
for (EmployeeDeclarePO preTaxCycleEmployeeDeclare : dto.getPreTaxCycleEmployeeDeclare()) {
|
|
if (!employeeIds.contains(preTaxCycleEmployeeDeclare.getEmployeeId())) {
|
|
EmployeeDeclarePO employeeDeclare = new EmployeeDeclarePO();
|
|
BeanUtils.copyProperties(preTaxCycleEmployeeDeclare, employeeDeclare);
|
|
employeeDeclare.setId(IdGenerator.generate())
|
|
.setTaxCycle(dto.getTaxCycle().toString())
|
|
.setNewEmployeeInfo(0)
|
|
.setCreateTime(now)
|
|
.setUpdateTime(now);
|
|
// 对人员处理「人员状态」、「离职日期」、「任职受雇从业类型」
|
|
SalaryArchivePO salaryArchive = salaryArchiveMap.get(employeeDeclare.getEmployeeId());
|
|
if (salaryArchive != null && (Objects.equals(salaryArchive.getRunStatus(), SalaryArchiveStatusEnum.STOP_FROM_PENDING.getValue())
|
|
|| Objects.equals(salaryArchive.getRunStatus(), SalaryArchiveStatusEnum.STOP_FROM_SUSPEND.getValue()))) {
|
|
employeeDeclare.setDeclareStatus(DeclareStatusEnum.NOT_DECLARE.getValue());
|
|
employeeDeclare.setEmploymentStatus(EmploymentStatusEnum.ABNORMAL.getValue());
|
|
employeeDeclare.setDismissDate(salaryArchive.getPayEndDate());
|
|
employeeDeclare.setNewEmployeeInfo(1);
|
|
}
|
|
// if (salaryArchive != null && !Objects.equals(Util.null2String(employeeDeclare.getEmploymentType()), salaryArchive.getEmploymentType())) {
|
|
// employeeDeclare.setDeclareStatus(DeclareStatusEnum.NOT_DECLARE.getValue());
|
|
// employeeDeclare.setEmploymentType(Util.getIntValue(salaryArchive.getEmploymentType()));
|
|
// employeeDeclare.setNewEmployeeInfo(1);
|
|
// }
|
|
// ExtEmployeePO extEmployee = extEmployeeMap.get(employeeDeclare.getEmployeeId());
|
|
// if (extEmployee != null && !Objects.equals(employeeDeclare.getEmploymentType(), extEmployee.getEmploymentType())) {
|
|
// employeeDeclare.setDeclareStatus(DeclareStatusEnum.NOT_DECLARE.getValue());
|
|
// employeeDeclare.setEmploymentType(extEmployee.getEmploymentType());
|
|
// employeeDeclare.setNewEmployeeInfo(1);
|
|
// }
|
|
employeeIds.add(employeeDeclare.getEmployeeId());
|
|
result.getNewEmployeeDeclares().add(employeeDeclare);
|
|
}
|
|
}
|
|
// 薪资档案中新增的需报送的人员
|
|
for (DataCollectionEmployee hrmEmployeeComInfo : dto.getHrmEmployeeComInfos()) {
|
|
if (employeeIds.contains(hrmEmployeeComInfo.getEmployeeId())) {
|
|
continue;
|
|
}
|
|
EmployeeDeclarePO employeeDeclare = initEmployeeDeclare(dto.getTaxAgentId(), dto.getTaxCycle(), now, employeeId);
|
|
DataCollectionEmployee simpleUserInfo = simpleUserInfoMap.get(hrmEmployeeComInfo.getEmployeeId());
|
|
String idNum = simpleUserInfo == null ? "" : simpleUserInfo.getIdNo();
|
|
employeeDeclare.setEmployeeId(hrmEmployeeComInfo.getEmployeeId())
|
|
.setEmployeeType(EmployeeTypeEnum.ORGANIZATION.getValue())
|
|
.setEmployeeName(hrmEmployeeComInfo.getUsername())
|
|
.setJobNum(hrmEmployeeComInfo.getWorkcode())
|
|
.setCardNum(idNum)
|
|
.setGender(StringUtils.equalsIgnoreCase(hrmEmployeeComInfo.getSex(), GenderEnum.MALE.name())
|
|
? GenderEnum.MALE.getValue() : GenderEnum.FEMALE.getValue())
|
|
.setBirthday(simpleUserInfo == null ? null : SalaryDateUtil.dateStrToLocalDate(simpleUserInfo.getBirthday()))
|
|
.setMobile(hrmEmployeeComInfo.getMobile());
|
|
if (StringUtils.isEmpty(idNum)) {
|
|
employeeDeclare.setDeclareStatus(DeclareStatusEnum.DECLARE_FAIL.getValue());
|
|
employeeDeclare.setDeclareErrorMsg(SalaryI18nUtil.getI18nLabel(187460, "身份证号不能为空"));
|
|
} else if (!SalaryCardUtil.checkIdNum(idNum)) {
|
|
employeeDeclare.setDeclareStatus(DeclareStatusEnum.DECLARE_FAIL.getValue());
|
|
employeeDeclare.setDeclareErrorMsg(SalaryI18nUtil.getI18nLabel(156510, "身份证号格式错误"));
|
|
} else {
|
|
employeeDeclare.setGender(SalaryCardUtil.judgeGender(idNum).getValue());
|
|
employeeDeclare.setBirthday(SalaryDateUtil.localDateToDate(SalaryCardUtil.judgeBirthday(idNum)));
|
|
}
|
|
// 对人员处理「人员状态」、「离职日期」
|
|
SalaryArchivePO salaryArchive = salaryArchiveMap.get(employeeDeclare.getEmployeeId());
|
|
if (salaryArchive != null) {
|
|
// employeeDeclare.setEmploymentType(Util.getIntValue(salaryArchive.getEmploymentType()));
|
|
employeeDeclare.setEmploymentDate(salaryArchive.getPayStartDate());
|
|
if (Objects.equals(salaryArchive.getRunStatus(), SalaryArchiveStatusEnum.STOP_FROM_PENDING.getValue())
|
|
|| Objects.equals(salaryArchive.getRunStatus(), SalaryArchiveStatusEnum.STOP_FROM_SUSPEND.getValue())) {
|
|
employeeDeclare.setEmploymentStatus(EmploymentStatusEnum.ABNORMAL.getValue());
|
|
employeeDeclare.setDismissDate(salaryArchive.getPayEndDate());
|
|
}
|
|
}
|
|
employeeIds.add(employeeDeclare.getEmployeeId());
|
|
result.getNewEmployeeDeclares().add(employeeDeclare);
|
|
}
|
|
// 非系统人员中新增的需报送的人员
|
|
// for (ExtEmployeePO extEmployee : dto.getExtEmployees()) {
|
|
// if (employeeIds.contains(extEmployee.getId())) {
|
|
// continue;
|
|
// }
|
|
// EmployeeDeclarePO employeeDeclare = initEmployeeDeclare(dto.getTaxAgentId(), dto.getTaxCycle(), now, employeeId, tenantKey);
|
|
// employeeDeclare.setEmployeeId(extEmployee.getId())
|
|
// .setEmployeeType(EmployeeTypeEnum.EXT_EMPLOYEE.getValue())
|
|
// .setEmployeeName(extEmployee.getUsername())
|
|
// .setCardNum(extEmployee.getCardNum())
|
|
// .setMobile(extEmployee.getMobile())
|
|
// .setEmploymentType(extEmployee.getEmploymentType())
|
|
// .setEmploymentDate(YearMonth.parse(extEmployee.getStartMonth()).atDay(1));
|
|
// if (StringUtils.isEmpty(extEmployee.getCardNum())) {
|
|
// employeeDeclare.setDeclareStatus(DeclareStatusEnum.DECLARE_FAIL.getValue());
|
|
// employeeDeclare.setDeclareErrorMsg(SalaryI18nUtil.getI18nLabel(187460, "身份证号不能为空"));
|
|
// } else if (!SalaryCardUtil.checkIdNum(extEmployee.getCardNum())) {
|
|
// employeeDeclare.setDeclareStatus(DeclareStatusEnum.DECLARE_FAIL.getValue());
|
|
// employeeDeclare.setDeclareErrorMsg(SalaryI18nUtil.getI18nLabel(156510, "身份证号格式错误"));
|
|
// } else {
|
|
// employeeDeclare.setGender(SalaryCardUtil.judgeGender(extEmployee.getCardNum()).getValue());
|
|
// employeeDeclare.setBirthday(SalaryCardUtil.judgeBirthday(extEmployee.getCardNum()));
|
|
// }
|
|
// employeeIds.add(employeeDeclare.getEmployeeId());
|
|
// result.getNewEmployeeDeclares().add(employeeDeclare);
|
|
// }
|
|
return result;
|
|
}
|
|
|
|
private static EmployeeDeclarePO initEmployeeDeclare(Long taxAgentId, YearMonth taxCycle, Date now, Long employeeId) {
|
|
return new EmployeeDeclarePO()
|
|
.setId(IdGenerator.generate())
|
|
.setTaxAgentId(taxAgentId)
|
|
.setTaxCycle(taxCycle.toString())
|
|
.setCardType(CardTypeEnum.RESIDENT_IDENTITY_CARDS.getValue())
|
|
.setGender(GenderEnum.MALE.getValue())
|
|
.setEmploymentStatus(EmploymentStatusEnum.NORMAL.getValue())
|
|
.setEmploymentType(EmploymentTypeEnum.EMPLOYEE.getValue())
|
|
.setDeclareStatus(DeclareStatusEnum.NOT_DECLARE.getValue())
|
|
.setDeclareErrorMsg("")
|
|
.setDisability(SalaryOnOffEnum.OFF.getValue())
|
|
.setDisabilityCardNo("")
|
|
.setLonelyOld(SalaryOnOffEnum.OFF.getValue())
|
|
.setMartyrDependents(SalaryOnOffEnum.OFF.getValue())
|
|
.setMartyrDependentsCardNo("")
|
|
.setDeductExpenses(SalaryOnOffEnum.ON.getValue())
|
|
.setSuccessfullyDeclared(0)
|
|
.setNewEmployeeInfo(0)
|
|
.setDeclareStatus(DeclareStatusEnum.NOT_DECLARE.getValue())
|
|
.setTenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY)
|
|
.setCreator(employeeId)
|
|
.setDeleteType(DeleteTypeEnum.NOT_DELETED.getValue())
|
|
.setCreateTime(now)
|
|
.setUpdateTime(now);
|
|
}
|
|
|
|
@Data
|
|
public static class Result {
|
|
|
|
/**
|
|
* 已有的需要更新的报送人员
|
|
*/
|
|
private List<EmployeeDeclarePO> employeeDeclares;
|
|
|
|
/**
|
|
* 新增的报送人员
|
|
*/
|
|
private List<EmployeeDeclarePO> newEmployeeDeclares;
|
|
|
|
public Result() {
|
|
this.employeeDeclares = Lists.newArrayList();
|
|
this.newEmployeeDeclares = Lists.newArrayList();
|
|
}
|
|
}
|
|
}
|