延税养老保险附表

This commit is contained in:
钱涛 2024-12-19 10:57:21 +08:00
parent fe8910f2c5
commit e6f8b31f69
2 changed files with 151 additions and 5 deletions

View File

@ -12,7 +12,7 @@ import lombok.NoArgsConstructor;
import java.util.Date;
/**
* 免税收入
* 税延养老保险
* <p>Copyright: Copyright (c) 2022</p>
* <p>Company: 泛微软件</p>
*

View File

@ -12,12 +12,10 @@ import com.engine.salary.constant.SalaryDefaultTenantConstant;
import com.engine.salary.encrypt.EncryptUtil;
import com.engine.salary.entity.datacollection.AddUpDeduction;
import com.engine.salary.entity.datacollection.DataCollectionEmployee;
import com.engine.salary.entity.datacollection.dto.DerateDeductionListDTO;
import com.engine.salary.entity.datacollection.dto.FreeIncomeListDTO;
import com.engine.salary.entity.datacollection.dto.OtherDeductionListDTO;
import com.engine.salary.entity.datacollection.dto.OtherDeductionRecordDTO;
import com.engine.salary.entity.datacollection.dto.*;
import com.engine.salary.entity.datacollection.param.*;
import com.engine.salary.entity.datacollection.po.DerateDeductionPO;
import com.engine.salary.entity.datacollection.po.EndowmentInsurancePO;
import com.engine.salary.entity.datacollection.po.FreeIncomePO;
import com.engine.salary.entity.datacollection.po.OtherDeductionPO;
import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO;
@ -752,7 +750,155 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction
}
try {
fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(imageId));
int successCount = 0;
int errorCount = 0;
// 错误excel内容
List<Map> errorData = new ArrayList<>();
List<EndowmentInsuranceListDTO> derateDeductionList = ExcelParseHelper.parse2Map(fileInputStream, EndowmentInsuranceListDTO.class, 2, 1, 11, "OtherDeductionTemplate.xlsx");
for (int i = 0; i < derateDeductionList.size(); i++) {
EndowmentInsuranceListDTO dto = derateDeductionList.get(i);
Date now = new Date();
//待插入数据库对象
OtherDeductionPO mainPo = OtherDeductionPO.builder()
.declareMonth(declareMonth)
.freeIncomeList(new ArrayList<>())
.derateDeductionList(new ArrayList<>())
.endowmentInsuranceList(new ArrayList<>())
.grantDonationList(new ArrayList<>())
.healthInsuranceList(new ArrayList<>())
.otherDerateDeductionList(new ArrayList<>())
.createTime(now)
.updateTime(now)
.creator((long) user.getUID())
.tenantKey(DEFAULT_TENANT_KEY)
.build();
EndowmentInsurancePO po = EndowmentInsurancePO.builder()
.taxYearMonth(declareMonth)
.fileStatus(1)
.creator((long) user.getUID())
.createTime(now)
.updateTime(now)
.tenantKey(DEFAULT_TENANT_KEY)
.build();
//异常点数量
int errorSum = 0;
//行号
String rowIndex = String.format("第%s行", i + 2);
//相同的姓名
String userName = dto.getUsername();
String deparmentName = dto.getDepartmentName();
String mobile = dto.getMobile();
String workcode = dto.getJobNum();
String idNo = dto.getIdNo();
List<Long> employeeSameIds = new ArrayList<>();
//筛选导入人员信息可以在人力资源池中匹配到的人员信息
List<DataCollectionEmployee> emps = getSalaryEmployeeService(user).matchImportEmployee(confValue, employees, userName, deparmentName, mobile, workcode, idNo, null);
//含在职和离职选在职数据
if (CollectionUtils.isNotEmpty(emps) && emps.size() > 1) {
employeeSameIds = emps.stream()
.filter(e -> UserStatusEnum.getNormalStatus().contains(e.getStatus()))
.map(DataCollectionEmployee::getEmployeeId)
.collect(Collectors.toList());
}
if (CollectionUtils.isNotEmpty(emps) && emps.size() == 1) {
employeeSameIds = emps.stream()
.map(DataCollectionEmployee::getEmployeeId)
.collect(Collectors.toList());
}
//当人员信息导入筛选的全局配置为"0"姓名才是必填项
if (StringUtils.isBlank(userName) && "0".equals(confValue)) {
//姓名 不能为空
//错误消息对象
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", rowIndex + "姓名不能为空");
errorData.add(errorMessageMap);
errorSum += 1;
} else if (CollectionUtils.isEmpty(employeeSameIds) || employeeSameIds.size() > 1) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", rowIndex + "员工信息不存在或者存在多个员工");
errorData.add(errorMessageMap);
errorSum += 1;
} else {
Long employeeId = CollectionUtils.isNotEmpty(employeeSameIds) && employeeSameIds.size() == 1 ? employeeSameIds.get(0) : null;
if (employeeId != null && employeeId > 0) {
mainPo.setEmployeeId(employeeId);
po.setEmployeeId(employeeId);
po.setEmployeeType(DataCollectionEmployeeTypeEnum.ORGANIZATION.getValue());
} else {
//姓名错误系统内不存在该姓名
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", rowIndex + "姓名错误,系统内不存在该姓名");
errorData.add(errorMessageMap);
errorSum += 1;
}
}
String taxAgentName = dto.getTaxAgentName();
if (StringUtils.isBlank(taxAgentName)) {
//个税扣缴义务人不能为空
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", rowIndex + "个税扣缴义务人不能为空");
errorData.add(errorMessageMap);
errorSum += 1;
} else {
Optional<TaxAgentManageRangeEmployeeDTO> optionalTemp = taxAgentList.stream().filter(m -> m.getTaxAgentName().equals(taxAgentName)).findFirst();
if (optionalTemp.isPresent()) {
mainPo.setTaxAgentId(optionalTemp.get().getTaxAgentId());
po.setTaxAgentId(optionalTemp.get().getTaxAgentId());
} else {
//个税扣缴义务人不存在
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", rowIndex + "个税扣缴义务人不存在或不在权限范围内");
errorData.add(errorMessageMap);
errorSum += 1;
}
}
po.setAccountNumber(dto.getAccountNumber());
po.setCheckCode(dto.getCheckCode());
po.setYearPremium(dto.getYearPremium());
po.setMonthPremium(dto.getMonthPremium());
po.setCurrentDeduction(dto.getCurrentDeduction());
if (errorSum == 0) {
successCount += 1;
String key = mainPo.getTaxAgentId() + "-" + mainPo.getEmployeeId();
Map<String, OtherDeductionPO> deductionPOMap = SalaryEntityUtil.convert2Map(eligibleData, e -> e.getTaxAgentId() + "-" + e.getEmployeeId());
if (deductionPOMap.containsKey(key)) {
deductionPOMap.get(key).getEndowmentInsuranceList().add(po);
} else {
mainPo.getEndowmentInsuranceList().add(po);
eligibleData.add(mainPo);
}
} else {
errorCount += 1;
// 添加错误数据
}
}
HashMap<Object, Object> dataMap = new HashMap<>();
dataMap.put("successCount", successCount);
dataMap.put("errorCount", errorCount);
dataMap.put("errorData", errorData);
apidatas.put("derateDeduction", dataMap);
} finally {
IOUtils.closeQuietly(fileInputStream);
}
return apidatas;