Merge branch 'release/个税版本' into feature/个税2312版本功能
This commit is contained in:
commit
8b78ccd43b
|
|
@ -0,0 +1,47 @@
|
|||
package com.engine.salary.entity.employeedeclare.bo;
|
||||
|
||||
import com.engine.salary.entity.employeedeclare.dto.EmployeeDeclareExcelDTO;
|
||||
import com.engine.salary.entity.employeedeclare.po.EmployeeDeclarePO;
|
||||
import com.engine.salary.enums.employeedeclare.CardTypeEnum;
|
||||
import com.engine.salary.enums.employeedeclare.EmploymentTypeEnum;
|
||||
import com.engine.salary.exception.SalaryRunTimeException;
|
||||
import com.engine.salary.util.SalaryDateUtil;
|
||||
import com.engine.salary.util.SalaryI18nUtil;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
/**
|
||||
* @author Harryxzy
|
||||
* @ClassName EmployeeDeclareBO
|
||||
* @date 2023/12/27 14:13
|
||||
* @description
|
||||
*/
|
||||
public class EmployeeDeclareBO {
|
||||
|
||||
public static EmployeeDeclarePO convert2PO(EmployeeDeclareExcelDTO dto) {
|
||||
if (dto == null) {
|
||||
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "参数错误"));
|
||||
}
|
||||
EmployeeDeclarePO po = EmployeeDeclarePO.builder()
|
||||
.jobNum(dto.getJobNum())
|
||||
.employeeName(dto.getEmployeeName())
|
||||
.cardType(dto.getCardType() == null ? null :CardTypeEnum.RESIDENT_IDENTITY_CARDS.getValue())
|
||||
.cardNum(dto.getCardNum())
|
||||
.employmentStatus(StringUtils.isBlank(dto.getEmploymentStatus()) ? null : new Integer(dto.getEmploymentStatus()))
|
||||
.employmentType(EmploymentTypeEnum.getValueByDefaultLabel(dto.getEmploymentType()))
|
||||
.employmentFirstYear(dto.getEmploymentFirstYear())
|
||||
.mobile(dto.getMobile())
|
||||
.employmentDate(StringUtils.isBlank(dto.getEmploymentDate()) ? null : SalaryDateUtil.stringToDate(dto.getEmploymentDate()) )
|
||||
.dismissDate(StringUtils.isBlank(dto.getDismissDate()) ? null : SalaryDateUtil.stringToDate(dto.getDismissDate()))
|
||||
.disability(dto.getDisability())
|
||||
.disabilityCardNo(dto.getDisabilityCardNo())
|
||||
.martyrDependents(dto.getMartyrDependents())
|
||||
.martyrDependentsCardNo(dto.getMartyrDependentsCardNo())
|
||||
.lonelyOld(dto.getLonelyOld())
|
||||
.deductExpenses(dto.getDeductExpenses())
|
||||
.gender(StringUtils.isBlank(dto.getGender()) ? null : new Integer(dto.getGender()))
|
||||
.birthday(StringUtils.isBlank(dto.getBirthday()) ? null : SalaryDateUtil.stringToDate(dto.getBirthday()))
|
||||
.build();
|
||||
return po;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -104,12 +104,33 @@ public class EmployeeDeclareExcelDTO {
|
|||
@TableTitle(title = "任职受雇从业日期", dataIndex = "employmentDate", key = "employmentDate")
|
||||
private String employmentDate;
|
||||
|
||||
// 入职年度就业情形
|
||||
private String employmentFirstYear;
|
||||
|
||||
|
||||
// 离职日期
|
||||
@SalaryTableColumn(text = "离职日期", width = "10%", column = "dismissDate")
|
||||
@TableTitle(title = "离职日期", dataIndex = "dismissDate", key = "dismissDate")
|
||||
private String dismissDate;
|
||||
|
||||
// 是否残疾
|
||||
private Integer disability;
|
||||
|
||||
// 残疾证号
|
||||
private String disabilityCardNo;
|
||||
|
||||
// 是否孤老
|
||||
private Integer lonelyOld;
|
||||
|
||||
// 是否是烈属
|
||||
private Integer martyrDependents;
|
||||
|
||||
// 烈属证号
|
||||
private String martyrDependentsCardNo;
|
||||
|
||||
// 是否扣除减除费用
|
||||
private Integer deductExpenses;
|
||||
|
||||
// 申报状态
|
||||
private DeclareStatusEnum declareStatus;
|
||||
|
||||
|
|
|
|||
|
|
@ -15,4 +15,14 @@ public class EmployeeDeclareImportParam extends EmployeeDeclareListQueryParam {
|
|||
|
||||
@ApiModelProperty("是否导出现有数据")
|
||||
private String exportData;
|
||||
|
||||
//上传文件id
|
||||
String imageId;
|
||||
|
||||
// 校验字段
|
||||
private String checkType;
|
||||
|
||||
// 个税扣义务人id
|
||||
private Long taxAgentId;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@ package com.engine.salary.enums.employeedeclare;
|
|||
|
||||
import com.engine.salary.enums.BaseEnum;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* 人员状态
|
||||
* <p>Copyright: Copyright (c) 2023</p>
|
||||
|
|
@ -41,4 +43,17 @@ public enum EmploymentStatusEnum implements BaseEnum<Integer> {
|
|||
public Integer getLabelId() {
|
||||
return labelId;
|
||||
}
|
||||
|
||||
public static Integer getValueByDefaultLabel(String defaultLabel) {
|
||||
if (defaultLabel == null) {
|
||||
return null;
|
||||
}
|
||||
EmploymentStatusEnum[] enumAry = EmploymentStatusEnum.values();
|
||||
for(int i = 0; i < Arrays.asList(enumAry).size(); i++){
|
||||
if (enumAry[i].getDefaultLabel().equals(defaultLabel)) {
|
||||
return enumAry[i].getValue();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@ package com.engine.salary.enums.employeedeclare;
|
|||
|
||||
import com.engine.salary.enums.BaseEnum;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* 任职受雇从业类型
|
||||
* <p>Copyright: Copyright (c) 2023</p>
|
||||
|
|
@ -44,4 +46,17 @@ public enum EmploymentTypeEnum implements BaseEnum<Integer> {
|
|||
public Integer getLabelId() {
|
||||
return labelId;
|
||||
}
|
||||
|
||||
public static Integer getValueByDefaultLabel(String defaultLabel) {
|
||||
if (defaultLabel == null) {
|
||||
return null;
|
||||
}
|
||||
EmploymentTypeEnum[] enumAry = EmploymentTypeEnum.values();
|
||||
for(int i = 0; i < Arrays.asList(enumAry).size(); i++){
|
||||
if (enumAry[i].getDefaultLabel().equals(defaultLabel)) {
|
||||
return enumAry[i].getValue();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@ package com.engine.salary.enums.employeedeclare;
|
|||
|
||||
import com.engine.salary.enums.BaseEnum;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* 性别
|
||||
* <p>Copyright: Copyright (c) 2023</p>
|
||||
|
|
@ -41,4 +43,17 @@ public enum GenderEnum implements BaseEnum<Integer> {
|
|||
public Integer getLabelId() {
|
||||
return labelId;
|
||||
}
|
||||
|
||||
public static Integer getValueByDefaultLabel(String defaultLabel) {
|
||||
if (defaultLabel == null) {
|
||||
return null;
|
||||
}
|
||||
GenderEnum[] enumAry = GenderEnum.values();
|
||||
for(int i = 0; i < Arrays.asList(enumAry).size(); i++){
|
||||
if (enumAry[i].getDefaultLabel().equals(defaultLabel)) {
|
||||
return enumAry[i].getValue();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@ import com.engine.salary.entity.employeedeclare.param.EmployeeDeclareImportParam
|
|||
import com.engine.salary.entity.employeedeclare.param.EmployeeDeclareListQueryParam;
|
||||
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @description: 人员报送(人员)导入导出
|
||||
* @author: xiajun
|
||||
|
|
@ -21,6 +23,21 @@ public interface EmployeeDeclareExcelService {
|
|||
*/
|
||||
XSSFWorkbook exportTemplate(EmployeeDeclareImportParam importParam);
|
||||
|
||||
|
||||
/**
|
||||
* 导入预览
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
Map<String, Object> preview(EmployeeDeclareImportParam param);
|
||||
|
||||
/**
|
||||
* 导入人员报送数据
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
Map<String, Object> importData(EmployeeDeclareImportParam param);
|
||||
|
||||
/**
|
||||
* 导出人员信息采集-全部
|
||||
*
|
||||
|
|
|
|||
|
|
@ -182,4 +182,6 @@ public interface EmployeeDeclareService{
|
|||
* @return
|
||||
*/
|
||||
String syncEmploymentDate(EmployeeDeclareSyncStartDateParam param);
|
||||
|
||||
void batchInsert(List<EmployeeDeclarePO> insertList);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,36 +2,62 @@ 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.bo.EmployeeDeclareBO;
|
||||
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 org.springframework.beans.BeanWrapper;
|
||||
import org.springframework.beans.BeanWrapperImpl;
|
||||
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.beans.PropertyDescriptor;
|
||||
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 +82,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) {
|
||||
// 查询人员
|
||||
|
|
@ -78,8 +108,8 @@ public class EmployeeDeclareExcelServiceImpl extends Service implements Employee
|
|||
row.add(employmentTypeEnum == null ? "" : employmentTypeEnum.getDefaultLabel());
|
||||
row.add(employeeDeclare.getEmploymentFirstYear());
|
||||
row.add(employeeDeclare.getMobile());
|
||||
row.add(Util.null2String(employeeDeclare.getEmploymentDate()));
|
||||
row.add(Util.null2String(employeeDeclare.getDismissDate()));
|
||||
row.add(SalaryDateUtil.getFormatDate(employeeDeclare.getEmploymentDate()));
|
||||
row.add(SalaryDateUtil.getFormatDate(employeeDeclare.getDismissDate()));
|
||||
row.add(Objects.equals(employeeDeclare.getDisability(), 1) ? yesI18 : noI18);
|
||||
row.add(employeeDeclare.getDisabilityCardNo());
|
||||
row.add(Objects.equals(employeeDeclare.getMartyrDependents(), 1) ? yesI18 : noI18);
|
||||
|
|
@ -96,6 +126,432 @@ public class EmployeeDeclareExcelServiceImpl extends Service implements Employee
|
|||
return ExcelUtil.genWorkbook(excelSheetData);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, Object> preview(EmployeeDeclareImportParam param) {
|
||||
//1、参数校验
|
||||
String imageId = param.getImageId();
|
||||
if (StringUtils.isBlank(imageId)) {
|
||||
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "文件id为空"));
|
||||
}
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
|
||||
InputStream fileInputStream = null;
|
||||
try {
|
||||
|
||||
fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(param.getImageId()));
|
||||
|
||||
Sheet sheet = ExcelSupport.parseFile(fileInputStream, 0, EXCEL_TYPE_XLSX);
|
||||
List<String> headers = ExcelSupport.getSheetHeader(sheet, 0);
|
||||
|
||||
map.put("headers", headers);
|
||||
map.put("list", ExcelParseHelper.parse2List(sheet, 1));
|
||||
|
||||
return map;
|
||||
|
||||
} finally {
|
||||
IOUtils.closeQuietly(fileInputStream);
|
||||
}
|
||||
}
|
||||
|
||||
@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 = SalaryDateUtil.getFormatDate(param.getTaxCycle());
|
||||
Date taxCycleDate = param.getTaxCycle();
|
||||
|
||||
// 导出模板中的表头
|
||||
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);
|
||||
EmployeeDeclarePO employeeDeclarePO = EmployeeDeclareBO.convert2PO(employeeDeclareExcel);
|
||||
BeanUtils.copyProperties(employeeDeclarePO, newEmployeeDeclare, getNullPropertyNames(employeeDeclarePO));
|
||||
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", errorData);
|
||||
// 发送导入回调信息
|
||||
// salaryBatchService.sendImportCallBackInfo(message, successCount, errorCount, errorExcelSheets);
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("人员报送信息导入失败:{}", e.getMessage(), e);
|
||||
} finally {
|
||||
IOUtils.closeQuietly(fileInputStream);
|
||||
}
|
||||
return apidatas;
|
||||
}
|
||||
|
||||
|
||||
public static String[] getNullPropertyNames (Object source) {
|
||||
final BeanWrapper src = new BeanWrapperImpl(source);
|
||||
PropertyDescriptor[] pds = src.getPropertyDescriptors();
|
||||
|
||||
Set<String> emptyNames = new HashSet<>();
|
||||
for(PropertyDescriptor pd : pds) {
|
||||
Object srcValue = src.getPropertyValue(pd.getName());
|
||||
// 此处判断可根据需求修改
|
||||
if (srcValue == null) {
|
||||
emptyNames.add(pd.getName());
|
||||
}
|
||||
}
|
||||
String[] result = new String[emptyNames.size()];
|
||||
return emptyNames.toArray(result);
|
||||
}
|
||||
|
||||
|
||||
|
||||
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();
|
||||
EmployeeDeclarePO employeeDeclarePO = EmployeeDeclareBO.convert2PO(employeeDeclareExcel);
|
||||
|
||||
BeanUtils.copyProperties(employeeDeclarePO, employeeDeclare, getNullPropertyNames(employeeDeclarePO));
|
||||
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) {
|
||||
// 查询需要报送的人员
|
||||
|
|
|
|||
|
|
@ -727,4 +727,13 @@ public class EmployeeDeclareServiceImpl extends Service implements EmployeeDecla
|
|||
|
||||
return "执行完毕";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void batchInsert(List<EmployeeDeclarePO> insertList) {
|
||||
if (CollectionUtils.isEmpty(insertList)) {
|
||||
return;
|
||||
}
|
||||
List<List<EmployeeDeclarePO>> partition = Lists.partition(insertList, 100);
|
||||
partition.forEach(getEmployeeDeclareMapper()::batchInsert);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -304,6 +304,35 @@ public class EmployeeDeclareController {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 人员报送-导入预览
|
||||
*
|
||||
* @param queryParam 导出参数
|
||||
* @return
|
||||
*/
|
||||
@POST
|
||||
@Path("/preview")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public String preview(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody EmployeeDeclareImportParam queryParam) {
|
||||
User user = HrmUserVarify.getUser(request, response);
|
||||
return new ResponseResult<EmployeeDeclareImportParam, Map<String, Object>>(user).run(getEmployeeDeclareWrapper(user)::preview, queryParam);
|
||||
}
|
||||
|
||||
/**
|
||||
* 人员报送-导入
|
||||
*
|
||||
* @param queryParam 导出参数
|
||||
* @return
|
||||
*/
|
||||
@POST
|
||||
@Path("/importData")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public String importData(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody EmployeeDeclareImportParam queryParam) {
|
||||
User user = HrmUserVarify.getUser(request, response);
|
||||
return new ResponseResult<EmployeeDeclareImportParam, Map<String, Object>>(user).run(getEmployeeDeclareWrapper(user)::importData, queryParam);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 人员报送-导出全部人员
|
||||
*
|
||||
|
|
|
|||
|
|
@ -567,6 +567,26 @@ public class EmployeeDeclareWrapper extends Service {
|
|||
return getEmployeeDeclareExcelService(user).exportTemplate(param);
|
||||
}
|
||||
|
||||
/**
|
||||
* 人员报送-导入数据
|
||||
*
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
public Map<String, Object> preview(EmployeeDeclareImportParam param) {
|
||||
return getEmployeeDeclareExcelService(user).preview(param);
|
||||
}
|
||||
|
||||
/**
|
||||
* 人员报送-导入数据
|
||||
*
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
public Map<String, Object> importData(EmployeeDeclareImportParam param) {
|
||||
return getEmployeeDeclareExcelService(user).importData(param);
|
||||
}
|
||||
|
||||
/**
|
||||
* 人员报送-导出本月全部的人员
|
||||
*
|
||||
|
|
|
|||
Loading…
Reference in New Issue