weaver-hrm-salary/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareRefresh.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();
}
}
}