Merge branch 'feature/v2-addWelfareArchives-1117' into feature/v3-siAccountRecession-1117

# Conflicts:
#	src/com/engine/salary/service/SIAccountService.java
#	src/com/engine/salary/service/impl/SIAccountServiceImpl.java
This commit is contained in:
sy 2022-11-24 09:39:13 +08:00
commit e736cee6fd
10 changed files with 485 additions and 76 deletions

View File

@ -0,0 +1,14 @@
package com.api.salary.web;
import com.engine.salary.process.siArchives.SIArchiveActionAPI;
import javax.ws.rs.Path;
/**
* @Author: sy
* @Description:
* @Date: 2022/11/11
**/
@Path("/bs/hrmsalary/siArchiveAction")
public class SIArchiveActionAPIController extends SIArchiveActionAPI {
}

View File

@ -230,6 +230,7 @@ public class SIAccountBiz extends Service {
public void doAccounting(AccountParam param, Long employeeId, String tenantKey, String currentUserName) {
log.info("核算时间:{}, 核算月份:{}, 个税扣缴义务人:{}, 是否首次核算:{}", new Date(), param.getBillMonth(), param.getPaymentOrganization(), param.isFlag());
try {
List<Long> ids;
List<Long> validIds = new ArrayList<>();
@ -405,13 +406,20 @@ public class SIAccountBiz extends Service {
List<InsuranceAccountDetailTempPO> list = MapperProxyFactory.getProxy(SIAccountDetailTempMapper.class).getListByEmployeeIdsAndBillMonth(ids, billMonth, param.getPaymentOrganization());
InsuranceAccountDetailTempPOEncrypt.decryptInsuranceAccountDetailTempPOList(list);
Integer paymentStatus = 0;
getInsuranceAccountDetailMapper().batchDelAccountDetails(ids, billMonth, param.getPaymentOrganization(), paymentStatus);
log.info("核算明细临时表 hrsa_bill_detail_temp待处理数量{}", list.size());
List<List<Long>> partitionIds = Lists.partition((List<Long>) ids, 100);
log.info("bill_detail入库前删除数据数量{}", ids.size());
for (List<Long> part : partitionIds) {
getInsuranceAccountDetailMapper().batchDelAccountDetails(part, billMonth, param.getPaymentOrganization(), paymentStatus);
}
List<InsuranceAccountDetailPO> collect = list.stream().map(item -> {
InsuranceAccountDetailPO insuranceAccountDetailPO = new InsuranceAccountDetailPO();
BeanUtils.copyProperties(item, insuranceAccountDetailPO);
return insuranceAccountDetailPO;
}).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(collect)) {
log.info("bill_detail入库数据数量{}", collect.size());
batchSaveAccountInspectDetail(collect, billMonth, tenantKey);
InsuranceAccountDetailPOEncrypt.encryptInsuranceAccountDetailPOList(collect);
List<List<InsuranceAccountDetailPO>> lists = splitDetailList(collect, 20);

View File

@ -1069,36 +1069,47 @@ public class SIArchivesBiz {
Set<String> socialSet = new HashSet<>();
Set<String> fundSet = new HashSet<>();
Set<String> otherSet = new HashSet<>();
insuranceArchivesEmployeePOS.forEach(item -> {
List<InsuranceArchivesSocialSchemePO> socialList = socialSchemeMapper.getSocialByEmployeeId(Collections.singletonList(item.getEmployeeId()));
InsuranceArchivesSocialSchemePOEncrypt.decryptList(socialList);
InsuranceArchivesSocialSchemePO socialItem = socialList.size() != 0 ? socialList.get(0) : null;
// InsuranceArchivesSocialSchemePO socialItem = socialList.size() != 0 ? socialList.get(0) : null;
List<InsuranceArchivesFundSchemePO> fundList = fundSchemeMapper.getFundByEmployeeId(Collections.singletonList(item.getEmployeeId()));
InsuranceArchivesFundSchemePOEncrypt.decryptList(fundList);
InsuranceArchivesFundSchemePO fundItem = fundList.size() != 0 ? fundList.get(0) : null;
// InsuranceArchivesFundSchemePO fundItem = fundList.size() != 0 ? fundList.get(0) : null;
List<InsuranceArchivesOtherSchemePO> otherList = otherSchemeMapper.getOtherByEmployeeId(Collections.singletonList(item.getEmployeeId()));
InsuranceArchivesOtherSchemePOEncrypt.decryptList(otherList);
InsuranceArchivesOtherSchemePO otherItem = otherList.size() != 0 ? otherList.get(0) : null;
if (socialItem != null) {
Map<String, Object> socialJson = JSON.parseObject(socialItem.getSocialPaymentBaseString(), new TypeReference<Map<String, Object>>() {
});
if (socialJson != null) {
socialJson.forEach((k, v) -> socialSet.add(k));
// InsuranceArchivesOtherSchemePO otherItem = otherList.size() != 0 ? otherList.get(0) : null;
if (socialList.size() > 0) {
for (InsuranceArchivesSocialSchemePO socialSchemePO : socialList) {
Map<String, Object> socialJson = JSON.parseObject(socialSchemePO.getSocialPaymentBaseString(), new TypeReference<Map<String, Object>>() {
});
if (socialJson != null) {
socialJson.forEach((k, v) -> socialSet.add(k));
}
}
}
if (fundItem != null) {
Map<String, Object> fundJson = JSON.parseObject(fundItem.getFundPaymentBaseString(), new TypeReference<Map<String, Object>>() {
});
if (fundJson != null) {
fundJson.forEach((k, v) -> fundSet.add(k));
if (fundList.size() > 0) {
for (InsuranceArchivesFundSchemePO fundSchemePO : fundList) {
Map<String, Object> fundJson = JSON.parseObject(fundSchemePO.getFundPaymentBaseString(), new TypeReference<Map<String, Object>>() {
});
if (fundJson != null) {
fundJson.forEach((k, v) -> fundSet.add(k));
}
}
}
if (otherItem != null) {
Map<String, Object> otherJson = JSON.parseObject(otherItem.getOtherPaymentBaseString(), new TypeReference<Map<String, Object>>() {
});
if (otherJson != null) {
otherJson.forEach((k, v) -> otherSet.add(k));
if (otherList.size() > 0) {
for (InsuranceArchivesOtherSchemePO otherSchemePO : otherList) {
Map<String, Object> otherJson = JSON.parseObject(otherSchemePO.getOtherPaymentBaseString(), new TypeReference<Map<String, Object>>() {
});
if (otherJson != null) {
otherJson.forEach((k, v) -> otherSet.add(k));
}
}
}
});
Map<String, String> socialMap = new HashMap<>();

View File

@ -0,0 +1,39 @@
package com.engine.salary.entity.siarchives.param;
import com.engine.salary.enums.salaryarchive.SalaryArchiveImportTypeEnum;
import com.engine.salary.enums.siaccount.EmployeeStatusEnum;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
import java.util.Map;
/**
* @Author: sy
* @Description: 社保福利档案导入处理参数action使用
* @Date: 2022/11/10
**/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SIArchiveImportActionParam {
/**
* 导入类型
*
* @see EmployeeStatusEnum
*/
String runStatus;
/**
* 导入数据
*
*/
List<Map<String,Object>> importDatas;
private boolean addData;
}

View File

@ -305,7 +305,7 @@
t.fund_per_json,t.fund_com_json,t.other_per_json,
t.other_com_json,t.social_per_sum,t.social_com_sum,
t.fund_per_sum,t.fund_com_sum,t.other_per_sum,
t.other_com_sum,t.per_sum,t.com_sum
t.other_com_sum,t.per_sum,t.com_sum,t.payment_organization
FROM
hrsa_bill_detail t
WHERE t.delete_type = 0
@ -320,7 +320,7 @@
t.fund_per_json,t.fund_com_json,t.other_per_json,
t.other_com_json,t.social_per_sum,t.social_com_sum,
t.fund_per_sum,t.fund_com_sum,t.other_per_sum,
t.other_com_sum,t.per_sum,t.com_sum
t.other_com_sum,t.per_sum,t.com_sum,t.payment_organization
FROM
hrsa_bill_detail t
WHERE t.delete_type = 0

View File

@ -0,0 +1,64 @@
package com.engine.salary.process.siArchives;
import com.engine.common.util.ServiceUtil;
import com.engine.salary.entity.siarchives.param.SIArchiveImportActionParam;
import com.engine.salary.enums.siaccount.EmployeeStatusEnum;
import com.engine.salary.service.SISchemeService;
import com.engine.salary.service.impl.SISchemeServiceImpl;
import com.engine.salary.util.ResponseResult;
import io.swagger.v3.oas.annotations.parameters.RequestBody;
import lombok.extern.slf4j.Slf4j;
import weaver.hrm.HrmUserVarify;
import weaver.hrm.User;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import java.util.Map;
/**
* @Author: sy
* @Description: 社保福利档案流程使用
* @Date: 2022/11/10
**/
@Slf4j
public class SIArchiveActionAPI {
private SISchemeService getService(User user) {
return ServiceUtil.getService(SISchemeServiceImpl.class,user);
}
/**
* 前置校验列表添加接口
* @param importData
* @return
*/
@POST
@Path("/checkImportSIArchiveListAdd")
@Produces(MediaType.APPLICATION_JSON)
public String checkImportSIArchiveListAdd(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SIArchiveImportActionParam importData) {
User user = HrmUserVarify.getUser(request, response);
importData.setRunStatus(EmployeeStatusEnum.STAY_ADD.getValue());
importData.setAddData(false);
return new ResponseResult<SIArchiveImportActionParam, Map<String, Object>>(user).run(getService(user)::checkSIArchiveAdd, importData);
}
/**
* 新增社保福利档案
* @param importData
* @return
*/
@POST
@Path("/addSIArchive")
@Produces(MediaType.APPLICATION_JSON)
public String addSIArchive(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SIArchiveImportActionParam importData) {
User user = HrmUserVarify.getUser(request, response);
importData.setRunStatus(EmployeeStatusEnum.STAY_ADD.getValue());
importData.setAddData(true);
return new ResponseResult<SIArchiveImportActionParam, Map<String, Object>>(user).run(getService(user)::addSIArchive, importData);
}
}

View File

@ -245,6 +245,11 @@ public interface SIAccountService {
*/
Map<String, Object> importExcelInsuranceDetail(ExcelInsuranceImportParam excelInsuranceImportParam);
/**
* 刷新_bill_batch表中的统计信息
*/
void refreshBillBatch(Long paymentOrganization, String billMonth);
/**
* 将通过id获取InsuranceAccountDetailPO中的社保公积金其他福利个人和公司缴纳数据
*/

View File

@ -2,6 +2,7 @@ package com.engine.salary.service;
import com.cloudstore.eccom.pc.table.WeaTableColumn;
import com.engine.salary.entity.siarchives.param.InsuranceArchivesListParam;
import com.engine.salary.entity.siarchives.param.SIArchiveImportActionParam;
import com.engine.salary.entity.siarchives.po.InsuranceArchivesEmployeePO;
import com.engine.salary.entity.sischeme.dto.InsuranceSchemeListDTO;
import com.engine.salary.entity.sischeme.param.InsuranceSchemeParam;
@ -69,4 +70,8 @@ public interface SISchemeService {
Map<String, Object> batchImportEbatch(SISchemaImportParam param);
XSSFWorkbook exportTemplate(InsuranceArchivesListParam param);
Map<String, Object> checkSIArchiveAdd(SIArchiveImportActionParam siArchiveImportActionParam);
Map<String, Object> addSIArchive(SIArchiveImportActionParam siArchiveImportActionParam);
}

View File

@ -74,6 +74,8 @@ import weaver.hrm.User;
import java.io.InputStream;
import java.math.BigDecimal;
import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
@ -1192,10 +1194,10 @@ public class SIAccountServiceImpl extends Service implements SIAccountService {
// 处理数值
List<Map<String, Object>> data = ExcelParseHelper.parse2Map(sheet, 1);
if (CollectionUtils.isEmpty(headers)) {
throw new RuntimeException("表头为空");
throw new SalaryRunTimeException("表头为空");
}
if (CollectionUtils.isEmpty(data)) {
throw new RuntimeException("无数据");
throw new SalaryRunTimeException("无数据");
}
//存储待更新的InsuranceAccountDetailPO数据
List<InsuranceAccountDetailPO> updateInsuranceAccountDetailList = new ArrayList<>();
@ -1331,6 +1333,45 @@ public class SIAccountServiceImpl extends Service implements SIAccountService {
getSiAccountBiz(user).updateByEmployeeIdAndBillMonth(po);
}
//刷新hrsa_bill_batch中数据统计信息
if (updateInsuranceAccountDetailList.size() > 0) {
ExecutorService taskExecutor = Executors.newCachedThreadPool();
taskExecutor.execute(() -> {
Long paymentOrganization = updateInsuranceAccountDetailList.get(0).getPaymentOrganization();
String billMonth = updateInsuranceAccountDetailList.get(0).getBillMonth();
if (paymentOrganization != null && billMonth != null) {
InsuranceAccountDetailParam refreshParam =new InsuranceAccountDetailParam();
refreshParam.setBillMonth(billMonth);
refreshParam.setPaymentOrganization(paymentOrganization.toString());
PageInfo<InsuranceAccountViewListDTO> pageInfos = overView(refreshParam);
TaxAgentPO taxAgentPo = getTaxAgentMapper().getById(paymentOrganization);
if (taxAgentPo != null) {
List<InsuranceAccountViewListDTO> viewListDTOList = pageInfos.getList();
viewListDTOList.stream().filter(f -> f.getPayOrg().equals(taxAgentPo.getName())).collect(Collectors.toList());
InsuranceAccountBatchPO batchPO = getInsuranceAccountBatchMapper().getByBillMonth(billMonth, paymentOrganization);
batchPO = SiAccountEncrypt.decryptInsuranceAccountBatch(batchPO);
//更新
if (viewListDTOList.size() > 0 && batchPO != null) {
InsuranceAccountViewListDTO viewListDTO = viewListDTOList.get(0);
batchPO.setSocialNum(viewListDTO.getSocialNum());
batchPO.setFundNum(viewListDTO.getFundNum());
batchPO.setOtherNum(viewListDTO.getOtherNum());
batchPO.setSocialPay(viewListDTO.getSocialPaySum().replace(",", ""));
batchPO.setFundPay(viewListDTO.getFundPaySum().replace(",", ""));
batchPO.setOtherPay(viewListDTO.getOtherPaySum().replace(",", ""));
batchPO.setUpdateTime(new Date());
batchPO = SiAccountEncrypt.encryptInsuranceAccountBatch(batchPO);
getInsuranceAccountBatchMapper().updateById(batchPO);
}
}
}
});
}
apidatas.put("successCount", successCount);
apidatas.put("errorCount", failCount);
apidatas.put("errorData", excelComments);
@ -1842,10 +1883,10 @@ public class SIAccountServiceImpl extends Service implements SIAccountService {
// 处理数值
List<Map<String, Object>> data = ExcelParseHelper.parse2Map(sheet, 1);
if (CollectionUtils.isEmpty(headers)) {
throw new RuntimeException("表头为空");
throw new SalaryRunTimeException("表头为空");
}
if (CollectionUtils.isEmpty(data)) {
throw new RuntimeException("无数据");
throw new SalaryRunTimeException("无数据");
}
String billMonth = importParam.getBillMonth();
@ -2148,6 +2189,45 @@ public class SIAccountServiceImpl extends Service implements SIAccountService {
return excelInsuranceDetailPO;
}
/**
* 刷新_bill_batch表中的统计信息
*/
@Override
public void refreshBillBatch(Long paymentOrganization, String billMonth) {
ExecutorService taskExecutor = Executors.newCachedThreadPool();
taskExecutor.execute(() -> {
if (paymentOrganization != null && billMonth != null) {
InsuranceAccountDetailParam refreshParam =new InsuranceAccountDetailParam();
refreshParam.setBillMonth(billMonth);
refreshParam.setPaymentOrganization(paymentOrganization.toString());
PageInfo<InsuranceAccountViewListDTO> pageInfos = overView(refreshParam);
TaxAgentPO taxAgentPo = getTaxAgentMapper().getById(paymentOrganization);
if (taxAgentPo != null) {
List<InsuranceAccountViewListDTO> viewListDTOList = pageInfos.getList();
viewListDTOList.stream().filter(f -> f.getPayOrg().equals(taxAgentPo.getName())).collect(Collectors.toList());
InsuranceAccountBatchPO batchPO = getInsuranceAccountBatchMapper().getByBillMonth(billMonth, paymentOrganization);
batchPO = SiAccountEncrypt.decryptInsuranceAccountBatch(batchPO);
//更新
if (viewListDTOList.size() > 0 && batchPO != null) {
InsuranceAccountViewListDTO viewListDTO = viewListDTOList.get(0);
batchPO.setSocialNum(viewListDTO.getSocialNum());
batchPO.setFundNum(viewListDTO.getFundNum());
batchPO.setOtherNum(viewListDTO.getOtherNum());
batchPO.setSocialPay(viewListDTO.getSocialPaySum().replace(",", ""));
batchPO.setFundPay(viewListDTO.getFundPaySum().replace(",", ""));
batchPO.setOtherPay(viewListDTO.getOtherPaySum().replace(",", ""));
batchPO.setUpdateTime(new Date());
batchPO = SiAccountEncrypt.encryptInsuranceAccountBatch(batchPO);
getInsuranceAccountBatchMapper().updateById(batchPO);
}
}
}
});
}
/**
* 将通过id获取InsuranceAccountDetailPO中的社保公积金其他福利个人和公司缴纳数据
*/

View File

@ -17,8 +17,8 @@ import com.engine.salary.encrypt.siarchives.InsuranceArchivesOtherSchemePOEncryp
import com.engine.salary.encrypt.siarchives.InsuranceArchivesSocialSchemePOEncrypt;
import com.engine.salary.encrypt.sischeme.InsuranceSchemeDetailPOEncrypt;
import com.engine.salary.entity.datacollection.DataCollectionEmployee;
import com.engine.salary.entity.salaryarchive.po.SalaryArchivePO;
import com.engine.salary.entity.siarchives.param.InsuranceArchivesListParam;
import com.engine.salary.entity.siarchives.param.SIArchiveImportActionParam;
import com.engine.salary.entity.siarchives.po.*;
import com.engine.salary.entity.sicategory.po.ICategoryPO;
import com.engine.salary.entity.sischeme.dto.InsuranceSchemeListDTO;
@ -64,11 +64,11 @@ import org.apache.commons.lang3.math.NumberUtils;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.util.IOUtils;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.xpath.operations.Bool;
import weaver.file.ImageFileManager;
import weaver.hrm.User;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
@ -713,26 +713,55 @@ public class SISchemeServiceImpl extends Service implements SISchemeService {
public boolean singleAccountCheck(List<Map<String, Object>> singleAccount, Map<Long, String> welfareMap, List<InsuranceArchivesAccountPO> insuranceArchivesAccountPOS, List<DataCollectionEmployee> employeeByIds, List<Map<String, String>> excelComments, int i, Map<String, Long> schemeNameIdMap, Map<String, Long> paymentNameIdMap, Long creator, int index, Boolean openDevolution, List<TaxAgentManageRangeEmployeeDTO> taxAgentManageRangeEmployeeTree, String runStatus) {
boolean isError = false;
String userName = (String) singleAccount.get(0).get(SalaryI18nUtil.getI18nLabel(85429, "姓名"));
String deparmentName = (String) singleAccount.get(1).get(SalaryI18nUtil.getI18nLabel(86185, "部门"));
String mobile = (String) singleAccount.get(2).get(SalaryI18nUtil.getI18nLabel(86186, "手机号"));
String userStatus = (String) singleAccount.get(3).get(SalaryI18nUtil.getI18nLabel(86187, "员工状态"));
String workcode = (String) singleAccount.get(4).get(SalaryI18nUtil.getI18nLabel(86317, "工号"));
// String userName = (String) singleAccount.get(0).get(SalaryI18nUtil.getI18nLabel(85429, "姓名"));
// String deparmentName = (String) singleAccount.get(1).get(SalaryI18nUtil.getI18nLabel(86185, "部门"));
// String mobile = (String) singleAccount.get(2).get(SalaryI18nUtil.getI18nLabel(86186, "手机号"));
// String userStatus = (String) singleAccount.get(3).get(SalaryI18nUtil.getI18nLabel(86187, "员工状态"));
// String workcode = (String) singleAccount.get(4).get(SalaryI18nUtil.getI18nLabel(86317, "工号"));
Map<String, Object> userNameMap = findElement(singleAccount, SalaryI18nUtil.getI18nLabel(85429, "姓名"));
Map<String, Object> deparmentNameMap = findElement(singleAccount, SalaryI18nUtil.getI18nLabel(86185, "部门"));
Map<String, Object> mobileMap = findElement(singleAccount, SalaryI18nUtil.getI18nLabel(86186, "手机号"));
Map<String, Object> userStatusMap = findElement(singleAccount, SalaryI18nUtil.getI18nLabel(86187, "员工状态"));
Map<String, Object> workcodeMap = findElement(singleAccount, SalaryI18nUtil.getI18nLabel(86317, "工号"));
Map<String, Object> employeeIdMap = findElement(singleAccount, SalaryI18nUtil.getI18nLabel(86187, "员工id"));
String userName = (String) userNameMap.get(SalaryI18nUtil.getI18nLabel(85429, "姓名"));
String deparmentName = (String) deparmentNameMap.get(SalaryI18nUtil.getI18nLabel(86185, "部门"));
String mobile = (String) mobileMap.get(SalaryI18nUtil.getI18nLabel(86186, "手机号"));
String userStatus = (String) userStatusMap.get(SalaryI18nUtil.getI18nLabel(86187, "员工状态"));
String workcode = (String) workcodeMap.get(SalaryI18nUtil.getI18nLabel(86317, "工号"));
String toAddEmployeeId;
if (employeeIdMap.isEmpty()) {
toAddEmployeeId = null;
} else {
toAddEmployeeId = employeeIdMap.get(SalaryI18nUtil.getI18nLabel(86187, "员工id")).toString();
}
Long addEmployeeId = StringUtils.isNotBlank(toAddEmployeeId) ? Long.valueOf(toAddEmployeeId) : null;
//查询对于人员信息导入筛选的全局配置
SalarySysConfPO salarySysConfPO = getSalarySysConfMapper().getOneByCode("matchEmployeeMode");
String confValue = (salarySysConfPO != null && salarySysConfPO.getConfValue() != null && !"".equals(salarySysConfPO.getConfValue())) ? salarySysConfPO.getConfValue() : "0";
String rowIndex = "" + index + "";
//仅在全局人员筛选配置为0才对用户名部门名称手机号有要求
if (StringUtils.isBlank(userName) && StringUtils.isBlank(deparmentName) && StringUtils.isBlank(mobile) && "0".equals(confValue)) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", rowIndex + " 用户名、部门名称、手机号" + SalaryI18nUtil.getI18nLabel(100303, "不能同时为空"));
excelComments.add(errorMessageMap);
isError = true;
List<DataCollectionEmployee> employees = new ArrayList<>();
//当新增数据中包含员工id信息时直接根据员工id获取员工信息
if (addEmployeeId == null) {
//仅在全局人员筛选配置为0才对用户名部门名称手机号有要求
if (StringUtils.isBlank(userName) && StringUtils.isBlank(deparmentName) && StringUtils.isBlank(mobile) && "0".equals(confValue)) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", rowIndex + " 用户名、部门名称、手机号" + SalaryI18nUtil.getI18nLabel(100303, "不能同时为空"));
excelComments.add(errorMessageMap);
isError = true;
}
//筛选导入人员信息可以在人力资源池中匹配到的人员信息
employees = getSalaryEmployeeService(user).matchImportEmployee(employeeByIds, userName, deparmentName, mobile, workcode, null);
} else {
employees = employeeByIds.stream().filter(f -> f.getEmployeeId().equals(addEmployeeId)).collect(Collectors.toList());
}
//筛选导入人员信息可以在人力资源池中匹配到的人员信息
List<DataCollectionEmployee> employees = getSalaryEmployeeService(user).matchImportEmployee(employeeByIds, userName, deparmentName, mobile, workcode, null);
if (CollectionUtils.isEmpty(employees)) {
Map<String, String> errorMessageMap = Maps.newHashMap();
@ -830,67 +859,67 @@ public class SISchemeServiceImpl extends Service implements SISchemeService {
String socialStartMonth = (String) socialStartTimeMap.get(SalaryI18nUtil.getI18nLabel(91319, "社保起始缴纳月"));
// if (StringUtils.isNotBlank(socialStartMonth) && socialStartMonth.length() > 7) {
// socialStartMonth = socialStartMonth.substring(0, 7);
// }
if (StringUtils.isNotBlank(socialStartMonth) && (!SalaryDateUtil.checkYearMonth(socialStartMonth) || socialStartMonth.length() != 7)) {
if (StringUtils.isNotBlank(socialStartMonth) && socialStartMonth.length() > 7) {
socialStartMonth = socialStartMonth.substring(0, 7);
}
if (StringUtils.isNotBlank(socialStartMonth) && !SalaryDateUtil.checkYearMonth(socialStartMonth)) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100315, "社保起始缴纳时间格式错误,正确格式为YYYY-MM"));
errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100315, "社保起始缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd"));
excelComments.add(errorMessageMap);
isError = true;
}
String socialEndMonth = (String) socialEndTimeMap.get(SalaryI18nUtil.getI18nLabel(91320, "社保最后缴纳月"));
// if (StringUtils.isNotBlank(socialEndMonth) && socialEndMonth.length() > 7) {
// socialEndMonth = socialEndMonth.substring(0, 7);
// }
if (StringUtils.isNotBlank(socialEndMonth) && (!SalaryDateUtil.checkYearMonth(socialEndMonth) || socialEndMonth.length() != 7)) {
if (StringUtils.isNotBlank(socialEndMonth) && socialEndMonth.length() > 7) {
socialEndMonth = socialEndMonth.substring(0, 7);
}
if (StringUtils.isNotBlank(socialEndMonth) && !SalaryDateUtil.checkYearMonth(socialEndMonth)) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100316, "社保最后缴纳时间格式错误,正确格式为YYYY-MM"));
errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100316, "社保最后缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd"));
excelComments.add(errorMessageMap);
isError = true;
}
String fundStartMonth = (String) fundStartTimeMap.get(SalaryI18nUtil.getI18nLabel(91483, "公积金起始缴纳月"));
// if (StringUtils.isNotBlank(fundStartMonth) && fundStartMonth.length() > 7) {
// fundStartMonth = fundStartMonth.substring(0, 7);
// }
if (StringUtils.isNotBlank(fundStartMonth) && (!SalaryDateUtil.checkYearMonth(fundStartMonth) || fundStartMonth.length() != 7)) {
if (StringUtils.isNotBlank(fundStartMonth) && fundStartMonth.length() > 7) {
fundStartMonth = fundStartMonth.substring(0, 7);
}
if (StringUtils.isNotBlank(fundStartMonth) && !SalaryDateUtil.checkYearMonth(fundStartMonth)) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100317, "公积金起始缴纳时间格式错误,正确格式为YYYY-MM"));
errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100317, "公积金起始缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd"));
excelComments.add(errorMessageMap);
isError = true;
}
String fundEndMonth = (String) fundEndTimeMap.get(SalaryI18nUtil.getI18nLabel(91484, "公积金最后缴纳月"));
// if (StringUtils.isNotBlank(fundEndMonth) && fundEndMonth.length() > 7) {
// fundEndMonth = fundEndMonth.substring(0, 7);
// }
if (StringUtils.isNotBlank(fundEndMonth) && (!SalaryDateUtil.checkYearMonth(fundEndMonth) || fundEndMonth.length() != 7)) {
if (StringUtils.isNotBlank(fundEndMonth) && fundEndMonth.length() > 7) {
fundEndMonth = fundEndMonth.substring(0, 7);
}
if (StringUtils.isNotBlank(fundEndMonth) && !SalaryDateUtil.checkYearMonth(fundEndMonth)) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100319, "公积金最后缴纳时间格式错误,正确格式为YYYY-MM"));
errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100319, "公积金最后缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd"));
excelComments.add(errorMessageMap);
isError = true;
}
String otherStartMonth = (String) otherStartTimeMap.get(SalaryI18nUtil.getI18nLabel(91490, "其他福利起始缴纳月"));
// if (StringUtils.isNotBlank(otherStartMonth) && otherStartMonth.length() > 7) {
// otherStartMonth = otherStartMonth.substring(0, 7);
// }
if (StringUtils.isNotBlank(otherStartMonth) && (!SalaryDateUtil.checkYearMonth(otherStartMonth) || otherStartMonth.length() != 7)) {
if (StringUtils.isNotBlank(otherStartMonth) && otherStartMonth.length() > 7) {
otherStartMonth = otherStartMonth.substring(0, 7);
}
if (StringUtils.isNotBlank(otherStartMonth) && !SalaryDateUtil.checkYearMonth(otherStartMonth)) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100320, "其他福利起始缴纳时间格式错误,正确格式为YYYY-MM"));
errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100320, "其他福利起始缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd"));
excelComments.add(errorMessageMap);
isError = true;
}
String otherEndMonth = (String) otherEndTimeMap.get(SalaryI18nUtil.getI18nLabel(91494, "其他福利最后缴纳月"));
// if (StringUtils.isNotBlank(otherEndMonth) && otherEndMonth.length() > 7) {
// otherEndMonth = otherEndMonth.substring(0, 7);
// }
if (StringUtils.isNotBlank(otherEndMonth) && (!SalaryDateUtil.checkYearMonth(otherEndMonth) || otherEndMonth.length() != 7)) {
if (StringUtils.isNotBlank(otherEndMonth) && otherEndMonth.length() > 7) {
otherEndMonth = otherEndMonth.substring(0, 7);
}
if (StringUtils.isNotBlank(otherEndMonth) && !SalaryDateUtil.checkYearMonth(otherEndMonth)) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100321, "其他福利最后缴纳时间格式错误,正确格式为YYYY-MM"));
errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100321, "其他福利最后缴纳时间格式错误,正确格式为YYYY-MM或者yyyy-MM-dd"));
excelComments.add(errorMessageMap);
isError = true;
}
@ -908,7 +937,12 @@ public class SISchemeServiceImpl extends Service implements SISchemeService {
excelComments.add(errorMessageMap);
isError = true;
} else {
} else if (StringUtils.isNotBlank((String) socialMap.get(SalaryI18nUtil.getI18nLabel(91323, "社保方案名称"))) && StringUtils.isBlank(socialStartMonth)) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100322, "社保方案已设置,但未设置社保起始缴纳时间!"));
excelComments.add(errorMessageMap);
isError = true;
}else {
insuranceArchivesSocialSchemePO = buildSocialPO(employeeId, welfareMap, singleAccount, schemeNameIdMap, paymentNameIdMap, creator);
}
if (StringUtils.isNotBlank((String) fundMap.get(SalaryI18nUtil.getI18nLabel(91485, "公积金方案名称"))) && schemeNameIdMap.get((String) fundMap.get(SalaryI18nUtil.getI18nLabel(91485, "公积金方案名称"))) == null) {
@ -925,7 +959,12 @@ public class SISchemeServiceImpl extends Service implements SISchemeService {
excelComments.add(errorMessageMap);
isError = true;
}else {
} else if (StringUtils.isNotBlank((String) fundMap.get(SalaryI18nUtil.getI18nLabel(91485, "公积金方案名称"))) && StringUtils.isBlank(fundStartMonth)) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100322, "公积金方案已设置,但未设置公积金起始缴纳时间!"));
excelComments.add(errorMessageMap);
isError = true;
} else {
insuranceArchivesFundSchemePO = buildFundPO(employeeId, welfareMap, singleAccount, schemeNameIdMap, paymentNameIdMap, creator);
}
if (StringUtils.isNotBlank((String) otherMap.get(SalaryI18nUtil.getI18nLabel(91496, "其他福利方案名称"))) && schemeNameIdMap.get((String) otherMap.get(SalaryI18nUtil.getI18nLabel(91496, "其他福利方案名称"))) == null) {
@ -941,7 +980,12 @@ public class SISchemeServiceImpl extends Service implements SISchemeService {
errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100322, "其他福利方案不属于其他福利类型"));
excelComments.add(errorMessageMap);
isError = true;
}else {
} else if (StringUtils.isNotBlank((String) otherMap.get(SalaryI18nUtil.getI18nLabel(91496, "其他福利方案名称"))) && StringUtils.isBlank(otherStartMonth)) {
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", rowIndex + SalaryI18nUtil.getI18nLabel(100322, "其他福利方案已设置,但未设置其他福利起始缴纳时间!"));
excelComments.add(errorMessageMap);
isError = true;
} else {
insuranceArchivesOtherSchemePO = buildOtherPO(employeeId, welfareMap, singleAccount, schemeNameIdMap, paymentNameIdMap, creator);
}
/**************校验申报基数**************/
@ -1045,7 +1089,8 @@ public class SISchemeServiceImpl extends Service implements SISchemeService {
continue;
}
if (findElement(singleAccount, welfareMap.get(insuranceId) + SalaryI18nUtil.getI18nLabel(100293, "申报基数")) != null) {
socialPaymentBase.put(String.valueOf(insuranceId), (String) findElement(singleAccount, welfareMap.get(insuranceId) + SalaryI18nUtil.getI18nLabel(100293, "申报基数")).get(welfareMap.get(insuranceId) + SalaryI18nUtil.getI18nLabel(100293, "申报基数")));
String itemValue = (String) findElement(singleAccount, welfareMap.get(insuranceId) + SalaryI18nUtil.getI18nLabel(100293, "申报基数")).get(welfareMap.get(insuranceId) + SalaryI18nUtil.getI18nLabel(100293, "申报基数"));
socialPaymentBase.put(String.valueOf(insuranceId), StringUtils.isBlank(itemValue) ? "0" : itemValue);
}
}
insuranceArchivesSocialSchemePO.setSocialPaymentBaseString(JSON.toJSONString(socialPaymentBase));
@ -1096,7 +1141,8 @@ public class SISchemeServiceImpl extends Service implements SISchemeService {
continue;
}
if (findElement(singleAccount, welfareMap.get(insuranceId) + SalaryI18nUtil.getI18nLabel(100293, "申报基数")) != null) {
socialPaymentBase.put(String.valueOf(insuranceId), (String) findElement(singleAccount, welfareMap.get(insuranceId) + SalaryI18nUtil.getI18nLabel(100293, "申报基数")).get(welfareMap.get(insuranceId) + SalaryI18nUtil.getI18nLabel(100293, "申报基数")));
String itemValue = (String) findElement(singleAccount, welfareMap.get(insuranceId) + SalaryI18nUtil.getI18nLabel(100293, "申报基数")).get(welfareMap.get(insuranceId) + SalaryI18nUtil.getI18nLabel(100293, "申报基数"));
socialPaymentBase.put(String.valueOf(insuranceId), StringUtils.isBlank(itemValue) ? "0" : itemValue);
}
}
insuranceArchivesFundSchemePO.setFundPaymentBaseString(JSON.toJSONString(socialPaymentBase));
@ -1143,7 +1189,8 @@ public class SISchemeServiceImpl extends Service implements SISchemeService {
continue;
}
if (findElement(singleAccount, welfareMap.get(insuranceId) + SalaryI18nUtil.getI18nLabel(100293, "申报基数")) != null) {
socialPaymentBase.put(String.valueOf(insuranceId), (String) findElement(singleAccount, welfareMap.get(insuranceId) + SalaryI18nUtil.getI18nLabel(100293, "申报基数")).get(welfareMap.get(insuranceId) + SalaryI18nUtil.getI18nLabel(100293, "申报基数")));
String itemValue = (String) findElement(singleAccount, welfareMap.get(insuranceId) + SalaryI18nUtil.getI18nLabel(100293, "申报基数")).get(welfareMap.get(insuranceId) + SalaryI18nUtil.getI18nLabel(100293, "申报基数"));
socialPaymentBase.put(String.valueOf(insuranceId), StringUtils.isBlank(itemValue) ? "0" : itemValue);
}
}
insuranceArchivesOtherSchemePO.setOtherPaymentBaseString(JSON.toJSONString(socialPaymentBase));
@ -1258,4 +1305,140 @@ public class SISchemeServiceImpl extends Service implements SISchemeService {
}
/**
* 校验待新增的社保福利档案数据
* @param siArchiveImportActionParam
* @return
*/
@Override
public Map<String, Object> checkSIArchiveAdd(SIArchiveImportActionParam siArchiveImportActionParam) {
siArchiveImportActionParam.setAddData(false);
return processAddSIArchive(siArchiveImportActionParam);
}
/**
* 新增社保福利档案
* @param siArchiveImportActionParam
* @return
*/
@Override
public Map<String, Object> addSIArchive(SIArchiveImportActionParam siArchiveImportActionParam) {
siArchiveImportActionParam.setAddData(true);
return processAddSIArchive(siArchiveImportActionParam);
}
private Map<String, Object> processAddSIArchive(SIArchiveImportActionParam param) {
ValidUtil.doValidator(param);
if (StringUtils.isBlank(param.getRunStatus())) {
throw new SalaryRunTimeException("福利档案执行状态未在导入条件设置中添加!");
}
// List<ExcelSheet> excelSheets = message.getBatchFile().getExcelSheets();
// 租户key
// String tenantKey = message.getTenantKey().toLowerCase();
//操作员id
Long creator = (long) user.getUID();
//获取所有福利类型的id-name结合
Map<String, Long> schemeNameIdMap = schemeNameIdMap();
Map<Long, String> welfareMap = welfareMap();
// 获取所有个税扣缴义务人的名称和id的map
Map<String, Long> paymentNameIdMap;
//分权
Boolean openDevolution = getTaxAgentService().isOpenDevolution();
if (openDevolution) {
paymentNameIdMap = getTaxAgentService().listAllTaxAgentsAsAdmin((long) user.getUID()).stream().collect(Collectors.toMap(TaxAgentPO::getName, TaxAgentPO::getId));
} else {
paymentNameIdMap = getTaxAgentService().listAll().stream().collect(Collectors.toMap(TaxAgentPO::getName, TaxAgentPO::getId));
}
//获取所以个税扣缴义务人树型
List<TaxAgentManageRangeEmployeeDTO> taxAgentManageRangeEmployeeTree = getTaxAgentService().listTaxAgentAndEmployeeTree();
// 获取所有人员信息
List<DataCollectionEmployee> employeeByIds = employeeBiz.listEmployee();
int total = 0;
int index = 0;
int successCount = 0;
int errorCount = 0;
// 待导入数据
List<InsuranceArchivesAccountPO> insuranceArchivesAccountPOS = new ArrayList<>();
// 待导入数据
InputStream fileInputStream = null;
try {
// 表头
List<String> headers = new ArrayList<>();
if (param.getImportDatas().size() > 0) {
Map<String,Object> getHeadersMap = param.getImportDatas().get(0);
for (Map.Entry<String,Object> entry : getHeadersMap.entrySet()){
headers.add(entry.getKey());
}
} else {
throw new SalaryRunTimeException("新增福利档案数据为空!");
}
// 错误sheet数据
List<Map<String, Object>> errorData = new LinkedList<>();
// 错误提示
List<Map<String, String>> excelComments = new LinkedList<>();
// 处理数值
List<Map<String, Object>> data = param.getImportDatas();
total = data.size();
//当前sheel的单行记录
Map<String, Object> map;
for (int i = 0; i < data.size(); i++) {
index += 1;
map = data.get(i);
boolean isError;
List<Map<String, Object>> singleAccount = new ArrayList<>();
for (int j = 0; j < headers.size(); j++) {
//组装单条数据基础数据
String key = headers.get(j);
if (key == null) {
continue;
}
Map<String, Object> cellData = new HashMap<>();
cellData.put(key.toString(), Optional.ofNullable(map.get(key.toString())).orElse("").toString());
cellData.put("index", j);
singleAccount.add(cellData);
}
isError = singleAccountCheck(singleAccount, welfareMap, insuranceArchivesAccountPOS, employeeByIds, excelComments, errorCount + 1, schemeNameIdMap, paymentNameIdMap, creator, i + 2, openDevolution, taxAgentManageRangeEmployeeTree, param.getRunStatus());
if (isError) {
errorCount += 1;
// 添加错误数据
errorData.add(map);
} else {
successCount += 1;
}
// salaryBatchService.sendImportRate(message.getBizId(), total, index);
}
// 如果sheet包含错误数据
// if (CollectionUtils.isNotEmpty(errorData)) {
// salaryBatchService.createErrorExcelSheet(headers, errorData, excelSheet.getName(), excelComments, errorExcelSheets);
// }
// 数据入库处理
if (param.isAddData()) {
handleImportData(insuranceArchivesAccountPOS);
}
// 发送导入回调信息
// salaryBatchService.sendImportCallBackInfo(message, successCount, errorCount, errorExcelSheets);
Map<String, Object> apidatas = new HashMap<String, Object>();
apidatas.put("successCount", successCount);
apidatas.put("errorCount", errorCount);
apidatas.put("errorData", excelComments);
return apidatas;
} finally {
IOUtils.closeQuietly(fileInputStream);
}
}
}