补充列

This commit is contained in:
钱涛 2022-04-19 15:13:08 +08:00
parent 51e816ab56
commit c537b7d944
9 changed files with 311 additions and 183 deletions

View File

@ -1,6 +1,7 @@
package com.engine.salary.entity.salaryacct.bo;
import com.cloudstore.eccom.pc.table.WeaTableColumn;
import com.engine.salary.annotation.SalaryFormulaVar;
import com.engine.salary.constant.SalaryDefaultTenantConstant;
import com.engine.salary.entity.datacollection.DataCollectionEmployee;
import com.engine.salary.entity.salaryacct.dto.ConsolidatedTaxDetailDTO;
@ -20,6 +21,7 @@ import com.engine.salary.entity.salarysob.po.SalarySobPO;
import com.engine.salary.entity.taxrate.TaxAgent;
import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum;
import com.engine.salary.util.SalaryEntityUtil;
import com.engine.salary.util.SalaryI18nUtil;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import org.apache.commons.collections4.CollectionUtils;
@ -370,13 +372,13 @@ public class SalaryAcctResultBO {
public static Map<String, String> buildEmployeeFieldName() {
Field[] declaredFields = SalaryFormulaEmployeeDTO.class.getDeclaredFields();
Map<String, String> employeeFieldNameMap = Maps.newHashMapWithExpectedSize(declaredFields.length);
// for (Field declaredField : declaredFields) {
// if (!declaredField.isAnnotationPresent(SalaryFormulaVar.class)) {
// continue;
// }
// SalaryFormulaVar annotation = declaredField.getAnnotation(SalaryFormulaVar.class);
// employeeFieldNameMap.put(declaredField.getName(), SystemEnv.getHtmlLabelName(annotation.labelId(), annotation.defaultLabel()));
// }
for (Field declaredField : declaredFields) {
if (!declaredField.isAnnotationPresent(SalaryFormulaVar.class)) {
continue;
}
SalaryFormulaVar annotation = declaredField.getAnnotation(SalaryFormulaVar.class);
employeeFieldNameMap.put(declaredField.getName(), SalaryI18nUtil.getI18nLabel(annotation.labelId(), annotation.defaultLabel()));
}
return employeeFieldNameMap;
}

View File

@ -66,6 +66,6 @@ public class SalaryAcctRecordListDTO {
@TableTitle(title = "备注", dataIndex = "description", key = "description")
private String description;
@TableTitle(title = "操作", dataIndex = "description", key = "description")
@TableTitle(title = "操作", dataIndex = "operate", key = "operate")
private List<WeaTableOperate> operate;
}

View File

@ -0,0 +1,31 @@
package com.engine.salary.entity.salaryacct.param;
import com.engine.salary.util.valid.DataCheck;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
*
* <p>Copyright: Copyright (c) 2022</p>
* <p>Company: 泛微软件</p>
*
* @author qiantao
* @version 1.0
**/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SalaryAcctImportParam {
//上传文件id
@DataCheck(require = true,message = "imageId为空")
String imageId;
//薪资核算记录的id
@DataCheck(require = true,message = "薪资核算记录id为空")
Long salaryAcctRecordId;
}

View File

@ -5,7 +5,7 @@
<select id="listEmployee" resultType="com.engine.salary.entity.datacollection.DataCollectionEmployee">
select e.ID as employeeId,
e.LASTNAME as username,
d.DEPARTMENTNAME as deparmentName
d.DEPARTMENTNAME as departmentName
from hrmresource e
left join hrmdepartment d on e.departmentid = d.id
where e.status not in (7)

View File

@ -121,7 +121,7 @@ public interface SalaryArchiveService {
*/
List<SalaryArchiveDataDTO> getSalaryArchiveTaxAgentData(LocalDateRange localDateRange, Collection<Long> employeeIds);
void importSalaryArchive(SalaryArchiveImportHandleParam param);
Map<String,Object> importSalaryArchive(SalaryArchiveImportHandleParam param);
Map<String, Object> preview(SalaryArchiveImportHandleParam param);

View File

@ -301,7 +301,6 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
headerList.add(salaryItemPO.getName());
dataIndexList.add("" + salaryItemPO.getId());
}
String[] headers = headerList.toArray(new String[0]);
// 查询薪资核算结果
List<Map<String, Object>> resultMapList = getSalaryAcctResultService(user).listByParam(param);
@ -426,7 +425,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
// DSTenantKeyThreadVar.tenantKey.remove();
// }
// }
//
// @BatchImportHandler("importExcelAcctResult")
// @Transactional(rollbackFor = Exception.class)
// public void importExcelAcctResult() {
@ -444,15 +443,13 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
// DSTenantKeyThreadVar.tenantKey.remove();
// }
// }
//
// private void batchImport(BatchDocumentMessage message, String importType) {
// String tenantKey = message.getTenantKey();
// Long currentEmployeeId = message.getUserId();
// private void batchImport(SalaryAcctImportParam param, String importType) {
// ValidUtil.doValidator(param);
// LocalDateTime now = LocalDateTime.now();
// // 前端传入的参数薪资核算记录的id
// Map<String, Object> paramMap = JsonUtil.parseMap(message.getUploadSet().getCustomData(), Object.class);
//
// // 薪资核算记录的id
// Long salaryAcctRecordId = Long.valueOf(String.valueOf(paramMap.get("salaryAcctRecordId")));
// Long salaryAcctRecordId = param.getSalaryAcctRecordId();
// // 薪资核算记录
// SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(salaryAcctRecordId);
// if (salaryAcctRecordPO == null) {
@ -468,11 +465,11 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
// List<SalaryAcctEmployeePO> salaryAcctEmployees = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordId(salaryAcctRecordId);
// Map<String, SalaryAcctEmployeePO> salaryAcctEmployeeMap = SalaryEntityUtil.convert2Map(salaryAcctEmployees, e -> e.getEmployeeId() + "-" + e.getTaxAgentId());
// // 租户下所有的人员
// List<SalaryEmployee> salaryEmployees = getSalaryEmployeeService(user).listAll(tenantKey);
// Map<String, Long> salaryEmployeeMap = SalaryEntityUtil.convert2Map(salaryEmployees, SalaryEmployee::getUsername, SalaryEmployee::getId);
// List<DataCollectionEmployee> salaryEmployees = getSalaryEmployeeService(user).listAll();
// Map<String, Long> salaryEmployeeMap = SalaryEntityUtil.convert2Map(salaryEmployees, DataCollectionEmployee::getUsername, DataCollectionEmployee::getEmployeeId);
// // 租户下所有的个税扣缴义务人
// List<TaxAgentPO> taxAgents = taxAgentService.listAll(tenantKey);
// Map<String, Long> taxAgentNameMap = SalaryEntityUtil.convert2Map(taxAgents, TaxAgentPO::getName, TaxAgentPO::getId);
// List<TaxAgent> taxAgents = taxAgentService.listAll();
// Map<String, Long> taxAgentNameMap = SalaryEntityUtil.convert2Map(taxAgents, TaxAgent::getName, TaxAgent::getId);
//
// // 索引(用于计算进度)
// int index = 0;
@ -487,7 +484,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
// .reduce(BigDecimal.ZERO, BigDecimal::add)
// .intValue();
// // 包含错误提示信息的sheet页
// List<ExcelSheet> errorExcelSheets = Lists.newArrayList();
// List<Map<String, String>> errorExcelSheets = Lists.newArrayList();
// // 解析excel
// Set<Long> salaryAcctEmpIds = Sets.newHashSet();
// // excel导入了哪些薪资项目
@ -496,160 +493,165 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
// List<SalaryAcctEmployeePO> newSalaryAcctEmployees = Lists.newArrayList();
//
// List<ExcelAcctResultPO> excelAcctResults = Lists.newArrayList();
// for (ExcelSheet excelSheet : message.getBatchFile().getExcelSheets()) {
// if (CollectionUtils.isEmpty(excelSheet.getHeader())) {
// continue;
// }
// // 错误提示信息
// List<ExcelComment> excelComments = Lists.newArrayList();
// // 存在错误的那行数据
// List<Map<String, Object>> errorDatas = Lists.newArrayList();
// // 表头
// List<Map> headers = excelSheet.getHeader();
// // 处理数值
// List<Map<String, Object>> data = excelSheet.getData();
// if (CollectionUtils.isEmpty(data)) {
// continue;
// }
// for (int i = 0; i < data.size(); i++) {
// int usernameIndex = 0;
// boolean isError = false;
// Map<String, Object> map = data.get(i);
// Long employeeId = 0L;
// Long taxAgentId = 0L;
// List<SalaryAcctResultPO> salaryAcctResultsOfOneEmp = Lists.newArrayListWithExpectedSize(headers.size() - 1);
// List<ExcelAcctResultPO> excelAcctResultsOfOneEmp = Lists.newArrayListWithExpectedSize(headers.size() - 1);
// for (int j = 0; j < headers.size(); j++) {
// Map header = headers.get(j);
// Object dataKey = header.get("key");
// if (dataKey == null) {
// continue;
// }
// String dataValue = (String) map.getOrDefault(dataKey.toString(), "");
// if (StringUtils.equals(SalaryI18nUtil.getI18nLabel(85429, "姓名"), dataKey.toString())) {
// usernameIndex = j;
// if (StringUtils.isEmpty(dataValue)) {
// isError = true;
// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102838, "姓名不能为空"), i, i, j, j);
// } else {
// employeeId = salaryEmployeeMap.getOrDefault(dataValue, 0L);
// if (employeeId == null || employeeId <= 0) {
// isError = true;
// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100579, "姓名错误,系统内不存在该姓名"), i, i, j, j);
// }
// }
// } else if (StringUtils.equals(SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"), dataKey.toString())) {
// if (StringUtils.isEmpty(dataValue)) {
// isError = true;
// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102839, "个税扣缴义务人不能为空"), i, i, j, j);
// } else {
// taxAgentId = taxAgentNameMap.getOrDefault(dataValue, 0L);
// if (taxAgentId == null || taxAgentId <= 0) {
// isError = true;
// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102840, "个税扣缴义务人错误,系统内不存在该个税扣缴义务人"), i, i, j, j);
// }
// }
// } else {
// Long salaryItemId = salaryItemMap.get(dataKey.toString());
// if (salaryItemId == null || salaryItemId <= 0) {
// isError = true;
// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102841, "表头错误,本次核算所用账套不包含该薪资项目"), i, i, j, j);
// } else {
// excelSalaryItemIds.add(salaryItemId);
// if (StringUtils.equals("importExcelAcctResult", importType)) {
// ExcelAcctResultPO excelAcctResult = ExcelAcctResultPO.builder()
// .id(IdGenerator.generate())
// .salaryAcctRecordId(salaryAcctRecordPO.getId())
// .salarySobId(salaryAcctRecordPO.getSalarySobId())
// .salaryItemId(salaryItemId)
// .resultValue(dataValue)
// .creator(currentEmployeeId)
// .createTime(now)
// .updateTime(now)
// .deleteType(0)
// .tenantKey(tenantKey)
// .build();
// excelAcctResultsOfOneEmp.add(excelAcctResult);
// }
// if (StringUtils.equals("importSalaryAcctResult", importType)) {
// SalaryAcctResultPO salaryAcctResult = SalaryAcctResultPO.builder()
// .id(IdGenerator.generate())
// .salaryAcctRecordId(salaryAcctRecordPO.getId())
// .salarySobId(salaryAcctRecordPO.getSalarySobId())
// .salaryItemId(salaryItemId)
// .resultValue(dataValue)
// .creator(currentEmployeeId)
// .createTime(now)
// .updateTime(now)
// .deleteType(0)
// .tenantKey(tenantKey)
// .build();
// salaryAcctResultsOfOneEmp.add(salaryAcctResult);
// }
// }
// }
// // 如果是线下对比如果个税扣缴义务人+人员目前不在核算人员里面不支持导入
// if (StringUtils.equals("importExcelAcctResult", importType)
// && (employeeId != null && employeeId > 0)
// && (taxAgentId != null && taxAgentId > 0)
// && i == data.size() - 1
// && !salaryAcctEmployeeMap.containsKey(employeeId + "-" + taxAgentId)) {
// isError = true;
// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102842, "本次薪资核算不包含该人员"), i, i, usernameIndex, usernameIndex);
// }
// }
// // 每处理50个数据更新一次进度
// index++;
// if (index % 50 == 0 || index >= total) {
// salaryBatchService.sendImportRate(message.getBizId(), total, index);
// }
// if (isError) {
// failCount++;
// errorDatas.add(map);
//
// InputStream fileInputStream = null;
// fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(param.getImageId()));
//
// Sheet sheet = ExcelSupport.parseFile(fileInputStream, 0, EXCEL_TYPE_XLSX);
// List<String> headers = ExcelSupport.getSheetHeader(sheet, 0);
//
// if (CollectionUtils.isEmpty(headers)) {
// return;
// }
// // 错误提示信息
// List<ExcelComment> excelComments = Lists.newArrayList();
// // 存在错误的那行数据
// List<Map<String, Object>> errorDatas = Lists.newArrayList();
// // 表头
// List<Map> headers = excelSheet.getHeader();
// // 处理数值
// List<Map<String, Object>> data = excelSheet.getData();
// if (CollectionUtils.isEmpty(data)) {
// continue;
// }
// for (int i = 0; i < data.size(); i++) {
// int usernameIndex = 0;
// boolean isError = false;
// Map<String, Object> map = data.get(i);
// Long employeeId = 0L;
// Long taxAgentId = 0L;
// List<SalaryAcctResultPO> salaryAcctResultsOfOneEmp = Lists.newArrayListWithExpectedSize(headers.size() - 1);
// List<ExcelAcctResultPO> excelAcctResultsOfOneEmp = Lists.newArrayListWithExpectedSize(headers.size() - 1);
// for (int j = 0; j < headers.size(); j++) {
// Map header = headers.get(j);
// Object dataKey = header.get("key");
// if (dataKey == null) {
// continue;
// }
// SalaryAcctEmployeePO salaryAcctEmployee = salaryAcctEmployeeMap.get(employeeId + "-" + taxAgentId);
// Long salaryAcctEmpId = Optional.ofNullable(salaryAcctEmployee).map(SalaryAcctEmployeePO::getId).orElse(0L);
// if (StringUtils.equals("importExcelAcctResult", importType)) {
// for (ExcelAcctResultPO excelAcctResultPO : excelAcctResultsOfOneEmp) {
// excelAcctResultPO.setEmployeeId(employeeId);
// excelAcctResultPO.setTaxAgentId(taxAgentId);
// excelAcctResultPO.setSalaryAcctEmpId(salaryAcctEmpId);
// String dataValue = (String) map.getOrDefault(dataKey.toString(), "");
// if (StringUtils.equals(SalaryI18nUtil.getI18nLabel(85429, "姓名"), dataKey.toString())) {
// usernameIndex = j;
// if (StringUtils.isEmpty(dataValue)) {
// isError = true;
// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102838, "姓名不能为空"), i, i, j, j);
// } else {
// employeeId = salaryEmployeeMap.getOrDefault(dataValue, 0L);
// if (employeeId == null || employeeId <= 0) {
// isError = true;
// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100579, "姓名错误,系统内不存在该姓名"), i, i, j, j);
// }
// }
// } else if (StringUtils.equals(SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"), dataKey.toString())) {
// if (StringUtils.isEmpty(dataValue)) {
// isError = true;
// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102839, "个税扣缴义务人不能为空"), i, i, j, j);
// } else {
// taxAgentId = taxAgentNameMap.getOrDefault(dataValue, 0L);
// if (taxAgentId == null || taxAgentId <= 0) {
// isError = true;
// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102840, "个税扣缴义务人错误,系统内不存在该个税扣缴义务人"), i, i, j, j);
// }
// }
// } else {
// Long salaryItemId = salaryItemMap.get(dataKey.toString());
// if (salaryItemId == null || salaryItemId <= 0) {
// isError = true;
// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102841, "表头错误,本次核算所用账套不包含该薪资项目"), i, i, j, j);
// } else {
// excelSalaryItemIds.add(salaryItemId);
// if (StringUtils.equals("importExcelAcctResult", importType)) {
// ExcelAcctResultPO excelAcctResult = ExcelAcctResultPO.builder()
// .id(IdGenerator.generate())
// .salaryAcctRecordId(salaryAcctRecordPO.getId())
// .salarySobId(salaryAcctRecordPO.getSalarySobId())
// .salaryItemId(salaryItemId)
// .resultValue(dataValue)
// .creator(currentEmployeeId)
// .createTime(now)
// .updateTime(now)
// .deleteType(0)
// .tenantKey(tenantKey)
// .build();
// excelAcctResultsOfOneEmp.add(excelAcctResult);
// }
// if (StringUtils.equals("importSalaryAcctResult", importType)) {
// SalaryAcctResultPO salaryAcctResult = SalaryAcctResultPO.builder()
// .id(IdGenerator.generate())
// .salaryAcctRecordId(salaryAcctRecordPO.getId())
// .salarySobId(salaryAcctRecordPO.getSalarySobId())
// .salaryItemId(salaryItemId)
// .resultValue(dataValue)
// .creator(currentEmployeeId)
// .createTime(now)
// .updateTime(now)
// .deleteType(0)
// .tenantKey(tenantKey)
// .build();
// salaryAcctResultsOfOneEmp.add(salaryAcctResult);
// }
// }
// excelAcctResults.addAll(excelAcctResultsOfOneEmp);
// }
// if (StringUtils.equals("importSalaryAcctResult", importType)) {
// if (salaryAcctEmpId <= 0) {
// SalaryAcctEmployeePO acctEmployee = SalaryAcctEmployeePO.builder()
// .id(IdGenerator.generate())
// .employeeId(employeeId)
// .salaryAcctRecordId(salaryAcctRecordId)
// .salarySobId(salaryAcctRecordPO.getSalarySobId())
// .salaryMonth(salaryAcctRecordPO.getSalaryMonth())
// .taxAgentId(taxAgentId)
// .creator(currentEmployeeId)
// .createTime(now)
// .updateTime(now)
// .deleteType(0)
// .tenantKey(tenantKey)
// .build();
// newSalaryAcctEmployees.add(acctEmployee);
// salaryAcctEmpId = acctEmployee.getId();
// }
// for (SalaryAcctResultPO salaryAcctResultPO : salaryAcctResultsOfOneEmp) {
// salaryAcctResultPO.setEmployeeId(employeeId);
// salaryAcctResultPO.setTaxAgentId(taxAgentId);
// salaryAcctResultPO.setSalaryAcctEmpId(salaryAcctEmpId);
// }
// salaryAcctEmpIds.add(salaryAcctEmpId);
// salaryAcctResults.addAll(salaryAcctResultsOfOneEmp);
// // 如果是线下对比如果个税扣缴义务人+人员目前不在核算人员里面不支持导入
// if (StringUtils.equals("importExcelAcctResult", importType)
// && (employeeId != null && employeeId > 0)
// && (taxAgentId != null && taxAgentId > 0)
// && i == data.size() - 1
// && !salaryAcctEmployeeMap.containsKey(employeeId + "-" + taxAgentId)) {
// isError = true;
// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102842, "本次薪资核算不包含该人员"), i, i, usernameIndex, usernameIndex);
// }
// successCount++;
// }
// // 如果sheet包含错误数据
// if (CollectionUtils.isNotEmpty(errorDatas)) {
// salaryBatchService.createErrorExcelSheet(headers, errorDatas, excelSheet.getName(), excelComments, errorExcelSheets);
// // 每处理50个数据更新一次进度
// index++;
// if (index % 50 == 0 || index >= total) {
// salaryBatchService.sendImportRate(message.getBizId(), total, index);
// }
// if (isError) {
// failCount++;
// errorDatas.add(map);
// continue;
// }
// SalaryAcctEmployeePO salaryAcctEmployee = salaryAcctEmployeeMap.get(employeeId + "-" + taxAgentId);
// Long salaryAcctEmpId = Optional.ofNullable(salaryAcctEmployee).map(SalaryAcctEmployeePO::getId).orElse(0L);
// if (StringUtils.equals("importExcelAcctResult", importType)) {
// for (ExcelAcctResultPO excelAcctResultPO : excelAcctResultsOfOneEmp) {
// excelAcctResultPO.setEmployeeId(employeeId);
// excelAcctResultPO.setTaxAgentId(taxAgentId);
// excelAcctResultPO.setSalaryAcctEmpId(salaryAcctEmpId);
// }
// excelAcctResults.addAll(excelAcctResultsOfOneEmp);
// }
// if (StringUtils.equals("importSalaryAcctResult", importType)) {
// if (salaryAcctEmpId <= 0) {
// SalaryAcctEmployeePO acctEmployee = SalaryAcctEmployeePO.builder()
// .id(IdGenerator.generate())
// .employeeId(employeeId)
// .salaryAcctRecordId(salaryAcctRecordId)
// .salarySobId(salaryAcctRecordPO.getSalarySobId())
// .salaryMonth(salaryAcctRecordPO.getSalaryMonth())
// .taxAgentId(taxAgentId)
// .creator(currentEmployeeId)
// .createTime(now)
// .updateTime(now)
// .deleteType(0)
// .tenantKey(tenantKey)
// .build();
// newSalaryAcctEmployees.add(acctEmployee);
// salaryAcctEmpId = acctEmployee.getId();
// }
// for (SalaryAcctResultPO salaryAcctResultPO : salaryAcctResultsOfOneEmp) {
// salaryAcctResultPO.setEmployeeId(employeeId);
// salaryAcctResultPO.setTaxAgentId(taxAgentId);
// salaryAcctResultPO.setSalaryAcctEmpId(salaryAcctEmpId);
// }
// salaryAcctEmpIds.add(salaryAcctEmpId);
// salaryAcctResults.addAll(salaryAcctResultsOfOneEmp);
// }
// successCount++;
// }
// // 如果sheet包含错误数据
// if (CollectionUtils.isNotEmpty(errorDatas)) {
// salaryBatchService.createErrorExcelSheet(headers, errorDatas, excelSheet.getName(), excelComments, errorExcelSheets);
// }
// if (StringUtils.equals("importExcelAcctResult", importType)) {
// getSalaryComparisonResultService(user).deleteBySalaryAcctRecordIds(Collections.singleton(salaryAcctRecordId));
@ -671,7 +673,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
// // 发送导入回调信息
// salaryBatchService.sendImportCallBackInfo(message, successCount, failCount, errorExcelSheets);
// }
//
// @Override
// public Map<String, Object> exportCheckResult(
// SalaryCheckResultExportParam exportParam,

View File

@ -181,7 +181,7 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe
}
@Override
public XSSFWorkbook exportList( SalaryArchiveQueryParam queryParam) {
public XSSFWorkbook exportList(SalaryArchiveQueryParam queryParam) {
// 1.工作簿名称
String sheetName = SalaryI18nUtil.getI18nLabel(85368, "薪资档案");
// 获取所有可被引用的薪资项目
@ -389,7 +389,7 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe
/**
* 导入薪资档案
*/
public void importSalaryArchive(SalaryArchiveImportHandleParam param) {
public Map<String,Object> importSalaryArchive(SalaryArchiveImportHandleParam param) {
//1参数校验
vaildImportParam(param);
@ -435,7 +435,7 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe
// 错误sheet数据
List<Map<String, Object>> errorData = new ArrayList<>();
// 错误提示
List<Map<String, Object>> excelComments = new ArrayList<>();
List<Map<String, String>> excelComments = new ArrayList<>();
for (int i = 0; i < data.size(); i++) {
@ -461,6 +461,13 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe
// 4.数据入库处理
handleImportData(isInit, importHandleParam);
Map<String,Object> apidatas = new HashMap<>();
apidatas.put("successCount", successCount);
apidatas.put("errorCount", errorCount);
apidatas.put("errorNotice", excelComments);
return apidatas;
} finally {
IOUtils.closeQuietly(fileInputStream);
}
@ -569,7 +576,7 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe
* @param initImportData
* @param importHandleParam
*/
private Map<String, Object> validInitImportData(boolean isError, int rowNo, Map<String, Object> map, List<Map<String, Object>> excelComments, int errorCount, int successCount, List<Map<String, Object>> errorData, List<SalaryArchiveInitImportDTO> initImportData, SalaryArchiveImportHandleParam importHandleParam) {
private Map<String, Object> validInitImportData(boolean isError, int rowNo, Map<String, Object> map, List<Map<String, String>> excelComments, int errorCount, int successCount, List<Map<String, Object>> errorData, List<SalaryArchiveInitImportDTO> initImportData, SalaryArchiveImportHandleParam importHandleParam) {
Long employeeId = Long.valueOf(Optional.ofNullable(map.get("employeeId")).orElse("0").toString());
Optional<SalaryArchiveInitImportDTO> optionalInitImport = initImportData.stream().filter(f -> f.getEmployeeId().equals(employeeId)).findFirst();
@ -596,6 +603,9 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe
sames.forEach(e -> {
if (!e.isError()) {
e.setError(Boolean.TRUE);
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", "该员工的薪资档案记录有误,请检查");
excelComments.add(errorMessageMap);
// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(101723, "该员工的薪资档案记录有误,请检查"), finalErrorCount.get() + 1, finalErrorCount.get() + 1, 0, 0);
finalErrorCount.addAndGet(1);
errorData.add(e.getRow());
@ -618,6 +628,9 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe
sames.forEach(e -> {
if (!e.isError()) {
e.setError(Boolean.TRUE);
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", "该员工的薪资档案记录有误");
excelComments.add(errorMessageMap);
// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(101723, "该员工的薪资档案记录有误,请检查"), finalErrorCount.get() + 1, finalErrorCount.get() + 1, 0, 0);
finalErrorCount.addAndGet(1);
errorData.add(e.getRow());
@ -664,7 +677,7 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe
* @return
*/
private boolean singleRowCheck(String importType, List<Long> allEmployeeIds, Map<String, Object> map, List<String> headers, int effectiveTimeIndex,
List<Map<String, Object>> excelComments, int errorCount, SalaryArchiveImportHandleParam importHandleParam) {
List<Map<String, String>> excelComments, int errorCount, SalaryArchiveImportHandleParam importHandleParam) {
boolean isError = false;
boolean isInit = importType.equals(SalaryArchiveImportTypeEnum.INIT.getValue());
@ -729,6 +742,28 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe
// 调整原因列判空(调薪或调整个税扣缴义务人)
|| (adjustReasonI18n.equals(key) && (isTaxAgentAdjust || isSalaryItemAdjust)));
// 判空
if (userNameI18n.equals(key) && StringUtils.isEmpty(cellVal)) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", key + "不能为空");
excelComments.add(errorMessageMap);
}
// 个税扣缴义务人列判空(初始化导入或调整个税扣缴义务人)
if ((taxAgentI18n.equals(key) && (isInit || isTaxAgentAdjust)) && StringUtils.isEmpty(cellVal)) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", key + "不能为空");
excelComments.add(errorMessageMap);
}
if (effectiveTimeI18n.equals(key) && StringUtils.isEmpty(cellVal)) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", key + "不能为空");
excelComments.add(errorMessageMap);
}
// 调整原因列判空(调薪或调整个税扣缴义务人)
if ((adjustReasonI18n.equals(key) && (isTaxAgentAdjust || isSalaryItemAdjust)) && StringUtils.isEmpty(cellVal)) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", key + "不能为空");
excelComments.add(errorMessageMap);
}
if (isEmpty) {
// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100577, "不能为空"), errorCount + 1, errorCount + 1, j, j);
isError = true;
@ -736,13 +771,22 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe
// 1.姓名列处理
if (!isEmpty && userNameI18n.equals(key)) {
if (CollectionUtils.isEmpty(employeeSameIds) || employeeSameIds.size() > 1) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message","员工信息不能为空且不可重复(姓名与部门同时确认唯一)");
excelComments.add(errorMessageMap);
// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100578, "员工信息不能为空且不可重复(姓名与部门同时确认唯一)"), errorCount + 1, errorCount + 1, j, j);
isError = true;
} else if (employeeId == null) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message","姓名错误,系统内不存在该姓名");
excelComments.add(errorMessageMap);
// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100579, "姓名错误,系统内不存在该姓名"), errorCount + 1, errorCount + 1, j, j);
isError = true;
// (调薪或调整个税扣缴义务人)
} else if (finalSalaryArchive == null && (isTaxAgentAdjust || isSalaryItemAdjust)) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message","该人员的薪资档案不存在,请先初始化");
excelComments.add(errorMessageMap);
// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(101653, "该人员的薪资档案不存在,请先初始化"), errorCount + 1, errorCount + 1, j, j);
isError = true;
}
@ -751,10 +795,16 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe
isError = handleTaxAgent(isError, isInit, effectiveTimeIndex, excelComments, errorCount, j, taxAgentId, effectiveTime, finalSalaryArchive, adjustReason, importHandleParam);
// 3.生效时间处理
} else if (!isEmpty && effectiveTimeI18n.equals(key) && effectiveTime == null) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message","生效日期错误或格式不正确,正确格式示例为'2022-01-01'、'2022/1/1'");
excelComments.add(errorMessageMap);
// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(102497, "生效日期错误或格式不正确,正确格式示例为'2022-01-01'、'2022/1/1'"), errorCount + 1, errorCount + 1, j, j);
isError = true;
// 4.调整原因列处理(调薪或调整个税扣缴义务人)
} else if (!isEmpty && adjustReasonI18n.equals(key) && (isTaxAgentAdjust || isSalaryItemAdjust) && StringUtils.isEmpty(adjustReason)) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message","调整原因不存在");
excelComments.add(errorMessageMap);
// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100591, "调整原因不存在"), errorCount + 1, errorCount + 1, j, j);
isError = true;
// 5.薪资项目列处理(初始化导入或调薪)
@ -811,7 +861,7 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe
* @return
*/
private boolean handleTaxAgent(boolean isError, boolean isInit, int effectiveTimeIndex,
List<Map<String, Object>> excelComments, int errorCount, int j,
List<Map<String, String>> excelComments, int errorCount, int j,
Long taxAgentId, Date effectiveTime, SalaryArchivePO finalSalaryArchive, String taxAgentAdjustReason, SalaryArchiveImportHandleParam importHandleParam) {
if (taxAgentId == null) {
// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100545, "个税扣缴义务人不存在"), errorCount + 1, errorCount + 1, j, j);
@ -835,35 +885,56 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe
Date currentEffectiveTime = effectiveTaxAgent.getEffectiveTime();
// 1.1 如果早于<当前已生效
if (effectiveTime.before(currentEffectiveTime)) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message","生效日期不可早于当前已生效的调整日期");
excelComments.add(errorMessageMap);
// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100429, "生效日期不可早于当前已生效的调整日期"), errorCount + 1, errorCount + 1, effectiveTimeIndex, effectiveTimeIndex);
isError = true;
isBeforeError = true;
// 1.2 如果等于当前已生效
} else if (effectiveTime.equals(currentEffectiveTime)) {
if (effectiveBeforeTaxAgent != null && effectiveBeforeTaxAgent.getTaxAgentId().equals(taxAgentId)) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message","调整前后不可相同");
excelComments.add(errorMessageMap);
// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100432, "调整前后不可相同"), errorCount + 1, errorCount + 1, j, j);
isError = true;
}
if (ineffectiveTaxAgent != null && ineffectiveTaxAgent.getTaxAgentId().equals(taxAgentId)) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message","与未生效的调整后不可相同");
excelComments.add(errorMessageMap);
// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100434, "与未生效的调整后不可相同"), errorCount + 1, errorCount + 1, j, j);
isError = true;
}
// 1.3 如果>已经生效且<=今天
} else if (effectiveTime.after(currentEffectiveTime) && !effectiveTime.after(importHandleParam.getToday())) {
if (effectiveTaxAgent.getTaxAgentId().equals(taxAgentId)) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message","调整前后不可相同");
excelComments.add(errorMessageMap);
// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100432, "调整前后不可相同"), errorCount + 1, errorCount + 1, j, j);
isError = true;
}
if (ineffectiveTaxAgent != null && ineffectiveTaxAgent.getTaxAgentId().equals(taxAgentId)) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message","与未生效的调整后不可相同");
excelComments.add(errorMessageMap);
// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100434, "与未生效的调整后不可相同"), errorCount + 1, errorCount + 1, j, j);
isError = true;
}
// 1.4 如果>今天
} else if (effectiveTime.after(importHandleParam.getToday()) && effectiveTaxAgent.getTaxAgentId().equals(taxAgentId)) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message","调整前后不可相同");
excelComments.add(errorMessageMap);
// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100432, "调整前后不可相同"), errorCount + 1, errorCount + 1, j, j);
isError = true;
}
} else if (ineffectiveTaxAgent != null && ineffectiveTaxAgent.getTaxAgentId().equals(taxAgentId)) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message","与未生效的调整后不可相同");
excelComments.add(errorMessageMap);
// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100434, "与未生效的调整后不可相同"), errorCount + 1, errorCount + 1, j, j);
isError = true;
}
@ -910,7 +981,7 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe
* @return
*/
private boolean handleSalaryItem(boolean isError, boolean isInit, int effectiveTimeIndex,
List<Map<String, Object>> excelComments, int errorCount, int j,
List<Map<String, String>> excelComments, int errorCount, int j,
Date effectiveTime, SalaryArchivePO finalSalaryArchive, String salaryItemAdjustReason, SalaryArchiveImportHandleParam importHandleParam,
String key, String cellVal, Map<String, Object> map) {
Optional<SalaryItemPO> optionalSalaryItem = importHandleParam.getSalaryItems().stream().filter(e -> e.getName().equals(key)).findFirst();
@ -934,35 +1005,56 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe
Date currentEffectiveTime = effectiveSalaryItem.getEffectiveTime();
// 1.1 如果早于<当前已生效
if (effectiveTime.before(currentEffectiveTime)) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message","生效日期不可早于当前已生效的调整日期");
excelComments.add(errorMessageMap);
// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100429, "生效日期不可早于当前已生效的调整日期"), errorCount + 1, errorCount + 1, effectiveTimeIndex, effectiveTimeIndex);
isError = true;
isBeforeError = true;
// 1.2 如果等于当前已生效
} else if (effectiveTime.equals(currentEffectiveTime)) {
if (effectiveBeforeSalaryItem != null && effectiveBeforeSalaryItem.getItemValue().equals(cellVal)) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message","调整前后不可相同");
excelComments.add(errorMessageMap);
// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100432, "调整前后不可相同"), errorCount + 1, errorCount + 1, j, j);
isError = true;
}
if (ineffectiveSalaryItem != null && ineffectiveSalaryItem.getItemValue().equals(cellVal)) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message","与未生效的调整后不可相同");
excelComments.add(errorMessageMap);
// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100434, "与未生效的调整后不可相同"), errorCount + 1, errorCount + 1, j, j);
isError = true;
}
// 1.3 如果>已经生效且<=今天
} else if (effectiveTime.after(currentEffectiveTime) && !effectiveTime.after(importHandleParam.getToday())) {
if (effectiveSalaryItem.getItemValue().equals(cellVal)) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message","调整前后不可相同");
excelComments.add(errorMessageMap);
// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100432, "调整前后不可相同"), errorCount + 1, errorCount + 1, j, j);
isError = true;
}
if (ineffectiveSalaryItem != null && ineffectiveSalaryItem.getItemValue().equals(cellVal)) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message","与未生效的调整后不可相同");
excelComments.add(errorMessageMap);
// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100434, "与未生效的调整后不可相同"), errorCount + 1, errorCount + 1, j, j);
isError = true;
}
// 1.4 如果>今天
} else if (effectiveTime.after(importHandleParam.getToday()) && effectiveSalaryItem.getItemValue().equals(cellVal)) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message","调整前后不可相同");
excelComments.add(errorMessageMap);
// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100432, "调整前后不可相同"), errorCount + 1, errorCount + 1, j, j);
isError = true;
}
} else if (ineffectiveSalaryItem != null && ineffectiveSalaryItem.getItemValue().equals(cellVal)) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message","与未生效的调整后不可相同");
excelComments.add(errorMessageMap);
// salaryBatchService.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(100434, "与未生效的调整后不可相同"), errorCount + 1, errorCount + 1, j, j);
isError = true;
}

View File

@ -176,7 +176,7 @@ public class SalaryArchiveController {
SalaryArchiveImportTypeEnum importTypeEnum = SalaryArchiveImportTypeEnum.parseByValue(queryParam.getImportType());
String fileName = "薪资档案导入模板-" + importTypeEnum.getDefaultLabel();
String fileName = "薪资档案导入模板-" + importTypeEnum.getDefaultLabel() + LocalDate.now();
try {
fileName = URLEncoder.encode(fileName + ".xlsx", "UTF-8");
@ -240,6 +240,7 @@ public class SalaryArchiveController {
return new ResponseResult<SalaryArchiveImportHandleParam, Map<String, Object>>().run(getSalaryArchiveWrapper(user)::preview, importParam);
}
//导入
@POST
@Path("/importSalaryArchive")
@Produces(MediaType.APPLICATION_JSON)
@ -254,7 +255,7 @@ public class SalaryArchiveController {
@Produces(MediaType.APPLICATION_JSON)
public String searchCondition(@Context HttpServletRequest request, @Context HttpServletResponse response) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<SingleTaxAgentAdjustRecordQueryParam, Map<String,Object>>().run(getSalaryArchiveWrapper(user)::searchCondition);
return new ResponseResult<SingleTaxAgentAdjustRecordQueryParam, Map<String, Object>>().run(getSalaryArchiveWrapper(user)::searchCondition);
}
// ******** 薪资档案主表 end ***********************************************************************************************/

View File

@ -263,8 +263,8 @@ public class SalaryArchiveWrapper extends Service {
return getSalaryArchiveService(user).preview(param);
}
public void importSalaryArchive(SalaryArchiveImportHandleParam param) {
getSalaryArchiveService(user).importSalaryArchive(param);
public Map<String,Object> importSalaryArchive(SalaryArchiveImportHandleParam param) {
return getSalaryArchiveService(user).importSalaryArchive(param);
}
public XSSFWorkbook exportList(SalaryArchiveQueryParam queryParam) {