|
|
|
|
@ -2,36 +2,58 @@ package com.engine.salary.service.impl;
|
|
|
|
|
|
|
|
|
|
import com.engine.common.util.ServiceUtil;
|
|
|
|
|
import com.engine.core.impl.Service;
|
|
|
|
|
import com.engine.salary.constant.SalaryDefaultTenantConstant;
|
|
|
|
|
import com.engine.salary.entity.datacollection.DataCollectionEmployee;
|
|
|
|
|
import com.engine.salary.entity.employeedeclare.dto.EmployeeDeclareExcelDTO;
|
|
|
|
|
import com.engine.salary.entity.employeedeclare.dto.EmployeeDeclareListDTO;
|
|
|
|
|
import com.engine.salary.entity.employeedeclare.param.EmployeeDeclareImportParam;
|
|
|
|
|
import com.engine.salary.entity.employeedeclare.param.EmployeeDeclareListQueryParam;
|
|
|
|
|
import com.engine.salary.entity.employeedeclare.po.EmployeeDeclarePO;
|
|
|
|
|
import com.engine.salary.entity.taxagent.po.TaxAgentPO;
|
|
|
|
|
import com.engine.salary.enums.SalaryOnOffEnum;
|
|
|
|
|
import com.engine.salary.enums.datacollection.UseEmployeeTypeEnum;
|
|
|
|
|
import com.engine.salary.enums.employeedeclare.CardTypeEnum;
|
|
|
|
|
import com.engine.salary.enums.employeedeclare.DeclareStatusEnum;
|
|
|
|
|
import com.engine.salary.enums.employeedeclare.EmploymentStatusEnum;
|
|
|
|
|
import com.engine.salary.enums.employeedeclare.EmploymentTypeEnum;
|
|
|
|
|
import com.engine.salary.enums.salaryaccounting.EmployeeTypeEnum;
|
|
|
|
|
import com.engine.salary.enums.sicategory.DeleteTypeEnum;
|
|
|
|
|
import com.engine.salary.exception.SalaryRunTimeException;
|
|
|
|
|
import com.engine.salary.mapper.employeedeclare.EmployeeDeclareMapper;
|
|
|
|
|
import com.engine.salary.service.EmployeeDeclareExcelService;
|
|
|
|
|
import com.engine.salary.service.EmployeeDeclareService;
|
|
|
|
|
import com.engine.salary.service.SalaryEmployeeService;
|
|
|
|
|
import com.engine.salary.service.TaxAgentService;
|
|
|
|
|
import com.engine.salary.util.SalaryDateUtil;
|
|
|
|
|
import com.engine.salary.util.SalaryEntityUtil;
|
|
|
|
|
import com.engine.salary.util.SalaryEnumUtil;
|
|
|
|
|
import com.engine.salary.util.SalaryI18nUtil;
|
|
|
|
|
import com.engine.salary.util.excel.ExcelSheetData;
|
|
|
|
|
import com.engine.salary.util.excel.ExcelUtil;
|
|
|
|
|
import com.engine.salary.util.db.MapperProxyFactory;
|
|
|
|
|
import com.engine.salary.util.excel.*;
|
|
|
|
|
import com.engine.salary.util.valid.SalaryCardUtil;
|
|
|
|
|
import com.google.common.base.Joiner;
|
|
|
|
|
import com.google.common.collect.Lists;
|
|
|
|
|
import com.google.common.collect.Maps;
|
|
|
|
|
import dm.jdbc.util.IdGenerator;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.apache.commons.collections4.CollectionUtils;
|
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
|
import org.apache.poi.ss.usermodel.Sheet;
|
|
|
|
|
import org.apache.poi.util.IOUtils;
|
|
|
|
|
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
|
|
|
|
import org.springframework.beans.BeanUtils;
|
|
|
|
|
import weaver.file.ExcelSheet;
|
|
|
|
|
import weaver.file.ImageFileManager;
|
|
|
|
|
import weaver.general.Util;
|
|
|
|
|
import weaver.hrm.User;
|
|
|
|
|
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.Collections;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Objects;
|
|
|
|
|
import java.io.InputStream;
|
|
|
|
|
import java.time.LocalDate;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
|
|
import static com.engine.salary.util.excel.ExcelSupport.EXCEL_TYPE_XLSX;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 人员报送(人员)导入导出
|
|
|
|
|
* <p>Copyright: Copyright (c) 2023</p>
|
|
|
|
|
@ -56,6 +78,10 @@ public class EmployeeDeclareExcelServiceImpl extends Service implements Employee
|
|
|
|
|
return ServiceUtil.getService(TaxAgentServiceImpl.class, user);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private EmployeeDeclareMapper getEmployeeDeclareMapper() {
|
|
|
|
|
return MapperProxyFactory.getProxy(EmployeeDeclareMapper.class);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public XSSFWorkbook exportTemplate(EmployeeDeclareImportParam importParam) {
|
|
|
|
|
// 查询人员
|
|
|
|
|
@ -96,6 +122,386 @@ public class EmployeeDeclareExcelServiceImpl extends Service implements Employee
|
|
|
|
|
return ExcelUtil.genWorkbook(excelSheetData);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public Map<String, Object> importData(EmployeeDeclareImportParam param) {
|
|
|
|
|
Map<String, Object> apidatas = new HashMap<>();
|
|
|
|
|
InputStream fileInputStream = null;
|
|
|
|
|
try {
|
|
|
|
|
Date now = new Date();
|
|
|
|
|
// 个税扣缴义务人id
|
|
|
|
|
Long taxAgentId = param.getTaxAgentId();
|
|
|
|
|
TaxAgentPO taxAgent = getTaxAgentService(user).getById(taxAgentId);
|
|
|
|
|
if (taxAgent == null) {
|
|
|
|
|
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "参数错误,无法找到个税扣缴义务人"));
|
|
|
|
|
}
|
|
|
|
|
// 税款所属期
|
|
|
|
|
String taxCycle = Util.null2String(param.getTaxCycle());
|
|
|
|
|
Date taxCycleDate = param.getTaxCycle();
|
|
|
|
|
if (!SalaryDateUtil.checkYearMonth(taxCycle)) {
|
|
|
|
|
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "参数错误,税款所属期参数格式错误"));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 导出模板中的表头
|
|
|
|
|
List<String> headerList = getImportHeader().stream().map(header -> header.toString()).collect(Collectors.toList());
|
|
|
|
|
// 查询所有的人员
|
|
|
|
|
List<DataCollectionEmployee> simpleEmployees = getSalaryEmployeeService(user).listAll(UseEmployeeTypeEnum.ORG);
|
|
|
|
|
// 查询所有的外部人员
|
|
|
|
|
List<DataCollectionEmployee> extEmployees = getSalaryEmployeeService(user).listAll(UseEmployeeTypeEnum.EXT);
|
|
|
|
|
// 查询人员报送表的人员
|
|
|
|
|
List<EmployeeDeclarePO> employeeDeclares = getEmployeeDeclareService(user).listByTaxCycleAndTaxAgentId(SalaryDateUtil.dateStrToLocalDate(taxCycle), taxAgentId);
|
|
|
|
|
// 校验字段
|
|
|
|
|
String checkType = param.getCheckType();
|
|
|
|
|
Map<String, DataCollectionEmployee> extEmployeeMap = Maps.newHashMap();
|
|
|
|
|
Map<String, DataCollectionEmployee> simpleEmployeeMap = Maps.newHashMap();
|
|
|
|
|
Map<String, EmployeeDeclarePO> employeeDeclareMap = Maps.newHashMapWithExpectedSize(employeeDeclares.size());
|
|
|
|
|
if (Objects.equals(checkType, "jobNum")) {
|
|
|
|
|
extEmployeeMap = Collections.emptyMap();
|
|
|
|
|
simpleEmployeeMap = SalaryEntityUtil.convert2Map(simpleEmployees, DataCollectionEmployee::getWorkcode);
|
|
|
|
|
employeeDeclareMap = SalaryEntityUtil.convert2Map(employeeDeclares, EmployeeDeclarePO::getJobNum);
|
|
|
|
|
} else {
|
|
|
|
|
// 查询所有人员的个人信息
|
|
|
|
|
simpleEmployeeMap = SalaryEntityUtil.convert2Map(simpleEmployees, DataCollectionEmployee::getIdNo);
|
|
|
|
|
extEmployeeMap = SalaryEntityUtil.convert2Map(extEmployees, DataCollectionEmployee::getIdNo);
|
|
|
|
|
employeeDeclareMap = SalaryEntityUtil.convert2Map(employeeDeclares, EmployeeDeclarePO::getCardNum);
|
|
|
|
|
}
|
|
|
|
|
// 需要新增的报送人员
|
|
|
|
|
List<EmployeeDeclarePO> needAddEmployeeDeclares = Lists.newArrayList();
|
|
|
|
|
// 需要更新的报送人员
|
|
|
|
|
List<EmployeeDeclarePO> needUpdateEmployeeDeclares = Lists.newArrayList();
|
|
|
|
|
// 索引(用于计算进度)
|
|
|
|
|
int index = 0;
|
|
|
|
|
// 失败的数量
|
|
|
|
|
int failCount = 0;
|
|
|
|
|
// 成功的数量
|
|
|
|
|
int successCount = 0;
|
|
|
|
|
// 错误行的索引
|
|
|
|
|
int failRowIndex = 1;
|
|
|
|
|
// 包含错误提示信息的sheet页
|
|
|
|
|
List<ExcelSheet> errorExcelSheets = Lists.newArrayList();
|
|
|
|
|
|
|
|
|
|
String imageId = Util.null2String(param.getImageId());
|
|
|
|
|
fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(imageId));
|
|
|
|
|
Sheet sheet = ExcelSupport.parseFile(fileInputStream, 0, EXCEL_TYPE_XLSX);
|
|
|
|
|
// 表头
|
|
|
|
|
List<String> headers = ExcelSupport.getSheetHeader(sheet, 0);
|
|
|
|
|
|
|
|
|
|
// 检查表头
|
|
|
|
|
String isCorrectHeader = checkHeader(headers, headerList);
|
|
|
|
|
if (isCorrectHeader != null) {
|
|
|
|
|
throw new SalaryRunTimeException(isCorrectHeader);
|
|
|
|
|
}
|
|
|
|
|
// 数据
|
|
|
|
|
List<Map<String, Object>> data = ExcelParseHelper.parse2Map(sheet, 1);
|
|
|
|
|
if (CollectionUtils.isEmpty(data)) {
|
|
|
|
|
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "导入数据不能为空"));
|
|
|
|
|
}
|
|
|
|
|
// 错误提示信息
|
|
|
|
|
List<ExcelComment> excelComments = Lists.newArrayList();
|
|
|
|
|
List<Map> errorData = new ArrayList<>();
|
|
|
|
|
for (int i = 0; i < data.size(); i++) {
|
|
|
|
|
//行号
|
|
|
|
|
String rowIndex = String.format("第%s行", i + 2);
|
|
|
|
|
|
|
|
|
|
Map<String, Object> map = data.get(i);
|
|
|
|
|
// 数据是否存在错误
|
|
|
|
|
boolean isError = false;
|
|
|
|
|
EmployeeDeclareExcelDTO employeeDeclareExcel = new EmployeeDeclareExcelDTO();
|
|
|
|
|
for (String dataKey : headerList) {
|
|
|
|
|
String dataValue = Util.null2String(map.get(dataKey));
|
|
|
|
|
if (StringUtils.equals(dataKey, SalaryI18nUtil.getI18nLabel( 0, "工号"))) {
|
|
|
|
|
if (StringUtils.equals(checkType, "jobNum") && StringUtils.isEmpty(dataValue)) {
|
|
|
|
|
isError = true;
|
|
|
|
|
Map<String, String> errorMessageMap = Maps.newHashMap();
|
|
|
|
|
errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(0, "工号不能为空"));
|
|
|
|
|
errorData.add(errorMessageMap);
|
|
|
|
|
}
|
|
|
|
|
employeeDeclareExcel.setJobNum(dataValue);
|
|
|
|
|
} else if (StringUtils.equals(dataKey, SalaryI18nUtil.getI18nLabel(0, "姓名"))) {
|
|
|
|
|
if (StringUtils.isEmpty(dataValue)) {
|
|
|
|
|
isError = true;
|
|
|
|
|
Map<String, String> errorMessageMap = Maps.newHashMap();
|
|
|
|
|
errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(0, "姓名不能为空"));
|
|
|
|
|
errorData.add(errorMessageMap);
|
|
|
|
|
} else {
|
|
|
|
|
employeeDeclareExcel.setEmployeeName(dataValue);
|
|
|
|
|
}
|
|
|
|
|
} else if (StringUtils.equals(dataKey, SalaryI18nUtil.getI18nLabel(0, "证件类型"))) {
|
|
|
|
|
employeeDeclareExcel.setCardType(CardTypeEnum.RESIDENT_IDENTITY_CARDS.getValue().toString());
|
|
|
|
|
} else if (StringUtils.equals(dataKey, SalaryI18nUtil.getI18nLabel(0, "证件号码"))) {
|
|
|
|
|
if (StringUtils.isEmpty(dataValue)) {
|
|
|
|
|
isError = true;
|
|
|
|
|
Map<String, String> errorMessageMap = Maps.newHashMap();
|
|
|
|
|
errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(0, "证件号码不能为空"));
|
|
|
|
|
errorData.add(errorMessageMap);
|
|
|
|
|
} else if (!SalaryCardUtil.checkIdNum(dataValue)) {
|
|
|
|
|
isError = true;
|
|
|
|
|
Map<String, String> errorMessageMap = Maps.newHashMap();
|
|
|
|
|
errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(0, "证件号码格式不正确"));
|
|
|
|
|
errorData.add(errorMessageMap);
|
|
|
|
|
} else {
|
|
|
|
|
employeeDeclareExcel.setCardNum(dataValue);
|
|
|
|
|
employeeDeclareExcel.setGender(SalaryCardUtil.judgeGender(dataValue).getValue().toString());
|
|
|
|
|
employeeDeclareExcel.setBirthday(SalaryCardUtil.judgeBirthday(dataValue).toString());
|
|
|
|
|
}
|
|
|
|
|
} else if (StringUtils.equals(dataKey, SalaryI18nUtil.getI18nLabel(0, "人员状态"))) {
|
|
|
|
|
boolean legalDataValue = false;
|
|
|
|
|
for (EmploymentStatusEnum employmentStatusEnum : EmploymentStatusEnum.values()) {
|
|
|
|
|
if (StringUtils.equals(dataValue, employmentStatusEnum.getDefaultLabel())) {
|
|
|
|
|
legalDataValue = true;
|
|
|
|
|
employeeDeclareExcel.setEmploymentStatus(employmentStatusEnum.getValue().toString());
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (!legalDataValue) {
|
|
|
|
|
isError = true;
|
|
|
|
|
Map<String, String> errorMessageMap = Maps.newHashMap();
|
|
|
|
|
errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(0, "人员状态只能填写正常或非正常"));
|
|
|
|
|
errorData.add(errorMessageMap);
|
|
|
|
|
}
|
|
|
|
|
} else if (StringUtils.equals(dataKey, SalaryI18nUtil.getI18nLabel(0, "任职受雇从业类型"))) {
|
|
|
|
|
boolean legalDataValue = false;
|
|
|
|
|
for (EmploymentTypeEnum employmentTypeEnum : EmploymentTypeEnum.values()) {
|
|
|
|
|
if (StringUtils.equals(dataValue, employmentTypeEnum.getDefaultLabel())) {
|
|
|
|
|
legalDataValue = true;
|
|
|
|
|
employeeDeclareExcel.setEmploymentType(employmentTypeEnum.getValue().toString());
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (!legalDataValue) {
|
|
|
|
|
isError = true;
|
|
|
|
|
Map<String, String> errorMessageMap = Maps.newHashMap();
|
|
|
|
|
errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(0, "任职受雇从业类型填写错误"));
|
|
|
|
|
errorData.add(errorMessageMap);
|
|
|
|
|
}
|
|
|
|
|
} else if (StringUtils.equals(dataKey, SalaryI18nUtil.getI18nLabel(0, "入职年度就业情形"))) {
|
|
|
|
|
employeeDeclareExcel.setEmploymentFirstYear(dataValue);
|
|
|
|
|
} else if (StringUtils.equals(dataKey, SalaryI18nUtil.getI18nLabel(0, "手机号码"))) {
|
|
|
|
|
if (StringUtils.isEmpty(dataValue)) {
|
|
|
|
|
isError = true;
|
|
|
|
|
Map<String, String> errorMessageMap = Maps.newHashMap();
|
|
|
|
|
errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(0, "手机号码不能为空"));
|
|
|
|
|
errorData.add(errorMessageMap);
|
|
|
|
|
} else if (!SalaryCardUtil.checkMobile(dataValue)) {
|
|
|
|
|
isError = true;
|
|
|
|
|
Map<String, String> errorMessageMap = Maps.newHashMap();
|
|
|
|
|
errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(0, "手机号码格式不正确"));
|
|
|
|
|
errorData.add(errorMessageMap);
|
|
|
|
|
} else {
|
|
|
|
|
employeeDeclareExcel.setMobile(dataValue);
|
|
|
|
|
}
|
|
|
|
|
} else if (StringUtils.equals(dataKey, SalaryI18nUtil.getI18nLabel(0, "任职受雇从业日期"))) {
|
|
|
|
|
if (StringUtils.isEmpty(dataValue)) {
|
|
|
|
|
if (!Objects.equals(employeeDeclareExcel.getEmploymentType(), EmploymentTypeEnum.OTHER.getValue())) {
|
|
|
|
|
isError = true;
|
|
|
|
|
Map<String, String> errorMessageMap = Maps.newHashMap();
|
|
|
|
|
errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(0, "任职受雇从业类型不为「其他」时,任职受雇从业日期为必填"));
|
|
|
|
|
errorData.add(errorMessageMap);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
if (!SalaryDateUtil.checkDay(dataValue)) {
|
|
|
|
|
isError = true;
|
|
|
|
|
Map<String, String> errorMessageMap = Maps.newHashMap();
|
|
|
|
|
errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(0, "日期格式不正确"));
|
|
|
|
|
errorData.add(errorMessageMap);
|
|
|
|
|
} else {
|
|
|
|
|
employeeDeclareExcel.setEmploymentDate(LocalDate.parse(dataValue).toString());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else if (StringUtils.equals(dataKey, SalaryI18nUtil.getI18nLabel(0, "离职日期"))) {
|
|
|
|
|
if (StringUtils.isEmpty(dataValue)) {
|
|
|
|
|
if (Objects.equals(employeeDeclareExcel.getEmploymentStatus(), EmploymentStatusEnum.ABNORMAL.getValue())) {
|
|
|
|
|
isError = true;
|
|
|
|
|
Map<String, String> errorMessageMap = Maps.newHashMap();
|
|
|
|
|
errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(0, "人员状态为非正常时,离职日期必填"));
|
|
|
|
|
errorData.add(errorMessageMap);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
if (!SalaryDateUtil.checkDay(dataValue)) {
|
|
|
|
|
isError = true;
|
|
|
|
|
Map<String, String> errorMessageMap = Maps.newHashMap();
|
|
|
|
|
errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(0, "日期格式不正确"));
|
|
|
|
|
errorData.add(errorMessageMap);
|
|
|
|
|
} else {
|
|
|
|
|
employeeDeclareExcel.setDismissDate(LocalDate.parse(dataValue).toString());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else if (StringUtils.equals(dataKey, SalaryI18nUtil.getI18nLabel(0, "是否残疾"))) {
|
|
|
|
|
if (StringUtils.equals(dataValue, SalaryOnOffEnum.ON.getDefaultLabel())) {
|
|
|
|
|
employeeDeclareExcel.setDisability(SalaryOnOffEnum.ON.getValue());
|
|
|
|
|
} else if (StringUtils.equals(dataValue, SalaryOnOffEnum.OFF.getDefaultLabel())) {
|
|
|
|
|
employeeDeclareExcel.setDisability(SalaryOnOffEnum.OFF.getValue());
|
|
|
|
|
} else {
|
|
|
|
|
isError = true;
|
|
|
|
|
Map<String, String> errorMessageMap = Maps.newHashMap();
|
|
|
|
|
errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(0, "是否残疾只能填写是与否"));
|
|
|
|
|
errorData.add(errorMessageMap);
|
|
|
|
|
}
|
|
|
|
|
} else if (StringUtils.equals(dataKey, SalaryI18nUtil.getI18nLabel(0, "残疾证号"))) {
|
|
|
|
|
if (StringUtils.isEmpty(dataValue)) {
|
|
|
|
|
if (Objects.equals(employeeDeclareExcel.getDisability(), SalaryOnOffEnum.ON.getValue())) {
|
|
|
|
|
isError = true;
|
|
|
|
|
Map<String, String> errorMessageMap = Maps.newHashMap();
|
|
|
|
|
errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(0, "「是否残疾」填「是」时,残疾证号必填"));
|
|
|
|
|
errorData.add(errorMessageMap);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
employeeDeclareExcel.setDisabilityCardNo(dataValue);
|
|
|
|
|
}
|
|
|
|
|
} else if (StringUtils.equals(dataKey, SalaryI18nUtil.getI18nLabel(0, "是否烈属"))) {
|
|
|
|
|
if (StringUtils.equals(dataValue, SalaryOnOffEnum.ON.getDefaultLabel())) {
|
|
|
|
|
employeeDeclareExcel.setMartyrDependents(SalaryOnOffEnum.ON.getValue());
|
|
|
|
|
} else if (StringUtils.equals(dataValue, SalaryOnOffEnum.OFF.getDefaultLabel())) {
|
|
|
|
|
employeeDeclareExcel.setMartyrDependents(SalaryOnOffEnum.OFF.getValue());
|
|
|
|
|
} else {
|
|
|
|
|
isError = true;
|
|
|
|
|
Map<String, String> errorMessageMap = Maps.newHashMap();
|
|
|
|
|
errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(0, "是否烈属只能填写是与否"));
|
|
|
|
|
errorData.add(errorMessageMap);
|
|
|
|
|
}
|
|
|
|
|
} else if (StringUtils.equals(dataKey, SalaryI18nUtil.getI18nLabel(0, "烈属证号"))) {
|
|
|
|
|
if (StringUtils.isEmpty(dataValue)) {
|
|
|
|
|
if (Objects.equals(employeeDeclareExcel.getMartyrDependents(), SalaryOnOffEnum.ON.getValue())) {
|
|
|
|
|
isError = true;
|
|
|
|
|
Map<String, String> errorMessageMap = Maps.newHashMap();
|
|
|
|
|
errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(0, "「是否烈属」填「是」时,烈属证号必填"));
|
|
|
|
|
errorData.add(errorMessageMap);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
employeeDeclareExcel.setMartyrDependentsCardNo(dataValue);
|
|
|
|
|
}
|
|
|
|
|
} else if (StringUtils.equals(dataKey, SalaryI18nUtil.getI18nLabel(0, "是否孤老"))) {
|
|
|
|
|
if (StringUtils.equals(dataValue, SalaryOnOffEnum.ON.getDefaultLabel())) {
|
|
|
|
|
employeeDeclareExcel.setLonelyOld(SalaryOnOffEnum.ON.getValue());
|
|
|
|
|
} else if (StringUtils.equals(dataValue, SalaryOnOffEnum.OFF.getDefaultLabel())) {
|
|
|
|
|
employeeDeclareExcel.setLonelyOld(SalaryOnOffEnum.OFF.getValue());
|
|
|
|
|
} else {
|
|
|
|
|
isError = true;
|
|
|
|
|
Map<String, String> errorMessageMap = Maps.newHashMap();
|
|
|
|
|
errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(0, "是否孤老只能填写是与否"));
|
|
|
|
|
errorData.add(errorMessageMap);
|
|
|
|
|
}
|
|
|
|
|
} else if (StringUtils.equals(dataKey, SalaryI18nUtil.getI18nLabel(0, "是否扣除减除费用"))) {
|
|
|
|
|
if (StringUtils.equals(dataValue, SalaryOnOffEnum.ON.getDefaultLabel())) {
|
|
|
|
|
employeeDeclareExcel.setDeductExpenses(SalaryOnOffEnum.ON.getValue());
|
|
|
|
|
} else if (StringUtils.equals(dataValue, SalaryOnOffEnum.OFF.getDefaultLabel())) {
|
|
|
|
|
employeeDeclareExcel.setDeductExpenses(SalaryOnOffEnum.OFF.getValue());
|
|
|
|
|
} else {
|
|
|
|
|
isError = true;
|
|
|
|
|
Map<String, String> errorMessageMap = Maps.newHashMap();
|
|
|
|
|
errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(0, "是否扣除减除费用只能填写是与否"));
|
|
|
|
|
errorData.add(errorMessageMap);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (!isError) {
|
|
|
|
|
if (StringUtils.equals(checkType, "jobNum")) {
|
|
|
|
|
EmployeeDeclarePO employeeDeclare = employeeDeclareMap.get(employeeDeclareExcel.getJobNum());
|
|
|
|
|
if (employeeDeclare == null) {
|
|
|
|
|
DataCollectionEmployee extEmployee = extEmployeeMap.get(employeeDeclareExcel.getJobNum());
|
|
|
|
|
DataCollectionEmployee simpleEmployee = simpleEmployeeMap.get(employeeDeclareExcel.getJobNum());
|
|
|
|
|
if (extEmployee == null && simpleEmployee == null) {
|
|
|
|
|
isError = true;
|
|
|
|
|
Map<String, String> errorMessageMap = Maps.newHashMap();
|
|
|
|
|
errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(0, "系统内的人员不存在该工号"));
|
|
|
|
|
errorData.add(errorMessageMap);
|
|
|
|
|
} else {
|
|
|
|
|
needAddEmployeeDeclares.add(buildEmployeeDeclare(extEmployee, simpleEmployee,
|
|
|
|
|
employeeDeclareExcel, taxAgentId, taxCycleDate, now));
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
EmployeeDeclarePO newEmployeeDeclare = new EmployeeDeclarePO();
|
|
|
|
|
BeanUtils.copyProperties(employeeDeclare, newEmployeeDeclare);
|
|
|
|
|
BeanUtils.copyProperties(employeeDeclareExcel, newEmployeeDeclare);
|
|
|
|
|
newEmployeeDeclare.setNewEmployeeInfo(StringUtils.equals(employeeDeclare.toCompareString(), newEmployeeDeclare.toCompareString()) ? 0 : 1);
|
|
|
|
|
newEmployeeDeclare.setUpdateTime(now);
|
|
|
|
|
needUpdateEmployeeDeclares.add(newEmployeeDeclare);
|
|
|
|
|
if (Objects.equals(newEmployeeDeclare.getNewEmployeeInfo(), 1)) {
|
|
|
|
|
newEmployeeDeclare.setDeclareStatus(DeclareStatusEnum.NOT_DECLARE.getValue());
|
|
|
|
|
newEmployeeDeclare.setDeclareErrorMsg("");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
EmployeeDeclarePO employeeDeclare = employeeDeclareMap.get(employeeDeclareExcel.getCardNum());
|
|
|
|
|
if (employeeDeclare == null) {
|
|
|
|
|
DataCollectionEmployee extEmployee = extEmployeeMap.get(employeeDeclareExcel.getCardNum());
|
|
|
|
|
DataCollectionEmployee simpleEmployee = simpleEmployeeMap.get(employeeDeclareExcel.getCardNum());
|
|
|
|
|
if (extEmployee == null && simpleEmployee == null) {
|
|
|
|
|
isError = true;
|
|
|
|
|
Map<String, String> errorMessageMap = Maps.newHashMap();
|
|
|
|
|
errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(0, "系统内的人员不存在该证件号码"));
|
|
|
|
|
errorData.add(errorMessageMap);
|
|
|
|
|
} else {
|
|
|
|
|
needAddEmployeeDeclares.add(buildEmployeeDeclare(extEmployee, simpleEmployee,
|
|
|
|
|
employeeDeclareExcel, taxAgentId, taxCycleDate, now));
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
EmployeeDeclarePO newEmployeeDeclare = new EmployeeDeclarePO();
|
|
|
|
|
BeanUtils.copyProperties(employeeDeclare, newEmployeeDeclare);
|
|
|
|
|
BeanUtils.copyProperties(employeeDeclareExcel, newEmployeeDeclare);
|
|
|
|
|
newEmployeeDeclare.setNewEmployeeInfo(StringUtils.equals(employeeDeclare.toCompareString(), newEmployeeDeclare.toCompareString()) ? 0 : 1);
|
|
|
|
|
newEmployeeDeclare.setUpdateTime(now);
|
|
|
|
|
if (Objects.equals(newEmployeeDeclare.getNewEmployeeInfo(), 1)) {
|
|
|
|
|
newEmployeeDeclare.setDeclareStatus(DeclareStatusEnum.NOT_DECLARE.getValue());
|
|
|
|
|
newEmployeeDeclare.setDeclareErrorMsg("");
|
|
|
|
|
}
|
|
|
|
|
needUpdateEmployeeDeclares.add(newEmployeeDeclare);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (isError) {
|
|
|
|
|
failCount++;
|
|
|
|
|
failRowIndex++;
|
|
|
|
|
errorData.add(map);
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
successCount++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (CollectionUtils.isNotEmpty(needAddEmployeeDeclares)) {
|
|
|
|
|
getEmployeeDeclareService(user).batchInsert(needAddEmployeeDeclares);
|
|
|
|
|
}
|
|
|
|
|
if (CollectionUtils.isNotEmpty(needUpdateEmployeeDeclares)) {
|
|
|
|
|
needUpdateEmployeeDeclares.stream().forEach(getEmployeeDeclareMapper()::update);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
apidatas.put("successCount", successCount);
|
|
|
|
|
apidatas.put("errorCount", failCount);
|
|
|
|
|
apidatas.put("errorNotice", excelComments);
|
|
|
|
|
// 发送导入回调信息
|
|
|
|
|
// salaryBatchService.sendImportCallBackInfo(message, successCount, errorCount, errorExcelSheets);
|
|
|
|
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
log.error("人员报送信息导入失败:{}", e.getMessage(), e);
|
|
|
|
|
} finally {
|
|
|
|
|
IOUtils.closeQuietly(fileInputStream);
|
|
|
|
|
}
|
|
|
|
|
return apidatas;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private EmployeeDeclarePO buildEmployeeDeclare(DataCollectionEmployee extEmployee, DataCollectionEmployee simpleEmployee,
|
|
|
|
|
EmployeeDeclareExcelDTO employeeDeclareExcel, Long taxAgentId,
|
|
|
|
|
Date taxCycle, Date now) {
|
|
|
|
|
EmployeeDeclarePO employeeDeclare = EmployeeDeclarePO.builder()
|
|
|
|
|
.id(IdGenerator.generate())
|
|
|
|
|
.taxAgentId(taxAgentId)
|
|
|
|
|
.taxCycle(taxCycle)
|
|
|
|
|
.tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY)
|
|
|
|
|
.creator(Long.valueOf(user.getUID()))
|
|
|
|
|
.deleteType(DeleteTypeEnum.NOT_DELETED.getValue())
|
|
|
|
|
.createTime(now)
|
|
|
|
|
.updateTime(now).build();
|
|
|
|
|
BeanUtils.copyProperties(employeeDeclareExcel, employeeDeclare);
|
|
|
|
|
if (extEmployee != null) {
|
|
|
|
|
employeeDeclare.setEmployeeId(extEmployee.getEmployeeId());
|
|
|
|
|
employeeDeclare.setEmployeeType(EmployeeTypeEnum.EXT_EMPLOYEE.getValue());
|
|
|
|
|
}
|
|
|
|
|
if (simpleEmployee != null) {
|
|
|
|
|
employeeDeclare.setEmployeeId(simpleEmployee.getEmployeeId());
|
|
|
|
|
employeeDeclare.setEmployeeType(EmployeeTypeEnum.ORGANIZATION.getValue());
|
|
|
|
|
}
|
|
|
|
|
return employeeDeclare;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public XSSFWorkbook export(EmployeeDeclareListQueryParam queryParam) {
|
|
|
|
|
// 查询需要报送的人员
|
|
|
|
|
|