weaver-hrm-salary/src/com/engine/salary/cmd/datacollection/AddUpSituationImportCmd.java

256 lines
11 KiB
Java
Raw Normal View History

2022-03-09 18:58:30 +08:00
package com.engine.salary.cmd.datacollection;
import com.engine.common.biz.AbstractCommonCommand;
import com.engine.common.entity.BizLogContext;
import com.engine.core.interceptor.CommandContext;
import com.engine.salary.biz.AddUpSituationBiz;
2022-03-10 17:57:46 +08:00
import com.engine.salary.biz.EmployBiz;
2022-03-09 18:58:30 +08:00
import com.engine.salary.biz.TaxAgentBiz;
import com.engine.salary.entity.datacollection.AddUpSituation;
import com.engine.salary.entity.datacollection.DataCollectionEmployee;
import com.engine.salary.entity.datacollection.dto.AddUpSituationDTO;
import com.engine.salary.entity.datacollection.param.AddUpSituationImportParam;
import com.engine.salary.entity.taxrate.TaxAgent;
import com.engine.salary.exception.SalaryRunTimeException;
import com.engine.salary.util.excel.ExcelParseHelper;
import com.google.common.collect.Maps;
import lombok.SneakyThrows;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.util.IOUtils;
import weaver.file.ImageFileManager;
import weaver.general.Util;
import weaver.hrm.User;
import javax.servlet.http.HttpServletRequest;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
import static com.engine.salary.constant.SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY;
public class AddUpSituationImportCmd extends AbstractCommonCommand<Map<String, Object>> {
protected HttpServletRequest request;
public AddUpSituationImportCmd(Map<String, Object> params, User user) {
this.user = user;
this.params = params;
}
@Override
public BizLogContext getLogContext() {
return null;
}
@SneakyThrows
@Override
public Map<String, Object> execute(CommandContext commandContext) {
Map<String, Object> apidatas = new HashMap<String, Object>();
2022-03-10 17:57:46 +08:00
EmployBiz employBiz = new EmployBiz();
2022-03-09 18:58:30 +08:00
AddUpSituationBiz biz = new AddUpSituationBiz();
//检验参数
checkImportParam();
//导入参数
AddUpSituationImportParam importParam = (AddUpSituationImportParam) params.get("importParam");
//excel文件id
String imageId = Util.null2String(importParam.getImageId());
//税款所属期
String taxYearMonthStr = Util.null2String(importParam.getTaxYearMonth());
InputStream fileInputStream = null;
2022-03-09 16:40:14 +08:00
// try {
2022-03-09 18:58:30 +08:00
fileInputStream = ImageFileManager.getInputStreamById(Integer.valueOf(imageId));
2022-03-09 16:40:14 +08:00
// fileInputStream = new FileInputStream("C:\\Users\\钱涛\\Desktop\\salary\\addUpSituation\\importTemplate.xlsx");
// } catch (FileNotFoundException e) {
// e.printStackTrace();
// }
2022-03-09 18:58:30 +08:00
try {
List<AddUpSituationDTO> excelDates = ExcelParseHelper.parse(fileInputStream, AddUpSituationDTO.class, 0, 1, 21, "template.xlsx");
int total = excelDates.size();
int index = 0;
int successCount = 0;
int errorCount = 0;
//人员信息
2022-03-10 17:57:46 +08:00
List<DataCollectionEmployee> employees = employBiz.listEmployee();
2022-03-09 18:58:30 +08:00
List<TaxAgent> taxAgents = new TaxAgentBiz().listAll();
//税款所属期
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date taxYearMonth = simpleDateFormat.parse(taxYearMonthStr + "-01");
Date now = new Date();
// 错误excel内容
List<Map> errorData = new ArrayList<>();
//合规数据
List<AddUpSituation> eligibleData = new ArrayList<>();
for (int i = 0; i < excelDates.size(); i++) {
//excel中的数据
AddUpSituationDTO dto = excelDates.get(i);
//待插入数据库对象
AddUpSituation po = AddUpSituation.builder().tenantKey(DEFAULT_TENANT_KEY)
.createTime(now)
.updateTime(now)
.creator((long) user.getUID())
.year(Integer.valueOf(taxYearMonthStr.split("-")[0]))
.taxYearMonth(taxYearMonth)
.build();
//异常点数量
int errorSum = 0;
//行号
String rowIndex = String.format("第%s行", i + 2);
//相同的姓名
String userName = dto.getUsername();
String deparmentName = dto.getDepartmentName();
List<Long> employeeSameIds = employees.stream().filter(e -> (StringUtils.isBlank(userName) || Objects.equals(e.getUsername(), userName))
&& (StringUtils.isBlank(deparmentName) || Objects.equals(e.getDeparmentName(), deparmentName))).map(DataCollectionEmployee::getEmployeeId)
.collect(Collectors.toList());
if (StringUtils.isBlank(userName)) {
//姓名 不能为空
//错误消息对象
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) {
po.setEmployeeId(employeeId);
} 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<TaxAgent> optionalTemp = taxAgents.stream().filter(m -> m.getName().equals(taxAgentName)).findFirst();
if (optionalTemp.isPresent()) {
po.setTaxAgentId(optionalTemp.get().getId());
} else {
//个税扣缴义务人不存在
Map<String, String> errorMessageMap = Maps.newHashMap();
errorMessageMap.put("message", rowIndex + "个税扣缴义务人不存在");
errorData.add(errorMessageMap);
errorSum += 1;
}
}
//累计收入额
String addUpIncome = dto.getAddUpIncome();
po.setAddUpIncome(Util.null2String(addUpIncome));
//累计减除费用
String addUpSubtraction = dto.getAddUpSubtraction();
po.setAddUpSubtraction(addUpSubtraction);
//累计社保个人合计
String addUpSocialSecurityTotal = dto.getAddUpSocialSecurityTotal();
po.setAddUpSocialSecurityTotal(addUpSocialSecurityTotal);
//累计公积金个人合计
String addUpAccumulationFundTotal = dto.getAddUpAccumulationFundTotal();
po.setAddUpAccumulationFundTotal(addUpAccumulationFundTotal);
//累计子女教育
String addUpChildEducation = dto.getAddUpChildEducation();
po.setAddUpChildEducation(Util.null2String(addUpChildEducation));
//累计继续教育
String addUpContinuingEducation = dto.getAddUpContinuingEducation();
po.setAddUpContinuingEducation(Util.null2String(addUpContinuingEducation));
//累计住房贷款利息
String addUpHousingLoanInterest = dto.getAddUpHousingLoanInterest();
po.setAddUpHousingLoanInterest(Util.null2String(addUpHousingLoanInterest));
//累计住房租金
String addUpHousingRent = dto.getAddUpHousingRent();
po.setAddUpHousingRent(Util.null2String(addUpHousingRent));
//累计赡养老人
String addUpSupportElderly = dto.getAddUpSupportElderly();
po.setAddUpSupportElderly(Util.null2String(addUpSupportElderly));
//累计企业(职业)年金及其他福利
String addUpEnterpriseAndOther = dto.getAddUpEnterpriseAndOther();
po.setAddUpEnterpriseAndOther(addUpEnterpriseAndOther);
//累计其他扣除
String addUpOtherDeduction = dto.getAddUpOtherDeduction();
po.setAddUpOtherDeduction(addUpOtherDeduction);
//累计免税收入
String addUpTaxExemptIncome = dto.getAddUpTaxExemptIncome();
po.setAddUpTaxExemptIncome(addUpTaxExemptIncome);
//累计准予扣除的捐赠额
String addUpAllowedDonation = dto.getAddUpAllowedDonation();
po.setAddUpAllowedDonation(addUpAllowedDonation);
//累计已预扣预缴税额
String addUpAdvanceTax = dto.getAddUpAdvanceTax();
po.setAddUpAdvanceTax(addUpAdvanceTax);
if (errorSum == 0) {
successCount += 1;
// 合格数据
eligibleData.add(po);
} else {
errorCount += 1;
// 添加错误数据
}
}
//入库
biz.handleImportData(eligibleData);
apidatas.put("successCount", successCount);
apidatas.put("errorCount", errorCount);
apidatas.put("errorData", errorData);
} finally {
IOUtils.closeQuietly(fileInputStream);
}
return apidatas;
}
private void checkImportParam() {
AddUpSituationImportParam importParam = (AddUpSituationImportParam) params.get("importParam");
//excel文件id
String imageId = Util.null2String(importParam.getImageId());
//税款所属期
String declareMonthStr = Util.null2String(importParam.getTaxYearMonth());
if (StringUtils.isBlank(imageId)) {
throw new SalaryRunTimeException("文件不存在");
}
if (StringUtils.isBlank(declareMonthStr)) {
throw new SalaryRunTimeException("税款所属期为空");
}
}
}